From 401559c376078ef98e11c3034977b835b4086b5b Mon Sep 17 00:00:00 2001
From: mayaeh
Date: Fri, 13 Jul 2018 00:58:26 +0900
Subject: [PATCH 001/196] Fix whole-word selection and i18n: Add Japanese
translation for Whole-word (#8004)
* Add Japanese translation for "Whole word" and add it's description.
* Fix to enable "Whole-word" selection.
---
app/controllers/filters_controller.rb | 2 +-
config/locales/simple_form.en.yml | 2 ++
config/locales/simple_form.ja.yml | 2 ++
3 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/app/controllers/filters_controller.rb b/app/controllers/filters_controller.rb
index 03403a1ba..175dbab07 100644
--- a/app/controllers/filters_controller.rb
+++ b/app/controllers/filters_controller.rb
@@ -52,6 +52,6 @@ class FiltersController < ApplicationController
end
def resource_params
- params.require(:custom_filter).permit(:phrase, :expires_in, :irreversible, context: [])
+ params.require(:custom_filter).permit(:phrase, :expires_in, :irreversible, :whole_word, context: [])
end
end
diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml
index 49d94bcde..7d9a5d617 100644
--- a/config/locales/simple_form.en.yml
+++ b/config/locales/simple_form.en.yml
@@ -25,6 +25,7 @@ en:
setting_hide_network: Who you follow and who follows you will not be shown on your profile
setting_noindex: Affects your public profile and status pages
setting_theme: Affects how Mastodon looks when you're logged in from any device.
+ whole_word: When the keyword or phrase is alphanumeric only, it will only be applied if it matches the whole word
imports:
data: CSV file exported from another Mastodon instance
sessions:
@@ -77,6 +78,7 @@ en:
type: Import type
username: Username
username_or_email: Username or Email
+ whole_word: Whole word
interactions:
must_be_follower: Block notifications from non-followers
must_be_following: Block notifications from people you don't follow
diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml
index 7f7f3af19..af5d5d768 100644
--- a/config/locales/simple_form.ja.yml
+++ b/config/locales/simple_form.ja.yml
@@ -21,6 +21,7 @@ ja:
setting_hide_network: フォローとフォロワーの情報がプロフィールページで見られないようにします
setting_noindex: 公開プロフィールおよび各投稿ページに影響します
setting_theme: ログインしている全てのデバイスで適用されるデザインです。
+ whole_word: キーワードまたはフレーズが英数字のみの場合、単語全体と一致する場合のみ適用されるようになります
imports:
data: 他の Mastodon インスタンスからエクスポートしたCSVファイルを選択して下さい
sessions:
@@ -73,6 +74,7 @@ ja:
type: インポートする項目
username: ユーザー名
username_or_email: ユーザー名またはメールアドレス
+ whole_word: 単語全体にマッチ
interactions:
must_be_follower: フォロワー以外からの通知をブロック
must_be_following: フォローしていないユーザーからの通知をブロック
From e55dce3176b7ac0a23a8a652c2626707a1b74dbb Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Fri, 13 Jul 2018 02:16:06 +0200
Subject: [PATCH 002/196] Add federation relay support (#7998)
* Add federation relay support
* Add admin UI for managing relays
* Include actor on relay-related activities
* Fix i18n
---
app/controllers/admin/relays_controller.rb | 58 +++++++++++++++
app/javascript/styles/mastodon/admin.scss | 5 ++
app/models/relay.rb | 74 +++++++++++++++++++
app/policies/relay_policy.rb | 7 ++
.../activitypub/delete_actor_serializer.rb | 6 +-
.../activitypub/delete_serializer.rb | 6 +-
.../activitypub/undo_announce_serializer.rb | 6 +-
.../activitypub/update_serializer.rb | 6 +-
app/services/remove_status_service.rb | 12 +++
app/services/suspend_account_service.rb | 12 ++-
app/views/admin/relays/_relay.html.haml | 21 ++++++
app/views/admin/relays/index.html.haml | 20 +++++
app/views/admin/relays/new.html.haml | 13 ++++
.../activitypub/distribution_worker.rb | 12 +++
.../activitypub/update_distribution_worker.rb | 10 ++-
config/locales/en.yml | 8 ++
config/locales/simple_form.en.yml | 2 +
config/navigation.rb | 1 +
config/routes.rb | 7 ++
db/migrate/20180711152640_create_relays.rb | 12 +++
db/schema.rb | 11 ++-
spec/fabricators/relay_fabricator.rb | 4 +
spec/models/relay_spec.rb | 4 +
23 files changed, 309 insertions(+), 8 deletions(-)
create mode 100644 app/controllers/admin/relays_controller.rb
create mode 100644 app/models/relay.rb
create mode 100644 app/policies/relay_policy.rb
create mode 100644 app/views/admin/relays/_relay.html.haml
create mode 100644 app/views/admin/relays/index.html.haml
create mode 100644 app/views/admin/relays/new.html.haml
create mode 100644 db/migrate/20180711152640_create_relays.rb
create mode 100644 spec/fabricators/relay_fabricator.rb
create mode 100644 spec/models/relay_spec.rb
diff --git a/app/controllers/admin/relays_controller.rb b/app/controllers/admin/relays_controller.rb
new file mode 100644
index 000000000..1b02d3c36
--- /dev/null
+++ b/app/controllers/admin/relays_controller.rb
@@ -0,0 +1,58 @@
+# frozen_string_literal: true
+
+module Admin
+ class RelaysController < BaseController
+ before_action :set_relay, except: [:index, :new, :create]
+
+ def index
+ authorize :relay, :update?
+ @relays = Relay.all
+ end
+
+ def new
+ authorize :relay, :update?
+ @relay = Relay.new(inbox_url: Relay::PRESET_RELAY)
+ end
+
+ def create
+ authorize :relay, :update?
+
+ @relay = Relay.new(resource_params)
+
+ if @relay.save
+ @relay.enable!
+ redirect_to admin_relays_path
+ else
+ render action: :new
+ end
+ end
+
+ def destroy
+ authorize :relay, :update?
+ @relay.destroy
+ redirect_to admin_relays_path
+ end
+
+ def enable
+ authorize :relay, :update?
+ @relay.enable!
+ redirect_to admin_relays_path
+ end
+
+ def disable
+ authorize :relay, :update?
+ @relay.disable!
+ redirect_to admin_relays_path
+ end
+
+ private
+
+ def set_relay
+ @relay = Relay.find(params[:id])
+ end
+
+ def resource_params
+ params.require(:relay).permit(:inbox_url)
+ end
+ end
+end
diff --git a/app/javascript/styles/mastodon/admin.scss b/app/javascript/styles/mastodon/admin.scss
index 560b11ddf..42f507296 100644
--- a/app/javascript/styles/mastodon/admin.scss
+++ b/app/javascript/styles/mastodon/admin.scss
@@ -165,6 +165,11 @@
color: $valid-value-color;
font-weight: 500;
}
+
+ .negative-hint {
+ color: $error-value-color;
+ font-weight: 500;
+ }
}
.simple_form {
diff --git a/app/models/relay.rb b/app/models/relay.rb
new file mode 100644
index 000000000..76143bb27
--- /dev/null
+++ b/app/models/relay.rb
@@ -0,0 +1,74 @@
+# frozen_string_literal: true
+# == Schema Information
+#
+# Table name: relays
+#
+# id :bigint(8) not null, primary key
+# inbox_url :string default(""), not null
+# enabled :boolean default(FALSE), not null
+# follow_activity_id :string
+# created_at :datetime not null
+# updated_at :datetime not null
+#
+
+class Relay < ApplicationRecord
+ PRESET_RELAY = 'https://relay.joinmastodon.org/inbox'
+
+ validates :inbox_url, presence: true, uniqueness: true, url: true, if: :will_save_change_to_inbox_url?
+
+ scope :enabled, -> { where(enabled: true) }
+
+ before_destroy :ensure_disabled
+
+ def enable!
+ activity_id = ActivityPub::TagManager.instance.generate_uri_for(nil)
+ payload = Oj.dump(follow_activity(activity_id))
+
+ ActivityPub::DeliveryWorker.perform_async(payload, some_local_account.id, inbox_url)
+ update(enabled: true, follow_activity_id: activity_id)
+ end
+
+ def disable!
+ activity_id = ActivityPub::TagManager.instance.generate_uri_for(nil)
+ payload = Oj.dump(unfollow_activity(activity_id))
+
+ ActivityPub::DeliveryWorker.perform_async(payload, some_local_account.id, inbox_url)
+ update(enabled: false, follow_activity_id: nil)
+ end
+
+ private
+
+ def follow_activity(activity_id)
+ {
+ '@context': ActivityPub::TagManager::CONTEXT,
+ id: activity_id,
+ type: 'Follow',
+ actor: ActivityPub::TagManager.instance.uri_for(some_local_account),
+ object: ActivityPub::TagManager::COLLECTIONS[:public],
+ }
+ end
+
+ def unfollow_activity(activity_id)
+ {
+ '@context': ActivityPub::TagManager::CONTEXT,
+ id: activity_id,
+ type: 'Undo',
+ actor: ActivityPub::TagManager.instance.uri_for(some_local_account),
+ object: {
+ id: follow_activity_id,
+ type: 'Follow',
+ actor: ActivityPub::TagManager.instance.uri_for(some_local_account),
+ object: ActivityPub::TagManager::COLLECTIONS[:public],
+ },
+ }
+ end
+
+ def some_local_account
+ @some_local_account ||= Account.local.find_by(suspended: false)
+ end
+
+ def ensure_disabled
+ return unless enabled?
+ disable!
+ end
+end
diff --git a/app/policies/relay_policy.rb b/app/policies/relay_policy.rb
new file mode 100644
index 000000000..bd75e2197
--- /dev/null
+++ b/app/policies/relay_policy.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+class RelayPolicy < ApplicationPolicy
+ def update?
+ admin?
+ end
+end
diff --git a/app/serializers/activitypub/delete_actor_serializer.rb b/app/serializers/activitypub/delete_actor_serializer.rb
index dfea9db4a..ddf59be97 100644
--- a/app/serializers/activitypub/delete_actor_serializer.rb
+++ b/app/serializers/activitypub/delete_actor_serializer.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
class ActivityPub::DeleteActorSerializer < ActiveModel::Serializer
- attributes :id, :type, :actor
+ attributes :id, :type, :actor, :to
attribute :virtual_object, key: :object
def id
@@ -19,4 +19,8 @@ class ActivityPub::DeleteActorSerializer < ActiveModel::Serializer
def virtual_object
actor
end
+
+ def to
+ [ActivityPub::TagManager::COLLECTIONS[:public]]
+ end
end
diff --git a/app/serializers/activitypub/delete_serializer.rb b/app/serializers/activitypub/delete_serializer.rb
index 2bb65135f..5012a8383 100644
--- a/app/serializers/activitypub/delete_serializer.rb
+++ b/app/serializers/activitypub/delete_serializer.rb
@@ -17,7 +17,7 @@ class ActivityPub::DeleteSerializer < ActiveModel::Serializer
end
end
- attributes :id, :type, :actor
+ attributes :id, :type, :actor, :to
has_one :object, serializer: TombstoneSerializer
@@ -32,4 +32,8 @@ class ActivityPub::DeleteSerializer < ActiveModel::Serializer
def actor
ActivityPub::TagManager.instance.uri_for(object.account)
end
+
+ def to
+ [ActivityPub::TagManager::COLLECTIONS[:public]]
+ end
end
diff --git a/app/serializers/activitypub/undo_announce_serializer.rb b/app/serializers/activitypub/undo_announce_serializer.rb
index 839847e22..4fc042727 100644
--- a/app/serializers/activitypub/undo_announce_serializer.rb
+++ b/app/serializers/activitypub/undo_announce_serializer.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
class ActivityPub::UndoAnnounceSerializer < ActiveModel::Serializer
- attributes :id, :type, :actor
+ attributes :id, :type, :actor, :to
has_one :object, serializer: ActivityPub::ActivitySerializer
@@ -16,4 +16,8 @@ class ActivityPub::UndoAnnounceSerializer < ActiveModel::Serializer
def actor
ActivityPub::TagManager.instance.uri_for(object.account)
end
+
+ def to
+ [ActivityPub::TagManager::COLLECTIONS[:public]]
+ end
end
diff --git a/app/serializers/activitypub/update_serializer.rb b/app/serializers/activitypub/update_serializer.rb
index ebc667d96..48d7a1929 100644
--- a/app/serializers/activitypub/update_serializer.rb
+++ b/app/serializers/activitypub/update_serializer.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
class ActivityPub::UpdateSerializer < ActiveModel::Serializer
- attributes :id, :type, :actor
+ attributes :id, :type, :actor, :to
has_one :object, serializer: ActivityPub::ActorSerializer
@@ -16,4 +16,8 @@ class ActivityPub::UpdateSerializer < ActiveModel::Serializer
def actor
ActivityPub::TagManager.instance.uri_for(object)
end
+
+ def to
+ [ActivityPub::TagManager::COLLECTIONS[:public]]
+ end
end
diff --git a/app/services/remove_status_service.rb b/app/services/remove_status_service.rb
index 238099169..fb889140b 100644
--- a/app/services/remove_status_service.rb
+++ b/app/services/remove_status_service.rb
@@ -90,6 +90,18 @@ class RemoveStatusService < BaseService
ActivityPub::DeliveryWorker.push_bulk(@account.followers.inboxes) do |inbox_url|
[signed_activity_json, @account.id, inbox_url]
end
+
+ relay! if relayable?
+ end
+
+ def relayable?
+ @status.public_visibility?
+ end
+
+ def relay!
+ ActivityPub::DeliveryWorker.push_bulk(Relay.enabled.pluck(:inbox_url)) do |inbox_url|
+ [signed_activity_json, @account.id, inbox_url]
+ end
end
def salmon_xml
diff --git a/app/services/suspend_account_service.rb b/app/services/suspend_account_service.rb
index 708d15e37..0a98f5fb9 100644
--- a/app/services/suspend_account_service.rb
+++ b/app/services/suspend_account_service.rb
@@ -22,7 +22,13 @@ class SuspendAccountService < BaseService
end
def purge_content!
- ActivityPub::RawDistributionWorker.perform_async(delete_actor_json, @account.id) if @account.local?
+ if @account.local?
+ ActivityPub::RawDistributionWorker.perform_async(delete_actor_json, @account.id)
+
+ ActivityPub::DeliveryWorker.push_bulk(Relay.enabled.pluck(:inbox_url)) do |inbox_url|
+ [delete_actor_json, @account.id, inbox_url]
+ end
+ end
@account.statuses.reorder(nil).find_in_batches do |statuses|
BatchedRemoveStatusService.new.call(statuses)
@@ -59,12 +65,14 @@ class SuspendAccountService < BaseService
end
def delete_actor_json
+ return @delete_actor_json if defined?(@delete_actor_json)
+
payload = ActiveModelSerializers::SerializableResource.new(
@account,
serializer: ActivityPub::DeleteActorSerializer,
adapter: ActivityPub::Adapter
).as_json
- Oj.dump(ActivityPub::LinkedDataSignature.new(payload).sign!(@account))
+ @delete_actor_json = Oj.dump(ActivityPub::LinkedDataSignature.new(payload).sign!(@account))
end
end
diff --git a/app/views/admin/relays/_relay.html.haml b/app/views/admin/relays/_relay.html.haml
new file mode 100644
index 000000000..d974c80a6
--- /dev/null
+++ b/app/views/admin/relays/_relay.html.haml
@@ -0,0 +1,21 @@
+%tr
+ %td
+ %samp= relay.inbox_url
+ %td
+ - if relay.enabled?
+ %span.positive-hint
+ = fa_icon('check')
+ = ' '
+ = t 'admin.relays.enabled'
+ - else
+ %span.negative-hint
+ = fa_icon('times')
+ = ' '
+ = t 'admin.relays.disabled'
+ %td
+ - if relay.enabled?
+ = table_link_to 'power-off', t('admin.relays.disable'), disable_admin_relay_path(relay), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }
+ - else
+ = table_link_to 'power-off', t('admin.relays.enable'), enable_admin_relay_path(relay), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }
+
+ = table_link_to 'times', t('admin.relays.delete'), admin_relay_path(relay), method: :delete, data: { confirm: t('admin.accounts.are_you_sure') }
diff --git a/app/views/admin/relays/index.html.haml b/app/views/admin/relays/index.html.haml
new file mode 100644
index 000000000..1636a53f8
--- /dev/null
+++ b/app/views/admin/relays/index.html.haml
@@ -0,0 +1,20 @@
+- content_for :page_title do
+ = t('admin.relays.title')
+
+.simple_form
+ %p.hint= t('admin.relays.description_html')
+ = link_to @relays.empty? ? t('admin.relays.setup') : t('admin.relays.add_new'), new_admin_relay_path, class: 'block-button'
+
+- unless @relays.empty?
+ %hr.spacer
+
+ .table-wrapper
+ %table.table
+ %thead
+ %tr
+ %th= t('admin.relays.inbox_url')
+ %th= t('admin.relays.status')
+ %th
+ %tbody
+ = render @relays
+
diff --git a/app/views/admin/relays/new.html.haml b/app/views/admin/relays/new.html.haml
new file mode 100644
index 000000000..126794acf
--- /dev/null
+++ b/app/views/admin/relays/new.html.haml
@@ -0,0 +1,13 @@
+- content_for :page_title do
+ = t('admin.relays.add_new')
+
+= simple_form_for @relay, url: admin_relays_path do |f|
+ = render 'shared/error_messages', object: @relay
+
+ .field-group
+ = f.input :inbox_url, as: :string, wrapper: :with_block_label
+
+ .actions
+ = f.button :button, t('admin.relays.save_and_enable'), type: :submit
+
+ %p.hint.subtle-hint= t('admin.relays.enable_hint')
diff --git a/app/workers/activitypub/distribution_worker.rb b/app/workers/activitypub/distribution_worker.rb
index 14bb933c0..c2bfd4f2f 100644
--- a/app/workers/activitypub/distribution_worker.rb
+++ b/app/workers/activitypub/distribution_worker.rb
@@ -14,6 +14,8 @@ class ActivityPub::DistributionWorker
ActivityPub::DeliveryWorker.push_bulk(inboxes) do |inbox_url|
[signed_payload, @account.id, inbox_url]
end
+
+ relay! if relayable?
rescue ActiveRecord::RecordNotFound
true
end
@@ -24,6 +26,10 @@ class ActivityPub::DistributionWorker
@status.direct_visibility?
end
+ def relayable?
+ @status.public_visibility?
+ end
+
def inboxes
@inboxes ||= @account.followers.inboxes
end
@@ -39,4 +45,10 @@ class ActivityPub::DistributionWorker
adapter: ActivityPub::Adapter
).as_json
end
+
+ def relay!
+ ActivityPub::DeliveryWorker.push_bulk(Relay.enabled.pluck(:inbox_url)) do |inbox_url|
+ [signed_payload, @account.id, inbox_url]
+ end
+ end
end
diff --git a/app/workers/activitypub/update_distribution_worker.rb b/app/workers/activitypub/update_distribution_worker.rb
index f3377dcec..87efafb3e 100644
--- a/app/workers/activitypub/update_distribution_worker.rb
+++ b/app/workers/activitypub/update_distribution_worker.rb
@@ -9,7 +9,11 @@ class ActivityPub::UpdateDistributionWorker
@account = Account.find(account_id)
ActivityPub::DeliveryWorker.push_bulk(inboxes) do |inbox_url|
- [payload, @account.id, inbox_url]
+ [signed_payload, @account.id, inbox_url]
+ end
+
+ ActivityPub::DeliveryWorker.push_bulk(Relay.enabled.pluck(:inbox_url)) do |inbox_url|
+ [signed_payload, @account.id, inbox_url]
end
rescue ActiveRecord::RecordNotFound
true
@@ -21,6 +25,10 @@ class ActivityPub::UpdateDistributionWorker
@inboxes ||= @account.followers.inboxes
end
+ def signed_payload
+ @signed_payload ||= Oj.dump(ActivityPub::LinkedDataSignature.new(payload).sign!(@account))
+ end
+
def payload
@payload ||= ActiveModelSerializers::SerializableResource.new(
@account,
diff --git a/config/locales/en.yml b/config/locales/en.yml
index a03b12a39..ec08f0d78 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -261,6 +261,14 @@ en:
expired: Expired
title: Filter
title: Invites
+ relays:
+ add_new: Add new relay
+ description_html: A federation relay is an intermediary server that exchanges large volumes of public toots between servers that subscribe and publish to it. It can help small and medium servers discover content from the fediverse , which would otherwise require local users manually following other people on remote servers.
+ enable_hint: Once enabled, your server will subscribe to all public toots from this relay, and will begin sending this server's public toots to it.
+ inbox_url: Relay URL
+ setup: Setup a relay connection
+ status: Status
+ title: Relays
report_notes:
created_msg: Report note successfully created!
destroyed_msg: Report note successfully deleted!
diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml
index 7d9a5d617..9ff548f40 100644
--- a/config/locales/simple_form.en.yml
+++ b/config/locales/simple_form.en.yml
@@ -13,6 +13,7 @@ en:
other: %{count} characters left
fields: You can have up to 4 items displayed as a table on your profile
header: PNG, GIF or JPG. At most 2MB. Will be downscaled to 700x335px
+ inbox_url: Copy the URL from the frontpage of the relay you want to use
irreversible: Filtered toots will disappear irreversibly, even if filter is later removed
locale: The language of the user interface, e-mails and push notifications
locked: Requires you to manually approve followers
@@ -52,6 +53,7 @@ en:
expires_in: Expire after
fields: Profile metadata
header: Header
+ inbox_url: URL of the relay inbox
irreversible: Drop instead of hide
locale: Interface language
locked: Lock account
diff --git a/config/navigation.rb b/config/navigation.rb
index 3f2e913c6..a13ad6f43 100644
--- a/config/navigation.rb
+++ b/config/navigation.rb
@@ -36,6 +36,7 @@ SimpleNavigation::Configuration.run do |navigation|
primary.item :admin, safe_join([fa_icon('cogs fw'), t('admin.title')]), proc { current_user.admin? ? edit_admin_settings_url : admin_custom_emojis_url }, if: proc { current_user.staff? } do |admin|
admin.item :settings, safe_join([fa_icon('cogs fw'), t('admin.settings.title')]), edit_admin_settings_url, if: -> { current_user.admin? }
admin.item :custom_emojis, safe_join([fa_icon('smile-o fw'), t('admin.custom_emojis.title')]), admin_custom_emojis_url, highlights_on: %r{/admin/custom_emojis}
+ admin.item :relays, safe_join([fa_icon('exchange fw'), t('admin.relays.title')]), admin_relays_url, if: -> { current_user.admin? }, highlights_on: %r{/admin/relays}
admin.item :subscriptions, safe_join([fa_icon('paper-plane-o fw'), t('admin.subscriptions.title')]), admin_subscriptions_url, if: -> { current_user.admin? }
admin.item :sidekiq, safe_join([fa_icon('diamond fw'), 'Sidekiq']), sidekiq_url, link_html: { target: 'sidekiq' }, if: -> { current_user.admin? }
admin.item :pghero, safe_join([fa_icon('database fw'), 'PgHero']), pghero_url, link_html: { target: 'pghero' }, if: -> { current_user.admin? }
diff --git a/config/routes.rb b/config/routes.rb
index fd26b4aa7..3d0da1a85 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -131,6 +131,13 @@ Rails.application.routes.draw do
resource :settings, only: [:edit, :update]
resources :invites, only: [:index, :create, :destroy]
+ resources :relays, only: [:index, :new, :create, :destroy] do
+ member do
+ post :enable
+ post :disable
+ end
+ end
+
resources :instances, only: [:index] do
collection do
post :resubscribe
diff --git a/db/migrate/20180711152640_create_relays.rb b/db/migrate/20180711152640_create_relays.rb
new file mode 100644
index 000000000..8762f473a
--- /dev/null
+++ b/db/migrate/20180711152640_create_relays.rb
@@ -0,0 +1,12 @@
+class CreateRelays < ActiveRecord::Migration[5.2]
+ def change
+ create_table :relays do |t|
+ t.string :inbox_url, default: '', null: false
+ t.boolean :enabled, default: false, null: false, index: true
+
+ t.string :follow_activity_id
+
+ t.timestamps
+ end
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 02032c548..e0da669c4 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 2018_07_07_154237) do
+ActiveRecord::Schema.define(version: 2018_07_11_152640) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -371,6 +371,15 @@ ActiveRecord::Schema.define(version: 2018_07_07_154237) do
t.index ["status_id", "preview_card_id"], name: "index_preview_cards_statuses_on_status_id_and_preview_card_id"
end
+ create_table "relays", force: :cascade do |t|
+ t.string "inbox_url", default: "", null: false
+ t.boolean "enabled", default: false, null: false
+ t.string "follow_activity_id"
+ t.datetime "created_at", null: false
+ t.datetime "updated_at", null: false
+ t.index ["enabled"], name: "index_relays_on_enabled"
+ end
+
create_table "report_notes", force: :cascade do |t|
t.text "content", null: false
t.bigint "report_id", null: false
diff --git a/spec/fabricators/relay_fabricator.rb b/spec/fabricators/relay_fabricator.rb
new file mode 100644
index 000000000..2c9df4ad3
--- /dev/null
+++ b/spec/fabricators/relay_fabricator.rb
@@ -0,0 +1,4 @@
+Fabricator(:relay) do
+ inbox_url "https://example.com/inbox"
+ enabled true
+end
diff --git a/spec/models/relay_spec.rb b/spec/models/relay_spec.rb
new file mode 100644
index 000000000..12dc0f20f
--- /dev/null
+++ b/spec/models/relay_spec.rb
@@ -0,0 +1,4 @@
+require 'rails_helper'
+
+RSpec.describe Relay, type: :model do
+end
From 37d428dfaf7c295b1adc32ec105fad5321783e02 Mon Sep 17 00:00:00 2001
From: Petko Bordjukov
Date: Sat, 14 Jul 2018 02:46:27 +0300
Subject: [PATCH 003/196] Update uws dependency to 10.148.0 (#7448)
This release fixes issues with open events, adds Node 10 support
and drops Node 4, 5, 6 and 7.
Changes: https://github.com/elementengineering/uWebSockets-bindings/compare/6152fb6787704a61584f920eb27ff5441d3c8c8f...689c15c59e5065b22415266f398ed29118dbe562
---
package.json | 2 +-
yarn.lock | 6 +++---
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/package.json b/package.json
index 5b39f015e..717607764 100644
--- a/package.json
+++ b/package.json
@@ -116,7 +116,7 @@
"throng": "^4.0.0",
"tiny-queue": "^0.2.1",
"uuid": "^3.1.0",
- "uws": "^8.14.0",
+ "uws": "^10.148.0",
"webpack": "^3.9.1",
"webpack-bundle-analyzer": "^2.9.1",
"webpack-manifest-plugin": "^1.2.1",
diff --git a/yarn.lock b/yarn.lock
index 641835149..5f3d051ec 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -7526,9 +7526,9 @@ uuid@^3.0.0, uuid@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04"
-uws@^8.14.0:
- version "8.14.1"
- resolved "https://registry.yarnpkg.com/uws/-/uws-8.14.1.tgz#de09619f305f6174d5516a9c6942cb120904b20b"
+uws@^10.148.0:
+ version "10.148.0"
+ resolved "https://registry.yarnpkg.com/uws/-/uws-10.148.0.tgz#3fcd35f083ca515e091cd33b2d78f0f51a666215"
validate-npm-package-license@^3.0.1:
version "3.0.1"
From c8c25ea7eb07d080d3394c3a47038bdd977dab3d Mon Sep 17 00:00:00 2001
From: Jeong Arm
Date: Sat, 14 Jul 2018 08:47:10 +0900
Subject: [PATCH 004/196] Add dependencies for uWebSockets (#7466)
UWS needs openssl and zlib https://github.com/uNetworking/uWebSockets/wiki/Misc.-details#dependencies
---
Aptfile | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Aptfile b/Aptfile
index 5dac83607..60d24f8b3 100644
--- a/Aptfile
+++ b/Aptfile
@@ -5,6 +5,8 @@ libidn11
libidn11-dev
libpq-dev
libprotobuf-dev
+libssl-dev
libxdamage1
libxfixes3
protobuf-compiler
+zlib1g-dev
From 47c59591e06c531fb66444b79c45cde13545ccc8 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Sat, 14 Jul 2018 03:44:23 +0200
Subject: [PATCH 005/196] Do not count self in potential friendships (#8014)
---
app/lib/potential_friendship_tracker.rb | 2 ++
1 file changed, 2 insertions(+)
diff --git a/app/lib/potential_friendship_tracker.rb b/app/lib/potential_friendship_tracker.rb
index 362482669..017a9748d 100644
--- a/app/lib/potential_friendship_tracker.rb
+++ b/app/lib/potential_friendship_tracker.rb
@@ -12,6 +12,8 @@ class PotentialFriendshipTracker
class << self
def record(account_id, target_account_id, action)
+ return if account_id == target_account_id
+
key = "interactions:#{account_id}"
weight = WEIGHTS[action]
From 9b75dee31638da942553e60bc47ff9275ba09dad Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Sat, 14 Jul 2018 03:54:11 +0200
Subject: [PATCH 006/196] Weblate translations (2018-07-14) (#8016)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* Translated using Weblate (Slovak)
Currently translated at 97.7% (622 of 636 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/sk/
* Translated using Weblate (Dutch)
Currently translated at 100.0% (636 of 636 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/nl/
* Translated using Weblate (Czech)
Currently translated at 100.0% (306 of 306 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/cs/
* Translated using Weblate (Japanese)
Currently translated at 99.8% (635 of 636 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Japanese)
Currently translated at 93.5% (73 of 78 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/ja/
* Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (98 of 98 strings)
Translation: Mastodon/Doorkeeper
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/pt_BR/
* Translated using Weblate (Greek)
Currently translated at 100.0% (306 of 306 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/el/
* Translated using Weblate (Occitan)
Currently translated at 100.0% (306 of 306 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/oc/
* Translated using Weblate (Slovak)
Currently translated at 100.0% (306 of 306 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/sk/
* Translated using Weblate (German)
Currently translated at 100.0% (78 of 78 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/de/
Eine Option ist "nie", also muss es das Ablaufdatum sein, nicht das Datum bis wann es gültig ist
* Translated using Weblate (Japanese)
Currently translated at 99.6% (305 of 306 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/ja/
* Translated using Weblate (Japanese)
Currently translated at 100.0% (98 of 98 strings)
Translation: Mastodon/Doorkeeper
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/ja/
* Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (306 of 306 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/pt_BR/
* Translated using Weblate (Greek)
Currently translated at 100.0% (80 of 80 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/el/
* Translated using Weblate (Slovak)
Currently translated at 98.7% (79 of 80 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/sk/
* Translated using Weblate (Slovak)
Currently translated at 97.7% (622 of 636 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/sk/
* Translated using Weblate (Danish)
Currently translated at 100.0% (80 of 80 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/da/
* Translated using Weblate (Galician)
Currently translated at 100.0% (643 of 643 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/gl/
* Translated using Weblate (Galician)
Currently translated at 100.0% (82 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/gl/
* Translated using Weblate (Persian)
Currently translated at 100.0% (306 of 306 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/fa/
* Translated using Weblate (Persian)
Currently translated at 100.0% (82 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/fa/
* Translated using Weblate (Japanese)
Currently translated at 93.9% (77 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/ja/
* Translated using Weblate (Japanese)
Currently translated at 99.2% (638 of 643 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Japanese)
Currently translated at 99.3% (639 of 643 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Danish)
Currently translated at 77.2% (497 of 643 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/da/
* Translated using Weblate (Greek)
Currently translated at 100.0% (82 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/el/
* Translated using Weblate (Greek)
Currently translated at 99.8% (642 of 643 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/el/
* Translated using Weblate (Dutch)
Currently translated at 100.0% (82 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/nl/
* Translated using Weblate (Dutch)
Currently translated at 100.0% (306 of 306 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/nl/
* Translated using Weblate (Dutch)
Currently translated at 100.0% (643 of 643 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/nl/
* Translated using Weblate (Slovak)
Currently translated at 98.7% (81 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/sk/
* Translated using Weblate (Slovak)
Currently translated at 97.0% (624 of 643 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/sk/
* Translated using Weblate (Czech)
Currently translated at 5.2% (34 of 643 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/cs/
* i18n-tasks normalize && yarn manage:translations
---
app/javascript/mastodon/locales/cs.json | 8 +++---
app/javascript/mastodon/locales/el.json | 2 +-
app/javascript/mastodon/locales/fa.json | 2 +-
app/javascript/mastodon/locales/ja.json | 2 +-
app/javascript/mastodon/locales/nl.json | 2 +-
app/javascript/mastodon/locales/oc.json | 2 +-
app/javascript/mastodon/locales/pt-BR.json | 2 +-
app/javascript/mastodon/locales/sk.json | 2 +-
config/locales/cs.yml | 4 +--
config/locales/da.yml | 30 +++++++++++++++++++---
config/locales/doorkeeper.ja.yml | 2 +-
config/locales/doorkeeper.pt-BR.yml | 30 +++++++++++++++++++---
config/locales/el.yml | 11 ++++++++
config/locales/gl.yml | 8 ++++++
config/locales/ja.yml | 7 ++++-
config/locales/nl.yml | 10 +++++++-
config/locales/simple_form.da.yml | 2 ++
config/locales/simple_form.de.yml | 2 +-
config/locales/simple_form.el.yml | 4 +++
config/locales/simple_form.fa.yml | 5 ++++
config/locales/simple_form.gl.yml | 4 +++
config/locales/simple_form.ja.yml | 5 ++--
config/locales/simple_form.nl.yml | 4 +++
config/locales/simple_form.sk.yml | 3 +++
config/locales/sk.yml | 14 ++++++----
25 files changed, 136 insertions(+), 31 deletions(-)
diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json
index 59d7c403b..747d09798 100644
--- a/app/javascript/mastodon/locales/cs.json
+++ b/app/javascript/mastodon/locales/cs.json
@@ -6,10 +6,10 @@
"account.direct": "Direct message @{name}",
"account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
"account.domain_blocked": "Domain hidden",
- "account.edit_profile": "Edit profile",
- "account.follow": "Follow",
- "account.followers": "Followers",
- "account.follows": "Follows",
+ "account.edit_profile": "Uprav profil",
+ "account.follow": "Sleduj",
+ "account.followers": "Sledovatelé",
+ "account.follows": "Sleduje",
"account.follows_you": "Follows you",
"account.hide_reblogs": "Hide boosts from @{name}",
"account.media": "Media",
diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json
index 7e8fa8b17..a34d7061d 100644
--- a/app/javascript/mastodon/locales/el.json
+++ b/app/javascript/mastodon/locales/el.json
@@ -65,7 +65,7 @@
"compose_form.hashtag_warning": "Αυτό το τουτ δεν θα εμφανίζεται κάτω από κανένα hashtag καθώς είναι αφανές. Μόνο τα δημόσια τουτ μπορούν να αναζητηθούν ανά hashtag.",
"compose_form.lock_disclaimer": "Ο λογαριασμός σου δεν είναι {locked}. Οποιοσδήποτε μπορεί να σε ακολουθήσει για να δει τις δημοσιεύσεις σας προς τους ακολούθους σας.",
"compose_form.lock_disclaimer.lock": "κλειδωμένος",
- "compose_form.placeholder": "Τι έχεις στο μυαλό σου;",
+ "compose_form.placeholder": "Τι σκέφτεσαι;",
"compose_form.publish": "Τουτ",
"compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.marked": "Το πολυμέσο έχει σημειωθεί ως ευαίσθητο",
diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json
index ad53e9b7d..dba714951 100644
--- a/app/javascript/mastodon/locales/fa.json
+++ b/app/javascript/mastodon/locales/fa.json
@@ -166,7 +166,7 @@
"navigation_bar.domain_blocks": "دامینهای پنهانشده",
"navigation_bar.edit_profile": "ویرایش نمایه",
"navigation_bar.favourites": "پسندیدهها",
- "navigation_bar.filters": "Muted words",
+ "navigation_bar.filters": "واژگان بیصداشده",
"navigation_bar.follow_requests": "درخواستهای پیگیری",
"navigation_bar.info": "اطلاعات تکمیلی",
"navigation_bar.keyboard_shortcuts": "میانبرهای صفحهکلید",
diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json
index c742b883e..3187701f4 100644
--- a/app/javascript/mastodon/locales/ja.json
+++ b/app/javascript/mastodon/locales/ja.json
@@ -166,7 +166,7 @@
"navigation_bar.domain_blocks": "非表示にしたドメイン",
"navigation_bar.edit_profile": "プロフィールを編集",
"navigation_bar.favourites": "お気に入り",
- "navigation_bar.filters": "Muted words",
+ "navigation_bar.filters": "フィルター設定",
"navigation_bar.follow_requests": "フォローリクエスト",
"navigation_bar.info": "このインスタンスについて",
"navigation_bar.keyboard_shortcuts": "ホットキー",
diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json
index 63c902668..07fac0da1 100644
--- a/app/javascript/mastodon/locales/nl.json
+++ b/app/javascript/mastodon/locales/nl.json
@@ -166,7 +166,7 @@
"navigation_bar.domain_blocks": "Verborgen domeinen",
"navigation_bar.edit_profile": "Profiel bewerken",
"navigation_bar.favourites": "Favorieten",
- "navigation_bar.filters": "Muted words",
+ "navigation_bar.filters": "Genegeerde woorden",
"navigation_bar.follow_requests": "Volgverzoeken",
"navigation_bar.info": "Over deze server",
"navigation_bar.keyboard_shortcuts": "Sneltoetsen",
diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json
index fb025594d..2461eaac2 100644
--- a/app/javascript/mastodon/locales/oc.json
+++ b/app/javascript/mastodon/locales/oc.json
@@ -166,7 +166,7 @@
"navigation_bar.domain_blocks": "Domenis resconduts",
"navigation_bar.edit_profile": "Modificar lo perfil",
"navigation_bar.favourites": "Favorits",
- "navigation_bar.filters": "Muted words",
+ "navigation_bar.filters": "Mots ignorats",
"navigation_bar.follow_requests": "Demandas d’abonament",
"navigation_bar.info": "Mai informacions",
"navigation_bar.keyboard_shortcuts": "Acorchis clavièr",
diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json
index 4ee02f757..f05966c96 100644
--- a/app/javascript/mastodon/locales/pt-BR.json
+++ b/app/javascript/mastodon/locales/pt-BR.json
@@ -166,7 +166,7 @@
"navigation_bar.domain_blocks": "Domínios escondidos",
"navigation_bar.edit_profile": "Editar perfil",
"navigation_bar.favourites": "Favoritos",
- "navigation_bar.filters": "Muted words",
+ "navigation_bar.filters": "Palavras silenciadas",
"navigation_bar.follow_requests": "Seguidores pendentes",
"navigation_bar.info": "Mais informações",
"navigation_bar.keyboard_shortcuts": "Atalhos de teclado",
diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json
index 47271f98f..66e312181 100644
--- a/app/javascript/mastodon/locales/sk.json
+++ b/app/javascript/mastodon/locales/sk.json
@@ -7,7 +7,7 @@
"account.disclaimer_full": "Inofrmácie uvedené nižšie nemusia byť úplným odrazom uživateľovho účtu.",
"account.domain_blocked": "Doména ukrytá",
"account.edit_profile": "Upraviť profil",
- "account.follow": "Následovať",
+ "account.follow": "Následuj",
"account.followers": "Sledujúci",
"account.follows": "Následuje",
"account.follows_you": "Následuje ťa",
diff --git a/config/locales/cs.yml b/config/locales/cs.yml
index 7b6021f13..135ecda31 100644
--- a/config/locales/cs.yml
+++ b/config/locales/cs.yml
@@ -1,7 +1,7 @@
---
cs:
about:
- about_hashtag_html: Toto jsou veřejné příspěvky typu označené jako #%{hashtag} . Pokud máte účet kdekoliv na fediverse, můžete s nimi interagovat.
+ about_hashtag_html: Toto jsou veřejné tooty označené jako #%{hashtag} . Pokud máte účet kdekoliv na fediverse, můžete s nimi interagovat.
about_mastodon_html: Mastodon je sociální síť založená na otevřených webových protokolech a svobodném, otevřeném softwaru. Je decentrovalizovaná jako e-mail.
about_this: O této instanci
administered_by: 'Server spravuje:'
@@ -18,7 +18,7 @@ cs:
features:
humane_approach_body: Mastodon, poučen z chyb jiných sociálních sítí, se snaží bojovat se zneužíváním sociálních sítí vytvářením etických možností.
humane_approach_title: Lidštější přístup
- not_a_product_title: Jste osoba, ne produkt.
+ not_a_product_title: Jste osoba, ne produkt
generic_description: "%{domain} je jedním serverem v síti"
learn_more: Zjistit více
source_code: Zdrojový kód
diff --git a/config/locales/da.yml b/config/locales/da.yml
index 0e3da55f1..f91ba00d5 100644
--- a/config/locales/da.yml
+++ b/config/locales/da.yml
@@ -10,7 +10,7 @@ da:
contact_missing: Ikke sat
contact_unavailable: Ikke tilgængeligt
description_headline: Hvad er %{domain}?
- domain_count_after: andre instancer
+ domain_count_after: andre instanser
domain_count_before: Forbundet til
extended_description_html: |
Et godt sted for regler
@@ -27,7 +27,7 @@ da:
generic_description: "%{domain} er en server i netværket"
hosted_on: Mostodon hostet på %{domain}
learn_more: Lær mere
- other_instances: Liste over instancer
+ other_instances: Liste over instanser
source_code: Kildekode
status_count_after: statusser
status_count_before: Som har skrevet
@@ -46,7 +46,7 @@ da:
people_who_follow: Folk der følger %{name}
posts: Dyt
posts_with_replies: Toots og svar
- remote_follow: Følg fra andre instancer
+ remote_follow: Følg fra andre instanser
reserved_username: Brugernavnet er reserveret
roles:
admin: Administrator
@@ -256,6 +256,10 @@ da:
expired: Udløbet
title: Filtre
title: Invitationer
+ relays:
+ setup: Opsæt en videresendelses forbindelse
+ status: Status
+ title: Videresendelser
reports:
account:
note: notat
@@ -297,7 +301,11 @@ da:
username: Kontakt brugernavn
hero:
title: Billede af helt
+ peers_api_enabled:
+ title: Udgiv liste over opdagede instanser
registrations:
+ closed_message:
+ title: Besked for lukkede registreringer
deletion:
desc_html: Tillad alle at slette deres konto
title: Åben konto sletning
@@ -338,6 +346,7 @@ da:
new_report:
body: "%{reporter} har anmeldt %{target}"
body_remote: Nogen fra %{domain} har anmeldt %{target}
+ subject: Ny anmeldelse for %{instance} (#%{id})
application_mailer:
notification_preferences: Ændre email indstillinger
salutation: "%{name},"
@@ -359,6 +368,9 @@ da:
migrate_account: Flyt til en anden konto
or: eller
or_log_in_with: Eller log in med
+ providers:
+ cas: CAS
+ saml: SAML
register: Opret dig
register_elsewhere: Opret dig på en anden server
reset_password: Nulstil kodeord
@@ -378,8 +390,15 @@ da:
distance_in_words:
about_x_hours: "%{count}t"
about_x_months: "%{count} måneder"
+ about_x_years: "%{count}år"
+ almost_x_years: "%{count}år"
half_a_minute: Lige nu
+ less_than_x_minutes: "%{count}m"
less_than_x_seconds: Lige nu
+ over_x_years: "%{count}år"
+ x_days: "%{count}d"
+ x_minutes: "%{count}m"
+ x_months: "%{count}md"
x_seconds: "%{count}s"
deletes:
bad_password_msg: Godt forsøg, hackere! Forkert kodeord
@@ -401,6 +420,7 @@ da:
download: Hent dit arkiv
size: Størrelse
blocks: Du blokerer
+ csv: CSV
follows: Du følger
mutes: Du dæmper
filters:
@@ -445,9 +465,13 @@ da:
expires_in_prompt: Aldrig
generate: Generer
invited_by: 'Du er blevet inviteret af:'
+ max_uses:
+ one: 1 benyttelse
+ other: "%{count} benyttelser"
max_uses_prompt: Ubegrænset
table:
expires_at: Udløber
+ uses: Benyttelser
title: Inviter folk
media_attachments:
validations:
diff --git a/config/locales/doorkeeper.ja.yml b/config/locales/doorkeeper.ja.yml
index 76174ef79..9bc2d9a80 100644
--- a/config/locales/doorkeeper.ja.yml
+++ b/config/locales/doorkeeper.ja.yml
@@ -133,7 +133,7 @@ ja:
write:blocks: ユーザーのブロックやドメインの非表示
write:favourites: トゥートのお気に入り登録
write:filters: フィルターの変更
- write:follows: フォローの変更
+ write:follows: あなたの代わりにフォロー、アンフォロー
write:lists: リストの変更
write:media: メディアのアップロード
write:mutes: アカウントや会話のミュート
diff --git a/config/locales/doorkeeper.pt-BR.yml b/config/locales/doorkeeper.pt-BR.yml
index afacfd7f7..dfab853c6 100644
--- a/config/locales/doorkeeper.pt-BR.yml
+++ b/config/locales/doorkeeper.pt-BR.yml
@@ -114,7 +114,29 @@ pt-BR:
application:
title: Autorização OAuth obrigatória
scopes:
- follow: seguir, bloquear, desbloquear e deixar de seguir outras contas
- push: receber notificações push na sua conta
- read: ler os dados da sua conta
- write: postar em seu nome
+ follow: modificar as relações com outras contas
+ push: receber suas notificações push
+ read: ler todos os dados da sua conta
+ read:accounts: ver as informações da conta
+ read:blocks: ver seus bloqueios
+ read:favourites: ver seus favoritos
+ read:filters: ver seus filtros
+ read:follows: ver quem você segue
+ read:lists: ver suas listas
+ read:mutes: ver seus usuários silenciados
+ read:notifications: ver suas notificações
+ read:reports: ver suas denúncias
+ read:search: buscar em seu nome
+ read:statuses: ver todos os status
+ write: modificar todos os dados da sua conta
+ write:accounts: modificar seu perfil
+ write:blocks: bloquear contas e domínios
+ write:favourites: status favoritos
+ write:filters: criar filtros
+ write:follows: seguir pessoas
+ write:lists: criar listas
+ write:media: enviar arquivos de mídia
+ write:mutes: silenciar pessoas e conversas
+ write:notifications: limpar suas notificações
+ write:reports: reportar outras pessoas
+ write:statuses: publicar status
diff --git a/config/locales/el.yml b/config/locales/el.yml
index 11ba128c1..cc65b1958 100644
--- a/config/locales/el.yml
+++ b/config/locales/el.yml
@@ -261,6 +261,14 @@ el:
expired: Ληγμένες
title: Φίλτρο
title: Προσκλήσεις
+ relays:
+ add_new: Πρόσθεσε νέο ανταποκριτή (relay)
+ description_html: Ο ομοσπονδιακός ανταποκριτής είναι ένας ενδιάμεσος εξυπηρετητής (server) που ανταλλάσσει μεγάλους όγκους δημόσιων τουτ μεταξύ εξυπηρετητών που εγγράφονται και δημοσιεύουν σε αυτόν. Βοηθάει μικρούς και μεσαίους εξυπηρετητές να ανακαλύψουν περιεχόμενο στο fediverse , που υπό άλλες συνθήκες θα χρειαζόταν κάποιους τοπικούς χρήστες που να ακολουθούν χρήστες σε απομακρυσμένους εξυπηρετητές.
+ enable_hint: Μόλις ενεργοποιηθεί, ο εξυπηρετητής (server) σου θα εγγραφεί σε όλα τα δημόσια τουτ αυτού του ανταποκριτή (relay) και θα αρχίσει να προωθεί τα δικά του δημόσια τουτ σε αυτόν.
+ inbox_url: URL ανταποκριτή
+ setup: Όρισε μια σύνδεση ανταπόκρισης
+ status: Κατάσταση
+ title: Ανταποκριτές
report_notes:
created_msg: Επιτυχής δημιουργία σημείωσης καταγγελίας!
destroyed_msg: Επιτυχής διαγραφή σημείωσης καταγγελίας!
@@ -316,6 +324,9 @@ el:
peers_api_enabled:
desc_html: Ονόματα τομέων που αυτός ο κόμβος έχει ήδη συναντήσει στο fediverse
title: Δημοσίευση λίστας κόμβων που έχουν ανακαλυφθεί
+ preview_sensitive_media:
+ desc_html: Οι προεπισκοπήσεις συνδέσμων σε τρίτους ιστότοπους θα είναι ορατές ακόμα κι όταν το πολυμέσο έχει σημειωθεί ως ευαίσθητο
+ title: Εμφάνιση ευαίσθητων πολυμέσων στις προεπισκοπήσεις OpenGraph
registrations:
closed_message:
desc_html: Εμφανίζεται στην εισαγωγική σελίδα όταν οι εγγραφές είναι κλειστές. Μπορείς να χρησιμοποιήσεις HTML tags
diff --git a/config/locales/gl.yml b/config/locales/gl.yml
index 33889d0f1..fca9b10ec 100644
--- a/config/locales/gl.yml
+++ b/config/locales/gl.yml
@@ -261,6 +261,14 @@ gl:
expired: Cadudado
title: Filtro
title: Convida
+ relays:
+ add_new: Engadir un novo repetidor
+ description_html: Un repetidor da federación é un servidor intermedio que intercambia grandes volumes de toots públicos entre servidores que se suscriban e publiquen nel. Pode axudar a servidores pequenos e medios a descubrir contido no fediverso , o que de outro xeito precisaría que as usuarias locais seguisen a outra xente en servidores remotos.
+ enable_hint: Unha vez activado, o seu servidor suscribirase a todos os toots públicos de este servidor, e tamén comezará a eviar a el os toots públicos do servidor.
+ inbox_url: URL do repetidor
+ setup: Configurar a conexión ao repetidor
+ status: Estado
+ title: Repetidores
report_notes:
created_msg: Creouse correctamente a nota do informe!
destroyed_msg: Nota do informe eliminouse con éxito!
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index 0e30a39e7..3af82fb4c 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -261,6 +261,11 @@ ja:
expired: 期限切れ
title: フィルター
title: 招待
+ relays:
+ add_new: リレーを追加
+ inbox_url: Relay URL
+ status: ステータス
+ title: リレー
report_notes:
created_msg: レポートメモを書き込みました!
destroyed_msg: レポートメモを削除しました!
@@ -695,7 +700,7 @@ ja:
disallowed_hashtags:
one: '許可されていないハッシュタグが含まれています: %{tags}'
other: '許可されていないハッシュタグが含まれています: %{tags}'
- language_detection: 自動的に言語を検出する
+ language_detection: 自動検出
open_in_web: Webで開く
over_character_limit: 上限は %{max}文字までです
pin_errors:
diff --git a/config/locales/nl.yml b/config/locales/nl.yml
index 757afd97e..6cf982662 100644
--- a/config/locales/nl.yml
+++ b/config/locales/nl.yml
@@ -261,6 +261,14 @@ nl:
expired: Verlopen
title: Filter
title: Uitnodigingen
+ relays:
+ add_new: Nieuwe relayserver toevoegen
+ description_html: Een federatie-relay is een tussenliggende server die grote hoeveelheden openbare toots uitwisselt tussen servers die zich hierop hebben geabonneerd. Het kan kleine en middelgrote servers helpen om content uit de fediverse te ontdekken , waarvoor anders lokale gebruikers handmatig mensen van externe servers moeten volgen.
+ enable_hint: Eenmaal ingeschakeld gaat jouw server zich op alle openbare toots van deze relayserver abonneren en stuurt het de openbare toots van jouw server naar de relayserver.
+ inbox_url: Relay-URL
+ setup: Een verbinding met een relayserver maken
+ status: Status
+ title: Relayservers
report_notes:
created_msg: Opmerking bij gerapporteerde toot succesvol aangemaakt!
destroyed_msg: Opmerking bij gerapporteerde toot succesvol verwijderd!
@@ -492,7 +500,7 @@ nl:
delete: Verwijderen
title: Filters
new:
- title: Nieuwe filter toevoegen
+ title: Nieuw filter toevoegen
followers:
domain: Domein
explanation_html: Wanneer je de privacy van jouw toots wilt garanderen, moet je goed weten wie jouw volgers zijn. Toots die alleen aan jouw volgers zijn gericht, worden aan de Mastodonservers van jouw volgers afgeleverd. Daarom wil je ze misschien controleren en desnoods volgers verwijderen die zich op een Mastodonserver bevinden die jij niet vertrouwd. Bijvoorbeeld omdat de beheerder(s) of de software van zo'n server jouw privacy niet respecteert.
diff --git a/config/locales/simple_form.da.yml b/config/locales/simple_form.da.yml
index 07862e8a8..9d6587776 100644
--- a/config/locales/simple_form.da.yml
+++ b/config/locales/simple_form.da.yml
@@ -25,6 +25,7 @@ da:
setting_hide_network: Hvem du følger og hvem der følger dig vil ikke blive vist på din profil
setting_noindex: Påvirker din offentlige profil og status sider
setting_theme: Påvirker hvordan Mastodon ser ud nåt du er logget ind via en hvilken som helst enhed.
+ whole_word: Når nøgle ordet eller udtrykket kun er alfabetisk, vil det kun blive brugt hvis det passer hele ordet
imports:
data: CSV fil eksporteret fra en anden Mastodon instans
sessions:
@@ -77,6 +78,7 @@ da:
type: Importtype
username: Brugernavn
username_or_email: Brugernavn eller Email
+ whole_word: Helt ord
interactions:
must_be_follower: Bloker notifikationer fra folk der ikke følger dig
must_be_following: Bloker notifikationer fra folk du ikke følger
diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml
index fb8d9e7c7..9e29a2824 100644
--- a/config/locales/simple_form.de.yml
+++ b/config/locales/simple_form.de.yml
@@ -48,7 +48,7 @@ de:
data: Daten
display_name: Anzeigename
email: E-Mail-Adresse
- expires_in: Gültig bis
+ expires_in: Läuft ab
fields: Profil-Metadaten
header: Kopfbild
irreversible: Fallen lassen anstatt es zu verstecken
diff --git a/config/locales/simple_form.el.yml b/config/locales/simple_form.el.yml
index 00fba5d27..293c5ac7c 100644
--- a/config/locales/simple_form.el.yml
+++ b/config/locales/simple_form.el.yml
@@ -13,6 +13,7 @@ el:
other: απομένουν %{count} χαρακτήρες
fields: Μπορείς να έχεις έως 4 σημειώσεις σε μορφή πίνακα στο προφίλ σου
header: PNG, GIF ή JPG. Έως 2MB. Θα μειωθεί σε διάσταση 700x335px
+ inbox_url: Αντέγραψε το URL της αρχικής σελίδας του ανταποκριτή (relay) που θέλεις να χρησιμοποιήσεις
irreversible: Τα φιλτραρισμένα τουτ θα εξαφανιστούν αμετάκλητα, ακόμα και αν το φίλτρο αργότερα αφαιρεθεί
locale: Η γλώσσα του περιβάλλοντος χρήσης, των email και των ειδοποιήσεων ώθησης
locked: Απαιτεί να εγκρίνεις χειροκίνητα τους ακόλουθούς σου
@@ -25,6 +26,7 @@ el:
setting_hide_network: Το ποιους ακολουθείς και το ποιοι σε ακολουθούν δε θα φαίνεται στο προφίλ σου
setting_noindex: Επηρεάζει το δημόσιο προφίλ και τις δημοσιεύσεις σου
setting_theme: Επηρεάζει την εμφάνιση του Mastodon όταν συνδέεται από οποιαδήποτε συσκευή.
+ whole_word: Όταν η λέξη ή η φράση κλειδί είναι μόνο αλφαριθμητική, θα εφαρμοστεί μόνο αν ταιριάζει με ολόκληρη τη λέξη
imports:
data: Αρχείο CSV που έχει εξαχθεί από διαφορετικό κόμβο Mastodon
sessions:
@@ -51,6 +53,7 @@ el:
expires_in: Λήξη μετά από
fields: Μετεδεδομένα προφίλ
header: Επικεφαλίδα
+ inbox_url: Το URL του inbox του ανταποκριτή (relay)
irreversible: Απόρριψη αντί για κρύψιμο
locale: Γλώσσα περιβάλλοντος
locked: Κλείδωμα λογαριασμού
@@ -77,6 +80,7 @@ el:
type: Τύπος εισαγωγής
username: Όνομα χρηστη
username_or_email: Όνομα ή διεύθυνση email χρήστη
+ whole_word: Ολόκληρη λέξη
interactions:
must_be_follower: Μπλόκαρε τις ειδοποιήσεις από όσους δεν ακολουθείς
must_be_following: Μπλόκαρε τις ειδοποιήσεις που προέρχονται από άτομα που δεν τα ακολουθείς
diff --git a/config/locales/simple_form.fa.yml b/config/locales/simple_form.fa.yml
index 2a2cc6731..f4266e167 100644
--- a/config/locales/simple_form.fa.yml
+++ b/config/locales/simple_form.fa.yml
@@ -13,6 +13,7 @@ fa:
other: %{count} حرف باقی مانده
fields: شما میتوانید تا چهار مورد را در یک جدول در نمایهٔ خود نمایش دهید
header: یکی از قالبهای PNG یا GIF یا JPG. بیشترین اندازه ۲ مگابایت. تصویر به اندازهٔ ۳۳۵×۷۰۰ پیکسل تبدیل خواهد شد
+ inbox_url: نشانی صفحهٔ اصلی رلهای را که میخواهید به کار ببرید کپی کنید
irreversible: بوقهای فیلترشده به طور برگشتناپذیری ناپدید میشوند، حتی اگر فیلتر را بعداً بردارید
locale: زبان محیط کاربری، ایمیلها، و اعلانها
locked: باید پیگیران تازه را خودتان تأیید کنید
@@ -20,10 +21,12 @@ fa:
one: 1 حرف باقی مانده
other: %{count} حرف باقی مانده
phrase: مستقل از کوچکی و بزرگی حروف، با متن اصلی یا هشدار محتوای بوقها مقایسه میشود
+ scopes: واسطهای برنامهنویسی که این برنامه به آن دسترسی دارد. اگر بالاترین سطح دسترسی را انتخاب کنید، دیگر نیازی به انتخاب سطحهای پایینی ندارید.
setting_default_language: زبان نوشتههای شما به طور خودکار تشخیص داده میشود، ولی این تشخصی همیشه دقیق نیست
setting_hide_network: فهرست پیگیران شما و فهرست کسانی که شما پی میگیرید روی نمایهٔ شما دیده نخواهد شد
setting_noindex: روی نمایهٔ عمومی و صفحهٔ نوشتههای شما تأثیر میگذارد
setting_theme: ظاهر ماستدون را وقتی که از هر دستگاهی به آن وارد میشوید تعیین میکند.
+ whole_word: اگر کلیدواژه فقط دارای حروف و اعداد باشد، تنها وقتی پیدا میشود که با کل یک واژه در متن منطبق باشد، نه با بخشی از یک واژه
imports:
data: پروندهٔ CSV که از سرور ماستدون دیگری برونسپاری شده
sessions:
@@ -50,6 +53,7 @@ fa:
expires_in: تاریخ انقضا
fields: اطلاعات تکمیلی نمایه
header: تصویر زمینه
+ inbox_url: نشانی صندوق ورودی رله
irreversible: به جای پنهانسازی، حذف کن
locale: زبان محیط کاربری
locked: خصوصیکردن حساب
@@ -76,6 +80,7 @@ fa:
type: نوع درونریزی
username: نام کاربری (تنها حروف انگلیسی)
username_or_email: نام کاربری یا ایمیل
+ whole_word: تطابق واژهٔ کامل
interactions:
must_be_follower: مسدودکردن اعلانهای همه به جز پیگیران
must_be_following: مسدودکردن اعلانهای کسانی که شما پی نمیگیرید
diff --git a/config/locales/simple_form.gl.yml b/config/locales/simple_form.gl.yml
index 25694395d..84990a66f 100644
--- a/config/locales/simple_form.gl.yml
+++ b/config/locales/simple_form.gl.yml
@@ -13,6 +13,7 @@ gl:
other: %{count} caracteres restantes
fields: Pode ter ate 4 elementos no seu perfil mostrados como unha táboa
header: PNG, GIF ou JPG. Máximo 2MB. Será reducida a 700x335px
+ inbox_url: Copiar o URL desde a páxina de inicio do repetidor que quere utilizar
irreversible: Os toots filtrados desaparecerán de xeito irreversible, incluso si despois se elimina o filtro
locale: O idioma da interface de usuaria, correos e notificacións
locked: Require que vostede acepte as seguidoras de xeito manual
@@ -25,6 +26,7 @@ gl:
setting_hide_network: Non se mostrará no seu perfil quen a segue e quen a está a seguir
setting_noindex: Afecta ao seu perfil público e páxinas de estado
setting_theme: Afecta ao aspecto de Mastodon en calquer dispositivo cando está conectada.
+ whole_word: Si a chave ou frase de paso é só alfanumérica, só se aplicará si concorda a palabra completa
imports:
data: Ficheiro CSV exportado desde outra instancia Mastodon
sessions:
@@ -51,6 +53,7 @@ gl:
expires_in: Caducidade despois de
fields: Metadatos do perfil
header: Cabeceira
+ inbox_url: URL da caixa de entrada do repetidor
irreversible: Soltar en lugar de agochar
locale: Idioma da interface
locked: Protexer conta
@@ -77,6 +80,7 @@ gl:
type: Tipo de importación
username: Nome de usuaria
username_or_email: Nome de usuaria ou Correo-e
+ whole_word: Palabra completa
interactions:
must_be_follower: Bloquear as notificacións de non-seguidoras
must_be_following: Bloquea as notificacións de personas que non segue
diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml
index af5d5d768..4fb299981 100644
--- a/config/locales/simple_form.ja.yml
+++ b/config/locales/simple_form.ja.yml
@@ -40,7 +40,7 @@ ja:
chosen_languages: 表示する言語
confirm_new_password: 新しいパスワード(確認用)
confirm_password: パスワード(確認用)
- context: フィルター対象
+ context: 除外対象
current_password: 現在のパスワード
data: データ
display_name: 表示名
@@ -48,6 +48,7 @@ ja:
expires_in: 有効期限
fields: プロフィール補足情報
header: ヘッダー
+ inbox_url: URL of the relay inbox
irreversible: 隠すのではなく除外する
locale: 言語
locked: 承認制アカウントにする
@@ -56,7 +57,7 @@ ja:
note: プロフィール
otp_attempt: 二段階認証コード
password: パスワード
- phrase: 単語または語句
+ phrase: キーワードまたはフレーズ
setting_auto_play_gif: アニメーションGIFを自動再生する
setting_boost_modal: ブーストする前に確認ダイアログを表示する
setting_default_language: 投稿する言語
diff --git a/config/locales/simple_form.nl.yml b/config/locales/simple_form.nl.yml
index eb13ec195..47520a55b 100644
--- a/config/locales/simple_form.nl.yml
+++ b/config/locales/simple_form.nl.yml
@@ -13,6 +13,7 @@ nl:
other: %{count} tekens over
fields: Je kan maximaal 4 items als een tabel op je profiel weergeven
header: PNG, GIF of JPG. Maximaal 2MB. Wordt teruggeschaald naar 700x335px
+ inbox_url: Kopieer de URL van de voorpagina van de relayserver die je wil gebruiken
irreversible: Gefilterde toots verdwijnen onomkeerbaar, zelfs als de filter later wordt verwijderd
locale: De taal van de gebruikersomgeving, e-mails en pushmeldingen
locked: Vereist dat je handmatig volgers moet accepteren
@@ -25,6 +26,7 @@ nl:
setting_hide_network: Wie jij volgt en wie jou volgen wordt niet op jouw profiel getoond
setting_noindex: Heeft invloed op jouw openbare profiel en toots
setting_theme: Heeft invloed op hoe de webapp van Mastodon eruitziet (op elk apparaat waarmee je inlogt).
+ whole_word: Wanneer het trefwoord of zinsdeel alfanumeriek is, wordt het alleen gefilterd wanneer het hele woord overeenkomt
imports:
data: CSV-bestand dat op een andere Mastodonserver werd geëxporteerd
sessions:
@@ -51,6 +53,7 @@ nl:
expires_in: Vervalt na
fields: Metadata profiel
header: Omslagfoto
+ inbox_url: Inbox-URL van de relayserver
irreversible: Verwijderen in plaats van verbergen
locale: Taal van de gebruikersomgeving
locked: Maak account besloten
@@ -77,6 +80,7 @@ nl:
type: Importtype
username: Gebruikersnaam
username_or_email: Gebruikersnaam of e-mailadres
+ whole_word: Heel woord
interactions:
must_be_follower: Meldingen van mensen die jou niet volgen blokkeren
must_be_following: Meldingen van mensen die jij niet volgt blokkeren
diff --git a/config/locales/simple_form.sk.yml b/config/locales/simple_form.sk.yml
index 39fa3b833..1fc1c7e69 100644
--- a/config/locales/simple_form.sk.yml
+++ b/config/locales/simple_form.sk.yml
@@ -27,6 +27,7 @@ sk:
setting_hide_network: Koho následuješ, a kto následuje teba nebude zobrazené na tvojom profile
setting_noindex: Ovplyvňuje verejný profil a statusy
setting_theme: Toto ovplyvňuje ako Mastodon vyzerá pri prihlásení z hociakého zariadenia.
+ whole_word: Ak je kľúčové slovo, alebo fráza poskladaná iba s písmen a čísel, bude použité iba ak sa zhoduje s celým výrazom
imports:
data: CSV súbor vyexportovaný z inej Mastodon inštancie
sessions:
@@ -53,6 +54,7 @@ sk:
expires_in: Expirovať po
fields: Metadáta profilu
header: Obrázok v hlavičke
+ inbox_url: URL adresa prechodnej schránky
irreversible: Zahoď, namiesto skritia
locale: Jazyk rozhrania
locked: Zamknúť účet
@@ -79,6 +81,7 @@ sk:
type: Typ importu
username: Prezývka
username_or_email: Prezívka, alebo email
+ whole_word: Celé slovo
interactions:
must_be_follower: Blokovať oznámenia od užívateľov, ktorí ťa nesledujú
must_be_following: Blokovať oboznámenia ohľadom ľudí ktorých nesleduješ
diff --git a/config/locales/sk.yml b/config/locales/sk.yml
index 7dc7a751f..82fba3557 100644
--- a/config/locales/sk.yml
+++ b/config/locales/sk.yml
@@ -259,9 +259,12 @@ sk:
filter:
all: Všetky
available: Dostupné
- expired: Expirované
+ expired: Vypršalo
title: Filtrovať
title: Pozvánky
+ relays:
+ add_new: Pridaj novú priechodnú oporu
+ status: Stav
report_notes:
created_msg: Poznámka o nahlásení úspešne vytvorená!
destroyed_msg: Poznámka o nahlásení úspešne vymazaná!
@@ -423,11 +426,11 @@ sk:
authorize_follow:
already_following: Tento účet už následuješ
error: Naneštastie nastala chyba pri hľadaní vzdialeného účtu
- follow: Následovať
- follow_request: 'Poslali ste požiadavku následovať užívateľa:'
- following: 'Podarilo sa! Teraz už následujete užívateľa:'
+ follow: Následuj
+ follow_request: 'Poslal/a si žiadosť následovať užívateľa:'
+ following: 'Podarilo sa! Teraz už následuješ užívateľa:'
post_follow:
- close: Alebo môžete iba zatvoriť toto okno.
+ close: Alebo môžeš iba zatvoriť toto okno.
return: Ukáž užívateľov profil
web: Prejdi do siete
title: Následuj %{acct}
@@ -635,6 +638,7 @@ sk:
browser: Prehliadač
browsers:
alipay: Alipay
+ blackberry: RIM Blackberry
chrome: Google Chrome
edge: Microsoft Edge
electron: Electron
From e7091074636c519a5c0bd52c8ef85fa3c5df4656 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Sat, 14 Jul 2018 03:56:34 +0200
Subject: [PATCH 007/196] Display Mastodon version in footer of web UI (#8013)
Fix #7846
---
app/javascript/mastodon/features/getting_started/index.js | 4 ++--
app/javascript/mastodon/initial_state.js | 1 +
app/serializers/initial_state_serializer.rb | 1 +
3 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/app/javascript/mastodon/features/getting_started/index.js b/app/javascript/mastodon/features/getting_started/index.js
index 99642c911..074ab01c8 100644
--- a/app/javascript/mastodon/features/getting_started/index.js
+++ b/app/javascript/mastodon/features/getting_started/index.js
@@ -7,7 +7,7 @@ import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
import ImmutablePureComponent from 'react-immutable-pure-component';
-import { me, invitesEnabled } from '../../initial_state';
+import { me, invitesEnabled, version } from '../../initial_state';
import { fetchFollowRequests } from '../../actions/accounts';
import { List as ImmutableList } from 'immutable';
import { Link } from 'react-router-dom';
@@ -149,7 +149,7 @@ export default class GettingStarted extends ImmutablePureComponent {
tootsuite/mastodon }}
+ values={{ github: tootsuite/mastodon (v{version}) }}
/>
diff --git a/app/javascript/mastodon/initial_state.js b/app/javascript/mastodon/initial_state.js
index 807262fd7..6ffb4cbfb 100644
--- a/app/javascript/mastodon/initial_state.js
+++ b/app/javascript/mastodon/initial_state.js
@@ -12,5 +12,6 @@ export const deleteModal = getMeta('delete_modal');
export const me = getMeta('me');
export const searchEnabled = getMeta('search_enabled');
export const invitesEnabled = getMeta('invites_enabled');
+export const version = getMeta('version');
export default initialState;
diff --git a/app/serializers/initial_state_serializer.rb b/app/serializers/initial_state_serializer.rb
index 42d0e4bf3..78b96298c 100644
--- a/app/serializers/initial_state_serializer.rb
+++ b/app/serializers/initial_state_serializer.rb
@@ -14,6 +14,7 @@ class InitialStateSerializer < ActiveModel::Serializer
domain: Rails.configuration.x.local_domain,
admin: object.admin&.id&.to_s,
search_enabled: Chewy.enabled?,
+ version: Mastodon::Version.to_s,
invites_enabled: Setting.min_invite_role == 'user',
}
From e9b322d0a6bebe7d13a53a216482ecc364f18806 Mon Sep 17 00:00:00 2001
From: Yamagishi Kazutoshi
Date: Sat, 14 Jul 2018 10:56:41 +0900
Subject: [PATCH 008/196] Upgrade webpack to version v4.x (#6655)
---
Dockerfile | 2 +-
app/javascript/mastodon/common.js | 8 +
app/javascript/packs/about.js | 3 +
app/javascript/packs/admin.js | 3 +
app/javascript/packs/application.js | 3 +
app/javascript/packs/common.js | 6 -
app/javascript/packs/public.js | 3 +
app/javascript/packs/share.js | 3 +
config/webpack/development.js | 2 +
config/webpack/loaders/sass.js | 29 +-
config/webpack/production.js | 37 +-
config/webpack/shared.js | 44 +-
config/webpack/test.js | 4 +-
package.json | 69 +-
yarn.lock | 4244 ++++++++++++++++-----------
15 files changed, 2716 insertions(+), 1744 deletions(-)
create mode 100644 app/javascript/mastodon/common.js
delete mode 100644 app/javascript/packs/common.js
diff --git a/Dockerfile b/Dockerfile
index fe1cea89a..02f334585 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -69,7 +69,7 @@ COPY Gemfile Gemfile.lock package.json yarn.lock .yarnclean /mastodon/
RUN bundle config build.nokogiri --with-iconv-lib=/usr/local/lib --with-iconv-include=/usr/local/include \
&& bundle install -j$(getconf _NPROCESSORS_ONLN) --deployment --without test development \
- && yarn --pure-lockfile \
+ && yarn install --pure-lockfile --ignore-engines \
&& yarn cache clean
RUN addgroup -g ${GID} mastodon && adduser -h /mastodon -s /bin/sh -D -G mastodon -u ${UID} mastodon \
diff --git a/app/javascript/mastodon/common.js b/app/javascript/mastodon/common.js
new file mode 100644
index 000000000..2b10b8c30
--- /dev/null
+++ b/app/javascript/mastodon/common.js
@@ -0,0 +1,8 @@
+import Rails from 'rails-ujs';
+
+export function start() {
+ require('font-awesome/css/font-awesome.css');
+ require.context('../images/', true);
+
+ Rails.start();
+};
diff --git a/app/javascript/packs/about.js b/app/javascript/packs/about.js
index 63e12da42..843cb2c87 100644
--- a/app/javascript/packs/about.js
+++ b/app/javascript/packs/about.js
@@ -1,4 +1,7 @@
import loadPolyfills from '../mastodon/load_polyfills';
+import { start } from '../mastodon/common';
+
+start();
function loaded() {
const TimelineContainer = require('../mastodon/containers/timeline_container').default;
diff --git a/app/javascript/packs/admin.js b/app/javascript/packs/admin.js
index 5dbcc03d3..b151b4af0 100644
--- a/app/javascript/packs/admin.js
+++ b/app/javascript/packs/admin.js
@@ -1,4 +1,7 @@
import { delegate } from 'rails-ujs';
+import { start } from '../mastodon/common';
+
+start();
function handleDeleteStatus(event) {
const [data] = event.detail;
diff --git a/app/javascript/packs/application.js b/app/javascript/packs/application.js
index 116632dea..c65ebed74 100644
--- a/app/javascript/packs/application.js
+++ b/app/javascript/packs/application.js
@@ -1,4 +1,7 @@
import loadPolyfills from '../mastodon/load_polyfills';
+import { start } from '../mastodon/common';
+
+start();
loadPolyfills().then(() => {
require('../mastodon/main').default();
diff --git a/app/javascript/packs/common.js b/app/javascript/packs/common.js
deleted file mode 100644
index 96e6f4b16..000000000
--- a/app/javascript/packs/common.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import { start } from 'rails-ujs';
-import 'font-awesome/css/font-awesome.css';
-
-require.context('../images/', true);
-
-start();
diff --git a/app/javascript/packs/public.js b/app/javascript/packs/public.js
index cc2fed3f1..4b1e87ae3 100644
--- a/app/javascript/packs/public.js
+++ b/app/javascript/packs/public.js
@@ -1,5 +1,8 @@
import loadPolyfills from '../mastodon/load_polyfills';
import ready from '../mastodon/ready';
+import { start } from '../mastodon/common';
+
+start();
window.addEventListener('message', e => {
const data = e.data || {};
diff --git a/app/javascript/packs/share.js b/app/javascript/packs/share.js
index e9580f648..4ef23e1b2 100644
--- a/app/javascript/packs/share.js
+++ b/app/javascript/packs/share.js
@@ -1,4 +1,7 @@
import loadPolyfills from '../mastodon/load_polyfills';
+import { start } from '../mastodon/common';
+
+start();
function loaded() {
const ComposeContainer = require('../mastodon/containers/compose_container').default;
diff --git a/config/webpack/development.js b/config/webpack/development.js
index 12670f5cd..d54d919ec 100644
--- a/config/webpack/development.js
+++ b/config/webpack/development.js
@@ -16,6 +16,8 @@ if (process.env.VAGRANT) {
}
module.exports = merge(sharedConfig, {
+ mode: 'development',
+
devtool: 'cheap-module-eval-source-map',
stats: {
diff --git a/config/webpack/loaders/sass.js b/config/webpack/loaders/sass.js
index 88d94c684..bad09ceb4 100644
--- a/config/webpack/loaders/sass.js
+++ b/config/webpack/loaders/sass.js
@@ -1,15 +1,22 @@
-const ExtractTextPlugin = require('extract-text-webpack-plugin');
+const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const { env } = require('../configuration.js');
module.exports = {
- test: /\.(scss|sass|css)$/i,
- use: ExtractTextPlugin.extract({
- fallback: 'style-loader',
- use: [
- { loader: 'css-loader', options: { minimize: env.NODE_ENV === 'production' } },
- { loader: 'postcss-loader', options: { sourceMap: true } },
- 'resolve-url-loader',
- 'sass-loader',
- ],
- }),
+ test: /\.s?css$/i,
+ use: [
+ MiniCssExtractPlugin.loader,
+ {
+ loader: 'css-loader',
+ options: {
+ minimize: env.NODE_ENV === 'production',
+ },
+ },
+ {
+ loader: 'postcss-loader',
+ options: {
+ sourceMap: true,
+ },
+ },
+ 'sass-loader',
+ ],
};
diff --git a/config/webpack/production.js b/config/webpack/production.js
index 037a76a59..58c7fa69a 100644
--- a/config/webpack/production.js
+++ b/config/webpack/production.js
@@ -1,7 +1,7 @@
// Note: You must restart bin/webpack-dev-server for changes to take effect
-const webpack = require('webpack');
const merge = require('webpack-merge');
+const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
const CompressionPlugin = require('compression-webpack-plugin');
const sharedConfig = require('./shared.js');
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
@@ -36,6 +36,8 @@ if (process.env.S3_ENABLED === 'true') {
}
module.exports = merge(sharedConfig, {
+ mode: 'production',
+
output: {
filename: '[name]-[chunkhash].js',
chunkFilename: '[name]-[chunkhash].js',
@@ -44,19 +46,28 @@ module.exports = merge(sharedConfig, {
devtool: 'source-map', // separate sourcemap file, suitable for production
stats: 'normal',
+ optimization: {
+ minimize: true,
+ minimizer: [
+ new UglifyJsPlugin({
+ sourceMap: true,
+
+ uglifyOptions: {
+ mangle: true,
+
+ compress: {
+ warnings: false,
+ },
+
+ output: {
+ comments: false,
+ },
+ },
+ }),
+ ],
+ },
+
plugins: [
- new webpack.optimize.UglifyJsPlugin({
- sourceMap: true,
- mangle: true,
-
- compress: {
- warnings: false,
- },
-
- output: {
- comments: false,
- },
- }),
new CompressionPlugin({
asset: '[path].gz[query]',
algorithm: compressionAlgorithm,
diff --git a/config/webpack/shared.js b/config/webpack/shared.js
index 50fa48175..a1572665c 100644
--- a/config/webpack/shared.js
+++ b/config/webpack/shared.js
@@ -1,9 +1,9 @@
// Note: You must restart bin/webpack-dev-server for changes to take effect
const webpack = require('webpack');
-const { basename, dirname, join, relative, resolve, sep } = require('path');
+const { basename, dirname, join, relative, resolve } = require('path');
const { sync } = require('glob');
-const ExtractTextPlugin = require('extract-text-webpack-plugin');
+const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const ManifestPlugin = require('webpack-manifest-plugin');
const extname = require('path-complete-extname');
const { env, settings, themes, output, loadersDir } = require('./configuration.js');
@@ -39,6 +39,26 @@ module.exports = {
publicPath: output.publicPath,
},
+ optimization: {
+ runtimeChunk: {
+ name: 'common',
+ },
+ splitChunks: {
+ cacheGroups: {
+ default: false,
+ vendors: false,
+ common: {
+ name: 'common',
+ chunks: 'all',
+ minChunks: 2,
+ minSize: 0,
+ test: /^(?!.*[\\\/]node_modules[\\\/]react-intl[\\\/]).+$/,
+ },
+ },
+ },
+ occurrenceOrder: true,
+ },
+
module: {
rules: sync(join(loadersDir, '*.js')).map(loader => require(loader)),
},
@@ -52,25 +72,13 @@ module.exports = {
resource.request = resource.request.replace(/^history/, 'history/es');
}
),
- new ExtractTextPlugin(env.NODE_ENV === 'production' ? '[name]-[contenthash].css' : '[name].css'),
+ new MiniCssExtractPlugin({
+ filename: env.NODE_ENV === 'production' ? '[name]-[contenthash].css' : '[name].css',
+ }),
new ManifestPlugin({
publicPath: output.publicPath,
writeToFileEmit: true,
- }),
- new webpack.optimize.CommonsChunkPlugin({
- name: 'common',
- minChunks: (module, count) => {
- const reactIntlPathRegexp = new RegExp(`node_modules\\${sep}react-intl`);
-
- if (module.resource && reactIntlPathRegexp.test(module.resource)) {
- // skip react-intl because it's useless to put in the common chunk,
- // e.g. because "shared" modules between zh-TW and zh-CN will never
- // be loaded together
- return false;
- }
-
- return count >= 2;
- },
+ filter: file => !file.isAsset || file.isModuleAsset,
}),
],
diff --git a/config/webpack/test.js b/config/webpack/test.js
index 6b2b073bb..8b56eb92f 100644
--- a/config/webpack/test.js
+++ b/config/webpack/test.js
@@ -3,4 +3,6 @@
const merge = require('webpack-merge');
const sharedConfig = require('./shared.js');
-module.exports = merge(sharedConfig, {});
+module.exports = merge(sharedConfig, {
+ mode: 'development',
+});
diff --git a/package.json b/package.json
index 717607764..95383bae5 100644
--- a/package.json
+++ b/package.json
@@ -21,29 +21,29 @@
"private": true,
"dependencies": {
"array-includes": "^3.0.3",
- "autoprefixer": "^7.1.6",
+ "autoprefixer": "^8.6.5",
"axios": "~0.16.2",
- "babel-core": "^6.25.0",
- "babel-loader": "^7.1.1",
- "babel-plugin-lodash": "^3.3.2",
+ "babel-core": "^6.26.3",
+ "babel-loader": "^7.1.5",
+ "babel-plugin-lodash": "^3.3.4",
"babel-plugin-preval": "^1.6.1",
- "babel-plugin-react-intl": "^2.3.1",
+ "babel-plugin-react-intl": "^2.4.0",
"babel-plugin-syntax-dynamic-import": "^6.18.0",
"babel-plugin-transform-class-properties": "^6.24.1",
- "babel-plugin-transform-decorators-legacy": "^1.3.4",
- "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1",
+ "babel-plugin-transform-decorators-legacy": "^1.3.5",
+ "babel-plugin-transform-es2015-modules-commonjs": "^6.26.2",
"babel-plugin-transform-object-rest-spread": "^6.23.0",
"babel-plugin-transform-react-inline-elements": "^6.22.0",
"babel-plugin-transform-react-jsx-self": "^6.22.0",
"babel-plugin-transform-react-jsx-source": "^6.22.0",
- "babel-plugin-transform-react-remove-prop-types": "^0.4.10",
+ "babel-plugin-transform-react-remove-prop-types": "^0.4.13",
"babel-plugin-transform-runtime": "^6.23.0",
- "babel-preset-env": "^1.6.1",
+ "babel-preset-env": "^1.7.0",
"babel-preset-react": "^6.24.1",
"classnames": "^2.2.5",
- "compression-webpack-plugin": "^1.0.1",
- "cross-env": "^5.1.1",
- "css-loader": "^0.28.4",
+ "compression-webpack-plugin": "^1.1.11",
+ "cross-env": "^5.1.4",
+ "css-loader": "^0.28.11",
"detect-passive-events": "^1.0.2",
"dotenv": "^4.0.0",
"emoji-mart": "Gargron/emoji-mart#build",
@@ -51,8 +51,7 @@
"escape-html": "^1.0.3",
"exif-js": "^2.3.0",
"express": "^4.16.2",
- "extract-text-webpack-plugin": "^3.0.2",
- "file-loader": "^0.11.2",
+ "file-loader": "^1.1.11",
"font-awesome": "^4.7.0",
"glob": "^7.1.1",
"http-link-header": "^0.8.0",
@@ -63,27 +62,28 @@
"intl-messageformat": "^2.2.0",
"intl-relativeformat": "^2.1.0",
"is-nan": "^1.2.1",
- "js-yaml": "^3.9.0",
- "lodash": "^4.17.4",
+ "js-yaml": "^3.11.0",
+ "lodash": "^4.17.5",
"mark-loader": "^0.1.6",
"marky": "^1.2.0",
+ "mini-css-extract-plugin": "^0.4.1",
"mkdirp": "^0.5.1",
- "node-sass": "^4.7.2",
+ "node-sass": "^4.9.2",
"npm-run-all": "^4.1.2",
"npmlog": "^4.1.2",
"object-assign": "^4.1.1",
"object-fit-images": "^3.2.3",
"object.values": "^1.0.4",
- "offline-plugin": "^4.8.3",
- "path-complete-extname": "^0.1.0",
+ "offline-plugin": "^5.0.5",
+ "path-complete-extname": "^1.0.0",
"pg": "^6.4.0",
- "postcss-loader": "^2.0.9",
+ "postcss-loader": "^2.1.6",
"postcss-object-fit-images": "^1.1.2",
- "postcss-smart-import": "^0.7.5",
- "precss": "^2.0.0",
+ "postcss-smart-import": "^0.7.6",
+ "precss": "^3.1.2",
"prop-types": "^15.5.10",
"punycode": "^2.1.0",
- "rails-ujs": "^5.1.2",
+ "rails-ujs": "^5.2.0",
"react": "^16.3.0",
"react-dom": "^16.3.0",
"react-hotkeys": "^0.10.0",
@@ -107,25 +107,26 @@
"redux-thunk": "^2.2.0",
"requestidlecallback": "^0.3.0",
"reselect": "^3.0.1",
- "resolve-url-loader": "^2.2.0",
"rimraf": "^2.6.1",
- "sass-loader": "^6.0.6",
+ "sass-loader": "^7.0.3",
"stringz": "^0.3.0",
- "style-loader": "^0.19.0",
+ "style-loader": "^0.21.0",
"substring-trie": "^1.0.2",
"throng": "^4.0.0",
"tiny-queue": "^0.2.1",
+ "uglifyjs-webpack-plugin": "^1.2.7",
"uuid": "^3.1.0",
- "uws": "^10.148.0",
- "webpack": "^3.9.1",
- "webpack-bundle-analyzer": "^2.9.1",
- "webpack-manifest-plugin": "^1.2.1",
- "webpack-merge": "^4.1.1",
+ "uws": "^10.148.1",
+ "webpack": "^4.16.0",
+ "webpack-bundle-analyzer": "^2.13.1",
+ "webpack-cli": "^3.0.8",
+ "webpack-manifest-plugin": "^2.0.3",
+ "webpack-merge": "^4.1.3",
"websocket.js": "^0.1.12",
"whatwg-url": "^6.4.1"
},
"devDependencies": {
- "babel-eslint": "^8.2.3",
+ "babel-eslint": "^8.2.6",
"enzyme": "^3.2.0",
"enzyme-adapter-react-16": "^1.1.0",
"eslint": "^4.19.1",
@@ -135,9 +136,9 @@
"eslint-plugin-react": "^7.8.2",
"jest": "^21.2.1",
"raf": "^3.4.0",
- "react-intl-translations-manager": "^5.0.0",
+ "react-intl-translations-manager": "^5.0.3",
"react-test-renderer": "^16.2.0",
- "webpack-dev-server": "^2.9.5",
+ "webpack-dev-server": "^3.1.4",
"yargs": "^8.0.2"
},
"optionalDependencies": {
diff --git a/yarn.lock b/yarn.lock
index 5f3d051ec..357a07005 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,14 +2,6 @@
# yarn lockfile v1
-"@babel/code-frame@7.0.0-beta.36":
- version "7.0.0-beta.36"
- resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.36.tgz#2349d7ec04b3a06945ae173280ef8579b63728e4"
- dependencies:
- chalk "^2.0.0"
- esutils "^2.0.2"
- js-tokens "^3.0.0"
-
"@babel/code-frame@7.0.0-beta.44":
version "7.0.0-beta.44"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz#2a02643368de80916162be70865c97774f3adbd9"
@@ -26,14 +18,6 @@
source-map "^0.5.0"
trim-right "^1.0.1"
-"@babel/helper-function-name@7.0.0-beta.36":
- version "7.0.0-beta.36"
- resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.36.tgz#366e3bc35147721b69009f803907c4d53212e88d"
- dependencies:
- "@babel/helper-get-function-arity" "7.0.0-beta.36"
- "@babel/template" "7.0.0-beta.36"
- "@babel/types" "7.0.0-beta.36"
-
"@babel/helper-function-name@7.0.0-beta.44":
version "7.0.0-beta.44"
resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz#e18552aaae2231100a6e485e03854bc3532d44dd"
@@ -42,18 +26,19 @@
"@babel/template" "7.0.0-beta.44"
"@babel/types" "7.0.0-beta.44"
-"@babel/helper-get-function-arity@7.0.0-beta.36":
- version "7.0.0-beta.36"
- resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.36.tgz#f5383bac9a96b274828b10d98900e84ee43e32b8"
- dependencies:
- "@babel/types" "7.0.0-beta.36"
-
"@babel/helper-get-function-arity@7.0.0-beta.44":
version "7.0.0-beta.44"
resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz#d03ca6dd2b9f7b0b1e6b32c56c72836140db3a15"
dependencies:
"@babel/types" "7.0.0-beta.44"
+"@babel/helper-module-imports@^7.0.0-beta.49":
+ version "7.0.0-beta.53"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0-beta.53.tgz#e735e6aa30a504b0f9d85c38a6d470a9f4aa81d9"
+ dependencies:
+ "@babel/types" "7.0.0-beta.53"
+ lodash "^4.17.5"
+
"@babel/helper-split-export-declaration@7.0.0-beta.44":
version "7.0.0-beta.44"
resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz#c0b351735e0fbcb3822c8ad8db4e583b05ebd9dc"
@@ -68,14 +53,12 @@
esutils "^2.0.2"
js-tokens "^3.0.0"
-"@babel/template@7.0.0-beta.36":
- version "7.0.0-beta.36"
- resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.36.tgz#02e903de5d68bd7899bce3c5b5447e59529abb00"
+"@babel/runtime@^7.0.0-beta.42":
+ version "7.0.0-beta.53"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.0.0-beta.53.tgz#9df22ae34823ce89f790060594b83ee572e2c5d2"
dependencies:
- "@babel/code-frame" "7.0.0-beta.36"
- "@babel/types" "7.0.0-beta.36"
- babylon "7.0.0-beta.36"
- lodash "^4.2.0"
+ core-js "^2.5.7"
+ regenerator-runtime "^0.12.0"
"@babel/template@7.0.0-beta.44":
version "7.0.0-beta.44"
@@ -86,19 +69,6 @@
babylon "7.0.0-beta.44"
lodash "^4.2.0"
-"@babel/traverse@7.0.0-beta.36":
- version "7.0.0-beta.36"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.36.tgz#1dc6f8750e89b6b979de5fe44aa993b1a2192261"
- dependencies:
- "@babel/code-frame" "7.0.0-beta.36"
- "@babel/helper-function-name" "7.0.0-beta.36"
- "@babel/types" "7.0.0-beta.36"
- babylon "7.0.0-beta.36"
- debug "^3.0.1"
- globals "^11.1.0"
- invariant "^2.2.0"
- lodash "^4.2.0"
-
"@babel/traverse@7.0.0-beta.44":
version "7.0.0-beta.44"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.44.tgz#a970a2c45477ad18017e2e465a0606feee0d2966"
@@ -114,14 +84,6 @@
invariant "^2.2.0"
lodash "^4.2.0"
-"@babel/types@7.0.0-beta.36":
- version "7.0.0-beta.36"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.36.tgz#64f2004353de42adb72f9ebb4665fc35b5499d23"
- dependencies:
- esutils "^2.0.2"
- lodash "^4.2.0"
- to-fast-properties "^2.0.0"
-
"@babel/types@7.0.0-beta.44":
version "7.0.0-beta.44"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.44.tgz#6b1b164591f77dec0a0342aca995f2d046b3a757"
@@ -130,9 +92,179 @@
lodash "^4.2.0"
to-fast-properties "^2.0.0"
+"@babel/types@7.0.0-beta.53", "@babel/types@^7.0.0-beta.49":
+ version "7.0.0-beta.53"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.53.tgz#19a461c0da515595dfb6740b4b45dc7bb0e6b375"
+ dependencies:
+ esutils "^2.0.2"
+ lodash "^4.17.5"
+ to-fast-properties "^2.0.0"
+
+"@csstools/convert-colors@^1.4.0":
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7"
+
+"@csstools/postcss-image-set-function@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-image-set-function/-/postcss-image-set-function-1.0.0.tgz#1ef0913d90a9c4440495eb41624c202e53a703f3"
+ dependencies:
+ postcss "^6.0.20"
+ postcss-value-parser "^3.3.0"
+
+"@csstools/sass-import-resolve@^1":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@csstools/sass-import-resolve/-/sass-import-resolve-1.0.0.tgz#32c3cdb2f7af3cd8f0dca357b592e7271f3831b5"
+
"@types/node@*":
- version "8.0.53"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.53.tgz#396b35af826fa66aad472c8cb7b8d5e277f4e6d8"
+ version "10.5.2"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-10.5.2.tgz#f19f05314d5421fe37e74153254201a7bf00a707"
+
+"@webassemblyjs/ast@1.5.13":
+ version "1.5.13"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.5.13.tgz#81155a570bd5803a30ec31436bc2c9c0ede38f25"
+ dependencies:
+ "@webassemblyjs/helper-module-context" "1.5.13"
+ "@webassemblyjs/helper-wasm-bytecode" "1.5.13"
+ "@webassemblyjs/wast-parser" "1.5.13"
+ debug "^3.1.0"
+ mamacro "^0.0.3"
+
+"@webassemblyjs/floating-point-hex-parser@1.5.13":
+ version "1.5.13"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.5.13.tgz#29ce0baa97411f70e8cce68ce9c0f9d819a4e298"
+
+"@webassemblyjs/helper-api-error@1.5.13":
+ version "1.5.13"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.5.13.tgz#e49b051d67ee19a56e29b9aa8bd949b5b4442a59"
+
+"@webassemblyjs/helper-buffer@1.5.13":
+ version "1.5.13"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.5.13.tgz#873bb0a1b46449231137c1262ddfd05695195a1e"
+ dependencies:
+ debug "^3.1.0"
+
+"@webassemblyjs/helper-code-frame@1.5.13":
+ version "1.5.13"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.5.13.tgz#1bd2181b6a0be14e004f0fe9f5a660d265362b58"
+ dependencies:
+ "@webassemblyjs/wast-printer" "1.5.13"
+
+"@webassemblyjs/helper-fsm@1.5.13":
+ version "1.5.13"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.5.13.tgz#cdf3d9d33005d543a5c5e5adaabf679ffa8db924"
+
+"@webassemblyjs/helper-module-context@1.5.13":
+ version "1.5.13"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.5.13.tgz#dc29ddfb51ed657655286f94a5d72d8a489147c5"
+ dependencies:
+ debug "^3.1.0"
+ mamacro "^0.0.3"
+
+"@webassemblyjs/helper-wasm-bytecode@1.5.13":
+ version "1.5.13"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.5.13.tgz#03245817f0a762382e61733146f5773def15a747"
+
+"@webassemblyjs/helper-wasm-section@1.5.13":
+ version "1.5.13"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.5.13.tgz#efc76f44a10d3073b584b43c38a179df173d5c7d"
+ dependencies:
+ "@webassemblyjs/ast" "1.5.13"
+ "@webassemblyjs/helper-buffer" "1.5.13"
+ "@webassemblyjs/helper-wasm-bytecode" "1.5.13"
+ "@webassemblyjs/wasm-gen" "1.5.13"
+ debug "^3.1.0"
+
+"@webassemblyjs/ieee754@1.5.13":
+ version "1.5.13"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.5.13.tgz#573e97c8c12e4eebb316ca5fde0203ddd90b0364"
+ dependencies:
+ ieee754 "^1.1.11"
+
+"@webassemblyjs/leb128@1.5.13":
+ version "1.5.13"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.5.13.tgz#ab52ebab9cec283c1c1897ac1da833a04a3f4cee"
+ dependencies:
+ long "4.0.0"
+
+"@webassemblyjs/utf8@1.5.13":
+ version "1.5.13"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.5.13.tgz#6b53d2cd861cf94fa99c1f12779dde692fbc2469"
+
+"@webassemblyjs/wasm-edit@1.5.13":
+ version "1.5.13"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.5.13.tgz#c9cef5664c245cf11b3b3a73110c9155831724a8"
+ dependencies:
+ "@webassemblyjs/ast" "1.5.13"
+ "@webassemblyjs/helper-buffer" "1.5.13"
+ "@webassemblyjs/helper-wasm-bytecode" "1.5.13"
+ "@webassemblyjs/helper-wasm-section" "1.5.13"
+ "@webassemblyjs/wasm-gen" "1.5.13"
+ "@webassemblyjs/wasm-opt" "1.5.13"
+ "@webassemblyjs/wasm-parser" "1.5.13"
+ "@webassemblyjs/wast-printer" "1.5.13"
+ debug "^3.1.0"
+
+"@webassemblyjs/wasm-gen@1.5.13":
+ version "1.5.13"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.5.13.tgz#8e6ea113c4b432fa66540189e79b16d7a140700e"
+ dependencies:
+ "@webassemblyjs/ast" "1.5.13"
+ "@webassemblyjs/helper-wasm-bytecode" "1.5.13"
+ "@webassemblyjs/ieee754" "1.5.13"
+ "@webassemblyjs/leb128" "1.5.13"
+ "@webassemblyjs/utf8" "1.5.13"
+
+"@webassemblyjs/wasm-opt@1.5.13":
+ version "1.5.13"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.5.13.tgz#147aad7717a7ee4211c36b21a5f4c30dddf33138"
+ dependencies:
+ "@webassemblyjs/ast" "1.5.13"
+ "@webassemblyjs/helper-buffer" "1.5.13"
+ "@webassemblyjs/wasm-gen" "1.5.13"
+ "@webassemblyjs/wasm-parser" "1.5.13"
+ debug "^3.1.0"
+
+"@webassemblyjs/wasm-parser@1.5.13":
+ version "1.5.13"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.5.13.tgz#6f46516c5bb23904fbdf58009233c2dd8a54c72f"
+ dependencies:
+ "@webassemblyjs/ast" "1.5.13"
+ "@webassemblyjs/helper-api-error" "1.5.13"
+ "@webassemblyjs/helper-wasm-bytecode" "1.5.13"
+ "@webassemblyjs/ieee754" "1.5.13"
+ "@webassemblyjs/leb128" "1.5.13"
+ "@webassemblyjs/utf8" "1.5.13"
+
+"@webassemblyjs/wast-parser@1.5.13":
+ version "1.5.13"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.5.13.tgz#5727a705d397ae6a3ae99d7f5460acf2ec646eea"
+ dependencies:
+ "@webassemblyjs/ast" "1.5.13"
+ "@webassemblyjs/floating-point-hex-parser" "1.5.13"
+ "@webassemblyjs/helper-api-error" "1.5.13"
+ "@webassemblyjs/helper-code-frame" "1.5.13"
+ "@webassemblyjs/helper-fsm" "1.5.13"
+ long "^3.2.0"
+ mamacro "^0.0.3"
+
+"@webassemblyjs/wast-printer@1.5.13":
+ version "1.5.13"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.5.13.tgz#bb34d528c14b4f579e7ec11e793ec50ad7cd7c95"
+ dependencies:
+ "@webassemblyjs/ast" "1.5.13"
+ "@webassemblyjs/wast-parser" "1.5.13"
+ long "^3.2.0"
+
+"@webpack-contrib/schema-utils@^1.0.0-beta.0":
+ version "1.0.0-beta.0"
+ resolved "https://registry.yarnpkg.com/@webpack-contrib/schema-utils/-/schema-utils-1.0.0-beta.0.tgz#bf9638c9464d177b48209e84209e23bee2eb4f65"
+ dependencies:
+ ajv "^6.1.0"
+ ajv-keywords "^3.1.0"
+ chalk "^2.3.2"
+ strip-ansi "^4.0.0"
+ text-table "^0.2.0"
+ webpack-log "^1.1.2"
abab@^1.0.3:
version "1.0.4"
@@ -142,18 +274,18 @@ abbrev@1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
-accepts@~1.3.4:
- version "1.3.4"
- resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.4.tgz#86246758c7dd6d21a6474ff084a4740ec05eb21f"
+accepts@~1.3.4, accepts@~1.3.5:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2"
dependencies:
- mime-types "~2.1.16"
+ mime-types "~2.1.18"
negotiator "0.6.1"
-acorn-dynamic-import@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4"
+acorn-dynamic-import@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz#901ceee4c7faaef7e07ad2a47e890675da50a278"
dependencies:
- acorn "^4.0.3"
+ acorn "^5.0.0"
acorn-globals@^3.1.0:
version "3.1.0"
@@ -171,34 +303,22 @@ acorn@^3.0.4:
version "3.3.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
-acorn@^4.0.3, acorn@^4.0.4:
+acorn@^4.0.4:
version "4.0.13"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787"
-acorn@^5.0.0, acorn@^5.1.1:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.2.1.tgz#317ac7821826c22c702d66189ab8359675f135d7"
+acorn@^5.0.0, acorn@^5.3.0, acorn@^5.5.0, acorn@^5.6.2:
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.1.tgz#f095829297706a7c9776958c0afc8930a9b9d9d8"
-acorn@^5.5.0:
- version "5.6.0"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.6.0.tgz#572bedb377a1c61b7a289e72b8c5cfeb7baaf0bf"
-
-adjust-sourcemap-loader@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/adjust-sourcemap-loader/-/adjust-sourcemap-loader-1.1.0.tgz#412d92404eb61e4113635012cba53a33d008e0e2"
- dependencies:
- assert "^1.3.0"
- camelcase "^1.2.1"
- loader-utils "^1.0.2"
- lodash.assign "^4.0.1"
- lodash.defaults "^3.1.2"
- object-path "^0.9.2"
- regex-parser "^2.2.1"
-
-ajv-keywords@^2.0.0, ajv-keywords@^2.1.0:
+ajv-keywords@^2.1.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762"
+ajv-keywords@^3.1.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a"
+
ajv@^4.9.1:
version "4.11.8"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
@@ -206,16 +326,7 @@ ajv@^4.9.1:
co "^4.6.0"
json-stable-stringify "^1.0.1"
-ajv@^5.0.0, ajv@^5.1.0, ajv@^5.1.5:
- version "5.5.1"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.1.tgz#b38bb8876d9e86bee994956a04e721e88b248eb2"
- dependencies:
- co "^4.6.0"
- fast-deep-equal "^1.0.0"
- fast-json-stable-stringify "^2.0.0"
- json-schema-traverse "^0.3.0"
-
-ajv@^5.2.3, ajv@^5.3.0:
+ajv@^5.1.0, ajv@^5.2.3, ajv@^5.3.0:
version "5.5.2"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965"
dependencies:
@@ -224,6 +335,15 @@ ajv@^5.2.3, ajv@^5.3.0:
fast-json-stable-stringify "^2.0.0"
json-schema-traverse "^0.3.0"
+ajv@^6.1.0:
+ version "6.5.2"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.2.tgz#678495f9b82f7cca6be248dd92f59bff5e1f4360"
+ dependencies:
+ fast-deep-equal "^2.0.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.1"
+
align-text@^0.1.1, align-text@^0.1.3:
version "0.1.4"
resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
@@ -241,8 +361,8 @@ amdefine@>=0.0.4:
resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
ansi-escapes@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92"
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30"
ansi-html@0.0.7:
version "0.0.7"
@@ -260,9 +380,9 @@ ansi-styles@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
-ansi-styles@^3.1.0, ansi-styles@^3.2.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88"
+ansi-styles@^3.2.0, ansi-styles@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
dependencies:
color-convert "^1.9.0"
@@ -270,41 +390,42 @@ any-promise@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-0.1.0.tgz#830b680aa7e56f33451d4b049f3bd8044498ee27"
-anymatch@^1.3.0:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a"
+anymatch@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
dependencies:
- micromatch "^2.1.5"
- normalize-path "^2.0.0"
+ micromatch "^3.1.4"
+ normalize-path "^2.1.1"
-append-transform@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991"
+append-transform@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-1.0.0.tgz#046a52ae582a228bd72f58acfbe2967c678759ab"
dependencies:
- default-require-extensions "^1.0.0"
+ default-require-extensions "^2.0.0"
-aproba@^1.0.3:
+aproba@^1.0.3, aproba@^1.1.1:
version "1.2.0"
resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
are-we-there-yet@~1.1.2:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d"
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
dependencies:
delegates "^1.0.0"
readable-stream "^2.0.6"
argparse@^1.0.7:
- version "1.0.9"
- resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86"
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
dependencies:
sprintf-js "~1.0.2"
-aria-query@^0.7.0:
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-0.7.0.tgz#4af10a1e61573ddea0cf3b99b51c52c05b424d24"
+aria-query@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc"
dependencies:
ast-types-flow "0.0.7"
+ commander "^2.11.0"
arr-diff@^2.0.0:
version "2.0.0"
@@ -312,10 +433,18 @@ arr-diff@^2.0.0:
dependencies:
arr-flatten "^1.0.1"
-arr-flatten@^1.0.1:
+arr-diff@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
+
+arr-flatten@^1.0.1, arr-flatten@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+arr-union@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
+
array-equal@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93"
@@ -365,6 +494,10 @@ array-unique@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
+array-unique@^0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
+
arrify@^1.0.0, arrify@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
@@ -374,8 +507,8 @@ asap@~2.0.3:
resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
asn1.js@^4.0.0:
- version "4.9.2"
- resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.2.tgz#8117ef4f7ed87cd8f89044b5bff97ac243a16c9a"
+ version "4.10.1"
+ resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0"
dependencies:
bn.js "^4.0.0"
inherits "^2.0.1"
@@ -393,13 +526,17 @@ assert-plus@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
-assert@^1.1.1, assert@^1.3.0:
+assert@^1.1.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91"
dependencies:
util "0.10.3"
-ast-types-flow@0.0.7:
+assign-symbols@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+
+ast-types-flow@0.0.7, ast-types-flow@^0.0.7:
version "0.0.7"
resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad"
@@ -419,29 +556,23 @@ async-limiter@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8"
-async@2.4.1:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/async/-/async-2.4.1.tgz#62a56b279c98a11d0987096a01cc3eeb8eb7bbd7"
- dependencies:
- lodash "^4.14.0"
-
async@^1.4.0, async@^1.5.2:
version "1.5.2"
resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
-async@^2.1.2, async@^2.1.4, async@^2.1.5, async@^2.4.1:
- version "2.6.0"
- resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4"
+async@^2.1.4:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610"
dependencies:
- lodash "^4.14.0"
+ lodash "^4.17.10"
asynckit@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
-atob@~1.1.0:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/atob/-/atob-1.1.3.tgz#95f13629b12c3a51a5d215abdce2aa9f32f80773"
+atob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.1.tgz#ae2d5a729477f289d60dd7f96a6314a22dd6c22a"
autoprefixer@^6.3.1:
version "6.7.7"
@@ -454,15 +585,15 @@ autoprefixer@^6.3.1:
postcss "^5.2.16"
postcss-value-parser "^3.2.3"
-autoprefixer@^7.1.6:
- version "7.1.6"
- resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.1.6.tgz#fb933039f74af74a83e71225ce78d9fd58ba84d7"
+autoprefixer@^8.6.5:
+ version "8.6.5"
+ resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-8.6.5.tgz#343f3d193ed568b3208e00117a1b96eb691d4ee9"
dependencies:
- browserslist "^2.5.1"
- caniuse-lite "^1.0.30000748"
+ browserslist "^3.2.8"
+ caniuse-lite "^1.0.30000864"
normalize-range "^0.1.2"
num2fraction "^1.2.2"
- postcss "^6.0.13"
+ postcss "^6.0.23"
postcss-value-parser "^3.2.3"
aws-sign2@~0.6.0:
@@ -474,8 +605,8 @@ aws-sign2@~0.7.0:
resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
aws4@^1.2.1, aws4@^1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e"
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.7.0.tgz#d4d0e9b9dbfca77bf08eeb0a8a471550fe39e289"
axios@~0.16.2:
version "0.16.2"
@@ -484,13 +615,13 @@ axios@~0.16.2:
follow-redirects "^1.2.3"
is-buffer "^1.1.5"
-axobject-query@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-0.1.0.tgz#62f59dbc59c9f9242759ca349960e7a2fe3c36c0"
+axobject-query@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.0.1.tgz#05dfa705ada8ad9db993fa6896f22d395b0b0a07"
dependencies:
ast-types-flow "0.0.7"
-babel-code-frame@^6.11.0, babel-code-frame@^6.22.0, babel-code-frame@^6.26.0:
+babel-code-frame@^6.22.0, babel-code-frame@^6.26.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
dependencies:
@@ -498,9 +629,9 @@ babel-code-frame@^6.11.0, babel-code-frame@^6.22.0, babel-code-frame@^6.26.0:
esutils "^2.0.2"
js-tokens "^3.0.2"
-babel-core@^6.0.0, babel-core@^6.25.0, babel-core@^6.26.0:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8"
+babel-core@^6.0.0, babel-core@^6.26.0, babel-core@^6.26.3:
+ version "6.26.3"
+ resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207"
dependencies:
babel-code-frame "^6.26.0"
babel-generator "^6.26.0"
@@ -512,41 +643,30 @@ babel-core@^6.0.0, babel-core@^6.25.0, babel-core@^6.26.0:
babel-traverse "^6.26.0"
babel-types "^6.26.0"
babylon "^6.18.0"
- convert-source-map "^1.5.0"
- debug "^2.6.8"
+ convert-source-map "^1.5.1"
+ debug "^2.6.9"
json5 "^0.5.1"
lodash "^4.17.4"
minimatch "^3.0.4"
path-is-absolute "^1.0.1"
- private "^0.1.7"
+ private "^0.1.8"
slash "^1.0.0"
- source-map "^0.5.6"
+ source-map "^0.5.7"
-babel-eslint@^8.0.1:
- version "8.2.1"
- resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.2.1.tgz#136888f3c109edc65376c23ebf494f36a3e03951"
- dependencies:
- "@babel/code-frame" "7.0.0-beta.36"
- "@babel/traverse" "7.0.0-beta.36"
- "@babel/types" "7.0.0-beta.36"
- babylon "7.0.0-beta.36"
- eslint-scope "~3.7.1"
- eslint-visitor-keys "^1.0.0"
-
-babel-eslint@^8.2.3:
- version "8.2.3"
- resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.2.3.tgz#1a2e6681cc9bc4473c32899e59915e19cd6733cf"
+babel-eslint@^8.0.1, babel-eslint@^8.2.6:
+ version "8.2.6"
+ resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.2.6.tgz#6270d0c73205628067c0f7ae1693a9e797acefd9"
dependencies:
"@babel/code-frame" "7.0.0-beta.44"
"@babel/traverse" "7.0.0-beta.44"
"@babel/types" "7.0.0-beta.44"
babylon "7.0.0-beta.44"
- eslint-scope "~3.7.1"
+ eslint-scope "3.7.1"
eslint-visitor-keys "^1.0.0"
babel-generator@^6.18.0, babel-generator@^6.26.0:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5"
+ version "6.26.1"
+ resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90"
dependencies:
babel-messages "^6.23.0"
babel-runtime "^6.26.0"
@@ -554,7 +674,7 @@ babel-generator@^6.18.0, babel-generator@^6.26.0:
detect-indent "^4.0.0"
jsesc "^1.3.0"
lodash "^4.17.4"
- source-map "^0.5.6"
+ source-map "^0.5.7"
trim-right "^1.0.1"
babel-helper-builder-binary-assignment-operator-visitor@^6.24.1:
@@ -623,13 +743,6 @@ babel-helper-hoist-variables@^6.24.1:
babel-runtime "^6.22.0"
babel-types "^6.24.1"
-babel-helper-module-imports@^7.0.0-beta.3:
- version "7.0.0-beta.3"
- resolved "https://registry.yarnpkg.com/babel-helper-module-imports/-/babel-helper-module-imports-7.0.0-beta.3.tgz#e15764e3af9c8e11810c09f78f498a2bdc71585a"
- dependencies:
- babel-types "7.0.0-beta.3"
- lodash "^4.2.0"
-
babel-helper-optimise-call-expression@^6.24.1:
version "6.24.1"
resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257"
@@ -680,20 +793,14 @@ babel-jest@^21.2.0:
babel-plugin-istanbul "^4.0.0"
babel-preset-jest "^21.2.0"
-babel-loader@^7.1.1:
- version "7.1.2"
- resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.2.tgz#f6cbe122710f1aa2af4d881c6d5b54358ca24126"
+babel-loader@^7.1.5:
+ version "7.1.5"
+ resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.5.tgz#e3ee0cd7394aa557e013b02d3e492bfd07aa6d68"
dependencies:
find-cache-dir "^1.0.0"
loader-utils "^1.0.2"
mkdirp "^0.5.1"
-babel-macros@^1.1.1:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/babel-macros/-/babel-macros-1.2.0.tgz#39e47ed6d286d4a98f1948d8bab45dac17e4e2d4"
- dependencies:
- cosmiconfig "3.1.0"
-
babel-messages@^6.23.0:
version "6.23.0"
resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
@@ -707,39 +814,46 @@ babel-plugin-check-es2015-constants@^6.22.0:
babel-runtime "^6.22.0"
babel-plugin-istanbul@^4.0.0:
- version "4.1.5"
- resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz#6760cdd977f411d3e175bb064f2bc327d99b2b6e"
+ version "4.1.6"
+ resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45"
dependencies:
+ babel-plugin-syntax-object-rest-spread "^6.13.0"
find-up "^2.1.0"
- istanbul-lib-instrument "^1.7.5"
- test-exclude "^4.1.1"
+ istanbul-lib-instrument "^1.10.1"
+ test-exclude "^4.2.1"
babel-plugin-jest-hoist@^21.2.0:
version "21.2.0"
resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-21.2.0.tgz#2cef637259bd4b628a6cace039de5fcd14dbb006"
-babel-plugin-lodash@^3.3.2:
- version "3.3.2"
- resolved "https://registry.yarnpkg.com/babel-plugin-lodash/-/babel-plugin-lodash-3.3.2.tgz#da3a5b49ba27447f54463f6c4fa81396ccdd463f"
+babel-plugin-lodash@^3.3.4:
+ version "3.3.4"
+ resolved "https://registry.yarnpkg.com/babel-plugin-lodash/-/babel-plugin-lodash-3.3.4.tgz#4f6844358a1340baed182adbeffa8df9967bc196"
dependencies:
- babel-helper-module-imports "^7.0.0-beta.3"
- babel-types "^6.26.0"
+ "@babel/helper-module-imports" "^7.0.0-beta.49"
+ "@babel/types" "^7.0.0-beta.49"
glob "^7.1.1"
- lodash "^4.17.4"
+ lodash "^4.17.10"
require-package-name "^2.0.1"
-babel-plugin-preval@^1.6.1:
- version "1.6.2"
- resolved "https://registry.yarnpkg.com/babel-plugin-preval/-/babel-plugin-preval-1.6.2.tgz#8f580a1d4579d5fc79f1cfaee6f9fe0996fdeb1f"
+babel-plugin-macros@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.3.0.tgz#1538e6339cbcbf093f334dc2f10f5f53043e3fda"
dependencies:
- babel-macros "^1.1.1"
+ cosmiconfig "^4.0.0"
+
+babel-plugin-preval@^1.6.1:
+ version "1.6.4"
+ resolved "https://registry.yarnpkg.com/babel-plugin-preval/-/babel-plugin-preval-1.6.4.tgz#96febe8172b3ca6c3d03ed96eeb0382ba4b18056"
+ dependencies:
+ babel-plugin-macros "^2.0.0"
babel-register "^6.26.0"
babylon "^6.18.0"
require-from-string "^2.0.1"
-babel-plugin-react-intl@^2.3.1:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-react-intl/-/babel-plugin-react-intl-2.3.1.tgz#3d43912e824da005e08e8e8239d5ba784374bb00"
+babel-plugin-react-intl@^2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-react-intl/-/babel-plugin-react-intl-2.4.0.tgz#292fca8030603a9e0476973290836aa0c7da17e2"
dependencies:
babel-runtime "^6.2.0"
intl-messageformat-parser "^1.2.0"
@@ -798,9 +912,9 @@ babel-plugin-transform-class-properties@^6.24.1:
babel-runtime "^6.22.0"
babel-template "^6.24.1"
-babel-plugin-transform-decorators-legacy@^1.3.4:
- version "1.3.4"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators-legacy/-/babel-plugin-transform-decorators-legacy-1.3.4.tgz#741b58f6c5bce9e6027e0882d9c994f04f366925"
+babel-plugin-transform-decorators-legacy@^1.3.5:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators-legacy/-/babel-plugin-transform-decorators-legacy-1.3.5.tgz#0e492dffa0edd70529072887f8aa86d4dd8b40a1"
dependencies:
babel-plugin-syntax-decorators "^6.1.18"
babel-runtime "^6.2.0"
@@ -890,9 +1004,9 @@ babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015
babel-runtime "^6.22.0"
babel-template "^6.24.1"
-babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a"
+babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1, babel-plugin-transform-es2015-modules-commonjs@^6.26.2:
+ version "6.26.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3"
dependencies:
babel-plugin-transform-strict-mode "^6.24.1"
babel-runtime "^6.26.0"
@@ -1030,9 +1144,9 @@ babel-plugin-transform-react-jsx@^6.24.1:
babel-plugin-syntax-jsx "^6.8.0"
babel-runtime "^6.22.0"
-babel-plugin-transform-react-remove-prop-types@^0.4.10:
- version "0.4.10"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.10.tgz#3c7f3a03ad8aa6bb8c00e93fd13a433910444545"
+babel-plugin-transform-react-remove-prop-types@^0.4.13:
+ version "0.4.13"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.13.tgz#331cfc05099a808238311d78319c27460d481189"
babel-plugin-transform-regenerator@^6.22.0:
version "6.26.0"
@@ -1053,9 +1167,9 @@ babel-plugin-transform-strict-mode@^6.24.1:
babel-runtime "^6.22.0"
babel-types "^6.24.1"
-babel-preset-env@^1.6.1:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.6.1.tgz#a18b564cc9b9afdf4aae57ae3c1b0d99188e6f48"
+babel-preset-env@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a"
dependencies:
babel-plugin-check-es2015-constants "^6.22.0"
babel-plugin-syntax-trailing-function-commas "^6.22.0"
@@ -1084,7 +1198,7 @@ babel-preset-env@^1.6.1:
babel-plugin-transform-es2015-unicode-regex "^6.22.0"
babel-plugin-transform-exponentiation-operator "^6.22.0"
babel-plugin-transform-regenerator "^6.22.0"
- browserslist "^2.1.2"
+ browserslist "^3.2.6"
invariant "^2.2.2"
semver "^5.3.0"
@@ -1155,14 +1269,6 @@ babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0:
invariant "^2.2.2"
lodash "^4.17.4"
-babel-types@7.0.0-beta.3:
- version "7.0.0-beta.3"
- resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-7.0.0-beta.3.tgz#cd927ca70e0ae8ab05f4aab83778cfb3e6eb20b4"
- dependencies:
- esutils "^2.0.2"
- lodash "^4.2.0"
- to-fast-properties "^2.0.0"
-
babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
@@ -1172,10 +1278,6 @@ babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26
lodash "^4.17.4"
to-fast-properties "^1.0.3"
-babylon@7.0.0-beta.36:
- version "7.0.0-beta.36"
- resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.36.tgz#3a3683ba6a9a1e02b0aa507c8e63435e39305b9e"
-
babylon@7.0.0-beta.44:
version "7.0.0-beta.44"
resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.44.tgz#89159e15e6e30c5096e22d738d8c0af8a0e8ca1d"
@@ -1190,10 +1292,6 @@ backoff@^2.4.1:
dependencies:
precond "0.2"
-balanced-match@0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.1.0.tgz#b504bd05869b39259dd0c5efc35d843176dccc4a"
-
balanced-match@^0.4.2:
version "0.4.2"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
@@ -1203,19 +1301,39 @@ balanced-match@^1.0.0:
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
base64-js@^1.0.2:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.1.tgz#a91947da1f4a516ea38e5b4ec0ec3773675e0886"
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3"
+
+base@^0.11.1:
+ version "0.11.2"
+ resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
+ dependencies:
+ cache-base "^1.0.1"
+ class-utils "^0.3.5"
+ component-emitter "^1.2.1"
+ define-property "^1.0.0"
+ isobject "^3.0.1"
+ mixin-deep "^1.2.0"
+ pascalcase "^0.1.1"
batch@0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16"
bcrypt-pbkdf@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d"
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
dependencies:
tweetnacl "^0.14.3"
+bfj-node4@^5.2.0:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/bfj-node4/-/bfj-node4-5.3.1.tgz#e23d8b27057f1d0214fc561142ad9db998f26830"
+ dependencies:
+ bluebird "^3.5.1"
+ check-types "^7.3.0"
+ tryer "^1.0.0"
+
big.js@^3.1.3:
version "3.2.0"
resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e"
@@ -1230,6 +1348,10 @@ block-stream@*:
dependencies:
inherits "~2.0.0"
+bluebird@^3.5.1:
+ version "3.5.1"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9"
+
bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
version "4.11.8"
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
@@ -1270,21 +1392,9 @@ boom@2.x.x:
dependencies:
hoek "2.x.x"
-boom@4.x.x:
- version "4.3.1"
- resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31"
- dependencies:
- hoek "4.x.x"
-
-boom@5.x.x:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02"
- dependencies:
- hoek "4.x.x"
-
brace-expansion@^1.1.7:
- version "1.1.8"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292"
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
dependencies:
balanced-match "^1.0.0"
concat-map "0.0.1"
@@ -1297,19 +1407,34 @@ braces@^1.8.2:
preserve "^0.2.0"
repeat-element "^1.1.2"
+braces@^2.3.0, braces@^2.3.1:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
+ dependencies:
+ arr-flatten "^1.1.0"
+ array-unique "^0.3.2"
+ extend-shallow "^2.0.1"
+ fill-range "^4.0.0"
+ isobject "^3.0.1"
+ repeat-element "^1.1.2"
+ snapdragon "^0.8.1"
+ snapdragon-node "^2.0.1"
+ split-string "^3.0.2"
+ to-regex "^3.0.1"
+
brorand@^1.0.1:
version "1.1.0"
resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
browser-resolve@^1.11.2:
- version "1.11.2"
- resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce"
+ version "1.11.3"
+ resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6"
dependencies:
resolve "1.1.7"
browserify-aes@^1.0.0, browserify-aes@^1.0.4:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.1.1.tgz#38b7ab55edb806ff2dcda1a7f1620773a477c49f"
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
dependencies:
buffer-xor "^1.0.3"
cipher-base "^1.0.0"
@@ -1319,20 +1444,21 @@ browserify-aes@^1.0.0, browserify-aes@^1.0.4:
safe-buffer "^5.0.1"
browserify-cipher@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a"
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0"
dependencies:
browserify-aes "^1.0.4"
browserify-des "^1.0.0"
evp_bytestokey "^1.0.0"
browserify-des@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd"
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c"
dependencies:
cipher-base "^1.0.1"
des.js "^1.0.0"
inherits "^2.0.1"
+ safe-buffer "^5.1.2"
browserify-rsa@^4.0.0:
version "4.0.1"
@@ -1366,12 +1492,12 @@ browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6:
caniuse-db "^1.0.30000639"
electron-to-chromium "^1.2.7"
-browserslist@^2.1.2, browserslist@^2.5.1:
- version "2.9.1"
- resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.9.1.tgz#b72d3982ab01b5cd24da62ff6d45573886aff275"
+browserslist@^3.2.4, browserslist@^3.2.6, browserslist@^3.2.8:
+ version "3.2.8"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6"
dependencies:
- caniuse-lite "^1.0.30000770"
- electron-to-chromium "^1.3.27"
+ caniuse-lite "^1.0.30000844"
+ electron-to-chromium "^1.3.47"
bser@^2.0.0:
version "2.0.0"
@@ -1379,6 +1505,10 @@ bser@^2.0.0:
dependencies:
node-int64 "^0.4.0"
+buffer-from@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.0.tgz#87fcaa3a298358e0ade6e442cfce840740d1ad04"
+
buffer-indexof@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c"
@@ -1399,7 +1529,7 @@ buffer@^4.3.0:
ieee754 "^1.1.4"
isarray "^1.0.0"
-builtin-modules@^1.0.0, builtin-modules@^1.1.1:
+builtin-modules@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
@@ -1411,6 +1541,38 @@ bytes@3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
+cacache@^10.0.1, cacache@^10.0.4:
+ version "10.0.4"
+ resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460"
+ dependencies:
+ bluebird "^3.5.1"
+ chownr "^1.0.1"
+ glob "^7.1.2"
+ graceful-fs "^4.1.11"
+ lru-cache "^4.1.1"
+ mississippi "^2.0.0"
+ mkdirp "^0.5.1"
+ move-concurrently "^1.0.1"
+ promise-inflight "^1.0.1"
+ rimraf "^2.6.2"
+ ssri "^5.2.4"
+ unique-filename "^1.1.0"
+ y18n "^4.0.0"
+
+cache-base@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
+ dependencies:
+ collection-visit "^1.0.0"
+ component-emitter "^1.2.1"
+ get-value "^2.0.6"
+ has-value "^1.0.0"
+ isobject "^3.0.1"
+ set-value "^2.0.0"
+ to-object-path "^0.3.0"
+ union-value "^1.0.0"
+ unset-value "^1.0.0"
+
caller-path@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
@@ -1425,10 +1587,6 @@ callsites@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
-camelcase-css@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-1.0.1.tgz#157c4238265f5cf94a1dffde86446552cbf3f705"
-
camelcase-keys@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
@@ -1436,7 +1594,7 @@ camelcase-keys@^2.0.0:
camelcase "^2.0.0"
map-obj "^1.0.0"
-camelcase@^1.0.2, camelcase@^1.2.1:
+camelcase@^1.0.2:
version "1.2.1"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
@@ -1448,7 +1606,7 @@ camelcase@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
-camelcase@^4.0.0, camelcase@^4.1.0:
+camelcase@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
@@ -1462,16 +1620,18 @@ caniuse-api@^1.5.2:
lodash.uniq "^4.5.0"
caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639:
- version "1.0.30000777"
- resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000777.tgz#2e19adba63bdd7c501df637a862adead7f4bc054"
+ version "1.0.30000865"
+ resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000865.tgz#82ffb64d40f7567620aac02d3a632079689abc6b"
-caniuse-lite@^1.0.30000748, caniuse-lite@^1.0.30000770:
- version "1.0.30000777"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000777.tgz#31c18a4a8cd49782ebb305c8e8a93e6b3b3e4f13"
+caniuse-lite@^1.0.30000823, caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000864:
+ version "1.0.30000865"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000865.tgz#70026616e8afe6e1442f8bb4e1092987d81a2f25"
-caseless@~0.11.0:
- version "0.11.0"
- resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7"
+capture-exit@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-1.2.0.tgz#1c5fcc489fd0ab00d4f1ac7ae1072e3173fbab6f"
+ dependencies:
+ rsvp "^3.3.3"
caseless@~0.12.0:
version "0.12.0"
@@ -1484,10 +1644,6 @@ center-align@^0.1.1:
align-text "^0.1.3"
lazy-cache "^1.0.3"
-chain-function@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/chain-function/-/chain-function-1.0.0.tgz#0d4ab37e7e18ead0bdc47b920764118ce58733dc"
-
chalk@^1.1.1, chalk@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
@@ -1498,18 +1654,26 @@ chalk@^1.1.1, chalk@^1.1.3:
strip-ansi "^3.0.0"
supports-color "^2.0.0"
-chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba"
+chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.2, chalk@^2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e"
dependencies:
- ansi-styles "^3.1.0"
+ ansi-styles "^3.2.1"
escape-string-regexp "^1.0.5"
- supports-color "^4.0.0"
+ supports-color "^5.3.0"
chardet@^0.4.0:
version "0.4.2"
resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2"
+chardet@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.5.0.tgz#fe3ac73c00c3d865ffcc02a0682e2c20b6a06029"
+
+check-types@^7.3.0:
+ version "7.4.0"
+ resolved "https://registry.yarnpkg.com/check-types/-/check-types-7.4.0.tgz#0378ec1b9616ec71f774931a3c6516fad8c152f4"
+
cheerio@^1.0.0-rc.2:
version "1.0.0-rc.2"
resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.2.tgz#4b9f53a81b27e4d5dac31c0ffd0cfa03cc6830db"
@@ -1521,24 +1685,38 @@ cheerio@^1.0.0-rc.2:
lodash "^4.15.0"
parse5 "^3.0.1"
-chokidar@^1.6.0, chokidar@^1.7.0:
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468"
+chokidar@^2.0.0, chokidar@^2.0.2:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26"
dependencies:
- anymatch "^1.3.0"
+ anymatch "^2.0.0"
async-each "^1.0.0"
- glob-parent "^2.0.0"
+ braces "^2.3.0"
+ glob-parent "^3.1.0"
inherits "^2.0.1"
is-binary-path "^1.0.0"
- is-glob "^2.0.0"
+ is-glob "^4.0.0"
+ lodash.debounce "^4.0.8"
+ normalize-path "^2.1.1"
path-is-absolute "^1.0.0"
readdirp "^2.0.0"
+ upath "^1.0.5"
optionalDependencies:
- fsevents "^1.0.0"
+ fsevents "^1.2.2"
+
+chownr@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181"
+
+chrome-trace-event@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz#45a91bd2c20c9411f0963b5aaeb9a1b95e09cc48"
+ dependencies:
+ tslib "^1.9.0"
ci-info@^1.0.0:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.2.tgz#03561259db48d0474c8bdc90f5b47b068b6bbfb4"
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.3.tgz#710193264bb05c77b8c90d02f5aaf22216a667b2"
cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
version "1.0.4"
@@ -1557,9 +1735,18 @@ clap@^1.0.9:
dependencies:
chalk "^1.1.3"
+class-utils@^0.3.5:
+ version "0.3.6"
+ resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
+ dependencies:
+ arr-union "^3.1.0"
+ define-property "^0.2.5"
+ isobject "^3.0.0"
+ static-extend "^0.1.1"
+
classnames@^2.2.5:
- version "2.2.5"
- resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d"
+ version "2.2.6"
+ resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce"
cli-cursor@^2.1.0:
version "2.1.0"
@@ -1587,18 +1774,26 @@ cliui@^3.2.0:
strip-ansi "^3.0.1"
wrap-ansi "^2.0.0"
-clone-deep@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-0.3.0.tgz#348c61ae9cdbe0edfe053d91ff4cc521d790ede8"
+cliui@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49"
+ dependencies:
+ string-width "^2.1.1"
+ strip-ansi "^4.0.0"
+ wrap-ansi "^2.0.0"
+
+clone-deep@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-2.0.2.tgz#00db3a1e173656730d1188c3d6aced6d7ea97713"
dependencies:
for-own "^1.0.0"
- is-plain-object "^2.0.1"
- kind-of "^3.2.2"
- shallow-clone "^0.1.2"
+ is-plain-object "^2.0.4"
+ kind-of "^6.0.0"
+ shallow-clone "^1.0.0"
clone@^1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.3.tgz#298d7e2231660f40c003c2ed3140decf3f53085f"
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
co@^4.6.0:
version "4.6.0"
@@ -1614,13 +1809,24 @@ code-point-at@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
-color-convert@^1.3.0, color-convert@^1.9.0:
- version "1.9.1"
- resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed"
+collection-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
dependencies:
- color-name "^1.1.1"
+ map-visit "^1.0.0"
+ object-visit "^1.0.0"
-color-name@^1.0.0, color-name@^1.1.1:
+color-convert@^1.3.0, color-convert@^1.8.2, color-convert@^1.9.0:
+ version "1.9.2"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.2.tgz#49881b8fba67df12a96bdf3f56c0aab9e7913147"
+ dependencies:
+ color-name "1.1.1"
+
+color-name@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689"
+
+color-name@^1.0.0:
version "1.1.3"
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
@@ -1630,6 +1836,13 @@ color-string@^0.3.0:
dependencies:
color-name "^1.0.0"
+color-string@^1.4.0:
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.2.tgz#26e45814bc3c9a7cbd6751648a41434514a773a9"
+ dependencies:
+ color-name "^1.0.0"
+ simple-swizzle "^0.2.2"
+
color@^0.11.0:
version "0.11.4"
resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764"
@@ -1638,6 +1851,13 @@ color@^0.11.0:
color-convert "^1.3.0"
color-string "^0.3.0"
+color@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/color/-/color-1.0.3.tgz#e48e832d85f14ef694fb468811c2d5cfe729b55d"
+ dependencies:
+ color-convert "^1.8.2"
+ color-string "^1.4.0"
+
colormin@^1.0.5:
version "1.1.2"
resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133"
@@ -1654,44 +1874,55 @@ colors@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"
-combined-stream@^1.0.5, combined-stream@~1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
+combined-stream@1.0.6, combined-stream@^1.0.5, combined-stream@~1.0.5:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818"
dependencies:
delayed-stream "~1.0.0"
-commander@^2.8.1, commander@^2.9.0:
- version "2.12.2"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.12.2.tgz#0f5946c427ed9ec0d91a46bb9def53e54650e555"
+commander@^2.11.0, commander@^2.13.0, commander@^2.8.1:
+ version "2.16.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.16.0.tgz#f16390593996ceb4f3eeb020b31d78528f7f8a50"
+
+commander@~2.13.0:
+ version "2.13.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c"
commondir@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
-complex.js@2.0.4:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/complex.js/-/complex.js-2.0.4.tgz#d8e7cfb9652d1e853e723386421c1a0ca7a48373"
+compare-versions@^3.1.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.3.0.tgz#af93ea705a96943f622ab309578b9b90586f39c3"
-compressible@~2.0.11:
- version "2.0.12"
- resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.12.tgz#c59a5c99db76767e9876500e271ef63b3493bd66"
- dependencies:
- mime-db ">= 1.30.0 < 2"
+component-emitter@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
-compression-webpack-plugin@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-1.0.1.tgz#7f0a2af9f642b4f87b5989516a3b9e9b41bb4b3f"
+compressible@~2.0.13:
+ version "2.0.14"
+ resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.14.tgz#326c5f507fbb055f54116782b969a81b67a29da7"
dependencies:
- async "2.4.1"
+ mime-db ">= 1.34.0 < 2"
+
+compression-webpack-plugin@^1.1.11:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-1.1.11.tgz#8384c7a6ead1d2e2efb190bdfcdcf35878ed8266"
+ dependencies:
+ cacache "^10.0.1"
+ find-cache-dir "^1.0.0"
+ neo-async "^2.5.0"
+ serialize-javascript "^1.4.0"
webpack-sources "^1.0.1"
compression@^1.5.2:
- version "1.7.1"
- resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.1.tgz#eff2603efc2e22cf86f35d2eb93589f9875373db"
+ version "1.7.2"
+ resolved "http://registry.npmjs.org/compression/-/compression-1.7.2.tgz#aaffbcd6aaf854b44ebb280353d5ad1651f59a69"
dependencies:
accepts "~1.3.4"
bytes "3.0.0"
- compressible "~2.0.11"
+ compressible "~2.0.13"
debug "2.6.9"
on-headers "~1.0.1"
safe-buffer "5.1.1"
@@ -1701,10 +1932,11 @@ concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
-concat-stream@^1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7"
+concat-stream@^1.5.0, concat-stream@^1.6.0:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
dependencies:
+ buffer-from "^1.0.0"
inherits "^2.0.3"
readable-stream "^2.2.2"
typedarray "^0.0.6"
@@ -1743,11 +1975,7 @@ content-type@~1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
-convert-source-map@^0.3.3:
- version "0.3.5"
- resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-0.3.5.tgz#f1d802950af7dd2631a1febe0596550c86ab3190"
-
-convert-source-map@^1.1.1, convert-source-map@^1.4.0, convert-source-map@^1.5.0:
+convert-source-map@^1.4.0, convert-source-map@^1.5.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5"
@@ -1759,58 +1987,62 @@ cookie@0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
+copy-concurrently@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
+ dependencies:
+ aproba "^1.1.1"
+ fs-write-stream-atomic "^1.0.8"
+ iferr "^0.1.5"
+ mkdirp "^0.5.1"
+ rimraf "^2.5.4"
+ run-queue "^1.0.0"
+
+copy-descriptor@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
+
core-js@^1.0.0:
version "1.2.7"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636"
-core-js@^2.4.0, core-js@^2.5.0:
- version "2.5.1"
- resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.1.tgz#ae6874dc66937789b80754ff5428df66819ca50b"
+core-js@^2.4.0, core-js@^2.5.0, core-js@^2.5.7:
+ version "2.5.7"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e"
core-util-is@1.0.2, core-util-is@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
-cosmiconfig@3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-3.1.0.tgz#640a94bf9847f321800403cd273af60665c73397"
+cosmiconfig@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-4.0.0.tgz#760391549580bbd2df1e562bc177b13c290972dc"
dependencies:
is-directory "^0.3.1"
js-yaml "^3.9.0"
- parse-json "^3.0.0"
+ parse-json "^4.0.0"
require-from-string "^2.0.1"
-cosmiconfig@^2.1.0, cosmiconfig@^2.1.1:
- version "2.2.2"
- resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.2.2.tgz#6173cebd56fac042c1f4390edf7af6c07c7cb892"
- dependencies:
- is-directory "^0.3.1"
- js-yaml "^3.4.3"
- minimist "^1.2.0"
- object-assign "^4.1.0"
- os-homedir "^1.0.1"
- parse-json "^2.2.0"
- require-from-string "^1.1.0"
-
create-ecdh@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d"
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff"
dependencies:
bn.js "^4.1.0"
elliptic "^6.0.0"
create-hash@^1.1.0, create-hash@^1.1.2:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd"
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
dependencies:
cipher-base "^1.0.1"
inherits "^2.0.1"
- ripemd160 "^2.0.0"
+ md5.js "^1.3.4"
+ ripemd160 "^2.0.1"
sha.js "^2.4.0"
create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.6.tgz#acb9e221a4e17bdb076e90657c42b93e3726cf06"
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
dependencies:
cipher-base "^1.0.3"
create-hash "^1.1.0"
@@ -1820,18 +2052,18 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
sha.js "^2.4.8"
create-react-class@^15.5.2:
- version "15.6.2"
- resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.2.tgz#cf1ed15f12aad7f14ef5f2dfe05e6c42f91ef02a"
+ version "15.6.3"
+ resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.3.tgz#2d73237fb3f970ae6ebe011a9e66f46dbca80036"
dependencies:
fbjs "^0.8.9"
loose-envify "^1.3.1"
object-assign "^4.1.1"
-cross-env@^5.1.1:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.1.1.tgz#b6d8ab97f304c0f71dae7277b75fe424c08dfa74"
+cross-env@^5.1.4:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.2.0.tgz#6ecd4c015d5773e614039ee529076669b9d126f2"
dependencies:
- cross-spawn "^5.1.0"
+ cross-spawn "^6.0.5"
is-windows "^1.0.0"
cross-spawn@^3.0.0:
@@ -1849,18 +2081,22 @@ cross-spawn@^5.0.1, cross-spawn@^5.1.0:
shebang-command "^1.2.0"
which "^1.2.9"
+cross-spawn@^6.0.4, cross-spawn@^6.0.5:
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
+ dependencies:
+ nice-try "^1.0.4"
+ path-key "^2.0.1"
+ semver "^5.5.0"
+ shebang-command "^1.2.0"
+ which "^1.2.9"
+
cryptiles@2.x.x:
version "2.0.5"
resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
dependencies:
boom "2.x.x"
-cryptiles@3.x.x:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe"
- dependencies:
- boom "5.x.x"
-
crypto-browserify@^3.11.0:
version "3.12.0"
resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
@@ -1877,15 +2113,6 @@ crypto-browserify@^3.11.0:
randombytes "^2.0.0"
randomfill "^1.0.3"
-css-color-function@~1.3.3:
- version "1.3.3"
- resolved "https://registry.yarnpkg.com/css-color-function/-/css-color-function-1.3.3.tgz#8ed24c2c0205073339fafa004bc8c141fccb282e"
- dependencies:
- balanced-match "0.1.0"
- color "^0.11.0"
- debug "^3.1.0"
- rgb "~0.1.0"
-
css-color-names@0.0.4:
version "0.0.4"
resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
@@ -1916,22 +2143,22 @@ css-list-helpers@^1.0.1:
dependencies:
tcomb "^2.5.0"
-css-loader@^0.28.4:
- version "0.28.7"
- resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.7.tgz#5f2ee989dd32edd907717f953317656160999c1b"
+css-loader@^0.28.11:
+ version "0.28.11"
+ resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.11.tgz#c3f9864a700be2711bb5a2462b2389b1a392dab7"
dependencies:
- babel-code-frame "^6.11.0"
+ babel-code-frame "^6.26.0"
css-selector-tokenizer "^0.7.0"
- cssnano ">=2.6.1 <4"
+ cssnano "^3.10.0"
icss-utils "^2.1.0"
loader-utils "^1.0.2"
lodash.camelcase "^4.3.0"
- object-assign "^4.0.1"
+ object-assign "^4.1.1"
postcss "^5.0.6"
- postcss-modules-extract-imports "^1.0.0"
- postcss-modules-local-by-default "^1.0.1"
- postcss-modules-scope "^1.0.0"
- postcss-modules-values "^1.1.0"
+ postcss-modules-extract-imports "^1.2.0"
+ postcss-modules-local-by-default "^1.2.0"
+ postcss-modules-scope "^1.1.0"
+ postcss-modules-values "^1.3.0"
postcss-value-parser "^3.3.0"
source-list-map "^2.0.0"
@@ -1960,20 +2187,15 @@ css-what@2.1:
version "2.1.0"
resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd"
-css@^2.0.0:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/css/-/css-2.2.1.tgz#73a4c81de85db664d4ee674f7d47085e3b2d55dc"
- dependencies:
- inherits "^2.0.1"
- source-map "^0.1.38"
- source-map-resolve "^0.3.0"
- urix "^0.1.0"
+cssdb@^1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-1.6.0.tgz#3360c4163e07cf4d1efe58c1bc15170535f4d393"
cssesc@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4"
-"cssnano@>=2.6.1 <4":
+cssnano@^3.10.0:
version "3.10.0"
resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38"
dependencies:
@@ -2018,8 +2240,8 @@ csso@~2.3.1:
source-map "^0.5.3"
cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0":
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b"
+ version "0.3.4"
+ resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.4.tgz#8cd52e8a3acfd68d3aed38ee0a640177d2f9d797"
"cssstyle@>= 0.2.37 < 0.3.0":
version "0.2.37"
@@ -2033,13 +2255,17 @@ currently-unhandled@^0.4.1:
dependencies:
array-find-index "^1.0.1"
+cyclist@~0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640"
+
d@1:
version "1.0.0"
resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f"
dependencies:
es5-ext "^0.10.9"
-damerau-levenshtein@^1.0.0:
+damerau-levenshtein@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz#03191c432cb6eea168bb77f3a55ffdccb8978514"
@@ -2053,13 +2279,13 @@ date-now@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
-debug@2.6.9, debug@^2.2.0, debug@^2.6.6, debug@^2.6.8, debug@^2.6.9:
+debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.6, debug@^2.6.8, debug@^2.6.9:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
dependencies:
ms "2.0.0"
-debug@^3.0.1, debug@^3.1.0:
+debug@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
dependencies:
@@ -2069,27 +2295,31 @@ decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2:
version "1.2.0"
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
-decimal.js@7.2.3:
- version "7.2.3"
- resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-7.2.3.tgz#6434c3b8a8c375780062fc633d0d2bbdb264cc78"
+decode-uri-component@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
deep-equal@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
-deep-extend@^0.4.0, deep-extend@~0.4.0:
- version "0.4.2"
- resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f"
+deep-extend@^0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.5.1.tgz#b894a9dd90d3023fbf1c55a394fb858eb2066f1f"
+
+deep-extend@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
deep-is@~0.1.3:
version "0.1.3"
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
-default-require-extensions@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8"
+default-require-extensions@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-2.0.0.tgz#f5f8fbb18a7d6d50b21f641f649ebb522cfe24f7"
dependencies:
- strip-bom "^2.0.0"
+ strip-bom "^3.0.0"
defaults@^1.0.2:
version "1.0.3"
@@ -2104,6 +2334,25 @@ define-properties@^1.1.1, define-properties@^1.1.2:
foreach "^2.0.5"
object-keys "^1.0.8"
+define-property@^0.2.5:
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
+ dependencies:
+ is-descriptor "^0.1.0"
+
+define-property@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
+ dependencies:
+ is-descriptor "^1.0.0"
+
+define-property@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
+ dependencies:
+ is-descriptor "^1.0.2"
+ isobject "^3.0.1"
+
defined@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
@@ -2139,10 +2388,14 @@ delegates@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
-depd@1.1.1, depd@~1.1.1:
+depd@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359"
+depd@~1.1.1, depd@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
+
des.js@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc"
@@ -2173,12 +2426,12 @@ detect-passive-events@^1.0.2:
resolved "https://registry.yarnpkg.com/detect-passive-events/-/detect-passive-events-1.0.4.tgz#6ed477e6e5bceb79079735dcd357789d37f9a91a"
diff@^3.2.0:
- version "3.4.0"
- resolved "https://registry.yarnpkg.com/diff/-/diff-3.4.0.tgz#b1d85507daf3964828de54b37d0d73ba67dda56c"
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
diffie-hellman@^5.0.0:
- version "5.0.2"
- resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e"
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
dependencies:
bn.js "^4.1.0"
miller-rabin "^4.0.0"
@@ -2192,9 +2445,9 @@ dns-equal@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d"
-dns-packet@^1.0.1:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.2.2.tgz#a8a26bec7646438963fc86e06f8f8b16d6c8bf7a"
+dns-packet@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a"
dependencies:
ip "^1.1.0"
safe-buffer "^5.0.1"
@@ -2212,15 +2465,15 @@ doctrine@1.5.0:
esutils "^2.0.2"
isarray "^1.0.0"
-doctrine@^2.0.2, doctrine@^2.1.0:
+doctrine@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
dependencies:
esutils "^2.0.2"
-dom-helpers@^3.2.0, dom-helpers@^3.2.1:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.2.1.tgz#3203e07fed217bd1f424b019735582fc37b2825a"
+dom-helpers@^3.2.1, dom-helpers@^3.3.1:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.3.1.tgz#fc1a4e15ffdf60ddde03a480a9c0fece821dd4a6"
dom-serializer@0, dom-serializer@~0.1.0:
version "0.1.0"
@@ -2230,8 +2483,8 @@ dom-serializer@0, dom-serializer@~0.1.0:
entities "~1.1.1"
domain-browser@^1.1.1:
- version "1.1.7"
- resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc"
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
domelementtype@1, domelementtype@^1.3.0:
version "1.3.0"
@@ -2242,8 +2495,8 @@ domelementtype@~1.1.1:
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b"
domhandler@^2.3.0:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.1.tgz#892e47000a99be55bbf3774ffea0561d8879c259"
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803"
dependencies:
domelementtype "1"
@@ -2255,12 +2508,18 @@ domutils@1.5.1:
domelementtype "1"
domutils@^1.5.1:
- version "1.6.2"
- resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.6.2.tgz#1958cc0b4c9426e9ed367fb1c8e854891b0fa3ff"
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a"
dependencies:
dom-serializer "0"
domelementtype "1"
+dot-prop@^4.1.1:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57"
+ dependencies:
+ is-obj "^1.0.0"
+
dotenv@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-4.0.0.tgz#864ef1379aced55ce6f95debecdce179f7a0cd1d"
@@ -2273,6 +2532,15 @@ duplexer@^0.1.1, duplexer@~0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
+duplexify@^3.4.2, duplexify@^3.6.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.6.0.tgz#592903f5d80b38d037220541264d69a198fb3410"
+ dependencies:
+ end-of-stream "^1.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+ stream-shift "^1.0.0"
+
ecc-jsbn@~0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
@@ -2283,13 +2551,13 @@ ee-first@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
-ejs@^2.3.4, ejs@^2.5.6:
- version "2.5.7"
- resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.7.tgz#cc872c168880ae3c7189762fd5ffc00896c9518a"
+ejs@^2.3.4, ejs@^2.5.7:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.6.1.tgz#498ec0d495655abc6f23cd61868d926464071aa0"
-electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.27:
- version "1.3.27"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.27.tgz#78ecb8a399066187bb374eede35d9c70565a803d"
+electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.47:
+ version "1.3.52"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.52.tgz#d2d9f1270ba4a3b967b831c40ef71fb4d9ab5ce0"
elliptic@^6.0.0:
version "6.4.0"
@@ -2307,7 +2575,7 @@ emoji-mart@Gargron/emoji-mart#build:
version "2.6.2"
resolved "https://codeload.github.com/Gargron/emoji-mart/tar.gz/ff00dc470b5b2d9f145a6d6e977a54de5df2b4c9"
-emoji-regex@^6.1.0:
+emoji-regex@^6.5.1:
version "6.5.1"
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.5.1.tgz#9baea929b155565c11ea41c6626eaa65cef992c2"
@@ -2315,9 +2583,9 @@ emojis-list@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
-encodeurl@~1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20"
+encodeurl@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
encoding@^0.1.11:
version "0.1.12"
@@ -2325,69 +2593,79 @@ encoding@^0.1.11:
dependencies:
iconv-lite "~0.4.13"
-enhanced-resolve@^3.4.0:
- version "3.4.1"
- resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e"
+end-of-stream@^1.0.0, end-of-stream@^1.1.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43"
+ dependencies:
+ once "^1.4.0"
+
+enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f"
dependencies:
graceful-fs "^4.1.2"
memory-fs "^0.4.0"
- object-assign "^4.0.1"
- tapable "^0.2.7"
+ tapable "^1.0.0"
entities@^1.1.1, entities@~1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0"
enzyme-adapter-react-16@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.1.0.tgz#86c5db7c10f0be6ec25d54ca41b59f2abb397cf4"
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.1.1.tgz#a8f4278b47e082fbca14f5bfb1ee50ee650717b4"
dependencies:
- enzyme-adapter-utils "^1.1.0"
+ enzyme-adapter-utils "^1.3.0"
lodash "^4.17.4"
object.assign "^4.0.4"
object.values "^1.0.4"
- prop-types "^15.5.10"
+ prop-types "^15.6.0"
+ react-reconciler "^0.7.0"
react-test-renderer "^16.0.0-0"
-enzyme-adapter-utils@^1.1.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.2.0.tgz#7f4471ee0a70b91169ec8860d2bf0a6b551664b2"
+enzyme-adapter-utils@^1.3.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.4.0.tgz#c403b81e8eb9953658569e539780964bdc98de62"
dependencies:
- lodash "^4.17.4"
- object.assign "^4.0.4"
- prop-types "^15.5.10"
+ object.assign "^4.1.0"
+ prop-types "^15.6.0"
enzyme@^3.2.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.2.0.tgz#998bdcda0fc71b8764a0017f7cc692c943f54a7a"
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.3.0.tgz#0971abd167f2d4bf3f5bd508229e1c4b6dc50479"
dependencies:
cheerio "^1.0.0-rc.2"
function.prototype.name "^1.0.3"
has "^1.0.1"
+ is-boolean-object "^1.0.0"
+ is-callable "^1.1.3"
+ is-number-object "^1.0.3"
+ is-string "^1.0.4"
is-subset "^0.1.1"
lodash "^4.17.4"
+ object-inspect "^1.5.0"
object-is "^1.0.1"
- object.assign "^4.0.4"
+ object.assign "^4.1.0"
object.entries "^1.0.4"
object.values "^1.0.4"
raf "^3.4.0"
rst-selector-parser "^2.2.3"
-errno@^0.1.3, errno@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d"
+errno@^0.1.3, errno@~0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618"
dependencies:
- prr "~0.0.0"
+ prr "~1.0.1"
error-ex@^1.2.0, error-ex@^1.3.1:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc"
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
dependencies:
is-arrayish "^0.2.1"
es-abstract@^1.4.3, es-abstract@^1.6.1, es-abstract@^1.7.0:
- version "1.10.0"
- resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864"
+ version "1.12.0"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165"
dependencies:
es-to-primitive "^1.1.1"
function-bind "^1.1.1"
@@ -2403,14 +2681,15 @@ es-to-primitive@^1.1.1:
is-date-object "^1.0.1"
is-symbol "^1.0.1"
-es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14:
- version "0.10.37"
- resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.37.tgz#0ee741d148b80069ba27d020393756af257defc3"
+es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14:
+ version "0.10.45"
+ resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.45.tgz#0bfdf7b473da5919d5adf3bd25ceb754fccc3653"
dependencies:
- es6-iterator "~2.0.1"
+ es6-iterator "~2.0.3"
es6-symbol "~3.1.1"
+ next-tick "1"
-es6-iterator@^2.0.1, es6-iterator@~2.0.1:
+es6-iterator@~2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
dependencies:
@@ -2418,43 +2697,13 @@ es6-iterator@^2.0.1, es6-iterator@~2.0.1:
es5-ext "^0.10.35"
es6-symbol "^3.1.1"
-es6-map@^0.1.3:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0"
- dependencies:
- d "1"
- es5-ext "~0.10.14"
- es6-iterator "~2.0.1"
- es6-set "~0.1.5"
- es6-symbol "~3.1.1"
- event-emitter "~0.3.5"
-
-es6-set@~0.1.5:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1"
- dependencies:
- d "1"
- es5-ext "~0.10.14"
- es6-iterator "~2.0.1"
- es6-symbol "3.1.1"
- event-emitter "~0.3.5"
-
-es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1:
+es6-symbol@^3.1.1, es6-symbol@~3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77"
dependencies:
d "1"
es5-ext "~0.10.14"
-es6-weak-map@^2.0.1:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f"
- dependencies:
- d "1"
- es5-ext "^0.10.14"
- es6-iterator "^2.0.1"
- es6-symbol "^3.1.1"
-
escape-html@^1.0.3, escape-html@~1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
@@ -2464,24 +2713,15 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
escodegen@^1.6.1:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.0.tgz#9811a2f265dc1cd3894420ee3717064b632b8852"
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.10.0.tgz#f647395de22519fbd0d928ffcf1d17e0dec2603e"
dependencies:
esprima "^3.1.3"
estraverse "^4.2.0"
esutils "^2.0.2"
optionator "^0.8.1"
optionalDependencies:
- source-map "~0.5.6"
-
-escope@^3.6.0:
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3"
- dependencies:
- es6-map "^0.1.3"
- es6-weak-map "^2.0.1"
- esrecurse "^4.1.0"
- estraverse "^4.1.1"
+ source-map "~0.6.1"
eslint-import-resolver-node@^0.3.1:
version "0.3.2"
@@ -2490,60 +2730,68 @@ eslint-import-resolver-node@^0.3.1:
debug "^2.6.9"
resolve "^1.5.0"
-eslint-module-utils@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz#abaec824177613b8a95b299639e1b6facf473449"
+eslint-module-utils@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz#b270362cd88b1a48ad308976ce7fa54e98411746"
dependencies:
debug "^2.6.8"
pkg-dir "^1.0.0"
eslint-plugin-import@^2.8.0:
- version "2.8.0"
- resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz#fa1b6ef31fcb3c501c09859c1b86f1fc5b986894"
+ version "2.13.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.13.0.tgz#df24f241175e312d91662dc91ca84064caec14ed"
dependencies:
- builtin-modules "^1.1.1"
contains-path "^0.1.0"
debug "^2.6.8"
doctrine "1.5.0"
eslint-import-resolver-node "^0.3.1"
- eslint-module-utils "^2.1.1"
+ eslint-module-utils "^2.2.0"
has "^1.0.1"
- lodash.cond "^4.3.0"
+ lodash "^4.17.4"
minimatch "^3.0.3"
read-pkg-up "^2.0.0"
+ resolve "^1.6.0"
eslint-plugin-jsx-a11y@^6.0.3:
- version "6.0.3"
- resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.0.3.tgz#54583d1ae442483162e040e13cc31865465100e5"
+ version "6.1.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.1.1.tgz#7bf56dbe7d47d811d14dbb3ddff644aa656ce8e1"
dependencies:
- aria-query "^0.7.0"
+ aria-query "^3.0.0"
array-includes "^3.0.3"
- ast-types-flow "0.0.7"
- axobject-query "^0.1.0"
- damerau-levenshtein "^1.0.0"
- emoji-regex "^6.1.0"
- jsx-ast-utils "^2.0.0"
+ ast-types-flow "^0.0.7"
+ axobject-query "^2.0.1"
+ damerau-levenshtein "^1.0.4"
+ emoji-regex "^6.5.1"
+ has "^1.0.3"
+ jsx-ast-utils "^2.0.1"
eslint-plugin-promise@^3.8.0:
version "3.8.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-3.8.0.tgz#65ebf27a845e3c1e9d6f6a5622ddd3801694b621"
eslint-plugin-react@^7.8.2:
- version "7.8.2"
- resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.8.2.tgz#e95c9c47fece55d2303d1a67c9d01b930b88a51d"
+ version "7.10.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.10.0.tgz#af5c1fef31c4704db02098f9be18202993828b50"
dependencies:
- doctrine "^2.0.2"
- has "^1.0.1"
+ doctrine "^2.1.0"
+ has "^1.0.3"
jsx-ast-utils "^2.0.1"
- prop-types "^15.6.0"
+ prop-types "^15.6.2"
-eslint-scope@^3.7.1, eslint-scope@~3.7.1:
+eslint-scope@3.7.1:
version "3.7.1"
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8"
dependencies:
esrecurse "^4.1.0"
estraverse "^4.1.1"
+eslint-scope@^3.7.1:
+ version "3.7.3"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.3.tgz#bb507200d3d17f60247636160b4826284b108535"
+ dependencies:
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
eslint-visitor-keys@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d"
@@ -2607,21 +2855,20 @@ esprima@^3.1.3:
resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
esprima@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804"
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
esquery@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa"
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708"
dependencies:
estraverse "^4.0.0"
esrecurse@^4.1.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163"
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"
dependencies:
estraverse "^4.1.0"
- object-assign "^4.0.1"
estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
version "4.2.0"
@@ -2635,16 +2882,9 @@ etag@~1.8.1:
version "1.8.1"
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
-event-emitter@~0.3.5:
- version "0.3.5"
- resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39"
- dependencies:
- d "1"
- es5-ext "~0.10.14"
-
event-stream@~3.3.0:
version "3.3.4"
- resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571"
+ resolved "http://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571"
dependencies:
duplexer "~0.1.1"
from "~0"
@@ -2654,9 +2894,9 @@ event-stream@~3.3.0:
stream-combiner "~0.0.4"
through "~2.3.1"
-eventemitter3@1.x.x:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508"
+eventemitter3@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163"
events@^1.0.0:
version "1.1.1"
@@ -2676,10 +2916,10 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
safe-buffer "^5.1.1"
exec-sh@^0.2.0:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.1.tgz#163b98a6e89e6b65b47c2a28d215bc1f63989c38"
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.2.tgz#2a5e7ffcbd7d0ba2755bdecb16e5a427dfbdec36"
dependencies:
- merge "^1.1.3"
+ merge "^1.2.0"
execa@^0.7.0:
version "0.7.0"
@@ -2703,6 +2943,18 @@ expand-brackets@^0.1.4:
dependencies:
is-posix-bracket "^0.1.0"
+expand-brackets@^2.1.4:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
+ dependencies:
+ debug "^2.3.3"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ posix-character-classes "^0.1.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
expand-range@^1.8.1:
version "1.8.2"
resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
@@ -2720,11 +2972,11 @@ expect@^21.2.1:
jest-message-util "^21.2.1"
jest-regex-util "^21.2.0"
-express@^4.15.2, express@^4.16.2:
- version "4.16.2"
- resolved "https://registry.yarnpkg.com/express/-/express-4.16.2.tgz#e35c6dfe2d64b7dca0a5cd4f21781be3299e076c"
+express@^4.16.2:
+ version "4.16.3"
+ resolved "https://registry.yarnpkg.com/express/-/express-4.16.3.tgz#6af8a502350db3246ecc4becf6b5a34d22f7ed53"
dependencies:
- accepts "~1.3.4"
+ accepts "~1.3.5"
array-flatten "1.1.1"
body-parser "1.18.2"
content-disposition "0.5.2"
@@ -2732,55 +2984,80 @@ express@^4.15.2, express@^4.16.2:
cookie "0.3.1"
cookie-signature "1.0.6"
debug "2.6.9"
- depd "~1.1.1"
- encodeurl "~1.0.1"
+ depd "~1.1.2"
+ encodeurl "~1.0.2"
escape-html "~1.0.3"
etag "~1.8.1"
- finalhandler "1.1.0"
+ finalhandler "1.1.1"
fresh "0.5.2"
merge-descriptors "1.0.1"
methods "~1.1.2"
on-finished "~2.3.0"
parseurl "~1.3.2"
path-to-regexp "0.1.7"
- proxy-addr "~2.0.2"
+ proxy-addr "~2.0.3"
qs "6.5.1"
range-parser "~1.2.0"
safe-buffer "5.1.1"
- send "0.16.1"
- serve-static "1.13.1"
+ send "0.16.2"
+ serve-static "1.13.2"
setprototypeof "1.1.0"
- statuses "~1.3.1"
- type-is "~1.6.15"
+ statuses "~1.4.0"
+ type-is "~1.6.16"
utils-merge "1.0.1"
vary "~1.1.2"
+extend-shallow@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+ dependencies:
+ is-extendable "^0.1.0"
+
+extend-shallow@^3.0.0, extend-shallow@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
+ dependencies:
+ assign-symbols "^1.0.0"
+ is-extendable "^1.0.1"
+
extend@~3.0.0, extend@~3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
external-editor@^2.0.4:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.1.0.tgz#3d026a21b7f95b5726387d4200ac160d372c3b48"
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5"
dependencies:
chardet "^0.4.0"
iconv-lite "^0.4.17"
tmp "^0.0.33"
+external-editor@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.0.tgz#dc35c48c6f98a30ca27a20e9687d7f3c77704bb6"
+ dependencies:
+ chardet "^0.5.0"
+ iconv-lite "^0.4.22"
+ tmp "^0.0.33"
+
extglob@^0.3.1:
version "0.3.2"
resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
dependencies:
is-extglob "^1.0.0"
-extract-text-webpack-plugin@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz#5f043eaa02f9750a9258b78c0a6e0dc1408fb2f7"
+extglob@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
dependencies:
- async "^2.4.1"
- loader-utils "^1.1.0"
- schema-utils "^0.3.0"
- webpack-sources "^1.0.1"
+ array-unique "^0.3.2"
+ define-property "^1.0.0"
+ expand-brackets "^2.1.4"
+ extend-shallow "^2.0.1"
+ fragment-cache "^0.2.1"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
extsprintf@1.3.0:
version "1.3.0"
@@ -2791,8 +3068,12 @@ extsprintf@^1.2.0:
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
fast-deep-equal@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff"
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614"
+
+fast-deep-equal@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"
fast-json-stable-stringify@^2.0.0:
version "2.0.0"
@@ -2825,8 +3106,8 @@ fb-watchman@^2.0.0:
bser "^2.0.0"
fbjs@^0.8.16, fbjs@^0.8.4, fbjs@^0.8.9:
- version "0.8.16"
- resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db"
+ version "0.8.17"
+ resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd"
dependencies:
core-js "^1.0.0"
isomorphic-fetch "^2.1.1"
@@ -2834,7 +3115,7 @@ fbjs@^0.8.16, fbjs@^0.8.4, fbjs@^0.8.9:
object-assign "^4.1.0"
promise "^7.1.1"
setimmediate "^1.0.5"
- ua-parser-js "^0.7.9"
+ ua-parser-js "^0.7.18"
figures@^2.0.0:
version "2.0.0"
@@ -2849,11 +3130,12 @@ file-entry-cache@^2.0.0:
flat-cache "^1.2.1"
object-assign "^4.0.1"
-file-loader@^0.11.2:
- version "0.11.2"
- resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-0.11.2.tgz#4ff1df28af38719a6098093b88c82c71d1794a34"
+file-loader@^1.1.11:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.11.tgz#6fe886449b0f2a936e43cabaac0cdbfb369506f8"
dependencies:
loader-utils "^1.0.2"
+ schema-utils "^0.4.5"
filename-regex@^2.0.0:
version "2.0.1"
@@ -2866,30 +3148,39 @@ fileset@^2.0.2:
glob "^7.0.3"
minimatch "^3.0.3"
-filesize@^3.5.9:
- version "3.5.11"
- resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.11.tgz#1919326749433bb3cf77368bd158caabcc19e9ee"
+filesize@^3.5.11:
+ version "3.6.1"
+ resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317"
fill-range@^2.1.0:
- version "2.2.3"
- resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723"
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565"
dependencies:
is-number "^2.1.0"
isobject "^2.0.0"
- randomatic "^1.1.3"
+ randomatic "^3.0.0"
repeat-element "^1.1.2"
repeat-string "^1.5.2"
-finalhandler@1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5"
+fill-range@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+ to-regex-range "^2.1.0"
+
+finalhandler@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105"
dependencies:
debug "2.6.9"
- encodeurl "~1.0.1"
+ encodeurl "~1.0.2"
escape-html "~1.0.3"
on-finished "~2.3.0"
parseurl "~1.3.2"
- statuses "~1.3.1"
+ statuses "~1.4.0"
unpipe "~1.0.0"
find-cache-dir@^1.0.0:
@@ -2926,9 +3217,16 @@ flatten@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782"
-follow-redirects@^1.2.3:
- version "1.2.6"
- resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.2.6.tgz#4dcdc7e4ab3dd6765a97ff89c3b4c258117c79bf"
+flush-write-stream@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.3.tgz#c5d586ef38af6097650b49bc41b55fabb19f35bd"
+ dependencies:
+ inherits "^2.0.1"
+ readable-stream "^2.0.4"
+
+follow-redirects@^1.0.0, follow-redirects@^1.2.3:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.1.tgz#67a8f14f5a1f67f962c2c46469c79eaec0a90291"
dependencies:
debug "^3.1.0"
@@ -2940,7 +3238,7 @@ for-in@^0.1.3:
version "0.1.8"
resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1"
-for-in@^1.0.1:
+for-in@^1.0.1, for-in@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
@@ -2973,25 +3271,34 @@ form-data@~2.1.1:
mime-types "^2.1.12"
form-data@~2.3.1:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf"
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099"
dependencies:
asynckit "^0.4.0"
- combined-stream "^1.0.5"
+ combined-stream "1.0.6"
mime-types "^2.1.12"
forwarded@~0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
-fraction.js@4.0.2:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.0.2.tgz#0eae896626f334b1bde763371347a83b5575d7f0"
+fragment-cache@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
+ dependencies:
+ map-cache "^0.2.2"
fresh@0.5.2:
version "0.5.2"
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
+from2@^2.1.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af"
+ dependencies:
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+
from@~0:
version "0.1.7"
resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe"
@@ -3006,16 +3313,31 @@ fs-extra@^0.30.0:
path-is-absolute "^1.0.0"
rimraf "^2.2.8"
+fs-minipass@^1.2.5:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d"
+ dependencies:
+ minipass "^2.2.1"
+
+fs-write-stream-atomic@^1.0.8:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9"
+ dependencies:
+ graceful-fs "^4.1.2"
+ iferr "^0.1.5"
+ imurmurhash "^0.1.4"
+ readable-stream "1 || 2"
+
fs.realpath@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
-fsevents@*, fsevents@^1.0.0, fsevents@^1.1.1:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8"
+fsevents@*, fsevents@^1.2.2, fsevents@^1.2.3:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426"
dependencies:
- nan "^2.3.0"
- node-pre-gyp "^0.6.39"
+ nan "^2.9.2"
+ node-pre-gyp "^0.10.0"
fstream-ignore@^1.0.5:
version "1.0.5"
@@ -3039,11 +3361,11 @@ function-bind@^1.0.2, function-bind@^1.1.0, function-bind@^1.1.1:
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
function.prototype.name@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.0.3.tgz#0099ae5572e9dd6f03c97d023fd92bcc5e639eac"
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.0.tgz#8bd763cc0af860a859cc5d49384d74b932cd2327"
dependencies:
define-properties "^1.1.2"
- function-bind "^1.1.0"
+ function-bind "^1.1.1"
is-callable "^1.1.3"
functional-red-black-tree@^1.0.1:
@@ -3064,28 +3386,18 @@ gauge@~2.7.3:
wide-align "^1.1.0"
gaze@^1.0.0:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.2.tgz#847224677adb8870d679257ed3388fdb61e40105"
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a"
dependencies:
globule "^1.0.0"
-generate-function@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74"
-
-generate-object-property@^1.1.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0"
- dependencies:
- is-property "^1.0.0"
-
generic-pool@2.4.3:
version "2.4.3"
resolved "https://registry.yarnpkg.com/generic-pool/-/generic-pool-2.4.3.tgz#780c36f69dfad05a5a045dd37be7adca11a4f6ff"
get-caller-file@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5"
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
get-stdin@^4.0.1:
version "4.0.1"
@@ -3095,6 +3407,10 @@ get-stream@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
+get-value@^2.0.3, get-value@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
+
getpass@^0.1.1:
version "0.1.7"
resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
@@ -3114,6 +3430,13 @@ glob-parent@^2.0.0:
dependencies:
is-glob "^2.0.0"
+glob-parent@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
+ dependencies:
+ is-glob "^3.1.0"
+ path-dirname "^1.0.0"
+
glob@^6.0.4:
version "6.0.4"
resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22"
@@ -3135,9 +3458,13 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@~7.1.1:
once "^1.3.0"
path-is-absolute "^1.0.0"
+global-modules-path@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/global-modules-path/-/global-modules-path-2.1.0.tgz#923ec524e8726bb0c1a4ed4b8e21e1ff80c88bbb"
+
globals@^11.0.1, globals@^11.1.0:
- version "11.1.0"
- resolved "https://registry.yarnpkg.com/globals/-/globals-11.1.0.tgz#632644457f5f0e3ae711807183700ebf2e4633e4"
+ version "11.7.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-11.7.0.tgz#a583faa43055b1aca771914bf68258e2fc125673"
globals@^9.18.0:
version "9.18.0"
@@ -3165,11 +3492,11 @@ globby@^6.1.0:
pinkie-promise "^2.0.0"
globule@^1.0.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.0.tgz#1dc49c6822dd9e8a2fa00ba2a295006e8664bd09"
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.1.tgz#5dffb1b191f22d20797a9369b49eab4e9839696d"
dependencies:
glob "~7.1.1"
- lodash "~4.17.4"
+ lodash "~4.17.10"
minimatch "~3.0.2"
gonzales-pe@^4.0.3:
@@ -3186,11 +3513,12 @@ growly@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
-gzip-size@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520"
+gzip-size@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-4.1.0.tgz#8ae096257eabe7d69c45be2b67c448124ffb517c"
dependencies:
duplexer "^0.1.1"
+ pify "^3.0.0"
handle-thing@^1.2.5:
version "1.2.5"
@@ -3214,15 +3542,6 @@ har-schema@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
-har-validator@~2.0.6:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d"
- dependencies:
- chalk "^1.1.1"
- commander "^2.9.0"
- is-my-json-valid "^2.12.4"
- pinkie-promise "^2.0.0"
-
har-validator@~4.2.1:
version "4.2.1"
resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a"
@@ -3247,25 +3566,50 @@ has-flag@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
-has-flag@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51"
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+
+has-symbols@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44"
has-unicode@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
-has@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28"
+has-value@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
dependencies:
- function-bind "^1.0.2"
+ get-value "^2.0.3"
+ has-values "^0.1.4"
+ isobject "^2.0.0"
-hash-base@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1"
+has-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
dependencies:
- inherits "^2.0.1"
+ get-value "^2.0.6"
+ has-values "^1.0.0"
+ isobject "^3.0.0"
+
+has-values@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
+
+has-values@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
+ dependencies:
+ is-number "^3.0.0"
+ kind-of "^4.0.0"
+
+has@^1.0.1, has@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
+ dependencies:
+ function-bind "^1.1.1"
hash-base@^3.0.0:
version "3.0.4"
@@ -3275,11 +3619,11 @@ hash-base@^3.0.0:
safe-buffer "^5.0.1"
hash.js@^1.0.0, hash.js@^1.0.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846"
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.5.tgz#e38ab4b85dfb1e0c40fe9265c0e9b54854c23812"
dependencies:
inherits "^2.0.3"
- minimalistic-assert "^1.0.0"
+ minimalistic-assert "^1.0.1"
hawk@3.1.3, hawk@~3.1.3:
version "3.1.3"
@@ -3290,15 +3634,6 @@ hawk@3.1.3, hawk@~3.1.3:
hoek "2.x.x"
sntp "1.x.x"
-hawk@~6.0.2:
- version "6.0.2"
- resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038"
- dependencies:
- boom "4.x.x"
- cryptiles "3.x.x"
- hoek "4.x.x"
- sntp "2.x.x"
-
history@^4.7.2:
version "4.7.2"
resolved "https://registry.yarnpkg.com/history/-/history-4.7.2.tgz#22b5c7f31633c5b8021c7f4a8a954ac139ee8d5b"
@@ -3321,13 +3656,9 @@ hoek@2.x.x:
version "2.16.3"
resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
-hoek@4.x.x:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d"
-
-hoist-non-react-statics@^2.2.1, hoist-non-react-statics@^2.3.0:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.3.1.tgz#343db84c6018c650778898240135a1420ee22ce0"
+hoist-non-react-statics@^2.5.0:
+ version "2.5.5"
+ resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47"
home-or-tmp@^2.0.0:
version "2.0.0"
@@ -3337,8 +3668,8 @@ home-or-tmp@^2.0.0:
os-tmpdir "^1.0.1"
hosted-git-info@^2.1.4:
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c"
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047"
hpack.js@^2.1.6:
version "2.1.6"
@@ -3378,7 +3709,7 @@ http-deceiver@^1.2.7:
version "1.2.7"
resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87"
-http-errors@1.6.2, http-errors@~1.6.2:
+http-errors@1.6.2:
version "1.6.2"
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736"
dependencies:
@@ -3387,29 +3718,39 @@ http-errors@1.6.2, http-errors@~1.6.2:
setprototypeof "1.0.3"
statuses ">= 1.3.1 < 2"
+http-errors@~1.6.2:
+ version "1.6.3"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.3"
+ setprototypeof "1.1.0"
+ statuses ">= 1.4.0 < 2"
+
http-link-header@^0.8.0:
version "0.8.0"
resolved "https://registry.yarnpkg.com/http-link-header/-/http-link-header-0.8.0.tgz#a22b41a0c9b1e2d8fac1bf1b697c6bd532d5f5e4"
http-parser-js@>=0.4.0:
- version "0.4.9"
- resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.9.tgz#ea1a04fb64adff0242e9974f297dd4c3cad271e1"
+ version "0.4.13"
+ resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.13.tgz#3bd6d6fde6e3172c9334c3b33b6c193d80fe1137"
-http-proxy-middleware@~0.17.4:
- version "0.17.4"
- resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz#642e8848851d66f09d4f124912846dbaeb41b833"
+http-proxy-middleware@~0.18.0:
+ version "0.18.0"
+ resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz#0987e6bb5a5606e5a69168d8f967a87f15dd8aab"
dependencies:
http-proxy "^1.16.2"
- is-glob "^3.1.0"
- lodash "^4.17.2"
- micromatch "^2.3.11"
+ is-glob "^4.0.0"
+ lodash "^4.17.5"
+ micromatch "^3.1.9"
http-proxy@^1.16.2:
- version "1.16.2"
- resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742"
+ version "1.17.0"
+ resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz#7ad38494658f84605e2f6db4436df410f4e5be9a"
dependencies:
- eventemitter3 "1.x.x"
- requires-port "1.x.x"
+ eventemitter3 "^3.0.0"
+ follow-redirects "^1.0.0"
+ requires-port "^1.0.0"
http-signature@~1.1.0:
version "1.1.1"
@@ -3431,10 +3772,16 @@ https-browserify@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
-iconv-lite@0.4.19, iconv-lite@^0.4.17, iconv-lite@~0.4.13:
+iconv-lite@0.4.19:
version "0.4.19"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b"
+iconv-lite@^0.4.17, iconv-lite@^0.4.22, iconv-lite@^0.4.4, iconv-lite@~0.4.13:
+ version "0.4.23"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63"
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3"
+
icss-replace-symbols@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded"
@@ -3445,21 +3792,43 @@ icss-utils@^2.1.0:
dependencies:
postcss "^6.0.1"
-ieee754@^1.1.4:
- version "1.1.8"
- resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4"
+ieee754@^1.1.11, ieee754@^1.1.4:
+ version "1.1.12"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b"
+
+iferr@^0.1.5:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"
+
+ignore-walk@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8"
+ dependencies:
+ minimatch "^3.0.4"
ignore@^3.3.3:
- version "3.3.7"
- resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021"
+ version "3.3.10"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043"
immutable@^3.8.2:
version "3.8.2"
resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3"
-import-local@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/import-local/-/import-local-0.1.1.tgz#b1179572aacdc11c6a91009fb430dbcab5f668a8"
+import-cwd@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9"
+ dependencies:
+ import-from "^2.1.0"
+
+import-from@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1"
+ dependencies:
+ resolve-from "^3.0.0"
+
+import-local@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc"
dependencies:
pkg-dir "^2.0.0"
resolve-cwd "^2.0.0"
@@ -3531,13 +3900,31 @@ inquirer@^3.0.6:
strip-ansi "^4.0.0"
through "^2.3.6"
+inquirer@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.0.0.tgz#e8c20303ddc15bbfc2c12a6213710ccd9e1413d8"
+ dependencies:
+ ansi-escapes "^3.0.0"
+ chalk "^2.0.0"
+ cli-cursor "^2.1.0"
+ cli-width "^2.0.0"
+ external-editor "^3.0.0"
+ figures "^2.0.0"
+ lodash "^4.3.0"
+ mute-stream "0.0.7"
+ run-async "^2.2.0"
+ rxjs "^6.1.0"
+ string-width "^2.1.0"
+ strip-ansi "^4.0.0"
+ through "^2.3.6"
+
internal-ip@1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-1.2.0.tgz#ae9fbf93b984878785d50a8de1b356956058cf5c"
dependencies:
meow "^3.3.0"
-interpret@^1.0.0:
+interpret@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614"
@@ -3569,9 +3956,9 @@ intl@^1.2.5:
version "1.2.5"
resolved "https://registry.yarnpkg.com/intl/-/intl-1.2.5.tgz#82244a2190c4e419f8371f5aa34daa3420e2abde"
-invariant@^2.0.0, invariant@^2.1.1, invariant@^2.2.0, invariant@^2.2.1, invariant@^2.2.2:
- version "2.2.2"
- resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360"
+invariant@^2.0.0, invariant@^2.1.1, invariant@^2.2.0, invariant@^2.2.1, invariant@^2.2.2, invariant@^2.2.4:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
dependencies:
loose-envify "^1.0.0"
@@ -3583,25 +3970,45 @@ ip@^1.1.0, ip@^1.1.5:
version "1.1.5"
resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
-ipaddr.js@1.5.2:
- version "1.5.2"
- resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.5.2.tgz#d4b505bde9946987ccf0fc58d9010ff9607e3fa0"
+ipaddr.js@1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.6.0.tgz#e3fa357b773da619f26e95f049d055c72796f86b"
is-absolute-url@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6"
+is-accessor-descriptor@^0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
+ dependencies:
+ kind-of "^3.0.2"
+
+is-accessor-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
+ dependencies:
+ kind-of "^6.0.0"
+
is-arrayish@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+is-arrayish@^0.3.1:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03"
+
is-binary-path@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
dependencies:
binary-extensions "^1.0.0"
-is-buffer@^1.0.2, is-buffer@^1.1.5:
+is-boolean-object@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.0.tgz#98f8b28030684219a95f375cfbd88ce3405dff93"
+
+is-buffer@^1.1.5:
version "1.1.6"
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
@@ -3612,19 +4019,47 @@ is-builtin-module@^1.0.0:
builtin-modules "^1.0.0"
is-callable@^1.1.1, is-callable@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2"
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75"
is-ci@^1.0.10:
- version "1.0.10"
- resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e"
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.1.0.tgz#247e4162e7860cebbdaf30b774d6b0ac7dcfe7a5"
dependencies:
ci-info "^1.0.0"
+is-data-descriptor@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
+ dependencies:
+ kind-of "^3.0.2"
+
+is-data-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
+ dependencies:
+ kind-of "^6.0.0"
+
is-date-object@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
+is-descriptor@^0.1.0:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
+ dependencies:
+ is-accessor-descriptor "^0.1.6"
+ is-data-descriptor "^0.1.4"
+ kind-of "^5.0.0"
+
+is-descriptor@^1.0.0, is-descriptor@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
+ dependencies:
+ is-accessor-descriptor "^1.0.0"
+ is-data-descriptor "^1.0.0"
+ kind-of "^6.0.2"
+
is-directory@^0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1"
@@ -3639,15 +4074,21 @@ is-equal-shallow@^0.1.3:
dependencies:
is-primitive "^2.0.0"
-is-extendable@^0.1.1:
+is-extendable@^0.1.0, is-extendable@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+is-extendable@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+ dependencies:
+ is-plain-object "^2.0.4"
+
is-extglob@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
-is-extglob@^2.1.0:
+is-extglob@^2.1.0, is-extglob@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
@@ -3679,14 +4120,11 @@ is-glob@^3.1.0:
dependencies:
is-extglob "^2.1.0"
-is-my-json-valid@^2.12.4:
- version "2.16.1"
- resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz#5a846777e2c2620d1e69104e5d3a03b1f6088f11"
+is-glob@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0"
dependencies:
- generate-function "^2.0.0"
- generate-object-property "^1.1.0"
- jsonpointer "^4.0.0"
- xtend "^4.0.0"
+ is-extglob "^2.1.1"
is-nan@^1.2.1:
version "1.2.1"
@@ -3694,6 +4132,10 @@ is-nan@^1.2.1:
dependencies:
define-properties "^1.1.1"
+is-number-object@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.3.tgz#f265ab89a9f445034ef6aff15a8f00b00f551799"
+
is-number@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
@@ -3706,13 +4148,21 @@ is-number@^3.0.0:
dependencies:
kind-of "^3.0.2"
+is-number@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff"
+
+is-obj@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
+
is-path-cwd@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
is-path-in-cwd@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc"
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52"
dependencies:
is-path-inside "^1.0.0"
@@ -3726,7 +4176,7 @@ is-plain-obj@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
-is-plain-object@^2.0.1:
+is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
dependencies:
@@ -3744,10 +4194,6 @@ is-promise@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
-is-property@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
-
is-regex@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
@@ -3755,13 +4201,17 @@ is-regex@^1.0.4:
has "^1.0.1"
is-resolvable@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.1.tgz#acca1cd36dbe44b974b924321555a70ba03b1cf4"
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
is-stream@^1.0.1, is-stream@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+is-string@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.4.tgz#cc3a9b69857d621e963725a24caeec873b826e64"
+
is-subset@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6"
@@ -3784,9 +4234,9 @@ is-utf8@^0.2.0:
version "0.2.1"
resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
-is-windows@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.1.tgz#310db70f742d259a16a369202b51af84233310d9"
+is-windows@^1.0.0, is-windows@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
is-wsl@^1.1.0:
version "1.1.0"
@@ -3810,7 +4260,7 @@ isobject@^2.0.0:
dependencies:
isarray "1.0.0"
-isobject@^3.0.1:
+isobject@^3.0.0, isobject@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
@@ -3826,72 +4276,79 @@ isstream@~0.1.2:
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
istanbul-api@^1.1.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.2.1.tgz#0c60a0515eb11c7d65c6b50bba2c6e999acd8620"
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.1.tgz#4c3b05d18c0016d1022e079b98dc82c40f488954"
dependencies:
async "^2.1.4"
+ compare-versions "^3.1.0"
fileset "^2.0.2"
- istanbul-lib-coverage "^1.1.1"
- istanbul-lib-hook "^1.1.0"
- istanbul-lib-instrument "^1.9.1"
- istanbul-lib-report "^1.1.2"
- istanbul-lib-source-maps "^1.2.2"
- istanbul-reports "^1.1.3"
+ istanbul-lib-coverage "^1.2.0"
+ istanbul-lib-hook "^1.2.0"
+ istanbul-lib-instrument "^1.10.1"
+ istanbul-lib-report "^1.1.4"
+ istanbul-lib-source-maps "^1.2.4"
+ istanbul-reports "^1.3.0"
js-yaml "^3.7.0"
mkdirp "^0.5.1"
once "^1.4.0"
-istanbul-lib-coverage@^1.0.1, istanbul-lib-coverage@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz#73bfb998885299415c93d38a3e9adf784a77a9da"
+istanbul-lib-coverage@^1.0.1, istanbul-lib-coverage@^1.1.2, istanbul-lib-coverage@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz#f7d8f2e42b97e37fe796114cb0f9d68b5e3a4341"
-istanbul-lib-hook@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz#8538d970372cb3716d53e55523dd54b557a8d89b"
+istanbul-lib-hook@^1.2.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.1.tgz#f614ec45287b2a8fc4f07f5660af787575601805"
dependencies:
- append-transform "^0.4.0"
+ append-transform "^1.0.0"
-istanbul-lib-instrument@^1.4.2, istanbul-lib-instrument@^1.7.5, istanbul-lib-instrument@^1.9.1:
- version "1.9.1"
- resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.1.tgz#250b30b3531e5d3251299fdd64b0b2c9db6b558e"
+istanbul-lib-instrument@^1.10.1, istanbul-lib-instrument@^1.4.2:
+ version "1.10.1"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz#724b4b6caceba8692d3f1f9d0727e279c401af7b"
dependencies:
babel-generator "^6.18.0"
babel-template "^6.16.0"
babel-traverse "^6.18.0"
babel-types "^6.18.0"
babylon "^6.18.0"
- istanbul-lib-coverage "^1.1.1"
+ istanbul-lib-coverage "^1.2.0"
semver "^5.3.0"
-istanbul-lib-report@^1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.2.tgz#922be27c13b9511b979bd1587359f69798c1d425"
+istanbul-lib-report@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.4.tgz#e886cdf505c4ebbd8e099e4396a90d0a28e2acb5"
dependencies:
- istanbul-lib-coverage "^1.1.1"
+ istanbul-lib-coverage "^1.2.0"
mkdirp "^0.5.1"
path-parse "^1.0.5"
supports-color "^3.1.2"
-istanbul-lib-source-maps@^1.1.0, istanbul-lib-source-maps@^1.2.2:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.2.tgz#750578602435f28a0c04ee6d7d9e0f2960e62c1c"
+istanbul-lib-source-maps@^1.1.0:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.3.tgz#20fb54b14e14b3fb6edb6aca3571fd2143db44e6"
dependencies:
debug "^3.1.0"
- istanbul-lib-coverage "^1.1.1"
+ istanbul-lib-coverage "^1.1.2"
mkdirp "^0.5.1"
rimraf "^2.6.1"
source-map "^0.5.3"
-istanbul-reports@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.3.tgz#3b9e1e8defb6d18b1d425da8e8b32c5a163f2d10"
+istanbul-lib-source-maps@^1.2.4:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.5.tgz#ffe6be4e7ab86d3603e4290d54990b14506fc9b1"
+ dependencies:
+ debug "^3.1.0"
+ istanbul-lib-coverage "^1.2.0"
+ mkdirp "^0.5.1"
+ rimraf "^2.6.1"
+ source-map "^0.5.3"
+
+istanbul-reports@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.3.0.tgz#2f322e81e1d9520767597dca3c20a0cce89a3554"
dependencies:
handlebars "^4.0.3"
-javascript-natural-sort@0.7.1:
- version "0.7.1"
- resolved "https://registry.yarnpkg.com/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz#f9e2303d4507f6d74355a73664d1440fb5a0ef59"
-
jest-changed-files@^21.2.0:
version "21.2.0"
resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-21.2.0.tgz#5dbeecad42f5d88b482334902ce1cba6d9798d29"
@@ -4118,8 +4575,8 @@ jest@^21.2.1:
jest-cli "^21.2.1"
js-base64@^2.1.8, js-base64@^2.1.9:
- version "2.4.0"
- resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.0.tgz#9e566fee624751a1d720c966cd6226d29d4025aa"
+ version "2.4.6"
+ resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.6.tgz#1d49f618bef43630cd191f4e122447acfdb947d8"
js-string-escape@1.0.1:
version "1.0.1"
@@ -4129,9 +4586,13 @@ js-tokens@^3.0.0, js-tokens@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
-js-yaml@^3.4.3, js-yaml@^3.7.0, js-yaml@^3.9.0, js-yaml@^3.9.1:
- version "3.10.0"
- resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc"
+"js-tokens@^3.0.0 || ^4.0.0":
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+
+js-yaml@^3.11.0, js-yaml@^3.7.0, js-yaml@^3.9.0, js-yaml@^3.9.1:
+ version "3.12.0"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1"
dependencies:
argparse "^1.0.7"
esprima "^4.0.0"
@@ -4183,18 +4644,18 @@ jsesc@~0.5.0:
version "0.5.0"
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
-json-loader@^0.5.4:
- version "0.5.7"
- resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d"
-
-json-parse-better-errors@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.1.tgz#50183cd1b2d25275de069e9e71b467ac9eab973a"
+json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
json-schema-traverse@^0.3.0:
version "0.3.1"
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340"
+json-schema-traverse@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+
json-schema@0.2.3:
version "0.2.3"
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
@@ -4231,10 +4692,6 @@ jsonify@~0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
-jsonpointer@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"
-
jsprim@^1.2.2:
version "1.4.1"
resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
@@ -4244,27 +4701,21 @@ jsprim@^1.2.2:
json-schema "0.2.3"
verror "1.10.0"
-jsx-ast-utils@^2.0.0, jsx-ast-utils@^2.0.1:
+jsx-ast-utils@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f"
dependencies:
array-includes "^3.0.3"
keycode@^2.1.7:
- version "2.1.9"
- resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.1.9.tgz#964a23c54e4889405b4861a5c9f0480d45141dfa"
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.2.0.tgz#3d0af56dc7b8b8e5cba8d0a97f107204eec22b04"
killable@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.0.tgz#da8b84bd47de5395878f95d64d02f2449fe05e6b"
-kind-of@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-2.0.1.tgz#018ec7a4ce7e3a86cb9141be519d24c8faa981b5"
- dependencies:
- is-buffer "^1.0.2"
-
-kind-of@^3.0.2, kind-of@^3.2.2:
+kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
version "3.2.2"
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
dependencies:
@@ -4276,16 +4727,20 @@ kind-of@^4.0.0:
dependencies:
is-buffer "^1.1.5"
+kind-of@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
+
+kind-of@^6.0.0, kind-of@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
+
klaw@^1.0.0:
version "1.3.1"
resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439"
optionalDependencies:
graceful-fs "^4.1.9"
-lazy-cache@^0.2.3:
- version "0.2.7"
- resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-0.2.7.tgz#7feddf2dcb6edb77d11ef1d117ab5ffdf0ab1b65"
-
lazy-cache@^1.0.3:
version "1.0.4"
resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
@@ -4348,7 +4803,7 @@ loader-utils@0.2.x:
json5 "^0.5.0"
object-assign "^4.0.1"
-loader-utils@^1.0.0, loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0:
+loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd"
dependencies:
@@ -4363,50 +4818,15 @@ locate-path@^2.0.0:
p-locate "^2.0.0"
path-exists "^3.0.0"
-lodash-es@^4.2.0, lodash-es@^4.2.1:
- version "4.17.4"
- resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.4.tgz#dcc1d7552e150a0640073ba9cb31d70f032950e7"
+lodash-es@^4.17.5, lodash-es@^4.2.1:
+ version "4.17.10"
+ resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.10.tgz#62cd7104cdf5dd87f235a837f0ede0e8e5117e05"
-lodash._baseassign@^3.0.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e"
- dependencies:
- lodash._basecopy "^3.0.0"
- lodash.keys "^3.0.0"
+lodash._reinterpolate@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
-lodash._basecopy@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36"
-
-lodash._bindcallback@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e"
-
-lodash._createassigner@^3.0.0:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz#838a5bae2fdaca63ac22dee8e19fa4e6d6970b11"
- dependencies:
- lodash._bindcallback "^3.0.0"
- lodash._isiterateecall "^3.0.0"
- lodash.restparam "^3.0.0"
-
-lodash._getnative@^3.0.0:
- version "3.9.1"
- resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
-
-lodash._isiterateecall@^3.0.0:
- version "3.0.9"
- resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c"
-
-lodash.assign@^3.0.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-3.2.0.tgz#3ce9f0234b4b2223e296b8fa0ac1fee8ebca64fa"
- dependencies:
- lodash._baseassign "^3.0.0"
- lodash._createassigner "^3.0.0"
- lodash.keys "^3.0.0"
-
-lodash.assign@^4.0.1, lodash.assign@^4.2.0:
+lodash.assign@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7"
@@ -4418,18 +4838,11 @@ lodash.clonedeep@^4.3.2:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
-lodash.cond@^4.3.0:
- version "4.5.2"
- resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5"
+lodash.debounce@^4.0.8:
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
-lodash.defaults@^3.1.2:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-3.1.2.tgz#c7308b18dbf8bc9372d701a73493c61192bd2e2c"
- dependencies:
- lodash.assign "^3.0.0"
- lodash.restparam "^3.0.0"
-
-lodash.defaults@^4.0.0, lodash.defaults@^4.0.1:
+lodash.defaults@^4.0.1:
version "4.2.0"
resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c"
@@ -4437,33 +4850,13 @@ lodash.flattendeep@^4.4.0:
version "4.4.0"
resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2"
-lodash.isarguments@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
-
-lodash.isarray@^3.0.0:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55"
-
-lodash.keys@^3.0.0:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a"
- dependencies:
- lodash._getnative "^3.0.0"
- lodash.isarguments "^3.0.0"
- lodash.isarray "^3.0.0"
-
lodash.memoize@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
lodash.mergewith@^4.6.0:
- version "4.6.0"
- resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz#150cf0a16791f5903b8891eab154609274bdea55"
-
-lodash.restparam@^3.0.0:
- version "3.6.1"
- resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805"
+ version "4.6.1"
+ resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz#639057e726c3afbdb3e7d42741caa8d6e4335927"
lodash.sortby@^4.7.0:
version "4.7.0"
@@ -4473,49 +4866,79 @@ lodash.tail@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/lodash.tail/-/lodash.tail-4.1.1.tgz#d2333a36d9e7717c8ad2f7cacafec7c32b444664"
+lodash.template@^4.2.4:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.4.0.tgz#e73a0385c8355591746e020b99679c690e68fba0"
+ dependencies:
+ lodash._reinterpolate "~3.0.0"
+ lodash.templatesettings "^4.0.0"
+
+lodash.templatesettings@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz#2b4d4e95ba440d915ff08bc899e4553666713316"
+ dependencies:
+ lodash._reinterpolate "~3.0.0"
+
lodash.uniq@^4.5.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
-"lodash@>=3.5 <5", lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.2, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@~4.17.4:
- version "4.17.4"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
+"lodash@>=3.5 <5", lodash@^4.0.0, lodash@^4.13.1, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@~4.17.10:
+ version "4.17.10"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7"
+
+log-symbols@^2.1.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a"
+ dependencies:
+ chalk "^2.0.1"
loglevel@^1.4.1:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.0.tgz#ae0caa561111498c5ba13723d6fb631d24003934"
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa"
+
+loglevelnext@^1.0.1:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/loglevelnext/-/loglevelnext-1.0.5.tgz#36fc4f5996d6640f539ff203ba819641680d75a2"
+ dependencies:
+ es6-symbol "^3.1.1"
+ object.assign "^4.1.0"
+
+long@4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28"
+
+long@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/long/-/long-3.2.0.tgz#d821b7138ca1cb581c172990ef14db200b5c474b"
longest@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848"
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
dependencies:
- js-tokens "^3.0.0"
+ js-tokens "^3.0.0 || ^4.0.0"
-loud-rejection@^1.0.0:
+loud-rejection@^1.0.0, loud-rejection@^1.6.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
dependencies:
currently-unhandled "^0.4.1"
signal-exit "^3.0.0"
-lru-cache@^4.0.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55"
+lru-cache@^4.0.1, lru-cache@^4.1.1:
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c"
dependencies:
pseudomap "^1.0.2"
yallist "^2.1.2"
-macaddress@^0.2.8:
- version "0.2.8"
- resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12"
-
make-dir@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.1.0.tgz#19b4369fe48c116f53c2af95ad102c0e39e85d51"
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c"
dependencies:
pify "^3.0.0"
@@ -4525,6 +4948,14 @@ makeerror@1.0.x:
dependencies:
tmpl "1.0.x"
+mamacro@^0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4"
+
+map-cache@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
+
map-obj@^1.0.0, map-obj@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
@@ -4533,6 +4964,12 @@ map-stream@~0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194"
+map-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
+ dependencies:
+ object-visit "^1.0.0"
+
mark-loader@^0.1.6:
version "0.1.6"
resolved "https://registry.yarnpkg.com/mark-loader/-/mark-loader-0.1.6.tgz#0abb477dca7421d70e20128ff6489f5cae8676d5"
@@ -4545,17 +4982,9 @@ math-expression-evaluator@^1.2.14:
version "1.2.17"
resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac"
-mathjs@^3.11.5:
- version "3.17.0"
- resolved "https://registry.yarnpkg.com/mathjs/-/mathjs-3.17.0.tgz#9569d278874546175c9d0497d7417eb88fb61503"
- dependencies:
- complex.js "2.0.4"
- decimal.js "7.2.3"
- fraction.js "4.0.2"
- javascript-natural-sort "0.7.1"
- seed-random "2.2.0"
- tiny-emitter "2.0.0"
- typed-function "0.10.6"
+math-random@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac"
md5.js@^1.3.4:
version "1.3.4"
@@ -4604,7 +5033,7 @@ merge-descriptors@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
-merge@^1.1.3:
+merge@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da"
@@ -4612,7 +5041,7 @@ methods@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
-micromatch@^2.1.5, micromatch@^2.3.11:
+micromatch@^2.3.11:
version "2.3.11"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
dependencies:
@@ -4630,6 +5059,24 @@ micromatch@^2.1.5, micromatch@^2.3.11:
parse-glob "^3.0.4"
regex-cache "^0.4.2"
+micromatch@^3.1.4, micromatch@^3.1.8, micromatch@^3.1.9:
+ version "3.1.10"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ braces "^2.3.1"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ extglob "^2.0.4"
+ fragment-cache "^0.2.1"
+ kind-of "^6.0.2"
+ nanomatch "^1.2.9"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.2"
+
miller-rabin@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
@@ -4637,35 +5084,43 @@ miller-rabin@^4.0.0:
bn.js "^4.0.0"
brorand "^1.0.1"
-"mime-db@>= 1.30.0 < 2":
- version "1.32.0"
- resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.32.0.tgz#485b3848b01a3cda5f968b4882c0771e58e09414"
+"mime-db@>= 1.34.0 < 2":
+ version "1.34.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.34.0.tgz#452d0ecff5c30346a6dc1e64b1eaee0d3719ff9a"
-mime-db@~1.30.0:
- version "1.30.0"
- resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01"
+mime-db@~1.33.0:
+ version "1.33.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db"
-mime-types@^2.1.12, mime-types@~2.1.15, mime-types@~2.1.16, mime-types@~2.1.17, mime-types@~2.1.7:
- version "2.1.17"
- resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a"
+mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.7:
+ version "2.1.18"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8"
dependencies:
- mime-db "~1.30.0"
+ mime-db "~1.33.0"
mime@1.4.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6"
-mime@^1.5.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
+mime@^2.1.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-2.3.1.tgz#b1621c54d63b97c47d3cfe7f7215f7d64517c369"
mimic-fn@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18"
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
-minimalistic-assert@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3"
+mini-css-extract-plugin@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.1.tgz#d2bcf77bb2596b8e4bd9257e43d3f9164c2e86cb"
+ dependencies:
+ "@webpack-contrib/schema-utils" "^1.0.0-beta.0"
+ loader-utils "^1.1.0"
+ webpack-sources "^1.1.0"
+
+minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
version "1.0.1"
@@ -4693,6 +5148,41 @@ minimist@~0.0.1:
version "0.0.10"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
+minipass@^2.2.1, minipass@^2.3.3:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.3.tgz#a7dcc8b7b833f5d368759cce544dccb55f50f233"
+ dependencies:
+ safe-buffer "^5.1.2"
+ yallist "^3.0.0"
+
+minizlib@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.0.tgz#11e13658ce46bc3a70a267aac58359d1e0c29ceb"
+ dependencies:
+ minipass "^2.2.1"
+
+mississippi@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-2.0.0.tgz#3442a508fafc28500486feea99409676e4ee5a6f"
+ dependencies:
+ concat-stream "^1.5.0"
+ duplexify "^3.4.2"
+ end-of-stream "^1.1.0"
+ flush-write-stream "^1.0.0"
+ from2 "^2.1.0"
+ parallel-transform "^1.1.0"
+ pump "^2.0.1"
+ pumpify "^1.3.3"
+ stream-each "^1.1.0"
+ through2 "^2.0.0"
+
+mixin-deep@^1.2.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe"
+ dependencies:
+ for-in "^1.0.2"
+ is-extendable "^1.0.1"
+
mixin-object@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e"
@@ -4707,8 +5197,19 @@ mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkd
minimist "0.0.8"
mousetrap@^1.5.2:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/mousetrap/-/mousetrap-1.6.1.tgz#2a085f5c751294c75e7e81f6ec2545b29cbf42d9"
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/mousetrap/-/mousetrap-1.6.2.tgz#caadd9cf886db0986fb2fee59a82f6bd37527587"
+
+move-concurrently@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
+ dependencies:
+ aproba "^1.1.1"
+ copy-concurrently "^1.0.0"
+ fs-write-stream-atomic "^1.0.8"
+ mkdirp "^0.5.1"
+ rimraf "^2.5.4"
+ run-queue "^1.0.3"
ms@2.0.0:
version "2.0.0"
@@ -4719,36 +5220,73 @@ multicast-dns-service-types@^1.1.0:
resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901"
multicast-dns@^6.0.1:
- version "6.2.1"
- resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.1.tgz#c5035defa9219d30640558a49298067352098060"
+ version "6.2.3"
+ resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229"
dependencies:
- dns-packet "^1.0.1"
- thunky "^0.1.0"
+ dns-packet "^1.3.1"
+ thunky "^1.0.2"
mute-stream@0.0.7:
version "0.0.7"
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
-nan@^2.0.0, nan@^2.3.0, nan@^2.3.2:
- version "2.8.0"
- resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a"
+nan@^2.0.0, nan@^2.10.0, nan@^2.9.2:
+ version "2.10.0"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f"
+
+nanomatch@^1.2.9:
+ version "1.2.13"
+ resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ fragment-cache "^0.2.1"
+ is-windows "^1.0.2"
+ kind-of "^6.0.2"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
natural-compare@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
nearley@^2.7.10:
- version "2.11.0"
- resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.11.0.tgz#5e626c79a6cd2f6ab9e7e5d5805e7668967757ae"
+ version "2.13.0"
+ resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.13.0.tgz#6e7b0f4e68bfc3e74c99eaef2eda39e513143439"
dependencies:
nomnom "~1.6.2"
railroad-diagrams "^1.0.0"
- randexp "^0.4.2"
+ randexp "0.4.6"
+ semver "^5.4.1"
+
+needle@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.1.tgz#b5e325bd3aae8c2678902fa296f729455d1d3a7d"
+ dependencies:
+ debug "^2.1.2"
+ iconv-lite "^0.4.4"
+ sax "^1.2.4"
negotiator@0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9"
+neo-async@^2.5.0:
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.5.1.tgz#acb909e327b1e87ec9ef15f41b8a269512ad41ee"
+
+next-tick@1:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c"
+
+nice-try@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.4.tgz#d93962f6c52f2c1558c0fbda6d512819f1efe1c4"
+
node-fetch@^1.0.1:
version "1.7.3"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef"
@@ -4756,23 +5294,22 @@ node-fetch@^1.0.1:
encoding "^0.1.11"
is-stream "^1.0.1"
-node-forge@0.6.33:
- version "0.6.33"
- resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.6.33.tgz#463811879f573d45155ad6a9f43dc296e8e85ebc"
+node-forge@0.7.5:
+ version "0.7.5"
+ resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.5.tgz#6c152c345ce11c52f465c2abd957e8639cd674df"
node-gyp@^3.3.1:
- version "3.6.2"
- resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.2.tgz#9bfbe54562286284838e750eac05295853fa1c60"
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.7.0.tgz#789478e8f6c45e277aa014f3e28f958f286f9203"
dependencies:
fstream "^1.0.0"
glob "^7.0.3"
graceful-fs "^4.1.2"
- minimatch "^3.0.2"
mkdirp "^0.5.0"
nopt "2 || 3"
npmlog "0 || 1 || 2 || 3 || 4"
osenv "0"
- request "2"
+ request ">=2.9.0 <2.82.0"
rimraf "2"
semver "~5.3.0"
tar "^2.0.0"
@@ -4811,15 +5348,30 @@ node-libs-browser@^2.0.0:
vm-browserify "0.0.4"
node-notifier@^5.0.2:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.1.2.tgz#2fa9e12605fa10009d44549d6fcd8a63dde0e4ff"
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.2.1.tgz#fa313dd08f5517db0e2502e5758d664ac69f9dea"
dependencies:
growly "^1.3.0"
- semver "^5.3.0"
- shellwords "^0.1.0"
- which "^1.2.12"
+ semver "^5.4.1"
+ shellwords "^0.1.1"
+ which "^1.3.0"
-node-pre-gyp@^0.6.39, node-pre-gyp@^0.6.4:
+node-pre-gyp@^0.10.0:
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc"
+ dependencies:
+ detect-libc "^1.0.2"
+ mkdirp "^0.5.1"
+ needle "^2.2.1"
+ nopt "^4.0.1"
+ npm-packlist "^1.1.6"
+ npmlog "^4.0.2"
+ rc "^1.2.7"
+ rimraf "^2.6.1"
+ semver "^5.3.0"
+ tar "^4"
+
+node-pre-gyp@^0.6.4:
version "0.6.39"
resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649"
dependencies:
@@ -4835,9 +5387,9 @@ node-pre-gyp@^0.6.39, node-pre-gyp@^0.6.4:
tar "^2.2.1"
tar-pack "^3.4.0"
-node-sass@^4.7.2:
- version "4.7.2"
- resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.7.2.tgz#9366778ba1469eb01438a9e8592f4262bcb6794e"
+node-sass@^4.9.2:
+ version "4.9.2"
+ resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.9.2.tgz#5e63fe6bd0f2ae3ac9d6c14ede8620e2b8bdb437"
dependencies:
async-foreach "^0.1.3"
chalk "^1.1.1"
@@ -4851,10 +5403,10 @@ node-sass@^4.7.2:
lodash.mergewith "^4.6.0"
meow "^3.7.0"
mkdirp "^0.5.1"
- nan "^2.3.2"
+ nan "^2.10.0"
node-gyp "^3.3.1"
npmlog "^4.0.0"
- request "~2.79.0"
+ request "2.87.0"
sass-graph "^2.2.4"
stdout-stream "^1.4.0"
"true-case-path" "^1.0.2"
@@ -4897,7 +5449,7 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
semver "2 || 3 || 4 || 5"
validate-npm-package-license "^3.0.1"
-normalize-path@^2.0.0, normalize-path@^2.0.1:
+normalize-path@^2.0.1, normalize-path@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
dependencies:
@@ -4916,13 +5468,24 @@ normalize-url@^1.4.0:
query-string "^4.1.0"
sort-keys "^1.0.0"
+npm-bundled@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.3.tgz#7e71703d973af3370a9591bafe3a63aca0be2308"
+
+npm-packlist@^1.1.6:
+ version "1.1.10"
+ resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.10.tgz#1039db9e985727e464df066f4cf0ab6ef85c398a"
+ dependencies:
+ ignore-walk "^3.0.1"
+ npm-bundled "^1.0.1"
+
npm-run-all@^4.1.2:
- version "4.1.2"
- resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.2.tgz#90d62d078792d20669139e718621186656cea056"
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.3.tgz#49f15b55a66bb4101664ce270cb18e7103f8f185"
dependencies:
ansi-styles "^3.2.0"
chalk "^2.1.0"
- cross-spawn "^5.1.0"
+ cross-spawn "^6.0.4"
memorystream "^0.3.1"
minimatch "^3.0.4"
ps-tree "^1.1.0"
@@ -4960,8 +5523,8 @@ number-is-nan@^1.0.0:
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
"nwmatcher@>= 1.3.9 < 2.0.0":
- version "1.4.3"
- resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.3.tgz#64348e3b3d80f035b40ac11563d278f8b72db89c"
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.4.tgz#2285631f34a95f0d0395cd900c96ed39b58f346e"
oauth-sign@~0.8.1, oauth-sign@~0.8.2:
version "0.8.2"
@@ -4975,29 +5538,44 @@ object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+object-copy@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
+ dependencies:
+ copy-descriptor "^0.1.0"
+ define-property "^0.2.5"
+ kind-of "^3.0.3"
+
object-fit-images@^3.2.3:
version "3.2.3"
resolved "https://registry.yarnpkg.com/object-fit-images/-/object-fit-images-3.2.3.tgz#4089f6d0070a3b5563d3c1ab6f1b28d61331f0ac"
+object-inspect@^1.5.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b"
+
object-is@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6"
-object-keys@^1.0.10, object-keys@^1.0.8:
- version "1.0.11"
- resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d"
+object-keys@^1.0.11, object-keys@^1.0.8:
+ version "1.0.12"
+ resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2"
-object-path@^0.9.2:
- version "0.9.2"
- resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.9.2.tgz#0fd9a74fc5fad1ae3968b586bda5c632bd6c05a5"
+object-visit@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
+ dependencies:
+ isobject "^3.0.0"
-object.assign@^4.0.4:
- version "4.0.4"
- resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.0.4.tgz#b1c9cc044ef1b9fe63606fc141abbb32e14730cc"
+object.assign@^4.0.4, object.assign@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da"
dependencies:
define-properties "^1.1.2"
- function-bind "^1.1.0"
- object-keys "^1.0.10"
+ function-bind "^1.1.1"
+ has-symbols "^1.0.0"
+ object-keys "^1.0.11"
object.entries@^1.0.4:
version "1.0.4"
@@ -5015,6 +5593,12 @@ object.omit@^2.0.0:
for-own "^0.1.4"
is-extendable "^0.1.1"
+object.pick@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
+ dependencies:
+ isobject "^3.0.1"
+
object.values@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.0.4.tgz#e524da09b4f66ff05df457546ec72ac99f13069a"
@@ -5025,14 +5609,14 @@ object.values@^1.0.4:
has "^1.0.1"
obuf@^1.0.0, obuf@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.1.tgz#104124b6c602c6796881a042541d36db43a5264e"
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e"
-offline-plugin@^4.8.3:
- version "4.8.4"
- resolved "https://registry.yarnpkg.com/offline-plugin/-/offline-plugin-4.8.4.tgz#1084c59f6606bded5ee5a6bf6208e2b9f5bdd339"
+offline-plugin@^5.0.5:
+ version "5.0.5"
+ resolved "https://registry.yarnpkg.com/offline-plugin/-/offline-plugin-5.0.5.tgz#e9b16c569d19899af9c923f5bc260705578ffeba"
dependencies:
- deep-extend "^0.4.0"
+ deep-extend "^0.5.1"
ejs "^2.3.4"
loader-utils "0.2.x"
minimatch "^3.0.3"
@@ -5048,7 +5632,7 @@ on-headers@~1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7"
-once@^1.3.0, once@^1.3.3, once@^1.4.0:
+once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
dependencies:
@@ -5065,8 +5649,8 @@ opener@^1.4.3:
resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.3.tgz#5c6da2c5d7e5831e8ffa3964950f8d6674ac90b8"
opn@^5.1.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/opn/-/opn-5.1.0.tgz#72ce2306a17dbea58ff1041853352b4a8fc77519"
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/opn/-/opn-5.3.0.tgz#64871565c863875f052cfdf53d3e3cb5adb53b1c"
dependencies:
is-wsl "^1.1.0"
@@ -5089,16 +5673,16 @@ optionator@^0.8.1, optionator@^0.8.2:
wordwrap "~1.0.0"
original@>=0.0.5:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/original/-/original-1.0.0.tgz#9147f93fa1696d04be61e01bd50baeaca656bd3b"
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/original/-/original-1.0.1.tgz#b0a53ff42ba997a8c9cd1fb5daaeb42b9d693190"
dependencies:
- url-parse "1.0.x"
+ url-parse "~1.4.0"
os-browserify@^0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
-os-homedir@^1.0.0, os-homedir@^1.0.1:
+os-homedir@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
@@ -5121,8 +5705,8 @@ os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2:
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
osenv@0, osenv@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644"
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
dependencies:
os-homedir "^1.0.0"
os-tmpdir "^1.0.0"
@@ -5136,8 +5720,10 @@ p-finally@^1.0.0:
resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
p-limit@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc"
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
+ dependencies:
+ p-try "^1.0.0"
p-locate@^2.0.0:
version "2.0.0"
@@ -5149,6 +5735,10 @@ p-map@^1.1.1:
version "1.2.0"
resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b"
+p-try@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
+
packet-reader@0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/packet-reader/-/packet-reader-0.3.1.tgz#cd62e60af8d7fea8a705ec4ff990871c46871f27"
@@ -5157,9 +5747,17 @@ pako@~1.0.5:
version "1.0.6"
resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258"
+parallel-transform@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06"
+ dependencies:
+ cyclist "~0.2.2"
+ inherits "^2.0.3"
+ readable-stream "^2.1.5"
+
parse-asn1@^5.0.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712"
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.1.tgz#f6bf293818332bd0dab54efb16087724745e6ca8"
dependencies:
asn1.js "^4.0.0"
browserify-aes "^1.0.0"
@@ -5196,12 +5794,6 @@ parse-json@^2.2.0:
dependencies:
error-ex "^1.2.0"
-parse-json@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-3.0.0.tgz#fa6f47b18e23826ead32f263e744d0e1e847fb13"
- dependencies:
- error-ex "^1.3.1"
-
parse-json@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
@@ -5223,13 +5815,21 @@ parseurl@~1.3.2:
version "1.3.2"
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3"
+pascalcase@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
+
path-browserify@0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a"
-path-complete-extname@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/path-complete-extname/-/path-complete-extname-0.1.0.tgz#c454702669f31452f8193aa6168915fa31692f4a"
+path-complete-extname@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/path-complete-extname/-/path-complete-extname-1.0.0.tgz#f889985dc91000c815515c0bfed06c5acda0752b"
+
+path-dirname@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
path-exists@^2.0.0:
version "2.1.0"
@@ -5249,7 +5849,7 @@ path-is-inside@^1.0.1, path-is-inside@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
-path-key@^2.0.0:
+path-key@^2.0.0, path-key@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
@@ -5294,8 +5894,8 @@ pause-stream@0.0.11:
through "~2.3"
pbkdf2@^3.0.3:
- version "3.0.14"
- resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.14.tgz#a35e13c64799b06ce15320f459c230e68e73bade"
+ version "3.0.16"
+ resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.16.tgz#7404208ec6b01b62d85bf83853a8064f8d9c2a5c"
dependencies:
create-hash "^1.1.2"
create-hmac "^1.1.4"
@@ -5397,11 +5997,24 @@ portfinder@^1.0.9:
debug "^2.2.0"
mkdirp "0.5.x"
-postcss-advanced-variables@1.2.2:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/postcss-advanced-variables/-/postcss-advanced-variables-1.2.2.tgz#90a6213262e66a050a368b4a9c5d4778d72dbd74"
+posix-character-classes@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
+
+postcss-advanced-variables@^2.3.3:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/postcss-advanced-variables/-/postcss-advanced-variables-2.3.3.tgz#80ac5b05988d02f63352974491e319910f33337e"
dependencies:
- postcss "^5.0.10"
+ "@csstools/sass-import-resolve" "^1"
+ postcss "^6"
+
+postcss-apply@^0.9.0:
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/postcss-apply/-/postcss-apply-0.9.0.tgz#a152e6e34a6c55d0895751929319c262c5d8c289"
+ dependencies:
+ babel-runtime "^6.23.0"
+ balanced-match "^0.4.2"
+ postcss "^6.0.0"
postcss-atroot@^0.1.3:
version "0.1.3"
@@ -5409,6 +6022,13 @@ postcss-atroot@^0.1.3:
dependencies:
postcss "^5.0.5"
+postcss-attribute-case-insensitive@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-2.0.0.tgz#94dc422c8f90997f16bd33a3654bbbec084963b4"
+ dependencies:
+ postcss "^6.0.0"
+ postcss-selector-parser "^2.2.3"
+
postcss-calc@^5.2.0:
version "5.3.1"
resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e"
@@ -5417,13 +6037,34 @@ postcss-calc@^5.2.0:
postcss-message-helpers "^2.0.0"
reduce-css-calc "^1.2.6"
-postcss-color-function@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/postcss-color-function/-/postcss-color-function-4.0.1.tgz#402b3f2cebc3f6947e618fb6be3654fbecef6444"
+postcss-color-hex-alpha@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-3.0.0.tgz#1e53e6c8acb237955e8fd08b7ecdb1b8b8309f95"
dependencies:
- css-color-function "~1.3.3"
+ color "^1.0.3"
postcss "^6.0.1"
postcss-message-helpers "^2.0.0"
+
+postcss-color-mod-function@^2.4.2:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/postcss-color-mod-function/-/postcss-color-mod-function-2.4.2.tgz#bdf408f152bc3201517a4c38b7eb5cd2996114fb"
+ dependencies:
+ "@csstools/convert-colors" "^1.4.0"
+ postcss "^6.0.19"
+ postcss-values-parser "^1.3.2"
+
+postcss-color-rebeccapurple@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-3.1.0.tgz#ce1269ecc2d0d8bf92aab44bd884e633124c33ec"
+ dependencies:
+ postcss "^6.0.22"
+ postcss-values-parser "^1.5.0"
+
+postcss-color-rgb@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-color-rgb/-/postcss-color-rgb-2.0.0.tgz#14539c8a7131494b482e0dd1cc265ff6514b5263"
+ dependencies:
+ postcss "^6.0.1"
postcss-value-parser "^3.3.0"
postcss-colormin@^2.1.8:
@@ -5447,12 +6088,12 @@ postcss-custom-media@^6.0.0:
dependencies:
postcss "^6.0.1"
-postcss-custom-properties@^6.1.0:
- version "6.2.0"
- resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-6.2.0.tgz#5d929a7f06e9b84e0f11334194c0ba9a30acfbe9"
+postcss-custom-properties@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-7.0.0.tgz#24dc4fbe6d6ed550ea4fd3b11204660e9ffa3b33"
dependencies:
balanced-match "^1.0.0"
- postcss "^6.0.13"
+ postcss "^6.0.18"
postcss-custom-selectors@^4.0.1:
version "4.0.1"
@@ -5461,6 +6102,13 @@ postcss-custom-selectors@^4.0.1:
postcss "^6.0.1"
postcss-selector-matches "^3.0.0"
+postcss-dir-pseudo-class@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-3.0.0.tgz#31a18af3b9b1b33be635599b998a9829896c3fed"
+ dependencies:
+ postcss "^6.0.20"
+ postcss-selector-parser "^3.1.1"
+
postcss-discard-comments@^2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d"
@@ -5492,67 +6140,65 @@ postcss-discard-unused@^2.2.1:
postcss "^5.0.14"
uniqs "^2.0.0"
-postcss-extend@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/postcss-extend/-/postcss-extend-1.0.5.tgz#5ea98bf787ba3cacf4df4609743f80a833b1d0e7"
+postcss-extend-rule@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-extend-rule/-/postcss-extend-rule-1.1.0.tgz#11e4d590ffe4253b853ef1fc03be7167da607d38"
dependencies:
- postcss "^5.0.4"
+ postcss "^6.0.11"
+ postcss-nesting "^4.2.1"
postcss-filter-plugins@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz#6d85862534d735ac420e4a85806e1f5d4286d84c"
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz#82245fdf82337041645e477114d8e593aa18b8ec"
dependencies:
postcss "^5.0.4"
- uniqid "^4.0.0"
-postcss-import@^10.0.0:
- version "10.0.0"
- resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-10.0.0.tgz#4c85c97b099136cc5ea0240dc1dfdbfde4e2ebbe"
+postcss-focus-visible@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-2.0.0.tgz#a6b9881f6710f6251790e2f151c94b161e23eeb6"
+ dependencies:
+ postcss "^6.0"
+
+postcss-font-family-system-ui@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-font-family-system-ui/-/postcss-font-family-system-ui-3.0.0.tgz#675fe7a9e029669f05f8dba2e44c2225ede80623"
+ dependencies:
+ postcss "^6.0"
+
+postcss-font-variant@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-3.0.0.tgz#08ccc88f6050ba82ed8ef2cc76c0c6a6b41f183e"
dependencies:
- object-assign "^4.0.1"
postcss "^6.0.1"
- postcss-value-parser "^3.2.3"
- read-cache "^1.0.0"
- resolve "^1.1.7"
-postcss-js@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-1.0.1.tgz#ffaf29226e399ea74b5dce02cab1729d7addbc7b"
+postcss-initial@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-2.0.0.tgz#72715f7336e0bb79351d99ee65c4a253a8441ba4"
dependencies:
- camelcase-css "^1.0.1"
- postcss "^6.0.11"
+ lodash.template "^4.2.4"
+ postcss "^6.0.1"
-postcss-load-config@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-1.2.0.tgz#539e9afc9ddc8620121ebf9d8c3673e0ce50d28a"
+postcss-load-config@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.0.0.tgz#f1312ddbf5912cd747177083c5ef7a19d62ee484"
dependencies:
- cosmiconfig "^2.1.0"
- object-assign "^4.1.0"
- postcss-load-options "^1.2.0"
- postcss-load-plugins "^2.3.0"
+ cosmiconfig "^4.0.0"
+ import-cwd "^2.0.0"
-postcss-load-options@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/postcss-load-options/-/postcss-load-options-1.2.0.tgz#b098b1559ddac2df04bc0bb375f99a5cfe2b6d8c"
- dependencies:
- cosmiconfig "^2.1.0"
- object-assign "^4.1.0"
-
-postcss-load-plugins@^2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz#745768116599aca2f009fad426b00175049d8d92"
- dependencies:
- cosmiconfig "^2.1.1"
- object-assign "^4.1.0"
-
-postcss-loader@^2.0.9:
- version "2.0.9"
- resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-2.0.9.tgz#001fdf7bfeeb159405ee61d1bb8e59b528dbd309"
+postcss-loader@^2.1.6:
+ version "2.1.6"
+ resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-2.1.6.tgz#1d7dd7b17c6ba234b9bed5af13e0bea40a42d740"
dependencies:
loader-utils "^1.1.0"
postcss "^6.0.0"
- postcss-load-config "^1.2.0"
- schema-utils "^0.3.0"
+ postcss-load-config "^2.0.0"
+ schema-utils "^0.4.0"
+
+postcss-logical@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-1.1.1.tgz#bcabf0638d8aa747743b32bc52f9d90d4a3313d2"
+ dependencies:
+ postcss "^6.0.20"
postcss-media-minmax@^3.0.0:
version "3.0.0"
@@ -5621,51 +6267,41 @@ postcss-minify-selectors@^2.0.4:
postcss "^5.0.14"
postcss-selector-parser "^2.0.0"
-postcss-mixins@^6.0.1:
- version "6.2.0"
- resolved "https://registry.yarnpkg.com/postcss-mixins/-/postcss-mixins-6.2.0.tgz#fa9d2c2166b2ae7745956c727ab9dd2de4b96a40"
- dependencies:
- globby "^6.1.0"
- postcss "^6.0.13"
- postcss-js "^1.0.1"
- postcss-simple-vars "^4.1.0"
- sugarss "^1.0.0"
-
-postcss-modules-extract-imports@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz#b614c9720be6816eaee35fb3a5faa1dba6a05ddb"
+postcss-modules-extract-imports@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz#66140ecece38ef06bf0d3e355d69bf59d141ea85"
dependencies:
postcss "^6.0.1"
-postcss-modules-local-by-default@^1.0.1:
+postcss-modules-local-by-default@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069"
dependencies:
css-selector-tokenizer "^0.7.0"
postcss "^6.0.1"
-postcss-modules-scope@^1.0.0:
+postcss-modules-scope@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90"
dependencies:
css-selector-tokenizer "^0.7.0"
postcss "^6.0.1"
-postcss-modules-values@^1.1.0:
+postcss-modules-values@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20"
dependencies:
icss-replace-symbols "^1.1.0"
postcss "^6.0.1"
-postcss-nested@^2.0.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-2.1.2.tgz#04057281f9631fef684857fb0119bae04ede03c6"
+postcss-nested@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-3.0.0.tgz#cde40bd07a078565f3df72e2dc2665871c724852"
dependencies:
- postcss "^6.0.9"
- postcss-selector-parser "^2.2.3"
+ postcss "^6.0.14"
+ postcss-selector-parser "^3.1.1"
-postcss-nesting@^4.0.1:
+postcss-nesting@^4.2.1:
version "4.2.1"
resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-4.2.1.tgz#0483bce338b3f0828ced90ff530b29b98b00300d"
dependencies:
@@ -5701,20 +6337,58 @@ postcss-ordered-values@^2.1.0:
postcss "^5.0.4"
postcss-value-parser "^3.0.1"
-postcss-partial-import@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/postcss-partial-import/-/postcss-partial-import-4.1.0.tgz#f6c3e78e7bbeda4d9dab96d360367b90b353f9a4"
+postcss-page-break@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-1.0.0.tgz#09a63b6e03db092d38569b33dcba42a343ace60b"
dependencies:
- glob "^7.1.1"
- postcss-import "^10.0.0"
+ postcss "^6.0.16"
-postcss-property-lookup@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/postcss-property-lookup/-/postcss-property-lookup-1.2.1.tgz#30450a1361b7aae758bbedd5201fbe057bb8270b"
+postcss-preset-env@^3.2.2:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-3.5.0.tgz#b3aae2c65e5b3fa61d735b70392fa758a665b785"
+ dependencies:
+ "@csstools/postcss-image-set-function" "^1.0.0"
+ browserslist "^3.2.4"
+ caniuse-lite "^1.0.30000823"
+ cssdb "^1.6.0"
+ postcss "^6.0.21"
+ postcss-apply "^0.9.0"
+ postcss-attribute-case-insensitive "^2.0.0"
+ postcss-color-hex-alpha "^3.0.0"
+ postcss-color-mod-function "^2.4.2"
+ postcss-color-rebeccapurple "^3.0.0"
+ postcss-color-rgb "^2.0.0"
+ postcss-custom-media "^6.0.0"
+ postcss-custom-properties "^7.0.0"
+ postcss-custom-selectors "^4.0.1"
+ postcss-dir-pseudo-class "^3.0.0"
+ postcss-focus-visible "^2.0.0"
+ postcss-font-family-system-ui "^3.0.0"
+ postcss-font-variant "^3.0.0"
+ postcss-initial "^2.0.0"
+ postcss-logical "^1.1.1"
+ postcss-media-minmax "^3.0.0"
+ postcss-nesting "^4.2.1"
+ postcss-page-break "^1.0.0"
+ postcss-pseudo-class-any-link "^4.0.0"
+ postcss-replace-overflow-wrap "^2.0.0"
+ postcss-selector-matches "^3.0.1"
+ postcss-selector-not "^3.0.1"
+
+postcss-property-lookup@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-property-lookup/-/postcss-property-lookup-2.0.0.tgz#c995d1df42a75420f2aea834c2cbe296b2c15922"
dependencies:
object-assign "^4.0.1"
- postcss "^5.0.4"
- tcomb "^2.5.1"
+ postcss "^6.0.6"
+ tcomb "^3.2.21"
+
+postcss-pseudo-class-any-link@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-4.0.0.tgz#9152a0613d3450720513e8892854bae42d0ee68e"
+ dependencies:
+ postcss "^6.0.1"
+ postcss-selector-parser "^2.2.3"
postcss-reduce-idents@^2.2.2:
version "2.4.0"
@@ -5737,19 +6411,24 @@ postcss-reduce-transforms@^1.0.3:
postcss "^5.0.8"
postcss-value-parser "^3.0.1"
-postcss-sass@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/postcss-sass/-/postcss-sass-0.1.0.tgz#0d2a655b5d241ec8f419bb3da38de5ca11746ddb"
+postcss-replace-overflow-wrap@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-2.0.0.tgz#794db6faa54f8db100854392a93af45768b4e25b"
+ dependencies:
+ postcss "^6.0.1"
+
+postcss-sass@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/postcss-sass/-/postcss-sass-0.2.0.tgz#e55516441e9526ba4b380a730d3a02e9eaa78c7a"
dependencies:
gonzales-pe "^4.0.3"
- mathjs "^3.11.5"
- postcss "^5.2.6"
+ postcss "^6.0.6"
postcss-scss@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-1.0.2.tgz#ff45cf3354b879ee89a4eb68680f46ac9bb14f94"
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-1.0.6.tgz#ab903f3bb20161bc177896462293a53d4bff5f7a"
dependencies:
- postcss "^6.0.3"
+ postcss "^6.0.23"
postcss-selector-matches@^3.0.0, postcss-selector-matches@^3.0.1:
version "3.0.1"
@@ -5773,27 +6452,29 @@ postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2, postcss-selector
indexes-of "^1.0.1"
uniq "^1.0.1"
-postcss-simple-vars@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/postcss-simple-vars/-/postcss-simple-vars-4.1.0.tgz#043248cfef8d3f51b3486a28c09f8375dbf1b2f9"
+postcss-selector-parser@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865"
dependencies:
- postcss "^6.0.9"
+ dot-prop "^4.1.1"
+ indexes-of "^1.0.1"
+ uniq "^1.0.1"
-postcss-smart-import@^0.7.5:
- version "0.7.5"
- resolved "https://registry.yarnpkg.com/postcss-smart-import/-/postcss-smart-import-0.7.5.tgz#df9a9c6dd60d916e5e0670d1c57d03af5d3dcc31"
+postcss-smart-import@^0.7.6:
+ version "0.7.6"
+ resolved "https://registry.yarnpkg.com/postcss-smart-import/-/postcss-smart-import-0.7.6.tgz#259deb84aa28f138458218ecc0e9a84c61ada6a4"
dependencies:
- babel-runtime "^6.23.0"
+ babel-runtime "^6.26.0"
lodash "^4.17.4"
object-assign "^4.1.1"
- postcss "^6.0.6"
- postcss-sass "^0.1.0"
+ postcss "^6.0.14"
+ postcss-sass "^0.2.0"
postcss-scss "^1.0.2"
postcss-value-parser "^3.3.0"
promise-each "^2.2.0"
read-cache "^1.0.0"
- resolve "^1.3.3"
- sugarss "^1.0.0"
+ resolve "^1.5.0"
+ sugarss "^1.0.1"
postcss-svgo@^2.1.1:
version "2.1.6"
@@ -5816,6 +6497,14 @@ postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^
version "3.3.0"
resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15"
+postcss-values-parser@^1.3.2, postcss-values-parser@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/postcss-values-parser/-/postcss-values-parser-1.5.0.tgz#5d9fa63e2bcb0179ce48f3235303765eb89f3047"
+ dependencies:
+ flatten "^1.0.2"
+ indexes-of "^1.0.1"
+ uniq "^1.0.1"
+
postcss-zindex@^2.0.1:
version "2.2.0"
resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22"
@@ -5824,7 +6513,7 @@ postcss-zindex@^2.0.1:
postcss "^5.0.4"
uniqs "^2.0.0"
-postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16, postcss@^5.2.6:
+postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16:
version "5.2.18"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5"
dependencies:
@@ -5833,13 +6522,13 @@ postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0
source-map "^0.5.6"
supports-color "^3.2.3"
-postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.11, postcss@^6.0.13, postcss@^6.0.14, postcss@^6.0.3, postcss@^6.0.6, postcss@^6.0.9:
- version "6.0.14"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.14.tgz#5534c72114739e75d0afcf017db853099f562885"
+postcss@^6, postcss@^6.0, postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.11, postcss@^6.0.14, postcss@^6.0.16, postcss@^6.0.18, postcss@^6.0.19, postcss@^6.0.20, postcss@^6.0.21, postcss@^6.0.22, postcss@^6.0.23, postcss@^6.0.6:
+ version "6.0.23"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324"
dependencies:
- chalk "^2.3.0"
+ chalk "^2.4.1"
source-map "^0.6.1"
- supports-color "^4.4.0"
+ supports-color "^5.4.0"
postgres-array@~1.0.0:
version "1.0.2"
@@ -5854,8 +6543,8 @@ postgres-date@~1.0.0:
resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.3.tgz#e2d89702efdb258ff9d9cee0fe91bd06975257a8"
postgres-interval@^1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.1.1.tgz#acdb0f897b4b1c6e496d9d4e0a853e1c428f06f0"
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.1.2.tgz#bf71ff902635f21cb241a013fc421d81d1db15a9"
dependencies:
xtend "^4.0.0"
@@ -5863,26 +6552,17 @@ precond@0.2:
version "0.2.3"
resolved "https://registry.yarnpkg.com/precond/-/precond-0.2.3.tgz#aa9591bcaa24923f1e0f4849d240f47efc1075ac"
-precss@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/precss/-/precss-2.0.0.tgz#7f567e3318e06d44c8fdbf9e58452e8358bf4b71"
+precss@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/precss/-/precss-3.1.2.tgz#c82c0aa4ca5fe1e879799d697db0fac6d15d23bc"
dependencies:
- postcss "^6.0.3"
- postcss-advanced-variables "1.2.2"
+ postcss "^6.0.19"
+ postcss-advanced-variables "^2.3.3"
postcss-atroot "^0.1.3"
- postcss-color-function "^4.0.0"
- postcss-custom-media "^6.0.0"
- postcss-custom-properties "^6.1.0"
- postcss-custom-selectors "^4.0.1"
- postcss-extend "^1.0.5"
- postcss-media-minmax "^3.0.0"
- postcss-mixins "^6.0.1"
- postcss-nested "^2.0.2"
- postcss-nesting "^4.0.1"
- postcss-partial-import "^4.1.0"
- postcss-property-lookup "^1.2.1"
- postcss-selector-matches "^3.0.1"
- postcss-selector-not "^3.0.1"
+ postcss-extend-rule "^1.1.0"
+ postcss-nested "^3.0.0"
+ postcss-preset-env "^3.2.2"
+ postcss-property-lookup "^2.0.0"
prelude-ls@~1.1.2:
version "1.1.2"
@@ -5903,13 +6583,13 @@ pretty-format@^21.2.1:
ansi-regex "^3.0.0"
ansi-styles "^3.2.0"
-private@^0.1.6, private@^0.1.7:
+private@^0.1.6, private@^0.1.8:
version "0.1.8"
resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
-process-nextick-args@~1.0.6:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
+process-nextick-args@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
process@^0.11.10:
version "0.11.10"
@@ -5925,6 +6605,10 @@ promise-each@^2.2.0:
dependencies:
any-promise "^0.1.0"
+promise-inflight@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
+
promise@^7.1.1:
version "7.3.1"
resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
@@ -5932,29 +6616,29 @@ promise@^7.1.1:
asap "~2.0.3"
prop-types-extra@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/prop-types-extra/-/prop-types-extra-1.0.1.tgz#a57bd4810e82d27a3ff4317ecc1b4ad005f79a82"
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/prop-types-extra/-/prop-types-extra-1.1.0.tgz#32609910ea2dcf190366bacd3490d5a6412a605f"
dependencies:
+ react-is "^16.3.2"
warning "^3.0.0"
-prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.6, prop-types@^15.5.8, prop-types@^15.6.0:
- version "15.6.0"
- resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856"
+prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.6, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2:
+ version "15.6.2"
+ resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102"
dependencies:
- fbjs "^0.8.16"
loose-envify "^1.3.1"
object-assign "^4.1.1"
-proxy-addr@~2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.2.tgz#6571504f47bb988ec8180253f85dd7e14952bdec"
+proxy-addr@~2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.3.tgz#355f262505a621646b3130a728eb647e22055341"
dependencies:
forwarded "~0.1.2"
- ipaddr.js "1.5.2"
+ ipaddr.js "1.6.0"
-prr@~0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a"
+prr@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
ps-tree@^1.1.0:
version "1.1.0"
@@ -5966,9 +6650,13 @@ pseudomap@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
+psl@^1.1.24:
+ version "1.1.28"
+ resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.28.tgz#4fb6ceb08a1e2214d4fd4de0ca22dae13740bc7b"
+
public-encrypt@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6"
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.2.tgz#46eb9107206bf73489f8b85b69d91334c6610994"
dependencies:
bn.js "^4.1.0"
browserify-rsa "^4.0.0"
@@ -5976,6 +6664,21 @@ public-encrypt@^4.0.0:
parse-asn1 "^5.0.0"
randombytes "^2.0.1"
+pump@^2.0.0, pump@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pumpify@^1.3.3:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce"
+ dependencies:
+ duplexify "^3.6.0"
+ inherits "^2.0.3"
+ pump "^2.0.0"
+
punycode@1.3.2:
version "1.3.2"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
@@ -5985,25 +6688,25 @@ punycode@^1.2.4, punycode@^1.4.1:
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
punycode@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d"
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
q@^1.1.2:
version "1.5.1"
resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
-qs@6.5.1, qs@~6.5.1:
+qs@6.5.1:
version "6.5.1"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8"
-qs@~6.3.0:
- version "6.3.2"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c"
-
qs@~6.4.0:
version "6.4.0"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233"
+qs@~6.5.1:
+ version "6.5.2"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
+
query-string@^4.1.0:
version "4.3.4"
resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb"
@@ -6019,13 +6722,9 @@ querystring@0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
-querystringify@0.0.x:
- version "0.0.4"
- resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-0.0.4.tgz#0cf7f84f9463ff0ae51c4c4b142d95be37724d9c"
-
-querystringify@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-1.0.0.tgz#6286242112c5b712fa654e526652bf6a13ff05cb"
+querystringify@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.0.0.tgz#fa3ed6e68eb15159457c89b37bc6472833195755"
quote@^0.4.0:
version "0.4.0"
@@ -6041,33 +6740,34 @@ railroad-diagrams@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e"
-rails-ujs@^5.1.2:
- version "5.1.4"
- resolved "https://registry.yarnpkg.com/rails-ujs/-/rails-ujs-5.1.4.tgz#e2e9f7bcbfe51ee69c5f72f4beb0d88ab81a638e"
+rails-ujs@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/rails-ujs/-/rails-ujs-5.2.0.tgz#d93f7a969a226c0ae67044172955be8c1cdf49fc"
-randexp@^0.4.2:
+randexp@0.4.6:
version "0.4.6"
resolved "https://registry.yarnpkg.com/randexp/-/randexp-0.4.6.tgz#e986ad5e5e31dae13ddd6f7b3019aa7c87f60ca3"
dependencies:
discontinuous-range "1.0.0"
ret "~0.1.10"
-randomatic@^1.1.3:
- version "1.1.7"
- resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c"
+randomatic@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.0.0.tgz#d35490030eb4f7578de292ce6dfb04a91a128923"
dependencies:
- is-number "^3.0.0"
- kind-of "^4.0.0"
+ is-number "^4.0.0"
+ kind-of "^6.0.0"
+ math-random "^1.0.1"
randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.5.tgz#dc009a246b8d09a177b4b7a0ae77bc570f4b1b79"
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80"
dependencies:
safe-buffer "^5.1.0"
randomfill@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.3.tgz#b96b7df587f01dd91726c418f30553b1418e3d62"
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458"
dependencies:
randombytes "^2.0.5"
safe-buffer "^5.1.0"
@@ -6085,32 +6785,31 @@ raw-body@2.3.2:
iconv-lite "0.4.19"
unpipe "1.0.0"
-rc@^1.1.7:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.2.tgz#d8ce9cb57e8d64d9c7badd9876c7c34cbe3c7077"
+rc@^1.1.7, rc@^1.2.7:
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
dependencies:
- deep-extend "~0.4.0"
+ deep-extend "^0.6.0"
ini "~1.3.0"
minimist "^1.2.0"
strip-json-comments "~2.0.1"
react-dom@^16.3.0:
- version "16.3.2"
- resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.3.2.tgz#cb90f107e09536d683d84ed5d4888e9640e0e4df"
+ version "16.4.1"
+ resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.4.1.tgz#7f8b0223b3a5fbe205116c56deb85de32685dad6"
dependencies:
fbjs "^0.8.16"
loose-envify "^1.1.0"
object-assign "^4.1.1"
prop-types "^15.6.0"
-react-event-listener@^0.5.1:
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/react-event-listener/-/react-event-listener-0.5.1.tgz#ba36076e47bc37c5a67ff5ccd4a9ff0f15621040"
+react-event-listener@^0.6.0:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/react-event-listener/-/react-event-listener-0.6.1.tgz#41c7a80a66b398c27dd511e22712b02f3d4eccca"
dependencies:
- babel-runtime "^6.26.0"
- fbjs "^0.8.16"
+ "@babel/runtime" "^7.0.0-beta.42"
prop-types "^15.6.0"
- warning "^3.0.0"
+ warning "^4.0.1"
react-hotkeys@^0.10.0:
version "0.10.0"
@@ -6126,14 +6825,14 @@ react-immutable-proptypes@^2.1.0:
resolved "https://registry.yarnpkg.com/react-immutable-proptypes/-/react-immutable-proptypes-2.1.0.tgz#023d6f39bb15c97c071e9e60d00d136eac5fa0b4"
react-immutable-pure-component@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/react-immutable-pure-component/-/react-immutable-pure-component-1.1.1.tgz#0ff69c6d4eaecd886db16805f3bbc1d2a2c654d8"
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/react-immutable-pure-component/-/react-immutable-pure-component-1.2.2.tgz#772c8591720def73e4dc1c8e5c8bb39472ff7925"
-react-intl-translations-manager@^5.0.0:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/react-intl-translations-manager/-/react-intl-translations-manager-5.0.1.tgz#f0ef1a9368abcac3b10b2e8b6027887dced5474e"
+react-intl-translations-manager@^5.0.3:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/react-intl-translations-manager/-/react-intl-translations-manager-5.0.3.tgz#aee010ecf35975673e033ca5d7d3f4147894324d"
dependencies:
- chalk "^2.1.0"
+ chalk "^2.3.2"
glob "^7.1.2"
json-stable-stringify "^1.0.1"
mkdirp "^0.5.1"
@@ -6147,6 +6846,14 @@ react-intl@^2.4.0:
intl-relativeformat "^2.0.0"
invariant "^2.1.1"
+react-is@^16.3.2, react-is@^16.4.1:
+ version "16.4.1"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.4.1.tgz#d624c4650d2c65dbd52c72622bbf389435d9776e"
+
+react-lifecycles-compat@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
+
react-motion@^0.5.2:
version "0.5.2"
resolved "https://registry.yarnpkg.com/react-motion/-/react-motion-0.5.2.tgz#0dd3a69e411316567927917c6626551ba0607316"
@@ -6172,6 +6879,15 @@ react-overlays@^0.8.3:
react-transition-group "^2.2.0"
warning "^3.0.0"
+react-reconciler@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.7.0.tgz#9614894103e5f138deeeb5eabaf3ee80eb1d026d"
+ dependencies:
+ fbjs "^0.8.16"
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+ prop-types "^15.6.0"
+
react-redux-loading-bar@^2.9.3:
version "2.9.3"
resolved "https://registry.yarnpkg.com/react-redux-loading-bar/-/react-redux-loading-bar-2.9.3.tgz#65865dddcbf597169e787edec15eec7ebfb84149"
@@ -6179,26 +6895,26 @@ react-redux-loading-bar@^2.9.3:
prop-types "^15.5.6"
react-redux@^5.0.4:
- version "5.0.6"
- resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.6.tgz#23ed3a4f986359d68b5212eaaa681e60d6574946"
+ version "5.0.7"
+ resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.7.tgz#0dc1076d9afb4670f993ffaef44b8f8c1155a4c8"
dependencies:
- hoist-non-react-statics "^2.2.1"
+ hoist-non-react-statics "^2.5.0"
invariant "^2.0.0"
- lodash "^4.2.0"
- lodash-es "^4.2.0"
+ lodash "^4.17.5"
+ lodash-es "^4.17.5"
loose-envify "^1.1.0"
- prop-types "^15.5.10"
+ prop-types "^15.6.0"
react-router-dom@^4.1.1:
- version "4.2.2"
- resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-4.2.2.tgz#c8a81df3adc58bba8a76782e946cbd4eae649b8d"
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-4.3.1.tgz#4c2619fc24c4fa87c9fd18f4fb4a43fe63fbd5c6"
dependencies:
history "^4.7.2"
- invariant "^2.2.2"
+ invariant "^2.2.4"
loose-envify "^1.3.1"
- prop-types "^15.5.4"
- react-router "^4.2.0"
- warning "^3.0.0"
+ prop-types "^15.6.1"
+ react-router "^4.3.1"
+ warning "^4.0.1"
react-router-scroll-4@^1.0.0-beta.1:
version "1.0.0-beta.1"
@@ -6208,17 +6924,17 @@ react-router-scroll-4@^1.0.0-beta.1:
scroll-behavior "^0.9.1"
warning "^3.0.0"
-react-router@^4.2.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/react-router/-/react-router-4.2.0.tgz#61f7b3e3770daeb24062dae3eedef1b054155986"
+react-router@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/react-router/-/react-router-4.3.1.tgz#aada4aef14c809cb2e686b05cee4742234506c4e"
dependencies:
history "^4.7.2"
- hoist-non-react-statics "^2.3.0"
- invariant "^2.2.2"
+ hoist-non-react-statics "^2.5.0"
+ invariant "^2.2.4"
loose-envify "^1.3.1"
path-to-regexp "^1.7.0"
- prop-types "^15.5.4"
- warning "^3.0.0"
+ prop-types "^15.6.1"
+ warning "^4.0.1"
react-sparklines@^1.7.0:
version "1.7.0"
@@ -6226,42 +6942,43 @@ react-sparklines@^1.7.0:
dependencies:
prop-types "^15.5.10"
-react-swipeable-views-core@^0.12.11:
- version "0.12.11"
- resolved "https://registry.yarnpkg.com/react-swipeable-views-core/-/react-swipeable-views-core-0.12.11.tgz#3cf2b4daffbb36f9d69bd19bf5b2d5370b6b2c1b"
+react-swipeable-views-core@^0.12.14:
+ version "0.12.14"
+ resolved "https://registry.yarnpkg.com/react-swipeable-views-core/-/react-swipeable-views-core-0.12.14.tgz#65271fd18dd9b359e39392fe065a8067e0d7bfdb"
dependencies:
- babel-runtime "^6.23.0"
- warning "^3.0.0"
+ "@babel/runtime" "^7.0.0-beta.42"
+ warning "^4.0.1"
-react-swipeable-views-utils@^0.12.11:
- version "0.12.11"
- resolved "https://registry.yarnpkg.com/react-swipeable-views-utils/-/react-swipeable-views-utils-0.12.11.tgz#3c9a6a2b8dbdcc331a5d107419578f57b7e101d6"
+react-swipeable-views-utils@^0.12.14:
+ version "0.12.14"
+ resolved "https://registry.yarnpkg.com/react-swipeable-views-utils/-/react-swipeable-views-utils-0.12.14.tgz#7ba72ea8eff8149f2c50ed8abc6fb21d1e0de227"
dependencies:
- babel-runtime "^6.23.0"
+ "@babel/runtime" "^7.0.0-beta.42"
fbjs "^0.8.4"
keycode "^2.1.7"
prop-types "^15.6.0"
- react-event-listener "^0.5.1"
- react-swipeable-views-core "^0.12.11"
+ react-event-listener "^0.6.0"
+ react-swipeable-views-core "^0.12.14"
react-swipeable-views@^0.12.3:
- version "0.12.12"
- resolved "https://registry.yarnpkg.com/react-swipeable-views/-/react-swipeable-views-0.12.12.tgz#60cdc8e3682ed082aaf094f7761eaf691ed28a6f"
+ version "0.12.14"
+ resolved "https://registry.yarnpkg.com/react-swipeable-views/-/react-swipeable-views-0.12.14.tgz#71722be23491ef500c42e86bafb838d45a69ffe1"
dependencies:
- babel-runtime "^6.23.0"
+ "@babel/runtime" "^7.0.0-beta.42"
dom-helpers "^3.2.1"
prop-types "^15.5.4"
- react-swipeable-views-core "^0.12.11"
- react-swipeable-views-utils "^0.12.11"
- warning "^3.0.0"
+ react-swipeable-views-core "^0.12.14"
+ react-swipeable-views-utils "^0.12.14"
+ warning "^4.0.1"
react-test-renderer@^16.0.0-0, react-test-renderer@^16.2.0:
- version "16.2.0"
- resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.2.0.tgz#bddf259a6b8fcd8555f012afc8eacc238872a211"
+ version "16.4.1"
+ resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.4.1.tgz#f2fb30c2c7b517db6e5b10ed20bb6b0a7ccd8d70"
dependencies:
fbjs "^0.8.16"
object-assign "^4.1.1"
prop-types "^15.6.0"
+ react-is "^16.4.1"
react-textarea-autosize@^5.2.1:
version "5.2.1"
@@ -6276,19 +6993,17 @@ react-toggle@^4.0.1:
classnames "^2.2.5"
react-transition-group@^2.2.0:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.2.1.tgz#e9fb677b79e6455fd391b03823afe84849df4a10"
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.4.0.tgz#1d9391fabfd82e016f26fabd1eec329dbd922b5a"
dependencies:
- chain-function "^1.0.0"
- classnames "^2.2.5"
- dom-helpers "^3.2.0"
+ dom-helpers "^3.3.1"
loose-envify "^1.3.1"
- prop-types "^15.5.8"
- warning "^3.0.0"
+ prop-types "^15.6.2"
+ react-lifecycles-compat "^3.0.4"
react@^16.3.0:
- version "16.3.2"
- resolved "https://registry.yarnpkg.com/react/-/react-16.3.2.tgz#fdc8420398533a1e58872f59091b272ce2f91ea9"
+ version "16.4.1"
+ resolved "https://registry.yarnpkg.com/react/-/react-16.4.1.tgz#de51ba5764b5dbcd1f9079037b862bd26b82fe32"
dependencies:
fbjs "^0.8.16"
loose-envify "^1.1.0"
@@ -6339,16 +7054,16 @@ read-pkg@^3.0.0:
normalize-package-data "^2.3.2"
path-type "^3.0.0"
-readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.2, readable-stream@^2.2.6, readable-stream@^2.2.9, readable-stream@^2.3.3:
- version "2.3.3"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c"
+"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.3, readable-stream@^2.3.6:
+ version "2.3.6"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
dependencies:
core-util-is "~1.0.0"
inherits "~2.0.3"
isarray "~1.0.0"
- process-nextick-args "~1.0.6"
+ process-nextick-args "~2.0.0"
safe-buffer "~5.1.1"
- string_decoder "~1.0.3"
+ string_decoder "~1.1.1"
util-deprecate "~1.0.1"
readdirp@^2.0.0:
@@ -6368,8 +7083,8 @@ redent@^1.0.0:
strip-indent "^1.0.1"
redis-commands@^1.2.0:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.3.1.tgz#81d826f45fa9c8b2011f4cd7a0fe597d241d442b"
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.3.5.tgz#4495889414f1e886261180b1442e7295602d83a2"
redis-parser@^2.6.0:
version "2.6.0"
@@ -6402,8 +7117,8 @@ redux-immutable@^4.0.0:
resolved "https://registry.yarnpkg.com/redux-immutable/-/redux-immutable-4.0.0.tgz#3a1a32df66366462b63691f0e1dc35e472bbc9f3"
redux-thunk@^2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.2.0.tgz#e615a16e16b47a19a515766133d1e3e99b7852e5"
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622"
redux@^3.7.1:
version "3.7.2"
@@ -6415,12 +7130,16 @@ redux@^3.7.1:
symbol-observable "^1.0.3"
regenerate@^1.2.1:
- version "1.3.3"
- resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f"
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11"
regenerator-runtime@^0.11.0:
- version "0.11.0"
- resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz#7e54fe5b5ccd5d6624ea6255c3473be090b802e1"
+ version "0.11.1"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
+
+regenerator-runtime@^0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.0.tgz#8052ac952d85b10f3425192cd0c53f45cf65c6cb"
regenerator-transform@^0.10.0:
version "0.10.1"
@@ -6436,9 +7155,12 @@ regex-cache@^0.4.2:
dependencies:
is-equal-shallow "^0.1.3"
-regex-parser@^2.2.1:
- version "2.2.8"
- resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.8.tgz#da4c0cda5a828559094168930f455f532b6ffbac"
+regex-not@^1.0.0, regex-not@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
+ dependencies:
+ extend-shallow "^3.0.2"
+ safe-regex "^1.1.0"
regexpp@^1.0.1:
version "1.1.0"
@@ -6478,7 +7200,7 @@ repeat-element@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
-repeat-string@^1.5.2:
+repeat-string@^1.5.2, repeat-string@^1.6.1:
version "1.6.1"
resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
@@ -6488,34 +7210,7 @@ repeating@^2.0.0:
dependencies:
is-finite "^1.0.0"
-request@2, request@^2.79.0:
- version "2.83.0"
- resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356"
- dependencies:
- aws-sign2 "~0.7.0"
- aws4 "^1.6.0"
- caseless "~0.12.0"
- combined-stream "~1.0.5"
- extend "~3.0.1"
- forever-agent "~0.6.1"
- form-data "~2.3.1"
- har-validator "~5.0.3"
- hawk "~6.0.2"
- http-signature "~1.2.0"
- is-typedarray "~1.0.0"
- isstream "~0.1.2"
- json-stringify-safe "~5.0.1"
- mime-types "~2.1.17"
- oauth-sign "~0.8.2"
- performance-now "^2.1.0"
- qs "~6.5.1"
- safe-buffer "^5.1.1"
- stringstream "~0.0.5"
- tough-cookie "~2.3.3"
- tunnel-agent "^0.6.0"
- uuid "^3.1.0"
-
-request@2.81.0:
+request@2.81.0, "request@>=2.9.0 <2.82.0":
version "2.81.0"
resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0"
dependencies:
@@ -6542,30 +7237,30 @@ request@2.81.0:
tunnel-agent "^0.6.0"
uuid "^3.0.0"
-request@~2.79.0:
- version "2.79.0"
- resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de"
+request@2.87.0, request@^2.79.0:
+ version "2.87.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.87.0.tgz#32f00235cd08d482b4d0d68db93a829c0ed5756e"
dependencies:
- aws-sign2 "~0.6.0"
- aws4 "^1.2.1"
- caseless "~0.11.0"
+ aws-sign2 "~0.7.0"
+ aws4 "^1.6.0"
+ caseless "~0.12.0"
combined-stream "~1.0.5"
- extend "~3.0.0"
+ extend "~3.0.1"
forever-agent "~0.6.1"
- form-data "~2.1.1"
- har-validator "~2.0.6"
- hawk "~3.1.3"
- http-signature "~1.1.0"
+ form-data "~2.3.1"
+ har-validator "~5.0.3"
+ http-signature "~1.2.0"
is-typedarray "~1.0.0"
isstream "~0.1.2"
json-stringify-safe "~5.0.1"
- mime-types "~2.1.7"
- oauth-sign "~0.8.1"
- qs "~6.3.0"
- stringstream "~0.0.4"
- tough-cookie "~2.3.0"
- tunnel-agent "~0.4.1"
- uuid "^3.0.0"
+ mime-types "~2.1.17"
+ oauth-sign "~0.8.2"
+ performance-now "^2.1.0"
+ qs "~6.5.1"
+ safe-buffer "^5.1.1"
+ tough-cookie "~2.3.3"
+ tunnel-agent "^0.6.0"
+ uuid "^3.1.0"
requestidlecallback@^0.3.0:
version "0.3.0"
@@ -6575,13 +7270,9 @@ require-directory@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
-require-from-string@^1.1.0:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418"
-
require-from-string@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.1.tgz#c545233e9d7da6616e9d59adfb39fc9f588676ff"
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
require-main-filename@^1.0.1:
version "1.0.1"
@@ -6598,7 +7289,7 @@ require-uncached@^1.0.3:
caller-path "^0.1.0"
resolve-from "^1.0.0"
-requires-port@1.0.x, requires-port@1.x.x, requires-port@~1.0.0:
+requires-port@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
@@ -6624,21 +7315,7 @@ resolve-pathname@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-2.2.0.tgz#7e9ae21ed815fd63ab189adeee64dc831eefa879"
-resolve-url-loader@^2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-2.2.0.tgz#9662feaa11debf7cf8e3feb91dae9544aa7dee88"
- dependencies:
- adjust-sourcemap-loader "^1.1.0"
- camelcase "^4.0.0"
- convert-source-map "^1.1.1"
- loader-utils "^1.0.0"
- lodash.defaults "^4.0.0"
- rework "^1.0.1"
- rework-visit "^1.0.0"
- source-map "^0.5.6"
- urix "^0.1.0"
-
-resolve-url@~0.2.1:
+resolve-url@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
@@ -6646,9 +7323,9 @@ resolve@1.1.7:
version "1.1.7"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
-resolve@^1.1.7, resolve@^1.3.3, resolve@^1.5.0:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36"
+resolve@^1.5.0, resolve@^1.6.0:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26"
dependencies:
path-parse "^1.0.5"
@@ -6663,38 +7340,23 @@ ret@~0.1.10:
version "0.1.15"
resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
-rework-visit@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/rework-visit/-/rework-visit-1.0.0.tgz#9945b2803f219e2f7aca00adb8bc9f640f842c9a"
-
-rework@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/rework/-/rework-1.0.1.tgz#30806a841342b54510aa4110850cd48534144aa7"
- dependencies:
- convert-source-map "^0.3.3"
- css "^2.0.0"
-
-rgb@~0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/rgb/-/rgb-0.1.0.tgz#be27b291e8feffeac1bd99729721bfa40fc037b5"
-
right-align@^0.1.1:
version "0.1.3"
resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
dependencies:
align-text "^0.1.1"
-rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.6.1:
+rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2:
version "2.6.2"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
dependencies:
glob "^7.0.5"
ripemd160@^2.0.0, ripemd160@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7"
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
dependencies:
- hash-base "^2.0.0"
+ hash-base "^3.0.0"
inherits "^2.0.1"
rst-selector-parser@^2.2.3:
@@ -6704,12 +7366,22 @@ rst-selector-parser@^2.2.3:
lodash.flattendeep "^4.4.0"
nearley "^2.7.10"
+rsvp@^3.3.3:
+ version "3.6.2"
+ resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a"
+
run-async@^2.2.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"
dependencies:
is-promise "^2.1.0"
+run-queue@^1.0.0, run-queue@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47"
+ dependencies:
+ aproba "^1.1.1"
+
rx-lite-aggregates@^4.0.8:
version "4.0.8"
resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be"
@@ -6720,23 +7392,44 @@ rx-lite@*, rx-lite@^4.0.8:
version "4.0.8"
resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444"
-safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+rxjs@^6.1.0:
+ version "6.2.2"
+ resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.2.2.tgz#eb75fa3c186ff5289907d06483a77884586e1cf9"
+ dependencies:
+ tslib "^1.9.0"
+
+safe-buffer@5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
-sane@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/sane/-/sane-2.2.0.tgz#d6d2e2fcab00e3d283c93b912b7c3a20846f1d56"
+safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+
+safe-regex@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
dependencies:
- anymatch "^1.3.0"
+ ret "~0.1.10"
+
+"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+
+sane@^2.0.0:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/sane/-/sane-2.5.2.tgz#b4dc1861c21b427e929507a3e751e2a2cb8ab3fa"
+ dependencies:
+ anymatch "^2.0.0"
+ capture-exit "^1.2.0"
exec-sh "^0.2.0"
fb-watchman "^2.0.0"
- minimatch "^3.0.2"
+ micromatch "^3.1.4"
minimist "^1.1.1"
walker "~1.0.5"
watch "~0.18.0"
optionalDependencies:
- fsevents "^1.1.1"
+ fsevents "^1.2.3"
sass-graph@^2.2.4:
version "2.2.4"
@@ -6747,29 +7440,30 @@ sass-graph@^2.2.4:
scss-tokenizer "^0.2.3"
yargs "^7.0.0"
-sass-loader@^6.0.6:
- version "6.0.6"
- resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-6.0.6.tgz#e9d5e6c1f155faa32a4b26d7a9b7107c225e40f9"
+sass-loader@^7.0.3:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-7.0.3.tgz#6ca10871a1cc7549f8143db5a9958242c4e4ca2a"
dependencies:
- async "^2.1.5"
- clone-deep "^0.3.0"
+ clone-deep "^2.0.1"
loader-utils "^1.0.1"
lodash.tail "^4.1.1"
+ neo-async "^2.5.0"
pify "^3.0.0"
-sax@^1.2.1, sax@~1.2.1:
+sax@^1.2.1, sax@^1.2.4, sax@~1.2.1:
version "1.2.4"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
-schema-utils@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.3.0.tgz#f5877222ce3e931edae039f17eb3716e7137f8cf"
+schema-utils@^0.4.0, schema-utils@^0.4.4, schema-utils@^0.4.5:
+ version "0.4.5"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.5.tgz#21836f0608aac17b78f9e3e24daff14a5ca13a3e"
dependencies:
- ajv "^5.0.0"
+ ajv "^6.1.0"
+ ajv-keywords "^3.1.0"
scroll-behavior@^0.9.1:
- version "0.9.5"
- resolved "https://registry.yarnpkg.com/scroll-behavior/-/scroll-behavior-0.9.5.tgz#41da30b559da004eb48450f6cff6068c7696ff23"
+ version "0.9.9"
+ resolved "https://registry.yarnpkg.com/scroll-behavior/-/scroll-behavior-0.9.9.tgz#ebfe0658455b82ad885b66195215416674dacce2"
dependencies:
dom-helpers "^3.2.1"
invariant "^2.2.2"
@@ -6781,23 +7475,19 @@ scss-tokenizer@^0.2.3:
js-base64 "^2.1.8"
source-map "^0.4.2"
-seed-random@2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/seed-random/-/seed-random-2.2.0.tgz#2a9b19e250a817099231a5b99a4daf80b7fbed54"
-
select-hose@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
selfsigned@^1.9.1:
- version "1.10.1"
- resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.1.tgz#bf8cb7b83256c4551e31347c6311778db99eec52"
+ version "1.10.3"
+ resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.3.tgz#d628ecf9e3735f84e8bafba936b3cf85bea43823"
dependencies:
- node-forge "0.6.33"
+ node-forge "0.7.5"
-"semver@2 || 3 || 4 || 5", semver@^5.3.0:
- version "5.4.1"
- resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e"
+"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
semver@4.3.2:
version "4.3.2"
@@ -6807,14 +7497,14 @@ semver@~5.3.0:
version "5.3.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
-send@0.16.1:
- version "0.16.1"
- resolved "https://registry.yarnpkg.com/send/-/send-0.16.1.tgz#a70e1ca21d1382c11d0d9f6231deb281080d7ab3"
+send@0.16.2:
+ version "0.16.2"
+ resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1"
dependencies:
debug "2.6.9"
- depd "~1.1.1"
+ depd "~1.1.2"
destroy "~1.0.4"
- encodeurl "~1.0.1"
+ encodeurl "~1.0.2"
escape-html "~1.0.3"
etag "~1.8.1"
fresh "0.5.2"
@@ -6823,7 +7513,11 @@ send@0.16.1:
ms "2.0.0"
on-finished "~2.3.0"
range-parser "~1.2.0"
- statuses "~1.3.1"
+ statuses "~1.4.0"
+
+serialize-javascript@^1.4.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.5.0.tgz#1aa336162c88a890ddad5384baebc93a655161fe"
serve-index@^1.7.2:
version "1.9.1"
@@ -6837,14 +7531,14 @@ serve-index@^1.7.2:
mime-types "~2.1.17"
parseurl "~1.3.2"
-serve-static@1.13.1:
- version "1.13.1"
- resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.1.tgz#4c57d53404a761d8f2e7c1e8a18a47dbf278a719"
+serve-static@1.13.2:
+ version "1.13.2"
+ resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1"
dependencies:
- encodeurl "~1.0.1"
+ encodeurl "~1.0.2"
escape-html "~1.0.3"
parseurl "~1.3.2"
- send "0.16.1"
+ send "0.16.2"
set-blocking@^2.0.0, set-blocking@~2.0.0:
version "2.0.0"
@@ -6854,6 +7548,24 @@ set-immediate-shim@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
+set-value@^0.4.3:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1"
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.1"
+ to-object-path "^0.3.0"
+
+set-value@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274"
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.3"
+ split-string "^3.0.1"
+
setimmediate@^1.0.4, setimmediate@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
@@ -6867,19 +7579,18 @@ setprototypeof@1.1.0:
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
sha.js@^2.4.0, sha.js@^2.4.8:
- version "2.4.9"
- resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.9.tgz#98f64880474b74f4a38b8da9d3c0f2d104633e7d"
+ version "2.4.11"
+ resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
dependencies:
inherits "^2.0.1"
safe-buffer "^5.0.1"
-shallow-clone@^0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-0.1.2.tgz#5909e874ba77106d73ac414cfec1ffca87d97060"
+shallow-clone@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-1.0.0.tgz#4480cd06e882ef68b2ad88a3ea54832e2c48b571"
dependencies:
is-extendable "^0.1.1"
- kind-of "^2.0.1"
- lazy-cache "^0.2.3"
+ kind-of "^5.0.0"
mixin-object "^2.0.1"
shebang-command@^1.2.0:
@@ -6901,7 +7612,7 @@ shell-quote@^1.6.1:
array-reduce "~0.0.0"
jsonify "~0.0.0"
-shellwords@^0.1.0:
+shellwords@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b"
@@ -6909,6 +7620,12 @@ signal-exit@^3.0.0, signal-exit@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
+simple-swizzle@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
+ dependencies:
+ is-arrayish "^0.3.1"
+
slash@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
@@ -6919,18 +7636,39 @@ slice-ansi@1.0.0:
dependencies:
is-fullwidth-code-point "^2.0.0"
+snapdragon-node@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
+ dependencies:
+ define-property "^1.0.0"
+ isobject "^3.0.0"
+ snapdragon-util "^3.0.1"
+
+snapdragon-util@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
+ dependencies:
+ kind-of "^3.2.0"
+
+snapdragon@^0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
+ dependencies:
+ base "^0.11.1"
+ debug "^2.2.0"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ map-cache "^0.2.2"
+ source-map "^0.5.6"
+ source-map-resolve "^0.5.0"
+ use "^3.1.0"
+
sntp@1.x.x:
version "1.0.9"
resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
dependencies:
hoek "2.x.x"
-sntp@2.x.x:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8"
- dependencies:
- hoek "4.x.x"
-
sockjs-client@1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.4.tgz#5babe386b775e4cf14e7520911452654016c8b12"
@@ -6942,12 +7680,12 @@ sockjs-client@1.1.4:
json3 "^3.3.2"
url-parse "^1.1.8"
-sockjs@0.3.18:
- version "0.3.18"
- resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.18.tgz#d9b289316ca7df77595ef299e075f0f937eb4207"
+sockjs@0.3.19:
+ version "0.3.19"
+ resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d"
dependencies:
faye-websocket "^0.10.0"
- uuid "^2.0.2"
+ uuid "^3.0.1"
sort-keys@^1.0.0:
version "1.1.2"
@@ -6959,14 +7697,15 @@ source-list-map@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085"
-source-map-resolve@^0.3.0:
- version "0.3.1"
- resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.3.1.tgz#610f6122a445b8dd51535a2a71b783dfc1248761"
+source-map-resolve@^0.5.0:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259"
dependencies:
- atob "~1.1.0"
- resolve-url "~0.2.1"
- source-map-url "~0.3.0"
- urix "~0.1.0"
+ atob "^2.1.1"
+ decode-uri-component "^0.2.0"
+ resolve-url "^0.2.1"
+ source-map-url "^0.4.0"
+ urix "^0.1.0"
source-map-support@^0.4.15:
version "0.4.18"
@@ -6974,15 +7713,9 @@ source-map-support@^0.4.15:
dependencies:
source-map "^0.5.6"
-source-map-url@~0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.3.0.tgz#7ecaf13b57bcd09da8a40c5d269db33799d4aaf9"
-
-source-map@^0.1.38:
- version "0.1.43"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346"
- dependencies:
- amdefine ">=0.0.4"
+source-map-url@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
source-map@^0.4.2, source-map@^0.4.4:
version "0.4.4"
@@ -6990,7 +7723,7 @@ source-map@^0.4.2, source-map@^0.4.4:
dependencies:
amdefine ">=0.0.4"
-source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.6:
+source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1:
version "0.5.7"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
@@ -6998,23 +7731,31 @@ source-map@^0.6.1, source-map@~0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
-spdx-correct@~1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40"
+spdx-correct@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82"
dependencies:
- spdx-license-ids "^1.0.2"
+ spdx-expression-parse "^3.0.0"
+ spdx-license-ids "^3.0.0"
-spdx-expression-parse@~1.0.0:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c"
+spdx-exceptions@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9"
-spdx-license-ids@^1.0.2:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57"
+spdx-expression-parse@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0"
+ dependencies:
+ spdx-exceptions "^2.1.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-license-ids@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87"
spdy-transport@^2.0.18:
- version "2.0.20"
- resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-2.0.20.tgz#735e72054c486b2354fe89e702256004a39ace4d"
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-2.1.0.tgz#4bbb15aaffed0beefdd56ad61dbdc8ba3e2cb7a1"
dependencies:
debug "^2.6.8"
detect-node "^2.0.3"
@@ -7035,6 +7776,12 @@ spdy@^3.4.1:
select-hose "^2.0.0"
spdy-transport "^2.0.18"
+split-string@^3.0.1, split-string@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
+ dependencies:
+ extend-shallow "^3.0.0"
+
split@0.3:
version "0.3.3"
resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f"
@@ -7052,27 +7799,41 @@ sprintf-js@~1.0.2:
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
sshpk@^1.7.0:
- version "1.13.1"
- resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3"
+ version "1.14.2"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.2.tgz#c6fc61648a3d9c4e764fd3fcdf4ea105e492ba98"
dependencies:
asn1 "~0.2.3"
assert-plus "^1.0.0"
dashdash "^1.12.0"
getpass "^0.1.1"
+ safer-buffer "^2.0.2"
optionalDependencies:
bcrypt-pbkdf "^1.0.0"
ecc-jsbn "~0.1.1"
jsbn "~0.1.0"
tweetnacl "~0.14.0"
-"statuses@>= 1.3.1 < 2":
+ssri@^5.2.4:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.3.0.tgz#ba3872c9c6d33a0704a7d71ff045e5ec48999d06"
+ dependencies:
+ safe-buffer "^5.1.1"
+
+static-extend@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
+ dependencies:
+ define-property "^0.2.5"
+ object-copy "^0.1.0"
+
+"statuses@>= 1.3.1 < 2", "statuses@>= 1.4.0 < 2":
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
+
+statuses@~1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087"
-statuses@~1.3.1:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e"
-
stdout-stream@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.0.tgz#a2c7c8587e54d9427ea9edb3ac3f2cd522df378b"
@@ -7092,16 +7853,27 @@ stream-combiner@~0.0.4:
dependencies:
duplexer "~0.1.1"
+stream-each@^1.1.0:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.2.tgz#8e8c463f91da8991778765873fe4d960d8f616bd"
+ dependencies:
+ end-of-stream "^1.1.0"
+ stream-shift "^1.0.0"
+
stream-http@^2.7.2:
- version "2.7.2"
- resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.2.tgz#40a050ec8dc3b53b33d9909415c02c0bf1abfbad"
+ version "2.8.3"
+ resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc"
dependencies:
builtin-status-codes "^3.0.0"
inherits "^2.0.1"
- readable-stream "^2.2.6"
+ readable-stream "^2.3.6"
to-arraybuffer "^1.0.0"
xtend "^4.0.0"
+stream-shift@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952"
+
strict-uri-encode@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
@@ -7121,7 +7893,7 @@ string-width@^1.0.1, string-width@^1.0.2:
is-fullwidth-code-point "^1.0.0"
strip-ansi "^3.0.0"
-string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1:
+"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
dependencies:
@@ -7136,15 +7908,15 @@ string.prototype.padend@^3.0.0:
es-abstract "^1.4.3"
function-bind "^1.0.2"
-string_decoder@^1.0.0, string_decoder@~1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab"
+string_decoder@^1.0.0, string_decoder@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
dependencies:
safe-buffer "~5.1.0"
-stringstream@~0.0.4, stringstream@~0.0.5:
- version "0.0.5"
- resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
+stringstream@~0.0.4:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.6.tgz#7880225b0d4ad10e30927d167a1d6f2fd3b33a72"
stringz@^0.3.0:
version "0.3.0"
@@ -7186,18 +7958,18 @@ strip-json-comments@~2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
-style-loader@^0.19.0:
- version "0.19.0"
- resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.19.0.tgz#7258e788f0fee6a42d710eaf7d6c2412a4c50759"
+style-loader@^0.21.0:
+ version "0.21.0"
+ resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.21.0.tgz#68c52e5eb2afc9ca92b6274be277ee59aea3a852"
dependencies:
- loader-utils "^1.0.2"
- schema-utils "^0.3.0"
+ loader-utils "^1.1.0"
+ schema-utils "^0.4.5"
substring-trie@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/substring-trie/-/substring-trie-1.0.2.tgz#7b42592391628b4f2cb17365c6cce4257c7b7af5"
-sugarss@^1.0.0:
+sugarss@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-1.0.1.tgz#be826d9003e0f247735f92365dc3fd7f1bae9e44"
dependencies:
@@ -7213,11 +7985,11 @@ supports-color@^3.1.2, supports-color@^3.2.3:
dependencies:
has-flag "^1.0.0"
-supports-color@^4.0.0, supports-color@^4.2.1, supports-color@^4.4.0:
- version "4.5.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b"
+supports-color@^5.1.0, supports-color@^5.3.0, supports-color@^5.4.0:
+ version "5.4.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54"
dependencies:
- has-flag "^2.0.0"
+ has-flag "^3.0.0"
svgo@^0.7.0:
version "0.7.2"
@@ -7232,8 +8004,8 @@ svgo@^0.7.0:
whet.extend "~0.9.9"
symbol-observable@^1.0.3:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.1.0.tgz#5c68fd8d54115d9dfb72a84720549222e8db9b32"
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
symbol-tree@^3.2.1:
version "3.2.2"
@@ -7250,9 +8022,9 @@ table@4.0.2:
slice-ansi "1.0.0"
string-width "^2.1.1"
-tapable@^0.2.7:
- version "0.2.8"
- resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22"
+tapable@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.0.0.tgz#cbb639d9002eed9c6b5975eb20598d7936f1f9f2"
tar-pack@^3.4.0:
version "3.4.1"
@@ -7275,21 +8047,37 @@ tar@^2.0.0, tar@^2.2.1:
fstream "^1.0.2"
inherits "2"
-tcomb@^2.5.0, tcomb@^2.5.1:
+tar@^4:
+ version "4.4.4"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.4.tgz#ec8409fae9f665a4355cc3b4087d0820232bb8cd"
+ dependencies:
+ chownr "^1.0.1"
+ fs-minipass "^1.2.5"
+ minipass "^2.3.3"
+ minizlib "^1.1.0"
+ mkdirp "^0.5.0"
+ safe-buffer "^5.1.2"
+ yallist "^3.0.2"
+
+tcomb@^2.5.0:
version "2.7.0"
resolved "https://registry.yarnpkg.com/tcomb/-/tcomb-2.7.0.tgz#10d62958041669a5d53567b9a4ee8cde22b1c2b0"
-test-exclude@^4.1.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.1.tgz#4d84964b0966b0087ecc334a2ce002d3d9341e26"
+tcomb@^3.2.21:
+ version "3.2.27"
+ resolved "https://registry.yarnpkg.com/tcomb/-/tcomb-3.2.27.tgz#f4928bfc536b959d21a47e5f5f1ca2b2e4b7188a"
+
+test-exclude@^4.2.1:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.1.tgz#dfa222f03480bca69207ca728b37d74b45f724fa"
dependencies:
arrify "^1.0.1"
- micromatch "^2.3.11"
+ micromatch "^3.1.8"
object-assign "^4.1.0"
read-pkg-up "^1.0.1"
require-main-filename "^1.0.1"
-text-table@~0.2.0:
+text-table@^0.2.0, text-table@~0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
@@ -7303,28 +8091,27 @@ throng@^4.0.0:
dependencies:
lodash.defaults "^4.0.1"
+through2@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be"
+ dependencies:
+ readable-stream "^2.1.5"
+ xtend "~4.0.1"
+
through@2, through@^2.3.6, through@~2.3, through@~2.3.1:
version "2.3.8"
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
-thunky@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/thunky/-/thunky-0.1.0.tgz#bf30146824e2b6e67b0f2d7a4ac8beb26908684e"
-
-time-stamp@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-2.0.0.tgz#95c6a44530e15ba8d6f4a3ecb8c3a3fac46da357"
+thunky@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.0.2.tgz#a862e018e3fb1ea2ec3fce5d55605cf57f247371"
timers-browserify@^2.0.4:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.4.tgz#96ca53f4b794a5e7c0e1bd7cc88a372298fa01e6"
+ version "2.0.10"
+ resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.10.tgz#1d28e3d2aadf1d5a5996c4e9f95601cd053480ae"
dependencies:
setimmediate "^1.0.4"
-tiny-emitter@2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.0.0.tgz#bad327adb1804b42a231afa741532bd884cd09ad"
-
tiny-queue@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/tiny-queue/-/tiny-queue-0.2.1.tgz#25a67f2c6e253b2ca941977b5ef7442ef97a6046"
@@ -7351,9 +8138,38 @@ to-fast-properties@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
-tough-cookie@^2.3.2, tough-cookie@~2.3.0, tough-cookie@~2.3.3:
- version "2.3.3"
- resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561"
+to-object-path@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
+ dependencies:
+ kind-of "^3.0.2"
+
+to-regex-range@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
+ dependencies:
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+
+to-regex@^3.0.1, to-regex@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
+ dependencies:
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ regex-not "^1.0.2"
+ safe-regex "^1.1.0"
+
+tough-cookie@^2.3.2:
+ version "2.4.3"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781"
+ dependencies:
+ psl "^1.1.24"
+ punycode "^1.4.1"
+
+tough-cookie@~2.3.0, tough-cookie@~2.3.3:
+ version "2.3.4"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655"
dependencies:
punycode "^1.4.1"
@@ -7381,6 +8197,14 @@ trim-right@^1.0.1:
dependencies:
glob "^6.0.4"
+tryer@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8"
+
+tslib@^1.9.0:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
+
tty-browserify@0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
@@ -7391,10 +8215,6 @@ tunnel-agent@^0.6.0:
dependencies:
safe-buffer "^5.0.1"
-tunnel-agent@~0.4.1:
- version "0.4.3"
- resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb"
-
tweetnacl@^0.14.3, tweetnacl@~0.14.0:
version "0.14.5"
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
@@ -7405,26 +8225,29 @@ type-check@~0.3.2:
dependencies:
prelude-ls "~1.1.2"
-type-is@~1.6.15:
- version "1.6.15"
- resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410"
+type-is@~1.6.15, type-is@~1.6.16:
+ version "1.6.16"
+ resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194"
dependencies:
media-typer "0.3.0"
- mime-types "~2.1.15"
-
-typed-function@0.10.6:
- version "0.10.6"
- resolved "https://registry.yarnpkg.com/typed-function/-/typed-function-0.10.6.tgz#314aa0ea72bd586de5920095559683e20b01688b"
+ mime-types "~2.1.18"
typedarray@^0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
-ua-parser-js@^0.7.9:
- version "0.7.17"
- resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac"
+ua-parser-js@^0.7.18:
+ version "0.7.18"
+ resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.18.tgz#a7bfd92f56edfb117083b69e31d2aa8882d4b1ed"
-uglify-js@^2.6, uglify-js@^2.8.29:
+uglify-es@^3.3.4:
+ version "3.3.9"
+ resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677"
+ dependencies:
+ commander "~2.13.0"
+ source-map "~0.6.1"
+
+uglify-js@^2.6:
version "2.8.29"
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd"
dependencies:
@@ -7437,65 +8260,95 @@ uglify-to-browserify@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
-uglifyjs-webpack-plugin@^0.4.6:
- version "0.4.6"
- resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz#b951f4abb6bd617e66f63eb891498e391763e309"
+uglifyjs-webpack-plugin@^1.2.4, uglifyjs-webpack-plugin@^1.2.7:
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.7.tgz#57638dd99c853a1ebfe9d97b42160a8a507f9d00"
dependencies:
- source-map "^0.5.6"
- uglify-js "^2.8.29"
- webpack-sources "^1.0.1"
+ cacache "^10.0.4"
+ find-cache-dir "^1.0.0"
+ schema-utils "^0.4.5"
+ serialize-javascript "^1.4.0"
+ source-map "^0.6.1"
+ uglify-es "^3.3.4"
+ webpack-sources "^1.1.0"
+ worker-farm "^1.5.2"
uid-number@^0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
-ultron@~1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c"
-
underscore@~1.4.4:
version "1.4.4"
resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.4.4.tgz#61a6a32010622afa07963bf325203cf12239d604"
+union-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4"
+ dependencies:
+ arr-union "^3.1.0"
+ get-value "^2.0.6"
+ is-extendable "^0.1.1"
+ set-value "^0.4.3"
+
uniq@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
-uniqid@^4.0.0:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.1.tgz#89220ddf6b751ae52b5f72484863528596bb84c1"
- dependencies:
- macaddress "^0.2.8"
-
uniqs@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02"
+unique-filename@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.0.tgz#d05f2fe4032560871f30e93cbe735eea201514f3"
+ dependencies:
+ unique-slug "^2.0.0"
+
+unique-slug@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.0.tgz#db6676e7c7cc0629878ff196097c78855ae9f4ab"
+ dependencies:
+ imurmurhash "^0.1.4"
+
unpipe@1.0.0, unpipe@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
unquote@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.0.tgz#98e1fc608b6b854c75afb1b95afc099ba69d942f"
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544"
-urix@^0.1.0, urix@~0.1.0:
+unset-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
+ dependencies:
+ has-value "^0.3.1"
+ isobject "^3.0.0"
+
+upath@^1.0.5:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd"
+
+uri-js@^4.2.1:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
+ dependencies:
+ punycode "^2.1.0"
+
+urix@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
-url-parse@1.0.x:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.0.5.tgz#0854860422afdcfefeb6c965c662d4800169927b"
- dependencies:
- querystringify "0.0.x"
- requires-port "1.0.x"
+url-join@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.0.tgz#4d3340e807d3773bda9991f8305acdcc2a665d2a"
-url-parse@^1.1.8:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.2.0.tgz#3a19e8aaa6d023ddd27dcc44cb4fc8f7fec23986"
+url-parse@^1.1.8, url-parse@~1.4.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.1.tgz#4dec9dad3dc8585f862fed461d2e19bbf623df30"
dependencies:
- querystringify "~1.0.0"
- requires-port "~1.0.0"
+ querystringify "^2.0.0"
+ requires-port "^1.0.0"
url@^0.11.0:
version "0.11.0"
@@ -7504,38 +8357,48 @@ url@^0.11.0:
punycode "1.3.2"
querystring "0.2.0"
+use@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
+
util-deprecate@~1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
-util@0.10.3, util@^0.10.3:
+util@0.10.3:
version "0.10.3"
resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
dependencies:
inherits "2.0.1"
+util@^0.10.3:
+ version "0.10.4"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901"
+ dependencies:
+ inherits "2.0.3"
+
utils-merge@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
-uuid@^2.0.2:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a"
+uuid@^3.0.0, uuid@^3.0.1, uuid@^3.1.0:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"
-uuid@^3.0.0, uuid@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04"
+uws@^10.148.1:
+ version "10.148.1"
+ resolved "https://registry.yarnpkg.com/uws/-/uws-10.148.1.tgz#fd1a79cf6118a388e0a1bed8a1397030d2c4fd2c"
-uws@^10.148.0:
- version "10.148.0"
- resolved "https://registry.yarnpkg.com/uws/-/uws-10.148.0.tgz#3fcd35f083ca515e091cd33b2d78f0f51a666215"
+v8-compile-cache@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.0.tgz#526492e35fc616864284700b7043e01baee09f0a"
validate-npm-package-license@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc"
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz#81643bcbef1bdfecd4623793dc4648948ba98338"
dependencies:
- spdx-correct "~1.0.0"
- spdx-expression-parse "~1.0.0"
+ spdx-correct "^3.0.0"
+ spdx-expression-parse "^3.0.0"
value-equal@^0.4.0:
version "0.4.0"
@@ -7546,8 +8409,8 @@ vary@~1.1.2:
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
vendors@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22"
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.2.tgz#7fcb5eef9f5623b156bcea89ec37d63676f21801"
verror@1.10.0:
version "1.10.0"
@@ -7575,6 +8438,12 @@ warning@^3.0.0:
dependencies:
loose-envify "^1.0.0"
+warning@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.1.tgz#66ce376b7fbfe8a887c22bdf0e7349d73d397745"
+ dependencies:
+ loose-envify "^1.0.0"
+
watch@~0.18.0:
version "0.18.0"
resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986"
@@ -7582,17 +8451,17 @@ watch@~0.18.0:
exec-sh "^0.2.0"
minimist "^1.2.0"
-watchpack@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.4.0.tgz#4a1472bcbb952bd0a9bb4036801f954dfb39faac"
+watchpack@^1.5.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00"
dependencies:
- async "^2.1.2"
- chokidar "^1.7.0"
+ chokidar "^2.0.2"
graceful-fs "^4.1.2"
+ neo-async "^2.5.0"
wbuf@^1.1.0, wbuf@^1.7.2:
- version "1.7.2"
- resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.2.tgz#d697b99f1f59512df2751be42769c1580b5801fe"
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df"
dependencies:
minimalistic-assert "^1.0.0"
@@ -7604,48 +8473,67 @@ webidl-conversions@^4.0.0, webidl-conversions@^4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
-webpack-bundle-analyzer@^2.9.1:
- version "2.9.1"
- resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.9.1.tgz#c2c8e03e8e5768ed288b39ae9e27a8b8d7b9d476"
+webpack-bundle-analyzer@^2.13.1:
+ version "2.13.1"
+ resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.13.1.tgz#07d2176c6e86c3cdce4c23e56fae2a7b6b4ad526"
dependencies:
- acorn "^5.1.1"
- chalk "^1.1.3"
- commander "^2.9.0"
- ejs "^2.5.6"
- express "^4.15.2"
- filesize "^3.5.9"
- gzip-size "^3.0.0"
+ acorn "^5.3.0"
+ bfj-node4 "^5.2.0"
+ chalk "^2.3.0"
+ commander "^2.13.0"
+ ejs "^2.5.7"
+ express "^4.16.2"
+ filesize "^3.5.11"
+ gzip-size "^4.1.0"
lodash "^4.17.4"
mkdirp "^0.5.1"
opener "^1.4.3"
- ws "^3.3.1"
+ ws "^4.0.0"
-webpack-dev-middleware@^1.11.0:
- version "1.12.2"
- resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz#f8fc1120ce3b4fc5680ceecb43d777966b21105e"
+webpack-cli@^3.0.8:
+ version "3.0.8"
+ resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.0.8.tgz#90eddcf04a4bfc31aa8c0edc4c76785bc4f1ccd9"
dependencies:
+ chalk "^2.4.1"
+ cross-spawn "^6.0.5"
+ enhanced-resolve "^4.0.0"
+ global-modules-path "^2.1.0"
+ import-local "^1.0.0"
+ inquirer "^6.0.0"
+ interpret "^1.1.0"
+ loader-utils "^1.1.0"
+ supports-color "^5.4.0"
+ v8-compile-cache "^2.0.0"
+ yargs "^11.1.0"
+
+webpack-dev-middleware@3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.1.3.tgz#8b32aa43da9ae79368c1bf1183f2b6cf5e1f39ed"
+ dependencies:
+ loud-rejection "^1.6.0"
memory-fs "~0.4.1"
- mime "^1.5.0"
+ mime "^2.1.0"
path-is-absolute "^1.0.0"
range-parser "^1.0.3"
- time-stamp "^2.0.0"
+ url-join "^4.0.0"
+ webpack-log "^1.0.1"
-webpack-dev-server@^2.9.5:
- version "2.9.5"
- resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.9.5.tgz#79336fba0087a66ae491f4869f6545775b18daa8"
+webpack-dev-server@^3.1.4:
+ version "3.1.4"
+ resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.1.4.tgz#9a08d13c4addd1e3b6d8ace116e86715094ad5b4"
dependencies:
ansi-html "0.0.7"
array-includes "^3.0.3"
bonjour "^3.5.0"
- chokidar "^1.6.0"
+ chokidar "^2.0.0"
compression "^1.5.2"
connect-history-api-fallback "^1.3.0"
debug "^3.1.0"
del "^3.0.0"
express "^4.16.2"
html-entities "^1.2.0"
- http-proxy-middleware "~0.17.4"
- import-local "^0.1.1"
+ http-proxy-middleware "~0.18.0"
+ import-local "^1.0.0"
internal-ip "1.2.0"
ip "^1.1.5"
killable "^1.0.0"
@@ -7654,60 +8542,74 @@ webpack-dev-server@^2.9.5:
portfinder "^1.0.9"
selfsigned "^1.9.1"
serve-index "^1.7.2"
- sockjs "0.3.18"
+ sockjs "0.3.19"
sockjs-client "1.1.4"
spdy "^3.4.1"
- strip-ansi "^3.0.1"
- supports-color "^4.2.1"
- webpack-dev-middleware "^1.11.0"
- yargs "^6.6.0"
+ strip-ansi "^3.0.0"
+ supports-color "^5.1.0"
+ webpack-dev-middleware "3.1.3"
+ webpack-log "^1.1.2"
+ yargs "11.0.0"
-webpack-manifest-plugin@^1.2.1:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/webpack-manifest-plugin/-/webpack-manifest-plugin-1.3.2.tgz#5ea8ee5756359ddc1d98814324fe43496349a7d4"
+webpack-log@^1.0.1, webpack-log@^1.1.2:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-1.2.0.tgz#a4b34cda6b22b518dbb0ab32e567962d5c72a43d"
+ dependencies:
+ chalk "^2.1.0"
+ log-symbols "^2.1.0"
+ loglevelnext "^1.0.1"
+ uuid "^3.1.0"
+
+webpack-manifest-plugin@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/webpack-manifest-plugin/-/webpack-manifest-plugin-2.0.3.tgz#b42c5b08a0319cedb3ec45d9375a9ecee0acf5eb"
dependencies:
fs-extra "^0.30.0"
lodash ">=3.5 <5"
+ tapable "^1.0.0"
-webpack-merge@^4.1.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.1.1.tgz#f1197a0a973e69c6fbeeb6d658219aa8c0c13555"
+webpack-merge@^4.1.3:
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.1.3.tgz#8aaff2108a19c29849bc9ad2a7fd7fce68e87c4a"
dependencies:
- lodash "^4.17.4"
+ lodash "^4.17.5"
-webpack-sources@^1.0.1:
+webpack-sources@^1.0.1, webpack-sources@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz#a101ebae59d6507354d71d8013950a3a8b7a5a54"
dependencies:
source-list-map "^2.0.0"
source-map "~0.6.1"
-webpack@^3.9.1:
- version "3.9.1"
- resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.9.1.tgz#9a60aa544ed5d4d454c069e3f521aa007e02643c"
+webpack@^4.16.0:
+ version "4.16.0"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.16.0.tgz#660dae90890e55b8ed17c6f9d17bebb01dab5b4c"
dependencies:
- acorn "^5.0.0"
- acorn-dynamic-import "^2.0.0"
- ajv "^5.1.5"
- ajv-keywords "^2.0.0"
- async "^2.1.2"
- enhanced-resolve "^3.4.0"
- escope "^3.6.0"
- interpret "^1.0.0"
- json-loader "^0.5.4"
- json5 "^0.5.1"
+ "@webassemblyjs/ast" "1.5.13"
+ "@webassemblyjs/helper-module-context" "1.5.13"
+ "@webassemblyjs/wasm-edit" "1.5.13"
+ "@webassemblyjs/wasm-opt" "1.5.13"
+ "@webassemblyjs/wasm-parser" "1.5.13"
+ acorn "^5.6.2"
+ acorn-dynamic-import "^3.0.0"
+ ajv "^6.1.0"
+ ajv-keywords "^3.1.0"
+ chrome-trace-event "^1.0.0"
+ enhanced-resolve "^4.1.0"
+ eslint-scope "^3.7.1"
+ json-parse-better-errors "^1.0.2"
loader-runner "^2.3.0"
loader-utils "^1.1.0"
memory-fs "~0.4.1"
+ micromatch "^3.1.8"
mkdirp "~0.5.0"
+ neo-async "^2.5.0"
node-libs-browser "^2.0.0"
- source-map "^0.5.3"
- supports-color "^4.2.1"
- tapable "^0.2.7"
- uglifyjs-webpack-plugin "^0.4.6"
- watchpack "^1.4.0"
+ schema-utils "^0.4.4"
+ tapable "^1.0.0"
+ uglifyjs-webpack-plugin "^1.2.4"
+ watchpack "^1.5.0"
webpack-sources "^1.0.1"
- yargs "^8.0.2"
websocket-driver@>=0.5.1:
version "0.7.0"
@@ -7733,8 +8635,8 @@ whatwg-encoding@^1.0.1:
iconv-lite "0.4.19"
whatwg-fetch@>=0.10.0:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84"
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f"
whatwg-url@^4.3.0:
version "4.8.0"
@@ -7744,8 +8646,8 @@ whatwg-url@^4.3.0:
webidl-conversions "^3.0.0"
whatwg-url@^6.4.1:
- version "6.4.1"
- resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.4.1.tgz#fdb94b440fd4ad836202c16e9737d511f012fd67"
+ version "6.5.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8"
dependencies:
lodash.sortby "^4.7.0"
tr46 "^1.0.1"
@@ -7763,17 +8665,17 @@ which-module@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
-which@1, which@^1.2.12, which@^1.2.9:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a"
+which@1, which@^1.2.12, which@^1.2.9, which@^1.3.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
dependencies:
isexe "^2.0.0"
wide-align@^1.1.0:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710"
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
dependencies:
- string-width "^1.0.2"
+ string-width "^1.0.2 || 2"
window-size@0.1.0:
version "0.1.0"
@@ -7791,12 +8693,11 @@ wordwrap@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
-worker-farm@^1.3.1:
- version "1.5.2"
- resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.5.2.tgz#32b312e5dc3d5d45d79ef44acc2587491cd729ae"
+worker-farm@^1.3.1, worker-farm@^1.5.2:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0"
dependencies:
- errno "^0.1.4"
- xtend "^4.0.1"
+ errno "~0.1.7"
wrap-ansi@^2.0.0:
version "2.1.0"
@@ -7823,19 +8724,18 @@ write@^0.2.1:
dependencies:
mkdirp "^0.5.1"
-ws@^3.3.1:
- version "3.3.2"
- resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.2.tgz#96c1d08b3fefda1d5c1e33700d3bfaa9be2d5608"
+ws@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-4.1.0.tgz#a979b5d7d4da68bf54efe0408967c324869a7289"
dependencies:
async-limiter "~1.0.0"
safe-buffer "~5.1.0"
- ultron "~1.1.0"
xml-name-validator@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635"
-xtend@^4.0.0, xtend@^4.0.1:
+xtend@^4.0.0, xtend@~4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
@@ -7843,15 +8743,17 @@ y18n@^3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
+y18n@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
+
yallist@^2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
-yargs-parser@^4.2.0:
- version "4.2.1"
- resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c"
- dependencies:
- camelcase "^3.0.0"
+yallist@^3.0.0, yallist@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9"
yargs-parser@^5.0.0:
version "5.0.0"
@@ -7865,23 +8767,45 @@ yargs-parser@^7.0.0:
dependencies:
camelcase "^4.1.0"
-yargs@^6.6.0:
- version "6.6.0"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208"
+yargs-parser@^9.0.2:
+ version "9.0.2"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077"
dependencies:
- camelcase "^3.0.0"
- cliui "^3.2.0"
+ camelcase "^4.1.0"
+
+yargs@11.0.0:
+ version "11.0.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.0.0.tgz#c052931006c5eee74610e5fc0354bedfd08a201b"
+ dependencies:
+ cliui "^4.0.0"
decamelize "^1.1.1"
+ find-up "^2.1.0"
get-caller-file "^1.0.1"
- os-locale "^1.4.0"
- read-pkg-up "^1.0.1"
+ os-locale "^2.0.0"
require-directory "^2.1.1"
require-main-filename "^1.0.1"
set-blocking "^2.0.0"
- string-width "^1.0.2"
- which-module "^1.0.0"
+ string-width "^2.0.0"
+ which-module "^2.0.0"
y18n "^3.2.1"
- yargs-parser "^4.2.0"
+ yargs-parser "^9.0.2"
+
+yargs@^11.1.0:
+ version "11.1.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77"
+ dependencies:
+ cliui "^4.0.0"
+ decamelize "^1.1.1"
+ find-up "^2.1.0"
+ get-caller-file "^1.0.1"
+ os-locale "^2.0.0"
+ require-directory "^2.1.1"
+ require-main-filename "^1.0.1"
+ set-blocking "^2.0.0"
+ string-width "^2.0.0"
+ which-module "^2.0.0"
+ y18n "^3.2.1"
+ yargs-parser "^9.0.2"
yargs@^7.0.0:
version "7.1.0"
From 5a6645c922a68ba4f56db5d0082cdc58bb1ac746 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Sat, 14 Jul 2018 03:56:52 +0200
Subject: [PATCH 009/196] Fix static GIFs being saved as empty files when using
local storage (#8012)
Fix #7997
Fix #6237
---
lib/paperclip/gif_transcoder.rb | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/lib/paperclip/gif_transcoder.rb b/lib/paperclip/gif_transcoder.rb
index 62787983c..cbab6fd99 100644
--- a/lib/paperclip/gif_transcoder.rb
+++ b/lib/paperclip/gif_transcoder.rb
@@ -5,14 +5,7 @@ module Paperclip
# to convert animated gifs to webm
class GifTranscoder < Paperclip::Processor
def make
- num_frames = identify('-format %n :file', file: file.path).to_i
-
- unless options[:style] == :original && num_frames > 1
- tmp_file = Paperclip::TempfileFactory.new.generate(attachment.instance.file_file_name)
- tmp_file << file.read
- tmp_file.flush
- return tmp_file
- end
+ return File.open(@file.path) unless needs_convert?
final_file = Paperclip::Transcoder.make(file, options, attachment)
@@ -22,5 +15,12 @@ module Paperclip
final_file
end
+
+ private
+
+ def needs_convert?
+ num_frames = identify('-format %n :file', file: file.path).to_i
+ options[:style] == :original && num_frames > 1
+ end
end
end
From 0180037dfb45b80c3e3a04bc9cfb69fae1da37c0 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Sat, 14 Jul 2018 03:59:31 +0200
Subject: [PATCH 010/196] Fix streaming API still using filtered instead of
chosen languages (#8009)
---
streaming/index.js | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/streaming/index.js b/streaming/index.js
index 4eaf66865..d7bfa6542 100644
--- a/streaming/index.js
+++ b/streaming/index.js
@@ -192,7 +192,7 @@ const startWorker = (workerId) => {
return;
}
- client.query('SELECT oauth_access_tokens.resource_owner_id, users.account_id, users.filtered_languages FROM oauth_access_tokens INNER JOIN users ON oauth_access_tokens.resource_owner_id = users.id WHERE oauth_access_tokens.token = $1 AND oauth_access_tokens.revoked_at IS NULL LIMIT 1', [token], (err, result) => {
+ client.query('SELECT oauth_access_tokens.resource_owner_id, users.account_id, users.chosen_languages FROM oauth_access_tokens INNER JOIN users ON oauth_access_tokens.resource_owner_id = users.id WHERE oauth_access_tokens.token = $1 AND oauth_access_tokens.revoked_at IS NULL LIMIT 1', [token], (err, result) => {
done();
if (err) {
@@ -209,7 +209,7 @@ const startWorker = (workerId) => {
}
req.accountId = result.rows[0].account_id;
- req.filteredLanguages = result.rows[0].filtered_languages;
+ req.chosenLanguages = result.rows[0].chosen_languages;
next();
});
@@ -340,7 +340,7 @@ const startWorker = (workerId) => {
const targetAccountIds = [unpackedPayload.account.id].concat(unpackedPayload.mentions.map(item => item.id));
const accountDomain = unpackedPayload.account.acct.split('@')[1];
- if (Array.isArray(req.filteredLanguages) && req.filteredLanguages.indexOf(unpackedPayload.language) !== -1) {
+ if (Array.isArray(req.chosenLanguages) && unpackedPayload.language !== null && req.chosenLanguages.indexOf(unpackedPayload.language) === -1) {
log.silly(req.requestId, `Message ${unpackedPayload.id} filtered by language (${unpackedPayload.language})`);
return;
}
From 38e9662d78784d8286917f0d0e47d76d0df916df Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Sat, 14 Jul 2018 04:05:36 +0200
Subject: [PATCH 011/196] Disable language detection for texts shorter than 140
characters (#8010)
If the input text is blank after preparation (only mention, or
only URL, or empty as in a media post), then use nil as language,
since it's OK to show to everyone.
Otherwise, always fall back to the server's default locale
---
app/lib/language_detector.rb | 15 ++++++++++++---
spec/lib/language_detector_spec.rb | 4 ++--
2 files changed, 14 insertions(+), 5 deletions(-)
diff --git a/app/lib/language_detector.rb b/app/lib/language_detector.rb
index c6f52f0c7..688d21fd8 100644
--- a/app/lib/language_detector.rb
+++ b/app/lib/language_detector.rb
@@ -3,12 +3,16 @@
class LanguageDetector
include Singleton
+ CHARACTER_THRESHOLD = 140
+
def initialize
@identifier = CLD3::NNetLanguageIdentifier.new(1, 2048)
end
def detect(text, account)
- detect_language_code(text) || default_locale(account)
+ input_text = prepare_text(text)
+ return if input_text.blank?
+ detect_language_code(input_text) || default_locale(account)
end
def language_names
@@ -23,8 +27,13 @@ class LanguageDetector
simplify_text(text).strip
end
+ def unreliable_input?(text)
+ text.size < CHARACTER_THRESHOLD
+ end
+
def detect_language_code(text)
- result = @identifier.find_language(prepare_text(text))
+ return if unreliable_input?(text)
+ result = @identifier.find_language(text)
iso6391(result.language.to_s).to_sym if result.reliable?
end
@@ -66,6 +75,6 @@ class LanguageDetector
end
def default_locale(account)
- account.user_locale&.to_sym
+ account.user_locale&.to_sym || I18n.default_locale
end
end
diff --git a/spec/lib/language_detector_spec.rb b/spec/lib/language_detector_spec.rb
index d17026511..d00d2a0e6 100644
--- a/spec/lib/language_detector_spec.rb
+++ b/spec/lib/language_detector_spec.rb
@@ -57,7 +57,7 @@ describe LanguageDetector do
end
it 'detects spanish language' do
- string = 'Obtener un Hola y bienvenidos a Mastodon'
+ string = 'Obtener un Hola y bienvenidos a Mastodon. Obtener un Hola y bienvenidos a Mastodon. Obtener un Hola y bienvenidos a Mastodon. Obtener un Hola y bienvenidos a Mastodon'
result = described_class.instance.detect(string, account_without_user_locale)
expect(result).to eq :es
@@ -86,7 +86,7 @@ describe LanguageDetector do
account = double(user_locale: 'fr')
result = described_class.instance.detect('', account)
- expect(result).to eq :fr
+ expect(result).to eq nil
end
it 'uses nil when account is present but has no locale' do
From 2a176514be23398f7e784270ee5a23f814b0fa99 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Sat, 14 Jul 2018 04:07:47 +0200
Subject: [PATCH 012/196] Display full acct on public status pages, always
(#8011)
---
app/helpers/stream_entries_helper.rb | 2 +-
spec/helpers/stream_entries_helper_spec.rb | 5 +++--
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/app/helpers/stream_entries_helper.rb b/app/helpers/stream_entries_helper.rb
index a91a28935..05cea73d7 100644
--- a/app/helpers/stream_entries_helper.rb
+++ b/app/helpers/stream_entries_helper.rb
@@ -67,7 +67,7 @@ module StreamEntriesHelper
end
def acct(account)
- if embedded_view? && account.local?
+ if account.local?
"@#{account.acct}@#{Rails.configuration.x.local_domain}"
else
"@#{account.acct}"
diff --git a/spec/helpers/stream_entries_helper_spec.rb b/spec/helpers/stream_entries_helper_spec.rb
index 1de6691ba..845b9974e 100644
--- a/spec/helpers/stream_entries_helper_spec.rb
+++ b/spec/helpers/stream_entries_helper_spec.rb
@@ -58,13 +58,14 @@ RSpec.describe StreamEntriesHelper, type: :helper do
expect(acct).to eq '@user@foreign_server.com'
end
- it 'is the shortname for non embedded local accounts' do
+ it 'is fully qualified for non embedded local accounts' do
+ allow(Rails.configuration.x).to receive(:local_domain).and_return('local_domain')
set_not_embedded_view
account = Account.new(domain: nil, username: 'user')
acct = helper.acct(account)
- expect(acct).to eq '@user'
+ expect(acct).to eq '@user@local_domain'
end
end
From 0f0576ea067f650cdfb878870e10e564e303767a Mon Sep 17 00:00:00 2001
From: Jeong Arm
Date: Sat, 14 Jul 2018 18:27:27 +0900
Subject: [PATCH 013/196] Add missing Korean translations (#8017)
---
config/locales/simple_form.ko.yml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml
index e0a6a7405..392c24e82 100644
--- a/config/locales/simple_form.ko.yml
+++ b/config/locales/simple_form.ko.yml
@@ -20,10 +20,12 @@ ko:
one: 1 글자 남음
other: %{count} 글자 남음
phrase: 툿 내용이나 CW 내용 안에서 대소문자 구분 없이 매칭 됩니다
+ scopes: 애플리케이션에 허용할 API들입니다. 최상위 스코프를 선택하면 개별적인 것은 선택하지 않아도 됩니다.
setting_default_language: 작성한 툿의 언어는 자동으로 인식할 수 있지만, 언제나 정확한 건 아닙니다
setting_hide_network: 나를 팔로우 하는 사람들과 내가 팔로우 하는 사람들이 내 프로필에 표시되지 않게 합니다
setting_noindex: 공개 프로필 및 각 툿페이지에 영향을 미칩니다
setting_theme: 로그인중인 모든 디바이스에 적용되는 디자인입니다.
+ whole_word: 키워드가 영문과 숫자로만 이루어 진 경우, 단어 전체에 매칭 되었을 때에만 작동하게 합니다
imports:
data: 다른 마스토돈 인스턴스에서 추출된 CSV 파일
sessions:
@@ -76,6 +78,7 @@ ko:
type: 불러오기 종류
username: 유저 이름
username_or_email: 유저네임 또는 이메일
+ whole_word: 단어 전체에 매칭
interactions:
must_be_follower: 나를 팔로우 하지 않는 사람에게서 온 알림을 차단
must_be_following: 내가 팔로우 하지 않는 사람에게서 온 알림을 차단
From 0eacf2b419fdb7e7abca9f38537a05f7d3b89bf2 Mon Sep 17 00:00:00 2001
From: Yamagishi Kazutoshi
Date: Sat, 14 Jul 2018 22:12:27 +0900
Subject: [PATCH 014/196] Upgrade Node.js to v8.x on Docker image (#8019)
---
Dockerfile | 17 +++++++----------
package.json | 2 +-
yarn.lock | 6 +++---
3 files changed, 11 insertions(+), 14 deletions(-)
diff --git a/Dockerfile b/Dockerfile
index 02f334585..0c347a11a 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,3 +1,4 @@
+FROM node:8.11.3-alpine as node
FROM ruby:2.4.4-alpine3.6
LABEL maintainer="https://github.com/tootsuite/mastodon" \
@@ -11,8 +12,6 @@ ENV PATH=/mastodon/bin:$PATH \
RAILS_ENV=production \
NODE_ENV=production
-ARG YARN_VERSION=1.3.2
-ARG YARN_DOWNLOAD_SHA256=6cfe82e530ef0837212f13e45c1565ba53f5199eec2527b85ecbcd88bf26821d
ARG LIBICONV_VERSION=1.15
ARG LIBICONV_DOWNLOAD_SHA256=ccf536620a45458d26ba83887a983b96827001e92a13847b45e4925cc8913178
@@ -20,6 +19,11 @@ EXPOSE 3000 4000
WORKDIR /mastodon
+COPY --from=node /usr/local/bin/node /usr/local/bin/node
+COPY --from=node /usr/local/lib/node_modules /usr/local/lib/node_modules
+COPY --from=node /usr/local/bin/npm /usr/local/bin/npm
+COPY --from=node /opt/yarn-* /opt/yarn
+
RUN apk -U upgrade \
&& apk add -t build-dependencies \
build-base \
@@ -39,20 +43,13 @@ RUN apk -U upgrade \
imagemagick \
libidn \
libpq \
- nodejs \
- nodejs-npm \
protobuf \
tini \
tzdata \
&& update-ca-certificates \
- && mkdir -p /tmp/src /opt \
- && wget -O yarn.tar.gz "https://github.com/yarnpkg/yarn/releases/download/v$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz" \
- && echo "$YARN_DOWNLOAD_SHA256 *yarn.tar.gz" | sha256sum -c - \
- && tar -xzf yarn.tar.gz -C /tmp/src \
- && rm yarn.tar.gz \
- && mv /tmp/src/yarn-v$YARN_VERSION /opt/yarn \
&& ln -s /opt/yarn/bin/yarn /usr/local/bin/yarn \
&& ln -s /opt/yarn/bin/yarnpkg /usr/local/bin/yarnpkg \
+ && mkdir -p /tmp/src /opt \
&& wget -O libiconv.tar.gz "https://ftp.gnu.org/pub/gnu/libiconv/libiconv-$LIBICONV_VERSION.tar.gz" \
&& echo "$LIBICONV_DOWNLOAD_SHA256 *libiconv.tar.gz" | sha256sum -c - \
&& tar -xzf libiconv.tar.gz -C /tmp/src \
diff --git a/package.json b/package.json
index 95383bae5..005a1d0ca 100644
--- a/package.json
+++ b/package.json
@@ -116,7 +116,7 @@
"tiny-queue": "^0.2.1",
"uglifyjs-webpack-plugin": "^1.2.7",
"uuid": "^3.1.0",
- "uws": "^10.148.1",
+ "uws": "10.148.0",
"webpack": "^4.16.0",
"webpack-bundle-analyzer": "^2.13.1",
"webpack-cli": "^3.0.8",
diff --git a/yarn.lock b/yarn.lock
index 357a07005..01a5b35f6 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -8385,9 +8385,9 @@ uuid@^3.0.0, uuid@^3.0.1, uuid@^3.1.0:
version "3.3.2"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"
-uws@^10.148.1:
- version "10.148.1"
- resolved "https://registry.yarnpkg.com/uws/-/uws-10.148.1.tgz#fd1a79cf6118a388e0a1bed8a1397030d2c4fd2c"
+uws@10.148.0:
+ version "10.148.0"
+ resolved "https://registry.yarnpkg.com/uws/-/uws-10.148.0.tgz#3fcd35f083ca515e091cd33b2d78f0f51a666215"
v8-compile-cache@^2.0.0:
version "2.0.0"
From d0d23b8f0aa72946fe0c8d3327ce1d8bbc049d4f Mon Sep 17 00:00:00 2001
From: ThibG
Date: Sat, 14 Jul 2018 23:28:29 +0200
Subject: [PATCH 015/196] Do not cause an error if domain_lists.blocks.next is
undefined (#8021)
A valid URL is always truthy, so we can simplify this check
---
app/javascript/mastodon/actions/domain_blocks.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/javascript/mastodon/actions/domain_blocks.js b/app/javascript/mastodon/actions/domain_blocks.js
index 47e2df76b..0445a5e10 100644
--- a/app/javascript/mastodon/actions/domain_blocks.js
+++ b/app/javascript/mastodon/actions/domain_blocks.js
@@ -128,7 +128,7 @@ export function expandDomainBlocks() {
return (dispatch, getState) => {
const url = getState().getIn(['domain_lists', 'blocks', 'next']);
- if (url === null) {
+ if (!url) {
return;
}
From af161e849dcad223a03bd95df3804443533144a4 Mon Sep 17 00:00:00 2001
From: Yamagishi Kazutoshi
Date: Sun, 15 Jul 2018 08:01:01 +0900
Subject: [PATCH 016/196] Downgrade react-swipeable-views to v0.12.13 from
v0.12.14 (#8022)
---
package.json | 2 +-
yarn.lock | 18 +++++++++---------
2 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/package.json b/package.json
index 005a1d0ca..fdd8c3642 100644
--- a/package.json
+++ b/package.json
@@ -98,7 +98,7 @@
"react-router-dom": "^4.1.1",
"react-router-scroll-4": "^1.0.0-beta.1",
"react-sparklines": "^1.7.0",
- "react-swipeable-views": "^0.12.3",
+ "react-swipeable-views": "0.12.13",
"react-textarea-autosize": "^5.2.1",
"react-toggle": "^4.0.1",
"redis": "^2.7.1",
diff --git a/yarn.lock b/yarn.lock
index 01a5b35f6..423623300 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -6942,14 +6942,14 @@ react-sparklines@^1.7.0:
dependencies:
prop-types "^15.5.10"
-react-swipeable-views-core@^0.12.14:
+react-swipeable-views-core@^0.12.11, react-swipeable-views-core@^0.12.14:
version "0.12.14"
resolved "https://registry.yarnpkg.com/react-swipeable-views-core/-/react-swipeable-views-core-0.12.14.tgz#65271fd18dd9b359e39392fe065a8067e0d7bfdb"
dependencies:
"@babel/runtime" "^7.0.0-beta.42"
warning "^4.0.1"
-react-swipeable-views-utils@^0.12.14:
+react-swipeable-views-utils@^0.12.13:
version "0.12.14"
resolved "https://registry.yarnpkg.com/react-swipeable-views-utils/-/react-swipeable-views-utils-0.12.14.tgz#7ba72ea8eff8149f2c50ed8abc6fb21d1e0de227"
dependencies:
@@ -6960,16 +6960,16 @@ react-swipeable-views-utils@^0.12.14:
react-event-listener "^0.6.0"
react-swipeable-views-core "^0.12.14"
-react-swipeable-views@^0.12.3:
- version "0.12.14"
- resolved "https://registry.yarnpkg.com/react-swipeable-views/-/react-swipeable-views-0.12.14.tgz#71722be23491ef500c42e86bafb838d45a69ffe1"
+react-swipeable-views@0.12.13:
+ version "0.12.13"
+ resolved "https://registry.yarnpkg.com/react-swipeable-views/-/react-swipeable-views-0.12.13.tgz#247442dbe14922efe5ad6fe0297599c817600bf9"
dependencies:
- "@babel/runtime" "^7.0.0-beta.42"
+ babel-runtime "^6.23.0"
dom-helpers "^3.2.1"
prop-types "^15.5.4"
- react-swipeable-views-core "^0.12.14"
- react-swipeable-views-utils "^0.12.14"
- warning "^4.0.1"
+ react-swipeable-views-core "^0.12.11"
+ react-swipeable-views-utils "^0.12.13"
+ warning "^3.0.0"
react-test-renderer@^16.0.0-0, react-test-renderer@^16.2.0:
version "16.4.1"
From 955d5d36e80259d8c10a0246d359f35f63de059d Mon Sep 17 00:00:00 2001
From: ThibG
Date: Sun, 15 Jul 2018 01:18:09 +0200
Subject: [PATCH 017/196] Use LoadingBar instead of blur to indicate that an
image is loading (fixes #4060) (#7562)
---
.../mastodon/features/ui/components/image_loader.js | 4 ++++
app/javascript/styles/mastodon/components.scss | 5 +++--
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/app/javascript/mastodon/features/ui/components/image_loader.js b/app/javascript/mastodon/features/ui/components/image_loader.js
index c7360a726..5e1cf75af 100644
--- a/app/javascript/mastodon/features/ui/components/image_loader.js
+++ b/app/javascript/mastodon/features/ui/components/image_loader.js
@@ -1,6 +1,7 @@
import React from 'react';
import PropTypes from 'prop-types';
import classNames from 'classnames';
+import { LoadingBar } from 'react-redux-loading-bar';
import ZoomableImage from './zoomable_image';
export default class ImageLoader extends React.PureComponent {
@@ -23,6 +24,7 @@ export default class ImageLoader extends React.PureComponent {
state = {
loading: true,
error: false,
+ width: null,
}
removers = [];
@@ -122,6 +124,7 @@ export default class ImageLoader extends React.PureComponent {
setCanvasRef = c => {
this.canvas = c;
+ if (c) this.setState({ width: c.offsetWidth });
}
render () {
@@ -135,6 +138,7 @@ export default class ImageLoader extends React.PureComponent {
return (
+
{loading ? (
Date: Sat, 14 Jul 2018 19:19:09 -0400
Subject: [PATCH 018/196] Dockerfile: run asset precompilation as a build step
(#7780)
* Dockerfile: run asset precompilation as a build step
* Replace OTP_SECRET and SECRET_KEY_BASE with placeholders
---
Dockerfile | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/Dockerfile b/Dockerfile
index 0c347a11a..b85d05047 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -77,8 +77,10 @@ COPY . /mastodon
RUN chown -R mastodon:mastodon /mastodon
-VOLUME /mastodon/public/system /mastodon/public/assets /mastodon/public/packs
+VOLUME /mastodon/public/system
USER mastodon
+RUN OTP_SECRET=precompile_placeholder SECRET_KEY_BASE=precompile_placeholder bundle exec rails assets:precompile
+
ENTRYPOINT ["/sbin/tini", "--"]
From dc62195a06697c1b2f3156ba194c2992e8c63a01 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?THE=20BOSS=20=E2=99=A8?=
<30565780+theboss@users.noreply.github.com>
Date: Sun, 15 Jul 2018 12:29:17 +0900
Subject: [PATCH 019/196] Upgrade Node.js to v8.x on nvmrc (#8023)
---
.nvmrc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.nvmrc b/.nvmrc
index 1e8b31496..45a4fb75d 100644
--- a/.nvmrc
+++ b/.nvmrc
@@ -1 +1 @@
-6
+8
From 7a686082370ad6d1c7a7d0ad331c22bf3e1fbede Mon Sep 17 00:00:00 2001
From: Akihiko Odaki
Date: Sun, 15 Jul 2018 21:56:00 +0900
Subject: [PATCH 020/196] Fix index detection a migration to revert index
change (#8026)
---
...hange_on_statuses_for_api_v1_accounts_account_id_statuses.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/db/migrate/20180514140000_revert_index_change_on_statuses_for_api_v1_accounts_account_id_statuses.rb b/db/migrate/20180514140000_revert_index_change_on_statuses_for_api_v1_accounts_account_id_statuses.rb
index 4a8761fec..ccd2ec7ea 100644
--- a/db/migrate/20180514140000_revert_index_change_on_statuses_for_api_v1_accounts_account_id_statuses.rb
+++ b/db/migrate/20180514140000_revert_index_change_on_statuses_for_api_v1_accounts_account_id_statuses.rb
@@ -5,7 +5,7 @@ class RevertIndexChangeOnStatusesForApiV1AccountsAccountIdStatuses < ActiveRecor
def change
safety_assured do
- add_index :statuses, [:account_id, :id, :visibility, :updated_at], order: { id: :desc }, algorithm: :concurrently, name: :index_statuses_20180106 unless index_exists?(:statuses, name: "index_statuses_20180106")
+ add_index :statuses, [:account_id, :id, :visibility, :updated_at], order: { id: :desc }, algorithm: :concurrently, name: :index_statuses_20180106 unless index_name_exists?(:statuses, "index_statuses_20180106")
end
# These index may not exists (see migration 20180514130000)
From 2354b10eb5e9c7382726bc5e6e041ea30a903c90 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Mon, 16 Jul 2018 01:11:53 +0200
Subject: [PATCH 021/196] Add admin dashboard (#8029)
---
app/controllers/admin/dashboard_controller.rb | 42 ++++++
app/javascript/styles/application.scss | 1 +
app/javascript/styles/mastodon/dashboard.scss | 69 +++++++++
app/lib/potential_friendship_tracker.rb | 2 +
app/views/admin/dashboard/index.html.haml | 140 ++++++++++++++++++
config/locales/en.yml | 20 +++
config/navigation.rb | 3 +-
config/routes.rb | 10 +-
8 files changed, 279 insertions(+), 8 deletions(-)
create mode 100644 app/controllers/admin/dashboard_controller.rb
create mode 100644 app/javascript/styles/mastodon/dashboard.scss
create mode 100644 app/views/admin/dashboard/index.html.haml
diff --git a/app/controllers/admin/dashboard_controller.rb b/app/controllers/admin/dashboard_controller.rb
new file mode 100644
index 000000000..01d4a9847
--- /dev/null
+++ b/app/controllers/admin/dashboard_controller.rb
@@ -0,0 +1,42 @@
+# frozen_string_literal: true
+require 'sidekiq/api'
+
+module Admin
+ class DashboardController < BaseController
+ def index
+ @users_count = User.count
+ @registrations_week = Redis.current.get("activity:accounts:local:#{current_week}") || 0
+ @logins_week = Redis.current.pfcount("activity:logins:#{current_week}")
+ @interactions_week = Redis.current.get("activity:interactions:#{current_week}") || 0
+ @relay_enabled = Relay.enabled.exists?
+ @single_user_mode = Rails.configuration.x.single_user_mode
+ @registrations_enabled = Setting.open_registrations
+ @deletions_enabled = Setting.open_deletions
+ @invites_enabled = Setting.min_invite_role == 'user'
+ @search_enabled = Chewy.enabled?
+ @version = Mastodon::Version.to_s
+ @database_version = ActiveRecord::Base.connection.execute('SELECT VERSION()').first['version'].match(/\A(?:PostgreSQL |)([^\s]+).*\z/)[1]
+ @redis_version = redis_info['redis_version']
+ @reports_count = Report.unresolved.count
+ @queue_backlog = Sidekiq::Stats.new.enqueued
+ @recent_users = User.confirmed.recent.includes(:account).limit(4)
+ @database_size = ActiveRecord::Base.connection.execute('SELECT pg_database_size(current_database())').first['pg_database_size']
+ @redis_size = redis_info['used_memory']
+ @ldap_enabled = ENV['LDAP_ENABLED'] == 'true'
+ @cas_enabled = ENV['CAS_ENABLED'] == 'true'
+ @saml_enabled = ENV['SAML_ENABLED'] == 'true'
+ @pam_enabled = ENV['PAM_ENABLED'] == 'true'
+ @hidden_service = ENV['ALLOW_ACCESS_TO_HIDDEN_SERVICE'] == 'true'
+ end
+
+ private
+
+ def current_week
+ @current_week ||= Time.now.utc.to_date.cweek
+ end
+
+ def redis_info
+ @redis_info ||= Redis.current.info
+ end
+ end
+end
diff --git a/app/javascript/styles/application.scss b/app/javascript/styles/application.scss
index f207c02a6..7b3b10dfe 100644
--- a/app/javascript/styles/application.scss
+++ b/app/javascript/styles/application.scss
@@ -21,5 +21,6 @@
@import 'mastodon/about';
@import 'mastodon/tables';
@import 'mastodon/admin';
+@import 'mastodon/dashboard';
@import 'mastodon/rtl';
@import 'mastodon/accessibility';
diff --git a/app/javascript/styles/mastodon/dashboard.scss b/app/javascript/styles/mastodon/dashboard.scss
new file mode 100644
index 000000000..949ca733f
--- /dev/null
+++ b/app/javascript/styles/mastodon/dashboard.scss
@@ -0,0 +1,69 @@
+.dashboard__counters {
+ display: flex;
+ flex-wrap: wrap;
+ margin: 0 -5px;
+ margin-bottom: 20px;
+
+ & > div {
+ box-sizing: border-box;
+ flex: 0 0 33.333%;
+ padding: 0 5px;
+ margin-bottom: 10px;
+
+ & > div,
+ & > a {
+ padding: 20px;
+ background: lighten($ui-base-color, 4%);
+ border-radius: 4px;
+ }
+
+ & > a {
+ text-decoration: none;
+ color: inherit;
+ display: block;
+
+ &:hover,
+ &:focus,
+ &:active {
+ background: lighten($ui-base-color, 8%);
+ }
+ }
+ }
+
+ &__num {
+ text-align: center;
+ font-weight: 500;
+ font-size: 24px;
+ color: $primary-text-color;
+ font-family: 'mastodon-font-display', sans-serif;
+ margin-bottom: 20px;
+ }
+
+ &__label {
+ font-size: 14px;
+ color: $darker-text-color;
+ text-align: center;
+ font-weight: 500;
+ }
+}
+
+.dashboard__widgets {
+ display: flex;
+ flex-wrap: wrap;
+ margin: 0 -5px;
+
+ & > div {
+ flex: 0 0 33.333%;
+ margin-bottom: 20px;
+
+ & > div {
+ padding: 0 5px;
+ }
+ }
+
+ a:not(.name-tag) {
+ color: $ui-secondary-color;
+ font-weight: 500;
+ text-decoration: none;
+ }
+}
diff --git a/app/lib/potential_friendship_tracker.rb b/app/lib/potential_friendship_tracker.rb
index 017a9748d..dfca54f7b 100644
--- a/app/lib/potential_friendship_tracker.rb
+++ b/app/lib/potential_friendship_tracker.rb
@@ -20,6 +20,8 @@ class PotentialFriendshipTracker
redis.zincrby(key, weight, target_account_id)
redis.zremrangebyrank(key, 0, -MAX_ITEMS)
redis.expire(key, EXPIRE_AFTER)
+
+ ActivityTracker.increment('activity:interactions')
end
def remove(account_id, target_account_id)
diff --git a/app/views/admin/dashboard/index.html.haml b/app/views/admin/dashboard/index.html.haml
new file mode 100644
index 000000000..50004de33
--- /dev/null
+++ b/app/views/admin/dashboard/index.html.haml
@@ -0,0 +1,140 @@
+- content_for :page_title do
+ = t('admin.dashboard.title')
+
+.dashboard__counters
+ %div
+ = link_to admin_accounts_url(local: 1, recent: 1) do
+ .dashboard__counters__num= number_with_delimiter @users_count
+ .dashboard__counters__label= t 'admin.dashboard.total_users'
+ %div
+ %div
+ .dashboard__counters__num= number_with_delimiter @registrations_week
+ .dashboard__counters__label= t 'admin.dashboard.week_users_new'
+ %div
+ %div
+ .dashboard__counters__num= number_with_delimiter @logins_week
+ .dashboard__counters__label= t 'admin.dashboard.week_users_active'
+ %div
+ %div
+ .dashboard__counters__num= number_with_delimiter @interactions_week
+ .dashboard__counters__label= t 'admin.dashboard.week_interactions'
+ %div
+ = link_to admin_reports_url do
+ .dashboard__counters__num= number_with_delimiter @reports_count
+ .dashboard__counters__label= t 'admin.dashboard.open_reports'
+ %div
+ = link_to sidekiq_url do
+ .dashboard__counters__num= number_with_delimiter @queue_backlog
+ .dashboard__counters__label= t 'admin.dashboard.backlog'
+
+.dashboard__widgets
+ .dashboard__widgets__users
+ %div
+ %h4= t 'admin.dashboard.recent_users'
+ %ul
+ - @recent_users.each do |user|
+ %li= admin_account_link_to(user.account)
+
+ .dashboard__widgets__features
+ %div
+ %h4= t 'admin.dashboard.features'
+ %ul
+ %li
+ = link_to t('admin.dashboard.feature_registrations'), edit_admin_settings_path
+ - if @registrations_enabled
+ %span.pull-right.positive-hint= fa_icon 'check fw'
+ - else
+ %span.pull-right.negative-hint= fa_icon 'times fw'
+ %li
+ = link_to t('admin.dashboard.feature_invites'), edit_admin_settings_path
+ - if @invites_enabled
+ %span.pull-right.positive-hint= fa_icon 'check fw'
+ - else
+ %span.pull-right.negative-hint= fa_icon 'times fw'
+ %li
+ = link_to t('admin.dashboard.feature_deletions'), edit_admin_settings_path
+ - if @deletions_enabled
+ %span.pull-right.positive-hint= fa_icon 'check fw'
+ - else
+ %span.pull-right.negative-hint= fa_icon 'times fw'
+ %li
+ = link_to t('admin.dashboard.feature_relay'), admin_relays_path
+ - if @relay_enabled
+ %span.pull-right.positive-hint= fa_icon 'check fw'
+ - else
+ %span.pull-right.negative-hint= fa_icon 'times fw'
+
+ .dashboard__widgets__versions
+ %div
+ %h4= t 'admin.dashboard.software'
+ %ul
+ %li
+ Mastodon
+ %span.pull-right= @version
+ %li
+ Ruby
+ %span.pull-right= "#{RUBY_VERSION}p#{RUBY_PATCHLEVEL}"
+ %li
+ PostgreSQL
+ %span.pull-right= @database_version
+ %li
+ Redis
+ %span.pull-right= @redis_version
+
+ .dashboard__widgets__space
+ %div
+ %h4= t 'admin.dashboard.space'
+ %ul
+ %li
+ PostgreSQL
+ %span.pull-right= number_to_human_size @database_size
+ %li
+ Redis
+ %span.pull-right= number_to_human_size @redis_size
+
+ .dashboard__widgets__config
+ %div
+ %h4= t 'admin.dashboard.config'
+ %ul
+ %li
+ = t('admin.dashboard.search')
+ - if @search_enabled
+ %span.pull-right.positive-hint= fa_icon 'check fw'
+ - else
+ %span.pull-right.negative-hint= fa_icon 'times fw'
+ %li
+ = t('admin.dashboard.single_user_mode')
+ - if @single_user_mode
+ %span.pull-right.positive-hint= fa_icon 'check fw'
+ - else
+ %span.pull-right.negative-hint= fa_icon 'times fw'
+ %li
+ LDAP
+ - if @ldap_enabled
+ %span.pull-right.positive-hint= fa_icon 'check fw'
+ - else
+ %span.pull-right.negative-hint= fa_icon 'times fw'
+ %li
+ CAS
+ - if @cas_enabled
+ %span.pull-right.positive-hint= fa_icon 'check fw'
+ - else
+ %span.pull-right.negative-hint= fa_icon 'times fw'
+ %li
+ SAML
+ - if @saml_enabled
+ %span.pull-right.positive-hint= fa_icon 'check fw'
+ - else
+ %span.pull-right.negative-hint= fa_icon 'times fw'
+ %li
+ PAM
+ - if @pam_enabled
+ %span.pull-right.positive-hint= fa_icon 'check fw'
+ - else
+ %span.pull-right.negative-hint= fa_icon 'times fw'
+ %li
+ = t 'admin.dashboard.hidden_service'
+ - if @hidden_service
+ %span.pull-right.positive-hint= fa_icon 'check fw'
+ - else
+ %span.pull-right.negative-hint= fa_icon 'times fw'
diff --git a/config/locales/en.yml b/config/locales/en.yml
index ec08f0d78..e0a2c9f82 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -206,6 +206,26 @@ en:
update_failed_msg: Could not update that emoji
updated_msg: Emoji successfully updated!
upload: Upload
+ dashboard:
+ backlog: backlogged jobs
+ config: Configuration
+ feature_deletions: Account deletions
+ feature_invites: Invite links
+ feature_registrations: Registrations
+ feature_relay: Federation relay
+ features: Features
+ hidden_service: Federation with hidden services
+ open_reports: open reports
+ recent_users: Recent users
+ search: Full-text search
+ single_user_mode: Single user mode
+ software: Software
+ space: Space usage
+ title: Dashboard
+ total_users: users in total
+ week_interactions: interactions this week
+ week_users_active: active this week
+ week_users_new: users this week
domain_blocks:
add_new: Add new
created_msg: Domain block is now being processed
diff --git a/config/navigation.rb b/config/navigation.rb
index a13ad6f43..99d227f11 100644
--- a/config/navigation.rb
+++ b/config/navigation.rb
@@ -33,7 +33,8 @@ SimpleNavigation::Configuration.run do |navigation|
admin.item :email_domain_blocks, safe_join([fa_icon('envelope fw'), t('admin.email_domain_blocks.title')]), admin_email_domain_blocks_url, highlights_on: %r{/admin/email_domain_blocks}, if: -> { current_user.admin? }
end
- primary.item :admin, safe_join([fa_icon('cogs fw'), t('admin.title')]), proc { current_user.admin? ? edit_admin_settings_url : admin_custom_emojis_url }, if: proc { current_user.staff? } do |admin|
+ primary.item :admin, safe_join([fa_icon('cogs fw'), t('admin.title')]), admin_dashboard_url, if: proc { current_user.staff? } do |admin|
+ admin.item :dashboard, safe_join([fa_icon('tachometer fw'), t('admin.dashboard.title')]), admin_dashboard_url
admin.item :settings, safe_join([fa_icon('cogs fw'), t('admin.settings.title')]), edit_admin_settings_url, if: -> { current_user.admin? }
admin.item :custom_emojis, safe_join([fa_icon('smile-o fw'), t('admin.custom_emojis.title')]), admin_custom_emojis_url, highlights_on: %r{/admin/custom_emojis}
admin.item :relays, safe_join([fa_icon('exchange fw'), t('admin.relays.title')]), admin_relays_url, if: -> { current_user.admin? }, highlights_on: %r{/admin/relays}
diff --git a/config/routes.rb b/config/routes.rb
index 3d0da1a85..1c97f5a82 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -124,6 +124,8 @@ Rails.application.routes.draw do
resource :share, only: [:show, :create]
namespace :admin do
+ get '/dashboard', to: 'dashboard#index'
+
resources :subscriptions, only: [:index]
resources :domain_blocks, only: [:index, :new, :create, :show, :destroy]
resources :email_domain_blocks, only: [:index, :new, :create, :destroy]
@@ -196,13 +198,7 @@ Rails.application.routes.draw do
resources :account_moderation_notes, only: [:create, :destroy]
end
- authenticate :user, lambda { |u| u.admin? } do
- get '/admin', to: redirect('/admin/settings/edit', status: 302)
- end
-
- authenticate :user, lambda { |u| u.moderator? } do
- get '/admin', to: redirect('/admin/reports', status: 302)
- end
+ get '/admin', to: redirect('/admin/dashboard', status: 302)
namespace :api do
# PubSubHubbub outgoing subscriptions
From 04587116bd9965125cd0ec34261ea307e23aa357 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Mon, 16 Jul 2018 01:58:10 +0200
Subject: [PATCH 022/196] Fix typo in Admin::DashboardController#index
---
app/controllers/admin/dashboard_controller.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/controllers/admin/dashboard_controller.rb b/app/controllers/admin/dashboard_controller.rb
index 01d4a9847..af1ac7b5e 100644
--- a/app/controllers/admin/dashboard_controller.rb
+++ b/app/controllers/admin/dashboard_controller.rb
@@ -11,7 +11,7 @@ module Admin
@relay_enabled = Relay.enabled.exists?
@single_user_mode = Rails.configuration.x.single_user_mode
@registrations_enabled = Setting.open_registrations
- @deletions_enabled = Setting.open_deletions
+ @deletions_enabled = Setting.open_deletion
@invites_enabled = Setting.min_invite_role == 'user'
@search_enabled = Chewy.enabled?
@version = Mastodon::Version.to_s
From daacf15d72e284eef9172a15bd2629a5b6514f32 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marcin=20Miko=C5=82ajczak?=
Date: Mon, 16 Jul 2018 12:23:27 +0200
Subject: [PATCH 023/196] i18n: Update Polish translation (#8032)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Marcin Mikołajczak
---
app/javascript/mastodon/locales/pl.json | 2 +-
config/locales/pl.yml | 28 +++++++++++++++++++++++++
2 files changed, 29 insertions(+), 1 deletion(-)
diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json
index 4f1290121..bcb015968 100644
--- a/app/javascript/mastodon/locales/pl.json
+++ b/app/javascript/mastodon/locales/pl.json
@@ -166,7 +166,7 @@
"navigation_bar.domain_blocks": "Ukryte domeny",
"navigation_bar.edit_profile": "Edytuj profil",
"navigation_bar.favourites": "Ulubione",
- "navigation_bar.filters": "Muted words",
+ "navigation_bar.filters": "Wyciszone słowa",
"navigation_bar.follow_requests": "Prośby o śledzenie",
"navigation_bar.info": "Szczegółowe informacje",
"navigation_bar.keyboard_shortcuts": "Skróty klawiszowe",
diff --git a/config/locales/pl.yml b/config/locales/pl.yml
index 061c07b64..62e2b59ae 100644
--- a/config/locales/pl.yml
+++ b/config/locales/pl.yml
@@ -206,6 +206,26 @@ pl:
update_failed_msg: Nie udało się zaktualizować emoji
updated_msg: Pomyślnie zaktualizowano emoji!
upload: Dodaj
+ dashboard:
+ backlog: zaległe zadania
+ config: Konfiguracja
+ feature_deletions: Usuwanie kont
+ feature_invites: Zaproszenia
+ feature_registrations: Rejestracja
+ feature_relay: Przekazywanie federacji
+ features: Możliwości
+ hidden_service: Federowanie z ukrytymi usługami
+ open_reports: otwarte zgłoszenia
+ recent_users: Ostatni użytkownicy
+ search: Wyszukiwanie pełnego tekstu
+ single_user_mode: Tryb jednego użytkownika
+ software: Oprogramowanie
+ space: Używana powierzchnia
+ title: Panel administracyjny
+ total_users: łącznie użytkowników
+ week_interactions: interakcje w tym tygodniu
+ week_users_active: aktywni w tym tygodniu
+ week_users_new: rejestracje w tym tygodniu
domain_blocks:
add_new: Dodaj nową
created_msg: Blokada domen jest przetwarzana
@@ -262,6 +282,14 @@ pl:
expired: Wygasłe
title: Filtruj
title: Zaproszenia
+ relays:
+ add_new: Dodaj nowy
+ description_html: "Przekaźnik federacji jest pośredniczącym serwerem wymieniającym duże ilości publicznych wpisów pomiędzy serwerami które subskrybują je i publikują na nich. Pomaga to małym i średnim instancją poznawać nową zawartość z Fediwersum , co w innym przypadku wymagałoby od użytkowników ręcznego śledzenia osób z innych serwerów."
+ enable_hint: Jeżeli włączone, Twój serwer zasubskrybuje wszystkie publiczne wpisy z tego przekaźnika i zacznie wysyłać tam publiczne wpisy z tego serwera.
+ inbox_url: Adres przekaźnika
+ setup: Skonfiguruj połączenie z przekaźnikiem
+ status: Stan
+ title: Przekaźniki
report_notes:
created_msg: Pomyslnie utworzono notatkę moderacyjną.
destroyed_msg: Pomyślnie usunięto notatkę moderacyjną.
From 8f64b17d98612f853a83ee766edc2bb41c82fd75 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Mon, 16 Jul 2018 15:17:43 +0200
Subject: [PATCH 024/196] Whitelist dat/ipfs/gopher links in sanitizer (#8034)
Fix #7994
---
app/lib/sanitize_config.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/lib/sanitize_config.rb b/app/lib/sanitize_config.rb
index c2b466924..1bba4a5a6 100644
--- a/app/lib/sanitize_config.rb
+++ b/app/lib/sanitize_config.rb
@@ -2,7 +2,7 @@
class Sanitize
module Config
- HTTP_PROTOCOLS ||= ['http', 'https', :relative].freeze
+ HTTP_PROTOCOLS ||= ['http', 'https', 'dat', 'dweb', 'ipfs', 'ipns', 'ssb', 'gopher', :relative].freeze
CLASS_WHITELIST_TRANSFORMER = lambda do |env|
node = env[:node]
From a23ac107e4f9cc46a95d8e2dca6a5056dbcce39d Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Mon, 16 Jul 2018 18:35:43 +0200
Subject: [PATCH 025/196] Fix activity:interactions counter to count all
interactions (#8037)
---
app/lib/potential_friendship_tracker.rb | 2 --
app/services/favourite_service.rb | 1 +
app/services/post_status_service.rb | 4 +++-
app/services/reblog_service.rb | 1 +
4 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/app/lib/potential_friendship_tracker.rb b/app/lib/potential_friendship_tracker.rb
index dfca54f7b..017a9748d 100644
--- a/app/lib/potential_friendship_tracker.rb
+++ b/app/lib/potential_friendship_tracker.rb
@@ -20,8 +20,6 @@ class PotentialFriendshipTracker
redis.zincrby(key, weight, target_account_id)
redis.zremrangebyrank(key, 0, -MAX_ITEMS)
redis.expire(key, EXPIRE_AFTER)
-
- ActivityTracker.increment('activity:interactions')
end
def remove(account_id, target_account_id)
diff --git a/app/services/favourite_service.rb b/app/services/favourite_service.rb
index 6e1ac3ba9..b565bcc32 100644
--- a/app/services/favourite_service.rb
+++ b/app/services/favourite_service.rb
@@ -37,6 +37,7 @@ class FavouriteService < BaseService
end
def bump_potential_friendship(account, status)
+ ActivityTracker.increment('activity:interactions')
return if account.following?(status.account_id)
PotentialFriendshipTracker.record(account.id, status.account_id, :favourite)
end
diff --git a/app/services/post_status_service.rb b/app/services/post_status_service.rb
index 4c3485853..300eae547 100644
--- a/app/services/post_status_service.rb
+++ b/app/services/post_status_service.rb
@@ -83,7 +83,9 @@ class PostStatusService < BaseService
end
def bump_potential_friendship(account, status)
- return if !status.reply? || account.following?(status.in_reply_to_account_id)
+ 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
end
diff --git a/app/services/reblog_service.rb b/app/services/reblog_service.rb
index 0ee8bac2f..33ddef8b8 100644
--- a/app/services/reblog_service.rb
+++ b/app/services/reblog_service.rb
@@ -44,6 +44,7 @@ class ReblogService < BaseService
end
def bump_potential_friendship(account, reblog)
+ ActivityTracker.increment('activity:interactions')
return if account.following?(reblog.reblog.account_id)
PotentialFriendshipTracker.record(account.id, reblog.reblog.account_id, :reblog)
end
From 7e2678f7f66fbdb215b89378e2a1b7d9e3901fc0 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Mon, 16 Jul 2018 18:43:22 +0200
Subject: [PATCH 026/196] Fix ActivityPub::UpdateDistributionWorker regression
(#8039)
Regression from #7998 let to profile updates not sending
---
app/workers/activitypub/update_distribution_worker.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/workers/activitypub/update_distribution_worker.rb b/app/workers/activitypub/update_distribution_worker.rb
index 87efafb3e..bbda69305 100644
--- a/app/workers/activitypub/update_distribution_worker.rb
+++ b/app/workers/activitypub/update_distribution_worker.rb
@@ -34,6 +34,6 @@ class ActivityPub::UpdateDistributionWorker
@account,
serializer: ActivityPub::UpdateSerializer,
adapter: ActivityPub::Adapter
- ).to_json
+ ).as_json
end
end
From 0d13e30ad2579a9fc55f1b57c80cf9a9a89b1491 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Mon, 16 Jul 2018 19:21:27 +0200
Subject: [PATCH 027/196] Display trending hashtags on admin dashboard (#8038)
---
app/controllers/admin/dashboard_controller.rb | 1 +
app/models/trending_tags.rb | 27 +++++++++++++++++++
app/views/admin/dashboard/index.html.haml | 9 +++++++
3 files changed, 37 insertions(+)
diff --git a/app/controllers/admin/dashboard_controller.rb b/app/controllers/admin/dashboard_controller.rb
index af1ac7b5e..7be753c9b 100644
--- a/app/controllers/admin/dashboard_controller.rb
+++ b/app/controllers/admin/dashboard_controller.rb
@@ -27,6 +27,7 @@ module Admin
@saml_enabled = ENV['SAML_ENABLED'] == 'true'
@pam_enabled = ENV['PAM_ENABLED'] == 'true'
@hidden_service = ENV['ALLOW_ACCESS_TO_HIDDEN_SERVICE'] == 'true'
+ @trending_hashtags = TrendingTags.get(7)
end
private
diff --git a/app/models/trending_tags.rb b/app/models/trending_tags.rb
index c3641d7fd..b11f35292 100644
--- a/app/models/trending_tags.rb
+++ b/app/models/trending_tags.rb
@@ -1,7 +1,10 @@
# frozen_string_literal: true
class TrendingTags
+ KEY = 'trending_tags'
EXPIRE_HISTORY_AFTER = 7.days.seconds
+ EXPIRE_TRENDS_AFTER = 1.day.seconds
+ THRESHOLD = 5
class << self
def record_use!(tag, account, at_time = Time.now.utc)
@@ -9,6 +12,14 @@ class TrendingTags
increment_historical_use!(tag.id, at_time)
increment_unique_use!(tag.id, account.id, at_time)
+ increment_vote!(tag.id, at_time)
+ end
+
+ def get(limit)
+ key = "#{KEY}:#{Time.now.utc.beginning_of_day.to_i}"
+ tag_ids = redis.zrevrange(key, 0, limit).map(&:to_i)
+ tags = Tag.where(id: tag_ids).to_a.map { |tag| [tag.id, tag] }.to_h
+ tag_ids.map { |tag_id| tags[tag_id] }.compact
end
private
@@ -25,6 +36,22 @@ class TrendingTags
redis.expire(key, EXPIRE_HISTORY_AFTER)
end
+ def increment_vote!(tag_id, at_time)
+ key = "#{KEY}:#{at_time.beginning_of_day.to_i}"
+ expected = redis.pfcount("activity:tags:#{tag_id}:#{(at_time - 1.day).beginning_of_day.to_i}:accounts").to_f
+ expected = 1.0 if expected.zero?
+ observed = redis.pfcount("activity:tags:#{tag_id}:#{at_time.beginning_of_day.to_i}:accounts").to_f
+
+ if expected > observed || observed < THRESHOLD
+ redis.zrem(key, tag_id.to_s)
+ else
+ score = ((observed - expected)**2) / expected
+ redis.zadd(key, score, tag_id.to_s)
+ end
+
+ redis.expire(key, EXPIRE_TRENDS_AFTER)
+ end
+
def disallowed_hashtags
return @disallowed_hashtags if defined?(@disallowed_hashtags)
diff --git a/app/views/admin/dashboard/index.html.haml b/app/views/admin/dashboard/index.html.haml
index 50004de33..41a0ee5a1 100644
--- a/app/views/admin/dashboard/index.html.haml
+++ b/app/views/admin/dashboard/index.html.haml
@@ -138,3 +138,12 @@
%span.pull-right.positive-hint= fa_icon 'check fw'
- else
%span.pull-right.negative-hint= fa_icon 'times fw'
+
+ .dashboard__widgets__trends
+ %div
+ %h4= t 'admin.dashboard.trends'
+ %ul
+ - @trending_hashtags.each do |tag|
+ %li
+ = link_to "##{tag.name}", web_url("timelines/tag/#{tag.name}")
+ %span.pull-right= number_with_delimiter(tag.history[0]['accounts'].to_i)
From 8241f162dfa4f7c2cfe79d6f18ddcbd2de4def0c Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Mon, 16 Jul 2018 19:51:16 +0200
Subject: [PATCH 028/196] Fix tag usage display on admin dashboard
---
app/views/admin/dashboard/index.html.haml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/views/admin/dashboard/index.html.haml b/app/views/admin/dashboard/index.html.haml
index 41a0ee5a1..1996eef4d 100644
--- a/app/views/admin/dashboard/index.html.haml
+++ b/app/views/admin/dashboard/index.html.haml
@@ -146,4 +146,4 @@
- @trending_hashtags.each do |tag|
%li
= link_to "##{tag.name}", web_url("timelines/tag/#{tag.name}")
- %span.pull-right= number_with_delimiter(tag.history[0]['accounts'].to_i)
+ %span.pull-right= number_with_delimiter(tag.history[0][:accounts].to_i)
From 69c34f34382ee2f373e60ee705c8b3685fa77b11 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Mon, 16 Jul 2018 19:54:14 +0200
Subject: [PATCH 029/196] Fix number of results returned from TrendingTags.get
---
app/models/trending_tags.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/models/trending_tags.rb b/app/models/trending_tags.rb
index b11f35292..c559651c6 100644
--- a/app/models/trending_tags.rb
+++ b/app/models/trending_tags.rb
@@ -17,7 +17,7 @@ class TrendingTags
def get(limit)
key = "#{KEY}:#{Time.now.utc.beginning_of_day.to_i}"
- tag_ids = redis.zrevrange(key, 0, limit).map(&:to_i)
+ tag_ids = redis.zrevrange(key, 0, limit - 1).map(&:to_i)
tags = Tag.where(id: tag_ids).to_a.map { |tag| [tag.id, tag] }.to_h
tag_ids.map { |tag_id| tags[tag_id] }.compact
end
From 2bcdfcdee3551a81a5e23b30d3f5bc54c2dcf39e Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Tue, 17 Jul 2018 00:15:17 +0200
Subject: [PATCH 030/196] Add missing translation for admin dashboard trends
section (#8040)
---
config/locales/en.yml | 1 +
1 file changed, 1 insertion(+)
diff --git a/config/locales/en.yml b/config/locales/en.yml
index e0a2c9f82..f89f89959 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -223,6 +223,7 @@ en:
space: Space usage
title: Dashboard
total_users: users in total
+ trends: Trends
week_interactions: interactions this week
week_users_active: active this week
week_users_new: users this week
From 3c3cf7e208576266436b311945e57e8d64faee39 Mon Sep 17 00:00:00 2001
From: abcang
Date: Tue, 17 Jul 2018 22:29:33 +0900
Subject: [PATCH 031/196] Update supported Node.js version (#8041)
---
config/webpack/production.js | 2 +-
package.json | 5 ++---
yarn.lock | 20 +-------------------
3 files changed, 4 insertions(+), 23 deletions(-)
diff --git a/config/webpack/production.js b/config/webpack/production.js
index 58c7fa69a..4966807a1 100644
--- a/config/webpack/production.js
+++ b/config/webpack/production.js
@@ -8,7 +8,7 @@ const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPl
const OfflinePlugin = require('offline-plugin');
const { publicPath } = require('./configuration.js');
const path = require('path');
-const { URL } = require('whatwg-url');
+const { URL } = require('url');
let compressionAlgorithm;
try {
diff --git a/package.json b/package.json
index fdd8c3642..b0cdf562d 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
"name": "mastodon",
"license": "AGPL-3.0-or-later",
"engines": {
- "node": ">=6"
+ "node": ">=8"
},
"scripts": {
"postversion": "git push --tags",
@@ -122,8 +122,7 @@
"webpack-cli": "^3.0.8",
"webpack-manifest-plugin": "^2.0.3",
"webpack-merge": "^4.1.3",
- "websocket.js": "^0.1.12",
- "whatwg-url": "^6.4.1"
+ "websocket.js": "^0.1.12"
},
"devDependencies": {
"babel-eslint": "^8.2.6",
diff --git a/yarn.lock b/yarn.lock
index 423623300..2c257ff0a 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -4858,10 +4858,6 @@ lodash.mergewith@^4.6.0:
version "4.6.1"
resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz#639057e726c3afbdb3e7d42741caa8d6e4335927"
-lodash.sortby@^4.7.0:
- version "4.7.0"
- resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
-
lodash.tail@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/lodash.tail/-/lodash.tail-4.1.1.tgz#d2333a36d9e7717c8ad2f7cacafec7c32b444664"
@@ -8173,12 +8169,6 @@ tough-cookie@~2.3.0, tough-cookie@~2.3.3:
dependencies:
punycode "^1.4.1"
-tr46@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09"
- dependencies:
- punycode "^2.1.0"
-
tr46@~0.0.3:
version "0.0.3"
resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
@@ -8469,7 +8459,7 @@ webidl-conversions@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
-webidl-conversions@^4.0.0, webidl-conversions@^4.0.2:
+webidl-conversions@^4.0.0:
version "4.0.2"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
@@ -8645,14 +8635,6 @@ whatwg-url@^4.3.0:
tr46 "~0.0.3"
webidl-conversions "^3.0.0"
-whatwg-url@^6.4.1:
- version "6.5.0"
- resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8"
- dependencies:
- lodash.sortby "^4.7.0"
- tr46 "^1.0.1"
- webidl-conversions "^4.0.2"
-
whet.extend@~0.9.9:
version "0.9.9"
resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1"
From f6910fba02c8a99dcad901c193be08d06a65c1c6 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Tue, 17 Jul 2018 18:54:07 +0200
Subject: [PATCH 032/196] Ensure container of React components has full width
(#8043)
Fix #8018
---
app/javascript/styles/mastodon/stream_entries.scss | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/app/javascript/styles/mastodon/stream_entries.scss b/app/javascript/styles/mastodon/stream_entries.scss
index 9188c2206..f4d6e237f 100644
--- a/app/javascript/styles/mastodon/stream_entries.scss
+++ b/app/javascript/styles/mastodon/stream_entries.scss
@@ -2,6 +2,10 @@
clear: both;
box-shadow: 0 0 15px rgba($base-shadow-color, 0.2);
+ div[data-component] {
+ width: 100%;
+ }
+
.entry {
background: $simple-background-color;
From 6277a6db2a70b798aed71ff7e722d23b975182cd Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Tue, 17 Jul 2018 21:44:11 +0200
Subject: [PATCH 033/196] Hide "A look inside" in mobile layout on frontpage
(#8044)
---
app/javascript/styles/mastodon/about.scss | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/javascript/styles/mastodon/about.scss b/app/javascript/styles/mastodon/about.scss
index 19e14fe95..fefb03407 100644
--- a/app/javascript/styles/mastodon/about.scss
+++ b/app/javascript/styles/mastodon/about.scss
@@ -923,7 +923,7 @@ $small-breakpoint: 960px;
}
@media screen and (max-width: $column-breakpoint) {
- height: 90vh;
+ display: none;
}
}
From 7e638043b953b80ee0af11dc62d87eed14e98c98 Mon Sep 17 00:00:00 2001
From: Yamagishi Kazutoshi
Date: Wed, 18 Jul 2018 15:38:35 +0900
Subject: [PATCH 034/196] Weblate translations (2018-07-18) (#8047)
* Translated using Weblate (Italian)
Currently translated at 100.0% (98 of 98 strings)
Translation: Mastodon/Doorkeeper
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/it/
* Translated using Weblate (Slovak)
Currently translated at 100.0% (82 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/sk/
* Translated using Weblate (Danish)
Currently translated at 100.0% (306 of 306 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/da/
* Translated using Weblate (Occitan)
Currently translated at 100.0% (82 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/oc/
* Translated using Weblate (Occitan)
Currently translated at 99.8% (642 of 643 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/oc/
* Translated using Weblate (Slovak)
Currently translated at 97.2% (625 of 643 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/sk/
* Translated using Weblate (Slovak)
Currently translated at 100.0% (306 of 306 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/sk/
* Translated using Weblate (Czech)
Currently translated at 5.1% (5 of 98 strings)
Translation: Mastodon/Doorkeeper
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/cs/
* Translated using Weblate (Czech)
Currently translated at 100.0% (306 of 306 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/cs/
* Translated using Weblate (Italian)
Currently translated at 97.5% (80 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/it/
* Translated using Weblate (Italian)
Currently translated at 100.0% (306 of 306 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/it/
* Translated using Weblate (Italian)
Currently translated at 83.5% (537 of 643 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/it/
* Translated using Weblate (Esperanto)
Currently translated at 99.8% (642 of 643 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/eo/
* Translated using Weblate (Esperanto)
Currently translated at 100.0% (98 of 98 strings)
Translation: Mastodon/Doorkeeper
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/eo/
* Translated using Weblate (Esperanto)
Currently translated at 98.7% (81 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/eo/
* Translated using Weblate (Galician)
Currently translated at 99.8% (661 of 662 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/gl/
* Translated using Weblate (Japanese)
Currently translated at 95.1% (78 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/ja/
* Translated using Weblate (Persian)
Currently translated at 98.9% (655 of 662 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/fa/
* Translated using Weblate (Japanese)
Currently translated at 98.7% (654 of 662 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Japanese)
Currently translated at 98.9% (655 of 662 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Japanese)
Currently translated at 99.0% (656 of 662 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Japanese)
Currently translated at 99.2% (657 of 662 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Danish)
Currently translated at 100.0% (82 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/da/
* Translated using Weblate (Danish)
Currently translated at 77.9% (516 of 662 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/da/
* Translated using Weblate (Danish)
Currently translated at 74.1% (46 of 62 strings)
Translation: Mastodon/Devise
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/devise/da/
* Translated using Weblate (Slovak)
Currently translated at 95.6% (633 of 662 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/sk/
* Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (306 of 306 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/pt_BR/
* Translated using Weblate (Portuguese (Brazil))
Currently translated at 99.8% (661 of 662 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/pt_BR/
* Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (82 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/pt_BR/
* Translated using Weblate (Japanese)
Currently translated at 99.3% (658 of 662 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Slovak)
Currently translated at 96.2% (637 of 662 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/sk/
* Translated using Weblate (Greek)
Currently translated at 100.0% (306 of 306 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/el/
* Translated using Weblate (Greek)
Currently translated at 99.8% (661 of 662 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/el/
* Translated using Weblate (Japanese)
Currently translated at 99.5% (659 of 662 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Japanese)
Currently translated at 99.5% (659 of 662 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Persian)
Currently translated at 99.6% (660 of 662 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/fa/
* Translated using Weblate (Occitan)
Currently translated at 99.6% (660 of 662 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/oc/
* Translated using Weblate (Occitan)
Currently translated at 100.0% (306 of 306 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/oc/
* Translated using Weblate (Japanese)
Currently translated at 99.5% (660 of 663 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Persian)
Currently translated at 99.6% (661 of 663 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/fa/
* Translated using Weblate (Portuguese (Brazil))
Currently translated at 99.8% (662 of 663 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/pt_BR/
* Translated using Weblate (Greek)
Currently translated at 99.8% (662 of 663 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/el/
* Translated using Weblate (Occitan)
Currently translated at 99.6% (661 of 663 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/oc/
* yarn manage:translations && i18n-tasks normalize
* revert db/schema.rb
---
app/javascript/mastodon/locales/cs.json | 36 +++++++++++-----------
app/javascript/mastodon/locales/da.json | 2 +-
app/javascript/mastodon/locales/el.json | 2 +-
app/javascript/mastodon/locales/it.json | 4 +--
app/javascript/mastodon/locales/oc.json | 2 +-
app/javascript/mastodon/locales/pt-BR.json | 2 +-
app/javascript/mastodon/locales/sk.json | 4 +--
config/locales/da.yml | 22 +++++++++++++
config/locales/devise.da.yml | 2 ++
config/locales/doorkeeper.cs.yml | 7 +++++
config/locales/doorkeeper.eo.yml | 30 +++++++++++++++---
config/locales/doorkeeper.it.yml | 1 +
config/locales/el.yml | 21 +++++++++++++
config/locales/eo.yml | 11 +++++++
config/locales/fa.yml | 29 +++++++++++++++++
config/locales/gl.yml | 19 ++++++++++++
config/locales/it.yml | 2 ++
config/locales/ja.yml | 22 +++++++++++++
config/locales/oc.yml | 28 +++++++++++++++++
config/locales/pt-BR.yml | 29 +++++++++++++++++
config/locales/simple_form.da.yml | 2 ++
config/locales/simple_form.eo.yml | 4 +++
config/locales/simple_form.it.yml | 2 ++
config/locales/simple_form.ja.yml | 3 +-
config/locales/simple_form.oc.yml | 6 +++-
config/locales/simple_form.pt-BR.yml | 4 +++
config/locales/simple_form.sk.yml | 1 +
config/locales/sk.yml | 14 +++++++++
28 files changed, 279 insertions(+), 32 deletions(-)
diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json
index 747d09798..b0f9cd524 100644
--- a/app/javascript/mastodon/locales/cs.json
+++ b/app/javascript/mastodon/locales/cs.json
@@ -2,28 +2,28 @@
"account.badges.bot": "Robot",
"account.block": "Blokovat @{name}",
"account.block_domain": "Skrýt vše z {domain}",
- "account.blocked": "Blocked",
- "account.direct": "Direct message @{name}",
- "account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
- "account.domain_blocked": "Domain hidden",
+ "account.blocked": "Blokován/a",
+ "account.direct": "Přímá zpráva pro uživatele @{name}",
+ "account.disclaimer_full": "Níže uvedené informace nemusejí zcela odrážet profil uživatele.",
+ "account.domain_blocked": "Doména skryta",
"account.edit_profile": "Uprav profil",
"account.follow": "Sleduj",
"account.followers": "Sledovatelé",
"account.follows": "Sleduje",
- "account.follows_you": "Follows you",
- "account.hide_reblogs": "Hide boosts from @{name}",
- "account.media": "Media",
- "account.mention": "Mention @{name}",
- "account.moved_to": "{name} has moved to:",
- "account.mute": "Mute @{name}",
- "account.mute_notifications": "Mute notifications from @{name}",
- "account.muted": "Muted",
- "account.posts": "Toots",
- "account.posts_with_replies": "Toots and replies",
- "account.report": "Report @{name}",
- "account.requested": "Awaiting approval. Click to cancel follow request",
- "account.share": "Share @{name}'s profile",
- "account.show_reblogs": "Show boosts from @{name}",
+ "account.follows_you": "Sleduje vás",
+ "account.hide_reblogs": "Skrýt povýšení od uživatele @{name}",
+ "account.media": "Média",
+ "account.mention": "Zmínit uživatele @{name}",
+ "account.moved_to": "{name} se přesunul/a na:",
+ "account.mute": "Ignorovat uživatele @{name}",
+ "account.mute_notifications": "Skrýt oznámení od uživatele @{name}",
+ "account.muted": "Ztišen/a",
+ "account.posts": "Tooty",
+ "account.posts_with_replies": "Tooty s odpověďmi",
+ "account.report": "Nahlásit uživatele @{name}",
+ "account.requested": "Požadavek čeká na schválení. Kliknutím zrušíte požadavek o sledování",
+ "account.share": "Sdílet profil uživatele @{name}",
+ "account.show_reblogs": "Zobrazit povýšení od uživatele @{name}",
"account.unblock": "Unblock @{name}",
"account.unblock_domain": "Unhide {domain}",
"account.unfollow": "Unfollow",
diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json
index 37b5e73ee..90b88380a 100644
--- a/app/javascript/mastodon/locales/da.json
+++ b/app/javascript/mastodon/locales/da.json
@@ -166,7 +166,7 @@
"navigation_bar.domain_blocks": "Skjulte domæner",
"navigation_bar.edit_profile": "Rediger profil",
"navigation_bar.favourites": "Favoritter",
- "navigation_bar.filters": "Muted words",
+ "navigation_bar.filters": "Dæmpede ord",
"navigation_bar.follow_requests": "Følgeanmodninger",
"navigation_bar.info": "Om denne instans",
"navigation_bar.keyboard_shortcuts": "Hurtigtast",
diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json
index a34d7061d..447d68b3f 100644
--- a/app/javascript/mastodon/locales/el.json
+++ b/app/javascript/mastodon/locales/el.json
@@ -166,7 +166,7 @@
"navigation_bar.domain_blocks": "Κρυφοί τομείς",
"navigation_bar.edit_profile": "Επεξεργασία προφίλ",
"navigation_bar.favourites": "Αγαπημένα",
- "navigation_bar.filters": "Muted words",
+ "navigation_bar.filters": "Αποσιωπημένες λέξεις",
"navigation_bar.follow_requests": "Αιτήματα ακολούθησης",
"navigation_bar.info": "Extended information",
"navigation_bar.keyboard_shortcuts": "Συντομεύσεις",
diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json
index b20263df6..e16f9e2a0 100644
--- a/app/javascript/mastodon/locales/it.json
+++ b/app/javascript/mastodon/locales/it.json
@@ -166,7 +166,7 @@
"navigation_bar.domain_blocks": "Domini nascosti",
"navigation_bar.edit_profile": "Modifica profilo",
"navigation_bar.favourites": "Apprezzati",
- "navigation_bar.filters": "Muted words",
+ "navigation_bar.filters": "Parole silenziate",
"navigation_bar.follow_requests": "Richieste di amicizia",
"navigation_bar.info": "Informazioni estese",
"navigation_bar.keyboard_shortcuts": "Tasti di scelta rapida",
@@ -288,7 +288,7 @@
"tabs_bar.local_timeline": "Locale",
"tabs_bar.notifications": "Notifiche",
"tabs_bar.search": "Cerca",
- "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+ "trends.count_by_accounts": "{count} {rawCount, plural, one {persona ne sta} other {persone ne stanno}} parlando",
"ui.beforeunload": "La bozza andrà persa se esci da Mastodon.",
"upload_area.title": "Trascina per caricare",
"upload_button.label": "Aggiungi file multimediale",
diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json
index 2461eaac2..eff880165 100644
--- a/app/javascript/mastodon/locales/oc.json
+++ b/app/javascript/mastodon/locales/oc.json
@@ -243,7 +243,7 @@
"search_popout.tips.full_text": "Un tèxte simple que tòrna los estatuts qu’avètz escriches, mes en favorits, partejats, o ont sètz mencionat, e tanben los noms d’utilizaires, escais-noms e etiquetas que correspondonas.",
"search_popout.tips.hashtag": "etiqueta",
"search_popout.tips.status": "estatut",
- "search_popout.tips.text": "Lo tèxt brut tòrna escais, noms d’utilizaire e etiquetas correspondents",
+ "search_popout.tips.text": "Lo tèxte brut tòrna escais, noms d’utilizaire e etiquetas correspondents",
"search_popout.tips.user": "utilizaire",
"search_results.accounts": "Gents",
"search_results.hashtags": "Etiquetas",
diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json
index f05966c96..f820d9cf9 100644
--- a/app/javascript/mastodon/locales/pt-BR.json
+++ b/app/javascript/mastodon/locales/pt-BR.json
@@ -115,7 +115,7 @@
"follow_request.authorize": "Autorizar",
"follow_request.reject": "Rejeitar",
"getting_started.developers": "Desenvolvedores",
- "getting_started.documentation": "Documentation",
+ "getting_started.documentation": "Documentação",
"getting_started.find_friends": "Encontre amizades do Twitter",
"getting_started.heading": "Primeiros passos",
"getting_started.invite": "Convide pessoas",
diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json
index 66e312181..24ab1f83a 100644
--- a/app/javascript/mastodon/locales/sk.json
+++ b/app/javascript/mastodon/locales/sk.json
@@ -166,7 +166,7 @@
"navigation_bar.domain_blocks": "Skryté domény",
"navigation_bar.edit_profile": "Upraviť profil",
"navigation_bar.favourites": "Obľúbené",
- "navigation_bar.filters": "Muted words",
+ "navigation_bar.filters": "Utĺmené slová",
"navigation_bar.follow_requests": "Žiadosti o sledovanie",
"navigation_bar.info": "O tomto Mastodon serveri",
"navigation_bar.keyboard_shortcuts": "Klávesové skratky",
@@ -257,7 +257,7 @@
"status.direct": "Súkromná správa @{name}",
"status.embed": "Vložiť",
"status.favourite": "Páči sa mi",
- "status.filtered": "Filtered",
+ "status.filtered": "Filtrované",
"status.load_more": "Ukáž viac",
"status.media_hidden": "Skryté médiá",
"status.mention": "Spomeň @{name}",
diff --git a/config/locales/da.yml b/config/locales/da.yml
index f91ba00d5..e299349f5 100644
--- a/config/locales/da.yml
+++ b/config/locales/da.yml
@@ -206,6 +206,22 @@ da:
update_failed_msg: Kunne ikke opdatere det humørikon
updated_msg: Humørikon succesfuldt opdateret!
upload: Læg op
+ dashboard:
+ backlog: ophobede jobs
+ config: Konfiguration
+ feature_deletions: Konto sletninger
+ feature_invites: Invitations links
+ feature_registrations: Registreringer
+ features: Funktioner
+ open_reports: åbne anmeldelser
+ recent_users: Seneste brugere
+ software: Software
+ space: Brugt lagerplads
+ title: Betjeningspanel
+ total_users: samlede antal brugere
+ week_interactions: interaktioner denne uge
+ week_users_active: aktive denne uge
+ week_users_new: brugere denne uge
domain_blocks:
add_new: Tilføj ny
created_msg: Domæne blokade bliver nu behandlet
@@ -257,6 +273,8 @@ da:
title: Filtre
title: Invitationer
relays:
+ add_new: Tilføj nyt relay
+ inbox_url: Link til relay
setup: Opsæt en videresendelses forbindelse
status: Status
title: Videresendelser
@@ -473,8 +491,12 @@ da:
expires_at: Udløber
uses: Benyttelser
title: Inviter folk
+ lists:
+ errors:
+ limit: Du har nået det højeste antal lister
media_attachments:
validations:
+ images_and_video: Kan ikke vedhæfte en video til en status der allerede har billeder
too_many: Kan ikke vedhæfte mere en 4 filer
migrations:
acct: username@domain af den nye konto
diff --git a/config/locales/devise.da.yml b/config/locales/devise.da.yml
index 7c6ac8b19..6660aaae0 100644
--- a/config/locales/devise.da.yml
+++ b/config/locales/devise.da.yml
@@ -18,6 +18,7 @@ da:
confirmation_instructions:
action: Bekræft email adresse
explanation: Du har oprettet en konto på %{host} med denne email adresse. Du er et klik fra at aktivere din konto. Hvis du ikke har oprettet dig, ignorer venligst denne email.
+ extra_html: Tjek også reglerne for instansen og vores betingelser .
subject: 'Mastodon: Bekræftelses instrukser for %{instance}'
title: Bekræft email adresse
email_changed:
@@ -40,6 +41,7 @@ da:
title: Kodeordet er blevet nulstillet
registrations:
signed_up: Velkommen! Du har nu tilmeldt dig.
+ update_needs_confirmation: Du har succesfuldt opdateret din konto, men vi er nødt til at bekræfte din email adresse. Tjek venligst din email og følg bekræftelses linket for at bekræfte din nye email adresse. Tjek venligst din spam mappe hvis du ikke har modtaget denne email.
updated: Din konto er nu blevet opdateret.
sessions:
already_signed_out: Du er nu logget ud.
diff --git a/config/locales/doorkeeper.cs.yml b/config/locales/doorkeeper.cs.yml
index 876f448c7..f8b7ba46c 100644
--- a/config/locales/doorkeeper.cs.yml
+++ b/config/locales/doorkeeper.cs.yml
@@ -4,3 +4,10 @@ cs:
attributes:
doorkeeper/application:
name: Název aplikace
+ website: Stránka aplikace
+ doorkeeper:
+ applications:
+ buttons:
+ authorize: Ověřit
+ cancel: Zrušit
+ destroy: Zničit
diff --git a/config/locales/doorkeeper.eo.yml b/config/locales/doorkeeper.eo.yml
index 9713c462c..e80ba3236 100644
--- a/config/locales/doorkeeper.eo.yml
+++ b/config/locales/doorkeeper.eo.yml
@@ -114,7 +114,29 @@ eo:
application:
title: OAuth-a rajtigo bezonata
scopes:
- follow: sekvi, bloki, malbloki kaj malsekvi kontojn
- push: ricevi puŝ-sciigojn por via konto
- read: legi la datumojn de via konto
- write: mesaĝi kiel vi
+ follow: ŝanĝi rilatojn al aliaj kontoj
+ push: ricevi viajn puŝ-sciigojn
+ read: legi ĉiujn datumojn de via konto
+ read:accounts: vidi la informojn de la konto
+ read:blocks: vidi viajn blokojn
+ read:favourites: vidi viajn stelumojn
+ read:filters: vidi viajn filtrilojn
+ read:follows: vidi viajn sekvatojn
+ read:lists: vidi viajn listojn
+ read:mutes: vidi viajn silentigojn
+ read:notifications: vidi viajn sciigojn
+ read:reports: vidi viajn signalojn
+ read:search: serĉi vianome
+ read:statuses: vidi ĉiujn mesaĝojn
+ write: ŝanĝi ĉiujn datumojn de via konto
+ write:accounts: ŝanĝi vian profilon
+ write:blocks: bloki kontojn kaj domajnojn
+ write:favourites: stelumitaj mesaĝoj
+ write:filters: krei filtrilojn
+ write:follows: sekvi homojn
+ write:lists: krei listojn
+ write:media: alŝuti aŭdovidaĵojn
+ write:mutes: silentigi homojn kaj konversaciojn
+ write:notifications: forigi viajn sciigojn
+ write:reports: signali aliajn homojn
+ write:statuses: publikigi mesaĝojn
diff --git a/config/locales/doorkeeper.it.yml b/config/locales/doorkeeper.it.yml
index 37b6f1013..a76130bb9 100644
--- a/config/locales/doorkeeper.it.yml
+++ b/config/locales/doorkeeper.it.yml
@@ -138,4 +138,5 @@ it:
write:media: caricare media
write:mutes: silenziare persone e conversazioni
write:notifications: cancellare le tue notifiche
+ write:reports: fare rapporto su altre persone
write:statuses: pubblicare status
diff --git a/config/locales/el.yml b/config/locales/el.yml
index cc65b1958..fc73b60d4 100644
--- a/config/locales/el.yml
+++ b/config/locales/el.yml
@@ -206,6 +206,27 @@ el:
update_failed_msg: Αδυναμία ενημέρωσης του emoji
updated_msg: Επιτυχής ενημέρωση του Emoji!
upload: Ανέβασμα
+ dashboard:
+ backlog: χρονοκαθυστερημένες εργασίες
+ config: Διαμόρφωση
+ feature_deletions: Διαγραφή λογαριασμών
+ feature_invites: Σύνδεσμοι προσκλήσεων
+ feature_registrations: Εγγραφές
+ feature_relay: Ανταποκριτής ομοσπονδίας
+ features: Λειτουργίες
+ hidden_service: Ομοσπονδία με κρυμμένες υπηρεσίες
+ open_reports: ανοιχτές καταγγελίες
+ recent_users: Πρόσφατοι χρήστες
+ search: Αναζήτηση πλήρους κειμένου
+ single_user_mode: Λειτουργία μοναδιαίου χρήστη
+ software: Λογισμικό
+ space: Κατανάλωση χώρου
+ title: Ταμπλό
+ total_users: χρήστες συνολικά
+ trends: Τάσεις
+ week_interactions: αλληλεπιδράσεις αυτή την εβδομάδα
+ week_users_active: ενεργοί αυτή την εβδομάδα
+ week_users_new: χρήστες αυτή την εβδομάδα
domain_blocks:
add_new: Προσθήκη νέου
created_msg: Ο αποκλεισμός τομέα είναι υπό επεξεργασία
diff --git a/config/locales/eo.yml b/config/locales/eo.yml
index 389819f7f..156088af9 100644
--- a/config/locales/eo.yml
+++ b/config/locales/eo.yml
@@ -261,6 +261,14 @@ eo:
expired: Eksvalida
title: Filtri
title: Invitoj
+ relays:
+ add_new: Aldoni novan ripetilon
+ description_html: "Fratara ripetilo estas survoja servilo, kiu interŝanĝas grandan kvanton de publikaj mesaĝoj inter serviloj, kiuj abonas kaj publikigas al ĝi. Ĝi povas helpi etajn kaj mezgrandajn servilojn malkovri enhavon de la fediverse , kio normale postulus al lokaj uzantoj mane sekvi homojn de foraj serviloj."
+ enable_hint: Post ebligo, via servilo abonos ĉiujn publikajn mesaĝojn de tiu ripetilo, kaj komencos sendi publikajn mesaĝojn de la servilo al ĝi.
+ inbox_url: URL de la ripetilo
+ setup: Agordi konekton al ripetilo
+ status: Stato
+ title: Ripetiloj
report_notes:
created_msg: Signala noto sukcese kreita!
destroyed_msg: Signala noto sukcese forigita!
@@ -316,6 +324,9 @@ eo:
peers_api_enabled:
desc_html: Nomoj de domajnoj, kiujn ĉi tiu nodo renkontis en la fediverse
title: Publikigi liston de malkovritaj nodoj
+ preview_sensitive_media:
+ desc_html: Antaŭvido de ligiloj en aliaj retejoj montros bildeton eĉ se la aŭdovidaĵo estas markita kiel tikla
+ title: Montri tiklajn aŭdovidaĵojn en la antaŭvidoj de OpenGraph
registrations:
closed_message:
desc_html: Montrita sur la hejma paĝo kiam registriĝoj estas fermitaj. Vi povas uzi HTML-etikedojn
diff --git a/config/locales/fa.yml b/config/locales/fa.yml
index 89ed2bbfb..cfd4a9838 100644
--- a/config/locales/fa.yml
+++ b/config/locales/fa.yml
@@ -206,6 +206,27 @@ fa:
update_failed_msg: این شکلک نتوانست بهروز شود
updated_msg: شکلک با موفقیت بهروز شد!
upload: بارگذاری
+ dashboard:
+ backlog: کارهای باقیمانده
+ config: پیکربندی
+ feature_deletions: حسابهای حذفشده
+ feature_invites: دعوتنامهها
+ feature_registrations: ثبتنامها
+ feature_relay: رله
+ features: ویژگیها
+ hidden_service: ارتباط میانسروری با سرویسهای نهفته
+ open_reports: گزارشهای فعال
+ recent_users: کاربران تازه
+ search: جستجوی متنی
+ single_user_mode: حالت تککاربره
+ software: نرمافزار
+ space: فضای مصرفشده
+ title: ابزارهای مدیریت
+ total_users: شمار کاربران
+ trends: هشتگهای پرکاربرد
+ week_interactions: فعالیتها در این هفته
+ week_users_active: کاربران فعال هفتهٔ اخیر
+ week_users_new: کاربران هفتهٔ اخیر
domain_blocks:
add_new: افزودن تازه
created_msg: مسدودکردن دامین در حال انجام است
@@ -261,6 +282,14 @@ fa:
expired: منقضیشده
title: فیلتر
title: دعوتها
+ relays:
+ add_new: افزودن رلهٔ تازه
+ description_html: یک رلهٔ میانسروری (federation relay) یک سرور میانجی است که حجم زیادی از بوقهای عمومی را بین سرورهای گوناگونی که عضوش میشوند جابهجا میکند. رلهها به سرورهای کوچک و متوسط کمک میکنند تا مطالب عمومی بیشتری را بیابند. اگر رله نباشد، این مطالب عمومی تنها وقتی پیدا میشوند که کاربران محلی خودشان پیگیر کاربران روی سرورهای دیگر شوند.
+ enable_hint: اگر فعال باشد، سرور شما عضو همهٔ بوقهای عمومیای را که از این رله میآید میگیرد، و بوقهای عمومی این سرور را به آن میفرستند.
+ inbox_url: نشانی رله
+ setup: پیوستن به رلهها
+ status: وضعیت
+ title: رلهها
report_notes:
created_msg: یادداشت گزارش با موفقیت ساخته شد!
destroyed_msg: یادداشت گزارش با موفقیت حذف شد!
diff --git a/config/locales/gl.yml b/config/locales/gl.yml
index fca9b10ec..23e505631 100644
--- a/config/locales/gl.yml
+++ b/config/locales/gl.yml
@@ -206,6 +206,25 @@ gl:
update_failed_msg: Non se puido actualizar ese emoji
updated_msg: Actualizouse correctamente o emoji!
upload: Subir
+ dashboard:
+ config: Axustes
+ feature_deletions: Borrado de contas
+ feature_invites: Ligazóns de convite
+ feature_registrations: Rexistros
+ feature_relay: Repetidores de federación
+ features: Características
+ hidden_service: Federación con servizos ocultos
+ open_reports: informes abertos
+ recent_users: Usuarias recentes
+ search: Busca de texto completo
+ single_user_mode: Modo de usuario individual
+ software: Software
+ space: Uso de espazo
+ title: Taboleiro
+ total_users: total de usuarias
+ week_interactions: interaccións en esta semana
+ week_users_active: activas estas semana
+ week_users_new: usuarias esta semana
domain_blocks:
add_new: Engadir novo
created_msg: Estase a procesar o bloqueo do dominio
diff --git a/config/locales/it.yml b/config/locales/it.yml
index 7478fbab7..0110a488e 100644
--- a/config/locales/it.yml
+++ b/config/locales/it.yml
@@ -158,6 +158,7 @@ it:
create_custom_emoji: "%{name} ha caricato un nuovo emoji %{target}"
create_domain_block: "%{name} ha bloccato il dominio %{target}"
create_email_domain_block: "%{name} ha messo il dominio email %{target} nella blacklist"
+ demote_user: "%{name} ha degradato l'utente %{target}"
destroy_domain_block: "%{name} ha sbloccato il dominio %{target}"
destroy_email_domain_block: "%{name}ha messo il dominio email %{target} nella whitelist"
destroy_status: "%{name} ha eliminato lo status di %{target}"
@@ -238,6 +239,7 @@ it:
domain: Dominio
new:
create: Aggiungi dominio
+ title: Lista nera email
instances:
account_count: Accounts conosciuti
domain_name: Dominio
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index 3af82fb4c..25f6eafc8 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -206,6 +206,25 @@ ja:
update_failed_msg: 絵文字を更新できませんでした
updated_msg: 絵文字の更新に成功しました!
upload: アップロード
+ dashboard:
+ config: 構成
+ feature_deletions: アカウント削除
+ feature_invites: 招待リンク
+ feature_registrations: 新規登録
+ feature_relay: 連合リレー
+ features: 機能
+ open_reports: 未解決のレポート
+ recent_users: 最近登録したユーザー
+ search: 全文検索
+ single_user_mode: シングルユーザーモード
+ software: ソフトウェア
+ space: ディスク使用量
+ title: ダッシュボード
+ total_users: 全ユーザー
+ trends: トレンド
+ week_interactions: 今週の交流数
+ week_users_active: 今週活動した人数
+ week_users_new: 今週登録した人数
domain_blocks:
add_new: 新規追加
created_msg: ドメインブロック処理を完了しました
@@ -263,7 +282,10 @@ ja:
title: 招待
relays:
add_new: リレーを追加
+ description_html: "連合リレー とは、登録しているサーバー間の公開トゥートを仲介するサーバーです。中小規模のサーバーが連合のコンテンツを見つけるのを助けます。 これを使用しない場合、ローカルユーザーがリモートユーザーを手動でフォローする必要があります。"
+ enable_hint: 有効にすると、リレーから全ての公開トゥートを受信するようになり、またこのサーバーの全ての公開トゥートをリレーに送信するようになります。
inbox_url: Relay URL
+ setup: リレー接続を設定する
status: ステータス
title: リレー
report_notes:
diff --git a/config/locales/oc.yml b/config/locales/oc.yml
index 6c56ab1c0..0477f992c 100644
--- a/config/locales/oc.yml
+++ b/config/locales/oc.yml
@@ -207,6 +207,26 @@ oc:
update_failed_msg: Mesa a jorn de l’emoji fracasada
updated_msg: Emoji ben mes a jorn !
upload: Enviar
+ dashboard:
+ config: Configuracion
+ feature_deletions: Supressions de comptes
+ feature_invites: Ligams convidat
+ feature_registrations: Inscripcions
+ feature_relay: Relai de federacion
+ features: Foncionalitats
+ hidden_service: Federacion amb servicis amagats
+ open_reports: Senhalaments dobèrts
+ recent_users: Utilizaires recents
+ search: Recèrca tèxte complèt
+ single_user_mode: Mòde sol utilizaire
+ software: Logicial
+ space: Utilizacion de l’espaci
+ title: Tablèu de bòrd
+ total_users: total dels utilizaires
+ trends: Tendéncias
+ week_interactions: interaccions aquesta setmana
+ week_users_active: actius aquesta setmana
+ week_users_new: utilizaires aquesta setmana
domain_blocks:
add_new: Ajustar
created_msg: Domeni blocat es a èsser tractat
@@ -262,6 +282,14 @@ oc:
expired: Expirats
title: Filtre
title: Convits
+ relays:
+ add_new: Ajustar un nòu relai
+ description_html: Un relai de federacion es un servidor intermediari qu’escàmbia de bèls volumes de tuts publics entre servidors que son abonats e i publican.Pòt ajudar de pichons e mejans servidors a trobar de contenguts del fediverse estant , qu’autrament demandariá als utilizaires locals de s’abonar manualament a d’autres monde marcats sus de servidors alonhats.
+ enable_hint: Un còp activat, vòstre servidor s’abonarà a totes los tuts publics del relai estant, e començarà de mandar sos tuts publics a aqueste d’enlà.
+ inbox_url: URL del relai
+ setup: Configurar una connexion relai
+ status: Estatut
+ title: Relais
report_notes:
created_msg: Nòta de moderacion corrèctament creada !
destroyed_msg: Nòta de moderacion corrèctament suprimida !
diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml
index cb2b12abd..2bff2b469 100644
--- a/config/locales/pt-BR.yml
+++ b/config/locales/pt-BR.yml
@@ -206,6 +206,27 @@ pt-BR:
update_failed_msg: Não foi possível atualizar esse emoji
updated_msg: Emoji atualizado com sucesso!
upload: Enviar
+ dashboard:
+ backlog: Tarefas na fila
+ config: Configuração
+ feature_deletions: Remoção de contas
+ feature_invites: Convites
+ feature_registrations: Registros
+ feature_relay: Repetidor da federação
+ features: Funcionalidades
+ hidden_service: Federação com serviços escondidos
+ open_reports: Denúncias em aberto
+ recent_users: Usuários recentes
+ search: Pesquisa em texto
+ single_user_mode: Modo de usuário único
+ software: Software
+ space: Uso de espaço em disco
+ title: Painel de controle
+ total_users: usuários no total
+ trends: Tendências
+ week_interactions: interações essa semana
+ week_users_active: ativos essa semana
+ week_users_new: usuários essa semana
domain_blocks:
add_new: Adicionar novo
created_msg: Bloqueio de domínio está sendo processado
@@ -261,6 +282,14 @@ pt-BR:
expired: Expirados
title: Filtro
title: Convites
+ relays:
+ add_new: Adicionar novo repetidor
+ description_html: Um repetidor de federação é um servidor intermediário que troca um grande volume de toots públicos entre servidores que se inscrevem e publicam nele. O repetidor pode ser usado para ajudar servidores pequenos e médios a descobrir conteúdo do fediverso , que normalmente precisariam que usuários locais manualmente seguissem outras pessoas em servidores remotos.
+ enable_hint: Uma vez habilitado, seu servidor vai se inscrever para receber todos os toots públicos desse repetidor; E vai começar a enviar todos os toots públicos desse servidor para o repetidor.
+ inbox_url: URL do repetidor
+ setup: Configurar uma conexão de repetidor
+ status: Status
+ title: Repetidores
report_notes:
created_msg: Nota de denúncia criada com sucesso!
destroyed_msg: Nota de denúncia excluída com sucesso!
diff --git a/config/locales/simple_form.da.yml b/config/locales/simple_form.da.yml
index 9d6587776..716ee7e1c 100644
--- a/config/locales/simple_form.da.yml
+++ b/config/locales/simple_form.da.yml
@@ -13,6 +13,7 @@ da:
other: %{count} tegn tilbage
fields: Du kan have op til 4 ting vist som en tabel på din profil
header: PNG, GIF eller JPG. Højest 2MB. Vil blive skaleret ned til 700x335px
+ inbox_url: Kopiere linket fra forsiden af den relay som du ønsker at bruge
irreversible: Filtrerede toots vil forsvinde fulstændigt, selv hvis filteret senere skulle blive fjernet
locale: Sproget på interfacet, emails og push beskeder
locked: Kræver, at du godkender følgere manuelt
@@ -52,6 +53,7 @@ da:
expires_in: Udløber efter
fields: Profil metadata
header: Overskrift
+ inbox_url: Link til relay indbakken
irreversible: Ignorer istedet for at skjule
locale: Sprog på interface
locked: Lås konto
diff --git a/config/locales/simple_form.eo.yml b/config/locales/simple_form.eo.yml
index a46fcc42e..7d73f2553 100644
--- a/config/locales/simple_form.eo.yml
+++ b/config/locales/simple_form.eo.yml
@@ -13,6 +13,7 @@ eo:
other: %{count} signoj restas
fields: Vi povas havi ĝis 4 tabelajn elementojn en via profilo
header: Formato PNG, GIF aŭ JPG. Ĝis 2MB. Estos malgrandigita al 700x335px
+ inbox_url: Kopiu la URL de la ĉefpaĝo de la ripetilo, kiun vi volas uzi
irreversible: Elfiltritaj mesaĝoj malaperos por ĉiam, eĉ se la filtrilo estas poste forigita
locale: La lingvo de la uzant-interfaco, retmesaĝoj kaj puŝ-sciigoj
locked: Vi devos aprobi ĉiun peton de sekvado mane
@@ -24,6 +25,7 @@ eo:
setting_hide_network: Tiuj, kiujn vi sekvas, kaj tiuj, kiuj sekvas vin ne estos videblaj en via profilo
setting_noindex: Influas vian publikan profilon kaj mesaĝajn paĝojn
setting_theme: Influas kiel Mastodon aspektas post ensaluto de ajna aparato.
+ whole_word: Kiam la vorto aŭ frazo estas nur litera aŭ cifera, ĝi estos uzata nur se ĝi kongruas kun la tuta vorto
imports:
data: CSV-dosiero el alia nodo de Mastodon
sessions:
@@ -50,6 +52,7 @@ eo:
expires_in: Eksvalidiĝas post
fields: Profilaj metadatumoj
header: Fonbildo
+ inbox_url: URL de la ripetila enirkesto
irreversible: Forĵeti anstataŭ kaŝi
locale: Interfaca lingvo
locked: Ŝlosi konton
@@ -76,6 +79,7 @@ eo:
type: Importa tipo
username: Uzantnomo
username_or_email: Uzantnomo aŭ Retadreso
+ whole_word: Tuta vorto
interactions:
must_be_follower: Bloki sciigojn de nesekvantoj
must_be_following: Bloki sciigojn de homoj, kiujn vi ne sekvas
diff --git a/config/locales/simple_form.it.yml b/config/locales/simple_form.it.yml
index 185bba205..f6fd891e1 100644
--- a/config/locales/simple_form.it.yml
+++ b/config/locales/simple_form.it.yml
@@ -25,6 +25,7 @@ it:
setting_hide_network: Chi segui e chi segue te non saranno mostrati sul tuo profilo
setting_noindex: Ha effetto sul tuo profilo pubblico e sulle pagine degli status
setting_theme: Ha effetto sul modo in cui Mastodon verrà visualizzato quando sarai collegato da qualsiasi dispositivo.
+ whole_word: Quando la parola chiave o la frase è solo alfanumerica, si applica solo se corrisponde alla parola intera
imports:
data: File CSV esportato da un'altra istanza di Mastodon
sessions:
@@ -77,6 +78,7 @@ it:
type: Tipo importazione
username: Nome utente
username_or_email: Nome utente o email
+ whole_word: Parola intera
interactions:
must_be_follower: Blocca notifiche dai non follower
must_be_following: Blocca notifiche dalle persone che non segui
diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml
index 4fb299981..2bce145cb 100644
--- a/config/locales/simple_form.ja.yml
+++ b/config/locales/simple_form.ja.yml
@@ -11,6 +11,7 @@ ja:
display_name: あと%{count} 文字入力できます。
fields: プロフィールに表として4つまでの項目を表示することができます
header: 2MBまでのPNG、GIF、JPGが利用可能です。 700x335pxまで縮小されます
+ inbox_url: 使用したいリレーサーバーのトップページからURLをコピーします
irreversible: フィルターが後で削除されても、除外されたトゥートは元に戻せなくなります
locale: ユーザーインターフェース、メールやプッシュ通知の言語
locked: フォロワーを手動で承認する必要があります
@@ -48,7 +49,7 @@ ja:
expires_in: 有効期限
fields: プロフィール補足情報
header: ヘッダー
- inbox_url: URL of the relay inbox
+ inbox_url: リレーサーバーの inbox URL
irreversible: 隠すのではなく除外する
locale: 言語
locked: 承認制アカウントにする
diff --git a/config/locales/simple_form.oc.yml b/config/locales/simple_form.oc.yml
index 7d11d0d3f..293ad964a 100644
--- a/config/locales/simple_form.oc.yml
+++ b/config/locales/simple_form.oc.yml
@@ -13,6 +13,7 @@ oc:
other: Demòran encara %{count} caractèrs
fields: Podètz far veire cap a 4 elements sus vòstre perfil
header: PNG, GIF o JPG. Maximum 2 Mo. Serà retalhada en 700x335px
+ inbox_url: Copiatz l’URL de la pagina màger del relai que volètz utilizar
irreversible: Los tuts filtrats desapareisseràn irreversiblament, encara que lo filtre siá suprimit mai tard
locale: La lenga de l’interfàcia d’utilizacion, los messatges e las notificacions
locked: Demanda qu’acceptetz manualament lo mond que vos sègon e botarà la visibilitat de vòstras publicacions coma accessiblas a vòstres seguidors solament
@@ -25,6 +26,7 @@ oc:
setting_hide_network: Vòstre perfil mostrarà pas los que vos sègon e lo monde que seguètz
setting_noindex: Aquò es destinat a vòstre perfil public e vòstra pagina d’estatuts
setting_theme: Aquò càmbia lo tèma grafic de Mastodon quand sètz connectat qual que siasque lo periferic.
+ whole_word: Quand lo mot-clau o frasa es solament alfranumeric, serà pas qu’aplicat se correspond al mot complèt
imports:
data: Fichièr CSV exportat d’una autra instància Mastodon
sessions:
@@ -51,6 +53,7 @@ oc:
expires_in: Expira aprèp
fields: Metadonada del perfil
header: Bandièra
+ inbox_url: URL de la bóstia de recepcion del relai
irreversible: Suprimir allòc de rescondre
locale: Lenga de l’interfàcia
locked: Far venir lo compte privat
@@ -63,7 +66,7 @@ oc:
setting_auto_play_gif: Lectura automatica dels GIFS animats
setting_boost_modal: Afichar una fenèstra de confirmacion abans de partejar un estatut
setting_default_language: Lenga de publicacion
- setting_default_privacy: Confidencialitat de las publicacions
+ setting_default_privacy: Confidencialitat dels tuts
setting_default_sensitive: Totjorn marcar los mèdias coma sensibles
setting_delete_modal: Mostrar una fenèstra de confirmacion abans de suprimir un estatut
setting_display_sensitive_media: Totjorn mostrar los mèdias coma sensibles
@@ -77,6 +80,7 @@ oc:
type: Tipe d’impòrt
username: Nom d’utilizaire
username_or_email: Nom d’utilizaire o corrièl
+ whole_word: Mot complèt
interactions:
must_be_follower: Blocar las notificacions del mond que vos sègon pas
must_be_following: Blocar las notificacions del mond que seguètz pas
diff --git a/config/locales/simple_form.pt-BR.yml b/config/locales/simple_form.pt-BR.yml
index 9b72c7a7a..f6738b73f 100644
--- a/config/locales/simple_form.pt-BR.yml
+++ b/config/locales/simple_form.pt-BR.yml
@@ -13,6 +13,7 @@ pt-BR:
other: %{count} caracteres restantes
fields: Você pode ter até 4 itens exibidos em forma de tabela no seu perfil
header: PNG, GIF or JPG. Arquivos de até 2MB. Eles serão diminuídos para 700x335px
+ inbox_url: Copie a URL da página inicial do repetidor que você quer usar
irreversible: Os toots filtrados vão desaparecer irreversivelmente, mesmo se o filtro for removido depois
locale: O idioma das telas de usuário, e-mails e notificações push
locked: Requer aprovação manual de seguidores
@@ -25,6 +26,7 @@ pt-BR:
setting_hide_network: Quem você segue e quem segue você não serão exibidos no seu perfil
setting_noindex: Afeta seu perfil público e as páginas de suas postagens
setting_theme: Afeta a aparência do Mastodon quando em sua conta em qualquer aparelho.
+ whole_word: Quando a palavra ou frase é inteiramente alfanumérica, ela será aplicada somente se corresponder a palavra inteira
imports:
data: Arquivo CSV exportado de outra instância do Mastodon
sessions:
@@ -51,6 +53,7 @@ pt-BR:
expires_in: Expira em
fields: Metadados do perfil
header: Cabeçalho
+ inbox_url: URL da caixa de entrada do repetidor
irreversible: Ignorar ao invés de esconder
locale: Idioma das telas
locked: Trancar conta
@@ -77,6 +80,7 @@ pt-BR:
type: Tipo de importação
username: Nome de usuário
username_or_email: Nome de usuário ou e-mail
+ whole_word: Palavra inteira
interactions:
must_be_follower: Bloquear notificações de não-seguidores
must_be_following: Bloquear notificações de pessoas que você não segue
diff --git a/config/locales/simple_form.sk.yml b/config/locales/simple_form.sk.yml
index 1fc1c7e69..8064dbdae 100644
--- a/config/locales/simple_form.sk.yml
+++ b/config/locales/simple_form.sk.yml
@@ -14,6 +14,7 @@ sk:
other: Ostáva ti %{count} znakov
fields: Môžeš mať 4 položky na svojom profile zobrazené vo forme tabuľky
header: PNG, GIF alebo JPG. Maximálne 2MB. Bude zmenšený na 700x335px
+ inbox_url: Skopíruj adresu z hlavnej stránky mostíka, ktorý chceš používať
irreversible: Vytriedené príspevky zmiznú nenávratne, aj keď triedenie neskôr zrušíš
locale: Jazyk užívateľského rozhrania, emailových a nástenkových oboznámení
locked: Vyžaduje manuálne schvalovať sledujúcich
diff --git a/config/locales/sk.yml b/config/locales/sk.yml
index 82fba3557..9e2a8fd0c 100644
--- a/config/locales/sk.yml
+++ b/config/locales/sk.yml
@@ -206,6 +206,19 @@ sk:
update_failed_msg: Nebolo možné aktualizovať toto emoji
updated_msg: Emoji bolo úspešne aktualizované!
upload: Nahrať
+ dashboard:
+ config: Nastavenia
+ feature_deletions: Vymazanie účtov
+ feature_invites: Pozvánky
+ feature_registrations: Registrácie
+ feature_relay: Federovací mostík
+ features: Vymoženosti
+ hidden_service: Federácia so skritými službami
+ open_reports: otvorené hlásenia
+ recent_users: Nedávny užívatelia
+ software: Softvér
+ space: Využitie miesta
+ total_users: užívateľov celkovo
domain_blocks:
add_new: Pridať nový
created_msg: Doména je v procese blokovania
@@ -264,6 +277,7 @@ sk:
title: Pozvánky
relays:
add_new: Pridaj novú priechodnú oporu
+ description_html: "Federovací mostík je prechodný server ktorý obmieňa veľké množstvá verejných príspevkov medzi tými servermi ktoré na od neho odoberajú, aj doňho prispievajú. Môže to pomôcť malým a stredným instanciám objavovať federovaný obsah , čo inak vyžaduje aby miestni užívatelia ručne následovali iných ľudí zo vzdialených instancií."
status: Stav
report_notes:
created_msg: Poznámka o nahlásení úspešne vytvorená!
From b62ec00d8783280810497171c11790f7c1474e8f Mon Sep 17 00:00:00 2001
From: Yamagishi Kazutoshi
Date: Wed, 25 Jul 2018 03:47:13 +0900
Subject: [PATCH 035/196] Weblate translations (2018-07-25) (#8065)
* Translated using Weblate (Italian)
Currently translated at 100.0% (98 of 98 strings)
Translation: Mastodon/Doorkeeper
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/it/
* Translated using Weblate (Slovak)
Currently translated at 100.0% (82 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/sk/
* Translated using Weblate (Danish)
Currently translated at 100.0% (306 of 306 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/da/
* Translated using Weblate (Occitan)
Currently translated at 100.0% (82 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/oc/
* Translated using Weblate (Occitan)
Currently translated at 99.8% (642 of 643 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/oc/
* Translated using Weblate (Slovak)
Currently translated at 97.2% (625 of 643 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/sk/
* Translated using Weblate (Slovak)
Currently translated at 100.0% (306 of 306 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/sk/
* Translated using Weblate (Czech)
Currently translated at 5.1% (5 of 98 strings)
Translation: Mastodon/Doorkeeper
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/cs/
* Translated using Weblate (Czech)
Currently translated at 100.0% (306 of 306 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/cs/
* Translated using Weblate (Italian)
Currently translated at 97.5% (80 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/it/
* Translated using Weblate (Italian)
Currently translated at 100.0% (306 of 306 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/it/
* Translated using Weblate (Italian)
Currently translated at 83.5% (537 of 643 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/it/
* Translated using Weblate (Esperanto)
Currently translated at 99.8% (642 of 643 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/eo/
* Translated using Weblate (Esperanto)
Currently translated at 100.0% (98 of 98 strings)
Translation: Mastodon/Doorkeeper
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/eo/
* Translated using Weblate (Esperanto)
Currently translated at 98.7% (81 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/eo/
* Translated using Weblate (Galician)
Currently translated at 99.8% (661 of 662 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/gl/
* Translated using Weblate (Japanese)
Currently translated at 95.1% (78 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/ja/
* Translated using Weblate (Persian)
Currently translated at 98.9% (655 of 662 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/fa/
* Translated using Weblate (Japanese)
Currently translated at 98.7% (654 of 662 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Japanese)
Currently translated at 98.9% (655 of 662 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Japanese)
Currently translated at 99.0% (656 of 662 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Japanese)
Currently translated at 99.2% (657 of 662 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Danish)
Currently translated at 100.0% (82 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/da/
* Translated using Weblate (Danish)
Currently translated at 77.9% (516 of 662 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/da/
* Translated using Weblate (Danish)
Currently translated at 74.1% (46 of 62 strings)
Translation: Mastodon/Devise
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/devise/da/
* Translated using Weblate (Slovak)
Currently translated at 95.6% (633 of 662 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/sk/
* Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (306 of 306 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/pt_BR/
* Translated using Weblate (Portuguese (Brazil))
Currently translated at 99.8% (661 of 662 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/pt_BR/
* Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (82 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/pt_BR/
* Translated using Weblate (Japanese)
Currently translated at 99.3% (658 of 662 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Slovak)
Currently translated at 96.2% (637 of 662 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/sk/
* Translated using Weblate (Greek)
Currently translated at 100.0% (306 of 306 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/el/
* Translated using Weblate (Greek)
Currently translated at 99.8% (661 of 662 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/el/
* Translated using Weblate (Japanese)
Currently translated at 99.5% (659 of 662 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Japanese)
Currently translated at 99.5% (659 of 662 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Persian)
Currently translated at 99.6% (660 of 662 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/fa/
* Translated using Weblate (Occitan)
Currently translated at 99.6% (660 of 662 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/oc/
* Translated using Weblate (Occitan)
Currently translated at 100.0% (306 of 306 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/oc/
* Translated using Weblate (Japanese)
Currently translated at 99.5% (660 of 663 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Persian)
Currently translated at 99.6% (661 of 663 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/fa/
* Translated using Weblate (Portuguese (Brazil))
Currently translated at 99.8% (662 of 663 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/pt_BR/
* Translated using Weblate (Greek)
Currently translated at 99.8% (662 of 663 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/el/
* Translated using Weblate (Occitan)
Currently translated at 99.6% (661 of 663 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/oc/
* Translated using Weblate (Galician)
Currently translated at 99.8% (662 of 663 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/gl/
* Translated using Weblate (Occitan)
Currently translated at 99.8% (662 of 663 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/oc/
* Translated using Weblate (Dutch)
Currently translated at 100.0% (663 of 663 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/nl/
* Added translation using Weblate (Asturian)
* Translated using Weblate (Danish)
Currently translated at 78.1% (518 of 663 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/da/
* Translated using Weblate (Dutch)
Currently translated at 100.0% (663 of 663 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/nl/
* Translated using Weblate (Greek)
Currently translated at 99.8% (662 of 663 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/el/
* Translated using Weblate (Japanese)
Currently translated at 99.5% (660 of 663 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Greek)
Currently translated at 100.0% (306 of 306 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/el/
* Translated using Weblate (Greek)
Currently translated at 100.0% (82 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/el/
* Translated using Weblate (German)
Currently translated at 95.1% (78 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/de/
* Translated using Weblate (Asturian)
Currently translated at 4.0% (27 of 663 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ast/
* Translated using Weblate (Asturian)
Currently translated at 19.6% (130 of 663 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ast/
* Added translation using Weblate (Asturian)
* Added translation using Weblate (Asturian)
* Added translation using Weblate (Asturian)
* Added translation using Weblate (Asturian)
* Added translation using Weblate (Asturian)
* Translated using Weblate (Italian)
Currently translated at 100.0% (82 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/it/
* Translated using Weblate (Arabic)
Currently translated at 94.5% (627 of 663 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ar/
* Translated using Weblate (German)
Currently translated at 96.9% (643 of 663 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/de/
* Translated using Weblate (Japanese)
Currently translated at 99.6% (661 of 663 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Occitan)
Currently translated at 99.8% (662 of 663 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/oc/
* Translated using Weblate (Czech)
Currently translated at 100.0% (306 of 306 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/cs/
* Translated using Weblate (Arabic)
Currently translated at 95.1% (78 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/ar/
* Translated using Weblate (Slovenian)
Currently translated at 1.0% (1 of 98 strings)
Translation: Mastodon/Doorkeeper
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/sl/
* i18n-tasks normalize && i18n-tasks remove-unused && yarn manage:translations
* Add Asturian
---
app/helpers/settings_helper.rb | 1 +
app/javascript/mastodon/locales/ast.json | 308 ++++++++++++++++++
app/javascript/mastodon/locales/cs.json | 120 +++----
app/javascript/mastodon/locales/el.json | 18 +-
.../mastodon/locales/whitelist_ast.json | 2 +
config/application.rb | 1 +
config/locales/activerecord.ast.yml | 1 +
config/locales/ar.yml | 18 +
config/locales/ast.yml | 199 +++++++++++
config/locales/da.yml | 2 +
config/locales/de.yml | 13 +
config/locales/devise.ast.yml | 1 +
config/locales/doorkeeper.ast.yml | 1 +
config/locales/doorkeeper.sl.yml | 7 +-
config/locales/el.yml | 2 +-
config/locales/gl.yml | 1 +
config/locales/ja.yml | 3 +-
config/locales/nl.yml | 23 +-
config/locales/oc.yml | 19 +-
config/locales/simple_form.ar.yml | 1 +
config/locales/simple_form.ast.yml | 1 +
config/locales/simple_form.de.yml | 2 +-
config/locales/simple_form.el.yml | 4 +-
config/locales/simple_form.it.yml | 2 +
24 files changed, 673 insertions(+), 77 deletions(-)
create mode 100644 app/javascript/mastodon/locales/ast.json
create mode 100644 app/javascript/mastodon/locales/whitelist_ast.json
create mode 100644 config/locales/activerecord.ast.yml
create mode 100644 config/locales/ast.yml
create mode 100644 config/locales/devise.ast.yml
create mode 100644 config/locales/doorkeeper.ast.yml
create mode 100644 config/locales/simple_form.ast.yml
diff --git a/app/helpers/settings_helper.rb b/app/helpers/settings_helper.rb
index 740f7bf77..a9539e6e0 100644
--- a/app/helpers/settings_helper.rb
+++ b/app/helpers/settings_helper.rb
@@ -4,6 +4,7 @@ module SettingsHelper
HUMAN_LOCALES = {
en: 'English',
ar: 'العربية',
+ ast: 'l\'asturianu',
bg: 'Български',
ca: 'Català',
co: 'Corsu',
diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json
new file mode 100644
index 000000000..e86780c67
--- /dev/null
+++ b/app/javascript/mastodon/locales/ast.json
@@ -0,0 +1,308 @@
+{
+ "account.badges.bot": "Bot",
+ "account.block": "Block @{name}",
+ "account.block_domain": "Hide everything from {domain}",
+ "account.blocked": "Blocked",
+ "account.direct": "Direct message @{name}",
+ "account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
+ "account.domain_blocked": "Domain hidden",
+ "account.edit_profile": "Edit profile",
+ "account.follow": "Follow",
+ "account.followers": "Followers",
+ "account.follows": "Follows",
+ "account.follows_you": "Follows you",
+ "account.hide_reblogs": "Hide boosts from @{name}",
+ "account.media": "Media",
+ "account.mention": "Mention @{name}",
+ "account.moved_to": "{name} has moved to:",
+ "account.mute": "Mute @{name}",
+ "account.mute_notifications": "Mute notifications from @{name}",
+ "account.muted": "Muted",
+ "account.posts": "Toots",
+ "account.posts_with_replies": "Toots and replies",
+ "account.report": "Report @{name}",
+ "account.requested": "Awaiting approval. Click to cancel follow request",
+ "account.share": "Share @{name}'s profile",
+ "account.show_reblogs": "Show boosts from @{name}",
+ "account.unblock": "Unblock @{name}",
+ "account.unblock_domain": "Unhide {domain}",
+ "account.unfollow": "Unfollow",
+ "account.unmute": "Unmute @{name}",
+ "account.unmute_notifications": "Unmute notifications from @{name}",
+ "account.view_full_profile": "View full profile",
+ "alert.unexpected.message": "An unexpected error occurred.",
+ "alert.unexpected.title": "Oops!",
+ "boost_modal.combo": "You can press {combo} to skip this next time",
+ "bundle_column_error.body": "Something went wrong while loading this component.",
+ "bundle_column_error.retry": "Try again",
+ "bundle_column_error.title": "Network error",
+ "bundle_modal_error.close": "Close",
+ "bundle_modal_error.message": "Something went wrong while loading this component.",
+ "bundle_modal_error.retry": "Try again",
+ "column.blocks": "Blocked users",
+ "column.community": "Local timeline",
+ "column.direct": "Direct messages",
+ "column.domain_blocks": "Hidden domains",
+ "column.favourites": "Favourites",
+ "column.follow_requests": "Follow requests",
+ "column.home": "Home",
+ "column.lists": "Lists",
+ "column.mutes": "Muted users",
+ "column.notifications": "Notifications",
+ "column.pins": "Pinned toot",
+ "column.public": "Federated timeline",
+ "column_back_button.label": "Back",
+ "column_header.hide_settings": "Hide settings",
+ "column_header.moveLeft_settings": "Move column to the left",
+ "column_header.moveRight_settings": "Move column to the right",
+ "column_header.pin": "Pin",
+ "column_header.show_settings": "Show settings",
+ "column_header.unpin": "Unpin",
+ "column_subheading.settings": "Settings",
+ "community.column_settings.media_only": "Media Only",
+ "compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.",
+ "compose_form.direct_message_warning_learn_more": "Learn more",
+ "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
+ "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.",
+ "compose_form.lock_disclaimer.lock": "locked",
+ "compose_form.placeholder": "What is on your mind?",
+ "compose_form.publish": "Toot",
+ "compose_form.publish_loud": "{publish}!",
+ "compose_form.sensitive.marked": "Media is marked as sensitive",
+ "compose_form.sensitive.unmarked": "Media is not marked as sensitive",
+ "compose_form.spoiler.marked": "Text is hidden behind warning",
+ "compose_form.spoiler.unmarked": "Text is not hidden",
+ "compose_form.spoiler_placeholder": "Write your warning here",
+ "confirmation_modal.cancel": "Cancel",
+ "confirmations.block.confirm": "Block",
+ "confirmations.block.message": "Are you sure you want to block {name}?",
+ "confirmations.delete.confirm": "Delete",
+ "confirmations.delete.message": "Are you sure you want to delete this status?",
+ "confirmations.delete_list.confirm": "Delete",
+ "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?",
+ "confirmations.domain_block.confirm": "Hide entire domain",
+ "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.",
+ "confirmations.mute.confirm": "Mute",
+ "confirmations.mute.message": "Are you sure you want to mute {name}?",
+ "confirmations.redraft.confirm": "Delete & redraft",
+ "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
+ "confirmations.unfollow.confirm": "Unfollow",
+ "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
+ "embed.instructions": "Embed this status on your website by copying the code below.",
+ "embed.preview": "Here is what it will look like:",
+ "emoji_button.activity": "Activity",
+ "emoji_button.custom": "Custom",
+ "emoji_button.flags": "Flags",
+ "emoji_button.food": "Food & Drink",
+ "emoji_button.label": "Insert emoji",
+ "emoji_button.nature": "Nature",
+ "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
+ "emoji_button.objects": "Objects",
+ "emoji_button.people": "People",
+ "emoji_button.recent": "Frequently used",
+ "emoji_button.search": "Search...",
+ "emoji_button.search_results": "Search results",
+ "emoji_button.symbols": "Symbols",
+ "emoji_button.travel": "Travel & Places",
+ "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!",
+ "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
+ "empty_column.hashtag": "There is nothing in this hashtag yet.",
+ "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
+ "empty_column.home.public_timeline": "the public timeline",
+ "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
+ "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
+ "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up",
+ "follow_request.authorize": "Authorize",
+ "follow_request.reject": "Reject",
+ "getting_started.developers": "Developers",
+ "getting_started.documentation": "Documentation",
+ "getting_started.find_friends": "Find friends from Twitter",
+ "getting_started.heading": "Getting started",
+ "getting_started.invite": "Invite people",
+ "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.",
+ "getting_started.security": "Security",
+ "getting_started.terms": "Terms of service",
+ "home.column_settings.basic": "Basic",
+ "home.column_settings.show_reblogs": "Show boosts",
+ "home.column_settings.show_replies": "Show replies",
+ "keyboard_shortcuts.back": "to navigate back",
+ "keyboard_shortcuts.boost": "to boost",
+ "keyboard_shortcuts.column": "to focus a status in one of the columns",
+ "keyboard_shortcuts.compose": "to focus the compose textarea",
+ "keyboard_shortcuts.description": "Description",
+ "keyboard_shortcuts.down": "to move down in the list",
+ "keyboard_shortcuts.enter": "to open status",
+ "keyboard_shortcuts.favourite": "to favourite",
+ "keyboard_shortcuts.heading": "Keyboard Shortcuts",
+ "keyboard_shortcuts.hotkey": "Hotkey",
+ "keyboard_shortcuts.legend": "to display this legend",
+ "keyboard_shortcuts.mention": "to mention author",
+ "keyboard_shortcuts.reply": "to reply",
+ "keyboard_shortcuts.search": "to focus search",
+ "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
+ "keyboard_shortcuts.toot": "to start a brand new toot",
+ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
+ "keyboard_shortcuts.up": "to move up in the list",
+ "lightbox.close": "Close",
+ "lightbox.next": "Next",
+ "lightbox.previous": "Previous",
+ "lists.account.add": "Add to list",
+ "lists.account.remove": "Remove from list",
+ "lists.delete": "Delete list",
+ "lists.edit": "Edit list",
+ "lists.new.create": "Add list",
+ "lists.new.title_placeholder": "New list title",
+ "lists.search": "Search among people you follow",
+ "lists.subheading": "Your lists",
+ "loading_indicator.label": "Loading...",
+ "media_gallery.toggle_visible": "Toggle visibility",
+ "missing_indicator.label": "Not found",
+ "missing_indicator.sublabel": "This resource could not be found",
+ "mute_modal.hide_notifications": "Hide notifications from this user?",
+ "navigation_bar.blocks": "Blocked users",
+ "navigation_bar.community_timeline": "Local timeline",
+ "navigation_bar.direct": "Direct messages",
+ "navigation_bar.discover": "Discover",
+ "navigation_bar.domain_blocks": "Hidden domains",
+ "navigation_bar.edit_profile": "Edit profile",
+ "navigation_bar.favourites": "Favourites",
+ "navigation_bar.filters": "Muted words",
+ "navigation_bar.follow_requests": "Follow requests",
+ "navigation_bar.info": "About this instance",
+ "navigation_bar.keyboard_shortcuts": "Hotkeys",
+ "navigation_bar.lists": "Lists",
+ "navigation_bar.logout": "Logout",
+ "navigation_bar.mutes": "Muted users",
+ "navigation_bar.personal": "Personal",
+ "navigation_bar.pins": "Pinned toots",
+ "navigation_bar.preferences": "Preferences",
+ "navigation_bar.public_timeline": "Federated timeline",
+ "navigation_bar.security": "Security",
+ "notification.favourite": "{name} favourited your status",
+ "notification.follow": "{name} followed you",
+ "notification.mention": "{name} mentioned you",
+ "notification.reblog": "{name} boosted your status",
+ "notifications.clear": "Clear notifications",
+ "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?",
+ "notifications.column_settings.alert": "Desktop notifications",
+ "notifications.column_settings.favourite": "Favourites:",
+ "notifications.column_settings.follow": "New followers:",
+ "notifications.column_settings.mention": "Mentions:",
+ "notifications.column_settings.push": "Push notifications",
+ "notifications.column_settings.push_meta": "This device",
+ "notifications.column_settings.reblog": "Boosts:",
+ "notifications.column_settings.show": "Show in column",
+ "notifications.column_settings.sound": "Play sound",
+ "notifications.group": "{count} notifications",
+ "onboarding.done": "Done",
+ "onboarding.next": "Next",
+ "onboarding.page_five.public_timelines": "The local timeline shows public posts from everyone on {domain}. The federated timeline shows public posts from everyone who people on {domain} follow. These are the Public Timelines, a great way to discover new people.",
+ "onboarding.page_four.home": "The home timeline shows posts from people you follow.",
+ "onboarding.page_four.notifications": "The notifications column shows when someone interacts with you.",
+ "onboarding.page_one.federation": "Mastodon is a network of independent servers joining up to make one larger social network. We call these servers instances.",
+ "onboarding.page_one.full_handle": "Your full handle",
+ "onboarding.page_one.handle_hint": "This is what you would tell your friends to search for.",
+ "onboarding.page_one.welcome": "Welcome to Mastodon!",
+ "onboarding.page_six.admin": "Your instance's admin is {admin}.",
+ "onboarding.page_six.almost_done": "Almost done...",
+ "onboarding.page_six.appetoot": "Bon Appetoot!",
+ "onboarding.page_six.apps_available": "There are {apps} available for iOS, Android and other platforms.",
+ "onboarding.page_six.github": "Mastodon is free open-source software. You can report bugs, request features, or contribute to the code on {github}.",
+ "onboarding.page_six.guidelines": "community guidelines",
+ "onboarding.page_six.read_guidelines": "Please read {domain}'s {guidelines}!",
+ "onboarding.page_six.various_app": "mobile apps",
+ "onboarding.page_three.profile": "Edit your profile to change your avatar, bio, and display name. There, you will also find other preferences.",
+ "onboarding.page_three.search": "Use the search bar to find people and look at hashtags, such as {illustration} and {introductions}. To look for a person who is not on this instance, use their full handle.",
+ "onboarding.page_two.compose": "Write posts from the compose column. You can upload images, change privacy settings, and add content warnings with the icons below.",
+ "onboarding.skip": "Skip",
+ "privacy.change": "Adjust status privacy",
+ "privacy.direct.long": "Post to mentioned users only",
+ "privacy.direct.short": "Direct",
+ "privacy.private.long": "Post to followers only",
+ "privacy.private.short": "Followers-only",
+ "privacy.public.long": "Post to public timelines",
+ "privacy.public.short": "Public",
+ "privacy.unlisted.long": "Do not show in public timelines",
+ "privacy.unlisted.short": "Unlisted",
+ "regeneration_indicator.label": "Loading…",
+ "regeneration_indicator.sublabel": "Your home feed is being prepared!",
+ "relative_time.days": "{number}d",
+ "relative_time.hours": "{number}h",
+ "relative_time.just_now": "now",
+ "relative_time.minutes": "{number}m",
+ "relative_time.seconds": "{number}s",
+ "reply_indicator.cancel": "Cancel",
+ "report.forward": "Forward to {target}",
+ "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?",
+ "report.hint": "The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:",
+ "report.placeholder": "Additional comments",
+ "report.submit": "Submit",
+ "report.target": "Report {target}",
+ "search.placeholder": "Search",
+ "search_popout.search_format": "Advanced search format",
+ "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
+ "search_popout.tips.hashtag": "hashtag",
+ "search_popout.tips.status": "status",
+ "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags",
+ "search_popout.tips.user": "user",
+ "search_results.accounts": "People",
+ "search_results.hashtags": "Hashtags",
+ "search_results.statuses": "Toots",
+ "search_results.total": "{count, number} {count, plural, one {result} other {results}}",
+ "standalone.public_title": "A look inside...",
+ "status.block": "Block @{name}",
+ "status.cancel_reblog_private": "Unboost",
+ "status.cannot_reblog": "This post cannot be boosted",
+ "status.delete": "Delete",
+ "status.direct": "Direct message @{name}",
+ "status.embed": "Embed",
+ "status.favourite": "Favourite",
+ "status.filtered": "Filtered",
+ "status.load_more": "Load more",
+ "status.media_hidden": "Media hidden",
+ "status.mention": "Mention @{name}",
+ "status.more": "More",
+ "status.mute": "Mute @{name}",
+ "status.mute_conversation": "Mute conversation",
+ "status.open": "Expand this status",
+ "status.pin": "Pin on profile",
+ "status.pinned": "Pinned toot",
+ "status.reblog": "Boost",
+ "status.reblog_private": "Boost to original audience",
+ "status.reblogged_by": "{name} boosted",
+ "status.redraft": "Delete & re-draft",
+ "status.reply": "Reply",
+ "status.replyAll": "Reply to thread",
+ "status.report": "Report @{name}",
+ "status.sensitive_toggle": "Click to view",
+ "status.sensitive_warning": "Sensitive content",
+ "status.share": "Share",
+ "status.show_less": "Show less",
+ "status.show_less_all": "Show less for all",
+ "status.show_more": "Show more",
+ "status.show_more_all": "Show more for all",
+ "status.unmute_conversation": "Unmute conversation",
+ "status.unpin": "Unpin from profile",
+ "tabs_bar.federated_timeline": "Federated",
+ "tabs_bar.home": "Home",
+ "tabs_bar.local_timeline": "Local",
+ "tabs_bar.notifications": "Notifications",
+ "tabs_bar.search": "Search",
+ "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+ "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
+ "upload_area.title": "Drag & drop to upload",
+ "upload_button.label": "Add media",
+ "upload_form.description": "Describe for the visually impaired",
+ "upload_form.focus": "Crop",
+ "upload_form.undo": "Delete",
+ "upload_progress.label": "Uploading...",
+ "video.close": "Close video",
+ "video.exit_fullscreen": "Exit full screen",
+ "video.expand": "Expand video",
+ "video.fullscreen": "Full screen",
+ "video.hide": "Hide video",
+ "video.mute": "Mute sound",
+ "video.pause": "Pause",
+ "video.play": "Play",
+ "video.unmute": "Unmute sound"
+}
diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json
index b0f9cd524..8b562794a 100644
--- a/app/javascript/mastodon/locales/cs.json
+++ b/app/javascript/mastodon/locales/cs.json
@@ -24,67 +24,67 @@
"account.requested": "Požadavek čeká na schválení. Kliknutím zrušíte požadavek o sledování",
"account.share": "Sdílet profil uživatele @{name}",
"account.show_reblogs": "Zobrazit povýšení od uživatele @{name}",
- "account.unblock": "Unblock @{name}",
- "account.unblock_domain": "Unhide {domain}",
- "account.unfollow": "Unfollow",
- "account.unmute": "Unmute @{name}",
- "account.unmute_notifications": "Unmute notifications from @{name}",
- "account.view_full_profile": "View full profile",
- "alert.unexpected.message": "An unexpected error occurred.",
- "alert.unexpected.title": "Oops!",
- "boost_modal.combo": "You can press {combo} to skip this next time",
- "bundle_column_error.body": "Something went wrong while loading this component.",
- "bundle_column_error.retry": "Try again",
- "bundle_column_error.title": "Network error",
- "bundle_modal_error.close": "Close",
- "bundle_modal_error.message": "Something went wrong while loading this component.",
- "bundle_modal_error.retry": "Try again",
- "column.blocks": "Blocked users",
- "column.community": "Local timeline",
- "column.direct": "Direct messages",
- "column.domain_blocks": "Hidden domains",
- "column.favourites": "Favourites",
- "column.follow_requests": "Follow requests",
- "column.home": "Home",
- "column.lists": "Lists",
- "column.mutes": "Muted users",
- "column.notifications": "Notifications",
- "column.pins": "Pinned toot",
- "column.public": "Federated timeline",
- "column_back_button.label": "Back",
- "column_header.hide_settings": "Hide settings",
- "column_header.moveLeft_settings": "Move column to the left",
- "column_header.moveRight_settings": "Move column to the right",
- "column_header.pin": "Pin",
- "column_header.show_settings": "Show settings",
- "column_header.unpin": "Unpin",
- "column_subheading.settings": "Settings",
- "community.column_settings.media_only": "Media Only",
- "compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.",
- "compose_form.direct_message_warning_learn_more": "Learn more",
- "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
- "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.",
- "compose_form.lock_disclaimer.lock": "locked",
- "compose_form.placeholder": "What is on your mind?",
- "compose_form.publish": "Toot",
+ "account.unblock": "Odblokovat uživatele @{name}",
+ "account.unblock_domain": "Odkrýt doménu {domain}",
+ "account.unfollow": "Přestat sledovat",
+ "account.unmute": "Přestat ignorovat uživatele @{name}",
+ "account.unmute_notifications": "Odtišit oznámení od uživatele @{name}",
+ "account.view_full_profile": "Zobrazit celý profil",
+ "alert.unexpected.message": "Objevila se neočekávaná chyba.",
+ "alert.unexpected.title": "Jejda!",
+ "boost_modal.combo": "Příště můžete pro přeskočení kliknout na {combo}",
+ "bundle_column_error.body": "Při načtení tohoto prvku se něco pokazilo.",
+ "bundle_column_error.retry": "Zkuste to znovu",
+ "bundle_column_error.title": "Chyba sítě",
+ "bundle_modal_error.close": "Zavřít",
+ "bundle_modal_error.message": "Při načítání tohoto komponentu se něco pokazilo.",
+ "bundle_modal_error.retry": "Zkusit znovu",
+ "column.blocks": "Blokovaní uživatelé",
+ "column.community": "Místní časová osa",
+ "column.direct": "Přímé zprávy",
+ "column.domain_blocks": "Skryté domény",
+ "column.favourites": "Oblíbené",
+ "column.follow_requests": "Žádosti o sledování",
+ "column.home": "Domů",
+ "column.lists": "Seznamy",
+ "column.mutes": "Ignorovaní uživatelé",
+ "column.notifications": "Oznámení",
+ "column.pins": "Připnuté tooty",
+ "column.public": "Federovaná časová osa",
+ "column_back_button.label": "Zpět",
+ "column_header.hide_settings": "Skrýt nastavení",
+ "column_header.moveLeft_settings": "Přesunout sloupec doleva",
+ "column_header.moveRight_settings": "Přesunout sloupec doprava",
+ "column_header.pin": "Připnout",
+ "column_header.show_settings": "Zobrazit nastavení",
+ "column_header.unpin": "Odepnout",
+ "column_subheading.settings": "Nastavení",
+ "community.column_settings.media_only": "Pouze média",
+ "compose_form.direct_message_warning": "Tento toot bude vidielný pouze zmíněným uživatelům.",
+ "compose_form.direct_message_warning_learn_more": "Zjistit více",
+ "compose_form.hashtag_warning": "Tento toot nebude zobrazen pod žádným hashtagem, neboť je neuvedený. Pouze veřejné tooty mohou být vyhledány podle hashtagu.",
+ "compose_form.lock_disclaimer": "Váš účet není {locked}. Kdokoliv vás může sledovat a vidět vaše příspěvky pouze pro sledovatele.",
+ "compose_form.lock_disclaimer.lock": "zamknutý",
+ "compose_form.placeholder": "Co máte na mysli?",
+ "compose_form.publish": "Tootnout",
"compose_form.publish_loud": "{publish}!",
- "compose_form.sensitive.marked": "Media is marked as sensitive",
- "compose_form.sensitive.unmarked": "Media is not marked as sensitive",
- "compose_form.spoiler.marked": "Text is hidden behind warning",
- "compose_form.spoiler.unmarked": "Text is not hidden",
- "compose_form.spoiler_placeholder": "Write your warning here",
- "confirmation_modal.cancel": "Cancel",
- "confirmations.block.confirm": "Block",
- "confirmations.block.message": "Are you sure you want to block {name}?",
- "confirmations.delete.confirm": "Delete",
- "confirmations.delete.message": "Are you sure you want to delete this status?",
- "confirmations.delete_list.confirm": "Delete",
- "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?",
- "confirmations.domain_block.confirm": "Hide entire domain",
- "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.",
- "confirmations.mute.confirm": "Mute",
- "confirmations.mute.message": "Are you sure you want to mute {name}?",
- "confirmations.redraft.confirm": "Delete & redraft",
+ "compose_form.sensitive.marked": "Mediální obsah je označen jako citlivý",
+ "compose_form.sensitive.unmarked": "Mediální obsah není označen jako citlivý",
+ "compose_form.spoiler.marked": "Text je ukrytý za varováním",
+ "compose_form.spoiler.unmarked": "Text není ukrytý",
+ "compose_form.spoiler_placeholder": "Sem napište vaše varování",
+ "confirmation_modal.cancel": "Zrušit",
+ "confirmations.block.confirm": "Blokovat",
+ "confirmations.block.message": "Jste si jistý/á, že chcete zablokovat uživatele {name}?",
+ "confirmations.delete.confirm": "Smazat",
+ "confirmations.delete.message": "Jste si jistý/á, že chcete smazat tento status?",
+ "confirmations.delete_list.confirm": "Smazat",
+ "confirmations.delete_list.message": "Jste si jistý/á, že chcete tento seznam navždy vymazat?",
+ "confirmations.domain_block.confirm": "Skrýt celou doménu",
+ "confirmations.domain_block.message": "Jste si opravdu, opravdu jistý/á, že chcete blokovat celou {domain}? Ve většině případů stačí zablokovat nebo ignorovat pár konkrétních uživatelů, což se doporučuje. Z této domény neuvidíte obsah v žádné veřejné časové ose ani v oznámeních. Vaši sledovatelé z této domény budou odstraněni.",
+ "confirmations.mute.confirm": "Ignorovat",
+ "confirmations.mute.message": "Jste si jistý/á, že chcete ignorovat uživatele {name}?",
+ "confirmations.redraft.confirm": "Vymazat a přepsat",
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
"confirmations.unfollow.confirm": "Unfollow",
"confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json
index 447d68b3f..d6a0b8e04 100644
--- a/app/javascript/mastodon/locales/el.json
+++ b/app/javascript/mastodon/locales/el.json
@@ -114,9 +114,9 @@
"empty_column.public": "Δεν υπάρχει τίποτα εδώ! Γράψε κάτι δημόσιο, ή ακολούθησε χειροκίνητα χρήστες από άλλα instances για να τη γεμίσεις",
"follow_request.authorize": "Ενέκρινε",
"follow_request.reject": "Απέρριψε",
- "getting_started.developers": "Προγραμματιστές",
- "getting_started.documentation": "Documentation",
- "getting_started.find_friends": "Βρες φίλους/ες από το Twitter",
+ "getting_started.developers": "Ανάπτυξη",
+ "getting_started.documentation": "Τεκμηρίωση",
+ "getting_started.find_friends": "Βρες φίλους από το Twitter",
"getting_started.heading": "Αφετηρία",
"getting_started.invite": "Προσκάλεσε κόσμο",
"getting_started.open_source_notice": "Το Mastodon είναι ελεύθερο λογισμικό. Μπορείς να συνεισφέρεις ή να αναφέρεις ζητήματα στο GitHub στο {github}.",
@@ -163,17 +163,17 @@
"navigation_bar.community_timeline": "Τοπική ροή",
"navigation_bar.direct": "Προσωπικά μηνύματα",
"navigation_bar.discover": "Ανακάλυψη",
- "navigation_bar.domain_blocks": "Κρυφοί τομείς",
+ "navigation_bar.domain_blocks": "Κρυμμένοι τομείς",
"navigation_bar.edit_profile": "Επεξεργασία προφίλ",
"navigation_bar.favourites": "Αγαπημένα",
"navigation_bar.filters": "Αποσιωπημένες λέξεις",
"navigation_bar.follow_requests": "Αιτήματα ακολούθησης",
- "navigation_bar.info": "Extended information",
+ "navigation_bar.info": "Πληροφορίες κόμβου",
"navigation_bar.keyboard_shortcuts": "Συντομεύσεις",
"navigation_bar.lists": "Λίστες",
"navigation_bar.logout": "Αποσύνδεση",
"navigation_bar.mutes": "Αποσιωπημένοι χρήστες",
- "navigation_bar.personal": "Personal",
+ "navigation_bar.personal": "Προσωπικά",
"navigation_bar.pins": "Καρφιτσωμένα τουτ",
"navigation_bar.preferences": "Προτιμήσεις",
"navigation_bar.public_timeline": "Ομοσπονδιακή ροή",
@@ -222,7 +222,7 @@
"privacy.private.short": "Μόνο ακόλουθοι",
"privacy.public.long": "Δημοσίευσε στις δημόσιες ροές",
"privacy.public.short": "Δημόσιο",
- "privacy.unlisted.long": "Do not show in public timelines",
+ "privacy.unlisted.long": "Μην δημοσιεύσεις στις δημόσιες ροές",
"privacy.unlisted.short": "Μη καταχωρημένα",
"regeneration_indicator.label": "Φορτώνει…",
"regeneration_indicator.sublabel": "Η αρχική σου ροή ετοιμάζεται!",
@@ -243,7 +243,7 @@
"search_popout.tips.full_text": "Απλό κείμενο που επιστρέφει καταστάσεις που έχεις γράψει, σημειώσει ως αγαπημένες, προωθήσει ή έχεις αναφερθεί σε αυτές, καθώς και όσα ονόματα χρηστών και ταμπέλες ταιριάζουν.",
"search_popout.tips.hashtag": "ταμπέλα",
"search_popout.tips.status": "status",
- "search_popout.tips.text": "Απλό κείμενο που επιστρέφει ταιριαστά ονόματα και ταμπέλες",
+ "search_popout.tips.text": "Απλό κείμενο που επιστρέφει ονόματα και ταμπέλες που ταιριάζουν",
"search_popout.tips.user": "χρήστης",
"search_results.accounts": "Άνθρωποι",
"search_results.hashtags": "Ταμπέλες",
@@ -273,7 +273,7 @@
"status.redraft": "Σβήσε & ξαναγράψε",
"status.reply": "Απάντησε",
"status.replyAll": "Απάντησε στην συζήτηση",
- "status.report": "Καταγγελία @{name}",
+ "status.report": "Κατάγγειλε @{name}",
"status.sensitive_toggle": "Κλικ για να δεις",
"status.sensitive_warning": "Ευαίσθητο περιεχόμενο",
"status.share": "Μοιράσου",
diff --git a/app/javascript/mastodon/locales/whitelist_ast.json b/app/javascript/mastodon/locales/whitelist_ast.json
new file mode 100644
index 000000000..0d4f101c7
--- /dev/null
+++ b/app/javascript/mastodon/locales/whitelist_ast.json
@@ -0,0 +1,2 @@
+[
+]
diff --git a/config/application.rb b/config/application.rb
index b100d7fcc..df64f0256 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -38,6 +38,7 @@ module Mastodon
config.i18n.available_locales = [
:en,
:ar,
+ :ast,
:bg,
:ca,
:co,
diff --git a/config/locales/activerecord.ast.yml b/config/locales/activerecord.ast.yml
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/config/locales/activerecord.ast.yml
@@ -0,0 +1 @@
+{}
diff --git a/config/locales/ar.yml b/config/locales/ar.yml
index c1d7cca58..013bc7004 100644
--- a/config/locales/ar.yml
+++ b/config/locales/ar.yml
@@ -206,6 +206,18 @@ ar:
update_failed_msg: تعذرت عملية تحذيث ذاك الإيموجي
updated_msg: تم تحديث الإيموجي بنجاح !
upload: رفع
+ dashboard:
+ feature_invites: روابط الدعوات
+ feature_registrations: التسجيلات
+ feature_relay: المُرحّل الفديرالي
+ features: الميّزات
+ hidden_service: الفيديرالية مع الخدمات الخفية
+ search: البحث النصي الكامل
+ software: البرنامج
+ space: المساحة المستخدَمة
+ title: لوح المراقبة
+ week_users_active: نشط هذا الأسبوع
+ week_users_new: مستخدِمين هذا الأسبوع
domain_blocks:
add_new: إضافة نطاق جديد
created_msg: إنّ حجب النطاق حيز التشغيل
@@ -261,6 +273,12 @@ ar:
expired: المنتهي صلاحيتها
title: التصفية
title: الدعوات
+ relays:
+ add_new: إضافة مُرحّل جديد
+ inbox_url: رابط المُرحّل
+ setup: إعداد اتصال بمُرحّل
+ status: الحالة
+ title: المُرحّلات
report_notes:
created_msg: |-
41/5000
diff --git a/config/locales/ast.yml b/config/locales/ast.yml
new file mode 100644
index 000000000..4436c2d88
--- /dev/null
+++ b/config/locales/ast.yml
@@ -0,0 +1,199 @@
+---
+ast:
+ about:
+ about_mastodon_html: Mastodon ye una rede social basada en protocolos abiertos y software de códigu llibre. Ye descentralizada, como'l corréu electrónicu.
+ contact_unavailable: N/D
+ description_headline: "¿Qué ye %{domain}?"
+ domain_count_after: otres instancies
+ features:
+ not_a_product_title: Yes una persona, non un productu
+ source_code: Códigu fonte
+ status_count_after: estaos
+ user_count_after: usuarios
+ what_is_mastodon: "¿Qué ye Mastodon?"
+ accounts:
+ followers: Siguidores
+ network_hidden: Esta información nun ta disponible
+ nothing_here: "¡Equí nun hai nada!"
+ people_followed_by: Persones a les que sigue %{name}
+ people_who_follow: Persones que siguen a %{name}
+ reserved_username: El nome d'usuariu ta acutáu
+ roles:
+ bot: Robó
+ admin:
+ accounts:
+ avatar: Avatar
+ by_domain: Dominiu
+ domain: Dominiu
+ followers: Siguidores
+ ip: IP
+ protocol: Protocolu
+ resend_confirmation:
+ already_confirmed: Esti usuariu yá ta confirmáu
+ role: Permisos
+ roles:
+ moderator: Llendador
+ username: Nome d'usuariu
+ web: Web
+ custom_emojis:
+ by_domain: Dominiu
+ copy_failed_msg: Nun pudo facese una copia llocal d'esi fustaxe
+ emoji: Fustaxe
+ update_failed_msg: Nun pudo anovase esi fustaxe
+ dashboard:
+ config: Configuración
+ features: Carauterístiques
+ hidden_service: Federación con servicios anubríos
+ software: Software
+ total_users: usuarios en total
+ domain_blocks:
+ domain: Dominiu
+ email_domain_blocks:
+ domain: Dominiu
+ instances:
+ account_count: Cuentes conocíes
+ domain_name: Dominiu
+ title: Instancies conocíes
+ invites:
+ filter:
+ available: Disponible
+ reports:
+ id: ID
+ statuses:
+ failed_to_execute: Fallu al executar
+ subscriptions:
+ title: WebSub
+ admin_mailer:
+ new_report:
+ body_remote: Daquién dende %{domain} informó de %{target}
+ application_mailer:
+ salutation: "%{name},"
+ applications:
+ invalid_url: La URL apurrida nun ye válida
+ auth:
+ change_password: Contraseña
+ forgot_password: "¿Escaeciesti la contraseña?"
+ providers:
+ cas: CAS
+ saml: SAML
+ security: Seguranza
+ authorize_follow:
+ already_following: Yá tas siguiendo a esta cuenta
+ error: Desafortunadamente, hebo un fallu guetando la cuenta remota
+ deletes:
+ confirm_password: Introduz la contraseña pa verificar la to identidá
+ errors:
+ '403': Nun tienes permisu pa ver esta páxina.
+ '404': La páxina que tabes guetando nun esiste.
+ '410': La páxina que tabes guetando yá nun esiste.
+ exports:
+ archive_takeout:
+ size: Tamañu
+ csv: CSV
+ filters:
+ contexts:
+ public: Llinies temporales públiques
+ followers:
+ domain: Dominiu
+ followers_count: Númberu de siguidores
+ generic:
+ powered_by: cola potencia de %{link}
+ invites:
+ expires_in:
+ '1800': 30 minutos
+ '21600': 6 hores
+ '3600': 1 hora
+ '43200': 12 hores
+ '604800': 1 selmana
+ '86400': 1 día
+ expires_in_prompt: Enxamás
+ max_uses:
+ one: 1 usu
+ other: "%{count} usos"
+ table:
+ uses: Usos
+ lists:
+ errors:
+ limit: Algamesti la cantidá máxima de llistes
+ media_attachments:
+ validations:
+ images_and_video: Nun pue axuntase un videu a un estáu que yá contién imáxenes
+ too_many: Nun puen axuntase más de 4 ficheros
+ migrations:
+ acct: nome_usuariu@dominiu de la cuenta nueva
+ notification_mailer:
+ digest:
+ mention: "%{name} mentóte en:"
+ follow:
+ title: Siguidor nuevu
+ follow_request:
+ body: "%{name} solicitó siguite"
+ title: Petición nueva de siguimientu
+ mention:
+ body: "%{name} mentóte en:"
+ subject: "%{name} mentóte"
+ title: Mención nueva
+ number:
+ human:
+ decimal_units:
+ format: "%n%u"
+ preferences:
+ languages: Llingües
+ web: Web
+ remote_follow:
+ prompt: 'Vas siguir a:'
+ remote_unfollow:
+ error: Fallu
+ sessions:
+ browser: Restolador
+ browsers:
+ blackberry: Blackberry
+ chrome: Chrome
+ edge: Microsoft Edge
+ electron: Electron
+ ie: Internet Explorer
+ micro_messenger: MicroMessenger
+ opera: Opera
+ phantom_js: PhantomJS
+ safari: Safari
+ uc_browser: UCBrowser
+ weibo: Weibo
+ description: "%{browser} en %{platform}"
+ ip: IP
+ platforms:
+ blackberry: Blackberry
+ chrome_os: ChromeOS
+ firefox_os: Firefox OS
+ ios: iOS
+ linux: Linux
+ mac: Mac
+ windows: Windows
+ windows_mobile: Windows Mobile
+ windows_phone: Windows Phone
+ title: Sesiones
+ settings:
+ preferences: Preferencies
+ statuses:
+ attached:
+ image:
+ one: "%{count} imaxe"
+ other: "%{count} imáxenes"
+ video:
+ one: "%{count} videu"
+ other: "%{count} vídeos"
+ title: "%{name}: «%{quote}»"
+ stream_entries:
+ click_to_show: Primi p'amosar
+ sensitive_content: Conteníu sensible
+ themes:
+ default: Mastodon
+ two_factor_authentication:
+ code_hint: Introduz el códigu xeneráu pola aplicación autenticadora pa confirmar
+ enabled: L'autenticación en dos pasos ta activada
+ user_mailer:
+ welcome:
+ full_handle_hint: Esto ye lo que-yos diríes a los collacios pa que puean unviate mensaxes o siguite dende otra instancia.
+ subject: Afáyate en Mastodon
+ tips: Conseyos
+ users:
+ invalid_email: La direición de corréu nun ye válida
diff --git a/config/locales/da.yml b/config/locales/da.yml
index e299349f5..7f9cd1e1e 100644
--- a/config/locales/da.yml
+++ b/config/locales/da.yml
@@ -215,10 +215,12 @@ da:
features: Funktioner
open_reports: åbne anmeldelser
recent_users: Seneste brugere
+ search: Søg på fuld tekst
software: Software
space: Brugt lagerplads
title: Betjeningspanel
total_users: samlede antal brugere
+ trends: Tendenser
week_interactions: interaktioner denne uge
week_users_active: aktive denne uge
week_users_new: brugere denne uge
diff --git a/config/locales/de.yml b/config/locales/de.yml
index f86fce3ce..a8a0e0f09 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -206,6 +206,17 @@ de:
update_failed_msg: Konnte dieses Emoji nicht aktualisieren
updated_msg: Emoji erfolgreich aktualisiert!
upload: Hochladen
+ dashboard:
+ backlog: Unerledigte Jobs
+ config: Konfiguration
+ feature_invites: Einladungslinks
+ feature_registrations: Registrierung
+ features: Eigenschaften
+ open_reports: Offene Meldungen
+ search: Volltextsuche
+ space: Speicherverbrauch
+ title: Übersicht
+ total_users: Benutzer Insgesamt
domain_blocks:
add_new: Neu hinzufügen
created_msg: Die Domain-Blockade wird nun durchgeführt
@@ -261,6 +272,8 @@ de:
expired: Ausgelaufen
title: Filter
title: Einladungen
+ relays:
+ add_new: Neues Relay hinzufügen
report_notes:
created_msg: Meldungs-Kommentar erfolgreich erstellt!
destroyed_msg: Meldungs-Kommentar erfolgreich gelöscht!
diff --git a/config/locales/devise.ast.yml b/config/locales/devise.ast.yml
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/config/locales/devise.ast.yml
@@ -0,0 +1 @@
+{}
diff --git a/config/locales/doorkeeper.ast.yml b/config/locales/doorkeeper.ast.yml
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/config/locales/doorkeeper.ast.yml
@@ -0,0 +1 @@
+{}
diff --git a/config/locales/doorkeeper.sl.yml b/config/locales/doorkeeper.sl.yml
index 0967ef424..c27457089 100644
--- a/config/locales/doorkeeper.sl.yml
+++ b/config/locales/doorkeeper.sl.yml
@@ -1 +1,6 @@
-{}
+---
+sl:
+ activerecord:
+ attributes:
+ doorkeeper/application:
+ name: Ime programa
diff --git a/config/locales/el.yml b/config/locales/el.yml
index fc73b60d4..7fd48b7d2 100644
--- a/config/locales/el.yml
+++ b/config/locales/el.yml
@@ -629,7 +629,7 @@ el:
units:
billion: Δις.
million: Εκ.
- quadrillion: Τετρ.
+ quadrillion: Τετράκις.
thousand: Χ.
trillion: Τρις.
pagination:
diff --git a/config/locales/gl.yml b/config/locales/gl.yml
index 23e505631..e7943c469 100644
--- a/config/locales/gl.yml
+++ b/config/locales/gl.yml
@@ -222,6 +222,7 @@ gl:
space: Uso de espazo
title: Taboleiro
total_users: total de usuarias
+ trends: Tendencias
week_interactions: interaccións en esta semana
week_users_active: activas estas semana
week_users_new: usuarias esta semana
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index 25f6eafc8..0e7258b4c 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -213,6 +213,7 @@ ja:
feature_registrations: 新規登録
feature_relay: 連合リレー
features: 機能
+ hidden_service: 秘匿サービスとの連合
open_reports: 未解決のレポート
recent_users: 最近登録したユーザー
search: 全文検索
@@ -221,7 +222,7 @@ ja:
space: ディスク使用量
title: ダッシュボード
total_users: 全ユーザー
- trends: トレンド
+ trends: トレンドタグ
week_interactions: 今週の交流数
week_users_active: 今週活動した人数
week_users_new: 今週登録した人数
diff --git a/config/locales/nl.yml b/config/locales/nl.yml
index 6cf982662..0c45016a7 100644
--- a/config/locales/nl.yml
+++ b/config/locales/nl.yml
@@ -206,6 +206,27 @@ nl:
update_failed_msg: Deze emoji kon niet worden bijgewerkt
updated_msg: Bijwerken van emoji is geslaagd!
upload: Uploaden
+ dashboard:
+ backlog: achterstallige taken
+ config: Configuratie
+ feature_deletions: Verwijderen van account
+ feature_invites: Uitnodigingen
+ feature_registrations: Registraties
+ feature_relay: Federatierelay
+ features: Functies
+ hidden_service: Federatie met verborgen diensten
+ open_reports: onopgeloste gerapporteerde toots
+ recent_users: Recente gebruikers
+ search: In volledige tekst zoeken
+ single_user_mode: Modus voor één gebruiker
+ software: Software
+ space: Ruimtegebruik
+ title: Dashboard
+ total_users: gebruikers in totaal
+ trends: Trends
+ week_interactions: interacties deze week
+ week_users_active: actieve gebruikers deze week
+ week_users_new: nieuwe gebruikers deze week
domain_blocks:
add_new: Nieuwe toevoegen
created_msg: Domeinblokkade wordt nu verwerkt
@@ -263,7 +284,7 @@ nl:
title: Uitnodigingen
relays:
add_new: Nieuwe relayserver toevoegen
- description_html: Een federatie-relay is een tussenliggende server die grote hoeveelheden openbare toots uitwisselt tussen servers die zich hierop hebben geabonneerd. Het kan kleine en middelgrote servers helpen om content uit de fediverse te ontdekken , waarvoor anders lokale gebruikers handmatig mensen van externe servers moeten volgen.
+ description_html: Een federatierelay is een tussenliggende server die grote hoeveelheden openbare toots uitwisselt tussen servers die zich hierop hebben geabonneerd. Het kan kleine en middelgrote servers helpen om content uit de fediverse te ontdekken , waarvoor anders lokale gebruikers handmatig mensen van externe servers moeten volgen.
enable_hint: Eenmaal ingeschakeld gaat jouw server zich op alle openbare toots van deze relayserver abonneren en stuurt het de openbare toots van jouw server naar de relayserver.
inbox_url: Relay-URL
setup: Een verbinding met een relayserver maken
diff --git a/config/locales/oc.yml b/config/locales/oc.yml
index 0477f992c..7146d9220 100644
--- a/config/locales/oc.yml
+++ b/config/locales/oc.yml
@@ -208,6 +208,7 @@ oc:
updated_msg: Emoji ben mes a jorn !
upload: Enviar
dashboard:
+ backlog: Accions en retard
config: Configuracion
feature_deletions: Supressions de comptes
feature_invites: Ligams convidat
@@ -823,7 +824,23 @@ oc:
Per provesir la foncionament màger de Mastodon. Podètz pas qu’interagir amb lo contengut del monde e de vòstras publicacions quand sètz connectat. Per exemple, avètz la possibilitat de sègre de monde per veire lors publicacions amassadas dins vòstre flux d’actualitat personalizat.
Per ajudar la moderacion de la comunitat, per exemple en comparant vòstra adreça IP amb d’autras per determinar d’ensages de contornament de bandiment e d’autras violéncias.
- Per enviar periodicament de corrièls — Podèm utilizar l’adreça qu’avètz donada per vos enviar d’informacions e de notificacions que demandatz tocant de cambiaments dins los subjèctes del forum o en responsa a vòstre nom d’utilizaire, en responsa a una demanda, e/o tota autra question.
+ Podèm utilizar l’adreça qu’avètz donada per vos enviar d’informacions e de notificacions que demandatz tocant de cambiaments dins los subjèctes del forum o en responsa a vòstre nom d’utilizaire, en responsa a una demanda, e/o tota autra question.
+
+
+
+
+ Cossí protegèm vòstras informacions ?
+
+ Apliquem tota una mena de mesuras de seguretat per manténer la fisança de vòstras informacions personalas quand las picatz, mandatz, o i accedètz. Entre aquelas, vòstre session de navigacion, coma lo trafic entre vòstra aplicacion e l’API, son securizats amb SSL e lo senhal es copat en tròces en emplegar un algorisme fòrt a sens unic. Podètz activar l’autentificacion en dos temps pels accèsses futurs a vòstre compte.
+
+
+ Quala es nòstra politica de conservacion de donadas ?
+
+ Farem esfòrces per :
+
+
+ Gardar los jornals del servidor que contenon las adreças IP de totas las demandas al servidor pas mai de 90 jorns.
+ Gardar las adreças IP ligadas als utilizaires e lors publicacions pas mai de 12 messes.
title: Condicions d’utilizacion e politica de confidencialitat de %{instance}
themes:
diff --git a/config/locales/simple_form.ar.yml b/config/locales/simple_form.ar.yml
index 5c0c0a57c..8f3e685a6 100644
--- a/config/locales/simple_form.ar.yml
+++ b/config/locales/simple_form.ar.yml
@@ -76,6 +76,7 @@ ar:
type: صيغة الإستيراد
username: إسم المستخدم
username_or_email: إسم المستخدم أو كلمة السر
+ whole_word: الكلمة كاملة
interactions:
must_be_follower: حظر الإخطارات القادمة من حسابات لا تتبعك
must_be_following: حظر الإخطارات القادمة من الحسابات التي لا تتابعها
diff --git a/config/locales/simple_form.ast.yml b/config/locales/simple_form.ast.yml
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/config/locales/simple_form.ast.yml
@@ -0,0 +1 @@
+{}
diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml
index 9e29a2824..0c0679605 100644
--- a/config/locales/simple_form.de.yml
+++ b/config/locales/simple_form.de.yml
@@ -39,7 +39,7 @@ de:
defaults:
autofollow: Einladen, um deinen Account zu folgen
avatar: Profilbild
- bot: Dies ist ein bot Benutzer
+ bot: Dieser Benutzer ist ein Bot
chosen_languages: Sprachen filtern
confirm_new_password: Neues Passwort bestätigen
confirm_password: Passwort bestätigen
diff --git a/config/locales/simple_form.el.yml b/config/locales/simple_form.el.yml
index 293c5ac7c..58bae8dc1 100644
--- a/config/locales/simple_form.el.yml
+++ b/config/locales/simple_form.el.yml
@@ -4,7 +4,7 @@ el:
hints:
defaults:
autofollow: Όσοι εγγραφούν μέσω της πρόσκλησης θα σε ακολουθούν αυτόματα
- avatar: PNG, GIF ή JPG. Έως 2MB. Θα μειωθεί σε διάσταση 400x400px
+ avatar: PNG, GIF ή JPG. Έως 2MB. Θα περιοριστεί σε διάσταση 400x400px
bot: Ο λογαριασμός αυτός εκτελεί κυρίως αυτοματοποιημένες ενέργειες και ίσως να μην παρακολουθείται
context: Ένα ή περισσότερα πλαίσια στα οποία μπορεί να εφαρμόζεται αυτό το φίλτρο
digest: Αποστέλλεται μόνο μετά από μακρά περίοδο αδράνειας και μόνο αν έχεις λάβει προσωπικά μηνύματα κατά την απουσία σου
@@ -12,7 +12,7 @@ el:
one: απομένει 1 χαρακτήρας
other: απομένουν %{count} χαρακτήρες
fields: Μπορείς να έχεις έως 4 σημειώσεις σε μορφή πίνακα στο προφίλ σου
- header: PNG, GIF ή JPG. Έως 2MB. Θα μειωθεί σε διάσταση 700x335px
+ header: PNG, GIF ή JPG. Έως 2MB. Θα περιοριστεί σε διάσταση 700x335px
inbox_url: Αντέγραψε το URL της αρχικής σελίδας του ανταποκριτή (relay) που θέλεις να χρησιμοποιήσεις
irreversible: Τα φιλτραρισμένα τουτ θα εξαφανιστούν αμετάκλητα, ακόμα και αν το φίλτρο αργότερα αφαιρεθεί
locale: Η γλώσσα του περιβάλλοντος χρήσης, των email και των ειδοποιήσεων ώθησης
diff --git a/config/locales/simple_form.it.yml b/config/locales/simple_form.it.yml
index f6fd891e1..16de1efd2 100644
--- a/config/locales/simple_form.it.yml
+++ b/config/locales/simple_form.it.yml
@@ -13,6 +13,7 @@ it:
other: %{count} caratteri rimanenti
fields: Puoi avere fino a 4 voci visualizzate come una tabella sul tuo profilo
header: PNG, GIF o JPG. Al massimo 2MB. Verranno scalate a 700x335px
+ inbox_url: Copia la URL dalla pagina iniziale del ripetitore che vuoi usare
irreversible: I toot filtrati scompariranno in modo irreversibile, anche se il filtro viene eliminato
locale: La lingua dell'interfaccia utente, di email e notifiche push
locked: Richiede che approvi i follower manualmente
@@ -52,6 +53,7 @@ it:
expires_in: Scade dopo
fields: Metadati del profilo
header: Header
+ inbox_url: URL della inbox del ripetitore
irreversible: Elimina invece di nascondere
locale: Lingua dell'interfaccia
locked: Blocca account
From 69bf116345e9ec24844c995f05b063a15972948b Mon Sep 17 00:00:00 2001
From: abcang
Date: Thu, 26 Jul 2018 01:49:47 +0900
Subject: [PATCH 036/196] Add secure option to additional cookie (#8069)
---
config/initializers/devise.rb | 2 ++
1 file changed, 2 insertions(+)
diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb
index e0d263f16..8532c9d9a 100644
--- a/config/initializers/devise.rb
+++ b/config/initializers/devise.rb
@@ -9,6 +9,7 @@ Warden::Manager.after_set_user except: :fetch do |user, warden|
value: session_id,
expires: 1.year.from_now,
httponly: true,
+ secure: (Rails.env.production? || ENV['LOCAL_HTTPS'] == 'true'),
}
end
@@ -18,6 +19,7 @@ Warden::Manager.after_fetch do |user, warden|
value: warden.cookies.signed['_session_id'] || warden.raw_session['auth_id'],
expires: 1.year.from_now,
httponly: true,
+ secure: (Rails.env.production? || ENV['LOCAL_HTTPS'] == 'true'),
}
else
warden.logout
From ba6a592b3957b490ec5d28a34aa6e988f530cc88 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marcin=20Miko=C5=82ajczak?=
Date: Thu, 26 Jul 2018 01:42:33 +0200
Subject: [PATCH 037/196] =?UTF-8?q?fix=20typo=20in=20=F0=9F=87=B5?=
=?UTF-8?q?=F0=9F=87=B1=20(#8075)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/javascript/mastodon/locales/pl.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json
index bcb015968..f4ac2c4c1 100644
--- a/app/javascript/mastodon/locales/pl.json
+++ b/app/javascript/mastodon/locales/pl.json
@@ -234,7 +234,7 @@
"reply_indicator.cancel": "Anuluj",
"report.forward": "Przekaż na {target}",
"report.forward_hint": "To konto znajduje się na innej instancji. Czy chcesz wysłać anonimową kopię zgłoszenia rnież na nią?",
- "report.hint": "Zgłoszenie zostanie wysłane moderatorom Twojej instancji. Poniżej możesz też umieścić wyjaśnieni dlaczego zgłaszasz to konto:",
+ "report.hint": "Zgłoszenie zostanie wysłane moderatorom Twojej instancji. Poniżej możesz też umieścić wyjaśnienie dlaczego zgłaszasz to konto:",
"report.placeholder": "Dodatkowe komentarze",
"report.submit": "Wyślij",
"report.target": "Zgłaszanie {target}",
From 9ad334f65c4391e04928c070714b43efc14b9658 Mon Sep 17 00:00:00 2001
From: abcang
Date: Thu, 26 Jul 2018 11:49:28 +0900
Subject: [PATCH 038/196] Call address instead of exchange (#8076)
---
app/validators/email_mx_validator.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/validators/email_mx_validator.rb b/app/validators/email_mx_validator.rb
index e9e6b56e8..8d1e58b38 100644
--- a/app/validators/email_mx_validator.rb
+++ b/app/validators/email_mx_validator.rb
@@ -16,7 +16,7 @@ class EmailMxValidator < ActiveModel::Validator
return true if domain.nil?
records = Resolv::DNS.new.getresources(domain, Resolv::DNS::Resource::IN::MX).to_a.map { |e| e.exchange.to_s }
- records = Resolv::DNS.new.getresources(domain, Resolv::DNS::Resource::IN::A).to_a.map { |e| e.exchange.to_s } if records.empty?
+ records = Resolv::DNS.new.getresources(domain, Resolv::DNS::Resource::IN::A).to_a.map { |e| e.address.to_s } if records.empty?
records.empty? || on_blacklist?(records)
end
From c9739ca86b65d67b106c770849aba19d3b32a638 Mon Sep 17 00:00:00 2001
From: Eai
Date: Thu, 26 Jul 2018 11:49:45 +0900
Subject: [PATCH 039/196] Fix .column-back-button line-height (#8074)
---
app/javascript/styles/mastodon/components.scss | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss
index b3d8f135f..846bda893 100644
--- a/app/javascript/styles/mastodon/components.scss
+++ b/app/javascript/styles/mastodon/components.scss
@@ -2011,6 +2011,7 @@ a.account__display-name {
cursor: pointer;
flex: 0 0 auto;
font-size: 16px;
+ line-height: inherit;
border: 0;
text-align: unset;
padding: 15px;
From d199806969be99f968cc9b3a74cc233e86e0cc12 Mon Sep 17 00:00:00 2001
From: ThibG
Date: Thu, 26 Jul 2018 04:50:50 +0200
Subject: [PATCH 040/196] Prevent scrolling main frame when navigating in image
gallery with arrow keys (#8073)
---
.../mastodon/features/ui/components/media_modal.js | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/app/javascript/mastodon/features/ui/components/media_modal.js b/app/javascript/mastodon/features/ui/components/media_modal.js
index 6af0a101c..12db95326 100644
--- a/app/javascript/mastodon/features/ui/components/media_modal.js
+++ b/app/javascript/mastodon/features/ui/components/media_modal.js
@@ -54,19 +54,23 @@ export default class MediaModal extends ImmutablePureComponent {
this.setState({ index: index % this.props.media.size });
}
- handleKeyUp = (e) => {
+ handleKeyDown = (e) => {
switch(e.key) {
case 'ArrowLeft':
this.handlePrevClick();
+ e.preventDefault();
+ e.stopPropagation();
break;
case 'ArrowRight':
this.handleNextClick();
+ e.preventDefault();
+ e.stopPropagation();
break;
}
}
componentDidMount () {
- window.addEventListener('keyup', this.handleKeyUp, false);
+ window.addEventListener('keydown', this.handleKeyDown, false);
if (this.context.router) {
const history = this.context.router.history;
history.push(history.location.pathname, previewState);
@@ -77,7 +81,7 @@ export default class MediaModal extends ImmutablePureComponent {
}
componentWillUnmount () {
- window.removeEventListener('keyup', this.handleKeyUp);
+ window.removeEventListener('keydown', this.handleKeyDown);
if (this.context.router) {
this.unlistenHistory();
From 3c35b34b612c210c97ce8cffda33798ffa8f22e8 Mon Sep 17 00:00:00 2001
From: ThibG
Date: Thu, 26 Jul 2018 04:51:25 +0200
Subject: [PATCH 041/196] Improve keyboard shortcuts descriptions (#8066)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* Add hotkey variants to keyboard shortcuts description
* Add documentation for “p” hotkey
* yarn manage:translations
---
.../mastodon/features/keyboard_shortcuts/index.js | 10 +++++++---
app/javascript/mastodon/locales/ar.json | 1 +
app/javascript/mastodon/locales/ast.json | 1 +
app/javascript/mastodon/locales/bg.json | 1 +
app/javascript/mastodon/locales/ca.json | 1 +
app/javascript/mastodon/locales/co.json | 1 +
app/javascript/mastodon/locales/cs.json | 1 +
app/javascript/mastodon/locales/da.json | 1 +
app/javascript/mastodon/locales/de.json | 1 +
app/javascript/mastodon/locales/defaultMessages.json | 4 ++++
app/javascript/mastodon/locales/el.json | 1 +
app/javascript/mastodon/locales/en.json | 1 +
app/javascript/mastodon/locales/eo.json | 1 +
app/javascript/mastodon/locales/es.json | 1 +
app/javascript/mastodon/locales/eu.json | 1 +
app/javascript/mastodon/locales/fa.json | 1 +
app/javascript/mastodon/locales/fi.json | 1 +
app/javascript/mastodon/locales/fr.json | 1 +
app/javascript/mastodon/locales/gl.json | 1 +
app/javascript/mastodon/locales/he.json | 1 +
app/javascript/mastodon/locales/hr.json | 1 +
app/javascript/mastodon/locales/hu.json | 1 +
app/javascript/mastodon/locales/hy.json | 1 +
app/javascript/mastodon/locales/id.json | 1 +
app/javascript/mastodon/locales/io.json | 1 +
app/javascript/mastodon/locales/it.json | 1 +
app/javascript/mastodon/locales/ja.json | 1 +
app/javascript/mastodon/locales/ko.json | 1 +
app/javascript/mastodon/locales/nl.json | 1 +
app/javascript/mastodon/locales/no.json | 1 +
app/javascript/mastodon/locales/oc.json | 1 +
app/javascript/mastodon/locales/pl.json | 1 +
app/javascript/mastodon/locales/pt-BR.json | 1 +
app/javascript/mastodon/locales/pt.json | 1 +
app/javascript/mastodon/locales/ru.json | 1 +
app/javascript/mastodon/locales/sk.json | 1 +
app/javascript/mastodon/locales/sl.json | 1 +
app/javascript/mastodon/locales/sr-Latn.json | 1 +
app/javascript/mastodon/locales/sr.json | 1 +
app/javascript/mastodon/locales/sv.json | 1 +
app/javascript/mastodon/locales/te.json | 1 +
app/javascript/mastodon/locales/th.json | 1 +
app/javascript/mastodon/locales/tr.json | 1 +
app/javascript/mastodon/locales/uk.json | 1 +
app/javascript/mastodon/locales/zh-CN.json | 1 +
app/javascript/mastodon/locales/zh-HK.json | 1 +
app/javascript/mastodon/locales/zh-TW.json | 1 +
47 files changed, 56 insertions(+), 3 deletions(-)
diff --git a/app/javascript/mastodon/features/keyboard_shortcuts/index.js b/app/javascript/mastodon/features/keyboard_shortcuts/index.js
index 5ae7b34a2..c6fb735eb 100644
--- a/app/javascript/mastodon/features/keyboard_shortcuts/index.js
+++ b/app/javascript/mastodon/features/keyboard_shortcuts/index.js
@@ -40,6 +40,10 @@ export default class KeyboardShortcuts extends ImmutablePureComponent {
m
+
+ p
+
+
f
@@ -49,7 +53,7 @@ export default class KeyboardShortcuts extends ImmutablePureComponent {
- enter
+ enter , o
@@ -57,11 +61,11 @@ export default class KeyboardShortcuts extends ImmutablePureComponent {
- up
+ up , k
- down
+ down , j
diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json
index ff0ddd95f..221aa4a41 100644
--- a/app/javascript/mastodon/locales/ar.json
+++ b/app/javascript/mastodon/locales/ar.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "مفتاح الإختصار",
"keyboard_shortcuts.legend": "لعرض هذا المفتاح",
"keyboard_shortcuts.mention": "لذِكر الناشر",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "للردّ",
"keyboard_shortcuts.search": "للتركيز على البحث",
"keyboard_shortcuts.toggle_hidden": "لعرض أو إخفاء النص مِن وراء التحذير",
diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json
index e86780c67..16bfd77bb 100644
--- a/app/javascript/mastodon/locales/ast.json
+++ b/app/javascript/mastodon/locales/ast.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "Hotkey",
"keyboard_shortcuts.legend": "to display this legend",
"keyboard_shortcuts.mention": "to mention author",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "to reply",
"keyboard_shortcuts.search": "to focus search",
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json
index c788b8c61..b7c08a8fb 100644
--- a/app/javascript/mastodon/locales/bg.json
+++ b/app/javascript/mastodon/locales/bg.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "Hotkey",
"keyboard_shortcuts.legend": "to display this legend",
"keyboard_shortcuts.mention": "to mention author",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "to reply",
"keyboard_shortcuts.search": "to focus search",
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json
index 408f5ced7..3bfcff46e 100644
--- a/app/javascript/mastodon/locales/ca.json
+++ b/app/javascript/mastodon/locales/ca.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "Tecla d'accés directe",
"keyboard_shortcuts.legend": "per a mostrar aquesta llegenda",
"keyboard_shortcuts.mention": "per esmentar l'autor",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "respondre",
"keyboard_shortcuts.search": "per centrar la cerca",
"keyboard_shortcuts.toggle_hidden": "per a mostrar/amagar text sota CW",
diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json
index 1e7090a19..5fec67e66 100644
--- a/app/javascript/mastodon/locales/co.json
+++ b/app/javascript/mastodon/locales/co.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "Accorta",
"keyboard_shortcuts.legend": "vede a legenda",
"keyboard_shortcuts.mention": "mintuvà l'autore",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "risponde",
"keyboard_shortcuts.search": "fucalizà nant'à l'area di circata",
"keyboard_shortcuts.toggle_hidden": "vede/piattà u testu daretu à l'avertimentu CW",
diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json
index 8b562794a..e0dd0ab23 100644
--- a/app/javascript/mastodon/locales/cs.json
+++ b/app/javascript/mastodon/locales/cs.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "Hotkey",
"keyboard_shortcuts.legend": "to display this legend",
"keyboard_shortcuts.mention": "to mention author",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "to reply",
"keyboard_shortcuts.search": "to focus search",
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json
index 90b88380a..76e769a51 100644
--- a/app/javascript/mastodon/locales/da.json
+++ b/app/javascript/mastodon/locales/da.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "Hurtigtast",
"keyboard_shortcuts.legend": "for at vise denne legende",
"keyboard_shortcuts.mention": "for at nævne forfatteren",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "for at svare",
"keyboard_shortcuts.search": "for at fokusere søgningen",
"keyboard_shortcuts.toggle_hidden": "for at vise/skjule tekst bag CW",
diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json
index 8ea318158..1bc6e12e1 100644
--- a/app/javascript/mastodon/locales/de.json
+++ b/app/javascript/mastodon/locales/de.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "Tastenkürzel",
"keyboard_shortcuts.legend": "um diese Übersicht anzuzeigen",
"keyboard_shortcuts.mention": "um Autor_in zu erwähnen",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "um zu antworten",
"keyboard_shortcuts.search": "um die Suche zu fokussieren",
"keyboard_shortcuts.toggle_hidden": "um den Text hinter einer Inhaltswarnung zu verstecken oder ihn anzuzeigen",
diff --git a/app/javascript/mastodon/locales/defaultMessages.json b/app/javascript/mastodon/locales/defaultMessages.json
index 8c43b4f42..85a6cc264 100644
--- a/app/javascript/mastodon/locales/defaultMessages.json
+++ b/app/javascript/mastodon/locales/defaultMessages.json
@@ -1254,6 +1254,10 @@
"defaultMessage": "to mention author",
"id": "keyboard_shortcuts.mention"
},
+ {
+ "defaultMessage": "to open author's profile",
+ "id": "keyboard_shortcuts.profile"
+ },
{
"defaultMessage": "to favourite",
"id": "keyboard_shortcuts.favourite"
diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json
index d6a0b8e04..c38e05059 100644
--- a/app/javascript/mastodon/locales/el.json
+++ b/app/javascript/mastodon/locales/el.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "Συντόμευση",
"keyboard_shortcuts.legend": "για να εμφανίσεις αυτόν τον οδηγό",
"keyboard_shortcuts.mention": "για να αναφέρεις το συγγραφέα",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "για απάντηση",
"keyboard_shortcuts.search": "για εστίαση αναζήτησης",
"keyboard_shortcuts.toggle_hidden": "για εμφάνιση/απόκρυψη κειμένου πίσω από την προειδοποίηση",
diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json
index 887c668ed..e1a504df0 100644
--- a/app/javascript/mastodon/locales/en.json
+++ b/app/javascript/mastodon/locales/en.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "Hotkey",
"keyboard_shortcuts.legend": "to display this legend",
"keyboard_shortcuts.mention": "to mention author",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "to reply",
"keyboard_shortcuts.search": "to focus search",
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json
index be2bc3d65..37a7cd889 100644
--- a/app/javascript/mastodon/locales/eo.json
+++ b/app/javascript/mastodon/locales/eo.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "Rapidklavo",
"keyboard_shortcuts.legend": "por montri ĉi tiun noton",
"keyboard_shortcuts.mention": "por mencii la aŭtoron",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "por respondi",
"keyboard_shortcuts.search": "por fokusigi la serĉilon",
"keyboard_shortcuts.toggle_hidden": "por montri/kaŝi tekston malantaŭ enhava averto",
diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json
index d4db8d15f..8fcee87cd 100644
--- a/app/javascript/mastodon/locales/es.json
+++ b/app/javascript/mastodon/locales/es.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "Tecla caliente",
"keyboard_shortcuts.legend": "para mostrar esta leyenda",
"keyboard_shortcuts.mention": "para mencionar al autor",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "para responder",
"keyboard_shortcuts.search": "para poner el foco en la búsqueda",
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json
index 33f477af3..55709acfc 100644
--- a/app/javascript/mastodon/locales/eu.json
+++ b/app/javascript/mastodon/locales/eu.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "Laster-tekla",
"keyboard_shortcuts.legend": "legenda hau bistaratzea",
"keyboard_shortcuts.mention": "egilea aipatzea",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "erantzutea",
"keyboard_shortcuts.search": "bilaketan fokua jartzea",
"keyboard_shortcuts.toggle_hidden": "testua erakustea/ezkutatzea abisu baten atzean",
diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json
index dba714951..ea2fd3401 100644
--- a/app/javascript/mastodon/locales/fa.json
+++ b/app/javascript/mastodon/locales/fa.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "میانبر",
"keyboard_shortcuts.legend": "برای نمایش این راهنما",
"keyboard_shortcuts.mention": "برای نامبردن از نویسنده",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "برای پاسخدادن",
"keyboard_shortcuts.search": "برای فعالکردن جستجو",
"keyboard_shortcuts.toggle_hidden": "برای نمایش/نهفتن نوشتهٔ پشت هشدار محتوا",
diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json
index dd7310a61..888f7a267 100644
--- a/app/javascript/mastodon/locales/fi.json
+++ b/app/javascript/mastodon/locales/fi.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "Pikanäppäin",
"keyboard_shortcuts.legend": "näytä tämä selite",
"keyboard_shortcuts.mention": "mainitse julkaisija",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "vastaa",
"keyboard_shortcuts.search": "siirry hakukenttään",
"keyboard_shortcuts.toggle_hidden": "näytä/piilota sisältövaroituksella merkitty teksti",
diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json
index 41cea6a82..8a525e576 100644
--- a/app/javascript/mastodon/locales/fr.json
+++ b/app/javascript/mastodon/locales/fr.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "Raccourci",
"keyboard_shortcuts.legend": "pour afficher cette légende",
"keyboard_shortcuts.mention": "pour mentionner l'auteur",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "pour répondre",
"keyboard_shortcuts.search": "pour cibler la recherche",
"keyboard_shortcuts.toggle_hidden": "pour afficher/cacher un texte derrière CW",
diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json
index ff817d681..64cab40c1 100644
--- a/app/javascript/mastodon/locales/gl.json
+++ b/app/javascript/mastodon/locales/gl.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "Tecla de acceso directo",
"keyboard_shortcuts.legend": "para mostrar esta lenda",
"keyboard_shortcuts.mention": "para mencionar o autor",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "para responder",
"keyboard_shortcuts.search": "para centrar a busca",
"keyboard_shortcuts.toggle_hidden": "mostrar/agochar un texto detrás do AC",
diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json
index 952c3d6db..033cf794a 100644
--- a/app/javascript/mastodon/locales/he.json
+++ b/app/javascript/mastodon/locales/he.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "מקש קיצור",
"keyboard_shortcuts.legend": "להציג את הפירוש",
"keyboard_shortcuts.mention": "לאזכר את המחבר(ת)",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "לענות",
"keyboard_shortcuts.search": "להתמקד בחלון החיפוש",
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json
index f8f1d0eb3..34ed197d4 100644
--- a/app/javascript/mastodon/locales/hr.json
+++ b/app/javascript/mastodon/locales/hr.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "Hotkey",
"keyboard_shortcuts.legend": "to display this legend",
"keyboard_shortcuts.mention": "to mention author",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "to reply",
"keyboard_shortcuts.search": "to focus search",
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json
index 1b2397f70..e2aa52c36 100644
--- a/app/javascript/mastodon/locales/hu.json
+++ b/app/javascript/mastodon/locales/hu.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "Gyorsbillentyű",
"keyboard_shortcuts.legend": "jelmagyarázat megjelenítése",
"keyboard_shortcuts.mention": "szerző megjelenítése",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "válaszolás",
"keyboard_shortcuts.search": "kereső kiemelése",
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json
index d2e1bf03e..207dd7eea 100644
--- a/app/javascript/mastodon/locales/hy.json
+++ b/app/javascript/mastodon/locales/hy.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "Հատուկ ստեղն",
"keyboard_shortcuts.legend": "այս ձեռնարկը ցուցադրելու համար",
"keyboard_shortcuts.mention": "հեղինակին նշելու համար",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "պատասխանելու համար",
"keyboard_shortcuts.search": "որոնման դաշտին սեւեռվելու համար",
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json
index 06045ae99..260a5f8ca 100644
--- a/app/javascript/mastodon/locales/id.json
+++ b/app/javascript/mastodon/locales/id.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "Hotkey",
"keyboard_shortcuts.legend": "to display this legend",
"keyboard_shortcuts.mention": "to mention author",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "to reply",
"keyboard_shortcuts.search": "untuk fokus mencari",
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json
index 5f9175c4f..87ebe31d8 100644
--- a/app/javascript/mastodon/locales/io.json
+++ b/app/javascript/mastodon/locales/io.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "Hotkey",
"keyboard_shortcuts.legend": "to display this legend",
"keyboard_shortcuts.mention": "to mention author",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "to reply",
"keyboard_shortcuts.search": "to focus search",
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json
index e16f9e2a0..5ee6f7d14 100644
--- a/app/javascript/mastodon/locales/it.json
+++ b/app/javascript/mastodon/locales/it.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "Tasto di scelta rapida",
"keyboard_shortcuts.legend": "per mostrare questa spiegazione",
"keyboard_shortcuts.mention": "per menzionare l'autore",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "per rispondere",
"keyboard_shortcuts.search": "per spostare il focus sulla ricerca",
"keyboard_shortcuts.toggle_hidden": "per mostrare/nascondere il testo dei CW",
diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json
index 3187701f4..3cec058bc 100644
--- a/app/javascript/mastodon/locales/ja.json
+++ b/app/javascript/mastodon/locales/ja.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "ホットキー",
"keyboard_shortcuts.legend": "この一覧を表示",
"keyboard_shortcuts.mention": "メンション",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "返信",
"keyboard_shortcuts.search": "検索欄に移動",
"keyboard_shortcuts.toggle_hidden": "CWで隠れた文を見る/隠す",
diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json
index 8f4b57c2b..206ebeefd 100644
--- a/app/javascript/mastodon/locales/ko.json
+++ b/app/javascript/mastodon/locales/ko.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "핫키",
"keyboard_shortcuts.legend": "이 도움말 표시",
"keyboard_shortcuts.mention": "멘션",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "답장",
"keyboard_shortcuts.search": "검색창에 포커스",
"keyboard_shortcuts.toggle_hidden": "CW로 가려진 텍스트를 표시/비표시",
diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json
index 07fac0da1..9ef0d9ed4 100644
--- a/app/javascript/mastodon/locales/nl.json
+++ b/app/javascript/mastodon/locales/nl.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "Sneltoets",
"keyboard_shortcuts.legend": "om deze legenda te tonen",
"keyboard_shortcuts.mention": "om de auteur te vermelden",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "om te reageren",
"keyboard_shortcuts.search": "om het zoekvak te focussen",
"keyboard_shortcuts.toggle_hidden": "om tekst achter een waarschuwing (CW) te tonen/verbergen",
diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json
index 31bbf7664..983a0b8f2 100644
--- a/app/javascript/mastodon/locales/no.json
+++ b/app/javascript/mastodon/locales/no.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "Lyntast",
"keyboard_shortcuts.legend": "å vise denne forklaringen",
"keyboard_shortcuts.mention": "å nevne forfatter",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "for å svare",
"keyboard_shortcuts.search": "å fokusere søk",
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json
index eff880165..a7e51720f 100644
--- a/app/javascript/mastodon/locales/oc.json
+++ b/app/javascript/mastodon/locales/oc.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "Acorchis",
"keyboard_shortcuts.legend": "mostrar aquesta legenda",
"keyboard_shortcuts.mention": "mencionar l’autor",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "respondre",
"keyboard_shortcuts.search": "anar a la recèrca",
"keyboard_shortcuts.toggle_hidden": "mostrar/amagar lo tèxte dels avertiments",
diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json
index f4ac2c4c1..7f3afb978 100644
--- a/app/javascript/mastodon/locales/pl.json
+++ b/app/javascript/mastodon/locales/pl.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "Klawisz",
"keyboard_shortcuts.legend": "aby wyświetlić tą legendę",
"keyboard_shortcuts.mention": "aby wspomnieć o autorze",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "aby odpowiedzieć",
"keyboard_shortcuts.search": "aby przejść do pola wyszukiwania",
"keyboard_shortcuts.toggle_hidden": "aby wyświetlić lub ukryć wpis spod CW",
diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json
index f820d9cf9..fa56e52fb 100644
--- a/app/javascript/mastodon/locales/pt-BR.json
+++ b/app/javascript/mastodon/locales/pt-BR.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "Atalho",
"keyboard_shortcuts.legend": "para mostrar essa legenda",
"keyboard_shortcuts.mention": "para mencionar o autor",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "para responder",
"keyboard_shortcuts.search": "para focar a pesquisa",
"keyboard_shortcuts.toggle_hidden": "mostrar/esconder o texto com aviso de conteúdo",
diff --git a/app/javascript/mastodon/locales/pt.json b/app/javascript/mastodon/locales/pt.json
index 686c05d72..802f22b45 100644
--- a/app/javascript/mastodon/locales/pt.json
+++ b/app/javascript/mastodon/locales/pt.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "Atalho",
"keyboard_shortcuts.legend": "para mostrar esta legenda",
"keyboard_shortcuts.mention": "para mencionar o autor",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "para responder",
"keyboard_shortcuts.search": "para focar na pesquisa",
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json
index ecde3fb2c..ad2dcda12 100644
--- a/app/javascript/mastodon/locales/ru.json
+++ b/app/javascript/mastodon/locales/ru.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "Гор. клавиша",
"keyboard_shortcuts.legend": "показать это окно",
"keyboard_shortcuts.mention": "упомянуть автора поста",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "ответить",
"keyboard_shortcuts.search": "перейти к поиску",
"keyboard_shortcuts.toggle_hidden": "показать/скрыть текст за предупреждением",
diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json
index 24ab1f83a..54671b243 100644
--- a/app/javascript/mastodon/locales/sk.json
+++ b/app/javascript/mastodon/locales/sk.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "Klávesa",
"keyboard_shortcuts.legend": "zobraziť túto legendu",
"keyboard_shortcuts.mention": "spomenúť autora",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "odpovedať",
"keyboard_shortcuts.search": "zamerať sa na vyhľadávanie",
"keyboard_shortcuts.toggle_hidden": "ukáž/skry text za CW",
diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json
index 73f31e8cf..2793f3cf1 100644
--- a/app/javascript/mastodon/locales/sl.json
+++ b/app/javascript/mastodon/locales/sl.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "Hitra tipka",
"keyboard_shortcuts.legend": "to display this legend",
"keyboard_shortcuts.mention": "to mention author",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "to reply",
"keyboard_shortcuts.search": "to focus search",
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json
index e3bf2189b..9baeb4c77 100644
--- a/app/javascript/mastodon/locales/sr-Latn.json
+++ b/app/javascript/mastodon/locales/sr-Latn.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "Prečica",
"keyboard_shortcuts.legend": "da prikažete ovaj podsetnik",
"keyboard_shortcuts.mention": "da pomenete autora",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "da odgovorite",
"keyboard_shortcuts.search": "da se prebacite na pretragu",
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json
index ba84a4d24..fc146686a 100644
--- a/app/javascript/mastodon/locales/sr.json
+++ b/app/javascript/mastodon/locales/sr.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "Пречица",
"keyboard_shortcuts.legend": "да прикажете овај подсетник",
"keyboard_shortcuts.mention": "да поменете аутора",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "да одговорите",
"keyboard_shortcuts.search": "да се пребаците на претрагу",
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json
index 64d488324..2fd87cb3a 100644
--- a/app/javascript/mastodon/locales/sv.json
+++ b/app/javascript/mastodon/locales/sv.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "Snabbvalstangent",
"keyboard_shortcuts.legend": "att visa denna översikt",
"keyboard_shortcuts.mention": "att nämna författaren",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "att svara",
"keyboard_shortcuts.search": "att fokusera sökfältet",
"keyboard_shortcuts.toggle_hidden": "att visa/gömma text bakom CW",
diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json
index 7e405b8c2..48a648622 100644
--- a/app/javascript/mastodon/locales/te.json
+++ b/app/javascript/mastodon/locales/te.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "హాట్ కీ",
"keyboard_shortcuts.legend": "ఈ లెజెండ్ ప్రదర్శించడానికి",
"keyboard_shortcuts.mention": "రచయితను ప్రస్తావించడానికి",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "ప్రత్యుత్తరం ఇవ్వడానికి",
"keyboard_shortcuts.search": "శోధనపై దృష్టి పెట్టండి",
"keyboard_shortcuts.toggle_hidden": "CW వెనుక ఉన్న పాఠ్యాన్ని చూపడానికి / దాచడానికి",
diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json
index 1d76735a2..09b48f5cd 100644
--- a/app/javascript/mastodon/locales/th.json
+++ b/app/javascript/mastodon/locales/th.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "Hotkey",
"keyboard_shortcuts.legend": "to display this legend",
"keyboard_shortcuts.mention": "to mention author",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "to reply",
"keyboard_shortcuts.search": "to focus search",
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json
index 03a09019f..c96eee746 100644
--- a/app/javascript/mastodon/locales/tr.json
+++ b/app/javascript/mastodon/locales/tr.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "Hotkey",
"keyboard_shortcuts.legend": "to display this legend",
"keyboard_shortcuts.mention": "to mention author",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "to reply",
"keyboard_shortcuts.search": "to focus search",
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json
index 7bb2476d0..5b7b09a27 100644
--- a/app/javascript/mastodon/locales/uk.json
+++ b/app/javascript/mastodon/locales/uk.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "Hotkey",
"keyboard_shortcuts.legend": "to display this legend",
"keyboard_shortcuts.mention": "to mention author",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "to reply",
"keyboard_shortcuts.search": "to focus search",
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json
index 8b73bb8f9..cc5f911c7 100644
--- a/app/javascript/mastodon/locales/zh-CN.json
+++ b/app/javascript/mastodon/locales/zh-CN.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "快捷键",
"keyboard_shortcuts.legend": "显示此列表",
"keyboard_shortcuts.mention": "提及嘟文作者",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "回复嘟文",
"keyboard_shortcuts.search": "选择搜索框",
"keyboard_shortcuts.toggle_hidden": "显示或隐藏被折叠的正文",
diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json
index 21c3e6154..012790cc7 100644
--- a/app/javascript/mastodon/locales/zh-HK.json
+++ b/app/javascript/mastodon/locales/zh-HK.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "快速鍵",
"keyboard_shortcuts.legend": "顯示這個說明",
"keyboard_shortcuts.mention": "提及作者",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "回覆",
"keyboard_shortcuts.search": "把標示移動到搜索",
"keyboard_shortcuts.toggle_hidden": "顯示或隱藏被標為敏感的文字",
diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json
index b4a70ef70..2de00690b 100644
--- a/app/javascript/mastodon/locales/zh-TW.json
+++ b/app/javascript/mastodon/locales/zh-TW.json
@@ -137,6 +137,7 @@
"keyboard_shortcuts.hotkey": "快速鍵",
"keyboard_shortcuts.legend": "顯示這個說明",
"keyboard_shortcuts.mention": "到提到的作者",
+ "keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "到回應",
"keyboard_shortcuts.search": "把滑鼠移動到搜尋",
"keyboard_shortcuts.toggle_hidden": "顯示或隱藏被標為敏感的嘟文",
From 0fb0037ca7ea9910b490818a1cc13f4005ba6134 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Sat, 28 Jul 2018 03:33:00 +0200
Subject: [PATCH 042/196] Resize images by area instead of fixed dimensions
(#8083)
To improve the way super tall or super ride images are treated, the
numbers remain the same, 1280x1280 and 400x400, but if an image
is less in one dimension than the other, the other can become larger
Thanks to @WAHa_06x36@mastodon.social for the tip
---
app/javascript/mastodon/utils/resize_image.js | 18 ++++--------------
app/models/media_attachment.rb | 6 +++---
lib/paperclip/lazy_thumbnail.rb | 13 ++++++++++---
spec/models/media_attachment_spec.rb | 6 +++---
4 files changed, 20 insertions(+), 23 deletions(-)
diff --git a/app/javascript/mastodon/utils/resize_image.js b/app/javascript/mastodon/utils/resize_image.js
index 279a858ca..d1608094f 100644
--- a/app/javascript/mastodon/utils/resize_image.js
+++ b/app/javascript/mastodon/utils/resize_image.js
@@ -1,6 +1,6 @@
import EXIF from 'exif-js';
-const MAX_IMAGE_DIMENSION = 1280;
+const MAX_IMAGE_PIXELS = 1638400; // 1280x1280px
const getImageUrl = inputFile => new Promise((resolve, reject) => {
if (window.URL && URL.createObjectURL) {
@@ -73,18 +73,8 @@ const processImage = (img, { width, height, orientation, type = 'image/png' }) =
const resizeImage = (img, type = 'image/png') => new Promise((resolve, reject) => {
const { width, height } = img;
- let newWidth, newHeight;
-
- if (width > height) {
- newHeight = height * MAX_IMAGE_DIMENSION / width;
- newWidth = MAX_IMAGE_DIMENSION;
- } else if (height > width) {
- newWidth = width * MAX_IMAGE_DIMENSION / height;
- newHeight = MAX_IMAGE_DIMENSION;
- } else {
- newWidth = MAX_IMAGE_DIMENSION;
- newHeight = MAX_IMAGE_DIMENSION;
- }
+ const newWidth = Math.round(Math.sqrt(MAX_IMAGE_PIXELS * (width / height)));
+ const newHeight = Math.round(Math.sqrt(MAX_IMAGE_PIXELS * (height / width)));
getOrientation(img, type)
.then(orientation => processImage(img, {
@@ -104,7 +94,7 @@ export default inputFile => new Promise((resolve, reject) => {
}
loadImage(inputFile).then(img => {
- if (img.width < MAX_IMAGE_DIMENSION && img.height < MAX_IMAGE_DIMENSION) {
+ if (img.width * img.height < MAX_IMAGE_PIXELS) {
resolve(inputFile);
return;
}
diff --git a/app/models/media_attachment.rb b/app/models/media_attachment.rb
index f9a8f322e..63c6d5af8 100644
--- a/app/models/media_attachment.rb
+++ b/app/models/media_attachment.rb
@@ -32,12 +32,12 @@ class MediaAttachment < ApplicationRecord
IMAGE_STYLES = {
original: {
- geometry: '1280x1280>',
+ pixels: 1_638_400, # 1280x1280px
file_geometry_parser: FastGeometryParser,
},
small: {
- geometry: '400x400>',
+ pixels: 160_000, # 400x400px
file_geometry_parser: FastGeometryParser,
},
}.freeze
@@ -152,7 +152,7 @@ class MediaAttachment < ApplicationRecord
elsif VIDEO_MIME_TYPES.include? f.file_content_type
[:video_transcoder]
else
- [:thumbnail]
+ [:lazy_thumbnail]
end
end
end
diff --git a/lib/paperclip/lazy_thumbnail.rb b/lib/paperclip/lazy_thumbnail.rb
index aafa21343..ea675a5bf 100644
--- a/lib/paperclip/lazy_thumbnail.rb
+++ b/lib/paperclip/lazy_thumbnail.rb
@@ -5,8 +5,14 @@ module Paperclip
def make
return File.open(@file.path) unless needs_convert?
- min_side = [@current_geometry.width, @current_geometry.height].min
- options[:geometry] = "#{min_side.to_i}x#{min_side.to_i}#" if @target_geometry.square? && min_side < @target_geometry.width
+ if options[:geometry]
+ min_side = [@current_geometry.width, @current_geometry.height].min.to_i
+ options[:geometry] = "#{min_side}x#{min_side}#" if @target_geometry.square? && min_side < @target_geometry.width
+ elsif options[:pixels]
+ width = Math.sqrt(options[:pixels] * (@current_geometry.width.to_f / @current_geometry.height.to_f)).round.to_i
+ height = Math.sqrt(options[:pixels] * (@current_geometry.height.to_f / @current_geometry.width.to_f)).round.to_i
+ options[:geometry] = "#{width}x#{height}>"
+ end
Paperclip::Thumbnail.make(file, options, attachment)
end
@@ -18,7 +24,8 @@ module Paperclip
end
def needs_different_geometry?
- !@target_geometry.nil? && @current_geometry.width != @target_geometry.width && @current_geometry.height != @target_geometry.height
+ (options[:geometry] && @current_geometry.width != @target_geometry.width && @current_geometry.height != @target_geometry.height) ||
+ (options[:pixels] && @current_geometry.width * @current_geometry.height > options[:pixels])
end
def needs_different_format?
diff --git a/spec/models/media_attachment_spec.rb b/spec/models/media_attachment_spec.rb
index d2230b6d0..cb1cee518 100644
--- a/spec/models/media_attachment_spec.rb
+++ b/spec/models/media_attachment_spec.rb
@@ -129,9 +129,9 @@ RSpec.describe MediaAttachment, type: :model do
expect(media.file.meta["original"]["width"]).to eq 600
expect(media.file.meta["original"]["height"]).to eq 400
expect(media.file.meta["original"]["aspect"]).to eq 1.5
- expect(media.file.meta["small"]["width"]).to eq 400
- expect(media.file.meta["small"]["height"]).to eq 267
- expect(media.file.meta["small"]["aspect"]).to eq 400.0/267
+ expect(media.file.meta["small"]["width"]).to eq 490
+ expect(media.file.meta["small"]["height"]).to eq 327
+ expect(media.file.meta["small"]["aspect"]).to eq 490.0/327
end
end
From e23b26178a71f90d64fe2a3e9e4468f265ecc71c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marcin=20Miko=C5=82ajczak?=
Date: Sat, 28 Jul 2018 19:20:45 +0200
Subject: [PATCH 043/196] i18n: Update Polish translation (#8084)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Marcin Mikołajczak
---
app/javascript/mastodon/locales/pl.json | 2 +-
config/locales/pl.yml | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json
index 7f3afb978..728a2c88c 100644
--- a/app/javascript/mastodon/locales/pl.json
+++ b/app/javascript/mastodon/locales/pl.json
@@ -137,7 +137,7 @@
"keyboard_shortcuts.hotkey": "Klawisz",
"keyboard_shortcuts.legend": "aby wyświetlić tą legendę",
"keyboard_shortcuts.mention": "aby wspomnieć o autorze",
- "keyboard_shortcuts.profile": "to open author's profile",
+ "keyboard_shortcuts.profile": "aby przejść do profilu autora wpisu",
"keyboard_shortcuts.reply": "aby odpowiedzieć",
"keyboard_shortcuts.search": "aby przejść do pola wyszukiwania",
"keyboard_shortcuts.toggle_hidden": "aby wyświetlić lub ukryć wpis spod CW",
diff --git a/config/locales/pl.yml b/config/locales/pl.yml
index 62e2b59ae..f4d6f57af 100644
--- a/config/locales/pl.yml
+++ b/config/locales/pl.yml
@@ -223,6 +223,7 @@ pl:
space: Używana powierzchnia
title: Panel administracyjny
total_users: łącznie użytkowników
+ trends: Na czasie
week_interactions: interakcje w tym tygodniu
week_users_active: aktywni w tym tygodniu
week_users_new: rejestracje w tym tygodniu
From bb71538bb503159177d46d8956bd466973c0876b Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Sat, 28 Jul 2018 19:25:33 +0200
Subject: [PATCH 044/196] Redesign public profiles and toots (#8068)
---
.../concerns/account_controller_concern.rb | 5 +
app/controllers/statuses_controller.rb | 5 +
app/helpers/stream_entries_helper.rb | 46 ++
.../mastodon/components/relative_timestamp.js | 50 +-
app/javascript/packs/public.js | 45 +-
app/javascript/styles/application.scss | 2 +-
app/javascript/styles/mastodon/accounts.scss | 575 +++---------------
app/javascript/styles/mastodon/basics.scss | 5 +-
.../styles/mastodon/components.scss | 12 +
.../styles/mastodon/containers.scss | 573 +++++++++++++++++
app/javascript/styles/mastodon/footer.scss | 155 ++++-
.../styles/mastodon/landing_strip.scss | 111 ----
.../styles/mastodon/stream_entries.scss | 400 +++---------
app/javascript/styles/mastodon/variables.scss | 2 +
app/javascript/styles/mastodon/widgets.scss | 123 ++++
app/models/concerns/account_header.rb | 5 +-
app/views/accounts/_bio.html.haml | 15 +
app/views/accounts/_follow_button.html.haml | 28 -
app/views/accounts/_follow_grid.html.haml | 8 -
.../accounts/_follow_grid_hidden.html.haml | 3 -
app/views/accounts/_grid_card.html.haml | 12 -
app/views/accounts/_header.html.haml | 82 ++-
...moved_strip.html.haml => _moved.html.haml} | 11 +-
app/views/accounts/_nothing_here.html.haml | 1 -
app/views/accounts/show.html.haml | 57 +-
app/views/application/_card.html.haml | 16 +
app/views/application/_sidebar.html.haml | 6 +
app/views/auth/registrations/new.html.haml | 2 +-
app/views/authorize_follows/_card.html.haml | 23 -
app/views/authorize_follows/show.html.haml | 2 +-
app/views/authorize_follows/success.html.haml | 2 +-
app/views/follower_accounts/index.html.haml | 9 +-
app/views/following_accounts/index.html.haml | 9 +-
app/views/layouts/public.html.haml | 55 +-
app/views/remote_follow/new.html.haml | 2 +-
app/views/remote_unfollows/success.html.haml | 2 +-
app/views/settings/migrations/show.html.haml | 2 +-
app/views/settings/profiles/show.html.haml | 3 +-
app/views/shared/_landing_strip.html.haml | 6 -
.../stream_entries/_content_spoiler.html.haml | 7 -
.../stream_entries/_detailed_status.html.haml | 34 +-
app/views/stream_entries/_media.html.haml | 4 -
app/views/stream_entries/_more.html.haml | 2 -
.../stream_entries/_simple_status.html.haml | 34 +-
app/views/stream_entries/_status.html.haml | 23 +-
app/views/stream_entries/embed.html.haml | 2 +-
app/views/stream_entries/show.html.haml | 11 +-
config/locales/ar.yml | 5 -
config/locales/ast.yml | 3 -
config/locales/bg.yml | 5 -
config/locales/ca.yml | 5 -
config/locales/co.yml | 5 -
config/locales/da.yml | 3 -
config/locales/de.yml | 5 -
config/locales/el.yml | 5 -
config/locales/en.yml | 15 +-
config/locales/eo.yml | 5 -
config/locales/es.yml | 5 -
config/locales/eu.yml | 5 -
config/locales/fa.yml | 5 -
config/locales/fi.yml | 5 -
config/locales/fr.yml | 5 -
config/locales/gl.yml | 5 -
config/locales/he.yml | 5 -
config/locales/hr.yml | 5 -
config/locales/hu.yml | 5 -
config/locales/id.yml | 5 -
config/locales/io.yml | 5 -
config/locales/it.yml | 5 -
config/locales/ja.yml | 5 -
config/locales/ko.yml | 5 -
config/locales/nl.yml | 5 -
config/locales/no.yml | 5 -
config/locales/oc.yml | 5 -
config/locales/pl.yml | 5 -
config/locales/pt-BR.yml | 5 -
config/locales/pt.yml | 5 -
config/locales/ru.yml | 5 -
config/locales/sk.yml | 5 -
config/locales/sl.yml | 1 -
config/locales/sr-Latn.yml | 5 -
config/locales/sr.yml | 5 -
config/locales/sv.yml | 5 -
config/locales/th.yml | 5 -
config/locales/tr.yml | 5 -
config/locales/uk.yml | 5 -
config/locales/zh-CN.yml | 5 -
config/locales/zh-HK.yml | 5 -
config/locales/zh-TW.yml | 5 -
lib/mastodon/version.rb | 6 +-
package.json | 1 +
.../stream_entries/show.html.haml_spec.rb | 1 +
yarn.lock | 4 +
93 files changed, 1388 insertions(+), 1423 deletions(-)
delete mode 100644 app/javascript/styles/mastodon/landing_strip.scss
create mode 100644 app/javascript/styles/mastodon/widgets.scss
create mode 100644 app/views/accounts/_bio.html.haml
delete mode 100644 app/views/accounts/_follow_button.html.haml
delete mode 100644 app/views/accounts/_follow_grid.html.haml
delete mode 100644 app/views/accounts/_follow_grid_hidden.html.haml
delete mode 100644 app/views/accounts/_grid_card.html.haml
rename app/views/accounts/{_moved_strip.html.haml => _moved.html.haml} (54%)
delete mode 100644 app/views/accounts/_nothing_here.html.haml
create mode 100644 app/views/application/_card.html.haml
create mode 100644 app/views/application/_sidebar.html.haml
delete mode 100644 app/views/authorize_follows/_card.html.haml
delete mode 100644 app/views/shared/_landing_strip.html.haml
delete mode 100644 app/views/stream_entries/_content_spoiler.html.haml
delete mode 100644 app/views/stream_entries/_media.html.haml
delete mode 100644 app/views/stream_entries/_more.html.haml
diff --git a/app/controllers/concerns/account_controller_concern.rb b/app/controllers/concerns/account_controller_concern.rb
index 5b9981aa2..6c27ef330 100644
--- a/app/controllers/concerns/account_controller_concern.rb
+++ b/app/controllers/concerns/account_controller_concern.rb
@@ -8,6 +8,7 @@ module AccountControllerConcern
included do
layout 'public'
before_action :set_account
+ before_action :set_instance_presenter
before_action :set_link_headers
before_action :check_account_suspension
end
@@ -18,6 +19,10 @@ module AccountControllerConcern
@account = Account.find_local!(params[:account_username])
end
+ def set_instance_presenter
+ @instance_presenter = InstancePresenter.new
+ end
+
def set_link_headers
response.headers['Link'] = LinkHeader.new(
[
diff --git a/app/controllers/statuses_controller.rb b/app/controllers/statuses_controller.rb
index b85341822..755af1deb 100644
--- a/app/controllers/statuses_controller.rb
+++ b/app/controllers/statuses_controller.rb
@@ -12,6 +12,7 @@ class StatusesController < ApplicationController
before_action :set_account
before_action :set_status
+ before_action :set_instance_presenter
before_action :set_link_headers
before_action :check_account_suspension
before_action :redirect_to_original, only: [:show]
@@ -148,6 +149,10 @@ class StatusesController < ApplicationController
raise ActiveRecord::RecordNotFound
end
+ def set_instance_presenter
+ @instance_presenter = InstancePresenter.new
+ end
+
def check_account_suspension
gone if @account.suspended?
end
diff --git a/app/helpers/stream_entries_helper.rb b/app/helpers/stream_entries_helper.rb
index 05cea73d7..121644263 100644
--- a/app/helpers/stream_entries_helper.rb
+++ b/app/helpers/stream_entries_helper.rb
@@ -12,6 +12,52 @@ module StreamEntriesHelper
end
end
+ def account_action_button(account)
+ if user_signed_in?
+ if account.id == current_user.account_id
+ link_to settings_profile_url, class: 'button logo-button' do
+ safe_join([render(file: Rails.root.join('app', 'javascript', 'images', 'logo.svg')), t('settings.edit_profile')])
+ end
+ elsif current_account.following?(account) || current_account.requested?(account)
+ link_to account_unfollow_path(account), class: 'button logo-button', data: { method: :post } do
+ safe_join([render(file: Rails.root.join('app', 'javascript', 'images', 'logo.svg')), t('accounts.unfollow')])
+ end
+ else
+ link_to account_follow_path(account), class: 'button logo-button', data: { method: :post } do
+ safe_join([render(file: Rails.root.join('app', 'javascript', 'images', 'logo.svg')), t('accounts.follow')])
+ end
+ end
+ else
+ link_to account_remote_follow_path(account), class: 'button logo-button modal-button', target: '_new' do
+ safe_join([render(file: Rails.root.join('app', 'javascript', 'images', 'logo.svg')), t('accounts.follow')])
+ end
+ end
+ end
+
+ def account_badge(account)
+ if account.bot?
+ content_tag(:div, content_tag(:div, t('accounts.roles.bot'), class: 'account-role bot'), class: 'roles')
+ elsif Setting.show_staff_badge && account.user_staff?
+ content_tag(:div, class: 'roles') do
+ if account.user_admin?
+ content_tag(:div, t('accounts.roles.admin'), class: 'account-role admin')
+ elsif account.user_moderator?
+ content_tag(:div, t('accounts.roles.moderator'), class: 'account-role moderator')
+ end
+ end
+ end
+ end
+
+ def link_to_more(url)
+ link_to t('statuses.show_more'), url, class: 'load-more load-gap'
+ end
+
+ def nothing_here(extra_classes = '')
+ content_tag(:div, class: "nothing-here #{extra_classes}") do
+ t('accounts.nothing_here')
+ end
+ end
+
def account_description(account)
prepend_str = [
[
diff --git a/app/javascript/mastodon/components/relative_timestamp.js b/app/javascript/mastodon/components/relative_timestamp.js
index 3c8db7092..9609714a1 100644
--- a/app/javascript/mastodon/components/relative_timestamp.js
+++ b/app/javascript/mastodon/components/relative_timestamp.js
@@ -60,6 +60,32 @@ const getUnitDelay = units => {
}
};
+export const timeAgoString = (intl, date, now, year) => {
+ const delta = now - date.getTime();
+
+ let relativeTime;
+
+ if (delta < 10 * SECOND) {
+ relativeTime = intl.formatMessage(messages.just_now);
+ } else if (delta < 7 * DAY) {
+ if (delta < MINUTE) {
+ relativeTime = intl.formatMessage(messages.seconds, { number: Math.floor(delta / SECOND) });
+ } else if (delta < HOUR) {
+ relativeTime = intl.formatMessage(messages.minutes, { number: Math.floor(delta / MINUTE) });
+ } else if (delta < DAY) {
+ relativeTime = intl.formatMessage(messages.hours, { number: Math.floor(delta / HOUR) });
+ } else {
+ relativeTime = intl.formatMessage(messages.days, { number: Math.floor(delta / DAY) });
+ }
+ } else if (date.getFullYear() === year) {
+ relativeTime = intl.formatDate(date, shortDateFormatOptions);
+ } else {
+ relativeTime = intl.formatDate(date, { ...shortDateFormatOptions, year: 'numeric' });
+ }
+
+ return relativeTime;
+};
+
@injectIntl
export default class RelativeTimestamp extends React.Component {
@@ -121,28 +147,8 @@ export default class RelativeTimestamp extends React.Component {
render () {
const { timestamp, intl, year } = this.props;
- const date = new Date(timestamp);
- const delta = this.state.now - date.getTime();
-
- let relativeTime;
-
- if (delta < 10 * SECOND) {
- relativeTime = intl.formatMessage(messages.just_now);
- } else if (delta < 7 * DAY) {
- if (delta < MINUTE) {
- relativeTime = intl.formatMessage(messages.seconds, { number: Math.floor(delta / SECOND) });
- } else if (delta < HOUR) {
- relativeTime = intl.formatMessage(messages.minutes, { number: Math.floor(delta / MINUTE) });
- } else if (delta < DAY) {
- relativeTime = intl.formatMessage(messages.hours, { number: Math.floor(delta / HOUR) });
- } else {
- relativeTime = intl.formatMessage(messages.days, { number: Math.floor(delta / DAY) });
- }
- } else if (date.getFullYear() === year) {
- relativeTime = intl.formatDate(date, shortDateFormatOptions);
- } else {
- relativeTime = intl.formatDate(date, { ...shortDateFormatOptions, year: 'numeric' });
- }
+ const date = new Date(timestamp);
+ const relativeTime = timeAgoString(intl, date, this.state.now, year);
return (
diff --git a/app/javascript/packs/public.js b/app/javascript/packs/public.js
index 4b1e87ae3..855e56ee6 100644
--- a/app/javascript/packs/public.js
+++ b/app/javascript/packs/public.js
@@ -22,15 +22,15 @@ window.addEventListener('message', e => {
function main() {
const { length } = require('stringz');
- const IntlRelativeFormat = require('intl-relativeformat').default;
+ const IntlMessageFormat = require('intl-messageformat').default;
+ const { timeAgoString } = require('../mastodon/components/relative_timestamp');
const { delegate } = require('rails-ujs');
const emojify = require('../mastodon/features/emoji/emoji').default;
const { getLocale } = require('../mastodon/locales');
- const { localeData } = getLocale();
+ const { messages } = getLocale();
const React = require('react');
const ReactDOM = require('react-dom');
-
- localeData.forEach(IntlRelativeFormat.__addLocaleData);
+ const Rellax = require('rellax');
ready(() => {
const locale = document.documentElement.lang;
@@ -43,8 +43,6 @@ function main() {
minute: 'numeric',
});
- const relativeFormat = new IntlRelativeFormat(locale);
-
[].forEach.call(document.querySelectorAll('.emojify'), (content) => {
content.innerHTML = emojify(content.innerHTML);
});
@@ -59,12 +57,16 @@ function main() {
[].forEach.call(document.querySelectorAll('time.time-ago'), (content) => {
const datetime = new Date(content.getAttribute('datetime'));
+ const now = new Date();
content.title = dateTimeFormat.format(datetime);
- content.textContent = relativeFormat.format(datetime);
+ content.textContent = timeAgoString({
+ formatMessage: ({ id, defaultMessage }, values) => (new IntlMessageFormat(messages[id] || defaultMessage, locale)).format(values),
+ formatDate: (date, options) => (new Intl.DateTimeFormat(locale, options)).format(date),
+ }, datetime, now, datetime.getFullYear());
});
- [].forEach.call(document.querySelectorAll('.logo-button'), (content) => {
+ [].forEach.call(document.querySelectorAll('.modal-button'), (content) => {
content.addEventListener('click', (e) => {
e.preventDefault();
window.open(e.target.href, 'mastodon-intent', 'width=445,height=600,resizable=no,menubar=no,status=no,scrollbars=yes');
@@ -82,6 +84,8 @@ function main() {
})
.catch(error => console.error(error));
}
+
+ new Rellax('.parallax', { speed: -1 });
});
delegate(document, '.webapp-btn', 'click', ({ target, button }) => {
@@ -106,15 +110,20 @@ function main() {
return false;
});
- delegate(document, '.account_display_name', 'input', ({ target }) => {
+ delegate(document, '#account_display_name', 'input', ({ target }) => {
const nameCounter = document.querySelector('.name-counter');
+ const name = document.querySelector('.card .display-name strong');
if (nameCounter) {
nameCounter.textContent = 30 - length(target.value);
}
+
+ if (name) {
+ name.innerHTML = emojify(target.value);
+ }
});
- delegate(document, '.account_note', 'input', ({ target }) => {
+ delegate(document, '#account_note', 'input', ({ target }) => {
const noteCounter = document.querySelector('.note-counter');
if (noteCounter) {
@@ -123,7 +132,7 @@ function main() {
});
delegate(document, '#account_avatar', 'change', ({ target }) => {
- const avatar = document.querySelector('.card.compact .avatar img');
+ const avatar = document.querySelector('.card .avatar img');
const [file] = target.files || [];
const url = file ? URL.createObjectURL(file) : avatar.dataset.originalSrc;
@@ -131,11 +140,21 @@ function main() {
});
delegate(document, '#account_header', 'change', ({ target }) => {
- const header = document.querySelector('.card.compact');
+ const header = document.querySelector('.card .card__img img');
const [file] = target.files || [];
const url = file ? URL.createObjectURL(file) : header.dataset.originalSrc;
- header.style.backgroundImage = `url(${url})`;
+ header.src = url;
+ });
+
+ delegate(document, '#account_locked', 'change', ({ target }) => {
+ const lock = document.querySelector('.card .display-name i');
+
+ if (target.checked) {
+ lock.style.display = 'inline';
+ } else {
+ lock.style.display = 'none';
+ }
});
}
diff --git a/app/javascript/styles/application.scss b/app/javascript/styles/application.scss
index 7b3b10dfe..0990a4f25 100644
--- a/app/javascript/styles/application.scss
+++ b/app/javascript/styles/application.scss
@@ -10,7 +10,7 @@
@import 'mastodon/lists';
@import 'mastodon/footer';
@import 'mastodon/compact_header';
-@import 'mastodon/landing_strip';
+@import 'mastodon/widgets';
@import 'mastodon/forms';
@import 'mastodon/accounts';
@import 'mastodon/stream_entries';
diff --git a/app/javascript/styles/mastodon/accounts.scss b/app/javascript/styles/mastodon/accounts.scss
index b4612b063..c27bc0df3 100644
--- a/app/javascript/styles/mastodon/accounts.scss
+++ b/app/javascript/styles/mastodon/accounts.scss
@@ -1,243 +1,100 @@
.card {
- background-color: $base-shadow-color;
- background-size: cover;
- background-position: center;
- border-radius: 4px 4px 0 0;
- box-shadow: 0 0 15px rgba($base-shadow-color, 0.2);
- overflow: hidden;
- position: relative;
- display: flex;
-
- &::after {
- background: rgba(darken($ui-base-color, 8%), 0.5);
+ & > a {
display: block;
- content: "";
- position: absolute;
- left: 0;
- top: 0;
- width: 100%;
- height: 100%;
- z-index: 1;
- }
+ text-decoration: none;
+ color: inherit;
+ box-shadow: 0 0 15px rgba($base-shadow-color, 0.2);
- @media screen and (max-width: 740px) {
- border-radius: 0;
- box-shadow: none;
- }
+ @media screen and (max-width: $no-gap-breakpoint) {
+ box-shadow: none;
+ }
- .card__illustration {
- padding: 60px 0;
- position: relative;
- flex: 1 1 auto;
- display: flex;
- justify-content: center;
- align-items: center;
- }
-
- .card__bio {
- max-width: 260px;
- flex: 1 1 auto;
- display: flex;
- flex-direction: column;
- justify-content: space-between;
- background: rgba(darken($ui-base-color, 8%), 0.8);
- position: relative;
- z-index: 2;
- }
-
- &.compact {
- padding: 30px 0;
- border-radius: 4px;
-
- .avatar {
- margin-bottom: 0;
-
- img {
- object-fit: cover;
+ &:hover,
+ &:active,
+ &:focus {
+ .card__bar {
+ background: lighten($ui-base-color, 8%);
}
}
}
- .name {
- display: block;
- font-size: 20px;
- line-height: 18px * 1.5;
- color: $primary-text-color;
- padding: 10px 15px;
- padding-bottom: 0;
- font-weight: 500;
+ &__img {
+ height: 130px;
position: relative;
- z-index: 2;
- margin-bottom: 30px;
- overflow: hidden;
- text-overflow: ellipsis;
-
- small {
- display: block;
- font-size: 14px;
- color: $highlight-text-color;
- font-weight: 400;
- overflow: hidden;
- text-overflow: ellipsis;
-
- .fa {
- margin-left: 3px;
- }
- }
- }
-
- .avatar {
- width: 120px;
- margin: 0 auto;
- position: relative;
- z-index: 2;
+ background: darken($ui-base-color, 12%);
+ border-radius: 4px 4px 0 0;
img {
- width: 120px;
- height: 120px;
display: block;
- border-radius: 120px;
- box-shadow: 0 0 15px rgba($base-shadow-color, 0.2);
- }
- }
-
- .roles {
- margin-bottom: 30px;
- padding: 0 15px;
- }
-
- .details-counters {
- margin-top: 30px;
- display: flex;
- flex-direction: row;
- width: 100%;
- }
-
- .counter {
- width: 33.3%;
- box-sizing: border-box;
- flex: 0 0 auto;
- color: $darker-text-color;
- padding: 5px 10px 0;
- margin-bottom: 10px;
- border-right: 1px solid lighten($ui-base-color, 4%);
- cursor: default;
- text-align: center;
- position: relative;
-
- a {
- display: block;
- }
-
- &:last-child {
- border-right: 0;
- }
-
- &::after {
- display: block;
- content: "";
- position: absolute;
- bottom: -10px;
- left: 0;
width: 100%;
- border-bottom: 4px solid $ui-primary-color;
- opacity: 0.5;
- transition: all 400ms ease;
+ height: 100%;
+ margin: 0;
+ object-fit: cover;
+ border-radius: 4px 4px 0 0;
}
- &.active {
- &::after {
- border-bottom: 4px solid $highlight-text-color;
- opacity: 1;
+ @media screen and (max-width: 600px) {
+ height: 200px;
+ }
+
+ @media screen and (max-width: $no-gap-breakpoint) {
+ display: none;
+ }
+ }
+
+ &__bar {
+ position: relative;
+ padding: 15px;
+ display: flex;
+ justify-content: flex-start;
+ align-items: center;
+ background: lighten($ui-base-color, 4%);
+ border-radius: 0 0 4px 4px;
+
+ @media screen and (max-width: $no-gap-breakpoint) {
+ border-radius: 0;
+ }
+
+ .avatar {
+ flex: 0 0 auto;
+ width: 48px;
+ height: 48px;
+ padding-top: 2px;
+
+ img {
+ width: 100%;
+ height: 100%;
+ display: block;
+ margin: 0;
+ border-radius: 4px;
+ background: darken($ui-base-color, 8%);
}
}
- &:hover {
- &::after {
- opacity: 1;
- transition-duration: 100ms;
+ .display-name {
+ margin-left: 15px;
+ text-align: left;
+
+ strong {
+ font-size: 15px;
+ color: $primary-text-color;
+ font-weight: 500;
+ overflow: hidden;
+ text-overflow: ellipsis;
}
- }
- a {
- text-decoration: none;
- color: inherit;
- }
-
- .counter-label {
- font-size: 12px;
- display: block;
- margin-bottom: 5px;
- }
-
- .counter-number {
- font-weight: 500;
- font-size: 18px;
- color: $primary-text-color;
- font-family: 'mastodon-font-display', sans-serif;
- }
- }
-
- .bio {
- font-size: 14px;
- line-height: 18px;
- padding: 0 15px;
- color: $secondary-text-color;
- }
-
- @media screen and (max-width: 480px) {
- display: block;
-
- .card__bio {
- max-width: none;
- }
-
- .name,
- .roles {
- text-align: center;
- margin-bottom: 15px;
- }
-
- .bio {
- margin-bottom: 15px;
- }
- }
-}
-
-.card,
-.account-grid-card {
- .controls {
- position: absolute;
- top: 15px;
- left: 15px;
- z-index: 2;
-
- .icon-button {
- color: rgba($white, 0.8);
- text-decoration: none;
- font-size: 13px;
- line-height: 13px;
- font-weight: 500;
-
- .fa {
+ span {
+ display: block;
+ font-size: 14px;
+ color: $darker-text-color;
font-weight: 400;
- margin-right: 5px;
- }
-
- &:hover,
- &:active,
- &:focus {
- color: $white;
+ overflow: hidden;
+ text-overflow: ellipsis;
}
}
}
}
-.account-grid-card .controls {
- left: auto;
- right: 15px;
-}
-
.pagination {
padding: 30px 0;
text-align: center;
@@ -314,289 +171,23 @@
}
}
-.accounts-grid {
- box-shadow: 0 0 15px rgba($base-shadow-color, 0.2);
- background: darken($simple-background-color, 8%);
- border-radius: 0 0 4px 4px;
- padding: 20px 5px;
- padding-bottom: 10px;
- overflow: hidden;
- display: flex;
- flex-wrap: wrap;
- z-index: 2;
- position: relative;
-
- &.empty img {
- position: absolute;
- opacity: 0.2;
- height: 200px;
- left: 0;
- bottom: 0;
- pointer-events: none;
- }
-
- @media screen and (max-width: 740px) {
- border-radius: 0;
- box-shadow: none;
- }
-
- .account-grid-card {
- box-sizing: border-box;
- width: 335px;
- background: $simple-background-color;
- border-radius: 4px;
- color: $inverted-text-color;
- margin: 0 5px 10px;
- position: relative;
-
- @media screen and (max-width: 740px) {
- width: calc(100% - 10px);
- }
-
- .account-grid-card__header {
- overflow: hidden;
- height: 100px;
- border-radius: 4px 4px 0 0;
- background-color: lighten($inverted-text-color, 4%);
- background-size: cover;
- background-position: center;
- position: relative;
-
- &::after {
- background: rgba(darken($ui-base-color, 8%), 0.5);
- display: block;
- content: "";
- position: absolute;
- left: 0;
- top: 0;
- width: 100%;
- height: 100%;
- z-index: 1;
- }
- }
-
- .account-grid-card__avatar {
- box-sizing: border-box;
- padding: 15px;
- position: absolute;
- z-index: 2;
- top: 100px - (40px + 2px);
- left: -2px;
- }
-
- .avatar {
- width: 80px;
- height: 80px;
-
- img {
- display: block;
- width: 80px;
- height: 80px;
- border-radius: 80px;
- border: 2px solid $simple-background-color;
- background: $simple-background-color;
- }
- }
-
- .name {
- padding: 15px;
- padding-top: 10px;
- padding-left: 15px + 80px + 15px;
-
- a {
- display: block;
- color: $inverted-text-color;
- text-decoration: none;
- text-overflow: ellipsis;
- overflow: hidden;
- font-weight: 500;
-
- &:hover {
- .display_name {
- text-decoration: underline;
- }
- }
- }
- }
-
- .display_name {
- font-size: 16px;
- display: block;
- text-overflow: ellipsis;
- overflow: hidden;
- }
-
- .username {
- color: $lighter-text-color;
- font-size: 14px;
- font-weight: 400;
- }
-
- .account__header__content {
- padding: 10px 15px;
- padding-top: 15px;
- color: $lighter-text-color;
- word-wrap: break-word;
- overflow: hidden;
- text-overflow: ellipsis;
- height: 5.5em;
- position: relative;
-
- &::after {
- display: block;
- content: "";
- width: 100%;
- height: 100px;
- position: absolute;
- bottom: 0;
- background: linear-gradient(to bottom, rgba($simple-background-color, 0.01) 0%, rgba($simple-background-color, 1) 100%);
- left: 0;
- border-radius: 0 0 4px 4px;
- pointer-events: none;
- }
- }
- }
-}
-
.nothing-here {
- width: 100%;
- display: block;
+ background: $ui-base-color;
+ box-shadow: 0 0 15px rgba($base-shadow-color, 0.2);
color: $light-text-color;
font-size: 14px;
font-weight: 500;
text-align: center;
- padding: 130px 0;
- padding-top: 125px;
- margin: 0 auto;
+ display: flex;
+ justify-content: center;
+ align-items: center;
cursor: default;
-}
-
-.account-card {
border-radius: 4px;
- text-align: left;
- box-shadow: 0 0 15px rgba($base-shadow-color, 0.2);
- background: $simple-background-color;
+ padding: 20px;
+ min-height: 30vh;
- &__header {
- background: $base-shadow-color;
- background-size: cover;
- background-position: center center;
- height: 90px;
- border-radius: 4px 4px 0 0;
- }
-
- & > .detailed-status__display-name {
- display: block;
- overflow: hidden;
- display: flex;
- align-items: center;
- padding: 10px;
-
- &:last-child {
- margin-bottom: 0;
- }
-
- & > div:first-child {
- flex: 0 0 auto;
- margin-right: 10px;
- width: 48px;
- height: 48px;
- }
-
- .avatar {
- display: block;
- border-radius: 4px;
- margin: 0;
- }
-
- .display-name {
- flex: 1 0 auto;
- display: block;
- max-width: 100%;
- overflow: hidden;
- white-space: nowrap;
- text-overflow: ellipsis;
- cursor: default;
-
- & > .detailed-status__display-name {
- margin-bottom: 0;
- }
-
- strong {
- font-weight: 500;
- color: $ui-base-color;
-
- @each $lang in $cjk-langs {
- &:lang(#{$lang}) {
- font-weight: 700;
- }
- }
- }
-
- span {
- font-size: 14px;
- color: $light-text-color;
- }
- }
-
- &:hover {
- .display-name {
- strong {
- text-decoration: none;
- }
- }
- }
- }
-
- .counter {
- box-sizing: border-box;
- flex: 0 0 auto;
- color: $light-text-color;
- padding: 0 10px;
- cursor: default;
- text-align: center;
- position: relative;
- line-height: 24px;
-
- .counter-label {
- font-size: 12px;
- display: block;
- text-transform: uppercase;
- }
-
- .counter-number {
- font-weight: 500;
- font-size: 16px;
- color: $inverted-text-color;
- font-family: 'mastodon-font-display', sans-serif;
- }
- }
-}
-
-.activity-stream-tabs {
- background: $simple-background-color;
- border-bottom: 1px solid $ui-secondary-color;
- position: relative;
- z-index: 2;
-
- a {
- display: inline-block;
- padding: 15px;
- text-decoration: none;
- color: $highlight-text-color;
- text-transform: uppercase;
- font-weight: 500;
-
- &:hover,
- &:active,
- &:focus {
- color: lighten($highlight-text-color, 8%);
- }
-
- &.active {
- color: $inverted-text-color;
- cursor: default;
- }
+ &--under-tabs {
+ border-radius: 0 0 4px 4px;
}
}
@@ -629,14 +220,14 @@
padding: 0;
margin: 15px -15px -15px;
border: 0 none;
- border-top: 1px solid lighten($ui-base-color, 4%);
- border-bottom: 1px solid lighten($ui-base-color, 4%);
+ border-top: 1px solid lighten($ui-base-color, 12%);
+ border-bottom: 1px solid lighten($ui-base-color, 12%);
font-size: 14px;
line-height: 20px;
dl {
display: flex;
- border-bottom: 1px solid lighten($ui-base-color, 4%);
+ border-bottom: 1px solid lighten($ui-base-color, 12%);
}
dt,
diff --git a/app/javascript/styles/mastodon/basics.scss b/app/javascript/styles/mastodon/basics.scss
index c52e069be..c45a50756 100644
--- a/app/javascript/styles/mastodon/basics.scss
+++ b/app/javascript/styles/mastodon/basics.scss
@@ -1,13 +1,12 @@
body {
font-family: 'mastodon-font-sans-serif', sans-serif;
- background: $ui-base-color;
+ background: darken($ui-base-color, 8%);
background-size: cover;
background-attachment: fixed;
font-size: 13px;
line-height: 18px;
font-weight: 400;
color: $primary-text-color;
- padding-bottom: 20px;
text-rendering: optimizelegibility;
font-feature-settings: "kern";
text-size-adjust: none;
@@ -52,7 +51,7 @@ body {
}
&.embed {
- background: transparent;
+ background: lighten($ui-base-color, 4%);
margin: 0;
padding-bottom: 0;
diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss
index 846bda893..814739dfc 100644
--- a/app/javascript/styles/mastodon/components.scss
+++ b/app/javascript/styles/mastodon/components.scss
@@ -946,6 +946,18 @@
background: lighten($ui-base-color, 4%);
padding: 14px 10px;
+ &--flex {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: space-between;
+ align-items: flex-start;
+
+ .status__content,
+ .detailed-status__meta {
+ flex: 100%;
+ }
+ }
+
.status__content {
font-size: 19px;
line-height: 24px;
diff --git a/app/javascript/styles/mastodon/containers.scss b/app/javascript/styles/mastodon/containers.scss
index ac648c868..c2ff77783 100644
--- a/app/javascript/styles/mastodon/containers.scss
+++ b/app/javascript/styles/mastodon/containers.scss
@@ -118,3 +118,576 @@
margin-left: 8px;
}
}
+
+.public-layout {
+ @media screen and (max-width: $no-gap-breakpoint) {
+ padding-top: 48px;
+ }
+
+ .container {
+ max-width: 960px;
+
+ @media screen and (max-width: $no-gap-breakpoint) {
+ padding: 0;
+ }
+ }
+
+ .header {
+ background: lighten($ui-base-color, 8%);
+ box-shadow: 0 0 15px rgba($base-shadow-color, 0.2);
+ border-radius: 4px;
+ height: 48px;
+ margin: 10px 0;
+ display: flex;
+ align-items: stretch;
+ justify-content: center;
+ flex-wrap: nowrap;
+ overflow: hidden;
+
+ @media screen and (max-width: $no-gap-breakpoint) {
+ position: fixed;
+ width: 100%;
+ top: 0;
+ left: 0;
+ margin: 0;
+ border-radius: 0;
+ box-shadow: none;
+ z-index: 110;
+ }
+
+ & > div {
+ flex: 1 1 33.3%;
+ min-height: 1px;
+ }
+
+ .nav-left {
+ display: flex;
+ align-items: stretch;
+ justify-content: flex-start;
+ flex-wrap: nowrap;
+ }
+
+ .nav-center {
+ display: flex;
+ align-items: stretch;
+ justify-content: center;
+ flex-wrap: nowrap;
+ }
+
+ .nav-right {
+ display: flex;
+ align-items: stretch;
+ justify-content: flex-end;
+ flex-wrap: nowrap;
+ }
+
+ .brand {
+ display: block;
+ padding: 15px;
+
+ img {
+ display: block;
+ height: 18px;
+ width: auto;
+ position: relative;
+ bottom: -2px;
+
+ @media screen and (max-width: $no-gap-breakpoint) {
+ height: 20px;
+ }
+ }
+
+ &:hover,
+ &:focus,
+ &:active {
+ background: lighten($ui-base-color, 12%);
+ }
+ }
+
+ .nav-link {
+ display: flex;
+ align-items: center;
+ padding: 0 1rem;
+ font-size: 12px;
+ font-weight: 500;
+ text-decoration: none;
+ color: $darker-text-color;
+ white-space: nowrap;
+ text-align: center;
+
+ &:hover,
+ &:focus,
+ &:active {
+ text-decoration: underline;
+ color: $primary-text-color;
+ }
+ }
+
+ .nav-button {
+ background: lighten($ui-base-color, 16%);
+ margin: 8px;
+ margin-left: 0;
+ border-radius: 4px;
+
+ &:hover,
+ &:focus,
+ &:active {
+ text-decoration: none;
+ background: lighten($ui-base-color, 20%);
+ }
+ }
+ }
+
+ $no-columns-breakpoint: 600px;
+
+ .grid {
+ display: grid;
+ grid-gap: 10px;
+ grid-template-columns: minmax(300px, 3fr) minmax(298px, 1fr);
+ grid-auto-columns: 25%;
+ grid-auto-rows: max-content;
+
+ .column-0 {
+ grid-row: 1;
+ grid-column: 1;
+ }
+
+ .column-1 {
+ grid-row: 1;
+ grid-column: 2;
+ }
+
+ @media screen and (max-width: $no-columns-breakpoint) {
+ grid-template-columns: 100%;
+ grid-gap: 0;
+
+ .column-1 {
+ display: none;
+ }
+ }
+ }
+
+ .public-account-header {
+ overflow: hidden;
+ margin-bottom: 10px;
+ box-shadow: 0 0 15px rgba($base-shadow-color, 0.2);
+
+ &__image {
+ border-radius: 4px 4px 0 0;
+ overflow: hidden;
+ height: 300px;
+ position: relative;
+ background: darken($ui-base-color, 12%);
+
+ &::after {
+ content: "";
+ display: block;
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ box-shadow: inset 0 -1px 1px 1px rgba($base-shadow-color, 0.15);
+ top: 0;
+ left: 0;
+ }
+
+ img {
+ object-fit: cover;
+ display: block;
+ width: 100%;
+ height: 100%;
+ margin: 0;
+ border-radius: 4px 4px 0 0;
+ }
+
+ @media screen and (max-width: 600px) {
+ height: 200px;
+ }
+ }
+
+ @media screen and (max-width: $no-gap-breakpoint) {
+ margin-bottom: 0;
+ box-shadow: none;
+
+ &__image::after {
+ display: none;
+ }
+
+ &__image,
+ &__image img {
+ border-radius: 0;
+ }
+ }
+
+ &__bar {
+ position: relative;
+ margin-top: -80px;
+ display: flex;
+ justify-content: flex-start;
+
+ &::before {
+ content: "";
+ display: block;
+ background: lighten($ui-base-color, 4%);
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ height: 60px;
+ border-radius: 0 0 4px 4px;
+ z-index: -1;
+ }
+
+ .avatar {
+ display: block;
+ width: 120px;
+ height: 120px;
+ padding-left: 20px - 4px;
+ flex: 0 0 auto;
+
+ img {
+ display: block;
+ width: 100%;
+ height: 100%;
+ margin: 0;
+ border-radius: 50%;
+ border: 4px solid lighten($ui-base-color, 4%);
+ background: darken($ui-base-color, 8%);
+ }
+ }
+
+ @media screen and (max-width: 600px) {
+ margin-top: 0;
+ background: lighten($ui-base-color, 4%);
+ border-radius: 0 0 4px 4px;
+ padding: 5px;
+
+ &::before {
+ display: none;
+ }
+
+ .avatar {
+ width: 48px;
+ height: 48px;
+ padding: 7px 0;
+ padding-left: 10px;
+
+ img {
+ border: 0;
+ border-radius: 4px;
+ }
+
+ @media screen and (max-width: 360px) {
+ display: none;
+ }
+ }
+ }
+
+ @media screen and (max-width: $no-gap-breakpoint) {
+ border-radius: 0;
+ }
+
+ @media screen and (max-width: $no-columns-breakpoint) {
+ flex-wrap: wrap;
+ }
+ }
+
+ &__tabs {
+ flex: 1 1 auto;
+ margin-left: 20px;
+
+ &__name {
+ padding-top: 20px;
+ padding-bottom: 8px;
+
+ h1 {
+ font-size: 20px;
+ line-height: 18px * 1.5;
+ color: $primary-text-color;
+ font-weight: 500;
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ text-shadow: 1px 1px 1px $base-shadow-color;
+
+ small {
+ display: block;
+ font-size: 14px;
+ color: $primary-text-color;
+ font-weight: 400;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+ }
+ }
+
+ @media screen and (max-width: 600px) {
+ margin-left: 15px;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+
+ &__name {
+ padding-top: 0;
+ padding-bottom: 0;
+
+ h1 {
+ font-size: 16px;
+ line-height: 24px;
+ text-shadow: none;
+
+ small {
+ color: $darker-text-color;
+ }
+ }
+ }
+ }
+
+ &__tabs {
+ display: flex;
+ justify-content: flex-start;
+ align-items: stretch;
+ height: 58px;
+
+ .details-counters {
+ display: flex;
+ flex-direction: row;
+ min-width: 300px;
+ }
+
+ @media screen and (max-width: $no-columns-breakpoint) {
+ .details-counters {
+ display: none;
+ }
+ }
+
+ .counter {
+ width: 33.3%;
+ box-sizing: border-box;
+ flex: 0 0 auto;
+ color: $darker-text-color;
+ padding: 10px;
+ border-right: 1px solid lighten($ui-base-color, 4%);
+ cursor: default;
+ text-align: center;
+ position: relative;
+
+ a {
+ display: block;
+ }
+
+ &:last-child {
+ border-right: 0;
+ }
+
+ &::after {
+ display: block;
+ content: "";
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ border-bottom: 4px solid $ui-primary-color;
+ opacity: 0.5;
+ transition: all 400ms ease;
+ }
+
+ &.active {
+ &::after {
+ border-bottom: 4px solid $highlight-text-color;
+ opacity: 1;
+ }
+ }
+
+ &:hover {
+ &::after {
+ opacity: 1;
+ transition-duration: 100ms;
+ }
+ }
+
+ a {
+ text-decoration: none;
+ color: inherit;
+ }
+
+ .counter-label {
+ font-size: 12px;
+ display: block;
+ }
+
+ .counter-number {
+ font-weight: 500;
+ font-size: 18px;
+ margin-bottom: 5px;
+ color: $primary-text-color;
+ font-family: 'mastodon-font-display', sans-serif;
+ }
+ }
+
+ .spacer {
+ flex: 1 1 auto;
+ height: 1px;
+ }
+
+ &__buttons {
+ padding: 7px 8px;
+ }
+ }
+ }
+
+ &__extra {
+ display: none;
+ margin-top: 4px;
+
+ .public-account-bio {
+ border-radius: 0;
+ box-shadow: none;
+ background: transparent;
+ margin: 0 -5px;
+
+ .account__header__fields {
+ border-top: 1px solid lighten($ui-base-color, 12%);
+ }
+
+ .roles {
+ display: none;
+ }
+ }
+
+ &__links {
+ margin-top: -15px;
+ font-size: 14px;
+ color: $darker-text-color;
+
+ a {
+ display: inline-block;
+ color: $darker-text-color;
+ text-decoration: none;
+ padding: 15px;
+
+ strong {
+ font-weight: 700;
+ color: $primary-text-color;
+ }
+ }
+ }
+
+ @media screen and (max-width: $no-columns-breakpoint) {
+ display: block;
+ flex: 100%;
+ }
+ }
+ }
+
+ .account__section-headline {
+ border-radius: 4px 4px 0 0;
+
+ @media screen and (max-width: $no-gap-breakpoint) {
+ border-radius: 0;
+ }
+ }
+
+ .detailed-status__meta {
+ margin-top: 25px;
+ }
+
+ .public-account-bio {
+ background: lighten($ui-base-color, 8%);
+ box-shadow: 0 0 15px rgba($base-shadow-color, 0.2);
+ border-radius: 4px;
+ overflow: hidden;
+ margin-bottom: 10px;
+
+ @media screen and (max-width: $no-gap-breakpoint) {
+ box-shadow: none;
+ margin-bottom: 0;
+ border-radius: 0;
+ }
+
+ .account__header__fields {
+ margin: 0;
+ border-top: 0;
+
+ a {
+ color: lighten($ui-highlight-color, 8%);
+ }
+ }
+
+ .account__header__content {
+ padding: 20px;
+ padding-bottom: 0;
+ color: $primary-text-color;
+ }
+
+ &__extra,
+ .roles {
+ padding: 20px;
+ font-size: 14px;
+ color: $darker-text-color;
+ }
+
+ .roles {
+ padding-bottom: 0;
+ }
+ }
+
+ .static-icon-button {
+ color: $action-button-color;
+ font-size: 18px;
+
+ & > span {
+ font-size: 14px;
+ font-weight: 500;
+ }
+ }
+
+ .card-grid {
+ display: flex;
+ flex-wrap: wrap;
+ min-width: 100%;
+ margin: 0 -5px;
+
+ & > div {
+ box-sizing: border-box;
+ flex: 1 0 auto;
+ width: 300px;
+ padding: 0 5px;
+ margin-bottom: 10px;
+ max-width: 33.333%;
+
+ @media screen and (max-width: 900px) {
+ max-width: 50%;
+ }
+
+ @media screen and (max-width: 600px) {
+ max-width: 100%;
+ }
+ }
+
+ @media screen and (max-width: $no-gap-breakpoint) {
+ margin: 0;
+ border-top: 1px solid lighten($ui-base-color, 8%);
+
+ & > div {
+ width: 100%;
+ padding: 0;
+ margin-bottom: 0;
+ border-bottom: 1px solid lighten($ui-base-color, 8%);
+
+ &:last-child {
+ border-bottom: 0;
+ }
+
+ .card__bar {
+ background: $ui-base-color;
+
+ &:hover,
+ &:active,
+ &:focus {
+ background: lighten($ui-base-color, 4%);
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/app/javascript/styles/mastodon/footer.scss b/app/javascript/styles/mastodon/footer.scss
index 81eb1ce2d..4d75477e0 100644
--- a/app/javascript/styles/mastodon/footer.scss
+++ b/app/javascript/styles/mastodon/footer.scss
@@ -1,39 +1,140 @@
-.footer {
- text-align: center;
- margin-top: 30px;
- padding-bottom: 60px;
- font-size: 12px;
- color: $darker-text-color;
+.public-layout {
+ .footer {
+ text-align: left;
+ padding-top: 20px;
+ padding-bottom: 60px;
+ font-size: 12px;
+ color: lighten($ui-base-color, 34%);
- .footer__domain {
- font-weight: 500;
-
- a {
- color: inherit;
- text-decoration: none;
+ @media screen and (max-width: $no-gap-breakpoint) {
+ padding-left: 20px;
+ padding-right: 20px;
}
- }
- .powered-by,
- .single-user-login {
- font-weight: 400;
+ .grid {
+ display: grid;
+ grid-gap: 10px;
+ grid-template-columns: 1fr 1fr 2fr 1fr 1fr;
- a {
- color: inherit;
- text-decoration: underline;
- font-weight: 500;
+ .column-0 {
+ grid-column: 1;
+ grid-row: 1;
+ min-width: 0;
+ }
- &:hover {
+ .column-1 {
+ grid-column: 2;
+ grid-row: 1;
+ min-width: 0;
+ }
+
+ .column-2 {
+ grid-column: 3;
+ grid-row: 1;
+ min-width: 0;
+ text-align: center;
+
+ h4 a {
+ color: lighten($ui-base-color, 34%);
+ }
+ }
+
+ .column-3 {
+ grid-column: 4;
+ grid-row: 1;
+ min-width: 0;
+ }
+
+ .column-4 {
+ grid-column: 5;
+ grid-row: 1;
+ min-width: 0;
+ }
+
+ @media screen and (max-width: 690px) {
+ grid-template-columns: 1fr 2fr 1fr;
+
+ .column-0,
+ .column-1 {
+ grid-column: 1;
+ }
+
+ .column-1 {
+ grid-row: 2;
+ }
+
+ .column-2 {
+ grid-column: 2;
+ }
+
+ .column-3,
+ .column-4 {
+ grid-column: 3;
+ }
+
+ .column-4 {
+ grid-row: 2;
+ }
+ }
+
+ @media screen and (max-width: 600px) {
+ .column-1 {
+ display: block;
+ }
+ }
+
+ @media screen and (max-width: $no-gap-breakpoint) {
+ .column-0,
+ .column-1,
+ .column-3,
+ .column-4 {
+ display: none;
+ }
+ }
+ }
+
+ h4 {
+ text-transform: uppercase;
+ font-weight: 700;
+ margin-bottom: 8px;
+ color: $darker-text-color;
+
+ a {
+ color: inherit;
text-decoration: none;
}
}
- img {
- margin: 0 4px;
- position: relative;
- bottom: -1px;
- height: 18px;
- vertical-align: top;
+ ul a {
+ text-decoration: none;
+ color: lighten($ui-base-color, 34%);
+
+ &:hover,
+ &:active,
+ &:focus {
+ text-decoration: underline;
+ }
+ }
+
+ .brand {
+ svg {
+ display: block;
+ height: 36px;
+ width: auto;
+ margin: 0 auto;
+
+ path {
+ fill: lighten($ui-base-color, 34%);
+ }
+ }
+
+ &:hover,
+ &:focus,
+ &:active {
+ svg path {
+ fill: lighten($ui-base-color, 38%);
+ }
+ }
}
}
}
diff --git a/app/javascript/styles/mastodon/landing_strip.scss b/app/javascript/styles/mastodon/landing_strip.scss
deleted file mode 100644
index 86614b89b..000000000
--- a/app/javascript/styles/mastodon/landing_strip.scss
+++ /dev/null
@@ -1,111 +0,0 @@
-.landing-strip,
-.memoriam-strip {
- background: rgba(darken($ui-base-color, 7%), 0.8);
- color: $darker-text-color;
- font-weight: 400;
- padding: 14px;
- border-radius: 4px;
- margin-bottom: 20px;
- display: flex;
- align-items: center;
-
- strong,
- a {
- font-weight: 500;
-
- @each $lang in $cjk-langs {
- &:lang(#{$lang}) {
- font-weight: 700;
- }
- }
- }
-
- a {
- color: inherit;
- text-decoration: underline;
- }
-
- .logo {
- width: 30px;
- height: 30px;
- flex: 0 0 auto;
- margin-right: 15px;
- }
-
- @media screen and (max-width: 740px) {
- margin-bottom: 0;
- }
-}
-
-.memoriam-strip {
- background: rgba($base-shadow-color, 0.7);
-}
-
-.moved-strip {
- padding: 14px;
- border-radius: 4px;
- background: rgba(darken($ui-base-color, 7%), 0.8);
- color: $secondary-text-color;
- font-weight: 400;
- margin-bottom: 20px;
-
- strong,
- a {
- font-weight: 500;
-
- @each $lang in $cjk-langs {
- &:lang(#{$lang}) {
- font-weight: 700;
- }
- }
- }
-
- a {
- color: inherit;
- text-decoration: underline;
-
- &.mention {
- text-decoration: none;
-
- span {
- text-decoration: none;
- }
-
- &:focus,
- &:hover,
- &:active {
- text-decoration: none;
-
- span {
- text-decoration: underline;
- }
- }
- }
- }
-
- &__message {
- margin-bottom: 15px;
-
- .fa {
- margin-right: 5px;
- color: $darker-text-color;
- }
- }
-
- &__card {
- .detailed-status__display-avatar {
- position: relative;
- cursor: pointer;
- }
-
- .detailed-status__display-name {
- margin-bottom: 0;
- text-decoration: none;
-
- span {
- color: $highlight-text-color;
- font-weight: 400;
- }
- }
- }
-}
diff --git a/app/javascript/styles/mastodon/stream_entries.scss b/app/javascript/styles/mastodon/stream_entries.scss
index f4d6e237f..9e2aa720c 100644
--- a/app/javascript/styles/mastodon/stream_entries.scss
+++ b/app/javascript/styles/mastodon/stream_entries.scss
@@ -1,367 +1,145 @@
.activity-stream {
- clear: both;
box-shadow: 0 0 15px rgba($base-shadow-color, 0.2);
+ border-radius: 4px;
+ overflow: hidden;
+ margin-bottom: 10px;
+
+ @media screen and (max-width: $no-gap-breakpoint) {
+ margin-bottom: 0;
+ border-radius: 0;
+ box-shadow: none;
+ }
+
+ &--headless {
+ border-radius: 0;
+ margin: 0;
+ box-shadow: none;
+
+ .detailed-status,
+ .status {
+ border-radius: 0 !important;
+ }
+ }
div[data-component] {
width: 100%;
}
.entry {
- background: $simple-background-color;
+ background: $ui-base-color;
- .detailed-status.light,
- .status.light,
- .more.light {
- border-bottom: 1px solid $ui-secondary-color;
+ .detailed-status,
+ .status,
+ .load-more {
animation: none;
}
&:last-child {
- &,
- .detailed-status.light,
- .status.light {
+ .detailed-status,
+ .status {
border-bottom: 0;
border-radius: 0 0 4px 4px;
}
}
&:first-child {
- &,
- .detailed-status.light,
- .status.light {
+ .detailed-status,
+ .status {
border-radius: 4px 4px 0 0;
}
&:last-child {
- &,
- .detailed-status.light,
- .status.light {
+ .detailed-status,
+ .status {
border-radius: 4px;
}
}
}
@media screen and (max-width: 740px) {
- &,
- .detailed-status.light,
- .status.light {
+ .detailed-status,
+ .status {
border-radius: 0 !important;
}
}
}
+}
- &.with-header {
- .entry {
- &:first-child {
- &,
- .detailed-status.light,
- .status.light {
- border-radius: 0;
- }
+.button.logo-button {
+ flex: 0 auto;
+ font-size: 14px;
+ background: $ui-highlight-color;
+ color: $primary-text-color;
+ text-transform: none;
+ line-height: 36px;
+ height: auto;
+ padding: 3px 15px;
+ border: 0;
- &:last-child {
- &,
- .detailed-status.light,
- .status.light {
- border-radius: 0 0 4px 4px;
- }
- }
- }
+ svg {
+ width: 20px;
+ height: auto;
+ vertical-align: middle;
+ margin-right: 5px;
+
+ path:first-child {
+ fill: $primary-text-color;
+ }
+
+ path:last-child {
+ fill: $ui-highlight-color;
}
}
- .media-gallery__gifv__label {
- bottom: 9px;
- }
+ &:active,
+ &:focus,
+ &:hover {
+ background: lighten($ui-highlight-color, 10%);
- .status.light {
- padding: 14px 14px 14px (48px + 14px * 2);
- position: relative;
- min-height: 48px;
- cursor: default;
-
- .status__header {
- font-size: 15px;
-
- .status__meta {
- float: right;
- font-size: 14px;
-
- .status__relative-time {
- color: $lighter-text-color;
- }
- }
- }
-
- .status__display-name {
- display: block;
- max-width: 100%;
- padding-right: 25px;
- color: $inverted-text-color;
- }
-
- .status__avatar {
- position: absolute;
- left: 14px;
- top: 14px;
- width: 48px;
- height: 48px;
-
- & > div {
- width: 48px;
- height: 48px;
- }
-
- img {
- display: block;
- border-radius: 4px;
- }
- }
-
- .display-name {
- display: block;
- max-width: 100%;
- overflow: hidden;
- white-space: nowrap;
- text-overflow: ellipsis;
-
- strong {
- font-weight: 500;
- color: $inverted-text-color;
-
- @each $lang in $cjk-langs {
- &:lang(#{$lang}) {
- font-weight: 700;
- }
- }
- }
-
- span {
- font-size: 14px;
- color: $light-text-color;
- }
- }
-
- .status__content {
- color: $inverted-text-color;
-
- a {
- color: $highlight-text-color;
- }
-
- a.status__content__spoiler-link {
- color: $primary-text-color;
- background: $ui-base-color;
-
- &:hover {
- background: lighten($ui-base-color, 8%);
- }
- }
+ svg path:last-child {
+ fill: lighten($ui-highlight-color, 10%);
}
}
- .detailed-status.light {
- padding: 14px;
- background: $simple-background-color;
- cursor: default;
-
- .detailed-status__display-name {
- display: block;
- overflow: hidden;
- margin-bottom: 15px;
-
- & > div {
- float: left;
- margin-right: 10px;
- }
-
- .display-name {
- display: block;
- max-width: 100%;
- overflow: hidden;
- white-space: nowrap;
- text-overflow: ellipsis;
-
- strong {
- font-weight: 500;
- color: $inverted-text-color;
-
- @each $lang in $cjk-langs {
- &:lang(#{$lang}) {
- font-weight: 700;
- }
- }
- }
-
- span {
- font-size: 14px;
- color: $light-text-color;
- }
- }
- }
-
- .avatar {
- width: 48px;
- height: 48px;
-
- img {
- display: block;
- border-radius: 4px;
- }
- }
-
- .status__content {
- color: $inverted-text-color;
-
- a {
- color: $highlight-text-color;
- }
-
- a.status__content__spoiler-link {
- color: $primary-text-color;
- background: $ui-base-color;
-
- &:hover {
- background: lighten($ui-base-color, 8%);
- }
- }
- }
-
- .detailed-status__meta {
- margin-top: 15px;
- color: $light-text-color;
- font-size: 14px;
- line-height: 18px;
-
- a {
- color: inherit;
- }
-
- span > span {
- font-weight: 500;
- font-size: 12px;
- margin-left: 6px;
- display: inline-block;
- }
- }
-
- .status-card {
- border-color: lighten($ui-secondary-color, 4%);
- color: $lighter-text-color;
-
- &:hover {
- background: lighten($ui-secondary-color, 4%);
- }
- }
-
- .status-card__title,
- .status-card__description {
- color: $inverted-text-color;
- }
-
- .status-card__image {
- background: $ui-secondary-color;
- }
- }
-
- .media-spoiler {
- background: $ui-base-color;
- color: $darker-text-color;
- }
-
- .pre-header {
- padding: 14px 0;
- padding-left: (48px + 14px * 2);
- padding-bottom: 0;
- margin-bottom: -4px;
- color: $light-text-color;
- font-size: 14px;
- position: relative;
-
- .pre-header__icon {
- position: absolute;
- left: (48px + 14px * 2 - 30px);
- }
-
- .status__display-name.muted strong {
- color: $light-text-color;
- }
- }
-
- .open-in-web-link {
- text-decoration: none;
-
- &:hover {
- text-decoration: underline;
- }
- }
-
- .more {
- color: $darker-text-color;
- display: block;
- padding: 14px;
- text-align: center;
-
- &:not(:hover) {
- text-decoration: none;
+ @media screen and (max-width: $no-gap-breakpoint) {
+ svg {
+ display: none;
}
}
}
-.embed {
- .activity-stream {
- box-shadow: none;
+.embed,
+.public-layout {
+ .detailed-status {
+ padding: 15px;
}
-}
-.entry {
- .detailed-status.light {
- display: flex;
- flex-wrap: wrap;
- justify-content: space-between;
- align-items: flex-start;
+ .status {
+ padding: 15px 15px 15px (48px + 15px * 2);
+ min-height: 48px + 2px;
- .detailed-status__display-name {
- flex: 1;
- margin: 0 5px 15px 0;
+ &__avatar {
+ left: 15px;
+ top: 17px;
}
- .button.button-secondary.logo-button {
- flex: 0 auto;
- font-size: 14px;
- background: $ui-highlight-color;
- color: $primary-text-color;
- border: 0;
-
- svg {
- width: 20px;
- height: auto;
- vertical-align: middle;
- margin-right: 5px;
-
- path:first-child {
- fill: $primary-text-color;
- }
-
- path:last-child {
- fill: $ui-highlight-color;
- }
- }
-
- &:active,
- &:focus,
- &:hover {
- background: lighten($ui-highlight-color, 10%);
-
- svg path:last-child {
- fill: lighten($ui-highlight-color, 10%);
- }
- }
+ &__content {
+ padding-top: 5px;
}
- .status__content,
- .detailed-status__meta {
- flex: 100%;
+ &__prepend {
+ margin-left: 48px + 15px * 2;
+ padding-top: 15px;
+ }
+
+ &__prepend-icon-wrapper {
+ left: -32px;
+ }
+
+ .media-gallery,
+ &__action-bar,
+ .video-player {
+ margin-top: 10px;
}
}
}
diff --git a/app/javascript/styles/mastodon/variables.scss b/app/javascript/styles/mastodon/variables.scss
index 40aeb4afc..009f0a3c9 100644
--- a/app/javascript/styles/mastodon/variables.scss
+++ b/app/javascript/styles/mastodon/variables.scss
@@ -46,3 +46,5 @@ $cjk-langs: ja, ko, zh-CN, zh-HK, zh-TW;
$media-modal-media-max-width: 100%;
// put margins on top and bottom of image to avoid the screen covered by image.
$media-modal-media-max-height: 80%;
+
+$no-gap-breakpoint: 415px;
diff --git a/app/javascript/styles/mastodon/widgets.scss b/app/javascript/styles/mastodon/widgets.scss
new file mode 100644
index 000000000..9324533bd
--- /dev/null
+++ b/app/javascript/styles/mastodon/widgets.scss
@@ -0,0 +1,123 @@
+.hero-widget {
+ margin-bottom: 10px;
+ box-shadow: 0 0 15px rgba($base-shadow-color, 0.2);
+
+ &__img {
+ width: 100%;
+ height: 167px;
+ position: relative;
+ overflow: hidden;
+ border-radius: 4px 4px 0 0;
+ background: $base-shadow-color;
+
+ img {
+ object-fit: cover;
+ display: block;
+ width: 100%;
+ height: 100%;
+ margin: 0;
+ border-radius: 4px 4px 0 0;
+ }
+ }
+
+ &__text {
+ background: $ui-base-color;
+ padding: 20px;
+ border-radius: 0 0 4px 4px;
+ font-size: 14px;
+ color: $darker-text-color;
+ }
+
+ @media screen and (max-width: $no-gap-breakpoint) {
+ display: none;
+ }
+}
+
+.moved-account-widget {
+ padding: 15px;
+ padding-bottom: 20px;
+ border-radius: 4px;
+ background: $ui-base-color;
+ box-shadow: 0 0 15px rgba($base-shadow-color, 0.2);
+ color: $secondary-text-color;
+ font-weight: 400;
+ margin-bottom: 10px;
+
+ strong,
+ a {
+ font-weight: 500;
+
+ @each $lang in $cjk-langs {
+ &:lang(#{$lang}) {
+ font-weight: 700;
+ }
+ }
+ }
+
+ a {
+ color: inherit;
+ text-decoration: underline;
+
+ &.mention {
+ text-decoration: none;
+
+ span {
+ text-decoration: none;
+ }
+
+ &:focus,
+ &:hover,
+ &:active {
+ text-decoration: none;
+
+ span {
+ text-decoration: underline;
+ }
+ }
+ }
+ }
+
+ &__message {
+ margin-bottom: 15px;
+
+ .fa {
+ margin-right: 5px;
+ color: $darker-text-color;
+ }
+ }
+
+ &__card {
+ .detailed-status__display-avatar {
+ position: relative;
+ cursor: pointer;
+ }
+
+ .detailed-status__display-name {
+ margin-bottom: 0;
+ text-decoration: none;
+
+ span {
+ font-weight: 400;
+ }
+ }
+ }
+}
+
+.memoriam-widget {
+ padding: 20px;
+ border-radius: 4px;
+ background: $base-shadow-color;
+ box-shadow: 0 0 15px rgba($base-shadow-color, 0.2);
+ font-size: 14px;
+ color: $darker-text-color;
+ margin-bottom: 10px;
+}
+
+.moved-account-widget,
+.memoriam-widget {
+ @media screen and (max-width: $no-gap-breakpoint) {
+ margin-bottom: 0;
+ box-shadow: none;
+ border-radius: 0;
+ }
+}
diff --git a/app/models/concerns/account_header.rb b/app/models/concerns/account_header.rb
index ef40b8126..067e166eb 100644
--- a/app/models/concerns/account_header.rb
+++ b/app/models/concerns/account_header.rb
@@ -5,11 +5,12 @@ module AccountHeader
IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif'].freeze
LIMIT = 2.megabytes
+ MAX_PIXELS = 750_000 # 1500x500px
class_methods do
def header_styles(file)
- styles = { original: { geometry: '700x335#', file_geometry_parser: FastGeometryParser } }
- styles[:static] = { geometry: '700x335#', format: 'png', convert_options: '-coalesce', file_geometry_parser: FastGeometryParser } if file.content_type == 'image/gif'
+ styles = { original: { pixels: MAX_PIXELS, file_geometry_parser: FastGeometryParser } }
+ styles[:static] = { format: 'png', convert_options: '-coalesce', file_geometry_parser: FastGeometryParser } if file.content_type == 'image/gif'
styles
end
diff --git a/app/views/accounts/_bio.html.haml b/app/views/accounts/_bio.html.haml
new file mode 100644
index 000000000..c9a4d8f1b
--- /dev/null
+++ b/app/views/accounts/_bio.html.haml
@@ -0,0 +1,15 @@
+.public-account-bio
+ - unless account.fields.empty?
+ .account__header__fields
+ - account.fields.each do |field|
+ %dl
+ %dt.emojify{ title: field.name }= field.name
+ %dd.emojify{ title: field.value }= Formatter.instance.format_field(account, field.value, custom_emojify: true)
+
+ = account_badge(account)
+
+ - if account.note.present?
+ .account__header__content.emojify= Formatter.instance.simplified_format(account, custom_emojify: true)
+
+ .public-account-bio__extra
+ = t 'accounts.joined', date: l(account.created_at, format: :month)
diff --git a/app/views/accounts/_follow_button.html.haml b/app/views/accounts/_follow_button.html.haml
deleted file mode 100644
index 558ced010..000000000
--- a/app/views/accounts/_follow_button.html.haml
+++ /dev/null
@@ -1,28 +0,0 @@
-- relationships ||= nil
-
-- unless account.memorial? || account.moved?
- - if user_signed_in?
- - requested = relationships ? relationships.requested[account.id].present? : current_account.requested?(account)
- - following = relationships ? relationships.following[account.id].present? : current_account.following?(account)
-
- - if user_signed_in? && current_account.id != account.id && !requested
- .controls
- - if following
- = link_to (account.local? ? account_unfollow_path(account) : remote_unfollow_path(acct: account.acct)), data: { method: :post }, class: 'icon-button' do
- = fa_icon 'user-times'
- = t('accounts.unfollow')
- - else
- = link_to (account.local? ? account_follow_path(account) : authorize_follow_path(acct: account.acct)), data: { method: :post }, class: 'icon-button' do
- = fa_icon 'user-plus'
- = t('accounts.follow')
- - elsif user_signed_in? && current_account.id == account.id
- .controls
- = link_to settings_profile_url, class: 'icon-button' do
- = fa_icon 'pencil'
- = t('settings.edit_profile')
- - elsif !user_signed_in?
- .controls
- .remote-follow
- = link_to (account.local? ? account_remote_follow_path(account) : "web+mastodon://follow?uri=#{account.uri}"), class: 'icon-button' do
- = fa_icon 'user-plus'
- = t('accounts.remote_follow')
diff --git a/app/views/accounts/_follow_grid.html.haml b/app/views/accounts/_follow_grid.html.haml
deleted file mode 100644
index fdcef84be..000000000
--- a/app/views/accounts/_follow_grid.html.haml
+++ /dev/null
@@ -1,8 +0,0 @@
-.accounts-grid{ class: accounts.empty? ? 'empty' : '' }
- - if accounts.empty?
- = image_tag asset_pack_path('elephant_ui_greeting.svg'), alt: '', role: 'presentational'
- = render partial: 'accounts/nothing_here'
- - else
- = render partial: 'accounts/grid_card', collection: accounts, as: :account, cached: !user_signed_in?
-
-= paginate follows
diff --git a/app/views/accounts/_follow_grid_hidden.html.haml b/app/views/accounts/_follow_grid_hidden.html.haml
deleted file mode 100644
index e970350e6..000000000
--- a/app/views/accounts/_follow_grid_hidden.html.haml
+++ /dev/null
@@ -1,3 +0,0 @@
-.accounts-grid.empty
- = image_tag asset_pack_path('elephant_ui_greeting.svg'), alt: '', role: 'presentational'
- %p.nothing-here= t('accounts.network_hidden')
diff --git a/app/views/accounts/_grid_card.html.haml b/app/views/accounts/_grid_card.html.haml
deleted file mode 100644
index a59ed128e..000000000
--- a/app/views/accounts/_grid_card.html.haml
+++ /dev/null
@@ -1,12 +0,0 @@
-.account-grid-card
- .account-grid-card__header{ style: "background-image: url(#{account.header.url(:original)})" }
- = render 'accounts/follow_button', account: account, relationships: @relationships
- .account-grid-card__avatar
- .avatar= image_tag account.avatar.url(:original)
- .name
- = link_to TagManager.instance.url_for(account) do
- %span.display_name.emojify= display_name(account, custom_emojify: true)
- %span.username
- @#{account.local? ? account.local_username_and_domain : account.acct}
- = fa_icon('lock') if account.locked?
- .account__header__content.p-note.emojify= Formatter.instance.simplified_format(account)
diff --git a/app/views/accounts/_header.html.haml b/app/views/accounts/_header.html.haml
index 4098d6778..e343be820 100644
--- a/app/views/accounts/_header.html.haml
+++ b/app/views/accounts/_header.html.haml
@@ -1,51 +1,43 @@
-.card.h-card.p-author{ style: "background-image: url(#{account.header.url(:original)})" }
- .card__illustration
- = render 'accounts/follow_button', account: account
- .avatar= image_tag account.avatar.url(:original), class: 'u-photo'
+.public-account-header
+ .public-account-header__image
+ = image_tag account.header.url, class: 'parallax'
+ .public-account-header__bar
+ = link_to short_account_url(account), class: 'avatar' do
+ = image_tag account.avatar.url
+ .public-account-header__tabs
+ .public-account-header__tabs__name
+ %h1
+ = display_name(account)
+ %small
+ = acct(account)
+ = fa_icon('lock') if account.locked?
+ .public-account-header__tabs__tabs
+ .details-counters
+ .counter{ class: active_nav_class(short_account_url(account)) }
+ = link_to short_account_url(account), class: 'u-url u-uid' do
+ %span.counter-number= number_to_human account.statuses_count, strip_insignificant_zeros: true
+ %span.counter-label= t('accounts.posts')
- .card__bio
- %h1.name
- %span.p-name.emojify= display_name(account, custom_emojify: true)
- %small<
- %span>< @#{account.local_username_and_domain}
- = fa_icon('lock') if account.locked?
+ .counter{ class: active_nav_class(account_following_index_url(account)) }
+ = link_to account_following_index_url(account) do
+ %span.counter-number= number_to_human account.following_count, strip_insignificant_zeros: true
+ %span.counter-label= t('accounts.following')
- - if account.bot?
- .roles
- .account-role.bot
- = t 'accounts.roles.bot'
- - elsif Setting.show_staff_badge
- - if account.user_admin?
- .roles
- .account-role.admin
- = t 'accounts.roles.admin'
- - elsif account.user_moderator?
- .roles
- .account-role.moderator
- = t 'accounts.roles.moderator'
+ .counter{ class: active_nav_class(account_followers_url(account)) }
+ = link_to account_followers_url(account) do
+ %span.counter-number= number_to_human account.followers_count, strip_insignificant_zeros: true
+ %span.counter-label= t('accounts.followers')
+ .spacer
+ .public-account-header__tabs__tabs__buttons
+ = account_action_button(account)
- .bio
- .account__header__content.p-note.emojify= Formatter.instance.simplified_format(account, custom_emojify: true)
+ .public-account-header__extra
+ = render 'accounts/bio', account: account
- - unless account.fields.empty?
- .account__header__fields
- - account.fields.each do |field|
- %dl
- %dt.emojify{ title: field.name }= field.name
- %dd.emojify{ title: field.value }= Formatter.instance.format_field(account, field.value, custom_emojify: true)
-
- .details-counters
- .counter{ class: active_nav_class(short_account_url(account)) }
- = link_to short_account_url(account), class: 'u-url u-uid' do
- %span.counter-number= number_to_human account.statuses_count, strip_insignificant_zeros: true
- %span.counter-label= t('accounts.posts')
-
- .counter{ class: active_nav_class(account_following_index_url(account)) }
+ .public-account-header__extra__links
= link_to account_following_index_url(account) do
- %span.counter-number= number_to_human account.following_count, strip_insignificant_zeros: true
- %span.counter-label= t('accounts.following')
-
- .counter{ class: active_nav_class(account_followers_url(account)) }
+ %strong= number_to_human account.following_count, strip_insignificant_zeros: true
+ = t('accounts.following')
= link_to account_followers_url(account) do
- %span.counter-number= number_to_human account.followers_count, strip_insignificant_zeros: true
- %span.counter-label= t('accounts.followers')
+ %strong= number_to_human account.followers_count, strip_insignificant_zeros: true
+ = t('accounts.followers')
diff --git a/app/views/accounts/_moved_strip.html.haml b/app/views/accounts/_moved.html.haml
similarity index 54%
rename from app/views/accounts/_moved_strip.html.haml
rename to app/views/accounts/_moved.html.haml
index ae18c6dc7..f99328dbd 100644
--- a/app/views/accounts/_moved_strip.html.haml
+++ b/app/views/accounts/_moved.html.haml
@@ -1,11 +1,11 @@
- moved_to_account = account.moved_to_account
-.moved-strip
- .moved-strip__message
+.moved-account-widget
+ .moved-account-widget__message
= fa_icon 'suitcase'
- = t('accounts.moved_html', name: content_tag(:strong, display_name(account, custom_emojify: true), class: :emojify), new_profile_link: link_to(content_tag(:strong, safe_join(['@', content_tag(:span, moved_to_account.acct)])), TagManager.instance.url_for(moved_to_account), class: 'mention'))
+ = t('accounts.moved_html', name: content_tag(:bdi, content_tag(:strong, display_name(account, custom_emojify: true), class: :emojify)), new_profile_link: link_to(content_tag(:strong, safe_join(['@', content_tag(:span, moved_to_account.acct)])), TagManager.instance.url_for(moved_to_account), class: 'mention'))
- .moved-strip__card
+ .moved-account-widget__card
= link_to TagManager.instance.url_for(moved_to_account), class: 'detailed-status__display-name p-author h-card', target: '_blank', rel: 'noopener' do
.detailed-status__display-avatar
.account__avatar-overlay
@@ -13,5 +13,6 @@
.account__avatar-overlay-overlay{ style: "background-image: url('#{account.avatar.url(:original)}')" }
%span.display-name
- %strong.emojify= display_name(moved_to_account, custom_emojify: true)
+ %bdi
+ %strong.emojify= display_name(moved_to_account, custom_emojify: true)
%span @#{moved_to_account.acct}
diff --git a/app/views/accounts/_nothing_here.html.haml b/app/views/accounts/_nothing_here.html.haml
deleted file mode 100644
index 0c6dc1168..000000000
--- a/app/views/accounts/_nothing_here.html.haml
+++ /dev/null
@@ -1 +0,0 @@
-%p.nothing-here= t('accounts.nothing_here')
diff --git a/app/views/accounts/show.html.haml b/app/views/accounts/show.html.haml
index cfdd3a945..b30755d94 100644
--- a/app/views/accounts/show.html.haml
+++ b/app/views/accounts/show.html.haml
@@ -20,36 +20,39 @@
= opengraph 'og:type', 'profile'
= render 'og', account: @account, url: short_account_url(@account, only_path: false)
-- if @account.memorial?
- .memoriam-strip= t('in_memoriam_html')
-- elsif @account.moved?
- = render partial: 'moved_strip', locals: { account: @account }
-- elsif show_landing_strip?
- = render partial: 'shared/landing_strip', locals: { account: @account }
-.h-feed
- %data.p-name{ value: "#{@account.username} on #{site_hostname}" }/
+= render 'header', account: @account, with_bio: true
- = render 'header', account: @account
+.grid
+ .column-0
+ .h-feed
+ %data.p-name{ value: "#{@account.username} on #{site_hostname}" }/
- .activity-stream-tabs
- = active_link_to t('accounts.posts'), short_account_url(@account)
- = active_link_to t('accounts.posts_with_replies'), short_account_with_replies_url(@account)
- = active_link_to t('accounts.media'), short_account_media_url(@account)
+ .account__section-headline
+ = active_link_to t('accounts.posts'), short_account_url(@account)
+ = active_link_to t('accounts.posts_with_replies'), short_account_with_replies_url(@account)
+ = active_link_to t('accounts.media'), short_account_media_url(@account)
- - if @statuses.empty?
- .accounts-grid
- = render 'nothing_here'
- - else
- .activity-stream.with-header
- - if params[:page].to_i.zero?
- = render partial: 'stream_entries/status', collection: @pinned_statuses, as: :status, locals: { pinned: true }
+ - if @statuses.empty?
+ = nothing_here 'nothing-here--under-tabs'
+ - else
+ .activity-stream
+ - if params[:page].to_i.zero?
+ = render partial: 'stream_entries/status', collection: @pinned_statuses, as: :status, locals: { pinned: true }
- = render partial: 'stream_entries/status', collection: @statuses, as: :status
+ - if @newer_url
+ .entry= link_to_more @newer_url
- - if @newer_url || @older_url
- .pagination
- - if @older_url
- = link_to safe_join([fa_icon('chevron-left'), t('pagination.older')], ' '), @older_url, class: 'older', rel: 'next'
- - if @newer_url
- = link_to safe_join([t('pagination.newer'), fa_icon('chevron-right')], ' '), @newer_url, class: 'newer', rel: 'prev'
+ = render partial: 'stream_entries/status', collection: @statuses, as: :status
+
+ - if @older_url
+ .entry= link_to_more @older_url
+
+ .column-1
+ - if @account.memorial?
+ .memoriam-widget= t('in_memoriam_html')
+ - elsif @account.moved?
+ = render 'moved', account: @account
+
+ = render 'bio', account: @account
+ = render 'application/sidebar'
diff --git a/app/views/application/_card.html.haml b/app/views/application/_card.html.haml
new file mode 100644
index 000000000..9cf8f8ff2
--- /dev/null
+++ b/app/views/application/_card.html.haml
@@ -0,0 +1,16 @@
+- account_url = local_assigns[:admin] ? admin_account_path(account.id) : TagManager.instance.url_for(account)
+
+.card.h-card
+ = link_to account_url, target: '_blank', rel: 'noopener' do
+ .card__img
+ = image_tag account.header.url, alt: ''
+ .card__bar
+ .avatar
+ = image_tag account.avatar.url, alt: '', width: 48, height: 48, class: 'u-photo'
+
+ .display-name
+ %bdi
+ %strong.emojify.p-name= display_name(account, custom_emojify: true)
+ %span
+ = acct(account)
+ = fa_icon('lock') if account.locked?
diff --git a/app/views/application/_sidebar.html.haml b/app/views/application/_sidebar.html.haml
new file mode 100644
index 000000000..3d8832bb4
--- /dev/null
+++ b/app/views/application/_sidebar.html.haml
@@ -0,0 +1,6 @@
+.hero-widget
+ .hero-widget__img
+ = image_tag @instance_presenter.hero&.file&.url || @instance_presenter.thumbnail&.file&.url || asset_pack_path('preview.jpg'), alt: @instance_presenter.site_title
+
+ .hero-widget__text
+ %p= @instance_presenter.site_description.html_safe.presence || t('about.generic_description', domain: site_hostname)
diff --git a/app/views/auth/registrations/new.html.haml b/app/views/auth/registrations/new.html.haml
index 0fac8e10d..200ed42de 100644
--- a/app/views/auth/registrations/new.html.haml
+++ b/app/views/auth/registrations/new.html.haml
@@ -10,7 +10,7 @@
- if @invite.present? && @invite.autofollow?
.fields-group{ style: 'margin-bottom: 30px' }
%p.hint{ style: 'text-align: center' }= t('invites.invited_by')
- = render 'authorize_follows/card', account: @invite.user.account
+ = render 'application/card', account: @invite.user.account
= f.simple_fields_for :account do |ff|
.input-with-append
diff --git a/app/views/authorize_follows/_card.html.haml b/app/views/authorize_follows/_card.html.haml
deleted file mode 100644
index edc03131f..000000000
--- a/app/views/authorize_follows/_card.html.haml
+++ /dev/null
@@ -1,23 +0,0 @@
-.account-card
- .account-card__header{ style: "background-image: url(#{account.header.url(:original)})" }
- .detailed-status__display-name
- %div
- = image_tag account.avatar.url(:original), alt: '', width: 48, height: 48, class: 'avatar'
-
- %span.display-name
- - account_url = local_assigns[:admin] ? admin_account_path(account.id) : TagManager.instance.url_for(account)
- = link_to account_url, class: 'detailed-status__display-name p-author h-card', target: '_blank', rel: 'noopener' do
- %strong.emojify= display_name(account, custom_emojify: true)
- %span @#{account.acct}
-
- .counter
- %span.counter-number= number_to_human account.statuses_count, strip_insignificant_zeros: true
- %span.counter-label= t('accounts.posts')
-
- .counter
- %span.counter-number= number_to_human account.following_count, strip_insignificant_zeros: true
- %span.counter-label= t('accounts.following')
-
- .counter
- %span.counter-number= number_to_human account.followers_count, strip_insignificant_zeros: true
- %span.counter-label= t('accounts.followers')
diff --git a/app/views/authorize_follows/show.html.haml b/app/views/authorize_follows/show.html.haml
index a1fd01dd6..90e65b34f 100644
--- a/app/views/authorize_follows/show.html.haml
+++ b/app/views/authorize_follows/show.html.haml
@@ -3,7 +3,7 @@
.form-container
.follow-prompt
- = render 'card', account: @account
+ = render 'application/card', account: @account
- if current_account.following?(@account)
.flash-message
diff --git a/app/views/authorize_follows/success.html.haml b/app/views/authorize_follows/success.html.haml
index fa59b24b8..cf9cb50ea 100644
--- a/app/views/authorize_follows/success.html.haml
+++ b/app/views/authorize_follows/success.html.haml
@@ -8,6 +8,6 @@
- else
%h2= t('authorize_follow.following')
- = render 'card', account: @account
+ = render 'application/card', account: @account
= render 'post_follow_actions'
diff --git a/app/views/follower_accounts/index.html.haml b/app/views/follower_accounts/index.html.haml
index 65af81a5b..31dab68bf 100644
--- a/app/views/follower_accounts/index.html.haml
+++ b/app/views/follower_accounts/index.html.haml
@@ -8,6 +8,11 @@
= render 'accounts/header', account: @account
- if @account.user_hides_network?
- = render 'accounts/follow_grid_hidden'
+ .nothing-here= t('accounts.network_hidden')
+- elsif @follows.empty?
+ = nothing_here
- else
- = render 'accounts/follow_grid', follows: @follows, accounts: @follows.map(&:account)
+ .card-grid
+ = render partial: 'application/card', collection: @follows.map(&:account), as: :account
+
+ = paginate @follows
diff --git a/app/views/following_accounts/index.html.haml b/app/views/following_accounts/index.html.haml
index 8fd95a0b4..8b49b529b 100644
--- a/app/views/following_accounts/index.html.haml
+++ b/app/views/following_accounts/index.html.haml
@@ -8,6 +8,11 @@
= render 'accounts/header', account: @account
- if @account.user_hides_network?
- = render 'accounts/follow_grid_hidden'
+ .nothing-here= t('accounts.network_hidden')
+- elsif @follows.empty?
+ = nothing_here
- else
- = render 'accounts/follow_grid', follows: @follows, accounts: @follows.map(&:target_account)
+ .card-grid
+ = render partial: 'application/card', collection: @follows.map(&:target_account), as: :account
+
+ = paginate @follows
diff --git a/app/views/layouts/public.html.haml b/app/views/layouts/public.html.haml
index 600290297..f9d808bed 100644
--- a/app/views/layouts/public.html.haml
+++ b/app/views/layouts/public.html.haml
@@ -2,16 +2,49 @@
= javascript_pack_tag 'public', integrity: true, crossorigin: 'anonymous'
- content_for :content do
- .container-alt= yield
- .footer
- - if !user_signed_in? && single_user_mode?
- %span.single-user-login
- = link_to t('auth.login'), new_user_session_path
- —
- %span.footer__domain= link_to site_hostname, about_path
- - else
- %span.footer__domain= link_to site_hostname, root_path
- %span.powered-by
- != t('generic.powered_by', link: link_to('https://joinmastodon.org') { image_tag asset_pack_path('logo_full.svg'), alt: 'Mastodon' })
+ .public-layout
+ .container
+ %nav.header
+ .nav-left
+ = link_to root_url, class: 'brand' do
+ = image_tag asset_pack_path('logo_full.svg'), alt: 'Mastodon'
+ .nav-center
+ .nav-right
+ - if user_signed_in?
+ = link_to t('settings.back'), root_url, class: 'nav-link nav-button webapp-btn'
+ - else
+ = link_to t('auth.login'), new_user_session_path, class: 'webapp-btn nav-link nav-button'
+ = link_to t('auth.register'), new_user_registration_path, class: 'webapp-btn nav-link nav-button'
+
+ .container= yield
+
+ .container
+ .footer
+ .grid
+ .column-0
+ %h4= t 'footer.resources'
+ %ul
+ %li= link_to t('about.terms'), terms_path
+ %li= link_to t('about.privacy_policy'), terms_path
+ .column-1
+ %h4= t 'footer.developers'
+ %ul
+ %li= link_to t('about.documentation'), 'https://github.com/tootsuite/documentation'
+ %li= link_to t('about.api'), 'https://github.com/tootsuite/documentation/blob/master/Using-the-API/API.md'
+ .column-2
+ %h4= link_to t('about.what_is_mastodon'), 'https://joinmastodon.org/'
+
+ = link_to root_url, class: 'brand' do
+ = render file: Rails.root.join('app', 'javascript', 'images', 'logo_transparent.svg')
+ .column-3
+ %h4= site_hostname
+ %ul
+ %li= link_to t('about.about_this'), about_more_path
+ %li= "v#{Mastodon::Version.to_s}"
+ .column-4
+ %h4= t 'footer.more'
+ %ul
+ %li= link_to t('about.source_code'), Mastodon::Version.source_url
+ %li= link_to 'joinmastodon.org', 'https://joinmastodon.org'
= render template: 'layouts/application'
diff --git a/app/views/remote_follow/new.html.haml b/app/views/remote_follow/new.html.haml
index 9b22fda5f..9b679015f 100644
--- a/app/views/remote_follow/new.html.haml
+++ b/app/views/remote_follow/new.html.haml
@@ -6,7 +6,7 @@
.follow-prompt
%h2= t('remote_follow.prompt')
- = render partial: 'authorize_follows/card', locals: { account: @account }
+ = render partial: 'application/card', locals: { account: @account }
= simple_form_for @remote_follow, as: :remote_follow, url: account_remote_follow_path(@account) do |f|
= render 'shared/error_messages', object: @remote_follow
diff --git a/app/views/remote_unfollows/success.html.haml b/app/views/remote_unfollows/success.html.haml
index aa3c838a0..b007eedc7 100644
--- a/app/views/remote_unfollows/success.html.haml
+++ b/app/views/remote_unfollows/success.html.haml
@@ -5,6 +5,6 @@
.follow-prompt
%h2= t('remote_unfollow.unfollowed')
- = render 'card', account: @account
+ = render 'application/card', account: @account
= render 'post_follow_actions'
diff --git a/app/views/settings/migrations/show.html.haml b/app/views/settings/migrations/show.html.haml
index b7c34761f..c69061d50 100644
--- a/app/views/settings/migrations/show.html.haml
+++ b/app/views/settings/migrations/show.html.haml
@@ -6,7 +6,7 @@
%p.hint= t('migrations.currently_redirecting')
.fields-group
- = render partial: 'authorize_follows/card', locals: { account: @migration.account }
+ = render partial: 'application/card', locals: { account: @migration.account }
= render 'shared/error_messages', object: @migration
diff --git a/app/views/settings/profiles/show.html.haml b/app/views/settings/profiles/show.html.haml
index a84f8a7da..3940eb855 100644
--- a/app/views/settings/profiles/show.html.haml
+++ b/app/views/settings/profiles/show.html.haml
@@ -8,8 +8,7 @@
= f.input :display_name, placeholder: t('simple_form.labels.defaults.display_name'), hint: t('simple_form.hints.defaults.display_name', count: 30 - @account.display_name.size).html_safe
= f.input :note, placeholder: t('simple_form.labels.defaults.note'), hint: t('simple_form.hints.defaults.note', count: 160 - @account.note.size).html_safe
- .card.compact{ style: "background-image: url(#{@account.header.url(:original)})", data: { original_src: @account.header.url(:original) } }
- .avatar= image_tag @account.avatar.url(:original), data: { original_src: @account.avatar.url(:original) }
+ = render 'application/card', account: @account
.fields-group
= f.input :avatar, wrapper: :with_label, input_html: { accept: AccountAvatar::IMAGE_MIME_TYPES.join(',') }, hint: t('simple_form.hints.defaults.avatar')
diff --git a/app/views/shared/_landing_strip.html.haml b/app/views/shared/_landing_strip.html.haml
deleted file mode 100644
index 9a4144723..000000000
--- a/app/views/shared/_landing_strip.html.haml
+++ /dev/null
@@ -1,6 +0,0 @@
-.landing-strip
- = image_tag asset_pack_path('logo.svg'), class: 'logo'
-
- %div
- = t('landing_strip_html', name: content_tag(:span, display_name(account, custom_emojify: true), class: :emojify), link_to_root_path: link_to(content_tag(:strong, site_hostname), root_path))
- = t('landing_strip_signup_html', sign_up_path: open_registrations? ? new_user_registration_path : 'https://joinmastodon.org/#getting-started')
diff --git a/app/views/stream_entries/_content_spoiler.html.haml b/app/views/stream_entries/_content_spoiler.html.haml
deleted file mode 100644
index 798dfce67..000000000
--- a/app/views/stream_entries/_content_spoiler.html.haml
+++ /dev/null
@@ -1,7 +0,0 @@
-.media-spoiler-wrapper{ class: sensitive == false && 'media-spoiler-wrapper__visible' }
- .spoiler-button
- .icon-button.overlayed
- %i.fa.fa-fw.fa-eye
- .media-spoiler
- %span= t('stream_entries.sensitive_content')
- %span= t('stream_entries.click_to_show')
diff --git a/app/views/stream_entries/_detailed_status.html.haml b/app/views/stream_entries/_detailed_status.html.haml
index 85e90a237..aa160b979 100644
--- a/app/views/stream_entries/_detailed_status.html.haml
+++ b/app/views/stream_entries/_detailed_status.html.haml
@@ -1,16 +1,15 @@
-.detailed-status.light
+.detailed-status.detailed-status--flex
= link_to TagManager.instance.url_for(status.account), class: 'detailed-status__display-name p-author h-card', target: stream_link_target, rel: 'noopener' do
- %div
- .avatar
- = image_tag status.account.avatar.url(:original), width: 48, height: 48, alt: '', class: 'u-photo'
+ .detailed-status__display-avatar
+ = image_tag status.account.avatar.url(:original), width: 48, height: 48, alt: '', class: 'account__avatar u-photo'
%span.display-name
- %strong.p-name.emojify= display_name(status.account, custom_emojify: true)
- %span= acct(status.account)
+ %bdi
+ %strong.display-name__html.p-name.emojify= display_name(status.account, custom_emojify: true)
+ %span.display-name__account
+ = acct(status.account)
+ = fa_icon('lock') if status.account.locked?
- - if !user_signed_in? || embedded_view?
- = link_to account_remote_follow_path(status.account), class: 'button button-secondary logo-button', target: '_new' do
- = render file: Rails.root.join('app', 'javascript', 'images', 'logo.svg')
- = t('accounts.follow')
+ = account_action_button(status.account)
.status__content.emojify<
- if status.spoiler_text?
@@ -30,6 +29,7 @@
.detailed-status__meta
%data.dt-published{ value: status.created_at.to_time.iso8601 }
+
= link_to TagManager.instance.url_for(status), class: 'detailed-status__datetime u-url u-uid', target: stream_link_target, rel: 'noopener' do
%time.formatted{ datetime: status.created_at.iso8601, title: l(status.created_at) }= l(status.created_at)
·
@@ -40,20 +40,20 @@
= link_to status.application.name, status.application.website, class: 'detailed-status__application', target: '_blank', rel: 'noopener'
·
- if status.direct_visibility?
- %span<
+ %span.detailed-status__link<
= fa_icon('envelope')
- elsif status.private_visibility?
- %span<
+ %span.detailed-status__link<
= fa_icon('lock')
- else
- %span<
+ %span.detailed-status__link<
= fa_icon('retweet')
- %span= status.reblogs_count
+ %span.detailed-status__reblogs= number_to_human status.reblogs_count, strip_insignificant_zeros: true
·
- %span<
+ %span.detailed-status__link<
= fa_icon('star')
- %span= status.favourites_count
+ %span.detailed-status__favorites= number_to_human status.favourites_count, strip_insignificant_zeros: true
- if user_signed_in?
·
- = link_to t('statuses.open_in_web'), web_url("statuses/#{status.id}"), class: 'open-in-web-link', target: '_blank'
+ = link_to t('statuses.open_in_web'), web_url("statuses/#{status.id}"), class: 'detailed-status__application', target: '_blank'
diff --git a/app/views/stream_entries/_media.html.haml b/app/views/stream_entries/_media.html.haml
deleted file mode 100644
index 779f02c8d..000000000
--- a/app/views/stream_entries/_media.html.haml
+++ /dev/null
@@ -1,4 +0,0 @@
-.media-item
- = link_to media.remote_url.blank? ? media.file.url(:original) : media.remote_url, style: media.image? ? "background-image: url(#{media.file.url(:original)})" : '', target: '_blank', rel: 'noopener', class: "u-#{media.video? || media.gifv? ? 'video' : 'photo'}" do
- - unless media.image?
- %video{ src: media.file.url(:original), autoplay: true, loop: true }/
diff --git a/app/views/stream_entries/_more.html.haml b/app/views/stream_entries/_more.html.haml
deleted file mode 100644
index 9b1dfe4a7..000000000
--- a/app/views/stream_entries/_more.html.haml
+++ /dev/null
@@ -1,2 +0,0 @@
-= link_to url, class: 'more light' do
- = t('statuses.show_more')
diff --git a/app/views/stream_entries/_simple_status.html.haml b/app/views/stream_entries/_simple_status.html.haml
index 0f27585a1..676d367ca 100644
--- a/app/views/stream_entries/_simple_status.html.haml
+++ b/app/views/stream_entries/_simple_status.html.haml
@@ -1,18 +1,19 @@
-.status.light
- .status__header
- .status__meta
- = link_to TagManager.instance.url_for(status), class: 'status__relative-time u-url u-uid', target: stream_link_target, rel: 'noopener' do
- %time.time-ago{ datetime: status.created_at.iso8601, title: l(status.created_at) }= l(status.created_at)
- %data.dt-published{ value: status.created_at.to_time.iso8601 }
+.status
+ .status__info
+ = link_to TagManager.instance.url_for(status), class: 'status__relative-time u-url u-uid', target: stream_link_target, rel: 'noopener' do
+ %time.time-ago{ datetime: status.created_at.iso8601, title: l(status.created_at) }= l(status.created_at)
+ %data.dt-published{ value: status.created_at.to_time.iso8601 }
= link_to TagManager.instance.url_for(status.account), class: 'status__display-name p-author h-card', target: stream_link_target, rel: 'noopener' do
.status__avatar
%div
- = image_tag status.account.avatar(:original), width: 48, height: 48, alt: '', class: 'u-photo'
+ = image_tag status.account.avatar(:original), width: 48, height: 48, alt: '', class: 'u-photo account__avatar'
%span.display-name
- %strong.p-name.emojify= display_name(status.account, custom_emojify: true)
- %span= acct(status.account)
-
+ %bdi
+ %strong.display-name__html.p-name.emojify= display_name(status.account, custom_emojify: true)
+ %span.display-name__account
+ = acct(status.account)
+ = fa_icon('lock') if status.account.locked?
.status__content.emojify<
- if status.spoiler_text?
%p{ style: 'margin-bottom: 0' }<
@@ -26,3 +27,16 @@
= react_component :video, src: video.file.url(:original), preview: video.file.url(:small), sensitive: status.sensitive? && !current_account&.user&.setting_display_sensitive_media, width: 610, height: 343, inline: true
- else
= react_component :media_gallery, height: 343, sensitive: status.sensitive? && !current_account&.user&.setting_display_sensitive_media, 'autoPlayGif': current_account&.user&.setting_auto_play_gif, media: status.media_attachments.map { |a| ActiveModelSerializers::SerializableResource.new(a, serializer: REST::MediaAttachmentSerializer).as_json }
+
+ .status__action-bar
+ .status__action-bar-button.static-icon-button<
+ - if status.public_visibility? || status.unlisted_visibility?
+ = fa_icon 'retweet fw'
+ %span.detailed-status__reblogs= number_to_human status.reblogs_count, strip_insignificant_zeros: true
+ - elsif status.private_visibility?
+ = fa_icon 'lock fw'
+ - else
+ = fa_icon 'envelope fw'
+ .status__action-bar-button.static-icon-button<
+ = fa_icon 'star fw'
+ %span.detailed-status__favorites= number_to_human status.favourites_count, strip_insignificant_zeros: true
diff --git a/app/views/stream_entries/_status.html.haml b/app/views/stream_entries/_status.html.haml
index b87ca2177..320c9bc4f 100644
--- a/app/views/stream_entries/_status.html.haml
+++ b/app/views/stream_entries/_status.html.haml
@@ -16,24 +16,25 @@
- if status.reply? && include_threads
- if @next_ancestor
.entry{ class: entry_classes }
- = render 'stream_entries/more', url: TagManager.instance.url_for(@next_ancestor)
+ = link_to_more TagManager.instance.url_for(@next_ancestor)
= render partial: 'stream_entries/status', collection: @ancestors, as: :status, locals: { is_predecessor: true, direct_reply_id: status.in_reply_to_id }
.entry{ class: entry_classes }
- if status.reblog?
- .pre-header
- .pre-header__icon
- = fa_icon('retweet fw')
+ .status__prepend
+ .status__prepend-icon-wrapper
+ %i.status__prepend-icon.fa.fa-fw.fa-retweet
%span
= link_to TagManager.instance.url_for(status.account), class: 'status__display-name muted' do
- %strong.emojify= display_name(status.account, custom_emojify: true)
+ %bdi
+ %strong.emojify= display_name(status.account, custom_emojify: true)
= t('stream_entries.reblogged')
- elsif pinned
- .pre-header
- .pre-header__icon
- = fa_icon('thumb-tack fw')
+ .status__prepend
+ .status__prepend-icon-wrapper
+ %i.status__prepend-icon.fa.fa-fw.fa-thumb-tack
%span
= t('stream_entries.pinned')
@@ -42,13 +43,13 @@
- if include_threads
- if @since_descendant_thread_id
.entry{ class: entry_classes }
- = render 'stream_entries/more', url: short_account_status_url(status.account.username, status, max_descendant_thread_id: @since_descendant_thread_id + 1)
+ = link_to_more short_account_status_url(status.account.username, status, max_descendant_thread_id: @since_descendant_thread_id + 1)
- @descendant_threads.each do |thread|
= render partial: 'stream_entries/status', collection: thread[:statuses], as: :status, locals: { is_successor: true, parent_id: status.id }
- if thread[:next_status]
.entry{ class: entry_classes }
- = render 'stream_entries/more', url: TagManager.instance.url_for(thread[:next_status])
+ = link_to_more TagManager.instance.url_for(thread[:next_status])
- if @next_descendant_thread
.entry{ class: entry_classes }
- = render 'stream_entries/more', url: short_account_status_url(status.account.username, status, since_descendant_thread_id: @max_descendant_thread_id - 1)
+ = link_to_more short_account_status_url(status.account.username, status, since_descendant_thread_id: @max_descendant_thread_id - 1)
diff --git a/app/views/stream_entries/embed.html.haml b/app/views/stream_entries/embed.html.haml
index b703c15d2..d20c1e93e 100644
--- a/app/views/stream_entries/embed.html.haml
+++ b/app/views/stream_entries/embed.html.haml
@@ -1,3 +1,3 @@
- cache @stream_entry.activity do
- .activity-stream.activity-stream-headless
+ .activity-stream.activity-stream--headless
= render "stream_entries/#{@type}", @type.to_sym => @stream_entry.activity, centered: true
diff --git a/app/views/stream_entries/show.html.haml b/app/views/stream_entries/show.html.haml
index dfb83e747..9da6245dc 100644
--- a/app/views/stream_entries/show.html.haml
+++ b/app/views/stream_entries/show.html.haml
@@ -17,8 +17,9 @@
= render 'stream_entries/og_description', activity: @stream_entry.activity
= render 'stream_entries/og_image', activity: @stream_entry.activity, account: @account
-- if show_landing_strip?
- = render partial: 'shared/landing_strip', locals: { account: @stream_entry.account }
-
-.activity-stream.activity-stream-headless.h-entry
- = render partial: "stream_entries/#{@type}", locals: { @type.to_sym => @stream_entry.activity, include_threads: true }
+.grid
+ .column-0
+ .activity-stream.activity-stream-headless.h-entry
+ = render partial: "stream_entries/#{@type}", locals: { @type.to_sym => @stream_entry.activity, include_threads: true }
+ .column-1
+ = render 'application/sidebar'
diff --git a/config/locales/ar.yml b/config/locales/ar.yml
index 013bc7004..d40ae0f72 100644
--- a/config/locales/ar.yml
+++ b/config/locales/ar.yml
@@ -46,7 +46,6 @@ ar:
people_who_follow: الأشخاص الذين يتبعون %{name}
posts: منشورات
posts_with_replies: التبويقات و الردود
- remote_follow: إتبع عن بعد
reserved_username: إسم المستخدم محجوز
roles:
admin: المدير
@@ -516,7 +515,6 @@ ar:
unlocked_warning_title: إنّ حسابك غير مقفل
generic:
changes_saved_msg: تم حفظ التعديلات بنجاح !
- powered_by: مدعوم بـ %{link}
save_changes: حفظ التغييرات
validation_errors:
one: لا يزال هناك خلل ما إلى حد الآن. يُرجى إعادة النظر في الخطأ أسفله
@@ -551,8 +549,6 @@ ar:
expires_at: تنتهي مدة صلاحيتها في
uses: يستخدِم
title: دعوة أشخاص
- landing_strip_html: "%{name} هو أحد مُستخدِمي %{link_to_root_path}. بإمكانك متابعته أو التواصل معه إن كنت تملك حسابًا أيا كان على البيئة الموحَّدة فيديفرس."
- landing_strip_signup_html: إن كنت لا تملك واحدا، يمكنك التسجيل مِن هنا .
lists:
errors:
limit: لقد بلغت الحد الأقصى للقوائم
@@ -720,7 +716,6 @@ ar:
unlisted: غير مُدرَج
unlisted_long: يُمكن لأيٍ كان رُؤيتَه و لكن لن يُعرَض على الخيوط العامة
stream_entries:
- click_to_show: إضغط للعرض
pinned: تبويق مثبّت
reblogged: رقى
sensitive_content: محتوى حساس
diff --git a/config/locales/ast.yml b/config/locales/ast.yml
index 4436c2d88..3dae9cc1a 100644
--- a/config/locales/ast.yml
+++ b/config/locales/ast.yml
@@ -96,8 +96,6 @@ ast:
followers:
domain: Dominiu
followers_count: Númberu de siguidores
- generic:
- powered_by: cola potencia de %{link}
invites:
expires_in:
'1800': 30 minutos
@@ -183,7 +181,6 @@ ast:
other: "%{count} vídeos"
title: "%{name}: «%{quote}»"
stream_entries:
- click_to_show: Primi p'amosar
sensitive_content: Conteníu sensible
themes:
default: Mastodon
diff --git a/config/locales/bg.yml b/config/locales/bg.yml
index cb3ed2244..f101101e2 100644
--- a/config/locales/bg.yml
+++ b/config/locales/bg.yml
@@ -22,7 +22,6 @@ bg:
people_followed_by: Хора, които %{name} следва
people_who_follow: Хора, които следват %{name}
posts: Публикации
- remote_follow: Последвай
unfollow: Не следвай
application_mailer:
settings: 'Промяна на предпочитанията за e-mail: %{link}'
@@ -64,7 +63,6 @@ bg:
storage: Съхранение на мултимедия
generic:
changes_saved_msg: Успешно запазване на промените!
- powered_by: поддържано от %{link}
save_changes: Запази промените
validation_errors:
one: Нещо все още не е наред! Моля, прегледай грешката по-долу
@@ -76,8 +74,6 @@ bg:
blocking: Списък на блокираните
following: Списък на последователите
upload: Качване
- landing_strip_html: "%{name} е потребител от %{link_to_root_path}. Можеш да ги следваш, или да контактуваш с тях, ако имаш акаунт където и да е из федерираната вселена на Mastodon."
- landing_strip_signup_html: Ако нямаш акаунт, можеш да си създадеш ето тук .
media_attachments:
validations:
images_and_video: Не мога да прикача видеоклип към публикация, която вече съдържа изображения
@@ -144,7 +140,6 @@ bg:
public: Публично
unlisted: Публично, но не показвай в публичния канал
stream_entries:
- click_to_show: Покажи
reblogged: споделено
sensitive_content: Деликатно съдържание
time:
diff --git a/config/locales/ca.yml b/config/locales/ca.yml
index 45430f541..ea8a5712b 100644
--- a/config/locales/ca.yml
+++ b/config/locales/ca.yml
@@ -46,7 +46,6 @@ ca:
people_who_follow: Usuaris que segueixen %{name}
posts: Toots
posts_with_replies: Toots i respostes
- remote_follow: Seguiment remot
reserved_username: El nom d'usuari està reservat
roles:
admin: Administrador
@@ -504,7 +503,6 @@ ca:
unlocked_warning_title: El teu compte no està blocat
generic:
changes_saved_msg: Els canvis s'han desat correctament!
- powered_by: amb tecnologia %{link}
save_changes: Desa els canvis
validation_errors:
one: Alguna cosa no va bé! Si us plau, revisa l'error
@@ -540,8 +538,6 @@ ca:
expires_at: Caduca
uses: Usos
title: Convida persones
- landing_strip_html: "%{name} és un usuari/a de %{link_to_root_path}. Pots seguir-lo/la o interactuar amb ell/a si tens un compte a qualsevol node del fediverse."
- landing_strip_signup_html: Si no en tens, pots registrar-te aquí .
lists:
errors:
limit: Has assolit la quantitat màxima de llistes
@@ -710,7 +706,6 @@ ca:
unlisted: No llistat
unlisted_long: Tothom ho pot veure, però no es mostra en la història federada
stream_entries:
- click_to_show: Clic per mostrar
pinned: Toot fixat
reblogged: ha impulsat
sensitive_content: Contingut sensible
diff --git a/config/locales/co.yml b/config/locales/co.yml
index 6608f05a9..4326dde67 100644
--- a/config/locales/co.yml
+++ b/config/locales/co.yml
@@ -46,7 +46,6 @@ co:
people_who_follow: Seguitanu %{name}
posts: Statuti
posts_with_replies: Statuti è risposte
- remote_follow: Siguità d’altrò
reserved_username: Stu cugnome hè riservatu
roles:
admin: Amministratore
@@ -488,7 +487,6 @@ co:
unlocked_warning_title: U vostru contu hè pubblicu
generic:
changes_saved_msg: Cambiamenti salvati!
- powered_by: mossu da %{link}
save_changes: Salvà e mudificazione
validation_errors:
one: Qualcosa ùn và bè! Verificate u prublemu quì sottu
@@ -523,8 +521,6 @@ co:
expires_at: Spira
uses: Utiliza
title: Invità ghjente
- landing_strip_html: "%{name} hè nant’à %{link_to_root_path}. Pudete seguitallu·a o cumunicà cù ellu·a cù un contu in qualche parte di u fediverse."
- landing_strip_signup_html: Pudete ancu arrigistravi quì .
lists:
errors:
limit: Ùn pudete più creà altre liste
@@ -691,7 +687,6 @@ co:
unlisted: Micca listatu
unlisted_long: Tuttu u mondu pò vede, mà micca indè e linee pubbliche
stream_entries:
- click_to_show: Cliccà per vede
pinned: Statutu puntarulatu
reblogged: spartutu
sensitive_content: Cuntenutu sensibile
diff --git a/config/locales/da.yml b/config/locales/da.yml
index 7f9cd1e1e..a66b72541 100644
--- a/config/locales/da.yml
+++ b/config/locales/da.yml
@@ -46,7 +46,6 @@ da:
people_who_follow: Folk der følger %{name}
posts: Dyt
posts_with_replies: Toots og svar
- remote_follow: Følg fra andre instanser
reserved_username: Brugernavnet er reserveret
roles:
admin: Administrator
@@ -464,7 +463,6 @@ da:
unlocked_warning_title: Din konto er ikke låst
generic:
changes_saved_msg: Ændringerne blev gemt!
- powered_by: drevet af %{link}
save_changes: Gem ændringer
imports:
types:
@@ -593,7 +591,6 @@ da:
public_long: Alle kan se
unlisted: Ikke listet
stream_entries:
- click_to_show: Tryk for at vise
pinned: Fastgjort toot
sensitive_content: Følsomt indhold
themes:
diff --git a/config/locales/de.yml b/config/locales/de.yml
index a8a0e0f09..a7e3c6ffe 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -46,7 +46,6 @@ de:
people_who_follow: Profile, die %{name} folgen
posts: Beiträge
posts_with_replies: Beiträge mit Antworten
- remote_follow: Folgen
reserved_username: Dieser Profilname ist belegt
roles:
admin: Admin
@@ -517,7 +516,6 @@ de:
unlocked_warning_title: Dein Konto ist nicht gesperrt
generic:
changes_saved_msg: Änderungen gespeichert!
- powered_by: angetrieben von %{link}
save_changes: Änderungen speichern
validation_errors:
one: Etwas ist noch nicht ganz richtig! Bitte korrigiere den Fehler
@@ -553,8 +551,6 @@ de:
expires_at: Läuft ab
uses: Verwendungen
title: Leute Einladen
- landing_strip_html: "%{name} hat ein Profil auf %{link_to_root_path}. Du kannst folgen oder interagieren, sofern du ein Konto irgendwo im Fediversum hast."
- landing_strip_signup_html: Wenn nicht, kannst du dich hier anmelden .
lists:
errors:
limit: Du hast die maximale Anzahl an Listen erreicht
@@ -723,7 +719,6 @@ de:
unlisted: Nicht gelistet
unlisted_long: Für alle sichtbar, aber nicht in öffentlichen Zeitleisten aufgelistet
stream_entries:
- click_to_show: Klicken, um zu zeigen
pinned: Angehefteter Beitrag
reblogged: teilte
sensitive_content: Heikle Inhalte
diff --git a/config/locales/el.yml b/config/locales/el.yml
index 7fd48b7d2..905564317 100644
--- a/config/locales/el.yml
+++ b/config/locales/el.yml
@@ -46,7 +46,6 @@ el:
people_who_follow: Χρήστες που ακολουθούν τον/την %{name}
posts: Τουτ
posts_with_replies: Τουτ και απαντήσεις
- remote_follow: Απομακρυσμένη παρακολούθηση
reserved_username: Το όνομα χρήστη είναι κατειλημμένο
roles:
admin: Διαχειριστής
@@ -536,7 +535,6 @@ el:
unlocked_warning_title: Ο λογαριασμός σου δεν είναι κλειδωμένος
generic:
changes_saved_msg: Οι αλλαγές αποθηκεύτηκαν!
- powered_by: παρέχεται από %{link}
save_changes: Αποθήκευσε αλλαγές
validation_errors:
one: Κάτι δεν είναι εντάξει ακόμα! Για κοίταξε το παρακάτω σφάλμα
@@ -572,8 +570,6 @@ el:
expires_at: Λήγει
uses: Χρήσεις
title: Προσκάλεσε άτομα
- landing_strip_html: Ο/Η %{name} είναι χρήστης στο %{link_to_root_path}. Μπορείς να ακολουθήσεις ή να αλληλεπιδράσεις μαζί τους αν έχεις λογαριασμό οπουδήποτε στο fediverse.
- landing_strip_signup_html: Αν όχι, μπορείς να γραφτείς εδώ .
lists:
errors:
limit: Έχεις φτάσει το μέγιστο πλήθος επιτρεπτών λιστών
@@ -741,7 +737,6 @@ el:
unlisted: Ακαταχώριστο
unlisted_long: Βλέπει οποιοσδήποτε, αλλά δεν καταχωρείται στις δημόσιες ροές
stream_entries:
- click_to_show: Κλικ για εμφάνιση
pinned: Καρφιτσωμένο τουτ
reblogged: προωθημένο
sensitive_content: Ευαίσθητο περιεχόμενο
diff --git a/config/locales/en.yml b/config/locales/en.yml
index f89f89959..66f475ded 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -5,11 +5,13 @@ en:
about_mastodon_html: Mastodon is a social network based on open web protocols and free, open-source software. It is decentralized like e-mail.
about_this: About
administered_by: 'Administered by:'
+ api: API
closed_registrations: Registrations are currently closed on this instance. However! You can find a different instance to make an account on and get access to the very same network from there.
contact: Contact
contact_missing: Not set
contact_unavailable: N/A
description_headline: What is %{domain}?
+ documentation: Documentation
domain_count_after: other instances
domain_count_before: Connected to
extended_description_html: |
@@ -28,9 +30,11 @@ en:
hosted_on: Mastodon hosted on %{domain}
learn_more: Learn more
other_instances: Instance list
+ privacy_policy: Privacy policy
source_code: Source code
status_count_after: statuses
status_count_before: Who authored
+ terms: Terms of service
user_count_after: users
user_count_before: Home to
what_is_mastodon: What is Mastodon?
@@ -38,6 +42,7 @@ en:
follow: Follow
followers: Followers
following: Following
+ joined: Joined %{date}
media: Media
moved_html: "%{name} has moved to %{new_profile_link}:"
network_hidden: This information is not available
@@ -46,7 +51,6 @@ en:
people_who_follow: People who follow %{name}
posts: Toots
posts_with_replies: Toots and replies
- remote_follow: Remote follow
reserved_username: The username is reserved
roles:
admin: Admin
@@ -534,9 +538,12 @@ en:
true_privacy_html: Please mind that true privacy can only be achieved with end-to-end encryption .
unlocked_warning_html: Anyone can follow you to immediately view your private statuses. %{lock_link} to be able to review and reject followers.
unlocked_warning_title: Your account is not locked
+ footer:
+ developers: Developers
+ more: More…
+ resources: Resources
generic:
changes_saved_msg: Changes successfully saved!
- powered_by: powered by %{link}
save_changes: Save changes
validation_errors:
one: Something isn't quite right yet! Please review the error below
@@ -572,8 +579,6 @@ en:
expires_at: Expires
uses: Uses
title: Invite people
- landing_strip_html: "%{name} is a user on %{link_to_root_path}. You can follow them or interact with them if you have an account anywhere in the fediverse."
- landing_strip_signup_html: If you don't, you can sign up here .
lists:
errors:
limit: You have reached the maximum amount of lists
@@ -742,7 +747,6 @@ en:
unlisted: Unlisted
unlisted_long: Everyone can see, but not listed on public timelines
stream_entries:
- click_to_show: Click to show
pinned: Pinned toot
reblogged: boosted
sensitive_content: Sensitive content
@@ -836,6 +840,7 @@ en:
time:
formats:
default: "%b %d, %Y, %H:%M"
+ month: "%b %Y"
two_factor_authentication:
code_hint: Enter the code generated by your authenticator app to confirm
description_html: If you enable two-factor authentication , logging in will require you to be in possession of your phone, which will generate tokens for you to enter.
diff --git a/config/locales/eo.yml b/config/locales/eo.yml
index 156088af9..72010a085 100644
--- a/config/locales/eo.yml
+++ b/config/locales/eo.yml
@@ -46,7 +46,6 @@ eo:
people_who_follow: Sekvantoj de %{name}
posts: Mesaĝoj
posts_with_replies: Mesaĝoj kaj respondoj
- remote_follow: Fore sekvi
reserved_username: La uzantnomo estas rezervita
roles:
admin: Administranto
@@ -517,7 +516,6 @@ eo:
unlocked_warning_title: Via konto ne estas ŝlosita
generic:
changes_saved_msg: Ŝanĝoj sukcese konservitaj!
- powered_by: povigita de %{link}
save_changes: Konservi ŝanĝojn
validation_errors:
one: Io mise okazis! Bonvolu konsulti la suban erar-raporton
@@ -553,8 +551,6 @@ eo:
expires_at: Eksvalidiĝas je
uses: Uzoj
title: Inviti homojn
- landing_strip_html: "%{name} estas uzanto en %{link_to_root_path}. Vi povas sekvi tiun aŭ interagi kun tiu, se vi havas konton ie ajn en la fediverse."
- landing_strip_signup_html: Se vi ne havas, vi povas registriĝi ĉi tie .
lists:
errors:
limit: Vi atingis la maksimuman kvanton de listoj
@@ -723,7 +719,6 @@ eo:
unlisted: Nelistigita
unlisted_long: Ĉiuj povas vidi, sed nelistigita en publikaj tempolinioj
stream_entries:
- click_to_show: Alklaki por montri
pinned: Alpinglita
reblogged: diskonigita
sensitive_content: Tikla enhavo
diff --git a/config/locales/es.yml b/config/locales/es.yml
index 3e22e2643..3aae7f934 100644
--- a/config/locales/es.yml
+++ b/config/locales/es.yml
@@ -45,7 +45,6 @@ es:
people_who_follow: Usuarios que siguen a %{name}
posts: Toots
posts_with_replies: Toots con respuestas
- remote_follow: Seguir
reserved_username: El nombre de usuario está reservado
roles:
admin: Administrador
@@ -486,7 +485,6 @@ es:
unlocked_warning_title: Tu cuenta no está bloqueada
generic:
changes_saved_msg: "¡Cambios guardados con éxito!"
- powered_by: gracias a %{link}
save_changes: Guardar cambios
validation_errors:
one: "¡Algo no está bien! Por favor, revisa el error"
@@ -521,8 +519,6 @@ es:
expires_at: Expira
uses: Usos
title: Invitar a gente
- landing_strip_html: "%{name} es un usuario en %{link_to_root_path}. Puedes seguirlo(a) o interactuar con el o ella si tienes una cuenta en cualquier parte del fediverse."
- landing_strip_signup_html: Si no tienes una, puedes registrarte aquí .
lists:
errors:
limit: Has alcanzado la cantidad máxima de listas
@@ -688,7 +684,6 @@ es:
unlisted: Público, pero no mostrar en la historia federada
unlisted_long: Todos pueden ver, pero no está listado en las líneas de tiempo públicas
stream_entries:
- click_to_show: Click para mostrar
pinned: Toot fijado
reblogged: retooteado
sensitive_content: Contenido sensible
diff --git a/config/locales/eu.yml b/config/locales/eu.yml
index e141f27ee..c11e05908 100644
--- a/config/locales/eu.yml
+++ b/config/locales/eu.yml
@@ -46,7 +46,6 @@ eu:
people_who_follow: "%{name} jarraitzen dutenak"
posts: Toot-ak
posts_with_replies: Toot eta erantzunak
- remote_follow: Jarraitu urrunetik
reserved_username: Erabiltzaile-izena erreserbatuta dago
roles:
admin: Administratzailea
@@ -488,7 +487,6 @@ eu:
unlocked_warning_title: Zure kontua ez dago giltzapetuta
generic:
changes_saved_msg: Aldaketak ongi gorde dira!
- powered_by: "(e)k %{link} darabil"
save_changes: Gorde aldaketak
validation_errors:
one: Zerbait ez dabil ongi! Egiaztatu beheko errorea mesedez
@@ -524,8 +522,6 @@ eu:
expires_at: Iraungitzea
uses: Erabilerak
title: Gonbidatu jendea
- landing_strip_html: "%{name} %{link_to_root_path} instantziako erabiltzailea da. Fedibertsoko edozein tokitan kontua baduzu jarraitu dezakezu eta harremanetan jarri."
- landing_strip_signup_html: Ez baduzu, hemen izena eman dezakezu.
lists:
errors:
limit: Gehieneko zerrenda kopurura heldu zara
@@ -693,7 +689,6 @@ eu:
unlisted: Zerrendatu gabea
unlisted_long: Edonork ikusi dezake, baina ez da denbora-lerro publikoetan agertzen
stream_entries:
- click_to_show: Klik erakusteko
pinned: Finkatutako toot-a
reblogged: "(r)en bultzada"
sensitive_content: Eduki hunkigarria
diff --git a/config/locales/fa.yml b/config/locales/fa.yml
index cfd4a9838..b4dc3fd8a 100644
--- a/config/locales/fa.yml
+++ b/config/locales/fa.yml
@@ -46,7 +46,6 @@ fa:
people_who_follow: کسانی که %{name} را پی میگیرند
posts: نوشتهها
posts_with_replies: نوشتهها و پاسخها
- remote_follow: پیگیری غیرمستقیم
reserved_username: این نام کاربری در دسترس نیست
roles:
admin: مدیر
@@ -536,7 +535,6 @@ fa:
unlocked_warning_title: حساب شما خصوصی نیست
generic:
changes_saved_msg: تغییرات با موفقیت ذخیره شدند!
- powered_by: نیرو گرفته از %{link}
save_changes: ذخیرهٔ تغییرات
validation_errors:
one: یک چیزی هنوز درست نیست! لطفاً خطاهای زیر را ببینید
@@ -572,8 +570,6 @@ fa:
expires_at: تاریخ انقضا
uses: استفادهها
title: دعوت دیگران
- landing_strip_html: "%{name} کاربری روی %{link_to_root_path} است. شما با داشتن حساب روی هر سروری میتوانید نوشتههای او را پیگیری کرده یا با او ارتباط داشته باشید."
- landing_strip_signup_html: اگر هنوز حسابی ندارید اینجا حساب باز کنید .
lists:
errors:
limit: از این بیشتر نمیشود فهرست داشت
@@ -742,7 +738,6 @@ fa:
unlisted: فهرستنشده
unlisted_long: عمومی، ولی در فهرست نوشتهها نمایش نمییابد
stream_entries:
- click_to_show: برای نمایش کلیک کنید
pinned: نوشتههای ثابت
reblogged: بازبوقید
sensitive_content: محتوای حساس
diff --git a/config/locales/fi.yml b/config/locales/fi.yml
index 6c9076919..2c534f071 100644
--- a/config/locales/fi.yml
+++ b/config/locales/fi.yml
@@ -46,7 +46,6 @@ fi:
people_who_follow: Käyttäjän %{name} seuraajat
posts: Tuuttaukset
posts_with_replies: Tuuttaukset ja vastaukset
- remote_follow: Etäseuranta
reserved_username: Käyttäjänimi on varattu
roles:
admin: Ylläpitäjä
@@ -484,7 +483,6 @@ fi:
unlocked_warning_title: Tiliäsi ei ole lukittu
generic:
changes_saved_msg: Muutosten tallennus onnistui!
- powered_by: voimanlähteenä %{link}
save_changes: Tallenna muutokset
validation_errors:
one: Kaikki ei ole aivan oikein! Tarkasta alla oleva virhe
@@ -519,8 +517,6 @@ fi:
expires_at: Vanhenee
uses: Käytetty
title: Kutsu ihmisiä
- landing_strip_html: "%{name} on käyttäjänä palvelimella %{link_to_root_path}. Voit seurata heitä tai pitää heihin yhteyttä, jos sinulla on tili missä tahansa fediversumin kolkassa."
- landing_strip_signup_html: Jos sinulla ei ole tiliä, voit rekisteröityä tätä kautta .
lists:
errors:
limit: Sinulla on jo suurin sallittu määrä listoja
@@ -684,7 +680,6 @@ fi:
unlisted: Listaamaton julkinen
unlisted_long: Kaikki voivat nähdä, mutta ei näytetä julkisilla aikajanoilla
stream_entries:
- click_to_show: Katso napsauttamalla
pinned: Kiinnitetty tuuttaus
reblogged: buustasi
sensitive_content: Arkaluontoista sisältöä
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index 07d900cfa..bc2c7b387 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -46,7 +46,6 @@ fr:
people_who_follow: Personnes qui suivent %{name}
posts: Statuts
posts_with_replies: Statuts & réponses
- remote_follow: Suivre à distance
reserved_username: Ce nom d’utilisateur⋅ice est réservé
roles:
admin: Admin
@@ -488,7 +487,6 @@ fr:
unlocked_warning_title: Votre compte n’est pas privé
generic:
changes_saved_msg: Les modifications ont été enregistrées avec succès !
- powered_by: propulsé par %{link}
save_changes: Enregistrer les modifications
validation_errors:
one: Quelque chose ne va pas ! Vérifiez l’erreur ci-dessous
@@ -523,8 +521,6 @@ fr:
expires_at: Expire
uses: Utilise
title: Inviter des gens
- landing_strip_html: %{name} utilise %{link_to_root_path}. Vous pouvez læ suivre et interagir si vous possédez un compte quelque part dans le "fediverse".
- landing_strip_signup_html: Si ce n’est pas le cas, vous pouvez en créer un ici .
lists:
errors:
limit: Vous avez atteint le nombre maximum de listes
@@ -691,7 +687,6 @@ fr:
unlisted: Public sans être affiché sur le fil public
unlisted_long: Tout le monde peut voir vos statuts mais ils ne seront pas sur listés sur les fils publics
stream_entries:
- click_to_show: Cliquer pour afficher
pinned: Pouet épinglé
reblogged: a partagé
sensitive_content: Contenu sensible
diff --git a/config/locales/gl.yml b/config/locales/gl.yml
index e7943c469..a5732168b 100644
--- a/config/locales/gl.yml
+++ b/config/locales/gl.yml
@@ -46,7 +46,6 @@ gl:
people_who_follow: Personas que seguen a %{name}
posts: Mensaxes
posts_with_replies: Toots e respostas
- remote_follow: Seguimento remoto
reserved_username: O nome de usuaria está reservado
roles:
admin: Admin
@@ -535,7 +534,6 @@ gl:
unlocked_warning_title: A súa conta non está pechada
generic:
changes_saved_msg: Cambios gardados correctamente!!
- powered_by: grazas a %{link}
save_changes: Gardar cambios
validation_errors:
one: Algo non está ben de todo! Por favor revise abaixo o erro
@@ -571,8 +569,6 @@ gl:
expires_at: Caduca
uses: Usos
title: Convidar xente
- landing_strip_html: "%{name} é unha usuaria en %{link_to_root_path}. Pode seguila ou interactuar con ela si ten unha conta en algún lugar do fediverso."
- landing_strip_signup_html: Si non, pode rexistrarse aquí .
lists:
errors:
limit: Acadou o número máximo de listas
@@ -741,7 +737,6 @@ gl:
unlisted: Non listado
unlisted_long: Visible para calquera, pero non listado en liñas de tempo públicas
stream_entries:
- click_to_show: Pulse para mostrar
pinned: Mensaxe fixada
reblogged: promovida
sensitive_content: Contido sensible
diff --git a/config/locales/he.yml b/config/locales/he.yml
index c127db385..b03f184ca 100644
--- a/config/locales/he.yml
+++ b/config/locales/he.yml
@@ -44,7 +44,6 @@ he:
people_who_follow: העוקבים של %{name}
posts: הודעות
posts_with_replies: חצרוצים ותגובות
- remote_follow: מעקב מרחוק
reserved_username: שם המשתמש שמור
roles:
admin: מנהל
@@ -286,7 +285,6 @@ he:
unlocked_warning_title: חשבונך אינו נעול
generic:
changes_saved_msg: השינויים נשמרו בהצלחה!
- powered_by: רץ על %{link}
save_changes: שמור שינויים
validation_errors:
one: משהו לא לגמרי בסדר עדיין! אנא הציצו על השגיאה מטה
@@ -299,8 +297,6 @@ he:
following: רשימת נעקבים
muting: רשימת השתקות
upload: יבוא
- landing_strip_html: "%{name} מזהה משתמש(ת) מהקהילה %{link_to_root_path}. ניתן לעקוב אחריהם או לדבר איתם בעזרת חשבון על כל שרת קהילה ברחבי הפדרציה."
- landing_strip_signup_html: לחלופין , ניתן להרשם מקומית כאן .
media_attachments:
validations:
images_and_video: לא ניתן להוסיף וידאו לחצרוץ שכבר מכיל תמונות
@@ -372,7 +368,6 @@ he:
unlisted: מוסתר
unlisted_long: פומבי, אבל לא להצגה בפיד הציבורי
stream_entries:
- click_to_show: ללחוץ להצגה
reblogged: הודהד
sensitive_content: תוכן רגיש
time:
diff --git a/config/locales/hr.yml b/config/locales/hr.yml
index 2d2eddc08..07373d19d 100644
--- a/config/locales/hr.yml
+++ b/config/locales/hr.yml
@@ -22,7 +22,6 @@ hr:
people_followed_by: Ljudi koje %{name} slijedi
people_who_follow: Ljudi koji slijede %{name}
posts: Postovi
- remote_follow: Remote follow
unfollow: Prestani slijediti
application_mailer:
settings: 'Promijeni e-mail postavke: %{link}'
@@ -64,7 +63,6 @@ hr:
storage: Pohrana media zapisa
generic:
changes_saved_msg: Izmjene su uspješno sačuvane!
- powered_by: omogućuje %{link}
save_changes: Sačuvaj izmjene
validation_errors:
one: Nešto ne štima! Vidi grešku ispod
@@ -77,8 +75,6 @@ hr:
following: Lista onih koje slijedim
muting: Lista utišanih
upload: Upload
- landing_strip_html: "%{name} je korisnik na %{link_to_root_path}. Možeš ih slijediti ili komunicirati s njima ako imaš račun igdje u fediversu."
- landing_strip_signup_html: Ako nemaš, možeš se registrirati ovdje .
notification_mailer:
digest:
body: 'Ovo je kratak sažetak propuštenog %{instance} od tvog prošlog posjeta %{since}:'
@@ -141,7 +137,6 @@ hr:
public: Javno
unlisted: Javno, no nemoj prikazati na javnom timelineu
stream_entries:
- click_to_show: Klikni da bi prikazao
reblogged: potaknut
sensitive_content: Osjetljivi sadržaj
time:
diff --git a/config/locales/hu.yml b/config/locales/hu.yml
index 41093aa43..af10dfd80 100644
--- a/config/locales/hu.yml
+++ b/config/locales/hu.yml
@@ -44,7 +44,6 @@ hu:
people_who_follow: "%{name} követői"
posts: Tülkök
posts_with_replies: Tülkök és válaszok
- remote_follow: Követés más hálózaton
reserved_username: Ez egy már lefoglalt felhasználónév
roles:
admin: Adminisztrátor
@@ -427,7 +426,6 @@ hu:
unlocked_warning_title: A fiókod jelenleg nem privát
generic:
changes_saved_msg: Változások sikeresen elmentve!
- powered_by: működteti a %{link}
save_changes: Változások mentése
validation_errors:
one: Valami nincs rendjén! Kérlek tekintsd meg a hibát alant
@@ -461,8 +459,6 @@ hu:
expires_at: Lejárat
uses: Használat
title: Meghívások
- landing_strip_html: "%{name} az alábbi instancia használója: %{link_to_root_path}. Követheted vagy kapcsolatba léphetsz vele, ha már van felhasználói fiókod a föderációban."
- landing_strip_signup_html: Ha még nincs fiókod, itt regisztrálhatsz .
lists:
errors:
limit: Elérted a hozzáadható listák maximális számát
@@ -610,7 +606,6 @@ hu:
unlisted: Listázatlan
unlisted_long: Mindenki látja, de a nyilvános időfolyamokban nem jelenik meg
stream_entries:
- click_to_show: Megtekintéshez kattints
pinned: Kitűzött tülk
reblogged: reblogolt
sensitive_content: Szenzitív tartalom
diff --git a/config/locales/id.yml b/config/locales/id.yml
index 4fb75f2b0..c391a6b4e 100644
--- a/config/locales/id.yml
+++ b/config/locales/id.yml
@@ -22,7 +22,6 @@ id:
people_followed_by: Orang yang diikuti %{name}
people_who_follow: Orang-orang yang mengikuti %{name}
posts: Postingan
- remote_follow: Mengikuti
unfollow: Berhenti mengikuti
admin:
accounts:
@@ -213,7 +212,6 @@ id:
unlocked_warning_title: Akun anda tidak dikunci
generic:
changes_saved_msg: Perubahan berhasil disimpan!
- powered_by: didukung oleh %{link}
save_changes: Simpan perubahan
validation_errors:
one: Ada yang tidak beres! Mohon tinjau error dibawah ini
@@ -226,8 +224,6 @@ id:
following: Daftar diikuti
muting: Daftar didiamkan
upload: Unggah
- landing_strip_html: "%{name} adalah pengguna di %{link_to_root_path}.Anda dapat mengikuti mereka atau berinteraksi dengan mereka jika anda memiliki akun di fediverse."
- landing_strip_signup_html: Jika anda tidak punya, anda bisa daftar disini .
media_attachments:
validations:
images_and_video: Tidak bisa melampirkan video pada status yang telah memiliki gambar
@@ -298,7 +294,6 @@ id:
public_long: Bisa dilihat semua orang
unlisted: Bisa dilihat semua orang, tapi tidak ditampilkan di linimasa publik
stream_entries:
- click_to_show: Klik untuk menampilkan
reblogged: di-boost-kan
sensitive_content: Konten sensitif
time:
diff --git a/config/locales/io.yml b/config/locales/io.yml
index bf15de488..71a7f2d94 100644
--- a/config/locales/io.yml
+++ b/config/locales/io.yml
@@ -22,7 +22,6 @@ io:
people_followed_by: Sequati da %{name}
people_who_follow: Sequanti di %{name}
posts: Mesaji
- remote_follow: Fore sequar
unfollow: Dessequar
admin:
accounts:
@@ -192,7 +191,6 @@ io:
storage: Konservado di kontenajo
generic:
changes_saved_msg: Chanji senprobleme konservita!
- powered_by: povigita da %{link}
save_changes: Konservar la chanji
validation_errors:
one: Ulo ne eventis senprobleme! Voluntez konsultar la suba eror-raporto.
@@ -205,8 +203,6 @@ io:
following: Listo de sequati
muting: Muting list
upload: Kargar
- landing_strip_html: "%{name} esas uzero en %{link_to_root_path}. Tu povas sequar lu o komunikar kun lu, se tu havas konto irgaloke en la Fediverse."
- landing_strip_signup_html: Se tu ne havas, tu povas membreskar hike .
media_attachments:
validations:
images_and_video: Cannot attach a video to a status that already contains images
@@ -274,7 +270,6 @@ io:
public: Publika
unlisted: Publika, ma ne aperos en publika tempolinei
stream_entries:
- click_to_show: Kliktar por montrar
reblogged: diskonocigita
sensitive_content: Titiliva kontenajo
time:
diff --git a/config/locales/it.yml b/config/locales/it.yml
index 0110a488e..e985d1f10 100644
--- a/config/locales/it.yml
+++ b/config/locales/it.yml
@@ -46,7 +46,6 @@ it:
people_who_follow: Persone che seguono %{name}
posts: Posts
posts_with_replies: Toot e risposte
- remote_follow: Segui da remoto
reserved_username: Il nome utente è riservato
roles:
admin: Amministratore
@@ -433,7 +432,6 @@ it:
unlocked_warning_html: Chiunque può seguirti per vedere immediatamente i tuoi status privati. %{lock_link} per poter esaminare e respingere gli utenti che vogliono seguirti.
generic:
changes_saved_msg: Modifiche effettuate con successo!
- powered_by: offerto da %{link}
save_changes: Salva modifiche
validation_errors:
one: Qualcosa ancora non va bene! Per favore, controlla l'errore qui sotto
@@ -467,8 +465,6 @@ it:
expires_at: Scade
uses: Utilizzi
title: Invita persone
- landing_strip_html: "%{name} è un utente su %{link_to_root_path}. Puoi seguirlo o interagire con lui se possiedi un account ovunque nel fediverse."
- landing_strip_signup_html: Se non possiedi un account, puoi iscriverti qui .
lists:
errors:
limit: Hai raggiunto il numero massimo di liste
@@ -605,7 +601,6 @@ it:
unlisted: Pubblico, ma non visibile sulla timeline pubblica
unlisted_long: Tutti lo possono vedere, ma non compare nelle timeline pubbliche
stream_entries:
- click_to_show: Clicca per mostrare
pinned: Toot fissato in cima
reblogged: condiviso
sensitive_content: Materiale sensibile
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index 0e7258b4c..9c3ab5f73 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -46,7 +46,6 @@ ja:
people_who_follow: "%{name} さんをフォロー中のアカウント"
posts: トゥート
posts_with_replies: トゥートと返信
- remote_follow: リモートフォロー
reserved_username: このユーザー名は予約されています
roles:
admin: Admin
@@ -535,7 +534,6 @@ ja:
unlocked_warning_title: このアカウントは承認制アカウントに設定されていません
generic:
changes_saved_msg: 正常に変更されました!
- powered_by: powered by %{link}
save_changes: 変更を保存
validation_errors:
one: エラーが発生しました! 以下のエラーを確認してください
@@ -571,8 +569,6 @@ ja:
expires_at: 有効期限
uses: 使用
title: 新規ユーザーの招待
- landing_strip_html: "%{name} さんはインスタンス %{link_to_root_path} のユーザーです。アカウントさえ持っていればフォローしたり会話したりできます。"
- landing_strip_signup_html: もしお持ちでないなら こちら からサインアップできます。
lists:
errors:
limit: リストの上限に達しました
@@ -741,7 +737,6 @@ ja:
unlisted: 未収載
unlisted_long: 誰でも見ることができますが、公開タイムラインには表示されません
stream_entries:
- click_to_show: クリックして表示
pinned: 固定されたトゥート
reblogged: さんがブースト
sensitive_content: 閲覧注意
diff --git a/config/locales/ko.yml b/config/locales/ko.yml
index 9b742d18b..f5a780f6c 100644
--- a/config/locales/ko.yml
+++ b/config/locales/ko.yml
@@ -46,7 +46,6 @@ ko:
people_who_follow: "%{name} 님을 팔로우 중인 계정"
posts: 툿
posts_with_replies: 툿과 답장
- remote_follow: 리모트 팔로우
reserved_username: 이 아이디는 예약되어 있습니다
roles:
admin: 관리자
@@ -509,7 +508,6 @@ ko:
unlocked_warning_title: 이 계정은 비공개로 설정되어 있지 않습니다
generic:
changes_saved_msg: 정상적으로 변경되었습니다!
- powered_by: "%{link}에 의해 제공"
save_changes: 변경 사항을 저장
validation_errors:
one: 오류가 발생했습니다. 아래 오류를 확인해 주십시오
@@ -545,8 +543,6 @@ ko:
expires_at: 만료
uses: 사용됨
title: 초대
- landing_strip_html: "%{name} 님은 %{link_to_root_path} 인스턴스의 사용자입니다. 계정을 가지고 있다면 팔로우 하거나 대화할 수 있습니다."
- landing_strip_signup_html: 아직 계정이 없다면 여기서 등록할 수 있습니다.
lists:
errors:
limit: 리스트 최대치에 도달했습니다
@@ -715,7 +711,6 @@ ko:
unlisted: 공개 타임라인 비공개
unlisted_long: 누구나 볼 수 있지만, 공개 타임라인에는 표시되지 않습니다
stream_entries:
- click_to_show: 클릭해서 표시
pinned: 고정된 툿
reblogged: 님이 부스트 했습니다
sensitive_content: 민감한 컨텐츠
diff --git a/config/locales/nl.yml b/config/locales/nl.yml
index 0c45016a7..0001891b2 100644
--- a/config/locales/nl.yml
+++ b/config/locales/nl.yml
@@ -46,7 +46,6 @@ nl:
people_who_follow: Mensen die %{name} volgen
posts: Toots
posts_with_replies: Toots en reacties
- remote_follow: Extern volgen
reserved_username: Deze gebruikersnaam is gereserveerd
roles:
admin: Beheerder
@@ -536,7 +535,6 @@ nl:
unlocked_warning_title: Jouw account is niet besloten
generic:
changes_saved_msg: Wijzigingen succesvol opgeslagen!
- powered_by: wordt mogelijk gemaakt door %{link}
save_changes: Wijzigingen opslaan
validation_errors:
one: Er is iets niet helemaal goed! Bekijk onderstaande fout
@@ -572,8 +570,6 @@ nl:
expires_at: Verloopt op
uses: Aantal keer te gebruiken
title: Mensen uitnodigen
- landing_strip_html: "%{name} is een gebruiker op %{link_to_root_path}. Je kunt deze volgen en ermee communiceren als je op Mastodon (of ergens anders in de fediverse) een account hebt."
- landing_strip_signup_html: Als je dat niet hebt, kun je je hier registreren .
lists:
errors:
limit: Je hebt het maximaal aantal lijsten bereikt
@@ -742,7 +738,6 @@ nl:
unlisted: Minder openbaar
unlisted_long: Aan iedereen tonen, maar niet op openbare tijdlijnen
stream_entries:
- click_to_show: Klik om te tonen
pinned: Vastgemaakte toot
reblogged: boostte
sensitive_content: Gevoelige inhoud
diff --git a/config/locales/no.yml b/config/locales/no.yml
index eb1d27a19..c17ea3e86 100644
--- a/config/locales/no.yml
+++ b/config/locales/no.yml
@@ -44,7 +44,6 @@
people_who_follow: Folk som følger %{name}
posts: Poster
posts_with_replies: Tuter med svar
- remote_follow: Følg fra andre instanser
reserved_username: Brukernavnet er reservert
roles:
admin: Admin
@@ -427,7 +426,6 @@
unlocked_warning_title: Din konto er ikke låst
generic:
changes_saved_msg: Vellykket lagring av endringer!
- powered_by: drevet av %{link}
save_changes: Lagre endringer
validation_errors:
one: Noe er ikke helt riktig ennå. Vennligst se etter en gang til
@@ -461,8 +459,6 @@
expires_at: Utløper
uses: Bruk
title: Inviter personer
- landing_strip_html: "%{name} er en bruker på %{link_to_root_path}. Du kan følge dem eller kommunisere med dem hvis du har en konto hvor som helst i fediverset."
- landing_strip_signup_html: Hvis du ikke har en konto så kan du registrere deg her .
lists:
errors:
limit: Du har nådd det maksimale antall lister
@@ -610,7 +606,6 @@
unlisted: Uoppført
unlisted_long: Synlig for alle, men ikke på offentlige tidslinjer
stream_entries:
- click_to_show: Klikk for å vise
pinned: Festet tut
reblogged: fremhevde
sensitive_content: Følsomt innhold
diff --git a/config/locales/oc.yml b/config/locales/oc.yml
index 7146d9220..828ecfbf5 100644
--- a/config/locales/oc.yml
+++ b/config/locales/oc.yml
@@ -46,7 +46,6 @@ oc:
people_who_follow: Lo monde que sègon %{name}
posts: Tuts
posts_with_replies: Tuts e responsas
- remote_follow: Sègre a distància
reserved_username: Aqueste nom d’utilizaire es reservat
roles:
admin: Admin
@@ -593,7 +592,6 @@ oc:
unlocked_warning_title: Vòstre compte es pas clavat
generic:
changes_saved_msg: Cambiaments ben realizats !
- powered_by: propulsat per %{link}
save_changes: Salvar los cambiaments
validation_errors:
one: I a quicòm que truca ! Mercés de corregir l’error çai-jos
@@ -629,8 +627,6 @@ oc:
expires_at: Expirats
uses: Usatges
title: Convidar de mond
- landing_strip_html: "%{name} utiliza %{link_to_root_path}. Podètz lo/la sègre o interagir amb el o ela s’avètz un compte ont que siasque sul fediverse."
- landing_strip_signup_html: S’es pas lo cas, podètz vos marcar aquí .
lists:
errors:
limit: Avètz atengut lo maximum de listas
@@ -799,7 +795,6 @@ oc:
unlisted: Pas listat
unlisted_long: Tot lo monde pòt veire mai serà pas visible sul flux public
stream_entries:
- click_to_show: Clicatz per veire
pinned: Tut penjat
reblogged: a partejat
sensitive_content: Contengut sensible
diff --git a/config/locales/pl.yml b/config/locales/pl.yml
index f4d6f57af..c33078496 100644
--- a/config/locales/pl.yml
+++ b/config/locales/pl.yml
@@ -46,7 +46,6 @@ pl:
people_who_follow: Osoby, które śledzą konto %{name}
posts: Wpisy
posts_with_replies: Wpisy z odpowiedziami
- remote_follow: Śledź zdalnie
reserved_username: Ta nazwa użytkownika jest zarezerwowana
roles:
admin: Administrator
@@ -537,7 +536,6 @@ pl:
unlocked_warning_title: Twoje konto nie jest zablokowane
generic:
changes_saved_msg: Ustawienia zapisane!
- powered_by: uruchomione na %{link}
save_changes: Zapisz zmiany
validation_errors:
few: Coś jest wciąż nie tak! Przejrzyj %{count} poniższe błędy
@@ -577,8 +575,6 @@ pl:
expires_at: Wygaśnie po
uses: Użycia
title: Zaproś użytkowników
- landing_strip_html: "%{name} ma konto na %{link_to_root_path}. Możesz je śledzić i wejść z nim w interakcję jeśli masz konto gdziekolwiek w Fediwersum."
- landing_strip_signup_html: Jeśli jeszcze go nie masz, możesz stworzyć konto .
lists:
errors:
limit: Przekroczyłeś maksymalną liczbę utworzonych list
@@ -755,7 +751,6 @@ pl:
unlisted: Niewypisane
unlisted_long: Widoczne dla wszystkich, ale nie wyświetlane na publicznych osiach czasu
stream_entries:
- click_to_show: Naciśnij aby wyświetlić
pinned: Przypięty wpis
reblogged: podbił
sensitive_content: Wrażliwa zawartość
diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml
index 2bff2b469..0c1cc6a6d 100644
--- a/config/locales/pt-BR.yml
+++ b/config/locales/pt-BR.yml
@@ -46,7 +46,6 @@ pt-BR:
people_who_follow: Pessoas que seguem %{name}
posts: Toots
posts_with_replies: Toots e respostas
- remote_follow: Siga remotamente
reserved_username: Este usuário está reservado
roles:
admin: Administrador
@@ -536,7 +535,6 @@ pt-BR:
unlocked_warning_title: A sua conta não está trancada
generic:
changes_saved_msg: Mudanças salvas com sucesso!
- powered_by: graças a tecnologia de %{link}
save_changes: Salvar mudanças
validation_errors:
one: Algo não está certo! Por favor, reveja o erro abaixo
@@ -572,8 +570,6 @@ pt-BR:
expires_at: Expira em
uses: Usos
title: Convidar pessoas
- landing_strip_html: "%{name} é um usuário no %{link_to_root_path}. Você pode segui-lo ou interagir com ele se você tiver uma conta em qualquer lugar no fediverso."
- landing_strip_signup_html: Se não, você pode se cadastrar aqui .
lists:
errors:
limit: Você alcançou o número máximo de listas
@@ -742,7 +738,6 @@ pt-BR:
unlisted: Não listado
unlisted_long: Todos podem ver, porém não será postado nas timelines públicas
stream_entries:
- click_to_show: Clique para mostrar
pinned: Toot fixado
reblogged: compartilhou
sensitive_content: Conteúdo sensível
diff --git a/config/locales/pt.yml b/config/locales/pt.yml
index 3a6f2c993..33b6b0acb 100644
--- a/config/locales/pt.yml
+++ b/config/locales/pt.yml
@@ -44,7 +44,6 @@ pt:
people_who_follow: Pessoas que seguem %{name}
posts: Posts
posts_with_replies: Posts e Respostas
- remote_follow: Seguir remotamente
reserved_username: Este nome de utilizadores é reservado
roles:
admin: Administrador
@@ -430,7 +429,6 @@ pt:
unlocked_warning_title: A tua conta não está bloqueada
generic:
changes_saved_msg: Alterações guardadas!
- powered_by: fornecido por %{link}
save_changes: Guardar alterações
validation_errors:
one: Algo não está correcto. Por favor vê o erro abaixo
@@ -464,8 +462,6 @@ pt:
expires_at: Expira
uses: Usos
title: Convidar pessoas
- landing_strip_html: "%{name} é um utilizador em %{link_to_root_path}. Podes segui-lo ou interagir com ele se tiveres uma conta em qualquer lugar no fediverso."
- landing_strip_signup_html: If you don't, you can sign up here .
lists:
errors:
limit: Número máximo de listas alcançado
@@ -612,7 +608,6 @@ pt:
unlisted: Público, mas não mostre no timeline público
unlisted_long: Todos podem ver, porém não será postado nas timelines públicas
stream_entries:
- click_to_show: Clique pra mostrar
pinned: Toot fixado
reblogged: boosted
sensitive_content: Conteúdo sensível
diff --git a/config/locales/ru.yml b/config/locales/ru.yml
index 89aefc1cd..5fc511d2e 100644
--- a/config/locales/ru.yml
+++ b/config/locales/ru.yml
@@ -46,7 +46,6 @@ ru:
people_who_follow: Подписчики %{name}
posts: Посты
posts_with_replies: Посты с ответами
- remote_follow: Подписаться на удаленном узле
reserved_username: Имя пользователя зарезервировано
roles:
admin: Администратор
@@ -492,7 +491,6 @@ ru:
unlocked_warning_title: Ваш аккаунт не закрыт для подписки
generic:
changes_saved_msg: Изменения успешно сохранены!
- powered_by: работает на %{link}
save_changes: Сохранить изменения
validation_errors:
few: Что-то здесь не так! Пожалуйста, прочитайте о %{count} ошибках ниже
@@ -531,8 +529,6 @@ ru:
expires_at: Истекает
uses: Исп.
title: Пригласить людей
- landing_strip_html: "%{name} - пользователь на %{link_to_root_path}. Вы можете подписаться на него/нее и общаться с ним/ней, если у Вас есть аккаунт на любом узле общей сети."
- landing_strip_signup_html: Если у Вас его нет, вы можете зарегистрироваться здесь .
lists:
errors:
limit: Вы достигли максимального числа списков
@@ -709,7 +705,6 @@ ru:
unlisted: Скрывать из лент
unlisted_long: Показывать всем, но не отображать в публичных лентах
stream_entries:
- click_to_show: Показать
pinned: Закреплённое сообщение
reblogged: продвинул(а)
sensitive_content: Чувствительный контент
diff --git a/config/locales/sk.yml b/config/locales/sk.yml
index 9e2a8fd0c..0c86f5aa0 100644
--- a/config/locales/sk.yml
+++ b/config/locales/sk.yml
@@ -46,7 +46,6 @@ sk:
people_who_follow: Ľudia sledujúci %{name}
posts: Príspevky
posts_with_replies: Príspevky s odpoveďami
- remote_follow: Sleduj vzdialeného
reserved_username: Prihlasovacie meno je rezervované
roles:
admin: Administrátor
@@ -526,7 +525,6 @@ sk:
unlocked_warning_title: Tvoj účet nieje zamknutý
generic:
changes_saved_msg: Zmeny boli úspešne uložené!
- powered_by: poháňané vďaka %{link}
save_changes: Uložiť zmeny
validation_errors:
few: Niečo ešte stále nieje v poriadku! Prosím skontroluj všetky %{count} chyby
@@ -564,8 +562,6 @@ sk:
expires_at: Vyprší
uses: Používa
title: Pozvi ľudí
- landing_strip_html: "%{name} je užívateľ na serveri %{link_to_root_path}. Ty ich môžeš následovať a môžeš s nimi interaktovať pokiaľ máš účet kdekoľvek v rámci fediversa."
- landing_strip_signup_html: Pokiaľ ešte nemáš, môžeš si tu vytvoriť účet .
lists:
errors:
limit: Dosiahli ste maximálny možný počet zoznamov
@@ -725,7 +721,6 @@ sk:
unlisted: Nezaradené
unlisted_long: Všetci môžu vidieť, ale nieje zaradené do verejnej osi
stream_entries:
- click_to_show: Klikni pre zobrazenie
pinned: Pripnutý toot
reblogged: vyzdvihnutý
sensitive_content: Senzitívny obsah
diff --git a/config/locales/sl.yml b/config/locales/sl.yml
index 6f581f838..16ace08d3 100644
--- a/config/locales/sl.yml
+++ b/config/locales/sl.yml
@@ -42,7 +42,6 @@ sl:
people_who_follow: Ljudje, ki sledijo %{name}
posts: Tuti
posts_with_replies: Tuti in odgovori
- remote_follow: Oddaljeno sledenje
reserved_username: Uporabniško ime je zasedeno
roles:
admin: Skrbnik
diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml
index 15c6b00ac..d7dd574c7 100644
--- a/config/locales/sr-Latn.yml
+++ b/config/locales/sr-Latn.yml
@@ -44,7 +44,6 @@ sr-Latn:
people_who_follow: Ljudi koji prate %{name}
posts: Tutovi
posts_with_replies: Tutovi i odgovori
- remote_follow: Udaljena praćenja
reserved_username: Korisničko ime je rezervisano
roles:
admin: Administrator
@@ -422,7 +421,6 @@ sr-Latn:
unlocked_warning_title: Vaš nalog nije zaključan
generic:
changes_saved_msg: Izmene uspešno sačuvane!
- powered_by: omogućio %{link}
save_changes: Snimi izmene
validation_errors:
few: Nešto nije baš kako treba! Pregledajte %{count} greške ispod
@@ -460,8 +458,6 @@ sr-Latn:
expires_at: Ističe
uses: Korišćenja
title: Pozovi ljude
- landing_strip_html: "%{name} je korisnik na %{link_to_root_path}. Možete ga zapratiti ili komunicirati sa njim ako imte nalog bilo gde u fediversu."
- landing_strip_signup_html: Ako nemate, možete se registrovati ovde .
lists:
errors:
limit: Dostigli ste limit broja listi
@@ -602,7 +598,6 @@ sr-Latn:
unlisted: Neizlistano
unlisted_long: Svako može da vidi, ali nije izlistano na javnim lajnama
stream_entries:
- click_to_show: Klikni da vidiš
pinned: Prikačeni tut
reblogged: podržano
sensitive_content: Osetljiv sadržaj
diff --git a/config/locales/sr.yml b/config/locales/sr.yml
index 040090932..63c42f62f 100644
--- a/config/locales/sr.yml
+++ b/config/locales/sr.yml
@@ -45,7 +45,6 @@ sr:
people_who_follow: Људи који прате %{name}
posts: Тутови
posts_with_replies: Тутови и одговори
- remote_follow: Удаљена праћења
reserved_username: Корисничко име је резервисано
roles:
admin: Администратор
@@ -423,7 +422,6 @@ sr:
unlocked_warning_title: Ваш налог није закључан
generic:
changes_saved_msg: Измене успешно сачуване!
- powered_by: омогућио %{link}
save_changes: Сними измене
validation_errors:
few: Нешто није баш како треба! Прегледајте %{count} грешке испод
@@ -461,8 +459,6 @@ sr:
expires_at: Истиче
uses: Коришћења
title: Позови људе
- landing_strip_html: "%{name} је корисник на %{link_to_root_path}. Можете га запратити или комуницирати са њим ако имте налог било где у федиверсу."
- landing_strip_signup_html: Ако немате, можете се регистровати овде .
lists:
errors:
limit: Достигли сте лимит броја листи
@@ -603,7 +599,6 @@ sr:
unlisted: Неизлистано
unlisted_long: Свако може да види, али није излистано на јавним лајнама
stream_entries:
- click_to_show: Кликни да видиш
pinned: Прикачени тут
reblogged: подржано
sensitive_content: Осетљив садржај
diff --git a/config/locales/sv.yml b/config/locales/sv.yml
index 76b26c24f..cf1ab582f 100644
--- a/config/locales/sv.yml
+++ b/config/locales/sv.yml
@@ -46,7 +46,6 @@ sv:
people_who_follow: Personer som följer %{name}
posts: Toots
posts_with_replies: Toots med svar
- remote_follow: Avlägsen följare
reserved_username: Användarnamnet är reserverat
roles:
admin: Admin
@@ -488,7 +487,6 @@ sv:
unlocked_warning_title: Ditt konto är inte låst
generic:
changes_saved_msg: Ändringar sparades framgångsrikt!
- powered_by: drivs av %{link}
save_changes: Spara ändringar
validation_errors:
one: Något är inte riktigt rätt ännu! Kontrollera felet nedan
@@ -524,8 +522,6 @@ sv:
expires_at: Utgår
uses: Användningar
title: Bjud in andra
- landing_strip_html: "%{name} är en användare på %{link_to_root_path}. Du kan följa dem eller interagera med dem om du har ett konto någonstans i federationen."
- landing_strip_signup_html: Om du inte gör det, så kan du registrera dig här .
lists:
errors:
limit: Du har nått det maximala antalet listor
@@ -693,7 +689,6 @@ sv:
unlisted: Olistade
unlisted_long: Alla kan se, men listas inte på offentliga tidslinjer
stream_entries:
- click_to_show: Klicka för att visa
pinned: Fäst toot
reblogged: boostad
sensitive_content: Känsligt innehåll
diff --git a/config/locales/th.yml b/config/locales/th.yml
index 6804dbd13..182bde388 100644
--- a/config/locales/th.yml
+++ b/config/locales/th.yml
@@ -22,7 +22,6 @@ th:
people_followed_by: ถูกติดตามโดย %{name}
people_who_follow: คนที่ติดตาม %{name}
posts: โพสต์
- remote_follow: Remote follow
unfollow: เลิกติดตาม
admin:
accounts:
@@ -216,7 +215,6 @@ th:
unlocked_warning_title: แอคเค๊าท์ของคุณไม่ได้ล๊อค
generic:
changes_saved_msg: บันทึกการแก้ไขแล้ว!
- powered_by: powered by %{link}
save_changes: บันทึกการเปลี่ยนแปลง
validation_errors:
one: Something isn't quite right yet! Please review the error below
@@ -229,8 +227,6 @@ th:
following: Following list
muting: Muting list
upload: Upload
- landing_strip_html: "%{name} is a user on %{link_to_root_path}. You can follow them or interact with them if you have an account anywhere in the fediverse."
- landing_strip_signup_html: If you don't, you can sign up here .
media_attachments:
validations:
images_and_video: Cannot attach a video to a status that already contains images
@@ -302,7 +298,6 @@ th:
unlisted: Unlisted
unlisted_long: Everyone can see, but not listed on public timelines
stream_entries:
- click_to_show: คลิกเพื่อแสดง
reblogged: boosted
sensitive_content: Sensitive content
time:
diff --git a/config/locales/tr.yml b/config/locales/tr.yml
index 8bafbface..3609261ed 100644
--- a/config/locales/tr.yml
+++ b/config/locales/tr.yml
@@ -22,7 +22,6 @@ tr:
people_followed_by: Kullanıcı %{name}'in takip ettikleri
people_who_follow: Kullanıcı %{name}'i takip edenler
posts: Gönderiler
- remote_follow: Uzaktan takip et
unfollow: Takibi bırak
admin:
accounts:
@@ -214,7 +213,6 @@ tr:
unlocked_warning_title: Hesabınız kilitlendi
generic:
changes_saved_msg: Değişiklikler başarıyla kaydedildi!
- powered_by: powered by %{link}
save_changes: Değişiklikleri kaydet
validation_errors:
one: Bir şeyler ters gitti! Lütfen aşağıdaki hatayı gözden geçiriniz
@@ -227,8 +225,6 @@ tr:
following: Takip edilenler listesi
muting: Susturulanlar listesi
upload: Yükle
- landing_strip_html: "%{name} , %{link_to_root_path} sunucusundaki bir kullanıcıdır. Onu takip edebilir, veya Mastodon ağındaki bir hesabınızı kullanarak etkileşime geçebilirsiniz."
- landing_strip_signup_html: Eğer hesabınız yoksa buradan kaydolabilirsiniz .
media_attachments:
validations:
images_and_video: Halihazırda görsel içeren bir gönderiye video ekleyemezsiniz.
@@ -300,7 +296,6 @@ tr:
unlisted: Listelenmemiş
unlisted_long: Herkes görebilir fakat herkese açık zaman tünellerinde listelenmez.
stream_entries:
- click_to_show: Görüntülemek için tıklayınız
reblogged: boost edildi
sensitive_content: Hassas içerik
time:
diff --git a/config/locales/uk.yml b/config/locales/uk.yml
index 6fe46b4d9..5e75cbf72 100644
--- a/config/locales/uk.yml
+++ b/config/locales/uk.yml
@@ -22,7 +22,6 @@ uk:
people_followed_by: Люди, на яких підписаний(-а) %{name}
people_who_follow: Підписники %{name}
posts: Пости
- remote_follow: Підписатися на іншій інстанції
unfollow: Відписатися
admin:
accounts:
@@ -199,7 +198,6 @@ uk:
unlocked_warning_title: Ваш аккаунт не закритий для підписки
generic:
changes_saved_msg: Зміни успішно збережені!
- powered_by: працює на %{link}
save_changes: Зберегти зміни
validation_errors:
one: Щось тут не так! Будь ласка, ознайомтеся з помилкою нижче
@@ -212,8 +210,6 @@ uk:
following: Підписки
muting: Список глушення
upload: Завантажити
- landing_strip_html: "%{name} - користувач на %{link_to_root_path}. Ви можете підписатися на нього/неї та спілкуватися з ним/нею, якщо у Вас є акаунт на будь-якій інстанції загальної мережі."
- landing_strip_signup_html: Якщо його у Вас немає, Ви можете зареєструватися тут .
media_attachments:
validations:
images_and_video: Не можна додати відео до статусу з зображеннями
@@ -289,7 +285,6 @@ uk:
unlisted: Приховувати зі стріок
unlisted_long: Показувати всім, але не відображати в публічних стрічках
stream_entries:
- click_to_show: Показати
reblogged: передмухнув(-ла)
sensitive_content: Непристойний контент
time:
diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml
index 1b741a7d6..6e64aff5a 100644
--- a/config/locales/zh-CN.yml
+++ b/config/locales/zh-CN.yml
@@ -46,7 +46,6 @@ zh-CN:
people_who_follow: 关注 %{name} 的人
posts: 嘟文
posts_with_replies: 嘟文和回复
- remote_follow: 跨站关注
reserved_username: 此用户名已被保留
roles:
admin: 管理员
@@ -484,7 +483,6 @@ zh-CN:
unlocked_warning_title: 你的帐户未受到保护
generic:
changes_saved_msg: 更改保存成功!
- powered_by: 基于 %{link} 构建
save_changes: 保存更改
validation_errors:
one: 出错啦!检查一下下面出错的地方吧
@@ -518,8 +516,6 @@ zh-CN:
expires_at: 失效时间
uses: 已使用次数
title: 邀请用户
- landing_strip_html: "%{name} 是一位来自 %{link_to_root_path} 的用户。如果你想关注他们或者与他们互动,你需要在任意一个 Mastodon 实例或与其兼容的网站上拥有一个帐户。"
- landing_strip_signup_html: 还没有这种帐户?你可以在本站注册一个 。
lists:
errors:
limit: 你所建立的列表数量已经达到上限
@@ -681,7 +677,6 @@ zh-CN:
unlisted: 不公开
unlisted_long: 所有人可见,但不会出现在公共时间轴上
stream_entries:
- click_to_show: 点击显示
pinned: 置顶嘟文
reblogged: 转嘟
sensitive_content: 敏感内容
diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml
index a5e997536..7ff0d7ae6 100644
--- a/config/locales/zh-HK.yml
+++ b/config/locales/zh-HK.yml
@@ -46,7 +46,6 @@ zh-HK:
people_who_follow: 關注 %{name} 的人
posts: 文章
posts_with_replies: 文章和回覆
- remote_follow: 跨站關注
reserved_username: 此用戶名已被保留
roles:
admin: 管理員
@@ -488,7 +487,6 @@ zh-HK:
unlocked_warning_title: 你的用戶目前為「公共」
generic:
changes_saved_msg: 已成功儲存修改。
- powered_by: 網站由 %{link} 開發
save_changes: 儲存修改
validation_errors:
one: 提交的資料有問題
@@ -524,8 +522,6 @@ zh-HK:
expires_at: 失效時間
uses: 已使用次數
title: 邀請用戶
- landing_strip_html: "%{name} 是一個在 %{link_to_root_path} 的用戶。只要你有任何 Mastodon 服務站、或者聯盟網站的用戶,便可以跨站關注此站用戶,或者與他們互動。"
- landing_strip_signup_html: 如果你沒有這類用戶,歡迎在此處登記 。
lists:
errors:
limit: 你所建立的列表數量已經達到上限
@@ -692,7 +688,6 @@ zh-HK:
unlisted: 公開,但不在公共時間軸顯示
unlisted_long: 所有人都能看到,但不在公共時間軸(本站時間軸、跨站時間軸)顯示
stream_entries:
- click_to_show: 點擊顯示
pinned: 置頂文章
reblogged: 轉推
sensitive_content: 敏感內容
diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml
index e2b376a3f..483cffe8e 100644
--- a/config/locales/zh-TW.yml
+++ b/config/locales/zh-TW.yml
@@ -46,7 +46,6 @@ zh-TW:
people_who_follow: 關注 %{name} 的人
posts: 嘟文
posts_with_replies: 嘟文與回覆
- remote_follow: 跨站關注
reserved_username: 此用戶名已被保留
roles:
admin: 管理員
@@ -488,7 +487,6 @@ zh-TW:
unlocked_warning_title: 你的帳戶是公開的
generic:
changes_saved_msg: 已成功儲存修改!
- powered_by: 網站由 %{link} 開發
save_changes: 儲存修改
validation_errors:
one: 送出的資料有問題
@@ -524,8 +522,6 @@ zh-TW:
expires_at: 失效時間
uses: 已使用次數
title: 邀請使用者
- landing_strip_html: "%{name} 是一個在 %{link_to_root_path} 的使用者。只要您有任何 Mastodon 站點、或者聯盟站點的帳戶,便可以跨站關注此站使用者,或者與他們互動。"
- landing_strip_signup_html: 如果您沒有這些帳戶,歡迎在這裡註冊 。
lists:
errors:
limit: 你所建立的列表數量已經達到上限
@@ -685,7 +681,6 @@ zh-TW:
unlisted: 公開,但不在公共時間軸顯示
unlisted_long: 所有人都能看到,但不會出現在公共時間軸上
stream_entries:
- click_to_show: 點選顯示
pinned: 置頂嘟文
reblogged: 轉嘟
sensitive_content: 敏感內容
diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb
index 04894d34d..093485111 100644
--- a/lib/mastodon/version.rb
+++ b/lib/mastodon/version.rb
@@ -32,8 +32,12 @@ module Mastodon
[to_a.join('.'), flags].join
end
+ def repository
+ 'tootsuite/mastodon'
+ end
+
def source_base_url
- 'https://github.com/tootsuite/mastodon'
+ "https://github.com/#{repository}"
end
# specify git tag or commit hash here
diff --git a/package.json b/package.json
index b0cdf562d..b4d81d603 100644
--- a/package.json
+++ b/package.json
@@ -105,6 +105,7 @@
"redux": "^3.7.1",
"redux-immutable": "^4.0.0",
"redux-thunk": "^2.2.0",
+ "rellax": "^1.6.2",
"requestidlecallback": "^0.3.0",
"reselect": "^3.0.1",
"rimraf": "^2.6.1",
diff --git a/spec/views/stream_entries/show.html.haml_spec.rb b/spec/views/stream_entries/show.html.haml_spec.rb
index e0681b125..34207aa6b 100644
--- a/spec/views/stream_entries/show.html.haml_spec.rb
+++ b/spec/views/stream_entries/show.html.haml_spec.rb
@@ -12,6 +12,7 @@ describe 'stream_entries/show.html.haml', without_verify_partial_doubles: true d
allow(view).to receive(:full_asset_url).and_return('//asset.host/image.svg')
allow(view).to receive(:local_time)
allow(view).to receive(:local_time_ago)
+ assign(:instance_presenter, InstancePresenter.new)
end
it 'has valid author h-card and basic data for a detailed_status' do
diff --git a/yarn.lock b/yarn.lock
index 2c257ff0a..e558ea664 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -7188,6 +7188,10 @@ regjsparser@^0.1.4:
dependencies:
jsesc "~0.5.0"
+rellax@^1.6.2:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/rellax/-/rellax-1.6.2.tgz#b22c8715f56324fa8b396465d3dca9953b711f30"
+
remove-trailing-separator@^1.0.1:
version "1.1.0"
resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
From 2ccef52a4f5be49e5c3b2256a3c5d4f193a3fe32 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?M=C3=A9lanie=20Chauvel=20=28ariasuni=29?=
Date: Sat, 28 Jul 2018 20:09:58 +0200
Subject: [PATCH 045/196] Improve account bar css (#8087)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* Remove superfluous span tags
* Make account bar items (except dropdown) flexible to work well with custom CSS
* Fix CSS lint warning (0px → 0)
---
.../mastodon/features/account/components/action_bar.js | 6 +++---
app/javascript/styles/mastodon/components.scss | 5 ++---
2 files changed, 5 insertions(+), 6 deletions(-)
diff --git a/app/javascript/mastodon/features/account/components/action_bar.js b/app/javascript/mastodon/features/account/components/action_bar.js
index 69726a416..e3f2d0f55 100644
--- a/app/javascript/mastodon/features/account/components/action_bar.js
+++ b/app/javascript/mastodon/features/account/components/action_bar.js
@@ -142,17 +142,17 @@ export default class ActionBar extends React.PureComponent {
-
+
{shortNumberFormat(account.get('statuses_count'))}
-
+
{shortNumberFormat(account.get('following_count'))}
-
+
{shortNumberFormat(account.get('followers_count'))}
diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss
index 814739dfc..708a6868a 100644
--- a/app/javascript/styles/mastodon/components.scss
+++ b/app/javascript/styles/mastodon/components.scss
@@ -1236,7 +1236,6 @@ a .account__avatar {
}
.account__action-bar-dropdown {
- flex: 0 1 calc(50% - 140px);
padding: 10px;
.icon-button {
@@ -1268,9 +1267,9 @@ a .account__avatar {
.account__action-bar__tab {
text-decoration: none;
overflow: hidden;
- flex: 0 1 80px;
+ flex: 0 1 100%;
border-right: 1px solid lighten($ui-base-color, 8%);
- padding: 10px 5px;
+ padding: 10px 0;
& > span {
display: block;
From cc94b1d95a7baba4435010ca4e5d7f3425140275 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Sat, 28 Jul 2018 23:14:55 +0200
Subject: [PATCH 046/196] Prevent ActivityPub movedTo recursion (#8092)
Fix #8051
---
app/services/activitypub/fetch_remote_account_service.rb | 4 ++--
app/services/activitypub/process_account_service.rb | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/app/services/activitypub/fetch_remote_account_service.rb b/app/services/activitypub/fetch_remote_account_service.rb
index 867e70876..41fec9170 100644
--- a/app/services/activitypub/fetch_remote_account_service.rb
+++ b/app/services/activitypub/fetch_remote_account_service.rb
@@ -7,14 +7,14 @@ class ActivityPub::FetchRemoteAccountService < BaseService
# Should be called when uri has already been checked for locality
# Does a WebFinger roundtrip on each call
- def call(uri, id: true, prefetched_body: nil)
+ def call(uri, id: true, prefetched_body: nil, break_on_redirect: false)
@json = if prefetched_body.nil?
fetch_resource(uri, id)
else
body_to_json(prefetched_body)
end
- return unless supported_context? && expected_type?
+ return if !supported_context? || !expected_type? || (break_on_redirect && @json['movedTo'].present?)
@uri = @json['id']
@username = @json['preferredUsername']
diff --git a/app/services/activitypub/process_account_service.rb b/app/services/activitypub/process_account_service.rb
index 453253db4..7f95678b0 100644
--- a/app/services/activitypub/process_account_service.rb
+++ b/app/services/activitypub/process_account_service.rb
@@ -175,7 +175,7 @@ class ActivityPub::ProcessAccountService < BaseService
def moved_account
account = ActivityPub::TagManager.instance.uri_to_resource(@json['movedTo'], Account)
- account ||= ActivityPub::FetchRemoteAccountService.new.call(@json['movedTo'], id: true)
+ account ||= ActivityPub::FetchRemoteAccountService.new.call(@json['movedTo'], id: true, break_on_redirect: true)
account
end
From 79a1f667c5388ea025b2c160c029191d14e4cfc5 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Sat, 28 Jul 2018 23:15:17 +0200
Subject: [PATCH 047/196] Order invites by recent first (#8091)
Fix #8085
---
app/controllers/invites_controller.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/controllers/invites_controller.rb b/app/controllers/invites_controller.rb
index 5c30313f4..3aaa2776f 100644
--- a/app/controllers/invites_controller.rb
+++ b/app/controllers/invites_controller.rb
@@ -38,7 +38,7 @@ class InvitesController < ApplicationController
private
def invites
- Invite.where(user: current_user)
+ Invite.where(user: current_user).order(id: :desc)
end
def resource_params
From 1d773b3a4691b153ff0c658db53007293905d86b Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Sat, 28 Jul 2018 23:52:20 +0200
Subject: [PATCH 048/196] Add missing formatting to the text in hero widget
(#8089)
---
app/javascript/styles/mastodon/widgets.scss | 40 ++++++++++++++++++++-
1 file changed, 39 insertions(+), 1 deletion(-)
diff --git a/app/javascript/styles/mastodon/widgets.scss b/app/javascript/styles/mastodon/widgets.scss
index 9324533bd..d37a6f458 100644
--- a/app/javascript/styles/mastodon/widgets.scss
+++ b/app/javascript/styles/mastodon/widgets.scss
@@ -24,8 +24,46 @@
background: $ui-base-color;
padding: 20px;
border-radius: 0 0 4px 4px;
- font-size: 14px;
+ font-size: 15px;
color: $darker-text-color;
+ line-height: 20px;
+ word-wrap: break-word;
+ font-weight: 400;
+
+ .emojione {
+ width: 20px;
+ height: 20px;
+ margin: -3px 0 0;
+ }
+
+ p {
+ margin-bottom: 20px;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+ }
+
+ em {
+ display: inline;
+ margin: 0;
+ padding: 0;
+ font-weight: 700;
+ background: transparent;
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+ color: lighten($darker-text-color, 10%);
+ }
+
+ a {
+ color: $secondary-text-color;
+ text-decoration: none;
+
+ &:hover {
+ text-decoration: underline;
+ }
+ }
}
@media screen and (max-width: $no-gap-breakpoint) {
From 0a3cc246acca9645d5d41a25d73f510ff67af6f6 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Sun, 29 Jul 2018 02:57:13 +0200
Subject: [PATCH 049/196] Fix size/dimension values in avatar/header hint
localizations (#8088)
---
app/views/settings/profiles/show.html.haml | 4 +-
config/locales/activerecord.ast.yml | 3 +-
config/locales/devise.ast.yml | 3 +-
config/locales/devise.tr.yml | 51 ----------------------
config/locales/doorkeeper.ast.yml | 3 +-
config/locales/simple_form.ar.yml | 4 +-
config/locales/simple_form.ast.yml | 3 +-
config/locales/simple_form.bg.yml | 4 +-
config/locales/simple_form.ca.yml | 4 +-
config/locales/simple_form.co.yml | 4 +-
config/locales/simple_form.cs.yml | 2 +-
config/locales/simple_form.da.yml | 4 +-
config/locales/simple_form.de.yml | 4 +-
config/locales/simple_form.el.yml | 4 +-
config/locales/simple_form.en.yml | 4 +-
config/locales/simple_form.eo.yml | 4 +-
config/locales/simple_form.es.yml | 4 +-
config/locales/simple_form.eu.yml | 4 +-
config/locales/simple_form.fr.yml | 4 +-
config/locales/simple_form.gl.yml | 4 +-
config/locales/simple_form.he.yml | 4 +-
config/locales/simple_form.hr.yml | 4 +-
config/locales/simple_form.hu.yml | 4 +-
config/locales/simple_form.id.yml | 4 +-
config/locales/simple_form.io.yml | 4 +-
config/locales/simple_form.it.yml | 4 +-
config/locales/simple_form.ja.yml | 4 +-
config/locales/simple_form.ko.yml | 4 +-
config/locales/simple_form.nl.yml | 4 +-
config/locales/simple_form.no.yml | 4 +-
config/locales/simple_form.oc.yml | 4 +-
config/locales/simple_form.pl.yml | 4 +-
config/locales/simple_form.pt-BR.yml | 4 +-
config/locales/simple_form.pt.yml | 4 +-
config/locales/simple_form.ru.yml | 4 +-
config/locales/simple_form.sk.yml | 4 +-
config/locales/simple_form.sl.yml | 4 +-
config/locales/simple_form.sr-Latn.yml | 4 +-
config/locales/simple_form.sr.yml | 4 +-
config/locales/simple_form.sv.yml | 4 +-
config/locales/simple_form.th.yml | 4 +-
config/locales/simple_form.tr.yml | 4 +-
config/locales/simple_form.uk.yml | 4 +-
config/locales/simple_form.zh-CN.yml | 4 +-
config/locales/simple_form.zh-HK.yml | 4 +-
config/locales/simple_form.zh-TW.yml | 4 +-
46 files changed, 89 insertions(+), 136 deletions(-)
delete mode 100644 config/locales/devise.tr.yml
diff --git a/app/views/settings/profiles/show.html.haml b/app/views/settings/profiles/show.html.haml
index 3940eb855..9518bcb61 100644
--- a/app/views/settings/profiles/show.html.haml
+++ b/app/views/settings/profiles/show.html.haml
@@ -11,9 +11,9 @@
= render 'application/card', account: @account
.fields-group
- = f.input :avatar, wrapper: :with_label, input_html: { accept: AccountAvatar::IMAGE_MIME_TYPES.join(',') }, hint: t('simple_form.hints.defaults.avatar')
+ = f.input :avatar, wrapper: :with_label, input_html: { accept: AccountAvatar::IMAGE_MIME_TYPES.join(',') }, hint: t('simple_form.hints.defaults.avatar', dimensions: '400x400', size: number_to_human_size(AccountAvatar::LIMIT))
- = f.input :header, wrapper: :with_label, input_html: { accept: AccountHeader::IMAGE_MIME_TYPES.join(',') }, hint: t('simple_form.hints.defaults.header')
+ = f.input :header, wrapper: :with_label, input_html: { accept: AccountHeader::IMAGE_MIME_TYPES.join(',') }, hint: t('simple_form.hints.defaults.header', dimensions: '1500x500', size: number_to_human_size(AccountHeader::LIMIT))
.fields-group
= f.input :locked, as: :boolean, wrapper: :with_label, hint: t('simple_form.hints.defaults.locked')
diff --git a/config/locales/activerecord.ast.yml b/config/locales/activerecord.ast.yml
index 0967ef424..0b77eecf2 100644
--- a/config/locales/activerecord.ast.yml
+++ b/config/locales/activerecord.ast.yml
@@ -1 +1,2 @@
-{}
+---
+ast:
diff --git a/config/locales/devise.ast.yml b/config/locales/devise.ast.yml
index 0967ef424..0b77eecf2 100644
--- a/config/locales/devise.ast.yml
+++ b/config/locales/devise.ast.yml
@@ -1 +1,2 @@
-{}
+---
+ast:
diff --git a/config/locales/devise.tr.yml b/config/locales/devise.tr.yml
deleted file mode 100644
index fb819978f..000000000
--- a/config/locales/devise.tr.yml
+++ /dev/null
@@ -1,51 +0,0 @@
----
-tr:
- simple_form:
- hints:
- defaults:
- avatar: En fazla 2MB olacak şekilde PNG, GIF veya JPG formatında yükleyiniz. 400x400px büyüklüğüne indirgenecektir
- display_name: "%{count} karakter kaldı"
- header: En fazla 2MB olacak şekilde PNG, GIF veya JPG formatında yükleyiniz. 700x335px büyüklüğüne indirgenecektir.
- locked: Takipçilerinizi manuel olarak kabul etmenizi ve gönderilerinizi varsayılan olarak sadece takipçilerinizin göreceği şekilde paylaşmanızı sağlar.
- note: "%{count} karakter kaldı"
- imports:
- data: Diğer Mastodon sunucusundan dışarı aktardığınız CSV dosyası
- sessions:
- otp: Telefonunuzdaki two-factor kodunuzu giriniz veya kurtarma kodlarınızdan birini giriniz.
- labels:
- defaults:
- avatar: Profil resmi
- confirm_new_password: Yeni parolanız (tekrar)
- confirm_password: Parolanız (tekrar)
- current_password: Mevcut parolanız
- data: Dosya
- display_name: Görünen adınız
- email: E-posta adresiniz
- header: Kapak resmi
- locale: Dil
- locked: Hesabımı kilitle
- new_password: Yeni parolanız
- note: Kişisel bilgiler
- otp_attempt: İki-faktörlü kod
- password: Parolanız
- setting_auto_play_gif: GIF'leri otomatik oynatt
- setting_boost_modal: Boost etmeden önce onay diyaloğu göster
- setting_default_privacy: Gönderi gizliliği
- severity: Zorluk
- type: Dosya türü
- username: Kullanıcı adınız
- interactions:
- must_be_follower: Takipçim olmayan kişilerden gelen bildirimleri engelle
- must_be_following: Takip etmediğim kişilerden gelen bildirimleri engelle
- notification_emails:
- digest: Özet e-postaları gönder
- favourite: Biri durumumu favorilerine eklediginde bana e-posta gönder
- follow: Biri beni takip ettiğinde bana e-posta gönder
- follow_request: Biri bana takip isteği gönderdiğinde, bana e-posta gönder
- mention: Biri benden bahsettiğinde, bana e-posta gönder
- reblog: Biri durumumu paylaştığında, bana e-posta gönder
- 'no': Hayır
- required:
- mark: "*"
- text: gerekli
- 'yes': Evet
diff --git a/config/locales/doorkeeper.ast.yml b/config/locales/doorkeeper.ast.yml
index 0967ef424..0b77eecf2 100644
--- a/config/locales/doorkeeper.ast.yml
+++ b/config/locales/doorkeeper.ast.yml
@@ -1 +1,2 @@
-{}
+---
+ast:
diff --git a/config/locales/simple_form.ar.yml b/config/locales/simple_form.ar.yml
index 8f3e685a6..0474e1ef2 100644
--- a/config/locales/simple_form.ar.yml
+++ b/config/locales/simple_form.ar.yml
@@ -4,7 +4,7 @@ ar:
hints:
defaults:
autofollow: سوف يتابعك تلقائيًا الأشخاص الذين يقومون بالتسجيل من خلال الدعوة
- avatar: ملف PNG أو GIF أو JPG. حجمه على أقصى تصدير 2MB. سيتم تصغيره إلى 400x400px
+ avatar: ملف PNG أو GIF أو JPG. حجمه على أقصى تصدير %{size}. سيتم تصغيره إلى %{dimensions}px
bot: يُعلِم أنّ هذا الحساب لا يمثل شخصًا
context: واحد أو أكثر من السياقات التي يجب أن ينطبق عليها عامل التصفية
digest: تُرسَل إليك بعد مُضيّ مدة مِن خمول نشاطك و فقط إذا ما تلقيت رسائل شخصية مباشِرة أثناء فترة غيابك مِن الشبكة
@@ -12,7 +12,7 @@ ar:
one: 1 حرف باق
other: %{count} حرف باق
fields: يُمكنك عرض 4 عناصر على شكل جدول في ملفك الشخصي
- header: ملف PNG أو GIF أو JPG. حجمه على أقصى تصدير 2MB. سيتم تصغيره إلى 700x335px
+ header: ملف PNG أو GIF أو JPG. حجمه على أقصى تصدير %{size}. سيتم تصغيره إلى %{dimensions}px
irreversible: التبويقات التي تم تصفيتها ستختفي لا محالة حتى و إن تمت إزالة عامِل التصفية لاحقًا
locale: لغة واجهة المستخدم و الرسائل الإلكترونية و الإشعارات
locked: يتطلب منك الموافقة يدويا على طلبات المتابعة
diff --git a/config/locales/simple_form.ast.yml b/config/locales/simple_form.ast.yml
index 0967ef424..0b77eecf2 100644
--- a/config/locales/simple_form.ast.yml
+++ b/config/locales/simple_form.ast.yml
@@ -1 +1,2 @@
-{}
+---
+ast:
diff --git a/config/locales/simple_form.bg.yml b/config/locales/simple_form.bg.yml
index 720a8391d..938dacc95 100644
--- a/config/locales/simple_form.bg.yml
+++ b/config/locales/simple_form.bg.yml
@@ -3,9 +3,9 @@ bg:
simple_form:
hints:
defaults:
- avatar: PNG, GIF или JPG. До 2MB. Ще бъде смалена до 400x400 пиксела
+ avatar: PNG, GIF или JPG. До %{size}. Ще бъде смалена до %{dimensions} пиксела
display_name: До 30 символа
- header: PNG, GIF или JPG. До 2MB. Ще бъде смалена до 700x335 пиксела
+ header: PNG, GIF или JPG. До %{size}. Ще бъде смалена до %{dimensions} пиксела
locked: Изисква ръчно одобрение на последователите. По подразбиране, публикациите са достъпни само до последователи.
note: До 160 символа
imports:
diff --git a/config/locales/simple_form.ca.yml b/config/locales/simple_form.ca.yml
index 482ddd7be..d45b84971 100644
--- a/config/locales/simple_form.ca.yml
+++ b/config/locales/simple_form.ca.yml
@@ -4,7 +4,7 @@ ca:
hints:
defaults:
autofollow: Les persones que es registrin a través de la invitació et seguiran automàticament
- avatar: PNG, GIF o JPG. Màxim 2MB. S'escalarà a 400x400px
+ avatar: PNG, GIF o JPG. Màxim %{size}. S'escalarà a %{dimensions}px
bot: Aquest compte realitza principalment accions automatitzades i pot no estar controlat per cap persona
context: Un o diversos contextos on s'ha d'aplicar el filtre
digest: Només s'envia després d'un llarg període d'inactivitat amb un resum de les mencions que has rebut en la teva absència
@@ -12,7 +12,7 @@ ca:
one: 1 càracter restant
other: %{count} càracters restans
fields: Pots tenir fins a 4 elements que es mostren com a taula al teu perfil
- header: PNG, GIF o JPG. Màxim 2MB. S'escalarà a 700x335px
+ header: PNG, GIF o JPG. Màxim %{size}. S'escalarà a %{dimensions}px
irreversible: Els nodes filtrats desapareixeran de manera irreversible, fins i tot si el filtre es retira més tard
locale: El llenguatge de l’interfície d’usuari, els correus i les notificacions push
locked: Requereix que aprovis manualment els seguidors
diff --git a/config/locales/simple_form.co.yml b/config/locales/simple_form.co.yml
index ac8b89a7b..85a98a3f6 100644
--- a/config/locales/simple_form.co.yml
+++ b/config/locales/simple_form.co.yml
@@ -3,14 +3,14 @@ co:
simple_form:
hints:
defaults:
- avatar: Furmatu PNG, GIF o JPG. 2Mo o menu. Sarà ridottu à 400x400px
+ avatar: Furmatu PNG, GIF o JPG. 2Mo o menu. Sarà ridottu à %{dimensions}px
bot: Stu contu hè autumatizatu è ùn hè forse micca survegliatu
digest: Solu mandatu dopu à una longa perioda d’inattività, è solu s’elli ci sò novi missaghji diretti
display_name:
one: Ci ferma 1 caratteru
other: Ci fermanu %{count} caratteri
fields: Pudete avè fin’à 4 elementi mustrati cum’un tavulone nant’à u vostru prufile
- header: Furmatu PNG, GIF o JPG. 2Mo o menu. Sarà ridottu à 700x335px
+ header: Furmatu PNG, GIF o JPG. 2Mo o menu. Sarà ridottu à %{dimensions}px
locked: Duvarete appruvà e dumande d’abbunamentu
note:
one: Ci ferma 1 caratteru
diff --git a/config/locales/simple_form.cs.yml b/config/locales/simple_form.cs.yml
index e8e7628f3..f909d402d 100644
--- a/config/locales/simple_form.cs.yml
+++ b/config/locales/simple_form.cs.yml
@@ -3,7 +3,7 @@ cs:
simple_form:
hints:
defaults:
- avatar: PNG, GIF či JPG. Maximálně 2 MB. Bude zmenšena na 400x400px
+ avatar: PNG, GIF či JPG. Maximálně %{size}. Bude zmenšena na %{dimensions}px
bot: Tento účet provádí hlavně automatizované akce a nemusí být spravován.
display_name:
one: Zbývá 1 znak
diff --git a/config/locales/simple_form.da.yml b/config/locales/simple_form.da.yml
index 716ee7e1c..fc3258993 100644
--- a/config/locales/simple_form.da.yml
+++ b/config/locales/simple_form.da.yml
@@ -4,7 +4,7 @@ da:
hints:
defaults:
autofollow: Folk der har oprettet sig gennem invitationen vil automatisk følge dig
- avatar: PNG, GIF eller JPG. Højest 2MB. Vil blive skaleret ned til 400x400px
+ avatar: PNG, GIF eller JPG. Højest %{size}. Vil blive skaleret ned til %{dimensions}px
bot: Denne konto udfører hovedsageligt automatiserede handlinger og bliver muligvis ikke overvåget
context: En eller flere sammenhænge hvor filteret skal være gældende
digest: Sendes kun efter en lang periode med inaktivitet og kun hvis du har modtaget nogle personlige beskeder mens du er væk
@@ -12,7 +12,7 @@ da:
one: 1 tegn tilbage
other: %{count} tegn tilbage
fields: Du kan have op til 4 ting vist som en tabel på din profil
- header: PNG, GIF eller JPG. Højest 2MB. Vil blive skaleret ned til 700x335px
+ header: PNG, GIF eller JPG. Højest %{size}. Vil blive skaleret ned til %{dimensions}px
inbox_url: Kopiere linket fra forsiden af den relay som du ønsker at bruge
irreversible: Filtrerede toots vil forsvinde fulstændigt, selv hvis filteret senere skulle blive fjernet
locale: Sproget på interfacet, emails og push beskeder
diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml
index 0c0679605..e9e795bf4 100644
--- a/config/locales/simple_form.de.yml
+++ b/config/locales/simple_form.de.yml
@@ -4,7 +4,7 @@ de:
hints:
defaults:
autofollow: Leute die sich über deine Einladung registrieren werden dir automatisch folgen
- avatar: PNG, GIF oder JPG. Maximal 2 MB. Wird auf 400×400 px herunterskaliert
+ avatar: PNG, GIF oder JPG. Maximal %{size}. Wird auf 400×400 px herunterskaliert
bot: Dieses Konto führt lediglich automatisierte Aktionen durch und wird möglicherweise nicht überwacht
context: Ein oder mehrere Aspekte, wo der Filter greifen soll
digest: Wenn du lange Zeit inaktiv bist, wird dir eine Zusammenfassung von Erwähnungen in deiner Abwesenheit zugeschickt
@@ -12,7 +12,7 @@ de:
one: 1 Zeichen verbleibt
other: %{count} Zeichen verbleiben
fields: Du kannst bis zu 4 Elemente als Tabelle dargestellt auf deinem Profil anzeigen lassen
- header: PNG, GIF oder JPG. Maximal 2 MB. Wird auf 700×335 px herunterskaliert
+ header: PNG, GIF oder JPG. Maximal %{size}. Wird auf 700×335 px herunterskaliert
irreversible: Gefilterte Beiträge werden unwiderruflich gefiltert, selbst wenn der Filter später entfernt wurde
locale: Die Sprache der Oberfläche, E-Mails und Push-Benachrichtigungen
locked: Wer dir folgen möchte, muss um deine Erlaubnis bitten
diff --git a/config/locales/simple_form.el.yml b/config/locales/simple_form.el.yml
index 58bae8dc1..75d97dcd0 100644
--- a/config/locales/simple_form.el.yml
+++ b/config/locales/simple_form.el.yml
@@ -4,7 +4,7 @@ el:
hints:
defaults:
autofollow: Όσοι εγγραφούν μέσω της πρόσκλησης θα σε ακολουθούν αυτόματα
- avatar: PNG, GIF ή JPG. Έως 2MB. Θα περιοριστεί σε διάσταση 400x400px
+ avatar: PNG, GIF ή JPG. Έως %{size}. Θα περιοριστεί σε διάσταση %{dimensions}px
bot: Ο λογαριασμός αυτός εκτελεί κυρίως αυτοματοποιημένες ενέργειες και ίσως να μην παρακολουθείται
context: Ένα ή περισσότερα πλαίσια στα οποία μπορεί να εφαρμόζεται αυτό το φίλτρο
digest: Αποστέλλεται μόνο μετά από μακρά περίοδο αδράνειας και μόνο αν έχεις λάβει προσωπικά μηνύματα κατά την απουσία σου
@@ -12,7 +12,7 @@ el:
one: απομένει 1 χαρακτήρας
other: απομένουν %{count} χαρακτήρες
fields: Μπορείς να έχεις έως 4 σημειώσεις σε μορφή πίνακα στο προφίλ σου
- header: PNG, GIF ή JPG. Έως 2MB. Θα περιοριστεί σε διάσταση 700x335px
+ header: PNG, GIF ή JPG. Έως %{size}. Θα περιοριστεί σε διάσταση %{dimensions}px
inbox_url: Αντέγραψε το URL της αρχικής σελίδας του ανταποκριτή (relay) που θέλεις να χρησιμοποιήσεις
irreversible: Τα φιλτραρισμένα τουτ θα εξαφανιστούν αμετάκλητα, ακόμα και αν το φίλτρο αργότερα αφαιρεθεί
locale: Η γλώσσα του περιβάλλοντος χρήσης, των email και των ειδοποιήσεων ώθησης
diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml
index 9ff548f40..59ebe0a7e 100644
--- a/config/locales/simple_form.en.yml
+++ b/config/locales/simple_form.en.yml
@@ -4,7 +4,7 @@ en:
hints:
defaults:
autofollow: People who sign up through the invite will automatically follow you
- avatar: PNG, GIF or JPG. At most 2MB. Will be downscaled to 400x400px
+ avatar: PNG, GIF or JPG. At most %{size}. Will be downscaled to %{dimensions}px
bot: This account mainly performs automated actions and might not be monitored
context: One or multiple contexts where the filter should apply
digest: Only sent after a long period of inactivity and only if you have received any personal messages in your absence
@@ -12,7 +12,7 @@ en:
one: 1 character left
other: %{count} characters left
fields: You can have up to 4 items displayed as a table on your profile
- header: PNG, GIF or JPG. At most 2MB. Will be downscaled to 700x335px
+ header: PNG, GIF or JPG. At most %{size}. Will be downscaled to %{dimensions}px
inbox_url: Copy the URL from the frontpage of the relay you want to use
irreversible: Filtered toots will disappear irreversibly, even if filter is later removed
locale: The language of the user interface, e-mails and push notifications
diff --git a/config/locales/simple_form.eo.yml b/config/locales/simple_form.eo.yml
index 7d73f2553..9b6e7cd9e 100644
--- a/config/locales/simple_form.eo.yml
+++ b/config/locales/simple_form.eo.yml
@@ -4,7 +4,7 @@ eo:
hints:
defaults:
autofollow: Homoj, kiuj registriĝos per la invito aŭtomate sekvos vin
- avatar: Formato PNG, GIF aŭ JPG. Ĝis 2MB. Estos malgrandigita al 400x400px
+ avatar: Formato PNG, GIF aŭ JPG. Ĝis %{size}. Estos malgrandigita al %{dimensions}px
bot: Tiu konto ĉefe faras aŭtomatajn agojn, kaj povas esti ne kontrolata
context: Unu ol pluraj kuntekstoj kie la filtrilo devus agi
digest: Sendita nur post longa tempo de neaktiveco, kaj nur se vi ricevis personan mesaĝon en via foresto
@@ -12,7 +12,7 @@ eo:
one: 1 signo restas
other: %{count} signoj restas
fields: Vi povas havi ĝis 4 tabelajn elementojn en via profilo
- header: Formato PNG, GIF aŭ JPG. Ĝis 2MB. Estos malgrandigita al 700x335px
+ header: Formato PNG, GIF aŭ JPG. Ĝis %{size}. Estos malgrandigita al %{dimensions}px
inbox_url: Kopiu la URL de la ĉefpaĝo de la ripetilo, kiun vi volas uzi
irreversible: Elfiltritaj mesaĝoj malaperos por ĉiam, eĉ se la filtrilo estas poste forigita
locale: La lingvo de la uzant-interfaco, retmesaĝoj kaj puŝ-sciigoj
diff --git a/config/locales/simple_form.es.yml b/config/locales/simple_form.es.yml
index 000a33edc..483f79058 100644
--- a/config/locales/simple_form.es.yml
+++ b/config/locales/simple_form.es.yml
@@ -3,12 +3,12 @@ es:
simple_form:
hints:
defaults:
- avatar: PNG, GIF o JPG. Máximo 2MB. Será escalado a 400x400px
+ avatar: PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px
digest: Solo enviado tras un largo periodo de inactividad y solo si has recibido mensajes personales durante tu ausencia
display_name:
one: 1 caracter restante
other: %{count} caracteres restantes
- header: PNG, GIF o JPG. Máximo 2MB. Será escalado a 700x335px
+ header: PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px
locked: Requiere que manualmente apruebes seguidores y las publicaciones serán mostradas solamente a tus seguidores
note:
one: 1 carácter restante
diff --git a/config/locales/simple_form.eu.yml b/config/locales/simple_form.eu.yml
index 2d60030ec..481e95e39 100644
--- a/config/locales/simple_form.eu.yml
+++ b/config/locales/simple_form.eu.yml
@@ -4,14 +4,14 @@ eu:
hints:
defaults:
autofollow: Gonbidapena erabiliz izena ematen dutenek automatikoki jarraituko zaituzte
- avatar: PNG, GIF edo JPG. Gehienez 2MB. 400x400px neurrira eskalatuko da
+ avatar: PNG, GIF edo JPG. Gehienez %{size}. %{dimensions}px neurrira eskalatuko da
bot: Kontu honek nagusiki automatizatutako ekintzak burutzen ditu eta agian ez du inork monitorizatzen
digest: Soilik jarduerarik gabeko epe luze bat eta gero, eta soilik ez zeudela mezu pertsonalen bat jaso baduzu
display_name:
one: Karaktere 1 geratzen da
other: %{count} karaktere geratzen dira
fields: 4 elementu bistaratu ditzakezu taula batean zure profilean
- header: PNG, GIF edo JPG. Gehienez 2MB. 700x335px eskalara txikituko da
+ header: PNG, GIF edo JPG. Gehienez %{size}. %{dimensions}px eskalara txikituko da
locale: Erabiltzaile-interfazea, e-mail mezuen eta jakinarazpenen hizkuntza
locked: Jarraitzaileak eskuz onartu behar dituzu
note:
diff --git a/config/locales/simple_form.fr.yml b/config/locales/simple_form.fr.yml
index e510bd155..1a5bb3494 100644
--- a/config/locales/simple_form.fr.yml
+++ b/config/locales/simple_form.fr.yml
@@ -4,7 +4,7 @@ fr:
hints:
defaults:
autofollow: Les personnes qui s'inscrivent grâce à l'invitation vous suivront automatiquement
- avatar: Au format PNG, GIF ou JPG. 2 Mo maximum. Sera réduit à 400x400px
+ avatar: Au format PNG, GIF ou JPG. 2 Mo maximum. Sera réduit à %{dimensions}px
bot: Ce compte exécute principalement des actions automatisées et pourrait ne pas être surveillé
context: Un ou plusieurs contextes où le filtre devrait s'appliquer
digest: Uniquement envoyé après une longue période d’inactivité et uniquement si vous avez reçu des messages personnels pendant votre absence
@@ -12,7 +12,7 @@ fr:
one: 1 caractère restant
other: %{count} caractères restants
fields: Vous pouvez avoir jusqu'à 4 éléments affichés en tant que tableau sur votre profil
- header: Au format PNG, GIF ou JPG. 2 Mo maximum. Sera réduit à 700x335px
+ header: Au format PNG, GIF ou JPG. 2 Mo maximum. Sera réduit à %{dimensions}px
irreversible: Les pouets filtrés disparaîtront irrémédiablement, même si le filtre est supprimé plus tard
locale: La langue de l'interface-utilisateur, des courriels, et des notifications
locked: Vous devrez approuver chaque abonné⋅e et vos statuts ne s’afficheront qu’à vos abonné⋅es
diff --git a/config/locales/simple_form.gl.yml b/config/locales/simple_form.gl.yml
index 84990a66f..b84a95826 100644
--- a/config/locales/simple_form.gl.yml
+++ b/config/locales/simple_form.gl.yml
@@ -4,7 +4,7 @@ gl:
hints:
defaults:
autofollow: As persoas que se conectaron a través de un convite seguirana automáticamente a vostede
- avatar: PNG, GIF ou JPG. Máximo 2MB. Será reducida a 400x400px
+ avatar: PNG, GIF ou JPG. Máximo %{size}. Será reducida a %{dimensions}px
bot: Esta conta realiza principalmente accións automatizadas e podería non estar monitorizada
context: Un ou varios contextos onde se debería aplicar o filtro
digest: Enviar só tras un longo período de inactividade e só si recibeu algunha mensaxe personal na súa ausencia
@@ -12,7 +12,7 @@ gl:
one: 1 caracter restante
other: %{count} caracteres restantes
fields: Pode ter ate 4 elementos no seu perfil mostrados como unha táboa
- header: PNG, GIF ou JPG. Máximo 2MB. Será reducida a 700x335px
+ header: PNG, GIF ou JPG. Máximo %{size}. Será reducida a %{dimensions}px
inbox_url: Copiar o URL desde a páxina de inicio do repetidor que quere utilizar
irreversible: Os toots filtrados desaparecerán de xeito irreversible, incluso si despois se elimina o filtro
locale: O idioma da interface de usuaria, correos e notificacións
diff --git a/config/locales/simple_form.he.yml b/config/locales/simple_form.he.yml
index 96cdccd2b..aa5c7e827 100644
--- a/config/locales/simple_form.he.yml
+++ b/config/locales/simple_form.he.yml
@@ -3,12 +3,12 @@ he:
simple_form:
hints:
defaults:
- avatar: PNG, GIF או JPG. מקסימום 2MB. גודל התמונה יוקטן ל-400x400px
+ avatar: PNG, GIF או JPG. מקסימום %{size}. גודל התמונה יוקטן ל-%{dimensions}px
digest: נשלח לאחר תקופה ארוכה של אי-פעילות עם סיכום איזכורים שקיבלת בהעדרך
display_name:
one: נותרה אותאחת
other: נותרו%{count} אותיות
- header: PNG, GIF או JPG. מקסימום 2MB. גודל התמונה יוקטן 700x335px
+ header: PNG, GIF או JPG. מקסימום %{size}. גודל התמונה יוקטן %{dimensions}px
locked: מחייב אישור עוקבים באופן ידני. פרטיות ההודעות תהיה עוקבים-בלבד אלא אם יצוין אחרת
note:
one: נותרה אותאחת
diff --git a/config/locales/simple_form.hr.yml b/config/locales/simple_form.hr.yml
index 2506c8d92..2b3ebf91e 100644
--- a/config/locales/simple_form.hr.yml
+++ b/config/locales/simple_form.hr.yml
@@ -3,9 +3,9 @@ hr:
simple_form:
hints:
defaults:
- avatar: PNG, GIF ili JPG. Najviše 2MB. Bit će smanjen na 400x400px
+ avatar: PNG, GIF ili JPG. Najviše %{size}. Bit će smanjen na %{dimensions}px
display_name: Najviše 30 znakova
- header: PNG, GIF ili JPG. Najviše 2MB. Bit će smanjen na 700x335px
+ header: PNG, GIF ili JPG. Najviše %{size}. Bit će smanjen na %{dimensions}px
locked: traži te da ručno odobriš sljedbenike i postavlja privatnost postova na dostupnu samo sljedbenicima
note: Najviše 160 znakova
imports:
diff --git a/config/locales/simple_form.hu.yml b/config/locales/simple_form.hu.yml
index 2b36dc85b..ef915dec5 100644
--- a/config/locales/simple_form.hu.yml
+++ b/config/locales/simple_form.hu.yml
@@ -3,12 +3,12 @@ hu:
simple_form:
hints:
defaults:
- avatar: PNG, GIF vagy JPG. Maximum 2MB. Át lesz méretezve 400x400 pixelre
+ avatar: PNG, GIF vagy JPG. Maximum %{size}. Át lesz méretezve %{dimensions} pixelre
digest: Csak hosszú távollét esetén küldve és csak ha személyes üzenetet kaptál távollétedben
display_name:
one: 1 karakter maradt
other: %{count} karakter maradt
- header: PNG, GIF vagy JPG. Maximum 2MB. Át lesz méretezve 700x335 pixelre
+ header: PNG, GIF vagy JPG. Maximum %{size}. Át lesz méretezve %{dimensions} pixelre
locked: Egyenként engedélyezned kell a követőidet
note:
one: 1 karakter maradt
diff --git a/config/locales/simple_form.id.yml b/config/locales/simple_form.id.yml
index 6b2868e02..fcd9d862c 100644
--- a/config/locales/simple_form.id.yml
+++ b/config/locales/simple_form.id.yml
@@ -3,9 +3,9 @@ id:
simple_form:
hints:
defaults:
- avatar: PNG, GIF atau JPG. Maksimal 2MB. Ukuran dikecilkan menjadi 400x400px
+ avatar: PNG, GIF atau JPG. Maksimal %{size}. Ukuran dikecilkan menjadi %{dimensions}px
display_name: Maksimal 30 karakter
- header: PNG, GIF atau JPG. Maksimal 2MB. Ukuran dikecilkan menjadi 700x335px
+ header: PNG, GIF atau JPG. Maksimal %{size}. Ukuran dikecilkan menjadi %{dimensions}px
locked: Anda harus menerima permintaan pengikut secara manual dan setting privasi postingan akan diubah khusus untuk pengikut
note: Maksimum 160 karakter
imports:
diff --git a/config/locales/simple_form.io.yml b/config/locales/simple_form.io.yml
index 60b578a12..cf87aa6d9 100644
--- a/config/locales/simple_form.io.yml
+++ b/config/locales/simple_form.io.yml
@@ -3,9 +3,9 @@ io:
simple_form:
hints:
defaults:
- avatar: En la formato PNG, GIF o JPG. Til 2Mo. Esos mikrigita a 400x400px
+ avatar: En la formato PNG, GIF o JPG. Til 2Mo. Esos mikrigita a %{dimensions}px
display_name: 30 signi maxime
- header: En la formato PNG, GIF o JPG. Til 2Mo. Esos mikrigita a 700x335px
+ header: En la formato PNG, GIF o JPG. Til 2Mo. Esos mikrigita a %{dimensions}px
locked: Tu devos aprobar omna demandi di sequado, e tua mesaji esos senchanje nur por tua sequanti.
note: 160 signi maxime
imports:
diff --git a/config/locales/simple_form.it.yml b/config/locales/simple_form.it.yml
index 16de1efd2..810ac813e 100644
--- a/config/locales/simple_form.it.yml
+++ b/config/locales/simple_form.it.yml
@@ -4,7 +4,7 @@ it:
hints:
defaults:
autofollow: Le persone che si iscrivono attraverso l'invito ti seguiranno automaticamente
- avatar: PNG, GIF o JPG. Al massimo 2MB. Verranno scalate a 400x400px
+ avatar: PNG, GIF o JPG. Al massimo %{size}. Verranno scalate a %{dimensions}px
bot: Questo account esegue principalmente operazioni automatiche e potrebbe non essere tenuto sotto controllo da una persona
context: Uno o più contesti nei quali il filtro dovrebbe essere applicato
digest: Inviata solo dopo un lungo periodo di inattività e solo se hai ricevuto qualche messaggio personale in tua assenza
@@ -12,7 +12,7 @@ it:
one: 1 carattere rimanente
other: %{count} caratteri rimanenti
fields: Puoi avere fino a 4 voci visualizzate come una tabella sul tuo profilo
- header: PNG, GIF o JPG. Al massimo 2MB. Verranno scalate a 700x335px
+ header: PNG, GIF o JPG. Al massimo %{size}. Verranno scalate a %{dimensions}px
inbox_url: Copia la URL dalla pagina iniziale del ripetitore che vuoi usare
irreversible: I toot filtrati scompariranno in modo irreversibile, anche se il filtro viene eliminato
locale: La lingua dell'interfaccia utente, di email e notifiche push
diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml
index 2bce145cb..6aa7af979 100644
--- a/config/locales/simple_form.ja.yml
+++ b/config/locales/simple_form.ja.yml
@@ -4,13 +4,13 @@ ja:
hints:
defaults:
autofollow: 招待から登録した人が自動的にあなたをフォローするようになります
- avatar: 2MBまでのPNG、GIF、JPGが利用可能です。400x400pxまで縮小されます
+ avatar: "%{size}までのPNG、GIF、JPGが利用可能です。%{dimensions}pxまで縮小されます"
bot: このアカウントは主に自動で動作し、人が見ていない可能性があります
context: フィルターを適用する対象 (複数選択可)
digest: 長期間使用していない場合と不在時に返信を受けた場合のみ送信されます
display_name: あと%{count} 文字入力できます。
fields: プロフィールに表として4つまでの項目を表示することができます
- header: 2MBまでのPNG、GIF、JPGが利用可能です。 700x335pxまで縮小されます
+ header: "%{size}までのPNG、GIF、JPGが利用可能です。 %{dimensions}pxまで縮小されます"
inbox_url: 使用したいリレーサーバーのトップページからURLをコピーします
irreversible: フィルターが後で削除されても、除外されたトゥートは元に戻せなくなります
locale: ユーザーインターフェース、メールやプッシュ通知の言語
diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml
index 392c24e82..2982a84bf 100644
--- a/config/locales/simple_form.ko.yml
+++ b/config/locales/simple_form.ko.yml
@@ -4,7 +4,7 @@ ko:
hints:
defaults:
autofollow: 이 초대를 통해 가입하는 사람은 당신을 자동으로 팔로우 하게 됩니다
- avatar: PNG, GIF 혹은 JPG. 최대 2MB. 400x400px로 다운스케일 될 것임
+ avatar: PNG, GIF 혹은 JPG. 최대 %{size}. %{dimensions}px로 다운스케일 될 것임
bot: 사람들에게 계정이 사람이 아님을 알립니다
context: 필터를 적용 할 한 개 이상의 컨텍스트
digest: 오랫동안 활동하지 않았을 때 받은 멘션들에 대한 요약 받기
@@ -12,7 +12,7 @@ ko:
one: 1 글자 남음
other: %{count} 글자 남음
fields: 당신의 프로파일에 최대 4개까지 표 형식으로 나타낼 수 있습니다
- header: PNG, GIF 혹은 JPG. 최대 2MB. 700x335px로 다운스케일 됨
+ header: PNG, GIF 혹은 JPG. 최대 %{size}. %{dimensions}px로 다운스케일 됨
irreversible: 필터링 된 툿은 나중에 필터가 사라지더라도 돌아오지 않게 됩니다
locale: 유저 인터페이스, 이메일, 푸시 알림 언어
locked: 수동으로 팔로워를 승인하고, 기본 툿 프라이버시 설정을 팔로워 전용으로 변경
diff --git a/config/locales/simple_form.nl.yml b/config/locales/simple_form.nl.yml
index 47520a55b..ddbc58978 100644
--- a/config/locales/simple_form.nl.yml
+++ b/config/locales/simple_form.nl.yml
@@ -4,7 +4,7 @@ nl:
hints:
defaults:
autofollow: Mensen die zich via de uitnodiging hebben geregistreerd, volgen jou automatisch
- avatar: PNG, GIF of JPG. Maximaal 2MB. Wordt teruggeschaald naar 400x400px
+ avatar: PNG, GIF of JPG. Maximaal %{size}. Wordt teruggeschaald naar %{dimensions}px
bot: Dit is een geautomatiseerd account en wordt mogelijk niet gemonitord
context: Een of meerdere locaties waar de filter actief moet zijn
digest: Wordt alleen na een lange periode van inactiviteit verzonden en alleen wanneer je tijdens jouw afwezigheid persoonlijke berichten hebt ontvangen
@@ -12,7 +12,7 @@ nl:
one: 1 teken over
other: %{count} tekens over
fields: Je kan maximaal 4 items als een tabel op je profiel weergeven
- header: PNG, GIF of JPG. Maximaal 2MB. Wordt teruggeschaald naar 700x335px
+ header: PNG, GIF of JPG. Maximaal %{size}. Wordt teruggeschaald naar %{dimensions}px
inbox_url: Kopieer de URL van de voorpagina van de relayserver die je wil gebruiken
irreversible: Gefilterde toots verdwijnen onomkeerbaar, zelfs als de filter later wordt verwijderd
locale: De taal van de gebruikersomgeving, e-mails en pushmeldingen
diff --git a/config/locales/simple_form.no.yml b/config/locales/simple_form.no.yml
index aba8feeb6..98c6b82fe 100644
--- a/config/locales/simple_form.no.yml
+++ b/config/locales/simple_form.no.yml
@@ -3,12 +3,12 @@
simple_form:
hints:
defaults:
- avatar: PNG, GIF eller JPG. Maksimalt 2 MB. Vil bli nedskalert til 400x400px
+ avatar: PNG, GIF eller JPG. Maksimalt %{size}. Vil bli nedskalert til %{dimensions}px
digest: Kun sendt etter en lang periode med inaktivitet og bare dersom du har mottatt noen personlige meldinger mens du var borte
display_name:
one: 1 tegn igjen
other: %{count} tegn igjen
- header: PNG, GIF eller JPG. Maksimalt 2MB. Vil bli nedskalert til 700x335px
+ header: PNG, GIF eller JPG. Maksimalt %{size}. Vil bli nedskalert til %{dimensions}px
locked: Krever at du manuelt godkjenner følgere
note:
one: 1 tegn igjen
diff --git a/config/locales/simple_form.oc.yml b/config/locales/simple_form.oc.yml
index 293ad964a..4842e5c4e 100644
--- a/config/locales/simple_form.oc.yml
+++ b/config/locales/simple_form.oc.yml
@@ -4,7 +4,7 @@ oc:
hints:
defaults:
autofollow: Lo monde que se marcan gràcia a l’invitacion vos segràn automaticament
- avatar: PNG, GIF o JPG. Maximum 2 Mo. Serà retalhat en 400x400px
+ avatar: PNG, GIF o JPG. Maximum 2 Mo. Serà retalhat en %{dimensions}px
bot: Avisar lo monde qu’aqueste compte es pas d’una persona
context: Un o mai de contèxtes ont lo filtre deuriá s’aplicar
digest: Solament enviat aprèp un long moment d’inactivitat e solament s’avètz recebut de messatges personals pendent vòstra abséncia
@@ -12,7 +12,7 @@ oc:
one: Demòra encara 1 caractèr
other: Demòran encara %{count} caractèrs
fields: Podètz far veire cap a 4 elements sus vòstre perfil
- header: PNG, GIF o JPG. Maximum 2 Mo. Serà retalhada en 700x335px
+ header: PNG, GIF o JPG. Maximum 2 Mo. Serà retalhada en %{dimensions}px
inbox_url: Copiatz l’URL de la pagina màger del relai que volètz utilizar
irreversible: Los tuts filtrats desapareisseràn irreversiblament, encara que lo filtre siá suprimit mai tard
locale: La lenga de l’interfàcia d’utilizacion, los messatges e las notificacions
diff --git a/config/locales/simple_form.pl.yml b/config/locales/simple_form.pl.yml
index 55c5e1c6d..96dd5191f 100644
--- a/config/locales/simple_form.pl.yml
+++ b/config/locales/simple_form.pl.yml
@@ -4,7 +4,7 @@ pl:
hints:
defaults:
autofollow: Osoby, które zarejestrują się z Twojego zaproszenia automatycznie zaczną Cię śledzić
- avatar: PNG, GIF lub JPG. Maksymalnie 2MB. Zostanie zmniejszony do 400x400px
+ avatar: PNG, GIF lub JPG. Maksymalnie %{size}. Zostanie zmniejszony do %{dimensions}px
bot: To konto wykonuje głównie zautomatyzowane działania i może nie być monitorowane
context: Jedno lub wiele miejsc, w których filtr zostanie zastosowany
digest: Wysyłane tylko po długiej nieaktywności, jeżeli w tym czasie otrzymaleś jakąś wiadomość bezpośrednią
@@ -14,7 +14,7 @@ pl:
one: Pozostał 1 znak
other: Pozostało %{count} znaków
fields: Możesz ustawić maksymalnie 4 niestandardowe pola wyświetlane jako tabela na Twoim profilu
- header: PNG, GIF lub JPG. Maksymalnie 2MB. Zostanie zmniejszony do 700x335px
+ header: PNG, GIF lub JPG. Maksymalnie %{size}. Zostanie zmniejszony do %{dimensions}px
irreversible: Filtrowane wpisy znikną bezpowrotnie, nawet gdy filtr zostanie usunięty
locale: Język interfejsu, wiadomości e-mail i powiadomieniach push
locked: Musisz akceptować prośby o śledzenie
diff --git a/config/locales/simple_form.pt-BR.yml b/config/locales/simple_form.pt-BR.yml
index f6738b73f..013b26066 100644
--- a/config/locales/simple_form.pt-BR.yml
+++ b/config/locales/simple_form.pt-BR.yml
@@ -4,7 +4,7 @@ pt-BR:
hints:
defaults:
autofollow: Pessoas que se cadastrarem através de seu convite te seguirão automaticamente
- avatar: PNG, GIF or JPG. Arquivos de até 2MB. Eles serão diminuídos para 400x400px
+ avatar: PNG, GIF or JPG. Arquivos de até %{size}. Eles serão diminuídos para %{dimensions}px
bot: Essa conta executa principalmente ações automatizadas e pode não ser monitorada
context: Um ou mais contextos onde o filtro deve ser aplicado
digest: Enviado após um longo período de inatividade com um resumo das menções que você recebeu em sua ausência
@@ -12,7 +12,7 @@ pt-BR:
one: 1 caracter restante
other: %{count} caracteres restantes
fields: Você pode ter até 4 itens exibidos em forma de tabela no seu perfil
- header: PNG, GIF or JPG. Arquivos de até 2MB. Eles serão diminuídos para 700x335px
+ header: PNG, GIF or JPG. Arquivos de até %{size}. Eles serão diminuídos para %{dimensions}px
inbox_url: Copie a URL da página inicial do repetidor que você quer usar
irreversible: Os toots filtrados vão desaparecer irreversivelmente, mesmo se o filtro for removido depois
locale: O idioma das telas de usuário, e-mails e notificações push
diff --git a/config/locales/simple_form.pt.yml b/config/locales/simple_form.pt.yml
index 5b79bd29f..8c515c1de 100644
--- a/config/locales/simple_form.pt.yml
+++ b/config/locales/simple_form.pt.yml
@@ -3,12 +3,12 @@ pt:
simple_form:
hints:
defaults:
- avatar: PNG, GIF or JPG. Arquivos até 2MB. Vão ser reduzidos para 400x400px
+ avatar: PNG, GIF or JPG. Arquivos até %{size}. Vão ser reduzidos para %{dimensions}px
digest: Enviado após um longo período de inatividade e apenas se foste mencionado na tua ausência
display_name:
one: 1 caracter restante
other: %{count} caracteres restantes
- header: PNG, GIF or JPG. Arquivos até 2MB. Vão ser reduzidos para 700x335px
+ header: PNG, GIF or JPG. Arquivos até %{size}. Vão ser reduzidos para %{dimensions}px
locked: Requer aprovação manual de seguidores
note:
one: 1 caracter restante
diff --git a/config/locales/simple_form.ru.yml b/config/locales/simple_form.ru.yml
index 6bb95b13f..9174237bc 100644
--- a/config/locales/simple_form.ru.yml
+++ b/config/locales/simple_form.ru.yml
@@ -3,7 +3,7 @@ ru:
simple_form:
hints:
defaults:
- avatar: PNG, GIF или JPG. Максимально 2MB. Будет уменьшено до 400x400px
+ avatar: PNG, GIF или JPG. Максимально %{size}. Будет уменьшено до %{dimensions}px
bot: Этот аккаунт обычно выполяет автоматизированные действия и может не просматриваться владельцем
digest: Отсылается лишь после длительной неактивности, если Вы в это время получали личные сообщения
display_name:
@@ -12,7 +12,7 @@ ru:
one: Остался 1 символ
other: Осталось %{count} символов
fields: В профиле можно отобразить до 4 пунктов как таблицу
- header: PNG, GIF или JPG. Максимально 2MB. Будет уменьшено до 700x335px
+ header: PNG, GIF или JPG. Максимально %{size}. Будет уменьшено до %{dimensions}px
locked: Потребует от Вас ручного подтверждения подписчиков, изменит приватность постов по умолчанию на "только для подписчиков"
note:
few: Осталось %{count} символа
diff --git a/config/locales/simple_form.sk.yml b/config/locales/simple_form.sk.yml
index 8064dbdae..c9ec7fb20 100644
--- a/config/locales/simple_form.sk.yml
+++ b/config/locales/simple_form.sk.yml
@@ -4,7 +4,7 @@ sk:
hints:
defaults:
autofollow: Ľudia ktorí sa zaregistrujú prostredníctvom pozvánky, ťa budú inheď následovať
- avatar: PNG, GIF alebo JPG. Maximálne 2MB. Bude zmenšený na 400x400px
+ avatar: PNG, GIF alebo JPG. Maximálne %{size}. Bude zmenšený na %{dimensions}px
bot: Tento účet vykonáva hlavne automatizované akcie, a je pravdepodobne nespravovaný
context: Jedno, alebo viac kritérií, v ktorých má byť filtrovanie uplatnené
digest: Odoslané iba v prípade dlhodobej neprítomnosti, a len ak si obdŕžal/a nejaké osobné správy kým si bol/a preč
@@ -13,7 +13,7 @@ sk:
one: Ostáva ti 1 znak
other: Ostáva ti %{count} znakov
fields: Môžeš mať 4 položky na svojom profile zobrazené vo forme tabuľky
- header: PNG, GIF alebo JPG. Maximálne 2MB. Bude zmenšený na 700x335px
+ header: PNG, GIF alebo JPG. Maximálne %{size}. Bude zmenšený na %{dimensions}px
inbox_url: Skopíruj adresu z hlavnej stránky mostíka, ktorý chceš používať
irreversible: Vytriedené príspevky zmiznú nenávratne, aj keď triedenie neskôr zrušíš
locale: Jazyk užívateľského rozhrania, emailových a nástenkových oboznámení
diff --git a/config/locales/simple_form.sl.yml b/config/locales/simple_form.sl.yml
index 31d1e1170..0f86841d3 100644
--- a/config/locales/simple_form.sl.yml
+++ b/config/locales/simple_form.sl.yml
@@ -3,13 +3,13 @@ sl:
simple_form:
hints:
defaults:
- avatar: PNG, GIF ali JPG. Največ 2MB. Zmanjšana bo na 400x400px
+ avatar: PNG, GIF ali JPG. Največ %{size}. Zmanjšana bo na %{dimensions}px
bot: Opozarja ljudi, da račun ne predstavlja osebe
digest: Pošlje se le po dolgem obdobju nedejavnosti in samo, če ste prejeli osebna sporočila v vaši odsotnosti
display_name:
one: 1 znak ostane
other: %{count} znakov ostane
fields: Na svojem profilu lahko imate do 4 predmete prikazane kot tabelo.
- header: PNG, GIF ali JPG. Največ 2MB. Zmanjšana bo na 700x335px
+ header: PNG, GIF ali JPG. Največ %{size}. Zmanjšana bo na %{dimensions}px
imports:
data: Izvožena CSV datoteka iz drugega Mastodon vozlišča
diff --git a/config/locales/simple_form.sr-Latn.yml b/config/locales/simple_form.sr-Latn.yml
index 608630c0c..259ac0046 100644
--- a/config/locales/simple_form.sr-Latn.yml
+++ b/config/locales/simple_form.sr-Latn.yml
@@ -3,14 +3,14 @@ sr-Latn:
simple_form:
hints:
defaults:
- avatar: PNG, GIF ili JPG. Najviše 2MB. Biće smanjena na 400x400px
+ avatar: PNG, GIF ili JPG. Najviše %{size}. Biće smanjena na %{dimensions}px
digest: Poslato posle dužeg perioda neaktivnosti sa pregledom svih bitnih stvari koje ste dobili dok ste bili odsutni
display_name:
few: %{count} karaktera preostala
many: %{count} karaktera preostalo
one: 1 karakter preostao
other: %{count} karaktera preostalo
- header: PNG, GIF ili JPG. Najviše 2MB. Biće smanjena na 700x335px
+ header: PNG, GIF ili JPG. Najviše %{size}. Biće smanjena na %{dimensions}px
locked: Zahteva da pojedinačno odobrite pratioce
note:
few: %{count} karaktera preostal
diff --git a/config/locales/simple_form.sr.yml b/config/locales/simple_form.sr.yml
index ab9ef0f49..d84052c66 100644
--- a/config/locales/simple_form.sr.yml
+++ b/config/locales/simple_form.sr.yml
@@ -3,14 +3,14 @@ sr:
simple_form:
hints:
defaults:
- avatar: PNG, GIF или JPG. Највише 2MB. Биће смањена на 400x400px
+ avatar: PNG, GIF или JPG. Највише %{size}. Биће смањена на %{dimensions}px
digest: Послато после дужег периода неактивности са прегледом свих битних ствари које сте добили док сте били одсутни
display_name:
few: %{count} карактера преостала
many: %{count} карактера преостало
one: 1 карактер преостао
other: %{count} карактера преостало
- header: PNG, GIF или JPG. Највише 2MB. Биће смањена на 700x335px
+ header: PNG, GIF или JPG. Највише %{size}. Биће смањена на %{dimensions}px
locked: Захтева да појединачно одобрите пратиоце
note:
few: %{count} карактера преостал
diff --git a/config/locales/simple_form.sv.yml b/config/locales/simple_form.sv.yml
index e761f3d99..7a10aa1e2 100644
--- a/config/locales/simple_form.sv.yml
+++ b/config/locales/simple_form.sv.yml
@@ -4,14 +4,14 @@ sv:
hints:
defaults:
autofollow: Användarkonton som skapas genom din inbjudan kommer automatiskt följa dig
- avatar: Högst 2 MB. Kommer att skalas ner till 400x400px
+ avatar: Högst %{size}. Kommer att skalas ner till %{dimensions}px
bot: Detta konto utför huvudsakligen automatiserade åtgärder och kanske inte övervakas
digest: Skickas endast efter en lång period av inaktivitet och endast om du har fått några personliga meddelanden i din frånvaro
display_name:
one: 1 tecken kvar
other: %{count} tecken kvar
fields: Du kan ha upp till 4 objekt visade som en tabell på din profil
- header: NG, GIF eller JPG. Högst 2 MB. Kommer nedskalas till 700x335px
+ header: NG, GIF eller JPG. Högst %{size}. Kommer nedskalas till %{dimensions}px
locale: Användargränssnittets språk, e-post och push aviseringar
locked: Kräver att du manuellt godkänner följare
note:
diff --git a/config/locales/simple_form.th.yml b/config/locales/simple_form.th.yml
index 575b6a9f4..29491de0b 100644
--- a/config/locales/simple_form.th.yml
+++ b/config/locales/simple_form.th.yml
@@ -3,11 +3,11 @@ th:
simple_form:
hints:
defaults:
- avatar: PNG, GIF or JPG. At most 2MB. Will be downscaled to 400x400px
+ avatar: PNG, GIF or JPG. At most %{size}. Will be downscaled to %{dimensions}px
display_name:
one: 1 character left
other: %{count} characters left
- header: PNG, GIF or JPG. At most 2MB. Will be downscaled to 700x335px
+ header: PNG, GIF or JPG. At most %{size}. Will be downscaled to %{dimensions}px
locked: Requires you to manually approve followers and defaults post privacy to followers-only
note:
one: 1 character left
diff --git a/config/locales/simple_form.tr.yml b/config/locales/simple_form.tr.yml
index c827aac46..bd5c65d83 100644
--- a/config/locales/simple_form.tr.yml
+++ b/config/locales/simple_form.tr.yml
@@ -3,9 +3,9 @@ tr:
simple_form:
hints:
defaults:
- avatar: En fazla 2MB olacak şekilde PNG, GIF veya JPG formatında yükleyiniz. 400x400px büyüklüğüne indirgenecektir
+ avatar: En fazla %{size} olacak şekilde PNG, GIF veya JPG formatında yükleyiniz. %{dimensions}px büyüklüğüne indirgenecektir
display_name: %{count} karakter kaldı
- header: En fazla 2MB olacak şekilde PNG, GIF veya JPG formatında yükleyiniz. 700x335px büyüklüğüne indirgenecektir.
+ header: En fazla %{size} olacak şekilde PNG, GIF veya JPG formatında yükleyiniz. %{dimensions}px büyüklüğüne indirgenecektir.
locked: Takipçilerinizi manuel olarak kabul etmenizi ve gönderilerinizi varsayılan olarak sadece takipçilerinizin göreceği şekilde paylaşmanızı sağlar.
note: %{count} karakter kaldı
imports:
diff --git a/config/locales/simple_form.uk.yml b/config/locales/simple_form.uk.yml
index 7bc3ee4b8..b4d2d6a80 100644
--- a/config/locales/simple_form.uk.yml
+++ b/config/locales/simple_form.uk.yml
@@ -3,9 +3,9 @@ uk:
simple_form:
hints:
defaults:
- avatar: PNG, GIF, або JPG. Максимум - 2МБ. Буде зменшено до 400x400px
+ avatar: PNG, GIF, або JPG. Максимум - 2МБ. Буде зменшено до %{dimensions}px
display_name: 'Залишилося символів: %{count} '
- header: PNG, GIF, або JPG. Максимум - 2МБ. Буде зменшено до 700x335px
+ header: PNG, GIF, або JPG. Максимум - 2МБ. Буде зменшено до %{dimensions}px
locked: Буде вимагати від Вас самостійного підтверждення підписників, змінить приватність постів за замовчуванням на "тільки для підписників"
note: 'Осталось символов: %{count} '
imports:
diff --git a/config/locales/simple_form.zh-CN.yml b/config/locales/simple_form.zh-CN.yml
index ce990d692..b84f7107d 100644
--- a/config/locales/simple_form.zh-CN.yml
+++ b/config/locales/simple_form.zh-CN.yml
@@ -4,12 +4,12 @@ zh-CN:
hints:
defaults:
autofollow: 通过邀请链接注册的用户将会自动关注你
- avatar: 文件大小限制 2MB,只支持 PNG、GIF 或 JPG 格式。图片分辨率将会压缩至 400×400px
+ avatar: 文件大小限制 %{size},只支持 PNG、GIF 或 JPG 格式。图片分辨率将会压缩至 400×400px
bot: 来自这个帐户的绝大多数操作都是自动进行的,并且可能无人监控
digest: 仅在你长时间未登录,且收到了私信时发送
display_name: 还能输入 %{count} 个字符
fields: 这将会在个人资料页上以表格的形式展示,最多 4 个项目
- header: 文件大小限制 2MB,只支持 PNG、GIF 或 JPG 格式。图片分辨率将会压缩至 700×335px
+ header: 文件大小限制 %{size},只支持 PNG、GIF 或 JPG 格式。图片分辨率将会压缩至 700×335px
locale: 用户界面、电子邮件和推送通知中使用的语言
locked: 你需要手动审核所有关注请求
note: 还能输入 %{count} 个字符
diff --git a/config/locales/simple_form.zh-HK.yml b/config/locales/simple_form.zh-HK.yml
index 0575c09f8..abe6b7e06 100644
--- a/config/locales/simple_form.zh-HK.yml
+++ b/config/locales/simple_form.zh-HK.yml
@@ -4,14 +4,14 @@ zh-HK:
hints:
defaults:
autofollow: 通過邀請網址註冊的用戶將會自動關注你
- avatar: 支援 PNG, GIF 或 JPG 圖片,檔案最大為 2MB,會縮裁成 400x400px
+ avatar: 支援 PNG, GIF 或 JPG 圖片,檔案最大為 %{size},會縮裁成 %{dimensions}px
bot: 提醒用戶本帳號是機械人
digest: 僅在你長時間未登錄,且收到了私信時發送
display_name:
one: 尚餘 1 個字
other: 尚餘 %{count} 個字
fields: 個人資料頁可顯示多至 4 個項目
- header: 支援 PNG, GIF 或 JPG 圖片,檔案最大為 2MB,會縮裁成 700x335px
+ header: 支援 PNG, GIF 或 JPG 圖片,檔案最大為 %{size},會縮裁成 %{dimensions}px
locale: 使用者介面、電郵和通知的語言
locked: 你必須人手核准每個用戶對你的關注請求,而你的文章私隱會被預設為「只有關注你的人能看」
note:
diff --git a/config/locales/simple_form.zh-TW.yml b/config/locales/simple_form.zh-TW.yml
index 6b1dbae91..3763fc747 100644
--- a/config/locales/simple_form.zh-TW.yml
+++ b/config/locales/simple_form.zh-TW.yml
@@ -4,14 +4,14 @@ zh-TW:
hints:
defaults:
autofollow: 通過邀請網址註冊的使用者將會自動關注你
- avatar: 支援 PNG, GIF 或 JPG 圖片,檔案最大為 2MB,會縮裁成 400x400px
+ avatar: 支援 PNG, GIF 或 JPG 圖片,檔案最大為 %{size},會縮裁成 %{dimensions}px
bot: 這個帳號由程式進行自動式操作
digest: 僅在你長時間未登入,並且收到了私訊時發送
display_name:
one: 尚餘 1 個字
other: 尚餘 %{count} 個字
fields: 個人資訊頁至多可顯示 4 個項目
- header: 支援 PNG, GIF 或 JPG 圖片,檔案最大為 2MB,會縮裁成 700x335px
+ header: 支援 PNG, GIF 或 JPG 圖片,檔案最大為 %{size},會縮裁成 %{dimensions}px
locale: 使用者介面、 E-mail 與通知的語言
locked: 你必須手動核准每個使用者對你的關注請求,而你的貼文隱私將會被設定為「只有關注你的人能看」
note:
From 06c83527f5e4b7c8460f7d4a62322d2b8e805056 Mon Sep 17 00:00:00 2001
From: Yamagishi Kazutoshi
Date: Sun, 29 Jul 2018 23:52:06 +0900
Subject: [PATCH 050/196] Do not scroll up when modal is opened (#8095)
---
.../mastodon/components/status_list.js | 6 +-
.../features/account_gallery/index.js | 5 +-
.../features/account_timeline/index.js | 4 +-
.../mastodon/features/blocks/index.js | 9 +--
.../features/community_timeline/index.js | 4 +-
.../features/direct_timeline/index.js | 4 +-
.../mastodon/features/domain_blocks/index.js | 13 ++--
.../features/favourited_statuses/index.js | 4 +-
.../mastodon/features/favourites/index.js | 7 ++-
.../features/follow_requests/index.js | 9 +--
.../mastodon/features/followers/index.js | 7 ++-
.../mastodon/features/following/index.js | 7 ++-
.../features/hashtag_timeline/index.js | 4 +-
.../mastodon/features/home_timeline/index.js | 4 +-
.../mastodon/features/list_timeline/index.js | 4 +-
.../mastodon/features/mutes/index.js | 9 +--
.../features/pinned_statuses/index.js | 4 +-
.../features/public_timeline/index.js | 4 +-
.../mastodon/features/reblogs/index.js | 7 ++-
.../mastodon/features/status/index.js | 6 +-
.../features/ui/components/media_modal.js | 2 +-
app/javascript/mastodon/features/ui/index.js | 61 ++++++++++---------
22 files changed, 108 insertions(+), 76 deletions(-)
diff --git a/app/javascript/mastodon/components/status_list.js b/app/javascript/mastodon/components/status_list.js
index 68c9eef54..37f21fb44 100644
--- a/app/javascript/mastodon/components/status_list.js
+++ b/app/javascript/mastodon/components/status_list.js
@@ -1,12 +1,12 @@
import { debounce } from 'lodash';
import React from 'react';
+import { FormattedMessage } from 'react-intl';
import ImmutablePropTypes from 'react-immutable-proptypes';
import PropTypes from 'prop-types';
import StatusContainer from '../containers/status_container';
import ImmutablePureComponent from 'react-immutable-pure-component';
import LoadGap from './load_gap';
import ScrollableList from './scrollable_list';
-import { FormattedMessage } from 'react-intl';
export default class StatusList extends ImmutablePureComponent {
@@ -71,7 +71,7 @@ export default class StatusList extends ImmutablePureComponent {
}
render () {
- const { statusIds, featuredStatusIds, onLoadMore, timelineId, ...other } = this.props;
+ const { statusIds, featuredStatusIds, shouldUpdateScroll, onLoadMore, timelineId, ...other } = this.props;
const { isLoading, isPartial } = other;
if (isPartial) {
@@ -122,7 +122,7 @@ export default class StatusList extends ImmutablePureComponent {
}
return (
-
+
{scrollableContent}
);
diff --git a/app/javascript/mastodon/features/account_gallery/index.js b/app/javascript/mastodon/features/account_gallery/index.js
index 5f564d3a9..a6c464aff 100644
--- a/app/javascript/mastodon/features/account_gallery/index.js
+++ b/app/javascript/mastodon/features/account_gallery/index.js
@@ -23,6 +23,7 @@ const mapStateToProps = (state, props) => ({
class LoadMoreMedia extends ImmutablePureComponent {
static propTypes = {
+ shouldUpdateScroll: PropTypes.func,
maxId: PropTypes.string,
onLoadMore: PropTypes.func.isRequired,
};
@@ -90,7 +91,7 @@ export default class AccountGallery extends ImmutablePureComponent {
}
render () {
- const { medias, isLoading, hasMore } = this.props;
+ const { medias, shouldUpdateScroll, isLoading, hasMore } = this.props;
let loadOlder = null;
@@ -110,7 +111,7 @@ export default class AccountGallery extends ImmutablePureComponent {
-
+
diff --git a/app/javascript/mastodon/features/account_timeline/index.js b/app/javascript/mastodon/features/account_timeline/index.js
index d329bac5c..934513cd7 100644
--- a/app/javascript/mastodon/features/account_timeline/index.js
+++ b/app/javascript/mastodon/features/account_timeline/index.js
@@ -29,6 +29,7 @@ export default class AccountTimeline extends ImmutablePureComponent {
static propTypes = {
params: PropTypes.object.isRequired,
dispatch: PropTypes.func.isRequired,
+ shouldUpdateScroll: PropTypes.func,
statusIds: ImmutablePropTypes.list,
featuredStatusIds: ImmutablePropTypes.list,
isLoading: PropTypes.bool,
@@ -61,7 +62,7 @@ export default class AccountTimeline extends ImmutablePureComponent {
}
render () {
- const { statusIds, featuredStatusIds, isLoading, hasMore } = this.props;
+ const { shouldUpdateScroll, statusIds, featuredStatusIds, isLoading, hasMore } = this.props;
if (!statusIds && isLoading) {
return (
@@ -83,6 +84,7 @@ export default class AccountTimeline extends ImmutablePureComponent {
isLoading={isLoading}
hasMore={hasMore}
onLoadMore={this.handleLoadMore}
+ shouldUpdateScroll={shouldUpdateScroll}
/>
);
diff --git a/app/javascript/mastodon/features/blocks/index.js b/app/javascript/mastodon/features/blocks/index.js
index 14a512ae8..0b88e50ae 100644
--- a/app/javascript/mastodon/features/blocks/index.js
+++ b/app/javascript/mastodon/features/blocks/index.js
@@ -1,5 +1,7 @@
import React from 'react';
import { connect } from 'react-redux';
+import { defineMessages, injectIntl } from 'react-intl';
+import ImmutablePureComponent from 'react-immutable-pure-component';
import ImmutablePropTypes from 'react-immutable-proptypes';
import PropTypes from 'prop-types';
import LoadingIndicator from '../../components/loading_indicator';
@@ -8,8 +10,6 @@ import Column from '../ui/components/column';
import ColumnBackButtonSlim from '../../components/column_back_button_slim';
import AccountContainer from '../../containers/account_container';
import { fetchBlocks, expandBlocks } from '../../actions/blocks';
-import { defineMessages, injectIntl } from 'react-intl';
-import ImmutablePureComponent from 'react-immutable-pure-component';
const messages = defineMessages({
heading: { id: 'column.blocks', defaultMessage: 'Blocked users' },
@@ -26,6 +26,7 @@ export default class Blocks extends ImmutablePureComponent {
static propTypes = {
params: PropTypes.object.isRequired,
dispatch: PropTypes.func.isRequired,
+ shouldUpdateScroll: PropTypes.func,
accountIds: ImmutablePropTypes.list,
intl: PropTypes.object.isRequired,
};
@@ -43,7 +44,7 @@ export default class Blocks extends ImmutablePureComponent {
}
render () {
- const { intl, accountIds } = this.props;
+ const { intl, accountIds, shouldUpdateScroll } = this.props;
if (!accountIds) {
return (
@@ -56,7 +57,7 @@ export default class Blocks extends ImmutablePureComponent {
return (
-
+
{accountIds.map(id =>
diff --git a/app/javascript/mastodon/features/community_timeline/index.js b/app/javascript/mastodon/features/community_timeline/index.js
index eb9ad97a2..1cd5cf157 100644
--- a/app/javascript/mastodon/features/community_timeline/index.js
+++ b/app/javascript/mastodon/features/community_timeline/index.js
@@ -39,6 +39,7 @@ export default class CommunityTimeline extends React.PureComponent {
static propTypes = {
dispatch: PropTypes.func.isRequired,
+ shouldUpdateScroll: PropTypes.func,
columnId: PropTypes.string,
intl: PropTypes.object.isRequired,
hasUnread: PropTypes.bool,
@@ -100,7 +101,7 @@ export default class CommunityTimeline extends React.PureComponent {
}
render () {
- const { intl, hasUnread, columnId, multiColumn, onlyMedia } = this.props;
+ const { intl, shouldUpdateScroll, hasUnread, columnId, multiColumn, onlyMedia } = this.props;
const pinned = !!columnId;
return (
@@ -124,6 +125,7 @@ export default class CommunityTimeline extends React.PureComponent {
timelineId={`community${onlyMedia ? ':media' : ''}`}
onLoadMore={this.handleLoadMore}
emptyMessage={
}
+ shouldUpdateScroll={shouldUpdateScroll}
/>
);
diff --git a/app/javascript/mastodon/features/direct_timeline/index.js b/app/javascript/mastodon/features/direct_timeline/index.js
index 63dc41d9e..2181c75b6 100644
--- a/app/javascript/mastodon/features/direct_timeline/index.js
+++ b/app/javascript/mastodon/features/direct_timeline/index.js
@@ -23,6 +23,7 @@ export default class DirectTimeline extends React.PureComponent {
static propTypes = {
dispatch: PropTypes.func.isRequired,
+ shouldUpdateScroll: PropTypes.func,
columnId: PropTypes.string,
intl: PropTypes.object.isRequired,
hasUnread: PropTypes.bool,
@@ -71,7 +72,7 @@ export default class DirectTimeline extends React.PureComponent {
}
render () {
- const { intl, hasUnread, columnId, multiColumn } = this.props;
+ const { intl, shouldUpdateScroll, hasUnread, columnId, multiColumn } = this.props;
const pinned = !!columnId;
return (
@@ -93,6 +94,7 @@ export default class DirectTimeline extends React.PureComponent {
timelineId='direct'
onLoadMore={this.handleLoadMore}
emptyMessage={
}
+ shouldUpdateScroll={shouldUpdateScroll}
/>
);
diff --git a/app/javascript/mastodon/features/domain_blocks/index.js b/app/javascript/mastodon/features/domain_blocks/index.js
index b8a942d6c..e4e2b5239 100644
--- a/app/javascript/mastodon/features/domain_blocks/index.js
+++ b/app/javascript/mastodon/features/domain_blocks/index.js
@@ -1,15 +1,15 @@
import React from 'react';
import { connect } from 'react-redux';
-import ImmutablePropTypes from 'react-immutable-proptypes';
+import { defineMessages, injectIntl } from 'react-intl';
+import ImmutablePureComponent from 'react-immutable-pure-component';
import PropTypes from 'prop-types';
+import ImmutablePropTypes from 'react-immutable-proptypes';
+import { debounce } from 'lodash';
import LoadingIndicator from '../../components/loading_indicator';
import Column from '../ui/components/column';
import ColumnBackButtonSlim from '../../components/column_back_button_slim';
import DomainContainer from '../../containers/domain_container';
import { fetchDomainBlocks, expandDomainBlocks } from '../../actions/domain_blocks';
-import { defineMessages, injectIntl } from 'react-intl';
-import ImmutablePureComponent from 'react-immutable-pure-component';
-import { debounce } from 'lodash';
import ScrollableList from '../../components/scrollable_list';
const messages = defineMessages({
@@ -28,6 +28,7 @@ export default class Blocks extends ImmutablePureComponent {
static propTypes = {
params: PropTypes.object.isRequired,
dispatch: PropTypes.func.isRequired,
+ shouldUpdateScroll: PropTypes.func,
domains: ImmutablePropTypes.orderedSet,
intl: PropTypes.object.isRequired,
};
@@ -41,7 +42,7 @@ export default class Blocks extends ImmutablePureComponent {
}, 300, { leading: true });
render () {
- const { intl, domains } = this.props;
+ const { intl, domains, shouldUpdateScroll } = this.props;
if (!domains) {
return (
@@ -54,7 +55,7 @@ export default class Blocks extends ImmutablePureComponent {
return (
-
+
{domains.map(domain =>
)}
diff --git a/app/javascript/mastodon/features/favourited_statuses/index.js b/app/javascript/mastodon/features/favourited_statuses/index.js
index 6f1c863b4..3973ed3cb 100644
--- a/app/javascript/mastodon/features/favourited_statuses/index.js
+++ b/app/javascript/mastodon/features/favourited_statuses/index.js
@@ -27,6 +27,7 @@ export default class Favourites extends ImmutablePureComponent {
static propTypes = {
dispatch: PropTypes.func.isRequired,
+ shouldUpdateScroll: PropTypes.func,
statusIds: ImmutablePropTypes.list.isRequired,
intl: PropTypes.object.isRequired,
columnId: PropTypes.string,
@@ -67,7 +68,7 @@ export default class Favourites extends ImmutablePureComponent {
}, 300, { leading: true })
render () {
- const { intl, statusIds, columnId, multiColumn, hasMore, isLoading } = this.props;
+ const { intl, shouldUpdateScroll, statusIds, columnId, multiColumn, hasMore, isLoading } = this.props;
const pinned = !!columnId;
return (
@@ -90,6 +91,7 @@ export default class Favourites extends ImmutablePureComponent {
hasMore={hasMore}
isLoading={isLoading}
onLoadMore={this.handleLoadMore}
+ shouldUpdateScroll={shouldUpdateScroll}
/>
);
diff --git a/app/javascript/mastodon/features/favourites/index.js b/app/javascript/mastodon/features/favourites/index.js
index 6f113beb4..40fe6c9a8 100644
--- a/app/javascript/mastodon/features/favourites/index.js
+++ b/app/javascript/mastodon/features/favourites/index.js
@@ -1,5 +1,6 @@
import React from 'react';
import { connect } from 'react-redux';
+import ImmutablePureComponent from 'react-immutable-pure-component';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
import LoadingIndicator from '../../components/loading_indicator';
@@ -8,7 +9,6 @@ import { ScrollContainer } from 'react-router-scroll-4';
import AccountContainer from '../../containers/account_container';
import Column from '../ui/components/column';
import ColumnBackButton from '../../components/column_back_button';
-import ImmutablePureComponent from 'react-immutable-pure-component';
const mapStateToProps = (state, props) => ({
accountIds: state.getIn(['user_lists', 'favourited_by', props.params.statusId]),
@@ -20,6 +20,7 @@ export default class Favourites extends ImmutablePureComponent {
static propTypes = {
params: PropTypes.object.isRequired,
dispatch: PropTypes.func.isRequired,
+ shouldUpdateScroll: PropTypes.func,
accountIds: ImmutablePropTypes.list,
};
@@ -34,7 +35,7 @@ export default class Favourites extends ImmutablePureComponent {
}
render () {
- const { accountIds } = this.props;
+ const { shouldUpdateScroll, accountIds } = this.props;
if (!accountIds) {
return (
@@ -48,7 +49,7 @@ export default class Favourites extends ImmutablePureComponent {
-
+
diff --git a/app/javascript/mastodon/features/follow_requests/index.js b/app/javascript/mastodon/features/follow_requests/index.js
index eae821f92..53a394cbc 100644
--- a/app/javascript/mastodon/features/follow_requests/index.js
+++ b/app/javascript/mastodon/features/follow_requests/index.js
@@ -1,5 +1,7 @@
import React from 'react';
import { connect } from 'react-redux';
+import { defineMessages, injectIntl } from 'react-intl';
+import ImmutablePureComponent from 'react-immutable-pure-component';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
import LoadingIndicator from '../../components/loading_indicator';
@@ -8,8 +10,6 @@ import Column from '../ui/components/column';
import ColumnBackButtonSlim from '../../components/column_back_button_slim';
import AccountAuthorizeContainer from './containers/account_authorize_container';
import { fetchFollowRequests, expandFollowRequests } from '../../actions/accounts';
-import { defineMessages, injectIntl } from 'react-intl';
-import ImmutablePureComponent from 'react-immutable-pure-component';
const messages = defineMessages({
heading: { id: 'column.follow_requests', defaultMessage: 'Follow requests' },
@@ -26,6 +26,7 @@ export default class FollowRequests extends ImmutablePureComponent {
static propTypes = {
params: PropTypes.object.isRequired,
dispatch: PropTypes.func.isRequired,
+ shouldUpdateScroll: PropTypes.func,
accountIds: ImmutablePropTypes.list,
intl: PropTypes.object.isRequired,
};
@@ -43,7 +44,7 @@ export default class FollowRequests extends ImmutablePureComponent {
}
render () {
- const { intl, accountIds } = this.props;
+ const { intl, shouldUpdateScroll, accountIds } = this.props;
if (!accountIds) {
return (
@@ -57,7 +58,7 @@ export default class FollowRequests extends ImmutablePureComponent {
-
+
{accountIds.map(id =>
diff --git a/app/javascript/mastodon/features/followers/index.js b/app/javascript/mastodon/features/followers/index.js
index 919a89332..5bb8fdd6a 100644
--- a/app/javascript/mastodon/features/followers/index.js
+++ b/app/javascript/mastodon/features/followers/index.js
@@ -1,5 +1,6 @@
import React from 'react';
import { connect } from 'react-redux';
+import ImmutablePureComponent from 'react-immutable-pure-component';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
import LoadingIndicator from '../../components/loading_indicator';
@@ -14,7 +15,6 @@ import Column from '../ui/components/column';
import HeaderContainer from '../account_timeline/containers/header_container';
import LoadMore from '../../components/load_more';
import ColumnBackButton from '../../components/column_back_button';
-import ImmutablePureComponent from 'react-immutable-pure-component';
const mapStateToProps = (state, props) => ({
accountIds: state.getIn(['user_lists', 'followers', props.params.accountId, 'items']),
@@ -27,6 +27,7 @@ export default class Followers extends ImmutablePureComponent {
static propTypes = {
params: PropTypes.object.isRequired,
dispatch: PropTypes.func.isRequired,
+ shouldUpdateScroll: PropTypes.func,
accountIds: ImmutablePropTypes.list,
hasMore: PropTypes.bool,
};
@@ -57,7 +58,7 @@ export default class Followers extends ImmutablePureComponent {
}
render () {
- const { accountIds, hasMore } = this.props;
+ const { shouldUpdateScroll, accountIds, hasMore } = this.props;
let loadMore = null;
@@ -77,7 +78,7 @@ export default class Followers extends ImmutablePureComponent {
-
+
diff --git a/app/javascript/mastodon/features/following/index.js b/app/javascript/mastodon/features/following/index.js
index 5719259d1..97b0a8964 100644
--- a/app/javascript/mastodon/features/following/index.js
+++ b/app/javascript/mastodon/features/following/index.js
@@ -1,5 +1,6 @@
import React from 'react';
import { connect } from 'react-redux';
+import ImmutablePureComponent from 'react-immutable-pure-component';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
import LoadingIndicator from '../../components/loading_indicator';
@@ -14,7 +15,6 @@ import Column from '../ui/components/column';
import HeaderContainer from '../account_timeline/containers/header_container';
import LoadMore from '../../components/load_more';
import ColumnBackButton from '../../components/column_back_button';
-import ImmutablePureComponent from 'react-immutable-pure-component';
const mapStateToProps = (state, props) => ({
accountIds: state.getIn(['user_lists', 'following', props.params.accountId, 'items']),
@@ -27,6 +27,7 @@ export default class Following extends ImmutablePureComponent {
static propTypes = {
params: PropTypes.object.isRequired,
dispatch: PropTypes.func.isRequired,
+ shouldUpdateScroll: PropTypes.func,
accountIds: ImmutablePropTypes.list,
hasMore: PropTypes.bool,
};
@@ -57,7 +58,7 @@ export default class Following extends ImmutablePureComponent {
}
render () {
- const { accountIds, hasMore } = this.props;
+ const { shouldUpdateScroll, accountIds, hasMore } = this.props;
let loadMore = null;
@@ -77,7 +78,7 @@ export default class Following extends ImmutablePureComponent {
-
+
diff --git a/app/javascript/mastodon/features/hashtag_timeline/index.js b/app/javascript/mastodon/features/hashtag_timeline/index.js
index 374615ac7..15fca9ab4 100644
--- a/app/javascript/mastodon/features/hashtag_timeline/index.js
+++ b/app/javascript/mastodon/features/hashtag_timeline/index.js
@@ -20,6 +20,7 @@ export default class HashtagTimeline extends React.PureComponent {
params: PropTypes.object.isRequired,
columnId: PropTypes.string,
dispatch: PropTypes.func.isRequired,
+ shouldUpdateScroll: PropTypes.func,
hasUnread: PropTypes.bool,
multiColumn: PropTypes.bool,
};
@@ -83,7 +84,7 @@ export default class HashtagTimeline extends React.PureComponent {
}
render () {
- const { hasUnread, columnId, multiColumn } = this.props;
+ const { shouldUpdateScroll, hasUnread, columnId, multiColumn } = this.props;
const { id } = this.props.params;
const pinned = !!columnId;
@@ -107,6 +108,7 @@ export default class HashtagTimeline extends React.PureComponent {
timelineId={`hashtag:${id}`}
onLoadMore={this.handleLoadMore}
emptyMessage={
}
+ shouldUpdateScroll={shouldUpdateScroll}
/>
);
diff --git a/app/javascript/mastodon/features/home_timeline/index.js b/app/javascript/mastodon/features/home_timeline/index.js
index db6bbdec1..4e6853c5b 100644
--- a/app/javascript/mastodon/features/home_timeline/index.js
+++ b/app/javascript/mastodon/features/home_timeline/index.js
@@ -25,6 +25,7 @@ export default class HomeTimeline extends React.PureComponent {
static propTypes = {
dispatch: PropTypes.func.isRequired,
+ shouldUpdateScroll: PropTypes.func,
intl: PropTypes.object.isRequired,
hasUnread: PropTypes.bool,
isPartial: PropTypes.bool,
@@ -93,7 +94,7 @@ export default class HomeTimeline extends React.PureComponent {
}
render () {
- const { intl, hasUnread, columnId, multiColumn } = this.props;
+ const { intl, shouldUpdateScroll, hasUnread, columnId, multiColumn } = this.props;
const pinned = !!columnId;
return (
@@ -117,6 +118,7 @@ export default class HomeTimeline extends React.PureComponent {
onLoadMore={this.handleLoadMore}
timelineId='home'
emptyMessage={
}} />}
+ shouldUpdateScroll={shouldUpdateScroll}
/>
);
diff --git a/app/javascript/mastodon/features/list_timeline/index.js b/app/javascript/mastodon/features/list_timeline/index.js
index f08e77b7a..5c40fb758 100644
--- a/app/javascript/mastodon/features/list_timeline/index.js
+++ b/app/javascript/mastodon/features/list_timeline/index.js
@@ -35,6 +35,7 @@ export default class ListTimeline extends React.PureComponent {
static propTypes = {
params: PropTypes.object.isRequired,
dispatch: PropTypes.func.isRequired,
+ shouldUpdateScroll: PropTypes.func,
columnId: PropTypes.string,
hasUnread: PropTypes.bool,
multiColumn: PropTypes.bool,
@@ -112,7 +113,7 @@ export default class ListTimeline extends React.PureComponent {
}
render () {
- const { hasUnread, columnId, multiColumn, list } = this.props;
+ const { shouldUpdateScroll, hasUnread, columnId, multiColumn, list } = this.props;
const { id } = this.props.params;
const pinned = !!columnId;
const title = list ? list.get('title') : id;
@@ -166,6 +167,7 @@ export default class ListTimeline extends React.PureComponent {
timelineId={`list:${id}`}
onLoadMore={this.handleLoadMore}
emptyMessage={ }
+ shouldUpdateScroll={shouldUpdateScroll}
/>
);
diff --git a/app/javascript/mastodon/features/mutes/index.js b/app/javascript/mastodon/features/mutes/index.js
index bb351ece2..66fd3796d 100644
--- a/app/javascript/mastodon/features/mutes/index.js
+++ b/app/javascript/mastodon/features/mutes/index.js
@@ -1,5 +1,7 @@
import React from 'react';
import { connect } from 'react-redux';
+import { defineMessages, injectIntl } from 'react-intl';
+import ImmutablePureComponent from 'react-immutable-pure-component';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
import LoadingIndicator from '../../components/loading_indicator';
@@ -8,8 +10,6 @@ import Column from '../ui/components/column';
import ColumnBackButtonSlim from '../../components/column_back_button_slim';
import AccountContainer from '../../containers/account_container';
import { fetchMutes, expandMutes } from '../../actions/mutes';
-import { defineMessages, injectIntl } from 'react-intl';
-import ImmutablePureComponent from 'react-immutable-pure-component';
const messages = defineMessages({
heading: { id: 'column.mutes', defaultMessage: 'Muted users' },
@@ -26,6 +26,7 @@ export default class Mutes extends ImmutablePureComponent {
static propTypes = {
params: PropTypes.object.isRequired,
dispatch: PropTypes.func.isRequired,
+ shouldUpdateScroll: PropTypes.func,
accountIds: ImmutablePropTypes.list,
intl: PropTypes.object.isRequired,
};
@@ -43,7 +44,7 @@ export default class Mutes extends ImmutablePureComponent {
}
render () {
- const { intl, accountIds } = this.props;
+ const { intl, shouldUpdateScroll, accountIds } = this.props;
if (!accountIds) {
return (
@@ -56,7 +57,7 @@ export default class Mutes extends ImmutablePureComponent {
return (
-
+
{accountIds.map(id =>
diff --git a/app/javascript/mastodon/features/pinned_statuses/index.js b/app/javascript/mastodon/features/pinned_statuses/index.js
index b4a6c1e52..c6eb689d2 100644
--- a/app/javascript/mastodon/features/pinned_statuses/index.js
+++ b/app/javascript/mastodon/features/pinned_statuses/index.js
@@ -24,6 +24,7 @@ export default class PinnedStatuses extends ImmutablePureComponent {
static propTypes = {
dispatch: PropTypes.func.isRequired,
+ shouldUpdateScroll: PropTypes.func,
statusIds: ImmutablePropTypes.list.isRequired,
intl: PropTypes.object.isRequired,
hasMore: PropTypes.bool.isRequired,
@@ -42,7 +43,7 @@ export default class PinnedStatuses extends ImmutablePureComponent {
}
render () {
- const { intl, statusIds, hasMore } = this.props;
+ const { intl, shouldUpdateScroll, statusIds, hasMore } = this.props;
return (
@@ -51,6 +52,7 @@ export default class PinnedStatuses extends ImmutablePureComponent {
statusIds={statusIds}
scrollKey='pinned_statuses'
hasMore={hasMore}
+ shouldUpdateScroll={shouldUpdateScroll}
/>
);
diff --git a/app/javascript/mastodon/features/public_timeline/index.js b/app/javascript/mastodon/features/public_timeline/index.js
index 2d5bb3baf..5f7ac5fc7 100644
--- a/app/javascript/mastodon/features/public_timeline/index.js
+++ b/app/javascript/mastodon/features/public_timeline/index.js
@@ -39,6 +39,7 @@ export default class PublicTimeline extends React.PureComponent {
static propTypes = {
dispatch: PropTypes.func.isRequired,
+ shouldUpdateScroll: PropTypes.func,
intl: PropTypes.object.isRequired,
columnId: PropTypes.string,
multiColumn: PropTypes.bool,
@@ -107,7 +108,7 @@ export default class PublicTimeline extends React.PureComponent {
}
render () {
- const { intl, columnId, hasUnread, multiColumn, onlyMedia } = this.props;
+ const { intl, shouldUpdateScroll, columnId, hasUnread, multiColumn, onlyMedia } = this.props;
const pinned = !!columnId;
return (
@@ -131,6 +132,7 @@ export default class PublicTimeline extends React.PureComponent {
trackScroll={!pinned}
scrollKey={`public_timeline-${columnId}`}
emptyMessage={
}
+ shouldUpdateScroll={shouldUpdateScroll}
/>
);
diff --git a/app/javascript/mastodon/features/reblogs/index.js b/app/javascript/mastodon/features/reblogs/index.js
index 579d6aaa0..367739636 100644
--- a/app/javascript/mastodon/features/reblogs/index.js
+++ b/app/javascript/mastodon/features/reblogs/index.js
@@ -1,5 +1,6 @@
import React from 'react';
import { connect } from 'react-redux';
+import ImmutablePureComponent from 'react-immutable-pure-component';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
import LoadingIndicator from '../../components/loading_indicator';
@@ -8,7 +9,6 @@ import { ScrollContainer } from 'react-router-scroll-4';
import AccountContainer from '../../containers/account_container';
import Column from '../ui/components/column';
import ColumnBackButton from '../../components/column_back_button';
-import ImmutablePureComponent from 'react-immutable-pure-component';
const mapStateToProps = (state, props) => ({
accountIds: state.getIn(['user_lists', 'reblogged_by', props.params.statusId]),
@@ -20,6 +20,7 @@ export default class Reblogs extends ImmutablePureComponent {
static propTypes = {
params: PropTypes.object.isRequired,
dispatch: PropTypes.func.isRequired,
+ shouldUpdateScroll: PropTypes.func,
accountIds: ImmutablePropTypes.list,
};
@@ -34,7 +35,7 @@ export default class Reblogs extends ImmutablePureComponent {
}
render () {
- const { accountIds } = this.props;
+ const { shouldUpdateScroll, accountIds } = this.props;
if (!accountIds) {
return (
@@ -48,7 +49,7 @@ export default class Reblogs extends ImmutablePureComponent {
-
+
diff --git a/app/javascript/mastodon/features/status/index.js b/app/javascript/mastodon/features/status/index.js
index d7b50786c..89387ca43 100644
--- a/app/javascript/mastodon/features/status/index.js
+++ b/app/javascript/mastodon/features/status/index.js
@@ -42,7 +42,7 @@ import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
import ImmutablePureComponent from 'react-immutable-pure-component';
import { HotKeys } from 'react-hotkeys';
import { boostModal, deleteModal } from '../../initial_state';
-import { attachFullscreenListener, detachFullscreenListener, isFullscreen } from '../../features/ui/util/fullscreen';
+import { attachFullscreenListener, detachFullscreenListener, isFullscreen } from '../ui/util/fullscreen';
const messages = defineMessages({
deleteConfirm: { id: 'confirmations.delete.confirm', defaultMessage: 'Delete' },
@@ -370,7 +370,7 @@ export default class Status extends ImmutablePureComponent {
render () {
let ancestors, descendants;
- const { status, ancestorsIds, descendantsIds, intl } = this.props;
+ const { shouldUpdateScroll, status, ancestorsIds, descendantsIds, intl } = this.props;
const { fullscreen } = this.state;
if (status === null) {
@@ -410,7 +410,7 @@ export default class Status extends ImmutablePureComponent {
)}
/>
-
+
{ancestors}
diff --git a/app/javascript/mastodon/features/ui/components/media_modal.js b/app/javascript/mastodon/features/ui/components/media_modal.js
index 12db95326..83b9e1b50 100644
--- a/app/javascript/mastodon/features/ui/components/media_modal.js
+++ b/app/javascript/mastodon/features/ui/components/media_modal.js
@@ -16,7 +16,7 @@ const messages = defineMessages({
next: { id: 'lightbox.next', defaultMessage: 'Next' },
});
-const previewState = 'previewMediaModal';
+export const previewState = 'previewMediaModal';
@injectIntl
export default class MediaModal extends ImmutablePureComponent {
diff --git a/app/javascript/mastodon/features/ui/index.js b/app/javascript/mastodon/features/ui/index.js
index 56a856230..67484fc63 100644
--- a/app/javascript/mastodon/features/ui/index.js
+++ b/app/javascript/mastodon/features/ui/index.js
@@ -1,12 +1,14 @@
import classNames from 'classnames';
import React from 'react';
-import NotificationsContainer from './containers/notifications_container';
+import { HotKeys } from 'react-hotkeys';
+import { defineMessages, injectIntl } from 'react-intl';
+import { connect } from 'react-redux';
+import { Redirect, withRouter } from 'react-router-dom';
import PropTypes from 'prop-types';
+import NotificationsContainer from './containers/notifications_container';
import LoadingBarContainer from './containers/loading_bar_container';
import TabsBar from './components/tabs_bar';
import ModalContainer from './containers/modal_container';
-import { connect } from 'react-redux';
-import { Redirect, withRouter } from 'react-router-dom';
import { isMobile } from '../../is_mobile';
import { debounce } from 'lodash';
import { uploadCompose, resetCompose } from '../../actions/compose';
@@ -44,9 +46,8 @@ import {
PinnedStatuses,
Lists,
} from './util/async-components';
-import { HotKeys } from 'react-hotkeys';
import { me } from '../../initial_state';
-import { defineMessages, injectIntl } from 'react-intl';
+import { previewState } from './components/media_modal';
// Dummy import, to make sure that
ends up in the application bundle.
// Without this it ends up in ~8 very commonly used bundles.
@@ -117,6 +118,10 @@ class SwitchingColumnsArea extends React.PureComponent {
window.removeEventListener('resize', this.handleResize);
}
+ shouldUpdateScroll (_, { location }) {
+ return location.state !== previewState;
+ }
+
handleResize = debounce(() => {
// The cached heights are no longer accurate, invalidate
this.props.onLayoutChange();
@@ -141,36 +146,36 @@ class SwitchingColumnsArea extends React.PureComponent {
{redirect}
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
+
+
+
+
From 18831acc10bbe0f3b5a2858c0204c9f59b516103 Mon Sep 17 00:00:00 2001
From: Yamagishi Kazutoshi
Date: Mon, 30 Jul 2018 10:43:34 +0900
Subject: [PATCH 051/196] Weblate translations (2018-07-30) (#8096)
* Translated using Weblate (Czech)
Currently translated at 100.0% (306 of 306 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/cs/
* Translated using Weblate (Czech)
Currently translated at 4.8% (4 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/cs/
* Translated using Weblate (Czech)
Currently translated at 29.5% (196 of 663 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/cs/
* Translated using Weblate (Czech)
Currently translated at 30.1% (200 of 663 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/cs/
* Translated using Weblate (Telugu)
Currently translated at 100.0% (306 of 306 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/te/
* Translated using Weblate (Czech)
Currently translated at 49.4% (328 of 663 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/cs/
* Translated using Weblate (Japanese)
Currently translated at 99.8% (662 of 663 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (306 of 306 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/pt_BR/
* Translated using Weblate (Czech)
Currently translated at 70.4% (467 of 663 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/cs/
* Translated using Weblate (Ukrainian)
Currently translated at 92.3% (612 of 663 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/uk/
* Translated using Weblate (Telugu)
Currently translated at 100.0% (306 of 306 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/te/
* Translated using Weblate (Korean)
Currently translated at 100.0% (82 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/ko/
* Translated using Weblate (Czech)
Currently translated at 71.6% (475 of 663 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/cs/
* Translated using Weblate (Korean)
Currently translated at 100.0% (306 of 306 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/ko/
* Translated using Weblate (Czech)
Currently translated at 95.0% (630 of 663 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/cs/
* Translated using Weblate (Korean)
Currently translated at 99.8% (662 of 663 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ko/
* Translated using Weblate (Danish)
Currently translated at 79.3% (526 of 663 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/da/
* Translated using Weblate (Czech)
Currently translated at 99.8% (662 of 663 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/cs/
* Translated using Weblate (Czech)
Currently translated at 100.0% (306 of 306 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/cs/
* Translated using Weblate (Czech)
Currently translated at 50.0% (31 of 62 strings)
Translation: Mastodon/Devise
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/devise/cs/
* yarn manage:translations && i18n-tasks normalize && i18n-tasks remove-unused
---
app/javascript/mastodon/locales/cs.json | 432 +++++------
app/javascript/mastodon/locales/ko.json | 2 +-
app/javascript/mastodon/locales/pt-BR.json | 6 +-
app/javascript/mastodon/locales/te.json | 8 +-
config/locales/cs.yml | 839 ++++++++++++++++++++-
config/locales/da.yml | 9 +
config/locales/devise.cs.yml | 32 +
config/locales/ja.yml | 1 +
config/locales/ko.yml | 29 +
config/locales/simple_form.cs.yml | 2 +-
config/locales/simple_form.ko.yml | 2 +
config/locales/uk.yml | 513 ++++++++++++-
12 files changed, 1613 insertions(+), 262 deletions(-)
diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json
index e0dd0ab23..d276c4651 100644
--- a/app/javascript/mastodon/locales/cs.json
+++ b/app/javascript/mastodon/locales/cs.json
@@ -1,17 +1,17 @@
{
"account.badges.bot": "Robot",
- "account.block": "Blokovat @{name}",
+ "account.block": "Zablokovat uživatele @{name}",
"account.block_domain": "Skrýt vše z {domain}",
"account.blocked": "Blokován/a",
"account.direct": "Přímá zpráva pro uživatele @{name}",
"account.disclaimer_full": "Níže uvedené informace nemusejí zcela odrážet profil uživatele.",
"account.domain_blocked": "Doména skryta",
- "account.edit_profile": "Uprav profil",
+ "account.edit_profile": "Upravit profil",
"account.follow": "Sleduj",
"account.followers": "Sledovatelé",
"account.follows": "Sleduje",
"account.follows_you": "Sleduje vás",
- "account.hide_reblogs": "Skrýt povýšení od uživatele @{name}",
+ "account.hide_reblogs": "Skrýt boosty od uživatele @{name}",
"account.media": "Média",
"account.mention": "Zmínit uživatele @{name}",
"account.moved_to": "{name} se přesunul/a na:",
@@ -23,7 +23,7 @@
"account.report": "Nahlásit uživatele @{name}",
"account.requested": "Požadavek čeká na schválení. Kliknutím zrušíte požadavek o sledování",
"account.share": "Sdílet profil uživatele @{name}",
- "account.show_reblogs": "Zobrazit povýšení od uživatele @{name}",
+ "account.show_reblogs": "Zobrazit boosty od uživatele @{name}",
"account.unblock": "Odblokovat uživatele @{name}",
"account.unblock_domain": "Odkrýt doménu {domain}",
"account.unfollow": "Přestat sledovat",
@@ -64,7 +64,7 @@
"compose_form.direct_message_warning_learn_more": "Zjistit více",
"compose_form.hashtag_warning": "Tento toot nebude zobrazen pod žádným hashtagem, neboť je neuvedený. Pouze veřejné tooty mohou být vyhledány podle hashtagu.",
"compose_form.lock_disclaimer": "Váš účet není {locked}. Kdokoliv vás může sledovat a vidět vaše příspěvky pouze pro sledovatele.",
- "compose_form.lock_disclaimer.lock": "zamknutý",
+ "compose_form.lock_disclaimer.lock": "zamčený",
"compose_form.placeholder": "Co máte na mysli?",
"compose_form.publish": "Tootnout",
"compose_form.publish_loud": "{publish}!",
@@ -85,225 +85,225 @@
"confirmations.mute.confirm": "Ignorovat",
"confirmations.mute.message": "Jste si jistý/á, že chcete ignorovat uživatele {name}?",
"confirmations.redraft.confirm": "Vymazat a přepsat",
- "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
- "confirmations.unfollow.confirm": "Unfollow",
- "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
- "embed.instructions": "Embed this status on your website by copying the code below.",
- "embed.preview": "Here is what it will look like:",
- "emoji_button.activity": "Activity",
- "emoji_button.custom": "Custom",
- "emoji_button.flags": "Flags",
- "emoji_button.food": "Food & Drink",
- "emoji_button.label": "Insert emoji",
- "emoji_button.nature": "Nature",
- "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
- "emoji_button.objects": "Objects",
- "emoji_button.people": "People",
- "emoji_button.recent": "Frequently used",
- "emoji_button.search": "Search...",
- "emoji_button.search_results": "Search results",
- "emoji_button.symbols": "Symbols",
- "emoji_button.travel": "Travel & Places",
- "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!",
- "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
- "empty_column.hashtag": "There is nothing in this hashtag yet.",
- "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
- "empty_column.home.public_timeline": "the public timeline",
- "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
- "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
- "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up",
- "follow_request.authorize": "Authorize",
- "follow_request.reject": "Reject",
- "getting_started.developers": "Developers",
+ "confirmations.redraft.message": "Jste si jistý/á, že chcete vymazat a přepsat tento status? Ztratíte všechny jeho odpovědi, boosty a oblíbení.",
+ "confirmations.unfollow.confirm": "Přestat sledovat",
+ "confirmations.unfollow.message": "jste si jistý/á, že chcete přestat sledovat uživatele {name}?",
+ "embed.instructions": "Pro přidání statusu na vaši webovou stránku zkopírujte níže uvedený kód.",
+ "embed.preview": "Takhle to bude vypadat:",
+ "emoji_button.activity": "Aktivita",
+ "emoji_button.custom": "Vlastní",
+ "emoji_button.flags": "Vlajky",
+ "emoji_button.food": "Jídla a nápoje",
+ "emoji_button.label": "Vložit emoji",
+ "emoji_button.nature": "Příroda",
+ "emoji_button.not_found": "Žádné emoji!! (╯°□°)╯︵ ┻━┻",
+ "emoji_button.objects": "Předměty",
+ "emoji_button.people": "Lidé",
+ "emoji_button.recent": "Často používané",
+ "emoji_button.search": "Hledat...",
+ "emoji_button.search_results": "Výsledky hledání",
+ "emoji_button.symbols": "Symboly",
+ "emoji_button.travel": "Cestování a místa",
+ "empty_column.community": "Místní časová osa je prázdná. Napište něco veřejně a rozhýbejte to tu!",
+ "empty_column.direct": "Ještě nemáte žádné přímé zprávy. Pokud nějakou pošlete nebo dostanete, zobrazí se zde.",
+ "empty_column.hashtag": "Pod tímto hashtagem ještě nic není.",
+ "empty_column.home": "Vaše domovská časová osa je prázdná! Začněte navštívením {public} nebo použijte hledání a seznamte se s dalšími uživateli.",
+ "empty_column.home.public_timeline": "veřejné časové osy",
+ "empty_column.list": "V tomto seznamu ještě nic není. Pokud budou členové tohoto seznamu psát nové statusy, objeví se zde.",
+ "empty_column.notifications": "Ještě nemáte žádná oznámení. Začněte konverzaci komunikováním s ostatními.",
+ "empty_column.public": "Tady nic není! Napište něco veřejně, nebo manuálně začněte sledovat uživatele z jiných instancí, aby tu něco přibylo",
+ "follow_request.authorize": "Autorizovat",
+ "follow_request.reject": "Odmítnout",
+ "getting_started.developers": "Vývojáři",
"getting_started.documentation": "Documentation",
- "getting_started.find_friends": "Find friends from Twitter",
- "getting_started.heading": "Getting started",
- "getting_started.invite": "Invite people",
- "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.",
- "getting_started.security": "Security",
- "getting_started.terms": "Terms of service",
- "home.column_settings.basic": "Basic",
- "home.column_settings.show_reblogs": "Show boosts",
- "home.column_settings.show_replies": "Show replies",
- "keyboard_shortcuts.back": "to navigate back",
- "keyboard_shortcuts.boost": "to boost",
- "keyboard_shortcuts.column": "to focus a status in one of the columns",
- "keyboard_shortcuts.compose": "to focus the compose textarea",
- "keyboard_shortcuts.description": "Description",
- "keyboard_shortcuts.down": "to move down in the list",
- "keyboard_shortcuts.enter": "to open status",
- "keyboard_shortcuts.favourite": "to favourite",
- "keyboard_shortcuts.heading": "Keyboard Shortcuts",
- "keyboard_shortcuts.hotkey": "Hotkey",
- "keyboard_shortcuts.legend": "to display this legend",
- "keyboard_shortcuts.mention": "to mention author",
+ "getting_started.find_friends": "Najděte si přátele z Twitteru",
+ "getting_started.heading": "Začínáme",
+ "getting_started.invite": "Pozvat lidi",
+ "getting_started.open_source_notice": "Mastodon je otevřený software. Na GitHubu k němu můžete přispět nebo nahlásit chyby: {github}.",
+ "getting_started.security": "Zabezpečení",
+ "getting_started.terms": "Podmínky používání",
+ "home.column_settings.basic": "Základní",
+ "home.column_settings.show_reblogs": "Zobrazit boosty",
+ "home.column_settings.show_replies": "Zobrazit odpovědi",
+ "keyboard_shortcuts.back": "k návratu zpět",
+ "keyboard_shortcuts.boost": "k boostnutí",
+ "keyboard_shortcuts.column": "k zaměření na status v jednom ze sloupců",
+ "keyboard_shortcuts.compose": "k zaměření na psací prostor",
+ "keyboard_shortcuts.description": "Popis",
+ "keyboard_shortcuts.down": "k přesunutí dolů v seznamu",
+ "keyboard_shortcuts.enter": "k otevření statusu",
+ "keyboard_shortcuts.favourite": "k oblíbení",
+ "keyboard_shortcuts.heading": "Klávesové zkratky",
+ "keyboard_shortcuts.hotkey": "Horká klávesa",
+ "keyboard_shortcuts.legend": "k zobrazení této legendy",
+ "keyboard_shortcuts.mention": "ke zmínění autora",
"keyboard_shortcuts.profile": "to open author's profile",
- "keyboard_shortcuts.reply": "to reply",
- "keyboard_shortcuts.search": "to focus search",
- "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
- "keyboard_shortcuts.toot": "to start a brand new toot",
- "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
- "keyboard_shortcuts.up": "to move up in the list",
- "lightbox.close": "Close",
- "lightbox.next": "Next",
- "lightbox.previous": "Previous",
- "lists.account.add": "Add to list",
- "lists.account.remove": "Remove from list",
- "lists.delete": "Delete list",
- "lists.edit": "Edit list",
- "lists.new.create": "Add list",
- "lists.new.title_placeholder": "New list title",
- "lists.search": "Search among people you follow",
- "lists.subheading": "Your lists",
- "loading_indicator.label": "Loading...",
- "media_gallery.toggle_visible": "Toggle visibility",
- "missing_indicator.label": "Not found",
- "missing_indicator.sublabel": "This resource could not be found",
- "mute_modal.hide_notifications": "Hide notifications from this user?",
- "navigation_bar.blocks": "Blocked users",
- "navigation_bar.community_timeline": "Local timeline",
- "navigation_bar.direct": "Direct messages",
- "navigation_bar.discover": "Discover",
- "navigation_bar.domain_blocks": "Hidden domains",
- "navigation_bar.edit_profile": "Edit profile",
- "navigation_bar.favourites": "Favourites",
- "navigation_bar.filters": "Muted words",
- "navigation_bar.follow_requests": "Follow requests",
- "navigation_bar.info": "About this instance",
- "navigation_bar.keyboard_shortcuts": "Hotkeys",
- "navigation_bar.lists": "Lists",
- "navigation_bar.logout": "Logout",
- "navigation_bar.mutes": "Muted users",
- "navigation_bar.personal": "Personal",
- "navigation_bar.pins": "Pinned toots",
- "navigation_bar.preferences": "Preferences",
- "navigation_bar.public_timeline": "Federated timeline",
- "navigation_bar.security": "Security",
- "notification.favourite": "{name} favourited your status",
- "notification.follow": "{name} followed you",
- "notification.mention": "{name} mentioned you",
- "notification.reblog": "{name} boosted your status",
- "notifications.clear": "Clear notifications",
- "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?",
- "notifications.column_settings.alert": "Desktop notifications",
- "notifications.column_settings.favourite": "Favourites:",
- "notifications.column_settings.follow": "New followers:",
- "notifications.column_settings.mention": "Mentions:",
- "notifications.column_settings.push": "Push notifications",
- "notifications.column_settings.push_meta": "This device",
- "notifications.column_settings.reblog": "Boosts:",
- "notifications.column_settings.show": "Show in column",
- "notifications.column_settings.sound": "Play sound",
- "notifications.group": "{count} notifications",
- "onboarding.done": "Done",
- "onboarding.next": "Next",
- "onboarding.page_five.public_timelines": "The local timeline shows public posts from everyone on {domain}. The federated timeline shows public posts from everyone who people on {domain} follow. These are the Public Timelines, a great way to discover new people.",
- "onboarding.page_four.home": "The home timeline shows posts from people you follow.",
- "onboarding.page_four.notifications": "The notifications column shows when someone interacts with you.",
- "onboarding.page_one.federation": "Mastodon is a network of independent servers joining up to make one larger social network. We call these servers instances.",
- "onboarding.page_one.full_handle": "Your full handle",
- "onboarding.page_one.handle_hint": "This is what you would tell your friends to search for.",
- "onboarding.page_one.welcome": "Welcome to Mastodon!",
- "onboarding.page_six.admin": "Your instance's admin is {admin}.",
- "onboarding.page_six.almost_done": "Almost done...",
- "onboarding.page_six.appetoot": "Bon Appetoot!",
- "onboarding.page_six.apps_available": "There are {apps} available for iOS, Android and other platforms.",
- "onboarding.page_six.github": "Mastodon is free open-source software. You can report bugs, request features, or contribute to the code on {github}.",
- "onboarding.page_six.guidelines": "community guidelines",
- "onboarding.page_six.read_guidelines": "Please read {domain}'s {guidelines}!",
- "onboarding.page_six.various_app": "mobile apps",
- "onboarding.page_three.profile": "Edit your profile to change your avatar, bio, and display name. There, you will also find other preferences.",
- "onboarding.page_three.search": "Use the search bar to find people and look at hashtags, such as {illustration} and {introductions}. To look for a person who is not on this instance, use their full handle.",
- "onboarding.page_two.compose": "Write posts from the compose column. You can upload images, change privacy settings, and add content warnings with the icons below.",
- "onboarding.skip": "Skip",
- "privacy.change": "Adjust status privacy",
- "privacy.direct.long": "Post to mentioned users only",
- "privacy.direct.short": "Direct",
- "privacy.private.long": "Post to followers only",
- "privacy.private.short": "Followers-only",
- "privacy.public.long": "Post to public timelines",
- "privacy.public.short": "Public",
+ "keyboard_shortcuts.reply": "k odpovězení",
+ "keyboard_shortcuts.search": "k zaměření na vyhledávání",
+ "keyboard_shortcuts.toggle_hidden": "k zobrazení/skrytí textu za CW",
+ "keyboard_shortcuts.toot": "k napsání úplně nového tootu",
+ "keyboard_shortcuts.unfocus": "ke zrušení soustředění na psací prostor/hledání",
+ "keyboard_shortcuts.up": "k posunutí nahoru v seznamu",
+ "lightbox.close": "Zavřít",
+ "lightbox.next": "Další",
+ "lightbox.previous": "Předchozí",
+ "lists.account.add": "Přidat do seznamu",
+ "lists.account.remove": "Odebrat ze seznamu",
+ "lists.delete": "Smazat seznam",
+ "lists.edit": "Upravit seznam",
+ "lists.new.create": "Přidat seznam",
+ "lists.new.title_placeholder": "Název nového seznamu",
+ "lists.search": "Hledejte mezi uživateli, které sledujete",
+ "lists.subheading": "Vaše seznamy",
+ "loading_indicator.label": "Načítám...",
+ "media_gallery.toggle_visible": "Přepínat viditelnost",
+ "missing_indicator.label": "Nenalezeno",
+ "missing_indicator.sublabel": "Tento zdroj se nepodažilo najít",
+ "mute_modal.hide_notifications": "Skrýt oznámení před tímto uživatelem?",
+ "navigation_bar.blocks": "Blokovaní uživatelé",
+ "navigation_bar.community_timeline": "Místní časová osa",
+ "navigation_bar.direct": "Přímé zprávy",
+ "navigation_bar.discover": "Objevujte",
+ "navigation_bar.domain_blocks": "Skryté domény",
+ "navigation_bar.edit_profile": "Upravit profil",
+ "navigation_bar.favourites": "Oblíbené",
+ "navigation_bar.filters": "Skrytá slova",
+ "navigation_bar.follow_requests": "Žádosti o sledování",
+ "navigation_bar.info": "O této instanci",
+ "navigation_bar.keyboard_shortcuts": "Klávesové zkratky",
+ "navigation_bar.lists": "Seznamy",
+ "navigation_bar.logout": "Odhlásit se",
+ "navigation_bar.mutes": "Ignorovaní uživatelé",
+ "navigation_bar.personal": "Osobní",
+ "navigation_bar.pins": "Připnuté tooty",
+ "navigation_bar.preferences": "Předvolby",
+ "navigation_bar.public_timeline": "Federovaná časová osa",
+ "navigation_bar.security": "Zabezpečení",
+ "notification.favourite": "{name} označil/a váš status jako oblíbený",
+ "notification.follow": "{name} vás začal/a sledovat",
+ "notification.mention": "{name} vás zmínil/a",
+ "notification.reblog": "{name} vám boostnul/a status",
+ "notifications.clear": "Vymazat oznámení",
+ "notifications.clear_confirmation": "Jste si jistý/á, že chcete trvale vymazat všechna vaše oznámení?",
+ "notifications.column_settings.alert": "Desktopová oznámení",
+ "notifications.column_settings.favourite": "Oblíbené:",
+ "notifications.column_settings.follow": "Noví sledovatelé:",
+ "notifications.column_settings.mention": "Zmínky:",
+ "notifications.column_settings.push": "Push oznámení",
+ "notifications.column_settings.push_meta": "Toto zařízení",
+ "notifications.column_settings.reblog": "Boosty:",
+ "notifications.column_settings.show": "Zobrazit ve sloupci",
+ "notifications.column_settings.sound": "Přehrát zvuk",
+ "notifications.group": "{count} oznámení",
+ "onboarding.done": "Hotovo",
+ "onboarding.next": "Další",
+ "onboarding.page_five.public_timelines": "Místní časová osa zobrazuje veřejné příspěvky od všech lidí na {domain}. Federovaná časová osa zobrazuje veřejné příspěvky ode všech, které lidé na {domain} sledují. Toto jsou veřejné časové osy, výborný způsob, jak objevovat nové lidi.",
+ "onboarding.page_four.home": "Domovská časová osa zobrazuje příspěvky od lidí, které sledujete.",
+ "onboarding.page_four.notifications": "Sloupec oznámení se zobrazí, když s vámi někdo bude komunikovat.",
+ "onboarding.page_one.federation": "Mastodon je síť nezávislých serverů, jejichž propojením vzniká jedna velká sociální síť. Těmto serverům říkáme instance.",
+ "onboarding.page_one.full_handle": "Vaše celá adresa profilu",
+ "onboarding.page_one.handle_hint": "Tohle je, co byste řekl/a svým přátelům, aby hledali.",
+ "onboarding.page_one.welcome": "Vítejte na Mastodonu!",
+ "onboarding.page_six.admin": "Administrátorem vaší instance je {admin}.",
+ "onboarding.page_six.almost_done": "Skoro hotovo...",
+ "onboarding.page_six.appetoot": "Bon appetoot!",
+ "onboarding.page_six.apps_available": "Jsou dostupné {apps} pro iOS, Android a jiné platformy.",
+ "onboarding.page_six.github": "Mastodon je svobodný a otevřený software. Na {github} můžete nahlásit chyby, požádat o nové funkce, nebo přispívat ke kódu.",
+ "onboarding.page_six.guidelines": "komunitní pravidla",
+ "onboarding.page_six.read_guidelines": "Prosím přečtěte si {guidelines} {domain}!",
+ "onboarding.page_six.various_app": "mobilní aplikace",
+ "onboarding.page_three.profile": "Upravte si svůj profil a změňte si svůj avatar, popis profilu a zobrazované jméno. V nastaveních najdete i další možnosti.",
+ "onboarding.page_three.search": "Pomocí vyhledávacího řádku najděte lidi a podívejte se na hashtagy jako {illustration} a {introductions}. Chcete-li najít někoho, kdo není na této instanci, použijte jeho celou adresu profilu.",
+ "onboarding.page_two.compose": "Příspěvky pište z pole na komponování. Ikonami níže můžete nahrávat obrázky, změnit nastavení soukromí a přidat varování o obsahu.",
+ "onboarding.skip": "Přeskočit",
+ "privacy.change": "Změnit viditelnost statusu",
+ "privacy.direct.long": "Odeslat pouze zmíněným uživatelům",
+ "privacy.direct.short": "Přímé",
+ "privacy.private.long": "Odeslat pouze sledovatelům",
+ "privacy.private.short": "Pouze pro sledovatele",
+ "privacy.public.long": "Odeslat na veřejné časové osy",
+ "privacy.public.short": "Veřejné",
"privacy.unlisted.long": "Do not show in public timelines",
- "privacy.unlisted.short": "Unlisted",
- "regeneration_indicator.label": "Loading…",
- "regeneration_indicator.sublabel": "Your home feed is being prepared!",
+ "privacy.unlisted.short": "Nezobrazované",
+ "regeneration_indicator.label": "Načítám…",
+ "regeneration_indicator.sublabel": "Váš domovský proud se připravuje!",
"relative_time.days": "{number}d",
"relative_time.hours": "{number}h",
- "relative_time.just_now": "now",
+ "relative_time.just_now": "teď",
"relative_time.minutes": "{number}m",
"relative_time.seconds": "{number}s",
- "reply_indicator.cancel": "Cancel",
- "report.forward": "Forward to {target}",
- "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?",
- "report.hint": "The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:",
- "report.placeholder": "Additional comments",
- "report.submit": "Submit",
- "report.target": "Report {target}",
- "search.placeholder": "Search",
- "search_popout.search_format": "Advanced search format",
- "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
+ "reply_indicator.cancel": "Zrušit",
+ "report.forward": "Přeposlat k {target}",
+ "report.forward_hint": "Tento účet je z jiného serveru. Chcete na něj také poslat anonymizovanou kopii?",
+ "report.hint": "Toto nahlášení bude zasláno moderátorům vaší instance. Níže můžete uvést, proč tento účet nahlašujete:",
+ "report.placeholder": "Další komentáře",
+ "report.submit": "Odeslat",
+ "report.target": "Nahlásit {target}",
+ "search.placeholder": "Hledat",
+ "search_popout.search_format": "Pokročilé vyhledávání",
+ "search_popout.tips.full_text": "Jednoduchý textový výpis statusů, které jste napsal/a, oblíbil/a si, povýšil/a, nebo v nich byl/a zmíněn/a, včetně odpovídajících přezdívek, jmen a hashtagů.",
"search_popout.tips.hashtag": "hashtag",
"search_popout.tips.status": "status",
- "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags",
- "search_popout.tips.user": "user",
- "search_results.accounts": "People",
- "search_results.hashtags": "Hashtags",
- "search_results.statuses": "Toots",
- "search_results.total": "{count, number} {count, plural, one {result} other {results}}",
- "standalone.public_title": "A look inside...",
- "status.block": "Block @{name}",
- "status.cancel_reblog_private": "Unboost",
- "status.cannot_reblog": "This post cannot be boosted",
+ "search_popout.tips.text": "Jednoduchý textový výpis odpovídajících jmen, přezdívek a hashtagů",
+ "search_popout.tips.user": "uživatel",
+ "search_results.accounts": "Lidé",
+ "search_results.hashtags": "Hashtagy",
+ "search_results.statuses": "Tooty",
+ "search_results.total": "{count, number} {count, plural, one {výsledek} other {výsledků}}",
+ "standalone.public_title": "Nahlédnout dovnitř...",
+ "status.block": "Zablokovat uživatele @{name}",
+ "status.cancel_reblog_private": "Zrušit boost",
+ "status.cannot_reblog": "Tento příspěvek nemůže být boostnutý",
"status.delete": "Delete",
- "status.direct": "Direct message @{name}",
- "status.embed": "Embed",
- "status.favourite": "Favourite",
- "status.filtered": "Filtered",
- "status.load_more": "Load more",
- "status.media_hidden": "Media hidden",
- "status.mention": "Mention @{name}",
- "status.more": "More",
- "status.mute": "Mute @{name}",
- "status.mute_conversation": "Mute conversation",
- "status.open": "Expand this status",
- "status.pin": "Pin on profile",
- "status.pinned": "Pinned toot",
- "status.reblog": "Boost",
- "status.reblog_private": "Boost to original audience",
- "status.reblogged_by": "{name} boosted",
- "status.redraft": "Delete & re-draft",
- "status.reply": "Reply",
- "status.replyAll": "Reply to thread",
- "status.report": "Report @{name}",
- "status.sensitive_toggle": "Click to view",
- "status.sensitive_warning": "Sensitive content",
- "status.share": "Share",
- "status.show_less": "Show less",
- "status.show_less_all": "Show less for all",
- "status.show_more": "Show more",
- "status.show_more_all": "Show more for all",
- "status.unmute_conversation": "Unmute conversation",
- "status.unpin": "Unpin from profile",
- "tabs_bar.federated_timeline": "Federated",
- "tabs_bar.home": "Home",
- "tabs_bar.local_timeline": "Local",
- "tabs_bar.notifications": "Notifications",
- "tabs_bar.search": "Search",
- "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
- "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
- "upload_area.title": "Drag & drop to upload",
- "upload_button.label": "Add media",
- "upload_form.description": "Describe for the visually impaired",
- "upload_form.focus": "Crop",
- "upload_form.undo": "Delete",
- "upload_progress.label": "Uploading...",
- "video.close": "Close video",
- "video.exit_fullscreen": "Exit full screen",
- "video.expand": "Expand video",
- "video.fullscreen": "Full screen",
- "video.hide": "Hide video",
- "video.mute": "Mute sound",
- "video.pause": "Pause",
- "video.play": "Play",
- "video.unmute": "Unmute sound"
+ "status.direct": "Poslat přímou zprávu uživateli @{name}",
+ "status.embed": "Vložit",
+ "status.favourite": "Oblíbit",
+ "status.filtered": "Filtrováno",
+ "status.load_more": "Zobrazit více",
+ "status.media_hidden": "Média skryta",
+ "status.mention": "Zmínit uživatele @{name}",
+ "status.more": "Více",
+ "status.mute": "Ignorovat uživatele @{name}",
+ "status.mute_conversation": "Ignorovat konverzaci",
+ "status.open": "Otevřít tento status",
+ "status.pin": "Připnout na profil",
+ "status.pinned": "Připnutý toot",
+ "status.reblog": "Boostnout",
+ "status.reblog_private": "Boostnout původnímu publiku",
+ "status.reblogged_by": "{name} boostnul/a",
+ "status.redraft": "Vymazat a přepsat",
+ "status.reply": "Odpovědět",
+ "status.replyAll": "Odpovědět na vlákno",
+ "status.report": "Nahlásit uživatele @{name}",
+ "status.sensitive_toggle": "Klikněte pro zobrazení",
+ "status.sensitive_warning": "Citlivý obsah",
+ "status.share": "Sdílet",
+ "status.show_less": "Zobrazit méně",
+ "status.show_less_all": "Zobrazit méně pro všechny",
+ "status.show_more": "Zobrazit více",
+ "status.show_more_all": "Zobrazit více pro všechny",
+ "status.unmute_conversation": "Přestat ignorovat konverzaci",
+ "status.unpin": "Odepnout z profilu",
+ "tabs_bar.federated_timeline": "Federovaná",
+ "tabs_bar.home": "Domů",
+ "tabs_bar.local_timeline": "Místní",
+ "tabs_bar.notifications": "Oznámení",
+ "tabs_bar.search": "Hledat",
+ "trends.count_by_accounts": "{count} {rawCount, plural, one {člověk} other {lidí}} diskutuje",
+ "ui.beforeunload": "Váš koncept se ztratí, pokud Mastodon opustíte.",
+ "upload_area.title": "Přetažením nahrajete",
+ "upload_button.label": "Přidat média",
+ "upload_form.description": "Popis pro zrakově postižené",
+ "upload_form.focus": "Vystřihnout",
+ "upload_form.undo": "Smazat",
+ "upload_progress.label": "Nahrávám...",
+ "video.close": "Zavřít video",
+ "video.exit_fullscreen": "Ukončit celou obrazovku",
+ "video.expand": "Otevřít video",
+ "video.fullscreen": "Celá obrazovka",
+ "video.hide": "Skrýt video",
+ "video.mute": "Vypnout zvuk",
+ "video.pause": "Pauza",
+ "video.play": "Přehrát",
+ "video.unmute": "Zapnout zvuk"
}
diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json
index 206ebeefd..9e630520d 100644
--- a/app/javascript/mastodon/locales/ko.json
+++ b/app/javascript/mastodon/locales/ko.json
@@ -167,7 +167,7 @@
"navigation_bar.domain_blocks": "숨겨진 도메인",
"navigation_bar.edit_profile": "프로필 편집",
"navigation_bar.favourites": "즐겨찾기",
- "navigation_bar.filters": "Muted words",
+ "navigation_bar.filters": "뮤트",
"navigation_bar.follow_requests": "팔로우 요청",
"navigation_bar.info": "이 인스턴스에 대해서",
"navigation_bar.keyboard_shortcuts": "단축키",
diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json
index fa56e52fb..69db735dd 100644
--- a/app/javascript/mastodon/locales/pt-BR.json
+++ b/app/javascript/mastodon/locales/pt-BR.json
@@ -129,11 +129,11 @@
"keyboard_shortcuts.boost": "para compartilhar",
"keyboard_shortcuts.column": "Focar um status em uma das colunas",
"keyboard_shortcuts.compose": "para focar a área de redação",
- "keyboard_shortcuts.description": "Description",
+ "keyboard_shortcuts.description": "Descrição",
"keyboard_shortcuts.down": "para mover para baixo na lista",
- "keyboard_shortcuts.enter": "to open status",
+ "keyboard_shortcuts.enter": "para expandir um status",
"keyboard_shortcuts.favourite": "para adicionar aos favoritos",
- "keyboard_shortcuts.heading": "Keyboard Shortcuts",
+ "keyboard_shortcuts.heading": "Atalhos de teclado",
"keyboard_shortcuts.hotkey": "Atalho",
"keyboard_shortcuts.legend": "para mostrar essa legenda",
"keyboard_shortcuts.mention": "para mencionar o autor",
diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json
index 48a648622..635647355 100644
--- a/app/javascript/mastodon/locales/te.json
+++ b/app/javascript/mastodon/locales/te.json
@@ -65,7 +65,7 @@
"compose_form.hashtag_warning": "ఈ టూట్ అన్లిస్టెడ్ కాబట్టి ఏ హాష్ ట్యాగ్ క్రిందకూ రాదు. పబ్లిక్ టూట్ లను మాత్రమే హాష్ ట్యాగ్ ద్వారా శోధించవచ్చు.",
"compose_form.lock_disclaimer": "మీ ఖాతా {locked} చేయబడలేదు. ఎవరైనా మిమ్మల్ని అనుసరించి మీ అనుచరులకు-మాత్రమే పోస్ట్లను వీక్షించవచ్చు.",
"compose_form.lock_disclaimer.lock": "బిగించబడినది",
- "compose_form.placeholder": "మీ మనస్సులో ఏమి ఉంది?",
+ "compose_form.placeholder": "మీ మనస్సులో ఏముంది?",
"compose_form.publish": "టూట్",
"compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.marked": "మీడియా సున్నితమైనదిగా గుర్తించబడింది",
@@ -115,7 +115,7 @@
"follow_request.authorize": "అనుమతించు",
"follow_request.reject": "తిరస్కరించు",
"getting_started.developers": "డెవలపర్లు",
- "getting_started.documentation": "Documentation",
+ "getting_started.documentation": "డాక్యుమెంటేషన్",
"getting_started.find_friends": "ట్విట్టర్ నుండి స్నేహితులను కనుగొనండి",
"getting_started.heading": "మొదలుపెడదాం",
"getting_started.invite": "వ్యక్తులను ఆహ్వానించండి",
@@ -167,7 +167,7 @@
"navigation_bar.domain_blocks": "దాచిన డొమైన్లు",
"navigation_bar.edit_profile": "ప్రొఫైల్ని సవరించండి",
"navigation_bar.favourites": "ఇష్టపడినవి",
- "navigation_bar.filters": "Muted words",
+ "navigation_bar.filters": "మ్యూట్ చేయబడిన పదాలు",
"navigation_bar.follow_requests": "అనుసరించడానికి అభ్యర్ధనలు",
"navigation_bar.info": "ఈ దృష్టాంతం గురించి",
"navigation_bar.keyboard_shortcuts": "హాట్ కీలు",
@@ -258,7 +258,7 @@
"status.direct": "@{name}కు నేరుగా సందేశం పంపు",
"status.embed": "ఎంబెడ్",
"status.favourite": "ఇష్టపడు",
- "status.filtered": "Filtered",
+ "status.filtered": "వడకట్టబడిన",
"status.load_more": "మరిన్ని లోడ్ చేయి",
"status.media_hidden": "మీడియా దాచబడింది",
"status.mention": "@{name}ను ప్రస్తావించు",
diff --git a/config/locales/cs.yml b/config/locales/cs.yml
index 135ecda31..6529992dc 100644
--- a/config/locales/cs.yml
+++ b/config/locales/cs.yml
@@ -1,7 +1,7 @@
---
cs:
about:
- about_hashtag_html: Toto jsou veřejné tooty označené jako #%{hashtag} . Pokud máte účet kdekoliv na fediverse, můžete s nimi interagovat.
+ about_hashtag_html: Toto jsou veřejné tooty označené hashtagem#%{hashtag} . Pokud máte účet kdekoliv na fediverse, můžete s nimi interagovat.
about_mastodon_html: Mastodon je sociální síť založená na otevřených webových protokolech a svobodném, otevřeném softwaru. Je decentrovalizovaná jako e-mail.
about_this: O této instanci
administered_by: 'Server spravuje:'
@@ -18,14 +18,21 @@ cs:
features:
humane_approach_body: Mastodon, poučen z chyb jiných sociálních sítí, se snaží bojovat se zneužíváním sociálních sítí vytvářením etických možností.
humane_approach_title: Lidštější přístup
+ not_a_product_body: Mastodon není komerční síť. Žádné reklamy, žádné dolování dat, žádné hranice. Žádná centrální autorita.
not_a_product_title: Jste osoba, ne produkt
+ real_conversation_body: S 500 znaky k vaší dispozici a podporou pro varování o obsahu a médiích se můžete vyjadřovat tak, jak chcete.
+ real_conversation_title: Vytvořen pro opravdovou konverzaci
+ within_reach_body: Několik aplikací pro iOS, Android a jiné platformy vám díky jednoduchému API ekosystému dovolují držet krok s vašimi přáteli, ať už jste kdekoliv.
+ within_reach_title: Vždy v dosahu
generic_description: "%{domain} je jedním serverem v síti"
+ hosted_on: Mastodon hostovaný na %{domain}
learn_more: Zjistit více
+ other_instances: Seznam instancí
source_code: Zdrojový kód
status_count_after: příspěvků
- status_count_before: Kdo je autorem
+ status_count_before: Kteří napsali
user_count_after: uživatelů
- user_count_before: Domov pro
+ user_count_before: Domov
what_is_mastodon: Co je Mastodon?
accounts:
follow: Sledovat
@@ -35,10 +42,836 @@ cs:
moved_html: 'Účet %{name} byl přesunut na %{new_profile_link}:'
network_hidden: Tato informace není k dispozici
nothing_here: Tady nic není!
+ people_followed_by: Lidé, které %{name} sleduje
+ people_who_follow: Lidé, kteří sledují uživatele %{name}
+ posts: Tooty
+ posts_with_replies: Tooty s odpověďmi
+ reserved_username: Toto uživatelské jméno je rezervováno
+ roles:
+ admin: Administrátor
+ bot: Robot
+ moderator: Moderátor
+ unfollow: Přestat sledovat
+ admin:
+ account_moderation_notes:
+ create: Zanechat poznámku
+ created_msg: Poznámka moderátora byla úspěšně vytvořena!
+ delete: Smazat
+ destroyed_msg: Poznámka moderátora byla úspěšně zničena!
+ accounts:
+ are_you_sure: Jste si jistý/á?
+ avatar: Avatar
+ by_domain: Doména
+ change_email:
+ changed_msg: E-mail k tomuto účtu byl úspěšně změněn!
+ current_email: Současný e-mail
+ label: Změnit e-mail
+ new_email: Nový e-mail
+ submit: Změnit e-mail
+ title: Změnit e-mail pro uživatele %{username}
+ confirm: Potvrdit
+ confirmed: Potvrzeno
+ confirming: Potvrzující
+ demote: Degradovat
+ disable: Zablokovat
+ disable_two_factor_authentication: Zakázat 2FA
+ disabled: Blokováno
+ display_name: Zobrazované jméno
+ domain: Doména
+ edit: Upravit
+ email: E-mail
+ email_status: Stav e-mailu
+ enable: Povolit
+ enabled: Povoleno
+ feed_url: URL proudu
+ followers: Sledovatelé
+ followers_url: URL sledovatelů
+ follows: Sleduje
+ inbox_url: URL přijatých zpráv
+ ip: IP
+ location:
+ all: Vše
+ local: Místní
+ remote: Vzdálené
+ title: Umístění
+ login_status: Stav přihlášení
+ media_attachments: Mediální přílohy
+ memorialize: Změnit na "in memoriam"
+ moderation:
+ all: Vše
+ silenced: Utišen
+ suspended: Suspendován
+ title: Moderace
+ moderation_notes: Moderační poznámky
+ most_recent_activity: Nejnovější aktivita
+ most_recent_ip: Nejnovější IP
+ not_subscribed: Neodebírá
+ order:
+ alphabetic: Abecedně
+ most_recent: Nejnovější
+ title: Pořadí
+ outbox_url: URL odchozích zpráv
+ perform_full_suspension: Provést plnou suspenzaci
+ profile_url: URL profilu
+ promote: Povýšit
+ protocol: Protokol
+ public: Veřejný
+ push_subscription_expires: Odebírání PuSH expiruje
+ redownload: Obnovit avatar
+ remove_avatar: Odstranit avatar
+ resend_confirmation:
+ already_confirmed: Tento uživatel je již potvrzen
+ send: Znovu odeslat potvrzovací e-mail
+ success: Potvrzovací e-mail byl úspěšně odeslán!
+ reset: Resetovat
+ reset_password: Obnovit heslo
+ resubscribe: Znovu odebírat
+ role: Oprávnění
+ roles:
+ admin: Administrátor
+ moderator: Moderátor
+ staff: Personál
+ user: Uživatel
+ salmon_url: URL Salmon
+ search: Hledat
+ shared_inbox_url: URL sdílené schránky
+ show:
+ created_reports: Nahlášení vytvořené z tohoto účtu
+ report: nahlášení
+ targeted_reports: Nahlášení vytvořena o tomto účtu
+ silence: Utišit
+ statuses: Statusy
+ subscribe: Odebírat
+ title: Účty
+ unconfirmed_email: Nepotvrzený e-mail
+ undo_silenced: Zrušit utišení
+ undo_suspension: Zrušit suspenzaci
+ unsubscribe: Přestat odebírat
+ username: Uživatelské jméno
+ web: Web
+ action_logs:
+ actions:
+ assigned_to_self_report: "%{name} přidělil/a hlášení %{target} sobě"
+ change_email_user: "%{name} změnil/a e-mailovou adresu uživatele %{target}"
+ confirm_user: "%{name} potvrdil/a e-mailovou adresu uživatele %{target}"
+ create_custom_emoji: "%{name} nahrál/a nové emoji %{target}"
+ create_domain_block: "%{name} zablokoval/a doménu %{target}"
+ create_email_domain_block: "%{name} přidal/a e-mailovou doménu %{target} na černou listinu"
+ demote_user: "%{name} degradoval/a uživatele %{target}"
+ destroy_domain_block: "%{name} odblokoval/a doménu %{target}"
+ destroy_email_domain_block: "%{name} odebral/a e-mailovou doménu %{target} z černé listiny"
+ destroy_status: "%{name} odstranil/a status uživatele %{target}"
+ disable_2fa_user: "%{name} vypnul/a požadavek pro dvoufaktorovou autentikaci pro uživatele %{target}"
+ disable_custom_emoji: "%{name} zakázal/a emoji %{target}"
+ disable_user: "%{name} zakázal/a přihlašování pro uživatele %{target}"
+ enable_custom_emoji: "%{name} povolil/a emoji %{target}"
+ enable_user: "%{name} povolil/a přihlašování pro uživatele %{target}"
+ memorialize_account: '%{name} změnil/a účet %{target} na stránku "in memoriam"'
+ promote_user: "%{name} povýšil/a uživatele %{target}"
+ remove_avatar_user: "%{name} odstranil/a avatar uživatele %{target}"
+ reopen_report: "%{name} znovuotevřel/a nahlášení %{target}"
+ reset_password_user: "%{name} resetoval/a heslo uživatele %{target}"
+ resolve_report: "%{name} vyřešil/a nahlášení %{target}"
+ silence_account: "%{name} utišil/a účet uživatele %{target}"
+ suspend_account: "%{name} suspendoval/a účet uživatele %{target}"
+ unassigned_report: "%{name} odebral/a nahlášení %{target}"
+ unsilence_account: "%{name} odtišil/a účet uživatele %{target}"
+ unsuspend_account: "%{name} zrušil/a suspenzaci účtu uživatele %{target}"
+ update_custom_emoji: "%{name} aktualizoval/a emoji %{target}"
+ update_status: "%{name} aktualizoval/a status uživatele %{target}"
+ title: Záznam auditu
+ custom_emojis:
+ by_domain: Doména
+ copied_msg: Místní kopie emoji byla úspěšně vytvořena
+ copy: Kopírovat
+ copy_failed_msg: Nebylo možné vytvořit místní kopii tohoto emoji
+ created_msg: Emoji úspěšně vytvořeno!
+ delete: Smazat
+ destroyed_msg: Emoji úspěšně zničeno!
+ disable: Zakázat
+ disabled_msg: Emoji bylo úspěšně zakázáno
+ emoji: Emoji
+ enable: Povolit
+ enabled_msg: Emoji bylo úspěšně povoleno
+ image_hint: PNG až do 50KB
+ listed: Uvedené
+ new:
+ title: Přidat nové vlastní emoji
+ overwrite: Přepsat
+ shortcode: Zkratka
+ shortcode_hint: Alespoň 2 znaky, pouze alfanumerické znaky a podtržítka
+ title: Vlastní emoji
+ unlisted: Neuvedené
+ update_failed_msg: Nebylo možné aktualizovat toto emoji
+ updated_msg: Emoji úspěšně aktualizováno!
+ upload: Nahrát
+ dashboard:
+ backlog: opožděné úlohy
+ config: Konfigurace
+ feature_deletions: Smazání účtů
+ feature_invites: Pozvánky
+ feature_registrations: Registrace
+ feature_relay: Federovací most
+ features: Vlastnosti
+ hidden_service: Federace se skrytými službami
+ open_reports: otevřená hlášení
+ recent_users: Nedávní uživatelé
+ search: Fulltextové vyhledávání
+ single_user_mode: Režim jednoho uživatele
+ software: Software
+ space: Využití prostoru
+ title: Přehled
+ total_users: uživatelů celkem
+ trends: Trendy
+ week_interactions: interakcí tento týden
+ week_users_active: aktivních tento týden
+ week_users_new: uživatelů tento týden
+ domain_blocks:
+ add_new: Přidat nové
+ created_msg: Blokace domény se právě vyřizuje
+ destroyed_msg: Blokace domény byla zrušena
+ domain: Doména
+ new:
+ create: Vytvořit blokaci
+ hint: Blokace domény nezakáže vytváření účtových záznamů v databázi, ale bude na tyto účty zpětně a automaticky aplikovat specifické metody moderace.
+ severity:
+ desc_html: Funkce Utišit zneviditelní příspěvky z účtu komukoliv, kdo jej nesleduje. Funkce Suspendovat odstraní všechen obsah, média a profilová data účtu. Pro pouhé odmítnutí mediálních souborů použijte funkci Žádné .
+ noop: Žádné
+ silence: Utišit
+ suspend: Suspendovat
+ title: Nová doménová blokace
+ reject_media: Odmítat mediální soubory
+ reject_media_hint: Odstraní lokálně uložené soubory a odmítne jejich stažení v budoucnosti. Irelevantní pro suspenzace
+ severities:
+ noop: Žádné
+ silence: Utišit
+ suspend: Suspendovat
+ severity: Přísnost
+ show:
+ affected_accounts:
+ one: Jeden účet v databázi byl ovlivněn
+ other: "%{count} účtů v databázi byl ovlivněn"
+ retroactive:
+ silence: Odtišit všechny existující účty z této domény
+ suspend: Zrušit suspenzaci všech existujících účtů z této domény
+ title: Zrušit blokaci domény %{domain}
+ undo: Odvolat
+ title: Doménové blokace
+ undo: Odvolat
+ email_domain_blocks:
+ add_new: Přidat nový
+ created_msg: E-mailová doména úspěšně přidána na černou listinu
+ delete: Smazat
+ destroyed_msg: E-mailová doména úspěšně odstraněna z černé listiny
+ domain: Doména
+ new:
+ create: Přidat doménu
+ title: Nový e-mail pro zablokování
+ title: Černá listina e-mailů
+ instances:
+ account_count: Známé účty
+ domain_name: Doména
+ reset: Resetovat
+ search: Hledat
+ title: Známé instance
+ invites:
+ filter:
+ all: Vše
+ available: Dostupné
+ expired: Vypršelé
+ title: Filtrovat
+ title: Pozvánky
+ relays:
+ add_new: Přidat nový most
+ description_html: "Federovací most je přechodný server, který vyměňuje velká množství veřejných tootů mezi servery, které z něj odebírají a poblikují na něj. Může pomoci malým a středně velkým serverům objevovat obsah z fediverse , což by jinak vyžadovalo, aby místní uživatelé manuálně sledovali jiné lidi na vzdálených serverech."
+ enable_hint: Je-li tohle povoleno, začne váš server odebírat všechny veřejné tooty z tohoto mostu a odesílat na něj své vlastní veřejné tooty.
+ inbox_url: URL mostu
+ setup: Nastavit připojení k mostu
+ status: Stav
+ title: Mosty
+ report_notes:
+ created_msg: Poznámka o nahlášení úspěšně vytvořena!
+ destroyed_msg: Poznámka o nahlášení úspěšně smazána!
+ reports:
+ account:
+ note: poznámka
+ report: nahlášení
+ action_taken_by: Akci vykonal/a
+ are_you_sure: Jste si jistý/á?
+ assign_to_self: Přidělit ke mně
+ assigned: Přiřazený moderátor
+ comment:
+ none: Žádné
+ created_at: Nahlášené
+ id: ID
+ mark_as_resolved: Označit jako vyřešené
+ mark_as_unresolved: Označit jako nevyřešené
+ notes:
+ create: Přidat poznámku
+ create_and_resolve: Vyřešit s poznámkou
+ create_and_unresolve: Znovu otevřít s poznámkou
+ delete: Smazat
+ placeholder: Popište, jaké akce byly vykonány, nebo jakékoliv jiné související aktuality...
+ reopen: Znovu otevřít nahlášení
+ report: 'Nahlásit #%{id}'
+ report_contents: Obsah
+ reported_account: Nahlášený účet
+ reported_by: Nahlášeno uživatelem
+ resolved: Vyřešeno
+ resolved_msg: Nahlášení úspěšně vyřešeno!
+ silence_account: Utišit účet
+ status: Stav
+ suspend_account: Suspendovat účet
+ target: Cíl
+ title: Nahlášení
+ unassign: Odebrat
+ unresolved: Nevyřešeno
+ updated_at: Aktualizováno
+ view: Zobrazit
+ settings:
+ activity_api_enabled:
+ desc_html: Počty lokálně publikovaných statusů, aktivních uživatelů a nových registrací, v týdenních intervalech
+ title: Publikovat hromadné statistiky o uživatelské aktivitě
+ bootstrap_timeline_accounts:
+ desc_html: Je-li uživatelskch jmen více, oddělujte je čárkami. Lze zadat pouze místní a odemknuté účty. Je-li tohle prázdné, jsou výchozí hodnotou všichni místní administrátoři.
+ title: Výchozí sledování pro nové uživatele
+ contact_information:
+ email: Pracovní e-mail
+ username: Uživatelské jméno kontaktu
+ hero:
+ desc_html: Zobrazuje se na hlavní stránce. Doporučuje se rozlišení alespoň 600x100px. Pokud toto není nastavené, bude zobrazena miniatura instance
+ title: Hlavní obrázek
+ peers_api_enabled:
+ desc_html: Domény, na které tato instanve narazila ve fediverse
+ title: Zveřejnit seznam objevených instancí
+ preview_sensitive_media:
+ desc_html: Náhledy odkazů na jiných stránkách budou zobrazeny i pokud jsou media označena jako citlivá
+ title: Zobrazovat v náhledech OpenGraph i citlivá média
+ registrations:
+ closed_message:
+ desc_html: Zobrazí se na hlavní stránce, jsou-li registrace uzavřeny. Můžete použít i HTML značky
+ title: Zpráva o uzavřených registracích
+ deletion:
+ desc_html: Dovolit každému smazání svého účtu
+ title: Zpřístupnit smazání účtu
+ min_invite_role:
+ disabled: Nikdo
+ title: Povolit pozvánky od
+ open:
+ desc_html: Povolit každému vytvořit si účet
+ title: Zpřístupnit registraci
+ show_known_fediverse_at_about_page:
+ desc_html: Je-li toto zapnuto, zobrazí se v náhledu tooty ze všech známých serverů na fediverse. Jinak budou zobrazeny pouze místní tooty.
+ title: Zobrazit celou známou fediverse na náhledu časové osy
+ show_staff_badge:
+ desc_html: Zobrazit na stránce uživatele odznak člena personálu
+ title: Zobrazit odznak personálu
+ site_description:
+ desc_html: Úvodní odstavec na hlavní straně a v meta značkách. Můžete zde používat HTML značky, hlavně <a>
a <em>
.
+ title: Popis instance
+ site_description_extended:
+ desc_html: Dobré místo pro vaše pravidla, pokyny a jiné věci, které vaši instanci odlišují od ostatních. Lze použít HTML značky
+ title: Vlastní doplňujísí informace
+ site_terms:
+ desc_html: Můžete si napsat vlastní zásady soukromí, podmínky používání či jiné legality. Můžete použít HTML značky
+ title: Vlastní podmínky používání
+ site_title: Název instance
+ thumbnail:
+ desc_html: Používáno pro náhledy přes OpenGraph a API. Doporučuje se rozlišení 1200x630px
+ title: Miniatura instance
+ timeline_preview:
+ desc_html: Zobrazit na hlavní straně veřejnou časovou osu
+ title: Náhled časové osy
+ title: Nastavení stránky
+ statuses:
+ back_to_account: Zpět na stránku účtu
+ batch:
+ delete: Vymazat
+ nsfw_off: Označit, že není citlivý
+ nsfw_on: Označit jako citlivý
+ failed_to_execute: Nepodařilo se vykonat
+ media:
+ title: Média
+ no_media: Žádná média
+ title: Statusy účtů
+ with_media: S médii
+ subscriptions:
+ callback_url: Zpáteční URL
+ confirmed: Potvrzeno
+ expires_in: Vyprší v
+ last_delivery: Poslední doručení
+ title: WebSub
+ topic: Téma
+ title: Administrace
+ admin_mailer:
+ new_report:
+ body: "%{reporter} nahlásil/a uživatele %{target}"
+ body_remote: Někdo z %{domain} nahlásil uživatele %{target}
+ subject: Nové nahlášení pro %{instance} (#%{id})
+ application_mailer:
+ notification_preferences: Změnit volby e-mailu
+ salutation: "%{name},"
+ settings: 'Změnit volby e-mailu: %{link}'
+ view: 'Zobrazit:'
+ view_profile: Zobrazit profil
+ view_status: Zobrazit status
+ applications:
+ created: Aplikace úspěšně vytvořena
+ destroyed: Aplikace úspěšně smazána
+ invalid_url: Zadaná adresa URL je neplatná
+ regenerate_token: Znovu vygenerovat přístupový token
+ token_regenerated: Přístupový token byl úspěšně vygenerován
+ warning: Buďte s těmito daty velmi opatrní. Nikdy je s nikým nesdílejte!
+ your_token: Váš přístupový token
+ auth:
+ agreement_html: Registrací souhlasíte s následováním pravidel této instance a našich podmínek používání .
+ change_password: Heslo
+ confirm_email: Potvrdit e-mail
+ delete_account: Odstranit účet
+ delete_account_html: Chcete-li odstranit svůj účet, pokračujte zde . Budete požádán/a o potvrzení.
+ didnt_get_confirmation: Neobdržel/a jste pokyny pro potvrzení?
+ forgot_password: Zapomněl/a jste heslo?
+ invalid_reset_password_token: Token na obnovu hesla je buď neplatný, nebo vypršel. Prosím vyžádejte si nový.
+ login: Přihlásit
+ logout: Odhlásit
+ migrate_account: Přesunout se na jiný účet
+ migrate_account_html: Chcete-li přesměrovat tento účet na jiný, můžete to nastavit zde .
+ or: nebo
+ or_log_in_with: Nebo se přihlaste pomocí
+ providers:
+ cas: CAS
+ saml: SAML
+ register: Registrovat
+ register_elsewhere: Registrovat na jiném serveru
+ resend_confirmation: Znovu odeslat pokyny pro potvrzení
+ reset_password: Obnovit heslo
+ security: Zabezpečení
+ set_new_password: Nastavit nové heslo
+ authorize_follow:
+ already_following: Tento účet již sledujete
+ error: Při hledání vzdáleného účtu bohužel nastala chyba
+ follow: Sledovat
+ follow_request: 'Poslal/a jste žádost o sledování uživateli:'
+ following: 'Podařilo se! Nyní sledujete uživatele:'
+ post_follow:
+ close: Nebo můžete toto okno klidně zavřít.
+ return: Zobrazit profil uživatele
+ web: Přejít na web
+ title: Sledovat uživatele %{acct}
+ datetime:
+ distance_in_words:
+ about_x_hours: "%{count} hod"
+ about_x_months: "%{count} měsíců"
+ about_x_years: "%{count} let"
+ almost_x_years: "%{count} let"
+ half_a_minute: Právě teď
+ less_than_x_minutes: "%{count} min"
+ less_than_x_seconds: Právě teď
+ over_x_years: "%{count} let"
+ x_days: "%{count} dní"
+ x_minutes: "%{count} min"
+ x_months: "%{count} mesíců"
+ x_seconds: "%{count} s"
+ deletes:
+ bad_password_msg: Dobrý pokus, hackeři! Nesprávné heslo
+ confirm_password: Zadejte svoje současné heslo pro ověření vaší identity
+ description_html: Tímto trvale a nenávratně odstraníte obsah z vašeho účtu a deaktivuje ho. Vaše uživatelské jméno zůstane rezervované pro zabránění budoucím napodobováním.
+ proceed: Odstranit účet
+ success_msg: Váš účet byl úspěšně odstraněn
+ warning_html: Pouze vymazání obsahu z této konkrétní instance je zaručeno. Obsah, který byl široce sdílen, po sobě pravděpodobně zanechá stopy. U offline serverů a serverů, které vaše aktualizace již neodebírají, nebudou databáze aktualizovány.
+ warning_title: Dostupnost rozšířeného obsahu
+ errors:
+ '403': Nemáte povolení zobrazit tuto stránku.
+ '404': Stránka, kterou hledáte, neexistuje.
+ '410': Stránka, kterou hledáte, již neexistuje.
+ '422':
+ content: Bezpečnostní ověření selhalo. Neblokujete cookoes?
+ title: Bezpečnostní ověření selhalo
+ '429': Příliš mnoho požadavků
+ '500':
+ content: Omlouváme se, ale něco se pokazilo u nás.
+ title: Tato stránka není správná
+ noscript_html: Pro použití webové aplikace Mastodon prosím povolte JavaScript. Nebo zkuste jednu z nativních aplikací pro Mastodon pro vaši platformu.
+ exports:
+ archive_takeout:
+ date: Datum
+ download: Stáhnout svůj archiv
+ hint_html: Můžete si vyžádat archiv vašich tootů a nahraných médií . Exportovaná data budou ve formátu ActivityPub a budou čitelné kterýmkoliv kompatibilním softwarem. Archiv si můžete vyžádat každých 7 dní.
+ in_progress: Kompiluji váš archiv...
+ request: Vyžádat svůj archiv
+ size: Velikost
+ blocks: Blokujete
+ csv: CSV
+ follows: Sledujete
+ mutes: Ignorujete
+ storage: Úložisko médií
+ filters:
+ contexts:
+ home: Domovská časová osa
+ notifications: Oznámení
+ public: Veřejný časové osy
+ thread: Konverzace
+ edit:
+ title: Upravit filtr
+ errors:
+ invalid_context: Nebylo poskytnuto nic, nebo má neplatný kontext
+ invalid_irreversible: Nezvratné filtrování funguje pouze v souvislosti s domovskou osou či oznámeními
+ index:
+ delete: Smazat
+ title: Filtry
+ new:
+ title: Přidat nový filtr
+ followers:
+ domain: Doména
+ explanation_html: Chcete-li zaručit soukromí vašich statusů, musíte mít na vědomí, kdo vás sleduje. Vaše soukromé statusy jsou doručeny na všechny instance, kde máte sledovatele . Nejspíš si je budete chtít zkontrolovat a odstranit sledovatele na instancích, jejichž personálu či softwaru nedůvěřujete s respektováním vašeho soukromí.
+ followers_count: Počet sledovatelů
+ lock_link: Zamkněte svůj účet
+ purge: Odstranit ze sledovatelů
+ success:
+ one: V průběhu utišování sledovatelů z jedné domény...
+ other: V průběhu utišování sledovatelů z %{count} domén...
+ true_privacy_html: Berte prosím na vědomí, že skutečného soukromí se dá dosáhnout pouze za pomoci end-to-end šifrování .
+ unlocked_warning_html: Kdokoliv vás může sledovat a okamžitě vidět vaše soukromé statusy. %{lock_link}, abyste mohl/a zkontrolovat a odmítnout sledovatele.
+ unlocked_warning_title: Váš účet není zamknutý
+ generic:
+ changes_saved_msg: Změny byly úspěšně uloženy!
+ save_changes: Uložit změny
+ validation_errors:
+ one: Něco ještě není úplně v pořádku! Prosím zkontrolujte chybu níže
+ other: Něco ještě není úplně v pořádku! Prosím zkontrolujte %{count} chyb níže
+ imports:
+ preface: Můžete importovat data, která jste exportoval/a z jiné instance, jako například seznam lidí, které sledujete či blokujete.
+ success: Vaše data byla úspěšně nahrána a nyní budou zpracována v daný čas
+ types:
+ blocking: Seznam blokovaných
+ following: Seznam sledovaných
+ muting: Seznam ignorovaných
+ upload: Nahrát
+ in_memoriam_html: Navždy budeme vzpomínat.
+ invites:
+ delete: Deaktivovat
+ expired: Vypršelé
+ expires_in:
+ '1800': 30 minut
+ '21600': 6 hodin
+ '3600': 1 hodina
+ '43200': 12 hodin
+ '604800': 1 týden
+ '86400': 1 den
+ expires_in_prompt: Nikdy
+ generate: Vygenerovat
+ invited_by: 'Byl/a jste pozván/a uživatelem:'
+ max_uses:
+ one: 1 použití
+ other: "%{count} použití"
+ max_uses_prompt: Bez limitu
+ prompt: Vygenerujte a sdílejte s ostatními odkazy a umožněte jim přístup na tuto instanci
+ table:
+ expires_at: Vyprší
+ uses: Použití
+ title: Pozvěte lidi
+ lists:
+ errors:
+ limit: Dosáhl/a jste maximálního počtu seznamů
+ media_attachments:
+ validations:
+ images_and_video: Ke statusu, který již obsahuje obrázky, nelze připojit video
+ too_many: Nelze připojit více než 4 soubory
+ migrations:
+ acct: přezdívka@doména nového účtu
+ currently_redirecting: 'Váš profil má nastaveno přesměrování na:'
+ proceed: Uložit
+ updated_msg: Vaše nastavení migrace účtu bylo úspěšně aktualizováno!
+ moderation:
+ title: Moderace
+ notification_mailer:
+ digest:
+ action: Zobrazit všechna oznámení
+ body: Zde najdete stručný souhrn zpráv, které jste zmeškal/a od vaší poslední návštěvy %{since}
+ mention: "%{name} vás zmínil/a v:"
+ new_followers_summary:
+ one: Navíc jste získal/a jednoho nového sledovatele, zatímco jste byl/a pryč! Hurá!
+ other: Navíc jste získal/a %{count} nových sledovatelů, zatímco jste byl/a pryč! Hurá!
+ subject:
+ one: "Jedno nové oznámení od vaší poslední návštěvy \U0001F418"
+ other: "%{count} nových oznámení od vaší poslední návštěvy \U0001F418"
+ title: Ve vaší absenci...
+ favourite:
+ body: 'Váš status si oblíbil/a %{name}:'
+ subject: "%{name} si oblíbil/a váš status"
+ title: Nové oblíbení
+ follow:
+ body: "%{name} vás nyní sleduje!"
+ subject: "%{name} vás nyní sleduje"
+ title: Nový sledovatel
+ follow_request:
+ action: Spravovat žádosti o sledování
+ body: "%{name} žádá o povolení vás následovat"
+ subject: 'Čekající sledovatel: %{name}'
+ title: Nová žádost o sledování
+ mention:
+ action: Odpovědět
+ body: 'Byl/a jste zmíněn/a uživatelem %{name} v:'
+ subject: Byl/a jste zmíněn/a uživatelem %{name}
+ title: Nová zmínka
+ reblog:
+ body: 'Váš status byl boostnutý uživatelem %{name}:'
+ subject: "%{name} boostnul/a váš status"
+ title: Nové boostnutí
+ number:
+ human:
+ decimal_units:
+ format: "%n %u"
+ units:
+ billion: mld
+ million: mil
+ quadrillion: bld
+ thousand: tis
+ trillion: T
+ pagination:
+ newer: Novější
+ next: Starší
+ older: Starší
+ prev: Před
+ truncate: "…"
+ preferences:
+ languages: Jazyky
+ other: Ostatní
+ publishing: Publikování
+ web: Web
+ remote_follow:
+ acct: Napište svou přezdívku@doménu, ze které chcete sledovat
+ missing_resource: Nemůžeme najít požadované přesměrovací URL pro váš účet
+ no_account_html: Ještě nemáte účet? Můžete se registrovat zde
+ proceed: Pokračujte pro sledování
+ prompt: 'Budete sledovat:'
+ remote_unfollow:
+ error: Chyba
+ title: Nadpis
+ unfollowed: Už nesledujete
+ sessions:
+ activity: Nejnovější aktivita
+ browser: Prohlížeč
+ browsers:
+ alipay: Alipay
+ blackberry: Blackberry
+ chrome: Chrome
+ edge: Microsoft Edge
+ electron: Electron
+ firefox: Firefox
+ generic: Neznámý prohlížeč
+ ie: Internet Explorer
+ micro_messenger: MicroMessenger
+ nokia: Nokia S40 Ovi Browser
+ opera: Opera
+ otter: Otter
+ phantom_js: PhantomJS
+ qq: QQ Browser
+ safari: Safari
+ uc_browser: UCBrowser
+ weibo: Weibo
+ current_session: Aktuální relace
+ description: "%{browser} na %{platform}"
+ explanation: Toto jsou webové prohlížeče aktuálně přihlášené na váš účet Mastodon.
+ ip: IP
+ platforms:
+ adobe_air: Adobe Air
+ android: Android
+ blackberry: Blackberry
+ chrome_os: Chrome OS
+ firefox_os: Firefox OS
+ ios: iOS
+ linux: Linux
+ mac: Mac
+ other: neznámé platformě
+ windows: Windows
+ windows_mobile: Windows Mobile
+ windows_phone: Windows Phone
+ revoke: Zamítnout
+ revoke_success: Relace úspěšně zamítnuta
+ title: Relace
+ settings:
+ authorized_apps: Autorizované aplikace
+ back: Zpět na Mastodon
+ delete: Smazání účtu
+ development: Vývoj
+ edit_profile: Upravit profil
+ export: Export dat
+ followers: Autorizovaní sledovatelé
+ import: Import
+ migrate: Přesunutí účtu
+ notifications: Oznámení
+ preferences: Předvolby
+ settings: Nastavení
+ two_factor_authentication: Dvoufaktorové ověřování
+ your_apps: Vaše aplikace
+ statuses:
+ attached:
+ description: 'Přiloženo: %{attached}'
+ image:
+ one: "%{count} obrázek"
+ other: "%{count} obrázků"
+ video:
+ one: "%{count} video"
+ other: "%{count} videí"
+ boosted_from_html: Boostnuto z %{acct_link}
+ content_warning: 'Varování o obsahu: %{warning}'
+ disallowed_hashtags:
+ one: 'obsahuje nepovolený hashtag: %{tags}'
+ other: 'obsahuje nepovolené hashtagy: %{tags}'
+ language_detection: Zjistit jazyk automaticky
+ open_in_web: Otevřít na webu
+ over_character_limit: limit %{max} znaků byl překročen
+ pin_errors:
+ limit: Už jste si připnul/a maximální počet tootů
+ ownership: Nelže připnout toot někoho jiného
+ private: Nelze připnout neveřejné tooty
+ reblog: Nelze připnout boostnutí
+ show_more: Zobrazit více
+ title: '%{name}: "%{quote}"'
+ visibilities:
+ private: Pouze pro sledovatele
+ private_long: Zobrazit pouze sledovatelům
+ public: Veřejné
+ public_long: Všichni mohou vidět
+ unlisted: Neuvedené
+ unlisted_long: Všichni mohou vidět, ale není zahrnut ve veřejných časových osách
+ stream_entries:
+ pinned: Připnutý toot
+ reblogged: boostnutý
+ sensitive_content: CItlivý obsah
+ terms:
+ body_html: |
+ Zásady soukromí
+ Jaké informace sbíráme?
+
+
+ Základní informace o účtu : Pokud se na tomto serveru zaregistrujete, můžeme vás požádat o zadání uživatelského jména, e-mailové adresy a hesla. Můžete také zadat dodatečné profilové informace, jako například zobrazované jméno a krátký životopis, a nahrát si profilovou fotografii a hlavičkový obrázek. Uživatelské i zobrazované jméno, životopis, profilová fotografie a hlavičkový obrázek jsou vždy uvedeny veřejně.
+ Příspěvky, sledovatelé a další veřejné informace : Seznam lidí, které sledujete, je uveden veřejně, totéž platí i pro vaše sledovatele. Když sem nahrajete zprávu, bude uloženo datum a čas, společně s aplikací, ze které jste zprávu odeslali. Zprávy mohou obsahovat mediální přílohy, jako jsou obrázky a videa. Veřejné a nezobrazované příspěvky jsou dostupné veřejně. Pokud na vašem profilu uvedete příspěvek, je to také veřejně dostupná informace. Vaše příspěvky jsou doručeny vašim sledovatelům, což v některých případech znamená, že budou doručeny na různé servery, na kterých budou ukládány kopie. Pokud příspěvky smažete, bude tohle taktéž doručeno vašim sledovatelům. Akce znovusdílení nebo oblíbení jiného příspěvku je vždy veřejná.
+ Příspěvky přímé a pouze pro sledovatele : Všechny příspěvky jsou uloženy a zpracovány na serveru. Příspěvky pouze pro sledovatele jsou doručeny vašim sledovatelům a uživateům v nich zmíněných a přímé příspěvky jsou doručeny pouze uživatelům v nich zmíněných. V některých případech tohle znamená, že budou doručeny na různé servery, na kterých budou ukládány kopie. Snažíme se omezit přístup k těmto příspěvkům pouze na autorizované uživatele, ovšem jiné servery tak nemusejí učinit. Proto je důležité posoudit servery, ke kterým vaši sledovatelé patří. V nastavení si můžete zapnout volbu pro manuální schvalování či odmítnutí nových sledovatelů. Prosím mějte na paměti, že operátoři tohoto serveru a kteréhokoliv přijímacího serveru mohou tyto zprávy vidět a příjemci mohou vytvořit jejich snímek, zkopírovat je, nebo je jinak sdílet. Nesdílejte přes Mastodon jakékoliv nebezpečné informace.
+ IP adresy a další metadata : Když se přihlásíte, zaznamenáváme IP adresu, ze které se přihlašujete, jakožto i název vašeho webového prohlížeče. Všechny vaše webové relace jsou v nastavení přístupné k vašemu posouzení a odvolání. Nejpozdější IP adresa použita je uložena maximálně do 12 měsíců. Můžeme také uchovávat serverové záznamy, které obsahují IP adresy každého požadavku odeslaného na náš server.
+
+
+
+
+ Na co používáme vaše informace?
+
+ Jakékoliv informace, které sbíráme, mohou být použity následujícími způsoby:
+
+
+ K poskytnutí základních funkcí Mastodonu. Interagovat s obsahem od jiných lidí a přispívat svým vlastním obsahem můžete pouze, pokud jste přihlášeni. Můžete například sledovat jiné lidi a zobrazit si jejich kombinované příspěvky ve vaší vlastní personalizované časové ose.
+ Pro pomoc moderaci komunity, například porovnáním vaší IP adresy s dalšími známými adresami pro určení vyhýbání se zákazům či jiných přestupků.
+ E-mailová adresa, kterou nám poskytnete, může být použita pro zasílání informací, oznámení o interakcích jiných uživatelů s vaším obsahem nebo přijatých zprávách a k odpovědím na dotazy a/nebo další požadavky či otázky.
+
+
+
+
+ Jak vaše informace chráníme?
+
+ Implenentujeme různá bezpečnostní opatření pro udržování bezpečnosti vašich osobních dat, když zadáváte, odesíláte, či přistupujete k vašim osobním datům. Mimo jiné je vaše relace v prohlížeči, jakož i provoz mezi vašimi aplikacemi a API, zabezpečena pomocí SSL, a vaše heslo je hashováno pomocí silného jednosměrného algoritmu. Pro větší zabezpečení vašeho účtu můžete povolit dvoufaktorovou autentikaci.
+
+
+
+ Jaké jsou naše zásady o uchovávání údajů?
+
+ Budeme se snažit:
+
+
+ Uchovávat serverové záznamy obsahující IP adresy všech požadavků pro tento server, pokud se takové záznamy uchovávají, maximálně 90 dní.
+ Uchovávat IP adresy související s registrovanými uživateli maximálně 12 měsíců.
+
+
+ Kdykoliv si můžete vyžádat a stáhnout archiv vašeho obsahu, včetně vašich příspěvků, mediálních příloh, profilové fotografie a hlavičkového obrázku.
+
+ Kdykoliv můžete nenávratně smazat váš účet.
+
+
+
+ Používáme cookies?
+
+ Ano. Cookies jsou malé soubory, které stránka nebo její poskytovatel uloží na pevný disk vašeho počítače (pokud to dovolíte). Tyto cookies umožňují stránce rozpoznat váš prohlížeč a, pokud máte registrovaný účet, přidružit ho s vaším registrovaným účtem.
+
+ POužíváme cookies pro pochopení a ukládání vašich předvoleb pro budoucí návštěvy.
+
+
+
+ Zveřejňujeme jakékoliv informace třetím stranám?
+
+ Vaše osobně identifikovatelné informace neprodáváme, neobchodujeme s nimi, ani je nijak nepřenášíme vnějším stranám. Do tohoto se nepočítají důvěryhodné třetí strany, které nám pomáhají provozovat naši stránku, podnikat, nebo vás obsluhovat, pokud tyto strany souhlasí se zachováním důvěrnosti těchto informací. Můžeme také uvolnit vaše informace, pokud věříme, že je to nutné pro soulad se zákonem, prosazování našich zásad, nebo ochranu práv, majetku, či bezpečnost nás či ostatních.
+
+ Váš veřejný obsah může být stažen jinými servery na síti. Vaše příspěvky veřejné a pouze pro sledovatele budou doručeny na servery vašich sledovatelů a přímé zprávy budou doručeny na servery příjemců, pokud jsou tito sledovatelé nebo příjemci zaregistrováni na jiném serveru, než je tento.
+
+ Když autorizujete aplikaci, aby používala váš účet, může, v závislosti na rozsahu oprávnění, které jí udělíte, přistupovat k vašim veřejným profilovým informacím, seznamu lidí, které sledujete, vašim sledovatelům, vašim seznamům, všem vašim příspěvkům a příspěvkům, které jste si oblíbili. Aplikace nikdy nemohou získat vaši e-mailovou adresu či heslo.
+
+
+
+ Používání stránky dětmi
+
+ Pokud se tento server nachází v EU nebo EHP: Naše stránka, produkty a služby jsou všechny směřovány na lidi, kterým je alespoň 16 let. Pokud je vám méně než 16, dle požadavků nařízení GDPR (Obecné nařízení o ochě sobních údajů )
+
+ Pokud se tento server nachází v USA: Naše stránka, produkty a služby jsou všechny směřovány na lidi, kterým je alespoň 13 let. Pokud je vám méně než 13, dle požadavků zákona COPPA (Children's Online Privacy Protection Act ) tuto stránku nepoužívejte.
+
+ Právní požadavky mohou být jiné, pokud se tento server nachází v jiné jurisdikci.
+
+
+
+ Změny v našich zásadách soukromí
+
+ Rozhodneme-li se naše zásady soukromí změnit, zveřejníme tyto změny na této stránce.
+
+ Tento dokument je dostupný pod licencí CC-BY-SA. Byl naposledy aktualizován 7 března 2018.
+
+ Původně adaptováno ze zásad soukromí Discourse .
+ title: Podmínky používání a zásady soukromí %{instance}
+ themes:
+ contrast: Vysoký kontrast
+ default: Mastodon
+ mastodon-light: Mastodon (světlý)
+ time:
+ formats:
+ default: "%d. %b %Y, %H:%M"
+ two_factor_authentication:
+ code_hint: Pro potvrzení zadejte kód vygenerovaný vaší autentikační aplikací
+ description_html: Povolíte-li dvoufaktorové ověřování , budete při přihlášení potřebovat telefon, který vám vygeneruje přístupové tokeny, které musíte zadat.
+ disable: Zakázat
+ enable: Povolit
+ enabled: Dvoufaktorové ověřování je povoleno
+ enabled_success: Dvoufaktorové ověřování bylo úspěšně povoleno
+ generate_recovery_codes: Vygenerovat záložní kódy
+ instructions_html: "Naskenujte tento QR kód Google Authenticatorem nebo jinou TOTP aplikací na vašem telefonu . Od teď bude tato aplikace generovat tokeny, které budete muset zadat při přihlášení."
+ lost_recovery_codes: Záložní kódy vám dovolí dostat se k vašemu účtu, pokud ztratíte telefon. Ztratíte-li záložní kódy, můžete je zde znovu vygenerovat. Vaše staré záložní kódy budou zneplatněny.
+ manual_instructions: 'Nemůžete-li oskenovat QR kód a je potřebovat ho zadat ručně, zde je tajemství v prostém textu:'
+ recovery_codes: Záložní kódy pro obnovu
+ recovery_codes_regenerated: Záložní kódy byly úspěšně znovu vygenerované
+ recovery_instructions_html: Ztratíte-li někdy přístup k vašemu telefonu, můžete k získání přístupu k účtu použít jeden ze záložních kódů. Uchovávejte tyto kódy v bezpečí . Můžete si je například vytisknout a uložit je mezi jiné důležité dokumenty.
+ setup: Nastavit
+ wrong_code: Zadaný kód byl neplatný! Je serverový čas a čas na zařízení správný?
user_mailer:
+ backup_ready:
+ explanation: Vyžádal/a jste si úplnou zálohu svého účtu Mastodon. Nyní je připravena ke stažení!
+ subject: Váš archiv je připraven ke stažení
+ title: Stažení archivu
welcome:
+ edit_profile_action: Nastavit profil
+ edit_profile_step: Můžete si přizpůsobit svůj profil nahráním avataru a obrázku na hlavičce, změnou zobrazovaného jména a dalších. Chcete-li posoudit nové sledovatele předtím, než vás mohou sledovat, můžete svůj účet uzamknout.
+ explanation: Zde je pár tipů na začátek
+ final_action: Začněte přispívat
+ final_step: 'Začněte psát! I když nemáte sledovatele, mohou vaše zprávy vidět jiní lidé, například na místní časové ose a mezi hashtagy. Můžete se ostatním představit pomocí hashtagu #introductions.'
+ full_handle: Vaše celá adresa profilu
+ full_handle_hint: Tohle je, co byste řekl/a svým přátelům, aby vám mohli posílat zprávy nebo vás sledovat z jiné instance.
+ review_preferences_action: Změnit nastavení
+ review_preferences_step: Nezapomeňte si nastavit své volby, například jaké e-maily chcete přijímat či jak soukromé mají být vaše příspěvky ve výchozím stavu. Nemáte-li epilepsii, můžete si nastavit automatické přehrávání obrázků GIF.
+ subject: Vítejte na Mastodonu
+ tip_bridge_html: Pokud přicházíte z Twitteru, můžete najít vaše přátele na Mastodonu pomocí mostové aplikace . Funguje ovšem pouze, pokud ji oni někdy také použili!
+ tip_federated_timeline: Federovaná časová osa je náhled celé sítě Mastodon. Zahrnuje ovšem pouze lidi, které sledují vaši sousedé, takže není úplná.
+ tip_following: Administrátora/y serveru sledujete automaticky. Chcete-li najít další zajímavé lidi, podívejte se na místní a federované časové osy.
+ tip_local_timeline: Místní časová osa je náhled lidí na %{instance}. Toto jsou vaši nejbližší sousedé!
+ tip_mobile_webapp: Pokud vám váš mobilní prohlížeč nabídne přidat si Mastodon na vaši domovskou obrazovku, můžete dostávat oznámení. V mnoha ohledech to funguje jako nativní aplikace!
tips: Tipy
title: Vítejte na palubě, %{name}!
users:
invalid_email: E-mailová adresa je neplatná
+ invalid_otp_token: Neplatný kód pro dvoufaktorovou autentikaci
+ otp_lost_help_html: Pokud jste ztratil/a přístup k oběma, můžete se spojit %{email}
+ seamless_external_login: Jste přihlášen/a přes externí službu, nastavení hesla a e-mailu proto nejsou dostupná.
signed_in_as: 'Přihlášen/a jako:'
diff --git a/config/locales/da.yml b/config/locales/da.yml
index a66b72541..4c7f0f550 100644
--- a/config/locales/da.yml
+++ b/config/locales/da.yml
@@ -509,6 +509,9 @@ da:
action: Se alle notifikationer
mention: "%{name} nævnte dig i:"
title: Mens du var væk...
+ favourite:
+ body: 'Din status blev favoriseret af %{name}:'
+ subject: "%{name} favoriserede din status"
follow:
body: "%{name} følger dig nu!"
subject: "%{name} følger dig nu"
@@ -536,18 +539,22 @@ da:
preferences:
languages: Sprog
other: Andet
+ publishing: Offentligører
web: Web
remote_unfollow:
error: Fejl
title: Titel
unfollowed: Følger ikke længere
sessions:
+ activity: Sidste aktivitet
+ browser: Browser
browsers:
blackberry: Blackberry OS
chrome: Google Chrome
firefox: Mozilla Firefox
generic: Ukendt browser
ie: IE
+ safari: Apple Safari
description: "%{browser} på %{platform}"
ip: IP
platforms:
@@ -581,7 +588,9 @@ da:
content_warning: 'Advarsel om indhold: %{warning}'
language_detection: Opfang automatisk sprog
pin_errors:
+ limit: Du har allerede fastgjort det maksimale antal trut
ownership: Dun kan ikke fastgøre en anden persons toot
+ private: Ikke offentlige trut kan ikke blive fastgjort
show_more: Vis mere
title: '%{name}: "%{quote}"'
visibilities:
diff --git a/config/locales/devise.cs.yml b/config/locales/devise.cs.yml
index adaa40835..19593cbac 100644
--- a/config/locales/devise.cs.yml
+++ b/config/locales/devise.cs.yml
@@ -8,3 +8,35 @@ cs:
failure:
already_authenticated: Již jste přihlášen/a.
inactive: Váš účet ještě není aktivován.
+ invalid: Neplatné %{authentication_keys} nebo heslo.
+ last_attempt: Máte ještě jeden pokus, než bude váš účet uzamčen.
+ locked: Váš účet je uzamčen.
+ not_found_in_database: Neplatné %{authentication_keys} nebo heslo.
+ timeout: Vaše relace vypršela. Pro pokračování se prosím přihlaste znovu.
+ unauthenticated: Před pokračováním se musíte přihlásit nebo registrovat.
+ unconfirmed: Před pokračováním musíte potvrdit svůj e-mail.
+ mailer:
+ confirmation_instructions:
+ action: Potvrdit e-mailovou adresu
+ explanation: S touto e-mailovou adresou jste si vytvořil/a účet na %{host}. K jeho aktivaci vám zbývá jedno kliknutí. Pokud jste to nebyl/a vy, ignorujte této e-mail.
+ extra_html: Prosím podívejte se také na pravidla této instance a naše podmínky používání .
+ subject: 'Mastodon: Potvrzovací instrukce pro %{instance}'
+ title: Potvrďte e-mailovou adresu
+ email_changed:
+ explanation: 'E-mailová adresa vašeho účtu byla změněna na:'
+ extra: Pokud jste si e-mail nezměnil/a, je pravděpodobné, že někdo jiný získal přístup k vašemu účtu. Prosím změňte si okamžitě heslo, nebo, pokud se nemůžete na účet přihlásit, kontaktujte administrátora instance.
+ subject: 'Mastodon: E-mail byl změněn'
+ title: Nová e-mailová adresa
+ password_change:
+ explanation: Heslo k vašemu účtu bylo změněno.
+ extra: Pokud jste si heslo nezměnil/a, je pravděpodobné, že někdo jiný získal přístup k vašemu účtu. Prosím změňte si okamžitě heslo, nebo, pokud se nemůžete na účet přihlásit, kontaktujte administrátora instance.
+ subject: 'Mastodon: Heslo bylo změněno'
+ title: Heslo bylo změněno
+ reconfirmation_instructions:
+ explanation: Potvrďte novou adresu pro změnu e-mailu.
+ extra: Pokud jste tuto akci nevyžádal/a vy, prosím ignorujte tento e-mail. E-mailová adresa nebude změněna, dokud nepřejdete na výše uvedenou adresu.
+ subject: 'Mastodon: Potvrďte e-mail pro %{instance}'
+ title: Ověřit e-mailovou adresu
+ reset_password_instructions:
+ action: Změnit heslo
+ explanation: Vyžádal/a jste si pro svůj účet nové heslo.
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index 9c3ab5f73..d9503a141 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -206,6 +206,7 @@ ja:
updated_msg: 絵文字の更新に成功しました!
upload: アップロード
dashboard:
+ backlog: 未処理のジョブ
config: 構成
feature_deletions: アカウント削除
feature_invites: 招待リンク
diff --git a/config/locales/ko.yml b/config/locales/ko.yml
index f5a780f6c..00b3b249d 100644
--- a/config/locales/ko.yml
+++ b/config/locales/ko.yml
@@ -205,6 +205,27 @@ ko:
update_failed_msg: 에모지를 업데이트 할 수 없습니다
updated_msg: 에모지가 성공적으로 업데이트 되었습니다!
upload: 업로드
+ dashboard:
+ backlog: 미처리 된 작업
+ config: 설정
+ feature_deletions: 계정 삭제
+ feature_invites: 초대 링크
+ feature_registrations: 가입
+ feature_relay: 연합 릴레이
+ features: 기능
+ hidden_service: 히든 서비스와의 연합
+ open_reports: 미해결 신고
+ recent_users: 최근 가입 한 유저
+ search: 전문 검색
+ single_user_mode: 싱글 유저 모드
+ software: 소프트웨어
+ space: 디스크 사용량
+ title: 대시보드
+ total_users: 총 유저 수
+ trends: 트렌드
+ week_interactions: 이번 주의 상호작용
+ week_users_active: 이번 주의 활성 사용자
+ week_users_new: 이번 주의 신규 유저
domain_blocks:
add_new: 추가하기
created_msg: 도메인 차단 처리를 완료했습니다
@@ -262,6 +283,14 @@ ko:
expired: 만료됨
title: 필터
title: 초대
+ relays:
+ add_new: 릴레이 추가
+ description_html: "연합 릴레이 는 서버들 사이에서 많은 양의 공개 툿을 구독하고 중개하는 서버입니다. 이것은 중소 규모의 서버에서 연합우주를 발견하는 데에 도움을 줄 수 있습니다 , 이제 로컬 유저들이 다른 서버의 유저들을 수동으로 팔로우 하지 않아도 됩니다."
+ enable_hint: 활성화 되면, 이 릴레이의 모든 공개 툿을 구독하고 이 서버의 공개 툿을 전송하게 됩니다.
+ inbox_url: 릴레이 URL
+ setup: 릴레이 연결 설정
+ status: 상태
+ title: 릴레이
report_notes:
created_msg: 리포트 노트가 성공적으로 작성되었습니다!
destroyed_msg: 리포트 노트가 성공적으로 삭제되었습니다!
diff --git a/config/locales/simple_form.cs.yml b/config/locales/simple_form.cs.yml
index f909d402d..48ab9cdac 100644
--- a/config/locales/simple_form.cs.yml
+++ b/config/locales/simple_form.cs.yml
@@ -4,7 +4,7 @@ cs:
hints:
defaults:
avatar: PNG, GIF či JPG. Maximálně %{size}. Bude zmenšena na %{dimensions}px
- bot: Tento účet provádí hlavně automatizované akce a nemusí být spravován.
+ bot: Tento účet provádí hlavně automatizované akce a nemusí být spravován
display_name:
one: Zbývá 1 znak
other: Zbývá %{count} znaků
diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml
index 2982a84bf..73751fc99 100644
--- a/config/locales/simple_form.ko.yml
+++ b/config/locales/simple_form.ko.yml
@@ -13,6 +13,7 @@ ko:
other: %{count} 글자 남음
fields: 당신의 프로파일에 최대 4개까지 표 형식으로 나타낼 수 있습니다
header: PNG, GIF 혹은 JPG. 최대 %{size}. %{dimensions}px로 다운스케일 됨
+ inbox_url: 사용 할 릴레이 서버의 프론트페이지에서 URL을 복사합니다
irreversible: 필터링 된 툿은 나중에 필터가 사라지더라도 돌아오지 않게 됩니다
locale: 유저 인터페이스, 이메일, 푸시 알림 언어
locked: 수동으로 팔로워를 승인하고, 기본 툿 프라이버시 설정을 팔로워 전용으로 변경
@@ -52,6 +53,7 @@ ko:
expires_in: 만료시각
fields: 프로필 메타데이터
header: 헤더
+ inbox_url: 릴레이 서버의 inbox URL
irreversible: 숨기는 대신 삭제
locale: 인터페이스 언어
locked: 계정 잠금
diff --git a/config/locales/uk.yml b/config/locales/uk.yml
index 5e75cbf72..266c878f1 100644
--- a/config/locales/uk.yml
+++ b/config/locales/uk.yml
@@ -1,38 +1,73 @@
---
uk:
about:
+ about_hashtag_html: Немає публічних постів з хештегом#%{hashtag} . Ви можете You can interact with them if you have an account anywhere in the fediverse.
about_mastodon_html: Mastodon - це вільна соціальна мережа з відкритим вихідним кодом . Вона є децентралізованою альтернативою комерційним платформам, що дозволяє уникнути ризиків монополізації вашого спілкування однією компанією. Виберіть сервер, якому ви довіряєте — що б ви не вибрали, Ви зможете спілкуватись з усіма іншими. Будь-який користувач може запустити власну інстанцію Mastodon та без проблем брати участь в соціальній мережі .
about_this: Про цю інстанцію
closed_registrations: На даний момент реєстрація на цій інстанції закрита.
contact: Зв'язатися
+ contact_missing: Не зазначено
description_headline: Що таке %{domain}?
domain_count_after: іншими інстанціями
domain_count_before: Зв'язаний з
+ features:
+ humane_approach_title: Більш людський підхід
+ real_conversation_title: Побудований для справжньої розмови
+ within_reach_title: Завжди на звязку
+ generic_description: "%{domain} є одним сервером у мережі"
+ hosted_on: Мастодон розміщено на %{domain}
+ learn_more: Дізнатися більше
other_instances: Інші інстанції
source_code: Вихідний код
status_count_after: статусів
status_count_before: Опубліковано
user_count_after: користувачів
user_count_before: Тут живе
+ what_is_mastodon: Що таке Мастодон?
accounts:
follow: Підписатися
followers: Підписники
following: Підписаний(-а)
+ media: Медіа
+ moved_html: "%{name} переїхав на %{new_profile_link}:"
nothing_here: Тут нічого немає!
people_followed_by: Люди, на яких підписаний(-а) %{name}
people_who_follow: Підписники %{name}
posts: Пости
+ posts_with_replies: Пости і відповіді
+ reserved_username: Це ім'я користувача зарезервоване
+ roles:
+ admin: Адміністратор
+ bot: Бот
+ moderator: Мод
unfollow: Відписатися
admin:
+ account_moderation_notes:
+ create: Залишити примітки
+ created_msg: Примітку модератора успішно створено!
+ delete: Видалити
+ destroyed_msg: Примітку модератора успішно видалено!
accounts:
are_you_sure: Ви впевнені?
+ avatar: Аватар
+ change_email:
+ changed_msg: Поштова адреса аккаунту успішно змінена!
+ current_email: Поточна поштова адреса
+ label: Змінити поштову адресу
+ submit: Змінити поштову адресу
+ title: Змінити поштову адресу для %{username}
+ confirm: Зберегти
+ confirmed: Збережено
+ confirming: Зберігається
display_name: Відображуване ім'я
domain: Домен
edit: Змінити
email: Email
feed_url: URL фіду
followers: Підписники
+ followers_url: URL підписників
follows: Підписки
+ ip: IP
location:
all: Усі
local: Локальні
@@ -44,6 +79,7 @@ uk:
silenced: Заглушені
suspended: Заблоковані
title: Модерація
+ moderation_notes: Примітки модераторів
most_recent_activity: Остання активність
most_recent_ip: Останній IP
not_subscribed: Не підписані
@@ -51,19 +87,105 @@ uk:
alphabetic: За алфавітом
most_recent: За датою
title: Порядок
+ outbox_url: Вихідний URL
perform_full_suspension: Повне блокування
profile_url: URL профілю
+ protocol: Протокол
public: Публічний
push_subscription_expires: Підписка PuSH спливає
+ redownload: Оновити аватар
+ remove_avatar: Видалити аватар
+ reset: Скинути
reset_password: Зкинути пароль
+ resubscribe: Перепідписатися
+ role: Дозволи
+ roles:
+ admin: Адміністратор
+ moderator: Модератор
+ staff: Персонал
+ user: Користувач
salmon_url: Salmon URL
+ search: Пошук
+ shared_inbox_url: URL спільного вхідного кошика
+ show:
+ report: скарга
silence: Глушення
statuses: Статуси
+ subscribe: Підписатися
title: Акаунти
undo_silenced: Зняти глушення
undo_suspension: Зняти блокування
+ unsubscribe: Відписатися
username: Ім'я користувача
web: WWW
+ action_logs:
+ actions:
+ assigned_to_self_report: "%{name} призначив(-ла) скаргу %{target} на себе"
+ change_email_user: "%{name} змінив(-ла) поштову адресу користувача %{target}"
+ confirm_user: "%{name} підтвердив(-ла) статус поштової адреси користувача %{target}"
+ create_custom_emoji: "%{name} вивантажив(-ла) нове емодзі %{target}"
+ create_domain_block: "%{name} заблокував(-ла) домен %{target}"
+ create_email_domain_block: "%{name} додав(-ла) поштовий домен %{target} до чорного списку"
+ destroy_domain_block: "%{name} розблокував(-ла) домен %{target}"
+ destroy_email_domain_block: "%{name} додав(-ла) поштовий домен %{target} до білого списку"
+ destroy_status: "%{name} видалив(-ла) статус користувача %{target}"
+ disable_2fa_user: "%{name} вимкнув(-ла) двофакторну авторизацію для користувача %{target}"
+ disable_custom_emoji: "%{name} вимкнув(-ла) емодзі %{target}"
+ disable_user: "%{name} заборонив(-ла) авторизацію користувачу %{target}"
+ enable_custom_emoji: "%{name} увімкнув(-ла) емодзі %{target}"
+ enable_user: "%{name} увімкнув(-ла) авторизацію користувачу %{target}"
+ promote_user: "%{name} підвищив(-ла) користувача %{target}"
+ remove_avatar_user: "%{name} прибрав(-ла) аватар користувача %{target}"
+ reopen_report: "%{name} перевідкрив(-ла) скаргу %{target}"
+ reset_password_user: "%{name} скинув(-ла) пароль користувача %{target}"
+ suspend_account: "%{name} заблокував аккаунт користувача %{target}"
+ unsuspend_account: "%{name} розблокував аккаунт користувача %{target}"
+ update_custom_emoji: "%{name} оновив(-ла) емодзі %{target}"
+ update_status: "%{name} змінив(-ла) статус користуача %{target}"
+ title: Журнал подій
+ custom_emojis:
+ by_domain: Домен
+ copied_msg: Локальна копія емодзі успішно створена
+ copy: Копіювати
+ copy_failed_msg: Не вийшло створити локальну копію емодзі
+ created_msg: Емодзі успішно створене!
+ delete: Видалити
+ destroyed_msg: Емодзі усіпішно видалене!
+ disable: Вимкнути
+ disabled_msg: Емодзі успішно вимкнено
+ emoji: Емодзі
+ enable: Увімкнути
+ enabled_msg: Емодзі успішно увімкнене
+ image_hint: PNG розміром до 50 КБ
+ listed: У списку
+ new:
+ title: Додати новий емодзі
+ overwrite: Переписати
+ shortcode: Шорткод
+ shortcode_hint: Мінімум два символи, тільки цифрові й латинські символи або нижні підкреслення
+ title: Особливі емодзі
+ unlisted: Не у списку
+ update_failed_msg: Не вийшло оновити емозді
+ updated_msg: Емодзі успішно оновлене!
+ upload: Вивантажити
+ dashboard:
+ config: Налаштування
+ feature_invites: Посилання-запрошення
+ feature_registrations: Реєстрації
+ features: Можливості
+ hidden_service: Федерація з прихованими сервісами
+ open_reports: відкриті скарги
+ recent_users: Останні користувачі
+ search: Повнотекстовий пошук
+ single_user_mode: Режим одного користувача
+ software: Програмне забезпечення
+ space: Використання дискового простору
+ title: Дашборд
+ total_users: користувачів загалом
+ trends: Тренди
+ week_interactions: дій за цей тиждень
+ week_users_active: активно протягом тижня
+ week_users_new: користувачів цього тижня
domain_blocks:
add_new: Додати нове
created_msg: Блокування домену оброблюється
@@ -71,15 +193,17 @@ uk:
domain: Домен
new:
create: Створити блокування
- hint: Блокування домену не запобіжить створенню нових акаунтів у базі даних, але ретроактивно та автоматично застосує указані методи модерації для цих акаунтів.
+ hint: Блокування домену не завадить створенню нових акаунтів у базі даних, але ретроактивно та автоматично застосує вказані методи модерації для цих акаунтів.
severity:
- desc_html: "Глушення зробить статуси акаунту невидимими для всіх, крім їхніх підписників. Блокування видалить увесь контент акаунту, включаючи мультимедійні вкладення та дані профілю."
+ desc_html: "Глушення зробить статуси акаунту невидимими для всіх, окрім їхніх підписників. Блокування видалить увесь контент акаунту, включаючи мультимедійні вкладення та дані профілю."
+ noop: Нічого
silence: Глушення
suspend: Блокування
- title: Нове доменне блокування
+ title: Нове блокування домену
reject_media: Заборонити медіаконтент
reject_media_hint: Видаляє медіаконтент, збережений локально, і забороняє його завантаження у майбутньому. Не має значення у випадку блокування.
severities:
+ noop: Нічого
silence: Глушення
suspend: Блокування
severity: Суворість
@@ -96,40 +220,137 @@ uk:
undo: Відмінити
title: Доменні блокування
undo: Відмінити
+ email_domain_blocks:
+ add_new: Додати
+ created_msg: Успішно додано поштовий домен до чорного списку
+ delete: Видалити
+ destroyed_msg: Успішно видалено поштовий домен з чорного списку
+ domain: Домен
+ new:
+ create: Додати домен
+ title: Нове доменне блокування домену email
+ title: Чорний список поштових доменів
+ instances:
+ account_count: Відомі аккаунти
+ domain_name: Домен
+ reset: Скинути
+ search: Пошук
+ title: Відомі інстанції
+ invites:
+ filter:
+ all: Все
+ available: Доступно
+ expired: Просрочено
+ title: Фільтр
+ title: Запрошення
+ relays:
+ status: Статус
+ report_notes:
+ created_msg: Скарга успішно створена!
+ destroyed_msg: Скарга успішно видалена!
reports:
+ account:
+ note: примітка
+ report: скарга
+ action_taken_by: Дія виконана
+ are_you_sure: Ви впевнені?
+ assign_to_self: Призначити мені
+ assigned: Призначений модератор
comment:
none: Немає
+ created_at: Створено
id: ID
mark_as_resolved: Відмітити як вирішену
+ mark_as_unresolved: Відмітити як невирішену
+ notes:
+ create: Додати примітку
+ create_and_unresolve: Перевідкрити з приміткою
+ delete: Видалити
+ placeholder: Опишіть, які дії були виконані, або інші зміни, що стосуються справи...
+ reopen: Перевідкрити скаргу
report: 'Скарга #%{id}'
+ report_contents: Зміст
reported_account: Акаунт порушника
reported_by: Відправник скарги
resolved: Вирішено
+ resolved_msg: Скаргу успішно вирішено!
silence_account: Заглушити акаунт
status: Статус
- suspend_account: Блокувати акаунт
+ suspend_account: Заблокувати акаунт
target: Ціль
title: Скарги
+ unassign: Зняти призначення
unresolved: Невирішені
+ updated_at: Оновлені
view: Подивитися
settings:
+ activity_api_enabled:
+ desc_html: Кількість локальних постів, активних та нових користувачів у тижневих розрізах
+ title: Публікація агрегованої статистики про активність користувачів
+ bootstrap_timeline_accounts:
+ title: Підписки за замовчуванням для нових користувачів
contact_information:
email: Введіть публічний email
username: Введіть ім'я користувача
+ hero:
+ desc_html: Відображається на головній сторінці. Рекомендована як мінімум 600x100 пікселів. Якщо не вказано, буде використано передпоказ інстанції
+ title: Банер інстанції
+ peers_api_enabled:
+ desc_html: Доменні ім'я, помічені цією інстанцією федисвіту
+ title: Опублікувати список знайдених інстанцій
+ preview_sensitive_media:
+ desc_html: Передпоказ посилання на інших сайтах буде відображати мініатюру навіть якщо медіа відмічене як вразливе
+ title: Показувати вразливе медія у перепоказі OpenGraph
registrations:
closed_message:
desc_html: Відображається на титульній сторінці, коли реєстрація закрита Можна використовувати HTML-теги
title: Повідомлення про закриту реєстрацію
+ deletion:
+ desc_html: Дозволити будь-кому видаляти свій аккаунт
+ title: Дозволити видалення аккаунтів
+ min_invite_role:
+ disabled: Ніхто
+ title: Дозволити запрошення від
open:
+ desc_html: Дозволити будь-ком створювати аккаунт
title: Відкрити реєстрацію
+ show_known_fediverse_at_about_page:
+ desc_html: Коли увімкнено, будуть показані пости з усього відомого федисвіту у передпоказі. Інакше будуть показані локальні пости
+ title: Показувати доступний федисвіт у передпоказі фіду
+ show_staff_badge:
+ desc_html: Відмічати персонал на сторінці користувачів
+ title: Показувати персонал
site_description:
desc_html: Відображається у якості параграфа на титульній сторінці та використовується у якості мета-тега. Можна використовувати HTML-теги, особливо <a>
і <em>
.
- title: Опис сайту
+ title: Опис інстанції
site_description_extended:
desc_html: Відображається на сторінці додаткової информації Можна використовувати HTML-теги
title: Розширений опис сайту
+ site_terms:
+ desc_html: |-
+ Ви можене написати власну політику приватності, умови використанні та інші законні штуки
+ Можете використовувати HTML теги
+ title: Особливі умови використання
site_title: Назва сайту
+ thumbnail:
+ desc_html: Використовується для передпоказів через OpenGraph та API. Бажано розміром 1200х640 пікселів.
+ title: Мініатюра інстанції
+ timeline_preview:
+ desc_html: Показувати публічний фід на головній сторінці
+ title: Передпоказ фіду
title: Налаштування сайту
+ statuses:
+ back_to_account: Назад на сторінку профілю
+ batch:
+ delete: Видалити
+ nsfw_off: Відмітити сприйнятливим
+ nsfw_on: Відмітити несприйнятливим
+ failed_to_execute: Не вийшло
+ media:
+ title: Медіа
+ no_media: Немає медіа
+ title: Статуси аккаунтів
+ with_media: З медіа
subscriptions:
callback_url: Callback URL
confirmed: Підтверджено
@@ -138,24 +359,60 @@ uk:
title: WebSub
topic: Тема
title: Адміністрування
+ admin_mailer:
+ new_report:
+ body: "%{reporter} поскаржився(-лася) %{target}"
+ body_remote: Хтось з домену %{domain} поскаржився(-лася) %{target}
+ subject: Нова скарга до %{instance} (#%{id})
application_mailer:
- settings: 'Змінити налаштування email: %{link}'
+ notification_preferences: Змінити налаштування e-mail
+ salutation: "%{name},"
+ settings: 'Змінити налаштування e-mail: %{link}'
view: 'Перегляд:'
+ view_profile: Показати профіль
+ view_status: Показати статус
applications:
+ created: Застосунок успішно створений
+ destroyed: Застосунок успішно видалений
invalid_url: Введена URL неправильна
+ regenerate_token: Перегенерувати токен доступу
+ token_regenerated: Токен доступу успішне перегенеровано
+ warning: Будьте дуже обережні з цими даними. Ніколи не діліться ними ні з ким!
+ your_token: Ваш токен доступу
auth:
+ agreement_html: Реєструючись, ви погоджуєтеся виконувати правила інстанції та наші умови використання .
+ change_password: Пароль
+ confirm_email: Підтвердьте e-mail адресу
+ delete_account: Видалити аккаунт
+ delete_account_html: Якщо ви хочете видалити аккаунт, ви можете перейти сюди . Вас попросять підтвердити дію.
didnt_get_confirmation: Ви не отримали інструкції з підтвердження?
forgot_password: Забули свій пароль?
+ invalid_reset_password_token: Токен скидання паролю неправильний або просрочений. Спробуйте попросити новий.
login: Увійти
logout: Вийти
+ migrate_account: Переїхати до іншого аккаунту
+ migrate_account_html: Якщо ви бажаєте, щоб відвідувачі цього акканту були перенаправлені до іншого, ви можете налаштувати це тут .
+ or: або
+ or_log_in_with: Або увійдіть з
+ providers:
+ cas: CAS
+ saml: SAML
register: Зареєструватися
+ register_elsewhere: Зареєструватися на іншому сервері
resend_confirmation: Повторно відправити інструкції з підтвердження
reset_password: Скинути пароль
security: Зміна паролю
set_new_password: Встановити новий пароль
authorize_follow:
+ already_following: Ви вже підписані на цей аккаунт
error: На жаль, при пошуку віддаленого аккаунту виникла помилка
follow: Підписатися
+ follow_request: 'Вам надіслали запит на підписку:'
+ following: 'Ура! Ви тепер підписані на:'
+ post_follow:
+ close: Або, ви можете просто закрити вікно.
+ return: Перейти до профілю користувача
+ web: Перейти до вебу
title: Підписатися на %{acct}
datetime:
distance_in_words:
@@ -163,14 +420,22 @@ uk:
about_x_months: "%{count}міс"
about_x_years: "%{count}р"
almost_x_years: "%{count}р"
- half_a_minute: Тільки що
+ half_a_minute: Щойно
less_than_x_minutes: "%{count}хв"
- less_than_x_seconds: Тільки що
+ less_than_x_seconds: Щойно
over_x_years: "%{count}р"
x_days: "%{count}д"
x_minutes: "%{count}хв"
x_months: "%{count}міс"
x_seconds: "%{count}сек"
+ deletes:
+ bad_password_msg: Гарна спроба, гакери! Неправильний пароль
+ confirm_password: Введіть актуальний пароль щоб перевірити що ви це ви
+ description_html: Це безвідворотно і назавжди видалить контент з вашого аккаунту та деактивує його. Ваше ім'я користувача буде залишатися зарезервованим для уникнення вашої деперсоналізації.
+ proceed: Видалити аккаунт
+ success_msg: Ваш аккаунт було успішно видалено
+ warning_html: Ми можемо гарантувати видалення контенти лише з цього сайту . Контент, що був поширений залишає сліди. Сервери, що є офлайн та ті, що відписалися від наших оновлень не запишуть змін до своїх баз даних.
+ warning_title: Про доступність поширеного контенту
errors:
'403': У Вас немає доступу до перегляду даної сторінки.
'404': Сторінка, яку Ви шукали, не існує.
@@ -178,15 +443,43 @@ uk:
'422':
content: Перевірка безпеки не вдалася. Можливо, Ви блокуєте cookies?
title: Перевірка безпеки не вдалася.
+ '429': Забагато запитів
+ '500':
+ content: Пробачте, та щось пішло не так з нашого боку.
+ title: Ця сторінка неправильна
+ noscript_html: Для використання веб-застосунку Мастодон, будь-ласка увімкніть JavaScript. Якщо у вас немає такої можливості, скористайтесь одним із нативних застосунків для Мастодон для вашої платформи.
exports:
+ archive_takeout:
+ date: Дата
+ download: Завантажити ваш архів
+ hint_html: Ви можете зробити запит на архів ваших постів та вивантаженого медіа контенту . Завантажені дані будуть у форматі ActivityPub, доступні для читання будь-яким сумісним програмним забезпеченням. Ви можете робити запит на архів кожні 7 днів.
+ in_progress: Збираємо ваш архів...
+ request: Зробити запит на архів
+ size: Розмір
blocks: Список блокувань
csv: CSV
follows: Підписки
mutes: Список глушення
storage: Ваш медіаконтент
+ filters:
+ contexts:
+ home: Ваш фід
+ notifications: Сповіщення
+ public: Публічний фід
+ thread: Повідомлення
+ edit:
+ title: Редагувати фільтр
+ errors:
+ invalid_context: Контекст неправильний або не був наданий
+ invalid_irreversible: Незворотне фільтрування працює тільки в контексті свого фіду або сповіщень
+ index:
+ delete: Видалити
+ title: Фільтри
+ new:
+ title: Додати фільтр
followers:
domain: Домен
- explanation_html: Якщо Ви хочете бути впевнені в приватності Ваших статусів, Ви повинні мати чітке уявлення про те, хто на Вас підписаний. Ваші приватні статусі відправляються усім інстанціям, на яких у Вас є підписники . Рекомендуємо видалити з підписників користувачів інстанцій, адміністрації чи програмному забезпеченню яких Ви не довіряєте.
+ explanation_html: Якщо Ви хочете бути впевнені в приватності Ваших статусів, Ви повинні мати чітке уявлення про те, хто на Вас підписаний. Ваші приватні статусі відправляються усім сайтам, на яких у Вас є підписники . Рекомендуємо видалити з підписників користувачів інстанцій, адміністрації чи програмному забезпеченню яких Ви не довіряєте.
followers_count: Кількість підписників
lock_link: Закрийте акаунт
purge: Видалити з підписників
@@ -210,100 +503,252 @@ uk:
following: Підписки
muting: Список глушення
upload: Завантажити
+ in_memoriam_html: Пам'ятник.
+ invites:
+ delete: Деактивувати
+ expired: Вийшов
+ expires_in:
+ '1800': 30 хвилин
+ '21600': 6 годин
+ '3600': 1 година
+ '43200': 12 годин
+ '604800': 1 тиждень
+ '86400': 1 день
+ expires_in_prompt: Ніколи
+ generate: Згенерувати
+ invited_by: 'Вас запросив(-ла):'
+ max_uses:
+ one: 1 використання
+ other: "%{count} використань"
+ max_uses_prompt: Без обмеження
+ prompt: Генеруйте та діліться посиланням з іншими для надання доступу до сайту
+ table:
+ expires_at: Час роботи
+ uses: Використання
+ title: Запросити людей
+ lists:
+ errors:
+ limit: Ви досягнули максимальної кількості списків
media_attachments:
validations:
images_and_video: Не можна додати відео до статусу з зображеннями
too_many: Не можна додати більше 4 файлів
+ migrations:
+ acct: username@domain нового аккаунту
+ currently_redirecting: 'Ваш профіль налаштований перенаправляти на:'
+ proceed: Зберегти
+ updated_msg: Переїзд вашого аккаунту успішно оновлений!
+ moderation:
+ title: Модерація
notification_mailer:
digest:
- body: 'Коротко про пропущене Вами на %{instance} з Вашого останнього входу %{since}:'
+ action: Показати усі сповіщення
+ body: Коротко про пропущене вами з Вашого останнього входу %{since}
mention: "%{name} згадав(-ла) Вас в:"
new_followers_summary:
few: У Вас з'явилось %{count} нових підписники! Чудово!
many: У Вас з'явилось %{count} нових підписників! Чудово!
- one: У Вас з'явився новий підписник! Ура!
- other: У Вас з'явилось %{count} нових підписників! Чудово!
+ one: Також, у Вас з'явився новий підписник, коли ви були відсутні! Ура!
+ other: Також, у Вас з'явилось %{count} нових підписників, поки ви були відсутні! Чудово!
subject:
few: "%{count} нові сповіщення з Вашого останнього входу \U0001F418"
many: "%{count} нових сповіщень з Вашого останнього входу \U0001F418"
one: "1 нове сповіщення з Вашого останнього входу \U0001F418"
other: "%{count} нових сповіщень з Вашого останнього входу \U0001F418"
+ title: Поки ви були відсутні...
favourite:
body: 'Ваш статус подобається %{name}:'
subject: Користувачу %{name} сподобався ваш статус
+ title: Нове вподобання
follow:
body: "%{name} тепер підписаний на вас!"
subject: "%{name} тепер підписаний(-а) на вас"
+ title: Новий підписник
follow_request:
+ action: Керувати запитами на підписку
body: "%{name} запитав Вас про підписку"
subject: "%{name} хоче підписатися на Вас"
+ title: Новий запит на підписку
mention:
- body: 'Ви були згадані %{name} в:'
- subject: Ви були згадані %{name}
+ action: Відповісти
+ body: 'Вас згадав(-ла) %{name} в:'
+ subject: Вас згадав(-ла) %{name}
+ title: Нова згадка
reblog:
body: 'Ваш статус було передмухнуто %{name}:'
subject: "%{name} передмухнув ваш статус"
+ title: Нове передмухування
number:
human:
decimal_units:
format: "%n%u"
units:
- billion: B
- million: M
- quadrillion: Q
- thousand: K
- trillion: T
+ billion: млрд
+ million: млн
+ quadrillion: квдрл
+ thousand: тис
+ trillion: трлн
unit: ''
pagination:
+ newer: Новіше
next: Далі
prev: Назад
truncate: "…"
+ preferences:
+ languages: Мови
+ other: Інше
+ publishing: Публікація
+ web: Веб
remote_follow:
- acct: Введіть username@domain, звідки ви хочете підписатися
- missing_resource: Пошук потрібного перенаправлення URL для Вашого аккаунта закінчився неудачою
- proceed: Продовжити підписку
+ acct: Введіть username@domain, яким ви хочете підписатися
+ missing_resource: Пошук потрібного перенаправлення URL для Вашого аккаунта закінчився невдачею
+ no_account_html: Не маєте аккаунту? Не біда, ви можете зареєструватися
+ proceed: Перейти до підписки
prompt: 'Ви хочете підписатися на:'
+ remote_unfollow:
+ error: Помилка
+ title: Заголовок
+ unfollowed: Відписані
+ sessions:
+ activity: Остання активність
+ browser: Браузер
+ browsers:
+ alipay: Alipay
+ blackberry: Blackberry
+ chrome: Chrome
+ edge: Microsoft Edge
+ electron: Electron
+ firefox: Firefox
+ generic: Невідомий браузер
+ ie: Internet Explorer
+ micro_messenger: MicroMessenger
+ nokia: Nokia S40 Ovi Browser
+ opera: Opera
+ otter: Otter
+ phantom_js: PhantomJS
+ qq: QQ Browser
+ safari: Safari
+ uc_browser: UCBrowser
+ weibo: Weibo
+ current_session: Активна сесія
+ description: "%{browser} на %{platform}"
+ explanation: Це веб-браузери, нині авторизовані до вашого аккаунту Мастодон.
+ ip: IP
+ platforms:
+ adobe_air: Adobe Air
+ android: Android
+ blackberry: Blackberry
+ chrome_os: ChromeOS
+ firefox_os: Firefox OS
+ ios: iOS
+ linux: Linux
+ mac: Mac
+ other: невідома платформа
+ windows: Windows
+ windows_mobile: Windows Mobile
+ windows_phone: Windows Phone
+ revoke: Закінчити
+ revoke_success: Сесія успішно закінчена
+ title: Сесії
settings:
- authorized_apps: Авторизованные приложения
- back: Назад в Mastodon
+ authorized_apps: Авторизовані застосунки
+ back: Назад у Мастодон
+ delete: Видалення аккаунту
+ development: Розробка
edit_profile: Редагувати профіль
export: Експорт даних
followers: Авторизовані підписники
import: Імпорт
+ migrate: Міграція акаунту
+ notifications: Сповіщення
preferences: Налаштування
settings: Опції
two_factor_authentication: Двофакторна аутентифікація
+ your_apps: Ваші затосунки
statuses:
- open_in_web: Відкрити в WWW
+ attached:
+ description: 'Прикріплено: %{attached}'
+ image:
+ one: "%{count} картинка"
+ other: "%{count} картинки"
+ video:
+ one: "%{count} відео"
+ other: "%{count} відео"
+ boosted_from_html: Просунуто від %{acct_link}
+ content_warning: 'Попередження про контент: %{warning}'
+ disallowed_hashtags:
+ one: 'містив заборонений хештеґ: %{tags}'
+ other: 'містив заборонені хештеґи: %{tags}'
+ language_detection: Автоматично визначати мову
+ open_in_web: Відкрити у вебі
over_character_limit: перевищено ліміт символів (%{max})
+ pin_errors:
+ limit: Ви вже закріпили максимальну кількість постів
+ ownership: Не можна закріпити чужий пост
+ private: Не можна закріпити непублічний пост
+ reblog: Не можна закріпити просунутий пост
show_more: Детальніше
+ title: '%{name}: "%{quote}"'
visibilities:
private: Для підписників
- private_long: Показувати тількои підписникам
+ private_long: Показувати тільки підписникам
public: Для всіх
public_long: Показувати всім
- unlisted: Приховувати зі стріок
+ unlisted: Приховувати зі стрічок
unlisted_long: Показувати всім, але не відображати в публічних стрічках
stream_entries:
+ pinned: Закріплений пост
reblogged: передмухнув(-ла)
- sensitive_content: Непристойний контент
+ sensitive_content: Несприйнятливий контент
+ terms:
+ title: Умови використання та Політика приватності %{instance}
+ themes:
+ contrast: Висока контрасність
+ default: Mastodon
+ mastodon-light: Mastodon (світла)
time:
formats:
default: "%b %d, %Y, %H:%M"
two_factor_authentication:
- code_hint: Для підтверждення введіть код, згенерований додатком аутентифікатора
+ code_hint: Для підтверждення введіть код, згенерований застосунком аутентифікатора
description_html: При увімкненні двофакторної аутентифікації , вхід буде вимагати від Вас використовування Вашого телефона, який згенерує вхідний код.
disable: Вимкнути
enable: Увімкнути
+ enabled: Двофакторна аутентифікація увімкнена
enabled_success: Двофакторна аутентифікація успішно увімкнена
generate_recovery_codes: Згенерувати коди відновлення
- instructions_html: "Відскануйте цей QR-код за допомогою Google Authenticator чи іншого TOTP-додатка на Вашому телефоні . Від цього моменту додаток буде генерувати коди, які буде необхідно ввести для входу."
- lost_recovery_codes: Коди відновлення дозволяють повернути доступ до акаунту у випадку втрати телефону. Якщо Ви втратили Ваші коди відновлення, Ви можете знову згенерувати їх тут. Ваші старі коди відновлення будуть анульовані.
+ instructions_html: "Відскануйте цей QR-код за допомогою Google Authenticator чи іншого TOTP-застосунку на Вашому телефоні . З цього моменту він буде генерувати коди, які буде необхідно ввести для входу."
+ lost_recovery_codes: Коди відновлення дозволяють повернути доступ до акаунту у випадку втрати телефону. Якщо Ви втратили Ваші коди відновлення, Ви можете знову згенерувати їх тут. Тоді ваші старі коди відновлення будуть анульовані.
manual_instructions: 'Якщо Ви не можете відсканувати QR-код та хочете ввести його вручну, секрет представлений тут відкритим текстом:'
+ recovery_codes: Запасні коди відновлення
recovery_codes_regenerated: Коди відновлення успішно згенеровані
- recovery_instructions_html: У випадку втрати доступу до Вашого телефона Ви можете використати один з кодів відновлення, вказаних нижче, щоб повернути доступ до акаунту. Тримайте коди відновлення у безпеці, наприклад, роздрукувавши їх та тримаючи їх з іншими важливими документами.
+ recovery_instructions_html: У випадку втрати доступу до вашого телефону ви можете використати один з кодів відновлення, вказаних нижче, щоб повернути доступ до акаунту. Тримайте коди відновлення у безпеці, наприклад, роздруйте їх та зберігайте їх з іншими важливими документами.
setup: Налаштувати
- wrong_code: Введений код неправильний! Чи правильно встановлені серверний час та час пристрою?
+ wrong_code: Введений код неправильний! Чи правильно встановлений час на сервері та пристрої?
+ user_mailer:
+ backup_ready:
+ explanation: Ви зробили запит на повний архів вашого аккаунту Mastodon. Він вже готовий для завантаження!
+ subject: Ваш архів готовий до завантаження
+ title: Винесення архіву
+ welcome:
+ edit_profile_action: Налаштувати профіль
+ edit_profile_step: Ви можете налаштувати профіль під себе завантаживши аватар, шпалери, змінивши відображуване ім'я тощо. Якщо ви захочете переглядати нових підписників до того, як вони зможуть підписатися на вас, ви можете заблокувати свій аккаунт.
+ explanation: Ось декілька порад для початку
+ final_action: Почати постити
+ final_step: 'Почність постити! Навіть не підписавшись на вас, інші зможуть побачити ваші пости, наприкоал, у локальному фіді та у хештеґах. Якщо ви хочете представитися, можете скористатися хештеґом #introductions.'
+ full_handle: Ваше звернення
+ full_handle_hint: Те, що ви хочете сказати друзям, щоб вони могли написати вам або підписатися з інших сайтів.
+ review_preferences_action: Змінити налаштування
+ review_preferences_step: Переконайтеся у тому, що ви налаштували все необхідне, як от які e-mail повідомлення ви хочете отримувати, або який рівень приватності ви хочете встановити вашим постам за замовчуванням. Якщо хочете, ви можете увімкнути автоматичне програвання GIF анімацій.
+ subject: Ласкаво просимо до Mastodon
+ tip_bridge_html: Якщо ви прийшли до нас із Twitter, ви можете знайти ваших друзів на Mastodon, скориставшись проміжним застосунком . Проте він працює тільки, якщо вони теж користуються проміжним застосунком!
+ tip_federated_timeline: Федерований фід є широким поглядом на мережу Mastodon. Але він включає лише людей, на яких підписані ваші сусіди по сайту, тому він не є повним.
+ tip_following: Ви автоматично підписані на адміністратора(-ів) сервера. Для того, щоб знайти ще цікавих людей, дослідіть локальний та федерований фіди.
+ tip_local_timeline: Локальний фід - це погляд згори на людей на %{instance}. Це ваші прямі сусіди!
+ tip_mobile_webapp: Якщо ваш мобільний браузер пропонує вам додати Mastodon на робочий стіл, ви можете отримувати push-сповіщення. Все може виглядати як нативний застосунок у багатьох речах.
+ tips: Поради
+ title: Ласкаво просимо, %{name}!
users:
- invalid_email: Введений email неправильний
+ invalid_email: Введена адреса e-mail неправильна
invalid_otp_token: Введено неправильний код
+ otp_lost_help_html: Якщо ви втратили доступ до обох, ви можете отримати доступ з %{email}
From 16566635985cfeb4586196eaca953032eebaa00f Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Mon, 30 Jul 2018 19:33:05 +0200
Subject: [PATCH 052/196] Convert MOV and WEBM to MP4, raise maximum limit to
40MB (#8101)
Separate size limits for images and video. Images remain at 8MB,
while videos can be up to 40MB.
---
app/models/media_attachment.rb | 54 ++++++++++++++++++++--------------
1 file changed, 32 insertions(+), 22 deletions(-)
diff --git a/app/models/media_attachment.rb b/app/models/media_attachment.rb
index 63c6d5af8..1e4fae3de 100644
--- a/app/models/media_attachment.rb
+++ b/app/models/media_attachment.rb
@@ -25,10 +25,11 @@ class MediaAttachment < ApplicationRecord
enum type: [:image, :gifv, :video, :unknown]
IMAGE_FILE_EXTENSIONS = ['.jpg', '.jpeg', '.png', '.gif'].freeze
- VIDEO_FILE_EXTENSIONS = ['.webm', '.mp4', '.m4v'].freeze
+ VIDEO_FILE_EXTENSIONS = ['.webm', '.mp4', '.m4v', '.mov'].freeze
- IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif'].freeze
- VIDEO_MIME_TYPES = ['video/webm', 'video/mp4'].freeze
+ IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif'].freeze
+ VIDEO_MIME_TYPES = ['video/webm', 'video/mp4', 'video/quicktime'].freeze
+ VIDEO_CONVERTIBLE_MIME_TYPES = ['video/webm', 'video/quicktime'].freeze
IMAGE_STYLES = {
original: {
@@ -54,7 +55,25 @@ class MediaAttachment < ApplicationRecord
},
}.freeze
- LIMIT = 8.megabytes
+ VIDEO_FORMAT = {
+ format: 'mp4',
+ convert_options: {
+ output: {
+ 'movflags' => 'faststart',
+ 'pix_fmt' => 'yuv420p',
+ 'vf' => 'scale=\'trunc(iw/2)*2:trunc(ih/2)*2\'',
+ 'vsync' => 'cfr',
+ 'c:v' => 'h264',
+ 'b:v' => '500K',
+ 'maxrate' => '1300K',
+ 'bufsize' => '1300K',
+ 'crf' => 18,
+ },
+ },
+ }.freeze
+
+ IMAGE_LIMIT = 8.megabytes
+ VIDEO_LIMIT = 40.megabytes
belongs_to :account, inverse_of: :media_attachments, optional: true
belongs_to :status, inverse_of: :media_attachments, optional: true
@@ -65,8 +84,9 @@ class MediaAttachment < ApplicationRecord
convert_options: { all: '-quality 90 -strip' }
validates_attachment_content_type :file, content_type: IMAGE_MIME_TYPES + VIDEO_MIME_TYPES
- validates_attachment_size :file, less_than: LIMIT
- remotable_attachment :file, LIMIT
+ validates_attachment_size :file, less_than: IMAGE_LIMIT, unless: :video?
+ validates_attachment_size :file, less_than: VIDEO_LIMIT, if: :video?
+ remotable_attachment :file, VIDEO_LIMIT
include Attachmentable
@@ -122,25 +142,15 @@ class MediaAttachment < ApplicationRecord
if f.instance.file_content_type == 'image/gif'
{
small: IMAGE_STYLES[:small],
- original: {
- format: 'mp4',
- convert_options: {
- output: {
- 'movflags' => 'faststart',
- 'pix_fmt' => 'yuv420p',
- 'vf' => 'scale=\'trunc(iw/2)*2:trunc(ih/2)*2\'',
- 'vsync' => 'cfr',
- 'c:v' => 'h264',
- 'b:v' => '500K',
- 'maxrate' => '1300K',
- 'bufsize' => '1300K',
- 'crf' => 18,
- },
- },
- },
+ original: VIDEO_FORMAT,
}
elsif IMAGE_MIME_TYPES.include? f.instance.file_content_type
IMAGE_STYLES
+ elsif VIDEO_CONVERTIBLE_MIME_TYPES.include?(f.instance.file_content_type)
+ {
+ small: VIDEO_STYLES[:small],
+ original: VIDEO_FORMAT,
+ }
else
VIDEO_STYLES
end
From 07b799468d34c7fa64dbbee65c7979f560a3e8c1 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Mon, 30 Jul 2018 19:33:37 +0200
Subject: [PATCH 053/196] Fix incorrect context definition for the "featured"
keyword (#8090)
* Fix incorrect context definition for the "featured" keyword
Fix #8077
* Adjust context definition for movedTo
---
app/lib/activitypub/adapter.rb | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/lib/activitypub/adapter.rb b/app/lib/activitypub/adapter.rb
index e880499f1..d35cae889 100644
--- a/app/lib/activitypub/adapter.rb
+++ b/app/lib/activitypub/adapter.rb
@@ -9,7 +9,7 @@ class ActivityPub::Adapter < ActiveModelSerializers::Adapter::Base
{
'manuallyApprovesFollowers' => 'as:manuallyApprovesFollowers',
'sensitive' => 'as:sensitive',
- 'movedTo' => 'as:movedTo',
+ 'movedTo' => { '@id' => 'as:movedTo', '@type' => '@id' },
'Hashtag' => 'as:Hashtag',
'ostatus' => 'http://ostatus.org#',
'atomUri' => 'ostatus:atomUri',
@@ -18,7 +18,7 @@ class ActivityPub::Adapter < ActiveModelSerializers::Adapter::Base
'toot' => 'http://joinmastodon.org/ns#',
'Emoji' => 'toot:Emoji',
'focalPoint' => { '@container' => '@list', '@id' => 'toot:focalPoint' },
- 'featured' => 'toot:featured',
+ 'featured' => { '@id' => 'toot:featured', '@type' => '@id' },
'schema' => 'http://schema.org#',
'PropertyValue' => 'schema:PropertyValue',
'value' => 'schema:value',
From d425d30804aeed41010452519b275bd007547377 Mon Sep 17 00:00:00 2001
From: ThibG
Date: Mon, 30 Jul 2018 22:22:55 +0200
Subject: [PATCH 054/196] Use workspace instead of caching for built assets
(#8103)
Tests cannot run without built assets, and we want
exactly the matching assets. This is not a cache.
---
.circleci/config.yml | 14 ++++----------
1 file changed, 4 insertions(+), 10 deletions(-)
diff --git a/.circleci/config.yml b/.circleci/config.yml
index 2a1c84253..ac8dfc334 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -81,12 +81,6 @@ aliases:
- run: ruby -e 'puts RUBY_VERSION' | tee /tmp/.ruby-version
- *restore_ruby_dependencies
- - restore_cache:
- keys:
- - precompiled-assets-{{ .Branch }}-{{ .Revision }}
- - precompiled-assets-{{ .Branch }}-
- - precompiled-assets-
-
- run:
name: Prepare Tests
command: ./bin/rails parallel:create parallel:load_schema parallel:prepare
@@ -125,11 +119,11 @@ jobs:
- run: ruby -e 'puts RUBY_VERSION' | tee /tmp/.ruby-version
- *restore_ruby_dependencies
- run: ./bin/rails assets:precompile
- - save_cache:
- key: precompiled-assets-{{ .Branch }}-{{ .Revision }}
+ - persist_to_workspace:
+ root: ~/projects/
paths:
- - ./public/assets
- - ./public/packs-test/
+ - ./mastodon/public/assets
+ - ./mastodon/public/packs-test/
test-ruby2.5:
<<: *defaults
From e7e577dd6e82d9b6ae3afa799a56953d0468deea Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Mon, 30 Jul 2018 22:29:52 +0200
Subject: [PATCH 055/196] Enforce username format for remote users, too (#8102)
Initially I thought there might be valid reasons for remote users to
have a different, unpredicted username format. However, I now realize
such a difference would be unusable and unexpected within Mastodon.
Fix #8058
---
app/models/account.rb | 1 +
spec/models/account_spec.rb | 4 ++--
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/app/models/account.rb b/app/models/account.rb
index 1f720bf88..0272b4615 100644
--- a/app/models/account.rb
+++ b/app/models/account.rb
@@ -68,6 +68,7 @@ class Account < ApplicationRecord
# Remote user validations
validates :username, uniqueness: { scope: :domain, case_sensitive: true }, if: -> { !local? && will_save_change_to_username? }
+ validates :username, format: { with: /\A#{USERNAME_RE}\z/i }, if: -> { !local? && will_save_change_to_username? }
# Local user validations
validates :username, format: { with: /\A[a-z0-9_]+\z/i }, length: { maximum: 30 }, if: -> { local? && will_save_change_to_username? }
diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb
index c50791bcd..ec01026db 100644
--- a/spec/models/account_spec.rb
+++ b/spec/models/account_spec.rb
@@ -618,10 +618,10 @@ RSpec.describe Account, type: :model do
expect(account).not_to model_have_error_on_field(:username)
end
- it 'is valid even if the username doesn\'t only contains letters, numbers and underscores' do
+ it 'is invalid if the username doesn\'t only contains letters, numbers and underscores' do
account = Fabricate.build(:account, domain: 'domain', username: 'the-doctor')
account.valid?
- expect(account).not_to model_have_error_on_field(:username)
+ expect(account).to model_have_error_on_field(:username)
end
it 'is valid even if the username is longer then 30 characters' do
From 60df87f6f0fb8afd9a4e750917eff7c425b62891 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Tue, 31 Jul 2018 01:14:33 +0200
Subject: [PATCH 056/196] Compensate for scrollbar disappearing when media
modal visible (#8100)
* Compensate for scrollbar disappearing when media modal visible
Make auth pages backgrounds lighter
* Fix typo
---
app/controllers/about_controller.rb | 2 +-
app/controllers/accounts_controller.rb | 1 +
.../auth/confirmations_controller.rb | 5 +++++
app/controllers/auth/passwords_controller.rb | 5 +++++
.../auth/registrations_controller.rb | 5 +++++
app/controllers/auth/sessions_controller.rb | 5 +++++
app/controllers/statuses_controller.rb | 2 ++
app/controllers/tags_controller.rb | 2 +-
.../mastodon/containers/media_container.js | 6 ++---
.../features/ui/components/modal_root.js | 13 ++++++-----
app/javascript/styles/mastodon/basics.scss | 22 ++++++++++++-------
.../styles/mastodon/containers.scss | 4 ----
spec/controllers/about_controller_spec.rb | 12 ----------
13 files changed, 49 insertions(+), 35 deletions(-)
diff --git a/app/controllers/about_controller.rb b/app/controllers/about_controller.rb
index 4ffdfb685..810f212fd 100644
--- a/app/controllers/about_controller.rb
+++ b/app/controllers/about_controller.rb
@@ -26,7 +26,7 @@ class AboutController < ApplicationController
end
def set_body_classes
- @body_classes = 'about-body'
+ @body_classes = 'with-modals'
end
def initial_state_params
diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb
index 1152d4aca..d63363156 100644
--- a/app/controllers/accounts_controller.rb
+++ b/app/controllers/accounts_controller.rb
@@ -10,6 +10,7 @@ class AccountsController < ApplicationController
def show
respond_to do |format|
format.html do
+ @body_classes = 'with-modals'
@pinned_statuses = []
if current_account && @account.blocking?(current_account)
diff --git a/app/controllers/auth/confirmations_controller.rb b/app/controllers/auth/confirmations_controller.rb
index 068e71cad..7af9cbe81 100644
--- a/app/controllers/auth/confirmations_controller.rb
+++ b/app/controllers/auth/confirmations_controller.rb
@@ -3,6 +3,7 @@
class Auth::ConfirmationsController < Devise::ConfirmationsController
layout 'auth'
+ before_action :set_body_classes
before_action :set_user, only: [:finish_signup]
# GET/PATCH /users/:id/finish_signup
@@ -23,6 +24,10 @@ class Auth::ConfirmationsController < Devise::ConfirmationsController
@user = current_user
end
+ def set_body_classes
+ @body_classes = 'lighter'
+ end
+
def user_params
params.require(:user).permit(:email)
end
diff --git a/app/controllers/auth/passwords_controller.rb b/app/controllers/auth/passwords_controller.rb
index 171b997dc..34b98da53 100644
--- a/app/controllers/auth/passwords_controller.rb
+++ b/app/controllers/auth/passwords_controller.rb
@@ -2,6 +2,7 @@
class Auth::PasswordsController < Devise::PasswordsController
before_action :check_validity_of_reset_password_token, only: :edit
+ before_action :set_body_classes
layout 'auth'
@@ -14,6 +15,10 @@ class Auth::PasswordsController < Devise::PasswordsController
end
end
+ def set_body_classes
+ @body_classes = 'lighter'
+ end
+
def reset_password_token_is_valid?
resource_class.with_reset_password_token(params[:reset_password_token]).present?
end
diff --git a/app/controllers/auth/registrations_controller.rb b/app/controllers/auth/registrations_controller.rb
index 58961554e..a19f4e62e 100644
--- a/app/controllers/auth/registrations_controller.rb
+++ b/app/controllers/auth/registrations_controller.rb
@@ -8,6 +8,7 @@ class Auth::RegistrationsController < Devise::RegistrationsController
before_action :configure_sign_up_params, only: [:create]
before_action :set_sessions, only: [:edit, :update]
before_action :set_instance_presenter, only: [:new, :create, :update]
+ before_action :set_body_classes, only: [:new, :create]
def destroy
not_found
@@ -79,6 +80,10 @@ class Auth::RegistrationsController < Devise::RegistrationsController
@instance_presenter = InstancePresenter.new
end
+ def set_body_classes
+ @body_classes = 'lighter'
+ end
+
def set_invite
@invite = invite_code.present? ? Invite.find_by(code: invite_code) : nil
end
diff --git a/app/controllers/auth/sessions_controller.rb b/app/controllers/auth/sessions_controller.rb
index c1ebe760c..2e721160b 100644
--- a/app/controllers/auth/sessions_controller.rb
+++ b/app/controllers/auth/sessions_controller.rb
@@ -9,6 +9,7 @@ class Auth::SessionsController < Devise::SessionsController
skip_before_action :check_suspension, only: [:destroy]
prepend_before_action :authenticate_with_two_factor, if: :two_factor_enabled?, only: [:create]
before_action :set_instance_presenter, only: [:new]
+ before_action :set_body_classes
def new
Devise.omniauth_configs.each do |provider, config|
@@ -109,6 +110,10 @@ class Auth::SessionsController < Devise::SessionsController
@instance_presenter = InstancePresenter.new
end
+ def set_body_classes
+ @body_classes = 'lighter'
+ end
+
def home_paths(resource)
paths = [about_path]
if single_user_mode? && resource.is_a?(User)
diff --git a/app/controllers/statuses_controller.rb b/app/controllers/statuses_controller.rb
index 755af1deb..819fcfc70 100644
--- a/app/controllers/statuses_controller.rb
+++ b/app/controllers/statuses_controller.rb
@@ -22,6 +22,8 @@ class StatusesController < ApplicationController
def show
respond_to do |format|
format.html do
+ @body_classes = 'with-modals'
+
set_ancestors
set_descendants
diff --git a/app/controllers/tags_controller.rb b/app/controllers/tags_controller.rb
index 014a5c9b8..8772509d5 100644
--- a/app/controllers/tags_controller.rb
+++ b/app/controllers/tags_controller.rb
@@ -37,7 +37,7 @@ class TagsController < ApplicationController
private
def set_body_classes
- @body_classes = 'tag-body'
+ @body_classes = 'with-modals'
end
def set_instance_presenter
diff --git a/app/javascript/mastodon/containers/media_container.js b/app/javascript/mastodon/containers/media_container.js
index 1700fba05..43bb39403 100644
--- a/app/javascript/mastodon/containers/media_container.js
+++ b/app/javascript/mastodon/containers/media_container.js
@@ -29,19 +29,19 @@ export default class MediaContainer extends PureComponent {
};
handleOpenMedia = (media, index) => {
- document.body.classList.add('media-standalone__body');
+ document.body.classList.add('with-modals--active');
this.setState({ media, index });
}
handleOpenVideo = (video, time) => {
const media = ImmutableList([video]);
- document.body.classList.add('media-standalone__body');
+ document.body.classList.add('with-modals--active');
this.setState({ media, time });
}
handleCloseMedia = () => {
- document.body.classList.remove('media-standalone__body');
+ document.body.classList.remove('with-modals--active');
this.setState({ media: null, index: null, time: null });
}
diff --git a/app/javascript/mastodon/features/ui/components/modal_root.js b/app/javascript/mastodon/features/ui/components/modal_root.js
index a334318ce..d8e034554 100644
--- a/app/javascript/mastodon/features/ui/components/modal_root.js
+++ b/app/javascript/mastodon/features/ui/components/modal_root.js
@@ -41,14 +41,15 @@ export default class ModalRoot extends React.PureComponent {
};
getSnapshotBeforeUpdate () {
- const visible = !!this.props.type;
- return {
- overflowY: visible ? 'hidden' : null,
- };
+ return { visible: !!this.props.type };
}
- componentDidUpdate (prevProps, prevState, { overflowY }) {
- document.body.style.overflowY = overflowY;
+ componentDidUpdate (prevProps, prevState, { visible }) {
+ if (visible) {
+ document.body.classList.add('with-modals--active');
+ } else {
+ document.body.classList.remove('with-modals--active');
+ }
}
renderLoading = modalId => () => {
diff --git a/app/javascript/styles/mastodon/basics.scss b/app/javascript/styles/mastodon/basics.scss
index c45a50756..7a6a1c490 100644
--- a/app/javascript/styles/mastodon/basics.scss
+++ b/app/javascript/styles/mastodon/basics.scss
@@ -1,8 +1,6 @@
body {
font-family: 'mastodon-font-sans-serif', sans-serif;
background: darken($ui-base-color, 8%);
- background-size: cover;
- background-attachment: fixed;
font-size: 13px;
line-height: 18px;
font-weight: 400;
@@ -34,16 +32,24 @@ body {
height: 100%;
padding: 0;
background: $ui-base-color;
+
+ &.with-modals--active {
+ overflow-y: hidden;
+ }
}
- &.about-body {
- background: darken($ui-base-color, 8%);
- padding-bottom: 0;
+ &.lighter {
+ background: $ui-base-color;
}
- &.tag-body {
- background: darken($ui-base-color, 8%);
- padding-bottom: 0;
+ &.with-modals {
+ overflow-x: hidden;
+ overflow-y: scroll;
+
+ &--active {
+ overflow-y: hidden;
+ margin-right: 13px;
+ }
}
&.player {
diff --git a/app/javascript/styles/mastodon/containers.scss b/app/javascript/styles/mastodon/containers.scss
index c2ff77783..7b339277f 100644
--- a/app/javascript/styles/mastodon/containers.scss
+++ b/app/javascript/styles/mastodon/containers.scss
@@ -60,10 +60,6 @@
}
}
-.media-standalone__body {
- overflow: hidden;
-}
-
.account-header {
width: 400px;
margin: 0 auto;
diff --git a/spec/controllers/about_controller_spec.rb b/spec/controllers/about_controller_spec.rb
index 2089b3b16..03dddd8c1 100644
--- a/spec/controllers/about_controller_spec.rb
+++ b/spec/controllers/about_controller_spec.rb
@@ -8,10 +8,6 @@ RSpec.describe AboutController, type: :controller do
get :show
end
- it 'assigns @body_classes' do
- expect(assigns(:body_classes)).to eq 'about-body'
- end
-
it 'assigns @instance_presenter' do
expect(assigns(:instance_presenter)).to be_kind_of InstancePresenter
end
@@ -26,10 +22,6 @@ RSpec.describe AboutController, type: :controller do
get :more
end
- it 'assigns @body_classes' do
- expect(assigns(:body_classes)).to eq 'about-body'
- end
-
it 'assigns @instance_presenter' do
expect(assigns(:instance_presenter)).to be_kind_of InstancePresenter
end
@@ -44,10 +36,6 @@ RSpec.describe AboutController, type: :controller do
get :terms
end
- it 'assigns @body_classes' do
- expect(assigns(:body_classes)).to eq 'about-body'
- end
-
it 'returns http success' do
expect(response).to have_http_status(200)
end
From 13ac8ca66ab01c92e4ebcc7221efb3d474c9fd0b Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Tue, 31 Jul 2018 02:54:25 +0200
Subject: [PATCH 057/196] Do not hide hashtag timeline in mobile view, make it
full-window (#8093)
---
app/javascript/styles/mastodon/about.scss | 32 ++++++++++++++---------
1 file changed, 20 insertions(+), 12 deletions(-)
diff --git a/app/javascript/styles/mastodon/about.scss b/app/javascript/styles/mastodon/about.scss
index fefb03407..b9544bb33 100644
--- a/app/javascript/styles/mastodon/about.scss
+++ b/app/javascript/styles/mastodon/about.scss
@@ -1115,6 +1115,21 @@ $small-breakpoint: 960px;
}
&.tag-page {
+ @media screen and (max-width: $column-breakpoint) {
+ padding: 0;
+
+ .container {
+ padding: 0;
+ }
+
+ #mastodon-timeline {
+ display: block;
+ width: 100vw;
+ height: 100vh;
+ border-radius: 0;
+ }
+ }
+
.grid {
@media screen and (min-width: $small-breakpoint) {
grid-template-columns: 33% 67%;
@@ -1146,23 +1161,16 @@ $small-breakpoint: 960px;
@media screen and (max-width: $column-breakpoint) {
.grid {
- .column-1 {
- grid-column: 1;
- grid-row: 2;
- }
+ grid-gap: 0;
- .column-2 {
+ .column-1 {
grid-column: 1;
grid-row: 1;
}
- }
- .brand {
- margin: 0;
- }
-
- .landing-page__features {
- display: none;
+ .column-2 {
+ display: none;
+ }
}
}
}
From 9ae53ad59ee18459775d19c4699c771c7f86fa7c Mon Sep 17 00:00:00 2001
From: mimikun
Date: Tue, 31 Jul 2018 21:38:31 +0900
Subject: [PATCH 058/196] Fix nodejs 8.x install in vagrant (#8105)
---
Vagrantfile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Vagrantfile b/Vagrantfile
index ddcdf3510..57fec9e02 100644
--- a/Vagrantfile
+++ b/Vagrantfile
@@ -12,7 +12,7 @@ curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
sudo apt-add-repository 'deb https://dl.yarnpkg.com/debian/ stable main'
# Add repo for NodeJS
-curl -sL https://deb.nodesource.com/setup_6.x | sudo bash -
+curl -sL https://deb.nodesource.com/setup_8.x | sudo bash -
# Add firewall rule to redirect 80 to PORT and save
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port #{ENV["PORT"]}
From cc56f2230a10c4fded80a34e5297fad8d9891e02 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Tue, 31 Jul 2018 18:59:34 +0200
Subject: [PATCH 059/196] Add separate setting for sidebar text
(site_short_description) (#8107)
* Add separate setting for sidebar text (site_short_description)
* Fix tests
---
app/controllers/admin/settings_controller.rb | 1 +
app/models/form/admin_settings.rb | 2 ++
app/presenters/instance_presenter.rb | 1 +
app/views/admin/settings/edit.html.haml | 3 ++-
app/views/application/_sidebar.html.haml | 2 +-
app/views/shared/_og.html.haml | 2 +-
config/locales/en.yml | 5 ++++-
config/settings.yml | 1 +
spec/views/about/show.html.haml_spec.rb | 1 +
9 files changed, 14 insertions(+), 4 deletions(-)
diff --git a/app/controllers/admin/settings_controller.rb b/app/controllers/admin/settings_controller.rb
index 75d00326c..3234b194f 100644
--- a/app/controllers/admin/settings_controller.rb
+++ b/app/controllers/admin/settings_controller.rb
@@ -6,6 +6,7 @@ module Admin
site_contact_username
site_contact_email
site_title
+ site_short_description
site_description
site_extended_description
site_terms
diff --git a/app/models/form/admin_settings.rb b/app/models/form/admin_settings.rb
index 723480bdd..010cf7fc3 100644
--- a/app/models/form/admin_settings.rb
+++ b/app/models/form/admin_settings.rb
@@ -10,6 +10,8 @@ class Form::AdminSettings
:site_contact_email=,
:site_title,
:site_title=,
+ :site_short_description,
+ :site_short_description=,
:site_description,
:site_description=,
:site_extended_description,
diff --git a/app/presenters/instance_presenter.rb b/app/presenters/instance_presenter.rb
index e4972c962..31365b646 100644
--- a/app/presenters/instance_presenter.rb
+++ b/app/presenters/instance_presenter.rb
@@ -6,6 +6,7 @@ class InstancePresenter
:site_contact_email,
:open_registrations,
:site_title,
+ :site_short_description,
:site_description,
:site_extended_description,
:site_terms,
diff --git a/app/views/admin/settings/edit.html.haml b/app/views/admin/settings/edit.html.haml
index f5c5deca8..fda6b00f4 100644
--- a/app/views/admin/settings/edit.html.haml
+++ b/app/views/admin/settings/edit.html.haml
@@ -7,7 +7,8 @@
.fields-group
= f.input :site_title, placeholder: t('admin.settings.site_title')
- = f.input :site_description, wrapper: :with_block_label, as: :text, label: t('admin.settings.site_description.title'), hint: t('admin.settings.site_description.desc_html'), input_html: { rows: 8 }
+ = f.input :site_short_description, wrapper: :with_block_label, as: :text, label: t('admin.settings.site_short_description.title'), hint: t('admin.settings.site_short_description.desc_html'), input_html: { rows: 2 }
+ = f.input :site_description, wrapper: :with_block_label, as: :text, label: t('admin.settings.site_description.title'), hint: t('admin.settings.site_description.desc_html'), input_html: { rows: 4 }
= f.input :site_contact_username, placeholder: t('admin.settings.contact_information.username')
= f.input :site_contact_email, placeholder: t('admin.settings.contact_information.email')
diff --git a/app/views/application/_sidebar.html.haml b/app/views/application/_sidebar.html.haml
index 3d8832bb4..2ff14b252 100644
--- a/app/views/application/_sidebar.html.haml
+++ b/app/views/application/_sidebar.html.haml
@@ -3,4 +3,4 @@
= image_tag @instance_presenter.hero&.file&.url || @instance_presenter.thumbnail&.file&.url || asset_pack_path('preview.jpg'), alt: @instance_presenter.site_title
.hero-widget__text
- %p= @instance_presenter.site_description.html_safe.presence || t('about.generic_description', domain: site_hostname)
+ %p= @instance_presenter.site_short_description.html_safe.presence || @instance_presenter.site_description.html_safe.presence || t('about.generic_description', domain: site_hostname)
diff --git a/app/views/shared/_og.html.haml b/app/views/shared/_og.html.haml
index a6d805bea..76db511cd 100644
--- a/app/views/shared/_og.html.haml
+++ b/app/views/shared/_og.html.haml
@@ -3,7 +3,7 @@
= opengraph 'og:url', url_for(only_path: false)
= opengraph 'og:type', 'website'
= opengraph 'og:title', @instance_presenter.site_title
-= opengraph 'og:description', strip_tags(@instance_presenter.site_description.presence || t('about.about_mastodon_html'))
+= opengraph 'og:description', strip_tags(@instance_presenter.site_short_description.presence || @instance_presenter.site_description.presence || t('about.about_mastodon_html'))
= opengraph 'og:image', full_asset_url(thumbnail&.file&.url || asset_pack_path('preview.jpg', protocol: :request))
= opengraph 'og:image:width', thumbnail ? thumbnail.meta['width'] : '1200'
= opengraph 'og:image:height', thumbnail ? thumbnail.meta['height'] : '630'
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 66f475ded..4693fe1ba 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -372,11 +372,14 @@ en:
desc_html: Show a staff badge on a user page
title: Show staff badge
site_description:
- desc_html: Introductory paragraph on the frontpage and in meta tags. You can use HTML tags, in particular <a>
and <em>
.
+ desc_html: Introductory paragraph on the frontpage. Describe what makes this Mastodon server special and anything else important. You can use HTML tags, in particular <a>
and <em>
.
title: Instance description
site_description_extended:
desc_html: A good place for your code of conduct, rules, guidelines and other things that set your instance apart. You can use HTML tags
title: Custom extended information
+ site_short_description:
+ desc_html: Displayed in sidebar and meta tags. Describe what Mastodon is and what makes this server special in a single paragraph. If empty, defaults to instance description.
+ title: Short instance description
site_terms:
desc_html: You can write your own privacy policy, terms of service or other legalese. You can use HTML tags
title: Custom terms of service
diff --git a/config/settings.yml b/config/settings.yml
index 190f6afcd..399f25a9a 100644
--- a/config/settings.yml
+++ b/config/settings.yml
@@ -8,6 +8,7 @@
#
defaults: &defaults
site_title: Mastodon
+ site_short_description: ''
site_description: ''
site_extended_description: ''
site_terms: ''
diff --git a/spec/views/about/show.html.haml_spec.rb b/spec/views/about/show.html.haml_spec.rb
index cbe5aa93b..12efc06fd 100644
--- a/spec/views/about/show.html.haml_spec.rb
+++ b/spec/views/about/show.html.haml_spec.rb
@@ -11,6 +11,7 @@ describe 'about/show.html.haml', without_verify_partial_doubles: true do
it 'has valid open graph tags' do
instance_presenter = double(:instance_presenter,
site_title: 'something',
+ site_short_description: 'something',
site_description: 'something',
version_number: '1.0',
source_url: 'https://github.com/tootsuite/mastodon',
From 4da03a298a20e5007718764483544593556a5ed4 Mon Sep 17 00:00:00 2001
From: Yamagishi Kazutoshi
Date: Thu, 2 Aug 2018 00:57:02 +0900
Subject: [PATCH 060/196] Do not show pinned toots when min_id is set (#8111)
---
app/controllers/accounts_controller.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb
index d63363156..86e3b6e47 100644
--- a/app/controllers/accounts_controller.rb
+++ b/app/controllers/accounts_controller.rb
@@ -51,7 +51,7 @@ class AccountsController < ApplicationController
private
def show_pinned_statuses?
- [replies_requested?, media_requested?, params[:max_id].present?, params[:since_id].present?].none?
+ [replies_requested?, media_requested?, params[:max_id].present?, params[:min_id].present?].none?
end
def filtered_statuses
From dad8a1baf2b042cd05ddb3abbe64093ef07921ab Mon Sep 17 00:00:00 2001
From: ThibG
Date: Thu, 2 Aug 2018 15:08:29 +0200
Subject: [PATCH 061/196] Render custom emoji in display name on public profile
(#8115)
---
app/views/accounts/_header.html.haml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/views/accounts/_header.html.haml b/app/views/accounts/_header.html.haml
index e343be820..d3b9893c4 100644
--- a/app/views/accounts/_header.html.haml
+++ b/app/views/accounts/_header.html.haml
@@ -7,7 +7,7 @@
.public-account-header__tabs
.public-account-header__tabs__name
%h1
- = display_name(account)
+ = display_name(account, custom_emojify: true)
%small
= acct(account)
= fa_icon('lock') if account.locked?
From 23b22d0dffdefc519eb85e386e9be74f9066199a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marcin=20Miko=C5=82ajczak?=
Date: Fri, 3 Aug 2018 00:09:24 +0200
Subject: [PATCH 062/196] i18n: Make Polish translation more gender neutral +
update (#8119)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Marcin Mikołajczak
---
app/javascript/mastodon/locales/pl.json | 22 ++---
config/locales/devise.pl.yml | 22 ++---
config/locales/doorkeeper.pl.yml | 2 +-
config/locales/pl.yml | 108 +++++++++++++-----------
4 files changed, 83 insertions(+), 71 deletions(-)
diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json
index 728a2c88c..aedc8539a 100644
--- a/app/javascript/mastodon/locales/pl.json
+++ b/app/javascript/mastodon/locales/pl.json
@@ -2,7 +2,7 @@
"account.badges.bot": "Bot",
"account.block": "Blokuj @{name}",
"account.block_domain": "Blokuj wszystko z {domain}",
- "account.blocked": "Zablokowany",
+ "account.blocked": "Zablokowany(-a)",
"account.direct": "Wyślij wiadomość bezpośrednią do @{name}",
"account.disclaimer_full": "Poniższe informacje mogą nie odwzorowywać bezbłędnie profilu użytkownika.",
"account.domain_blocked": "Ukryto domenę",
@@ -14,7 +14,7 @@
"account.hide_reblogs": "Ukryj podbicia od @{name}",
"account.media": "Zawartość multimedialna",
"account.mention": "Wspomnij o @{name}",
- "account.moved_to": "{name} przeniósł się do:",
+ "account.moved_to": "{name} przeniósł(-osła) się do:",
"account.mute": "Wycisz @{name}",
"account.mute_notifications": "Wycisz powiadomienia o @{name}",
"account.muted": "Wyciszony",
@@ -106,7 +106,7 @@
"emoji_button.travel": "Podróże i miejsca",
"empty_column.community": "Lokalna oś czasu jest pusta. Napisz coś publicznie, aby zagaić!",
"empty_column.direct": "Nie masz żadnych wiadomości bezpośrednich. Kiedy dostaniesz lub wyślesz jakąś, pojawi się ona tutaj.",
- "empty_column.hashtag": "Nie ma wpisów oznaczonych tym hashtagiem. Możesz napisać pierwszy!",
+ "empty_column.hashtag": "Nie ma wpisów oznaczonych tym hashtagiem. Możesz napisać pierwszy(-a)!",
"empty_column.home": "Nie śledzisz nikogo. Odwiedź globalną oś czasu lub użyj wyszukiwarki, aby znaleźć interesujące Cię profile.",
"empty_column.home.public_timeline": "globalna oś czasu",
"empty_column.list": "Nie ma nic na tej liście. Kiedy członkowie listy dodadzą nowe wpisy, pojawia się one tutaj.",
@@ -135,7 +135,7 @@
"keyboard_shortcuts.favourite": "aby dodać do ulubionych",
"keyboard_shortcuts.heading": "Skróty klawiszowe",
"keyboard_shortcuts.hotkey": "Klawisz",
- "keyboard_shortcuts.legend": "aby wyświetlić tą legendę",
+ "keyboard_shortcuts.legend": "aby wyświetlić tę legendę",
"keyboard_shortcuts.mention": "aby wspomnieć o autorze",
"keyboard_shortcuts.profile": "aby przejść do profilu autora wpisu",
"keyboard_shortcuts.reply": "aby odpowiedzieć",
@@ -179,10 +179,10 @@
"navigation_bar.preferences": "Preferencje",
"navigation_bar.public_timeline": "Globalna oś czasu",
"navigation_bar.security": "Bezpieczeństwo",
- "notification.favourite": "{name} dodał Twój wpis do ulubionych",
- "notification.follow": "{name} zaczął Cię śledzić",
- "notification.mention": "{name} wspomniał o tobie",
- "notification.reblog": "{name} podbił Twój wpis",
+ "notification.favourite": "{name} dodał(a) Twój wpis do ulubionych",
+ "notification.follow": "{name} zaczął(-ęła) Cię śledzić",
+ "notification.mention": "{name} wspomniał(a) o tobie",
+ "notification.reblog": "{name} podbił(a) Twój wpis",
"notifications.clear": "Wyczyść powiadomienia",
"notifications.clear_confirmation": "Czy na pewno chcesz bezpowrotnie usunąć wszystkie powiadomienia?",
"notifications.column_settings.alert": "Powiadomienia na pulpicie",
@@ -241,7 +241,7 @@
"report.target": "Zgłaszanie {target}",
"search.placeholder": "Szukaj",
"search_popout.search_format": "Zaawansowane wyszukiwanie",
- "search_popout.tips.full_text": "Pozwala na wyszukiwanie wpisów które napisałeś, dodałeś do ulubionych, podbiłeś w których o Tobie wspomniano, oraz pasujące nazwy użytkowników, pełne nazwy i hashtagi.",
+ "search_popout.tips.full_text": "Pozwala na wyszukiwanie wpisów które napisałeś(-aś), dodałeś(-aś) do ulubionych lub podbiłeś(-aś), w których o Tobie wspomniano, oraz pasujące nazwy użytkowników, pełne nazwy i hashtagi.",
"search_popout.tips.hashtag": "hashtag",
"search_popout.tips.status": "wpis",
"search_popout.tips.text": "Proste wyszukiwanie pasujących pseudonimów, nazw użytkowników i hashtagów",
@@ -258,7 +258,7 @@
"status.direct": "Wyślij wiadomość bezpośrednią do @{name}",
"status.embed": "Osadź",
"status.favourite": "Dodaj do ulubionych",
- "status.filtered": "Filtrowany",
+ "status.filtered": "Filtrowany(-a)",
"status.load_more": "Załaduj więcej",
"status.media_hidden": "Zawartość multimedialna ukryta",
"status.mention": "Wspomnij o @{name}",
@@ -270,7 +270,7 @@
"status.pinned": "Przypięty wpis",
"status.reblog": "Podbij",
"status.reblog_private": "Podbij dla odbiorców oryginalnego wpisu",
- "status.reblogged_by": "{name} podbił",
+ "status.reblogged_by": "{name} podbił(a)",
"status.redraft": "Usuń i przeredaguj",
"status.reply": "Odpowiedz",
"status.replyAll": "Odpowiedz na wątek",
diff --git a/config/locales/devise.pl.yml b/config/locales/devise.pl.yml
index 53a4f4552..49fcca024 100644
--- a/config/locales/devise.pl.yml
+++ b/config/locales/devise.pl.yml
@@ -6,7 +6,7 @@ pl:
send_instructions: W ciągu kilku minut otrzymasz wiadomosć e-mail z instrukcją jak potwierdzić Twój adres e-mail. Jeżeli nie otrzymano wiadomości, sprawdź folder ze spamem.
send_paranoid_instructions: Jeśli Twój adres e-mail już istnieje w naszej bazie danych, w ciągu kilku minut otrzymasz wiadomość e-mail z instrukcją jak potwierdzić Twój adres e-mail. Jeżeli nie otrzymano wiadomości, sprawdź folder ze spamem.
failure:
- already_authenticated: Jesteś już zalogowany/zalogowana.
+ already_authenticated: Jesteś już zalogowany(-a).
inactive: Twoje konto nie zostało jeszcze aktywowane.
invalid: Nieprawidłowy %{authentication_keys} lub hasło.
last_attempt: Masz jeszcze jedną próbę; Twoje konto zostanie zablokowane jeśli się nie powiedzie.
@@ -18,28 +18,28 @@ pl:
mailer:
confirmation_instructions:
action: Zweryfikuj adres e-mail
- explanation: Utworzyłeś konto na %{host} podając ten adres e-mail. Jedno kliknięcie dzieli Cię od aktywacji tego konta. Jeżeli to nie Ty, zignoruj ten e-mail.
+ explanation: Utworzyłeś(-aś) konto na %{host} podając ten adres e-mail. Jedno kliknięcie dzieli Cię od aktywacji tego konta. Jeżeli to nie Ty, zignoruj ten e-mail.
extra_html: Przeczytaj też regulamin instancji i nasze zasady użytkowania .
subject: 'Mastodon: Instrukcje weryfikacji adresu e-mail'
title: Zweryfikuj adres e-mail
email_changed:
explanation: 'Adres e-mail dla Twojego konta zostanie zmieniony na:'
- extra: Jeżeli nie próbowałeś zmienić adresu e-mail, prawdopodobnie ktoś uzyskał dostęp do Twojego konta. Zmień natychmiastowo hasło lub skontaktuj się z administratorem isntancji, jeżeli nie masz dostępu do konta.
+ extra: Jeżeli nie próbowałeś(-aś) zmienić adresu e-mail, prawdopodobnie ktoś uzyskał dostęp do Twojego konta. Zmień natychmiastowo hasło lub skontaktuj się z administratorem isntancji, jeżeli nie masz dostępu do konta.
subject: 'Mastodon: Zmieniono adres e-mail'
title: Nowy adres e-mail
password_change:
explanation: Hasło do Twojego konta zostało zmienione.
- extra: Jeżeli nie zmieniałeś hasła, prawdopodobnie ktoś uzyskał dostęp do Twojego konta. Zmień hasło natychmiastowo lub skontaktuj się z administratorem instancji, jeżeli nie masz dostępu do konta.
+ extra: Jeżeli nie zmieniałeś(-aś) hasła, prawdopodobnie ktoś uzyskał dostęp do Twojego konta. Zmień hasło natychmiastowo lub skontaktuj się z administratorem instancji, jeżeli nie masz dostępu do konta.
subject: 'Mastodon: Zmieniono hasło'
title: Zmieniono hasło
reconfirmation_instructions:
explanation: Potwierdź nowy adres aby zmienić e-mail.
- extra: Jeżeli nie próbowałeś zmienić e-maila, zignoruj tą wiadomość. Adres e-mail przypisany do konta Mastodona nie ulegnie zmianie, jeżeli nie użyjesz powyższego odnośniku.
+ extra: Jeżeli nie próbowałeś(-aś) zmienić e-maila, zignoruj tą wiadomość. Adres e-mail przypisany do konta Mastodona nie ulegnie zmianie, jeżeli nie użyjesz powyższego odnośniku.
subject: 'Mastodon: Potwierdź adres e-mail na &{instance}'
title: Zweryfikuj adres e-mail
reset_password_instructions:
action: Zmień hasło
- explanation: Próbowałeś uzyskać nowe hasło do swojego konta.
+ explanation: Próbowałeś(-aś) uzyskać nowe hasło do swojego konta.
extra: Jeżeli to nie Ty, zignoruj tą wiadomość. Twoje hasło nie ulegnie zmianie, jeżeli nie wykorzystasz powyższego odnośnika i nie utworzysz nowego hasła.
subject: 'Mastodon: Instrukcje ustawienia nowego hasła'
title: Przywracanie hasła
@@ -49,10 +49,10 @@ pl:
failure: 'Uwierzytelnienie przez %{kind} nie powiodło się, ponieważ: "%{reason}".'
success: Uwierzytelnienie przez %{kind} powiodło się.
passwords:
- no_token: Dostęp do tej strony możliwy jest wyłącznie za pomocą odnośnika z e-maila z instrukcjami ustawienia nowego hasła. Jeśli skorzystałeś/aś z takiego odnośnika, upewnij się, że został wykorzystany/skopiowany cały odnośnik.
+ no_token: Dostęp do tej strony możliwy jest wyłącznie za pomocą odnośnika z e-maila z instrukcjami ustawienia nowego hasła. Jeśli skorzystałeś(-aś) z takiego odnośnika, upewnij się, że został wykorzystany/skopiowany cały odnośnik.
send_instructions: W ciągu kilku minut otrzymasz wiadomość e-mail z instrukcją ustawienia nowego hasła. Jeżeli nie otrzymano wiadomości, sprawdź folder ze spamem.
send_paranoid_instructions: Jeśli Twój adres e-mail już istnieje w naszej bazie danych, w ciągu kilku minut otrzymasz wiadomość e-mail zawierającą odnośnik pozwalający na ustawienie nowego hasła. Jeżeli nie otrzymano wiadomości, sprawdź folder ze spamem.
- updated: Twoje hasło zostało zmienione. Jesteś zalogowany/a.
+ updated: Twoje hasło zostało zmienione. Jesteś zalogowany(-a).
updated_not_active: Twoje hasło zostało zmienione.
registrations:
destroyed: Twoje konto zostało zawieszone. Mamy jednak nadzieję, że do nas wrócisz. Do zobaczenia!
@@ -63,9 +63,9 @@ pl:
update_needs_confirmation: Konto zostało zaktualizowane, musimy jednak zweryfikować Twój nowy adres e-mail. Została na niego wysłana wiadomość z odnośnikiem potwierdzającym. Jeżeli nie otrzymano wiadomości, sprawdź folder ze spamem.
updated: Konto zostało zaktualizowane.
sessions:
- already_signed_out: Zostałeś/aś wylogowany/a.
- signed_in: Zostałeś/aś zalogowany/a.
- signed_out: Zostałeś/aś wylogowany/a.
+ already_signed_out: Zostałeś(-aś) wylogowany(-a).
+ signed_in: Zostałeś(-aś) zalogowany(-a).
+ signed_out: Zostałeś(-aś) wylogowany(-a).
unlocks:
send_instructions: W ciągu kilku minut otrzymasz wiadomość e-mail z instrukcjami odblokowania konta. Jeżeli nie otrzymano wiadomości, sprawdź folder ze spamem.
send_paranoid_instructions: Jeśli Twoje konto istnieje, instrukcje odblokowania go otrzymasz w wiadomości e-mail w ciągu kilku minut. Jeżeli nie otrzymano wiadomości, sprawdź folder ze spamem.
diff --git a/config/locales/doorkeeper.pl.yml b/config/locales/doorkeeper.pl.yml
index 2e0254864..de724f6c9 100644
--- a/config/locales/doorkeeper.pl.yml
+++ b/config/locales/doorkeeper.pl.yml
@@ -90,7 +90,7 @@ pl:
revoked: Token dostępowy został unieważniony
unknown: Token dostępowy jest błędny
resource_owner_authenticator_not_configured: Wyszukiwanie właściciela zasobu nie powiodło się, ponieważ Doorkeeper.configure.resource_owner_authenticator nie został skonfigurowany.
- server_error: Serwer uwierzytelniający napotkał nieoczekiwand warunki, które uniemożliwiły obsłużenie żądania.
+ server_error: Serwer uwierzytelniający napotkał nieoczekiwane warunki, które uniemożliwiły obsłużenie żądania.
temporarily_unavailable: Serwer uwierzytelniający nie jest obecnie w stanie obsłużyć żądania z powodu tymczasowego przeciążenia lub prac konserwacyjnych.
unauthorized_client: Klient nie jest uprawniony do wykonania tego żądania przy pomocy tej metody.
unsupported_grant_type: Ten typ grantu uwierzytelniającego nie jest wspierany przez serwer uwierzytelniający.
diff --git a/config/locales/pl.yml b/config/locales/pl.yml
index c33078496..4407fd548 100644
--- a/config/locales/pl.yml
+++ b/config/locales/pl.yml
@@ -5,11 +5,13 @@ pl:
about_mastodon_html: Mastodon jest wolną i otwartą siecią społecznościową, zdecentralizowaną alternatywą dla zamkniętych, komercyjnych platform.
about_this: O tej instancji
administered_by: 'Administrowana przez:'
+ api: API
closed_registrations: Rejestracja na tej instancji jest obecnie zamknięta. Możesz jednak zarejestrować się na innej instancji, uzyskując dostęp do tej samej sieci.
contact: Kontakt
contact_missing: Nie ustawiono
contact_unavailable: Nie dotyczy
description_headline: Czym jest %{domain}?
+ documentation: Dokumentacja
domain_count_after: instancjami
domain_count_before: Serwer połączony z
extended_description_html: |
@@ -28,9 +30,11 @@ pl:
hosted_on: Mastodon uruchomiony na %{domain}
learn_more: Dowiedz się więcej
other_instances: Lista instancji
+ privacy_policy: Polityka prywatności
source_code: Kod źródłowy
status_count_after: wpisów
status_count_before: Są autorami
+ terms: Zasady użytkowania
user_count_after: użytkowników
user_count_before: Z serwera korzysta
what_is_mastodon: Czym jest Mastodon?
@@ -38,6 +42,7 @@ pl:
follow: Śledź
followers: Śledzący
following: Śledzeni
+ joined: Dołączył(a) %{date}
media: Zawartość multimedialna
moved_html: "%{name} korzysta teraz z konta %{new_profile_link}:"
network_hidden: Ta informacja nie jest dostępna
@@ -151,34 +156,34 @@ pl:
web: Sieć
action_logs:
actions:
- assigned_to_self_report: "%{name} przypisał sobie zgłoszenie %{target}"
- change_email_user: "%{name} zmienił adres-email użytkownika %{target}"
- confirm_user: "%{name} potwierdził adres e-mail użytkownika %{target}"
- create_custom_emoji: "%{name} dodał nowe emoji %{target}"
- create_domain_block: "%{name} zablokował domenę %{target}"
- create_email_domain_block: "%{name} dodał domenę e-mail %{target} na czarną listę"
- demote_user: "%{name} zdegradował użytkownika %{target}"
- destroy_domain_block: "%{name} odblokował domenę %{target}"
- destroy_email_domain_block: "%{name} usunął domenę e-mail %{target} z czarnej listy"
- destroy_status: "%{name} usunął wpis użytkownika %{target}"
- disable_2fa_user: "%{name} wyłączył uwierzytelnianie dwustopniowe użytkownikowi %{target}"
- disable_custom_emoji: "%{name} wyłączył emoji %{target}"
- disable_user: "%{name} zablokował możliwość logowania użytkownikowi %{target}"
- enable_custom_emoji: "%{name} włączył emoji %{target}"
- enable_user: "%{name} przywrócił możliwość logowania użytkownikowi %{target}"
- memorialize_account: "%{name} nadał kontu %{target} status in memoriam"
- promote_user: "%{name} podniósł uprawnienia użytkownikowi %{target}"
- remove_avatar_user: "%{name} usunął awatar użytkownikowi %{target}"
- reopen_report: "%{name} otworzył ponownie zgłoszenie %{target}"
- reset_password_user: "%{name} przywrócił hasło użytkownikowi %{target}"
- resolve_report: "%{name} rozwiązał zgłoszenie %{target}"
- silence_account: "%{name} wyciszył konto %{target}"
- suspend_account: "%{name} zawiesił konto %{target}"
- unassigned_report: "%{name} cofnął przypisanie zgłoszenia %{target}"
- unsilence_account: "%{name} cofnął wyciszenie konta %{target}"
- unsuspend_account: "%{name} cofnął zawieszenie konta %{target}"
- update_custom_emoji: "%{name} zaktualizował emoji %{target}"
- update_status: "%{name} zaktualizował wpis użytkownika %{target}"
+ assigned_to_self_report: "%{name} przypisał(a) sobie zgłoszenie %{target}"
+ change_email_user: "%{name} zmienił(a) adres e-mail użytkownika %{target}"
+ confirm_user: "%{name} potwierdził(a) adres e-mail użytkownika %{target}"
+ create_custom_emoji: "%{name} dodał(a) nowe emoji %{target}"
+ create_domain_block: "%{name} zablokował(a) domenę %{target}"
+ create_email_domain_block: "%{name} dodał(a) domenę e-mail %{target} na czarną listę"
+ demote_user: "%{name} zdegradował(a) użytkownika %{target}"
+ destroy_domain_block: "%{name} odblokował(a) domenę %{target}"
+ destroy_email_domain_block: "%{name} usunął(-ęła) domenę e-mail %{target} z czarnej listy"
+ destroy_status: "%{name} usunął(-ęła) wpis użytkownika %{target}"
+ disable_2fa_user: "%{name} wyłączył(a) uwierzytelnianie dwustopniowe użytkownikowi %{target}"
+ disable_custom_emoji: "%{name} wyłączył(a) emoji %{target}"
+ disable_user: "%{name} zablokował(a) możliwość logowania użytkownikowi %{target}"
+ enable_custom_emoji: "%{name} włączył(a) emoji %{target}"
+ enable_user: "%{name} przywrócił(a) możliwość logowania użytkownikowi %{target}"
+ memorialize_account: "%{name} nadał(a) kontu %{target} status in memoriam"
+ promote_user: "%{name} podniósł(a) uprawnienia użytkownikowi %{target}"
+ remove_avatar_user: "%{name} usunął(-ęła) awatar użytkownikowi %{target}"
+ reopen_report: "%{name} otworzył(a) ponownie zgłoszenie %{target}"
+ reset_password_user: "%{name} przywrócił(a) hasło użytkownikowi %{target}"
+ resolve_report: "%{name} rozwiązał(a) zgłoszenie %{target}"
+ silence_account: "%{name} wyciszył(a) konto %{target}"
+ suspend_account: "%{name} zawiesił(a) konto %{target}"
+ unassigned_report: "%{name} cofnął(-ęła) przypisanie zgłoszenia %{target}"
+ unsilence_account: "%{name} cofnął(-ęła) wyciszenie konta %{target}"
+ unsuspend_account: "%{name} cofnął(-ęła) zawieszenie konta %{target}"
+ update_custom_emoji: "%{name} zaktualizował(a) emoji %{target}"
+ update_status: "%{name} zaktualizował(a) wpis użytkownika %{target}"
title: Dziennik działań administracyjnych
custom_emojis:
by_domain: Domeny
@@ -368,13 +373,16 @@ pl:
desc_html: Pokazuj odznakę uprawnień na stronie profilu użytkownika
title: Pokazuj odznakę administracji
site_description:
- desc_html: Akapit wprowadzający, widoczny na stronie głównej i znacznikach meta. Możesz korzystać z tagów HTML, w szczególności <a>
i <em>
.
+ desc_html: Akapit wprowadzający, widoczny na stronie głównej. Opisz, co czyni tę instancję wyjątkową. Możesz korzystać ze znaczników HTML, w szczególności <a>
i <em>
.
title: Opis instancji
site_description_extended:
- desc_html: Dobre miejsce na zasady użytkowania, wprowadzenie i inne rzeczy, które wyróżniają tę instancję. Możesz korzystać z tagów HTML
+ desc_html: Dobre miejsce na zasady użytkowania, wprowadzenie i inne rzeczy, które wyróżniają tę instancję. Możesz korzystać ze znaczników HTML
title: Niestandardowy opis strony
+ site_short_description:
+ desc_html: Wyświetlany na pasku bocznym i w znacznikach meta. Opisz, czym jest Mastodon i czym wyróżnia się ta instancja w jednym akapicie. Jeżeli pusty, zostanie użyty opis instancji.
+ title: Krótki opis instancji
site_terms:
- desc_html: Miejsce na własną politykę prywatności, zasady użytkowania i inne unormowania prawne. Możesz korzystać z tagów HTML
+ desc_html: Miejsce na własną politykę prywatności, zasady użytkowania i inne unormowania prawne. Możesz korzystać ze znaczników HTML
title: Niestandardowe zasady użytkowania
site_title: Nazwa instancji
thumbnail:
@@ -406,8 +414,8 @@ pl:
title: Administracja
admin_mailer:
new_report:
- body: Użytkownik %{reporter} zgłosił %{target}
- body_remote: Użytkownik instancji %{domain} zgłosił %{target}
+ body: Użytkownik %{reporter} zgłosił(a) %{target}
+ body_remote: Użytkownik instancji %{domain} zgłosił(a) %{target}
subject: Nowe zgłoszenie na %{instance} (#%{id})
application_mailer:
notification_preferences: Zmień ustawienia e-maili
@@ -425,18 +433,18 @@ pl:
warning: Przechowuj te dane ostrożnie. Nie udostępniaj ich nikomu!
your_token: Twój token dostępu
auth:
- agreement_html: Rejestrując się, oświadczasz, że zapoznałeś się z informacjami o instancji i zasadami korzystania z usługi .
+ agreement_html: Rejestrując się, oświadczasz, że zapoznałeś(-aś) się z informacjami o instancji i zasadami korzystania z usługi .
change_password: Hasło
confirm_email: Potwierdź adres e-mail
delete_account: Usunięcie konta
delete_account_html: Jeżeli chcesz usunąć konto, przejdź tutaj . Otrzymasz prośbę o potwierdzenie.
- didnt_get_confirmation: Nie otrzymałeś instrukcji weryfikacji?
+ didnt_get_confirmation: Nie otrzymałeś(-aś) instrukcji weryfikacji?
forgot_password: Nie pamiętasz hasła?
invalid_reset_password_token: Token do resetowania hasła jest nieprawidłowy lub utracił ważność. Spróbuj uzyskać nowy.
login: Zaloguj się
logout: Wyloguj się
migrate_account: Przenieś konto
- migrate_account_html: Jeżeli chcesz skonfigurować przekierowanie z obecnego konta na inne, możesz skonfigurować to tutaj .
+ migrate_account_html: Jeżeli chcesz skonfigurować przekierowanie z obecnego konta na inne, możesz zrobić to tutaj .
or: lub
or_log_in_with: Lub zaloguj się z użyciem
providers:
@@ -534,6 +542,10 @@ pl:
true_privacy_html: Pamiętaj, że rzeczywista prywatność może zostać uzyskana wyłącznie dzięki szyfrowaniu end-to-end .
unlocked_warning_html: Każdy może Cię śledzić, dzięki czemu może zobaczyć Twoje niepubliczne wpisy. %{lock_link} aby móc kontrolować, kto Cię śledzi.
unlocked_warning_title: Twoje konto nie jest zablokowane
+ footer:
+ developers: Dla programistów
+ more: Więcej…
+ resources: Zasoby
generic:
changes_saved_msg: Ustawienia zapisane!
save_changes: Zapisz zmiany
@@ -563,7 +575,7 @@ pl:
'86400': dobie
expires_in_prompt: Nigdy
generate: Wygeneruj
- invited_by: 'Zostałeś zaproszony przez:'
+ invited_by: 'Zostałeś(-aś) zaproszony(-a) przez:'
max_uses:
few: "%{count} użycia"
many: "%{count} użyć"
@@ -615,13 +627,13 @@ pl:
title: Nowy śledzący
follow_request:
action: Zarządzaj prośbami o możliwość śledzenia
- body: "%{name} poprosił o możliwość śledzenia Cię"
+ body: "%{name} poprosił(a) o możliwość śledzenia Cię"
subject: 'Prośba o możliwość śledzenia: %{name}'
title: Nowa prośba o możliwość śledzenia
mention:
action: Odpowiedz
- body: "%{name} wspomniał o Tobie w:"
- subject: "%{name} wspomniał o Tobie"
+ body: "%{name} wspomniał(a) o Tobie w:"
+ subject: "%{name} wspomniał(a) o Tobie"
title: Nowe wspomnienie o Tobie
reblog:
body: 'Twój wpis został podbity przez %{name}:'
@@ -760,9 +772,9 @@ pl:
Jakie informacje zbieramy?
- Podstawowe informacje o koncie : Podczas rejestracji na tym serwerze, możesz zostać poproszony o wprowadzenie nazwy użytkownika, adresu e-mail i hasła. Możesz także wprowadzić dodatkowe informacje o profilu, takie jak nazwa wyświetlana i biografia oraz wysłać awatar i obraz nagłówka. Nazwa użytkownika, nazwa wyświetlana, biografia, awatar i obraz nagłówka są zawsze widoczne dla wszystkich.
+ Podstawowe informacje o koncie : Podczas rejestracji na tym serwerze, możesz zostać poproszony(-a) o wprowadzenie nazwy użytkownika, adresu e-mail i hasła. Możesz także wprowadzić dodatkowe informacje o profilu, takie jak nazwa wyświetlana i biografia oraz wysłać awatar i obraz nagłówka. Nazwa użytkownika, nazwa wyświetlana, biografia, awatar i obraz nagłówka są zawsze widoczne dla wszystkich.
Wpisy, śledzenie i inne publiczne informacje : Lista osób które śledzisz jest widoczna publicznie, tak jak lista osób, które Cię śledzą. Jeżeli dodasz wpis, data i czas jego utworzenia i aplikacja, z której go wysłano są przechowywane. Wiadomości mogą zawierać załączniki multimedialne, takie jak zdjęcia i filmy. Publiczne i niewidoczne wpisy są dostępne publicznie. Udostępniony wpis również jest widoczny publicznie. Twoje wpisy są dostarczane obserwującym, co oznacza że jego kopie mogą zostać dostarczone i być przechowywane na innych serwerach. Kiedy usuniesz wpis, przestaje być widoczny również dla osób śledzących Cię. „Podbijanie” i dodanie do ulubionych jest zawsze publiczne.
- Wpisy bezpośrednie i tylko dla śledzących : Wszystkie wpisy są przechowywane i przetwarzane na serwerze. Wpisy przeznaczone tylko dla śledzących są widoczne tylko dla nich i osób wspomnianych we wpisie, a wpisy bezpośrednie tylko dla wspimnianych. W wielu przypadkach oznacza to, że ich kopie są dostarczane i przechowywane na innych serwerach. Staramy się ograniczać zasięg tych wpisów wyłącznie do właściwych odbiorców, ale inne serwery mogą tego nie robić. Ważne jest, aby sprawdzać jakich serwerów używają osoby, które Cię śledzą. Możesz aktywować opcję pozwalającą na ręczne akceptowanie i odrzucanie nowych śledzących. Pamiętaj, że właściciele serwerów mogą zobaczyć te wiadomości , a odbiorcy mogą wykonać zrzut ekranu, skopiować lub udostępniać ten wpis. Nie udostępniaj wrażliwych danych z użyciem Mastodona.
+ Wpisy bezpośrednie i tylko dla śledzących : Wszystkie wpisy są przechowywane i przetwarzane na serwerze. Wpisy przeznaczone tylko dla śledzących są widoczne tylko dla nich i osób wspomnianych we wpisie, a wpisy bezpośrednie tylko dla wspomnianych. W wielu przypadkach oznacza to, że ich kopie są dostarczane i przechowywane na innych serwerach. Staramy się ograniczać zasięg tych wpisów wyłącznie do właściwych odbiorców, ale inne serwery mogą tego nie robić. Ważne jest, aby sprawdzać jakich serwerów używają osoby, które Cię śledzą. Możesz aktywować opcję pozwalającą na ręczne akceptowanie i odrzucanie nowych śledzących. Pamiętaj, że właściciele serwerów mogą zobaczyć te wiadomości , a odbiorcy mogą wykonać zrzut ekranu, skopiować lub udostępniać ten wpis. Nie udostępniaj wrażliwych danych z użyciem Mastodona.
Adresy IP i inne metadane : Kiedy zalogujesz się, przechowujemy adres IP użyty w trakcie logowania wraz z nazwą używanej przeglądarki. Wszystkie aktywne sesje możesz zobaczyć (i wygasić) w ustawieniach. Ostatnio używany adres IP jest przechowywany przez nas do 12 miesięcy. Możemy również przechowywać adresy IP wykorzystywane przy każdym działaniu na serwerze.
@@ -803,15 +815,15 @@ pl:
Czy używany plików cookies?
- Tak. Pliki cookies są małymi plikami, które strona lub dostawca jej usługi dostarcza na dysk twardy komputera z użyciem przeglądarki internetowej (jeżeli na to pozwoli). Pliki cookies pozwalają na rozpoznanie przeglądarki i – jeśli jesteś zarejestrowany – przypisanie jej do konta.
+ Tak. Pliki cookies są małymi plikami, które strona lub dostawca jej usługi dostarcza na dysk twardy komputera z użyciem przeglądarki internetowej (jeżeli na to pozwoli). Pliki cookies pozwalają na rozpoznanie przeglądarki i – jeśli jesteś zarejestrowany(-a) – przypisanie jej do konta.
- Wykorzystujemy pliki cookies, aby przechowywać preferencję użytkowników na przyszłe wizyty.
+ Wykorzystujemy pliki cookies, aby przechowywać preferencje użytkowników na przyszłe wizyty.
Czy przekazujemy informacje osobom trzecim?
- Nie sprzedajemy, nie wymieniamy i nie przekazujemy osobom trzecim informacji pozwalających na identyfikację Ciebie. Nie dotyczy to zaufanym dostawcom pomagającym w prowadzeniu lub obsługiwaniu użytkowników, jeżeli zgadzają się, aby nie przekazywać dalej tych informacji. Możemy również udostępnić informacje, jeżeli uważany to za wymagane przez prawo, konieczne do wypełnienia polityki strony, przestrzegania naszych lub cudzych praw, własności i bezpieczeństwa.
+ Nie sprzedajemy, nie wymieniamy i nie przekazujemy osobom trzecim informacji pozwalających na identyfikację Ciebie. Nie dotyczy to zaufanych dostawców pomagających w prowadzeniu strony lub obsługiwaniu użytkowników, jeżeli zgadzają się, aby nie przekazywać dalej tych informacji. Możemy również udostępnić informacje, jeżeli uważany to za wymagane przez prawo, konieczne do wypełnienia polityki strony, przestrzegania naszych lub cudzych praw, własności i bezpieczeństwa.
Twoja publiczna zawartość może zostać pobrana przez inne serwery w sieci. Wpisy publiczne i tylko dla śledzących są dostarczane na serwery, na których znajdują się śledzący Cię, a wiadomości bezpośrednie trafiają na serwery adresatów, jeżeli są oni użytkownikami innego serwera.
@@ -821,9 +833,9 @@ pl:
Korzystanie ze strony przez dzieci
- Jeżeli serwer znajduje się w UE lub w EOG: Ta strona, produkty i usługi są przeznaczone dla osób, które ukończyły 16 lat. Jeżeli nie ukończyłeś 16 roku życia, zgodnie z wymogami COPPA (Prawo o Ochronie Prywatności Dzieci w Internecie ), nie używaj tej strony.
+ Jeżeli serwer znajduje się w UE lub w EOG: Ta strona, produkty i usługi są przeznaczone dla osób, które ukończyły 16 lat. Jeżeli nie ukończyłeś(-aś) 16 roku życia, zgodnie z wymogami COPPA (Prawo o Ochronie Prywatności Dzieci w Internecie ), nie używaj tej strony.
- Jeżeli serwer znajduje się w USA: Ta strona, produkty i usługi są przeznaczone dla osób, które ukończyły 13 lat. Jeżeli nie ukończyłeś 13 roku życia, zgodnie z wymogami RODO (Ogólne rozporządzenie o ochronie danych ), nie używaj tej strony.
+ Jeżeli serwer znajduje się w USA: Ta strona, produkty i usługi są przeznaczone dla osób, które ukończyły 13 lat. Jeżeli nie ukończyłeś(-aś) 13 roku życia, zgodnie z wymogami RODO (Ogólne rozporządzenie o ochronie danych ), nie używaj tej strony.
Wymogi mogą być inne, jeżeli serwer znajduje się w innym kraju.
@@ -874,7 +886,7 @@ pl:
full_handle: Twój pełny adres
full_handle_hint: Ten adres możesz podać znajomym, aby mogli skontaktować się z Tobą lub zacząć śledzić z innej instancji.
review_preferences_action: Zmień ustawienia
- review_preferences_step: Upewnij się, że zmieniłeś ustawienia, takie jak maile, które chciałbyś otrzymywać lub domyślne opcje prywatności. Jeżeli nie masz choroby lokomocyjnej, możesz włączyć automatyczne odtwarzanie animacji GIF.
+ review_preferences_step: Upewnij się, że zmieniłeś(-aś) ustawienia, takie jak maile, które chciałbyś otrzymywać lub domyślne opcje prywatności. Jeżeli nie masz choroby lokomocyjnej, możesz włączyć automatyczne odtwarzanie animacji GIF.
subject: Witaj w Mastodonie
tip_bridge_html: Jeżeli przybywasz z Twittera, możesz znaleźć znajomych na Mastodonie używając aplikacji mostku . Działa to tylko, jeżeli oni również z niej korzystali!
tip_federated_timeline: Oś czasu federacji przedstawia całą sieć Mastodona. Wyświetla tylko wpisy osób, które śledzą użytkownicy Twojej instancji, więc nie jest kompletna.
From c52bcc0331762a15cc39e1ff090cc4c113769008 Mon Sep 17 00:00:00 2001
From: ThibG
Date: Sun, 5 Aug 2018 12:22:23 +0200
Subject: [PATCH 063/196] Serialize text-less statuses as '.' over OStatus
(fixes #7856) (#8126)
---
app/lib/ostatus/atom_serializer.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/lib/ostatus/atom_serializer.rb b/app/lib/ostatus/atom_serializer.rb
index 5c6ff4f9b..1a0a635b3 100644
--- a/app/lib/ostatus/atom_serializer.rb
+++ b/app/lib/ostatus/atom_serializer.rb
@@ -352,7 +352,7 @@ class OStatus::AtomSerializer
append_element(entry, 'link', nil, rel: :alternate, type: 'application/activity+json', href: ActivityPub::TagManager.instance.uri_for(status)) if status.account.local?
append_element(entry, 'summary', status.spoiler_text, 'xml:lang': status.language) if status.spoiler_text?
- append_element(entry, 'content', Formatter.instance.format(status).to_str, type: 'html', 'xml:lang': status.language)
+ append_element(entry, 'content', Formatter.instance.format(status).to_str || '.', type: 'html', 'xml:lang': status.language)
status.mentions.sort_by(&:id).each do |mentioned|
append_element(entry, 'link', nil, rel: :mentioned, 'ostatus:object-type': OStatus::TagManager::TYPES[:person], href: OStatus::TagManager.instance.uri_for(mentioned.account))
From 1ab8b4b8ea59e8f87be2a2b701f82b1751099737 Mon Sep 17 00:00:00 2001
From: ThibG
Date: Mon, 6 Aug 2018 15:16:02 +0200
Subject: [PATCH 064/196] Scroll to linked status in public status view (fixes
#7884) (#8130)
When there is a single detailed status on a public page, scroll to it and
replace the history state to not scroll back on refresh (simulates # anchors).
---
app/javascript/packs/public.js | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/app/javascript/packs/public.js b/app/javascript/packs/public.js
index 855e56ee6..6b47eecf9 100644
--- a/app/javascript/packs/public.js
+++ b/app/javascript/packs/public.js
@@ -31,6 +31,7 @@ function main() {
const React = require('react');
const ReactDOM = require('react-dom');
const Rellax = require('rellax');
+ const createHistory = require('history').createBrowserHistory;
ready(() => {
const locale = document.documentElement.lang;
@@ -86,6 +87,14 @@ function main() {
}
new Rellax('.parallax', { speed: -1 });
+
+ const history = createHistory();
+ const detailedStatuses = document.querySelectorAll('.public-layout .detailed-status');
+ const location = history.location;
+ if (detailedStatuses.length === 1 && (!location.state || !location.state.scrolledToDetailedStatus)) {
+ detailedStatuses[0].scrollIntoView();
+ history.replace(location.pathname, { ...location.state, scrolledToDetailedStatus: true });
+ }
});
delegate(document, '.webapp-btn', 'click', ({ target, button }) => {
From 58cc6738822d27340f1ce7e99108e3cb4e656d7f Mon Sep 17 00:00:00 2001
From: Mozinet
Date: Tue, 7 Aug 2018 18:02:34 +0200
Subject: [PATCH 065/196] Update fr.yml for 3 spelling mistakes and a typo
(#8135)
---
config/locales/fr.yml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index bc2c7b387..a4f2758e0 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -18,9 +18,9 @@ fr:
features:
humane_approach_body: Ayant appris des échecs d’autres réseaux, Mastodon à l’ambition de combattre l’abus des médias sociaux en effectuant des choix de conception éthiques.
humane_approach_title: Une approche plus humaine
- not_a_product_body: Mastodon n’est pas un réseau commercial. Ici, pas de publicités, pas de prospection de données et pas d’environnement fermés. Il n’y existe aucune autorité centrale.
+ not_a_product_body: Mastodon n’est pas un réseau commercial. Ici, pas de publicités, pas de prospection de données et pas d’environnements fermés. Il n’y existe aucune autorité centrale.
not_a_product_title: Vous êtes une personne, pas un produit
- real_conversation_body: Avec 500 caractères à votre dispostion, une grande granularité en terme de diffusion et la possibilité de masquer vos messages derrières des avertissements, vous êtes libre de vous exprimer de la manière qui vous plaît.
+ real_conversation_body: Avec 500 caractères à votre disposition, une grande granularité en termes de diffusion et la possibilité de masquer vos messages derrières des avertissements, vous êtes libre de vous exprimer de la manière qui vous plaît.
real_conversation_title: Construit pour de vraies conversations
within_reach_body: Grâce à l’existence d’un environnement API accueillant pour les développeur·se·s, de multiples applications pour iOS, Android et d’autres plateformes vous permettent de rester en contact avec vos ami·e·s où que vous soyez.
within_reach_title: Toujours à portée de main
@@ -40,7 +40,7 @@ fr:
following: Abonnements
media: Médias
moved_html: "%{name} a changé de compte pour %{new_profile_link} :"
- network_hidden: Cette information n'est pas disponible
+ network_hidden: Cette information n’est pas disponible
nothing_here: Rien à voir ici !
people_followed_by: Personnes suivies par %{name}
people_who_follow: Personnes qui suivent %{name}
From d974c94478c32da80026e9db0229f5e73ad04634 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Wed, 8 Aug 2018 21:12:45 +0200
Subject: [PATCH 066/196] Remove protocol handler registration (#8127)
Browser UI too confusing / scares people, protocol URIs not used much
---
app/javascript/mastodon/containers/mastodon.js | 7 -------
1 file changed, 7 deletions(-)
diff --git a/app/javascript/mastodon/containers/mastodon.js b/app/javascript/mastodon/containers/mastodon.js
index b29898d3b..b2b0265aa 100644
--- a/app/javascript/mastodon/containers/mastodon.js
+++ b/app/javascript/mastodon/containers/mastodon.js
@@ -38,13 +38,6 @@ export default class Mastodon extends React.PureComponent {
window.setTimeout(() => Notification.requestPermission(), 60 * 1000);
}
- // Protocol handler
- // Ask after 5 minutes
- if (typeof navigator.registerProtocolHandler !== 'undefined') {
- const handlerUrl = window.location.protocol + '//' + window.location.host + '/intent?uri=%s';
- window.setTimeout(() => navigator.registerProtocolHandler('web+mastodon', handlerUrl, 'Mastodon'), 5 * 60 * 1000);
- }
-
store.dispatch(showOnboardingOnce());
}
From 80176a3814abad7f5c9023f97b5d4d82b73c089d Mon Sep 17 00:00:00 2001
From: Evgeny Petrov
Date: Thu, 9 Aug 2018 09:50:42 +0300
Subject: [PATCH 067/196] [RU] Translation update: (#8147)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* [RU] Translation update:
• Added translation to Welcome timeline
• Doorkeeper: changed date format to more common in Russia
• Doorkeeper: added translation to scopes
• Added translation to Dashboard settings (I didn't have a chance to test it on Live server, so some strings may be a bit incorrect)
• Added translation to Relays settings
• Added translation to Filters settings
• Some other small fixes and improvements
* Quoted string for "joined" key to avoid mapping error
* [RU] Changed "повторить" (repeat) to "исправить" (change, fix) for a more correct translation.
* i18n-tasks normalize
---
app/javascript/mastodon/locales/ru.json | 44 +++++++--------
config/locales/doorkeeper.ru.yml | 26 ++++++++-
config/locales/ru.yml | 72 ++++++++++++++++++++++---
config/locales/simple_form.ru.yml | 19 ++++++-
4 files changed, 130 insertions(+), 31 deletions(-)
diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json
index ad2dcda12..2706d5b71 100644
--- a/app/javascript/mastodon/locales/ru.json
+++ b/app/javascript/mastodon/locales/ru.json
@@ -12,7 +12,7 @@
"account.follows": "Подписки",
"account.follows_you": "Подписан(а) на Вас",
"account.hide_reblogs": "Скрыть продвижения от @{name}",
- "account.media": "Медиаконтент",
+ "account.media": "Медиа",
"account.mention": "Упомянуть",
"account.moved_to": "Ищите {name} здесь:",
"account.mute": "Заглушить",
@@ -59,9 +59,9 @@
"column_header.show_settings": "Показать настройки",
"column_header.unpin": "Открепить",
"column_subheading.settings": "Настройки",
- "community.column_settings.media_only": "Media Only",
+ "community.column_settings.media_only": "Только медиа",
"compose_form.direct_message_warning": "Этот статус будет виден только упомянутым пользователям.",
- "compose_form.direct_message_warning_learn_more": "Learn more",
+ "compose_form.direct_message_warning_learn_more": "Узнать больше",
"compose_form.hashtag_warning": "Этот пост не будет показывается в поиске по хэштегу, т.к. он непубличный. Только публичные посты можно найти в поиске по хэштегу.",
"compose_form.lock_disclaimer": "Ваш аккаунт не {locked}. Любой человек может подписаться на Вас и просматривать посты для подписчиков.",
"compose_form.lock_disclaimer.lock": "закрыт",
@@ -84,8 +84,8 @@
"confirmations.domain_block.message": "Вы на самом деле уверены, что хотите блокировать весь {domain}? В большинстве случаев нескольких отдельных блокировок или глушений достаточно.",
"confirmations.mute.confirm": "Заглушить",
"confirmations.mute.message": "Вы уверены, что хотите заглушить {name}?",
- "confirmations.redraft.confirm": "Delete & redraft",
- "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
+ "confirmations.redraft.confirm": "Удалить и исправить",
+ "confirmations.redraft.message": "Вы уверены, что хотите удалить этот статус и превратить в черновик? Вы потеряете все ответы, продвижения и отметки 'нравится' к нему.",
"confirmations.unfollow.confirm": "Отписаться",
"confirmations.unfollow.message": "Вы уверены, что хотите отписаться от {name}?",
"embed.instructions": "Встройте этот статус на Вашем сайте, скопировав код внизу.",
@@ -114,14 +114,14 @@
"empty_column.public": "Здесь ничего нет! Опубликуйте что-нибудь или подпишитесь на пользователей с других узлов, чтобы заполнить ленту.",
"follow_request.authorize": "Авторизовать",
"follow_request.reject": "Отказать",
- "getting_started.developers": "Developers",
- "getting_started.documentation": "Documentation",
- "getting_started.find_friends": "Find friends from Twitter",
+ "getting_started.developers": "Для разработчиков",
+ "getting_started.documentation": "Документация",
+ "getting_started.find_friends": "Найти друзей из Twitter",
"getting_started.heading": "Добро пожаловать",
- "getting_started.invite": "Invite people",
- "getting_started.open_source_notice": "Mastodon - программа с открытым исходным кодом. Вы можете помочь проекту или сообщить о проблемах на GitHub по адресу {github}.",
- "getting_started.security": "Security",
- "getting_started.terms": "Terms of service",
+ "getting_started.invite": "Пригласить людей",
+ "getting_started.open_source_notice": "Mastodon - сервис с открытым исходным кодом. Вы можете помочь проекту или сообщить о проблемах на GitHub по адресу {github}.",
+ "getting_started.security": "Безопасность",
+ "getting_started.terms": "Условия использования",
"home.column_settings.basic": "Основные",
"home.column_settings.show_reblogs": "Показывать продвижения",
"home.column_settings.show_replies": "Показывать ответы",
@@ -137,7 +137,7 @@
"keyboard_shortcuts.hotkey": "Гор. клавиша",
"keyboard_shortcuts.legend": "показать это окно",
"keyboard_shortcuts.mention": "упомянуть автора поста",
- "keyboard_shortcuts.profile": "to open author's profile",
+ "keyboard_shortcuts.profile": "перейти к профилю автора",
"keyboard_shortcuts.reply": "ответить",
"keyboard_shortcuts.search": "перейти к поиску",
"keyboard_shortcuts.toggle_hidden": "показать/скрыть текст за предупреждением",
@@ -163,22 +163,22 @@
"navigation_bar.blocks": "Список блокировки",
"navigation_bar.community_timeline": "Локальная лента",
"navigation_bar.direct": "Личные сообщения",
- "navigation_bar.discover": "Discover",
+ "navigation_bar.discover": "Изучайте",
"navigation_bar.domain_blocks": "Скрытые домены",
"navigation_bar.edit_profile": "Изменить профиль",
"navigation_bar.favourites": "Понравившееся",
- "navigation_bar.filters": "Muted words",
+ "navigation_bar.filters": "Заглушенные слова",
"navigation_bar.follow_requests": "Запросы на подписку",
"navigation_bar.info": "Об узле",
"navigation_bar.keyboard_shortcuts": "Сочетания клавиш",
"navigation_bar.lists": "Списки",
"navigation_bar.logout": "Выйти",
"navigation_bar.mutes": "Список глушения",
- "navigation_bar.personal": "Personal",
+ "navigation_bar.personal": "Личное",
"navigation_bar.pins": "Закреплённые посты",
"navigation_bar.preferences": "Опции",
"navigation_bar.public_timeline": "Глобальная лента",
- "navigation_bar.security": "Security",
+ "navigation_bar.security": "Безопасность",
"notification.favourite": "{name} понравился Ваш статус",
"notification.follow": "{name} подписался(-лась) на Вас",
"notification.mention": "{name} упомянул(а) Вас",
@@ -194,7 +194,7 @@
"notifications.column_settings.reblog": "Продвижения:",
"notifications.column_settings.show": "Показывать в колонке",
"notifications.column_settings.sound": "Проигрывать звук",
- "notifications.group": "{count} notifications",
+ "notifications.group": "{count} уведомл.",
"onboarding.done": "Готово",
"onboarding.next": "Далее",
"onboarding.page_five.public_timelines": "Локальная лента показывает публичные посты всех пользователей {domain}. Глобальная лента показывает публичные посты всех людей, на которых подписаны пользователи {domain}. Это - публичные ленты, отличный способ найти новые знакомства.",
@@ -258,9 +258,9 @@
"status.direct": "Написать @{name}",
"status.embed": "Встроить",
"status.favourite": "Нравится",
- "status.filtered": "Filtered",
+ "status.filtered": "Отфильтровано",
"status.load_more": "Показать еще",
- "status.media_hidden": "Медиаконтент скрыт",
+ "status.media_hidden": "Медиа скрыто",
"status.mention": "Упомянуть @{name}",
"status.more": "Больше",
"status.mute": "Заглушить @{name}",
@@ -271,7 +271,7 @@
"status.reblog": "Продвинуть",
"status.reblog_private": "Продвинуть для своей аудитории",
"status.reblogged_by": "{name} продвинул(а)",
- "status.redraft": "Delete & re-draft",
+ "status.redraft": "Удалить и повторить",
"status.reply": "Ответить",
"status.replyAll": "Ответить на тред",
"status.report": "Пожаловаться",
@@ -289,7 +289,7 @@
"tabs_bar.local_timeline": "Локальная",
"tabs_bar.notifications": "Уведомления",
"tabs_bar.search": "Поиск",
- "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+ "trends.count_by_accounts": "Популярно у {count} {rawCount, plural, one {человека} few {человек} many {человек} other {человек}}",
"ui.beforeunload": "Ваш черновик будет утерян, если вы покинете Mastodon.",
"upload_area.title": "Перетащите сюда, чтобы загрузить",
"upload_button.label": "Добавить медиаконтент",
diff --git a/config/locales/doorkeeper.ru.yml b/config/locales/doorkeeper.ru.yml
index 0a88d628e..f37317559 100644
--- a/config/locales/doorkeeper.ru.yml
+++ b/config/locales/doorkeeper.ru.yml
@@ -72,7 +72,7 @@ ru:
index:
application: Приложение
created_at: Авторизовано
- date_format: "%Y-%m-%d %H:%M:%S"
+ date_format: "%d.%m.%Y %H:%M:%S"
scopes: Разрешения
title: Ваши авторизованные приложения
errors:
@@ -117,4 +117,26 @@ ru:
follow: подписываться, отписываться, блокировать и разблокировать аккаунты
push: принимать push-уведомления для Вашего аккаунта
read: читать данные Вашего аккаунта
- write: отправлять за Вас посты
+ read:accounts: видеть информацию об аккаунтах
+ read:blocks: видеть ваших заблокированных
+ read:favourites: видеть ваше избранное
+ read:filters: видеть ваши фильтры
+ read:follows: видеть, на кого вы подписаны
+ read:lists: видеть ваши списки
+ read:mutes: видеть список заглушенных
+ read:notifications: видеть ваши уведомления
+ read:reports: видеть ваши жалобы
+ read:search: использовать поиск
+ read:statuses: видеть все статусы
+ write: изменять все данные вашего аккаунта
+ write:accounts: редактировать ваш профиль
+ write:blocks: блокировать аккаунты и домены
+ write:favourites: отмечать статусы как избранные
+ write:filters: создавать фильтры
+ write:follows: подписываться на людей
+ write:lists: создавать списки
+ write:media: выкладывать медиаконтент
+ write:mutes: заглушать людей и обсуждения
+ write:notifications: очищать список уведомлений
+ write:reports: отправлять жалобы на других
+ write:statuses: публиковать статусы
diff --git a/config/locales/ru.yml b/config/locales/ru.yml
index 5fc511d2e..f3184e238 100644
--- a/config/locales/ru.yml
+++ b/config/locales/ru.yml
@@ -5,7 +5,7 @@ ru:
about_mastodon_html: Mastodon - это свободная социальная сеть с открытым исходным кодом . Как децентрализованная альтернатива коммерческим платформам, Mastodon предотвращает риск монополизации Вашего общения одной компанией. Выберите сервер, которому Вы доверяете — что бы Вы ни выбрали, Вы сможете общаться со всеми остальными. Любой может запустить свой собственный узел Mastodon и участвовать в социальной сети совершенно бесшовно.
about_this: Об этом узле
administered_by: 'Администратор узла:'
- closed_registrations: В данный момент регистрация на этом узле закрыта.
+ closed_registrations: В данный момент регистрация на этом узле закрыта. Но вы можете найти другой узел, создать на нём учётную запись и получить доступ к той же сети оттуда.
contact: Связаться
contact_missing: Не установлено
contact_unavailable: Недоступен
@@ -28,9 +28,11 @@ ru:
hosted_on: Mastodon размещен на %{domain}
learn_more: Узнать больше
other_instances: Другие узлы
+ privacy_policy: Политика конфиденциальности
source_code: Исходный код
status_count_after: статусов
status_count_before: Опубликовано
+ terms: Условия использования
user_count_after: пользователей
user_count_before: Здесь живет
what_is_mastodon: Что такое Mastodon?
@@ -38,7 +40,8 @@ ru:
follow: Подписаться
followers: Подписчики
following: Подписан(а)
- media: Медиаконтент
+ joined: 'Дата регистрации: %{date}'
+ media: Медиа
moved_html: "%{name} переехал(а) на %{new_profile_link}:"
network_hidden: Эта информация недоступна
nothing_here: Здесь ничего нет!
@@ -205,6 +208,27 @@ ru:
update_failed_msg: Невозможно обновить этот эмодзи
updated_msg: Эмодзи обновлён!
upload: Загрузить
+ dashboard:
+ backlog: задачи
+ config: Конфигурация
+ feature_deletions: Аккаунтов удалено
+ feature_invites: Пригласительные ссылки
+ feature_registrations: Регистрации
+ feature_relay: Ретрансляторов сети
+ features: Нововведения
+ hidden_service: Федерация со скрытыми сервисами
+ open_reports: открытых жалоб
+ recent_users: Недавние пользователи
+ search: Полнотекстовый поиск
+ single_user_mode: Однопользовательский режим
+ software: Программное обеспечение
+ space: Использовано места
+ title: Панель управления
+ total_users: всего пользователей
+ trends: Тренды
+ week_interactions: взаимодействий на этой неделе
+ week_users_active: активно на этой неделе
+ week_users_new: пользователей на этой неделе
domain_blocks:
add_new: Добавить новую
created_msg: Блокировка домена обрабатывается
@@ -262,6 +286,14 @@ ru:
expired: Истёкшие
title: Фильтр
title: Приглашения
+ relays:
+ add_new: Добавить ретранслятор
+ description_html: "Федеративный ретранслятор – это промежуточный сервер, который передаёт большие объёмы публичных статусов между серверами, которые подписываются и публикуют туда. Это может помочь небольшим и средним серверам находить записи со всей федерации , ведь в противном случае пользователям нужно будет вручную подписываться на людей с удалённых узлов."
+ enable_hint: Если включено, ваш сервер будет подписан на все публичные статусы с этого ретранслятора и начнёт туда отправлять публичные статусы со своего узла.
+ inbox_url: URL ретранслятора
+ setup: Настроте соединение с ретранслятором
+ status: Состояние
+ title: Ретрансляторы
report_notes:
created_msg: Примечание жалобы создано!
destroyed_msg: Примечание жалобы удалено!
@@ -281,8 +313,8 @@ ru:
mark_as_unresolved: Отметить как неразрешённую
notes:
create: Добавить заметку
- create_and_resolve: Разрешить с заметкой
- create_and_unresolve: Переоткрыть с заметкой
+ create_and_resolve: Разрешить с примечанием
+ create_and_unresolve: Переоткрыть с примечанием
delete: Удалить
placeholder: Опишите, какие действия были приняты, или любые другие подробности…
reopen: Переоткрыть жалобу
@@ -317,6 +349,9 @@ ru:
peers_api_enabled:
desc_html: Домены, которые были замечены этим узлом среди всей федерации
title: Публикация списка обнаруженных узлов
+ preview_sensitive_media:
+ desc_html: Предпросмотр ссылок с остальных веб-сайтов будет показан даже если медиаконтент отмечен как чувствительный
+ title: Показывать чувствительный медиаконтент в предпросмотре OpenGraph
registrations:
closed_message:
desc_html: Отображается на титульной странице, когда закрыта регистрация Можно использовать HTML-теги
@@ -341,7 +376,10 @@ ru:
title: Описание сайта
site_description_extended:
desc_html: Отображается на странице дополнительной информации Можно использовать HTML-теги
- title: Расширенное описание сайта
+ title: Расширенное описание узла
+ site_short_description:
+ desc_html: Отображается в боковой панели и в тегах. Опишите, что такое Mastodon и что делает именно этот узел особенным. Если пусто, используется описание узла по умолчанию.
+ title: Короткое описание узла
site_terms:
desc_html: Вы можете добавить сюда собственную политику конфиденциальности, пользовательское соглашение и другие документы. Можно использовать теги HTML.
title: Условия использования
@@ -475,6 +513,22 @@ ru:
follows: Подписки
mutes: Список глушения
storage: Ваш медиаконтент
+ filters:
+ contexts:
+ home: Домашняя лента
+ notifications: Уведомления
+ public: Публичные ленты
+ thread: Диалоги
+ edit:
+ title: Изменить фильтр
+ errors:
+ invalid_context: Некорректный контекст или ничего
+ invalid_irreversible: Необратимая фильтрация работает только с лентой уведомлений и домашней лентой
+ index:
+ delete: Удалить
+ title: Фильтры
+ new:
+ title: Добавить фильтр
followers:
domain: Домен
explanation_html: Если Вы хотите быть уверены в приватности Ваших статусов, Вы должны иметь четкое представление о том, кто на Вас подписан. Ваши приватные статусы отправляются всем узлам, на которых у Вас есть подписчики . Рекомендуем удалить из подписчиков пользователей узлов, администрации или программному обеспечению которых Вы не доверяете.
@@ -489,6 +543,10 @@ ru:
true_privacy_html: Пожалуйста, заметьте, что настоящая конфиденциальность может быть достигнута только при помощи end-to-end шифрования .
unlocked_warning_html: Кто угодно может подписаться на Вас и получить доступ к просмотру Ваших приватных статусов. %{lock_link}, чтобы получить возможность рассматривать и вручную подтверждать запросы о подписке.
unlocked_warning_title: Ваш аккаунт не закрыт для подписки
+ footer:
+ developers: Разработчики
+ more: Ещё…
+ resources: Ссылки
generic:
changes_saved_msg: Изменения успешно сохранены!
save_changes: Сохранить изменения
@@ -606,6 +664,7 @@ ru:
remote_follow:
acct: Введите username@domain, откуда Вы хотите подписаться
missing_resource: Поиск требуемого перенаправления URL для Вашего аккаунта завершился неудачей
+ no_account_html: Нет учётной записи? Вы можете зарегистрироваться здесь
proceed: Продолжить подписку
prompt: 'Вы хотите подписаться на:'
remote_unfollow:
@@ -688,6 +747,7 @@ ru:
many: 'содержались запрещённые хэштеги: %{tags}'
one: 'содержался запрещённый хэштег: %{tags}'
other: 'содержались запрещённые хэштеги: %{tags}'
+ language_detection: Определять язык автоматически
open_in_web: Открыть в WWW
over_character_limit: превышен лимит символов (%{max})
pin_errors:
@@ -705,7 +765,7 @@ ru:
unlisted: Скрывать из лент
unlisted_long: Показывать всем, но не отображать в публичных лентах
stream_entries:
- pinned: Закреплённое сообщение
+ pinned: Закреплённый статус
reblogged: продвинул(а)
sensitive_content: Чувствительный контент
terms:
diff --git a/config/locales/simple_form.ru.yml b/config/locales/simple_form.ru.yml
index 9174237bc..4db6fd45c 100644
--- a/config/locales/simple_form.ru.yml
+++ b/config/locales/simple_form.ru.yml
@@ -3,8 +3,10 @@ ru:
simple_form:
hints:
defaults:
+ autofollow: Люди, пришедшие по этому приглашению автоматически будут подписаны на Вас
avatar: PNG, GIF или JPG. Максимально %{size}. Будет уменьшено до %{dimensions}px
bot: Этот аккаунт обычно выполяет автоматизированные действия и может не просматриваться владельцем
+ context: Один или несколько контекстов, к которым должны быть применены фильтры
digest: Отсылается лишь после длительной неактивности, если Вы в это время получали личные сообщения
display_name:
few: Осталось %{count} символа
@@ -13,15 +15,22 @@ ru:
other: Осталось %{count} символов
fields: В профиле можно отобразить до 4 пунктов как таблицу
header: PNG, GIF или JPG. Максимально %{size}. Будет уменьшено до %{dimensions}px
+ inbox_url: Копировать URL с главной страницы ретранслятора, который Вы хотите использовать
+ irreversible: Отфильтрованные статусы будут утеряны навсегда, даже если в будущем фильтр будет убран
+ locale: Язык интерфейса, e-mail писем и push-уведомлений
locked: Потребует от Вас ручного подтверждения подписчиков, изменит приватность постов по умолчанию на "только для подписчиков"
note:
few: Осталось %{count} символа
many: Осталось %{count} символов
one: Остался 1 символ
other: Осталось %{count} символов
+ phrase: Будет сопоставлено независимо от присутствия в тексте или предупреждения о содержании статуса
+ scopes: Какие API приложению будет позволено использовать. Если Вы выберите самый верхний, нижестоящие будут выбраны автоматически.
+ setting_default_language: Язык Ваших статусов может быть определён автоматически, но не всегда правильно
setting_hide_network: Те, на кого Вы подписаны и кто подписан на Вас, не будут отображены в Вашем профиле
setting_noindex: Относится к Вашему публичному профилю и страницам статусов
setting_theme: Влияет на внешний вид Mastodon при выполненном входе в аккаунт.
+ whole_word: Если слово или фраза состоит только из букв и цифр, сопоставление произойдёт только по полному совпадению
imports:
data: Файл CSV, экспортированный с другого узла Mastodon
sessions:
@@ -32,10 +41,13 @@ ru:
name: Пункт
value: Значение
defaults:
+ autofollow: Пригласите подписаться на Ваш аккаунт
avatar: Аватар
bot: Это аккаунт бота
+ chosen_languages: Фильтр языков
confirm_new_password: Повторите новый пароль
confirm_password: Повторите пароль
+ context: Контекст фильтра
current_password: Текущий пароль
data: Данные
display_name: Показываемое имя
@@ -43,15 +55,19 @@ ru:
expires_in: Срок действия
fields: Метаданные профиля
header: Заголовок
- locale: Язык
+ inbox_url: URL для входящих от ретрансляторов
+ irreversible: Удалять, а не скрывать
+ locale: Язык интерфейса
locked: Сделать аккаунт закрытым
max_uses: Макс. число использований
new_password: Новый пароль
note: О Вас
otp_attempt: Двухфакторный код
password: Пароль
+ phrase: Слово или фраза
setting_auto_play_gif: Автоматически проигрывать анимированные GIF
setting_boost_modal: Показывать диалог подтверждения перед продвижением
+ setting_default_language: Язык отправляемых статусов
setting_default_privacy: Видимость постов
setting_default_sensitive: Всегда отмечать медиаконтент как чувствительный
setting_delete_modal: Показывать диалог подтверждения перед удалением
@@ -66,6 +82,7 @@ ru:
type: Тип импорта
username: Имя пользователя
username_or_email: Имя пользователя или e-mail
+ whole_word: Слово целиком
interactions:
must_be_follower: Заблокировать уведомления не от подписчиков
must_be_following: Заблокировать уведомления от людей, на которых Вы не подписаны
From f2404de871f0bdfda5c9aeeeb4c6c4d10a8da8ab Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Thu, 9 Aug 2018 09:56:53 +0200
Subject: [PATCH 068/196] Public profile endorsements (accounts picked by
profile owner) (#8146)
---
app/controllers/accounts_controller.rb | 5 +-
.../api/v1/accounts/pins_controller.rb | 32 ++++++++
app/helpers/home_helper.rb | 32 ++++++++
app/javascript/mastodon/actions/accounts.js | 74 +++++++++++++++++++
.../features/account/components/action_bar.js | 6 ++
.../account_timeline/components/header.js | 6 ++
.../containers/header_container.js | 10 +++
.../mastodon/reducers/relationships.js | 4 +
app/javascript/styles/mastodon/widgets.scss | 32 ++++++++
app/models/account.rb | 4 +
app/models/account_pin.rb | 26 +++++++
app/models/concerns/account_interactions.rb | 8 ++
.../account_relationships_presenter.rb | 7 +-
.../rest/relationship_serializer.rb | 7 +-
app/views/accounts/show.html.haml | 8 ++
config/locales/en.yml | 3 +
config/routes.rb | 3 +
.../20180808175627_create_account_pins.rb | 12 +++
db/schema.rb | 16 +++-
spec/fabricators/account_pin_fabricator.rb | 4 +
spec/models/account_pin_spec.rb | 5 ++
21 files changed, 298 insertions(+), 6 deletions(-)
create mode 100644 app/controllers/api/v1/accounts/pins_controller.rb
create mode 100644 app/models/account_pin.rb
create mode 100644 db/migrate/20180808175627_create_account_pins.rb
create mode 100644 spec/fabricators/account_pin_fabricator.rb
create mode 100644 spec/models/account_pin_spec.rb
diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb
index 86e3b6e47..e5a7301ee 100644
--- a/app/controllers/accounts_controller.rb
+++ b/app/controllers/accounts_controller.rb
@@ -10,8 +10,9 @@ class AccountsController < ApplicationController
def show
respond_to do |format|
format.html do
- @body_classes = 'with-modals'
- @pinned_statuses = []
+ @body_classes = 'with-modals'
+ @pinned_statuses = []
+ @endorsed_accounts = @account.endorsed_accounts.to_a.sample(4)
if current_account && @account.blocking?(current_account)
@statuses = []
diff --git a/app/controllers/api/v1/accounts/pins_controller.rb b/app/controllers/api/v1/accounts/pins_controller.rb
new file mode 100644
index 000000000..0a0239c42
--- /dev/null
+++ b/app/controllers/api/v1/accounts/pins_controller.rb
@@ -0,0 +1,32 @@
+# frozen_string_literal: true
+
+class Api::V1::Accounts::PinsController < Api::BaseController
+ include Authorization
+
+ before_action -> { doorkeeper_authorize! :write, :'write:accounts' }
+ before_action :require_user!
+ before_action :set_account
+
+ respond_to :json
+
+ def create
+ AccountPin.create!(account: current_account, target_account: @account)
+ render json: @account, serializer: REST::RelationshipSerializer, relationships: relationships_presenter
+ end
+
+ def destroy
+ pin = AccountPin.find_by(account: current_account, target_account: @account)
+ pin&.destroy!
+ render json: @account, serializer: REST::RelationshipSerializer, relationships: relationships_presenter
+ end
+
+ private
+
+ def set_account
+ @account = Account.find(params[:account_id])
+ end
+
+ def relationships_presenter
+ AccountRelationshipsPresenter.new([@account.id], current_user.account_id)
+ end
+end
diff --git a/app/helpers/home_helper.rb b/app/helpers/home_helper.rb
index d3c6b13a6..8449f6c8a 100644
--- a/app/helpers/home_helper.rb
+++ b/app/helpers/home_helper.rb
@@ -6,4 +6,36 @@ module HomeHelper
locale: I18n.locale,
}
end
+
+ def account_link_to(account, button = '')
+ content_tag(:div, class: 'account') do
+ content_tag(:div, class: 'account__wrapper') do
+ section = if account.nil?
+ content_tag(:div, class: 'account__display-name') do
+ content_tag(:div, class: 'account__avatar-wrapper') do
+ content_tag(:div, '', class: 'account__avatar', style: "background-image: url(#{full_asset_url('avatars/original/missing.png', skip_pipeline: true)})")
+ end +
+ content_tag(:span, class: 'display-name') do
+ content_tag(:strong, t('about.contact_missing')) +
+ content_tag(:span, t('about.contact_unavailable'), class: 'display-name__account')
+ end
+ end
+ else
+ link_to(TagManager.instance.url_for(account), class: 'account__display-name') do
+ content_tag(:div, class: 'account__avatar-wrapper') do
+ content_tag(:div, '', class: 'account__avatar', style: "background-image: url(#{account.avatar.url})")
+ end +
+ content_tag(:span, class: 'display-name') do
+ content_tag(:bdi) do
+ content_tag(:strong, display_name(account, custom_emojify: true), class: 'display-name__html emojify')
+ end +
+ content_tag(:span, "@#{account.acct}", class: 'display-name__account')
+ end
+ end
+ end
+
+ section + button
+ end
+ end
+ end
end
diff --git a/app/javascript/mastodon/actions/accounts.js b/app/javascript/mastodon/actions/accounts.js
index c9e4afcfc..cbae62a0f 100644
--- a/app/javascript/mastodon/actions/accounts.js
+++ b/app/javascript/mastodon/actions/accounts.js
@@ -30,6 +30,14 @@ export const ACCOUNT_UNMUTE_REQUEST = 'ACCOUNT_UNMUTE_REQUEST';
export const ACCOUNT_UNMUTE_SUCCESS = 'ACCOUNT_UNMUTE_SUCCESS';
export const ACCOUNT_UNMUTE_FAIL = 'ACCOUNT_UNMUTE_FAIL';
+export const ACCOUNT_PIN_REQUEST = 'ACCOUNT_PIN_REQUEST';
+export const ACCOUNT_PIN_SUCCESS = 'ACCOUNT_PIN_SUCCESS';
+export const ACCOUNT_PIN_FAIL = 'ACCOUNT_PIN_FAIL';
+
+export const ACCOUNT_UNPIN_REQUEST = 'ACCOUNT_UNPIN_REQUEST';
+export const ACCOUNT_UNPIN_SUCCESS = 'ACCOUNT_UNPIN_SUCCESS';
+export const ACCOUNT_UNPIN_FAIL = 'ACCOUNT_UNPIN_FAIL';
+
export const FOLLOWERS_FETCH_REQUEST = 'FOLLOWERS_FETCH_REQUEST';
export const FOLLOWERS_FETCH_SUCCESS = 'FOLLOWERS_FETCH_SUCCESS';
export const FOLLOWERS_FETCH_FAIL = 'FOLLOWERS_FETCH_FAIL';
@@ -694,3 +702,69 @@ export function rejectFollowRequestFail(id, error) {
error,
};
};
+
+export function pinAccount(id) {
+ return (dispatch, getState) => {
+ dispatch(pinAccountRequest(id));
+
+ api(getState).post(`/api/v1/accounts/${id}/pin`).then(response => {
+ dispatch(pinAccountSuccess(response.data));
+ }).catch(error => {
+ dispatch(pinAccountFail(error));
+ });
+ };
+};
+
+export function unpinAccount(id) {
+ return (dispatch, getState) => {
+ dispatch(unpinAccountRequest(id));
+
+ api(getState).post(`/api/v1/accounts/${id}/unpin`).then(response => {
+ dispatch(unpinAccountSuccess(response.data));
+ }).catch(error => {
+ dispatch(unpinAccountFail(error));
+ });
+ };
+};
+
+export function pinAccountRequest(id) {
+ return {
+ type: ACCOUNT_PIN_REQUEST,
+ id,
+ };
+};
+
+export function pinAccountSuccess(relationship) {
+ return {
+ type: ACCOUNT_PIN_SUCCESS,
+ relationship,
+ };
+};
+
+export function pinAccountFail(error) {
+ return {
+ type: ACCOUNT_PIN_FAIL,
+ error,
+ };
+};
+
+export function unpinAccountRequest(id) {
+ return {
+ type: ACCOUNT_UNPIN_REQUEST,
+ id,
+ };
+};
+
+export function unpinAccountSuccess(relationship) {
+ return {
+ type: ACCOUNT_UNPIN_SUCCESS,
+ relationship,
+ };
+};
+
+export function unpinAccountFail(error) {
+ return {
+ type: ACCOUNT_UNPIN_FAIL,
+ error,
+ };
+};
diff --git a/app/javascript/mastodon/features/account/components/action_bar.js b/app/javascript/mastodon/features/account/components/action_bar.js
index e3f2d0f55..43b4811e1 100644
--- a/app/javascript/mastodon/features/account/components/action_bar.js
+++ b/app/javascript/mastodon/features/account/components/action_bar.js
@@ -32,6 +32,8 @@ const messages = defineMessages({
blocks: { id: 'navigation_bar.blocks', defaultMessage: 'Blocked users' },
domain_blocks: { id: 'navigation_bar.domain_blocks', defaultMessage: 'Hidden domains' },
mutes: { id: 'navigation_bar.mutes', defaultMessage: 'Muted users' },
+ endorse: { id: 'account.endorse', defaultMessage: 'Feature on profile' },
+ unendorse: { id: 'account.unendorse', defaultMessage: 'Don\'t feature on profile' },
});
@injectIntl
@@ -48,6 +50,7 @@ export default class ActionBar extends React.PureComponent {
onMute: PropTypes.func.isRequired,
onBlockDomain: PropTypes.func.isRequired,
onUnblockDomain: PropTypes.func.isRequired,
+ onEndorseToggle: PropTypes.func.isRequired,
intl: PropTypes.object.isRequired,
};
@@ -93,6 +96,9 @@ export default class ActionBar extends React.PureComponent {
} else {
menu.push({ text: intl.formatMessage(messages.showReblogs, { name: account.get('username') }), action: this.props.onReblogToggle });
}
+
+ menu.push({ text: intl.formatMessage(account.getIn(['relationship', 'endorsed']) ? messages.unendorse : messages.endorse), action: this.props.onEndorseToggle });
+ menu.push(null);
}
if (account.getIn(['relationship', 'muting'])) {
diff --git a/app/javascript/mastodon/features/account_timeline/components/header.js b/app/javascript/mastodon/features/account_timeline/components/header.js
index 1ae5126e6..ab29e4bdf 100644
--- a/app/javascript/mastodon/features/account_timeline/components/header.js
+++ b/app/javascript/mastodon/features/account_timeline/components/header.js
@@ -22,6 +22,7 @@ export default class Header extends ImmutablePureComponent {
onMute: PropTypes.func.isRequired,
onBlockDomain: PropTypes.func.isRequired,
onUnblockDomain: PropTypes.func.isRequired,
+ onEndorseToggle: PropTypes.func.isRequired,
hideTabs: PropTypes.bool,
};
@@ -73,6 +74,10 @@ export default class Header extends ImmutablePureComponent {
this.props.onUnblockDomain(domain);
}
+ handleEndorseToggle = () => {
+ this.props.onEndorseToggle(this.props.account);
+ }
+
render () {
const { account, hideTabs } = this.props;
@@ -100,6 +105,7 @@ export default class Header extends ImmutablePureComponent {
onMute={this.handleMute}
onBlockDomain={this.handleBlockDomain}
onUnblockDomain={this.handleUnblockDomain}
+ onEndorseToggle={this.handleEndorseToggle}
/>
{!hideTabs && (
diff --git a/app/javascript/mastodon/features/account_timeline/containers/header_container.js b/app/javascript/mastodon/features/account_timeline/containers/header_container.js
index 7681430b7..02803893d 100644
--- a/app/javascript/mastodon/features/account_timeline/containers/header_container.js
+++ b/app/javascript/mastodon/features/account_timeline/containers/header_container.js
@@ -8,6 +8,8 @@ import {
blockAccount,
unblockAccount,
unmuteAccount,
+ pinAccount,
+ unpinAccount,
} from '../../../actions/accounts';
import {
mentionCompose,
@@ -82,6 +84,14 @@ const mapDispatchToProps = (dispatch, { intl }) => ({
}
},
+ onEndorseToggle (account) {
+ if (account.getIn(['relationship', 'endorsed'])) {
+ dispatch(unpinAccount(account.get('id')));
+ } else {
+ dispatch(pinAccount(account.get('id')));
+ }
+ },
+
onReport (account) {
dispatch(initReport(account));
},
diff --git a/app/javascript/mastodon/reducers/relationships.js b/app/javascript/mastodon/reducers/relationships.js
index d1caabc1c..f46049297 100644
--- a/app/javascript/mastodon/reducers/relationships.js
+++ b/app/javascript/mastodon/reducers/relationships.js
@@ -5,6 +5,8 @@ import {
ACCOUNT_UNBLOCK_SUCCESS,
ACCOUNT_MUTE_SUCCESS,
ACCOUNT_UNMUTE_SUCCESS,
+ ACCOUNT_PIN_SUCCESS,
+ ACCOUNT_UNPIN_SUCCESS,
RELATIONSHIPS_FETCH_SUCCESS,
} from '../actions/accounts';
import {
@@ -41,6 +43,8 @@ export default function relationships(state = initialState, action) {
case ACCOUNT_UNBLOCK_SUCCESS:
case ACCOUNT_MUTE_SUCCESS:
case ACCOUNT_UNMUTE_SUCCESS:
+ case ACCOUNT_PIN_SUCCESS:
+ case ACCOUNT_UNPIN_SUCCESS:
return normalizeRelationship(state, action.relationship);
case RELATIONSHIPS_FETCH_SUCCESS:
return normalizeRelationships(state, action.relationships);
diff --git a/app/javascript/styles/mastodon/widgets.scss b/app/javascript/styles/mastodon/widgets.scss
index d37a6f458..b05bbbda7 100644
--- a/app/javascript/styles/mastodon/widgets.scss
+++ b/app/javascript/styles/mastodon/widgets.scss
@@ -71,6 +71,38 @@
}
}
+.endorsements-widget {
+ margin-bottom: 10px;
+ padding-bottom: 10px;
+
+ h4 {
+ padding: 10px;
+ text-transform: uppercase;
+ font-weight: 700;
+ font-size: 13px;
+ color: $darker-text-color;
+ }
+
+ .account {
+ padding: 10px 0;
+
+ &:last-child {
+ border-bottom: 0;
+ }
+
+ .account__display-name {
+ display: flex;
+ align-items: center;
+ }
+
+ .account__avatar {
+ width: 44px;
+ height: 44px;
+ background-size: 44px 44px;
+ }
+ }
+}
+
.moved-account-widget {
padding: 15px;
padding-bottom: 20px;
diff --git a/app/models/account.rb b/app/models/account.rb
index 0272b4615..c33ec4bd5 100644
--- a/app/models/account.rb
+++ b/app/models/account.rb
@@ -89,6 +89,10 @@ class Account < ApplicationRecord
has_many :status_pins, inverse_of: :account, dependent: :destroy
has_many :pinned_statuses, -> { reorder('status_pins.created_at DESC') }, through: :status_pins, class_name: 'Status', source: :status
+ # Endorsements
+ has_many :account_pins, inverse_of: :account, dependent: :destroy
+ has_many :endorsed_accounts, through: :account_pins, class_name: 'Account', source: :target_account
+
# Media
has_many :media_attachments, dependent: :destroy
diff --git a/app/models/account_pin.rb b/app/models/account_pin.rb
new file mode 100644
index 000000000..9a21c3405
--- /dev/null
+++ b/app/models/account_pin.rb
@@ -0,0 +1,26 @@
+# frozen_string_literal: true
+# == Schema Information
+#
+# Table name: account_pins
+#
+# id :bigint(8) not null, primary key
+# account_id :bigint(8)
+# target_account_id :bigint(8)
+# created_at :datetime not null
+# updated_at :datetime not null
+#
+
+class AccountPin < ApplicationRecord
+ include RelationshipCacheable
+
+ belongs_to :account
+ belongs_to :target_account, class_name: 'Account'
+
+ validate :validate_follow_relationship
+
+ private
+
+ def validate_follow_relationship
+ errors.add(:base, I18n.t('accounts.pin_errors.following')) unless account.following?(target_account)
+ end
+end
diff --git a/app/models/concerns/account_interactions.rb b/app/models/concerns/account_interactions.rb
index e14e041f6..f5f833446 100644
--- a/app/models/concerns/account_interactions.rb
+++ b/app/models/concerns/account_interactions.rb
@@ -40,6 +40,10 @@ module AccountInteractions
end
end
+ def endorsed_map(target_account_ids, account_id)
+ follow_mapping(AccountPin.where(account_id: account_id, target_account_id: target_account_ids), :target_account_id)
+ end
+
def domain_blocking_map(target_account_ids, account_id)
accounts_map = Account.where(id: target_account_ids).select('id, domain').map { |a| [a.id, a.domain] }.to_h
blocked_domains = domain_blocking_map_by_domain(accounts_map.values.compact, account_id)
@@ -190,6 +194,10 @@ module AccountInteractions
status_pins.where(status: status).exists?
end
+ def endorsed?(account)
+ account_pins.where(target_account: account).exists?
+ end
+
def followers_for_local_distribution
followers.local
.joins(:user)
diff --git a/app/presenters/account_relationships_presenter.rb b/app/presenters/account_relationships_presenter.rb
index b1e99b31b..e4aaa65f6 100644
--- a/app/presenters/account_relationships_presenter.rb
+++ b/app/presenters/account_relationships_presenter.rb
@@ -2,7 +2,8 @@
class AccountRelationshipsPresenter
attr_reader :following, :followed_by, :blocking,
- :muting, :requested, :domain_blocking
+ :muting, :requested, :domain_blocking,
+ :endorsed
def initialize(account_ids, current_account_id, **options)
@account_ids = account_ids.map { |a| a.is_a?(Account) ? a.id : a }
@@ -14,6 +15,7 @@ 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))
@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))
cache_uncached!
@@ -23,6 +25,7 @@ class AccountRelationshipsPresenter
@muting.merge!(options[:muting_map] || {})
@requested.merge!(options[:requested_map] || {})
@domain_blocking.merge!(options[:domain_blocking_map] || {})
+ @endorsed.merge!(options[:endorsed_map] || {})
end
private
@@ -37,6 +40,7 @@ class AccountRelationshipsPresenter
muting: {},
requested: {},
domain_blocking: {},
+ endorsed: {},
}
@uncached_account_ids = []
@@ -63,6 +67,7 @@ class AccountRelationshipsPresenter
muting: { account_id => muting[account_id] },
requested: { account_id => requested[account_id] },
domain_blocking: { account_id => domain_blocking[account_id] },
+ endorsed: { account_id => endorsed[account_id] },
}
Rails.cache.write("relationship:#{@current_account_id}:#{account_id}", maps_for_account, expires_in: 1.day)
diff --git a/app/serializers/rest/relationship_serializer.rb b/app/serializers/rest/relationship_serializer.rb
index 45bfd4d6e..c6c722a54 100644
--- a/app/serializers/rest/relationship_serializer.rb
+++ b/app/serializers/rest/relationship_serializer.rb
@@ -2,7 +2,8 @@
class REST::RelationshipSerializer < ActiveModel::Serializer
attributes :id, :following, :showing_reblogs, :followed_by, :blocking,
- :muting, :muting_notifications, :requested, :domain_blocking
+ :muting, :muting_notifications, :requested, :domain_blocking,
+ :endorsed
def id
object.id.to_s
@@ -41,4 +42,8 @@ class REST::RelationshipSerializer < ActiveModel::Serializer
def domain_blocking
instance_options[:relationships].domain_blocking[object.id] || false
end
+
+ def endorsed
+ instance_options[:relationships].endorsed[object.id] || false
+ end
end
diff --git a/app/views/accounts/show.html.haml b/app/views/accounts/show.html.haml
index b30755d94..e398fc29b 100644
--- a/app/views/accounts/show.html.haml
+++ b/app/views/accounts/show.html.haml
@@ -55,4 +55,12 @@
= render 'moved', account: @account
= render 'bio', account: @account
+
+ - unless @endorsed_accounts.empty?
+ .endorsements-widget
+ %h4= t 'accounts.choices_html', name: content_tag(:bdi, display_name(@account, custom_emojify: true))
+
+ - @endorsed_accounts.each do |account|
+ = account_link_to account
+
= render 'application/sidebar'
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 4693fe1ba..ef5b2c93b 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -39,6 +39,7 @@ en:
user_count_before: Home to
what_is_mastodon: What is Mastodon?
accounts:
+ choices_html: "%{name}'s choices:"
follow: Follow
followers: Followers
following: Following
@@ -49,6 +50,8 @@ en:
nothing_here: There is nothing here!
people_followed_by: People whom %{name} follows
people_who_follow: People who follow %{name}
+ pin_errors:
+ following: You must be already following the person you want to endorse
posts: Toots
posts_with_replies: Toots and replies
reserved_username: The username is reserved
diff --git a/config/routes.rb b/config/routes.rb
index 1c97f5a82..2983011d2 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -309,6 +309,9 @@ Rails.application.routes.draw do
post :mute
post :unmute
end
+
+ resource :pin, only: :create, controller: 'accounts/pins'
+ post :unpin, to: 'accounts/pins#destroy'
end
resources :lists, only: [:index, :create, :show, :update, :destroy] do
diff --git a/db/migrate/20180808175627_create_account_pins.rb b/db/migrate/20180808175627_create_account_pins.rb
new file mode 100644
index 000000000..43d8185be
--- /dev/null
+++ b/db/migrate/20180808175627_create_account_pins.rb
@@ -0,0 +1,12 @@
+class CreateAccountPins < ActiveRecord::Migration[5.2]
+ def change
+ create_table :account_pins do |t|
+ t.belongs_to :account, foreign_key: { on_delete: :cascade }
+ t.belongs_to :target_account, foreign_key: { on_delete: :cascade, to_table: :accounts }
+
+ t.timestamps
+ end
+
+ add_index :account_pins, [:account_id, :target_account_id], unique: true
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index e0da669c4..46ee42714 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 2018_07_11_152640) do
+ActiveRecord::Schema.define(version: 2018_08_08_175627) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -33,6 +33,16 @@ ActiveRecord::Schema.define(version: 2018_07_11_152640) do
t.index ["target_account_id"], name: "index_account_moderation_notes_on_target_account_id"
end
+ create_table "account_pins", force: :cascade do |t|
+ t.bigint "account_id"
+ t.bigint "target_account_id"
+ t.datetime "created_at", null: false
+ t.datetime "updated_at", null: false
+ t.index ["account_id", "target_account_id"], name: "index_account_pins_on_account_id_and_target_account_id", unique: true
+ t.index ["account_id"], name: "index_account_pins_on_account_id"
+ t.index ["target_account_id"], name: "index_account_pins_on_target_account_id"
+ end
+
create_table "accounts", force: :cascade do |t|
t.string "username", default: "", null: false
t.string "domain"
@@ -149,9 +159,9 @@ ActiveRecord::Schema.define(version: 2018_07_11_152640) do
t.text "phrase", default: "", null: false
t.string "context", default: [], null: false, array: true
t.boolean "irreversible", default: false, null: false
- t.boolean "whole_word", default: true, null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
+ t.boolean "whole_word", default: true, null: false
t.index ["account_id"], name: "index_custom_filters_on_account_id"
end
@@ -575,6 +585,8 @@ ActiveRecord::Schema.define(version: 2018_07_11_152640) do
add_foreign_key "account_domain_blocks", "accounts", name: "fk_206c6029bd", on_delete: :cascade
add_foreign_key "account_moderation_notes", "accounts"
add_foreign_key "account_moderation_notes", "accounts", column: "target_account_id"
+ add_foreign_key "account_pins", "accounts", column: "target_account_id", on_delete: :cascade
+ add_foreign_key "account_pins", "accounts", on_delete: :cascade
add_foreign_key "accounts", "accounts", column: "moved_to_account_id", on_delete: :nullify
add_foreign_key "admin_action_logs", "accounts", on_delete: :cascade
add_foreign_key "backups", "users", on_delete: :nullify
diff --git a/spec/fabricators/account_pin_fabricator.rb b/spec/fabricators/account_pin_fabricator.rb
new file mode 100644
index 000000000..c0f8b8afb
--- /dev/null
+++ b/spec/fabricators/account_pin_fabricator.rb
@@ -0,0 +1,4 @@
+Fabricator(:account_pin) do
+ account nil
+ target_account nil
+end
diff --git a/spec/models/account_pin_spec.rb b/spec/models/account_pin_spec.rb
new file mode 100644
index 000000000..4f226b127
--- /dev/null
+++ b/spec/models/account_pin_spec.rb
@@ -0,0 +1,5 @@
+require 'rails_helper'
+
+RSpec.describe AccountPin, type: :model do
+ pending "add some examples to (or delete) #{__FILE__}"
+end
From 0dcc1950d14cc4a7725ea1572d253c538a1f74e8 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Thu, 9 Aug 2018 12:58:20 +0200
Subject: [PATCH 069/196] Update /terms and /about/more to use public layout
(#8142)
---
app/controllers/about_controller.rb | 8 +-
app/javascript/styles/mastodon/about.scss | 407 ++++++++++++------
.../styles/mastodon/containers.scss | 37 ++
app/javascript/styles/mastodon/widgets.scss | 42 ++
app/views/about/_administration.html.haml | 19 -
app/views/about/_contact.html.haml | 22 -
app/views/about/more.html.haml | 66 +--
app/views/about/show.html.haml | 4 +-
app/views/about/terms.html.haml | 14 +-
config/locales/ar.yml | 3 -
config/locales/ast.yml | 2 -
config/locales/bg.yml | 3 -
config/locales/ca.yml | 3 -
config/locales/co.yml | 3 -
config/locales/cs.yml | 3 -
config/locales/da.yml | 3 -
config/locales/de.yml | 3 -
config/locales/el.yml | 3 -
config/locales/en.yml | 3 -
config/locales/eo.yml | 3 -
config/locales/es.yml | 3 -
config/locales/eu.yml | 3 -
config/locales/fa.yml | 3 -
config/locales/fi.yml | 3 -
config/locales/fr.yml | 3 -
config/locales/gl.yml | 3 -
config/locales/he.yml | 3 -
config/locales/hr.yml | 3 -
config/locales/hu.yml | 3 -
config/locales/id.yml | 3 -
config/locales/io.yml | 3 -
config/locales/it.yml | 3 -
config/locales/ja.yml | 3 -
config/locales/ko.yml | 3 -
config/locales/nl.yml | 3 -
config/locales/no.yml | 3 -
config/locales/oc.yml | 3 -
config/locales/pl.yml | 3 -
config/locales/pt-BR.yml | 3 -
config/locales/pt.yml | 3 -
config/locales/ru.yml | 3 -
config/locales/sk.yml | 3 -
config/locales/sl.yml | 3 -
config/locales/sr-Latn.yml | 3 -
config/locales/sr.yml | 3 -
config/locales/sv.yml | 3 -
config/locales/th.yml | 3 -
config/locales/tr.yml | 3 -
config/locales/uk.yml | 3 -
config/locales/zh-CN.yml | 3 -
config/locales/zh-HK.yml | 3 -
config/locales/zh-TW.yml | 3 -
spec/views/about/_contact.html.haml_spec.rb | 35 --
53 files changed, 397 insertions(+), 385 deletions(-)
delete mode 100644 app/views/about/_administration.html.haml
delete mode 100644 app/views/about/_contact.html.haml
delete mode 100644 spec/views/about/_contact.html.haml_spec.rb
diff --git a/app/controllers/about_controller.rb b/app/controllers/about_controller.rb
index 810f212fd..0dbf0283d 100644
--- a/app/controllers/about_controller.rb
+++ b/app/controllers/about_controller.rb
@@ -9,9 +9,13 @@ class AboutController < ApplicationController
@initial_state_json = serializable_resource.to_json
end
- def more; end
+ def more
+ render layout: 'public'
+ end
- def terms; end
+ def terms
+ render layout: 'public'
+ end
private
diff --git a/app/javascript/styles/mastodon/about.scss b/app/javascript/styles/mastodon/about.scss
index b9544bb33..bba7044cf 100644
--- a/app/javascript/styles/mastodon/about.scss
+++ b/app/javascript/styles/mastodon/about.scss
@@ -15,6 +15,276 @@ $small-breakpoint: 960px;
}
}
+.rich-formatting {
+ font-family: 'mastodon-font-sans-serif', sans-serif;
+ font-size: 16px;
+ font-weight: 400;
+ font-size: 16px;
+ line-height: 30px;
+ color: $darker-text-color;
+ padding-right: 10px;
+
+ a {
+ color: $highlight-text-color;
+ text-decoration: underline;
+ }
+
+ p,
+ li {
+ font-family: 'mastodon-font-sans-serif', sans-serif;
+ font-size: 16px;
+ font-weight: 400;
+ font-size: 16px;
+ line-height: 30px;
+ margin-bottom: 12px;
+ color: $darker-text-color;
+
+ a {
+ color: $highlight-text-color;
+ text-decoration: underline;
+ }
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+ }
+
+ em {
+ display: inline;
+ margin: 0;
+ padding: 0;
+ font-weight: 700;
+ background: transparent;
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+ color: lighten($darker-text-color, 10%);
+ }
+
+ h1 {
+ font-family: 'mastodon-font-display', sans-serif;
+ font-size: 26px;
+ line-height: 30px;
+ font-weight: 500;
+ margin-bottom: 20px;
+ color: $secondary-text-color;
+
+ small {
+ font-family: 'mastodon-font-sans-serif', sans-serif;
+ display: block;
+ font-size: 18px;
+ font-weight: 400;
+ color: lighten($darker-text-color, 10%);
+ }
+ }
+
+ h2 {
+ font-family: 'mastodon-font-display', sans-serif;
+ font-size: 22px;
+ line-height: 26px;
+ font-weight: 500;
+ margin-bottom: 20px;
+ color: $secondary-text-color;
+ }
+
+ h3 {
+ font-family: 'mastodon-font-display', sans-serif;
+ font-size: 18px;
+ line-height: 24px;
+ font-weight: 500;
+ margin-bottom: 20px;
+ color: $secondary-text-color;
+ }
+
+ h4 {
+ font-family: 'mastodon-font-display', sans-serif;
+ font-size: 16px;
+ line-height: 24px;
+ font-weight: 500;
+ margin-bottom: 20px;
+ color: $secondary-text-color;
+ }
+
+ h5 {
+ font-family: 'mastodon-font-display', sans-serif;
+ font-size: 14px;
+ line-height: 24px;
+ font-weight: 500;
+ margin-bottom: 20px;
+ color: $secondary-text-color;
+ }
+
+ h6 {
+ font-family: 'mastodon-font-display', sans-serif;
+ font-size: 12px;
+ line-height: 24px;
+ font-weight: 500;
+ margin-bottom: 20px;
+ color: $secondary-text-color;
+ }
+
+ ul,
+ ol {
+ margin-left: 20px;
+
+ &[type='a'] {
+ list-style-type: lower-alpha;
+ }
+
+ &[type='i'] {
+ list-style-type: lower-roman;
+ }
+ }
+
+ ul {
+ list-style: disc;
+ }
+
+ ol {
+ list-style: decimal;
+ }
+
+ li > ol,
+ li > ul {
+ margin-top: 6px;
+ }
+
+ hr {
+ width: 100%;
+ height: 0;
+ border: 0;
+ border-bottom: 1px solid rgba($ui-base-lighter-color, .6);
+ margin: 20px 0;
+
+ &.spacer {
+ height: 1px;
+ border: 0;
+ }
+ }
+}
+
+.information-board {
+ background: darken($ui-base-color, 4%);
+ padding: 20px 0;
+
+ .container-alt {
+ position: relative;
+ padding-right: 280px + 15px;
+ }
+
+ &__sections {
+ display: flex;
+ justify-content: space-between;
+ flex-wrap: wrap;
+ }
+
+ &__section {
+ flex: 1 0 0;
+ font-family: 'mastodon-font-sans-serif', sans-serif;
+ font-size: 16px;
+ line-height: 28px;
+ color: $primary-text-color;
+ text-align: right;
+ padding: 10px 15px;
+
+ span,
+ strong {
+ display: block;
+ }
+
+ span {
+ &:last-child {
+ color: $secondary-text-color;
+ }
+ }
+
+ strong {
+ font-weight: 500;
+ font-size: 32px;
+ line-height: 48px;
+ }
+
+ @media screen and (max-width: $column-breakpoint) {
+ text-align: center;
+ }
+ }
+
+ .panel {
+ position: absolute;
+ width: 280px;
+ box-sizing: border-box;
+ background: darken($ui-base-color, 8%);
+ padding: 20px;
+ padding-top: 10px;
+ border-radius: 4px 4px 0 0;
+ right: 0;
+ bottom: -40px;
+
+ .panel-header {
+ font-family: 'mastodon-font-display', sans-serif;
+ font-size: 14px;
+ line-height: 24px;
+ font-weight: 500;
+ color: $darker-text-color;
+ padding-bottom: 5px;
+ margin-bottom: 15px;
+ border-bottom: 1px solid lighten($ui-base-color, 4%);
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ overflow: hidden;
+
+ a,
+ span {
+ font-weight: 400;
+ color: darken($darker-text-color, 10%);
+ }
+
+ a {
+ text-decoration: none;
+ }
+ }
+ }
+
+ .owner {
+ text-align: center;
+
+ .avatar {
+ width: 80px;
+ height: 80px;
+ margin: 0 auto;
+ margin-bottom: 15px;
+
+ img {
+ display: block;
+ width: 80px;
+ height: 80px;
+ border-radius: 48px;
+ }
+ }
+
+ .name {
+ font-size: 14px;
+
+ a {
+ display: block;
+ color: $primary-text-color;
+ text-decoration: none;
+
+ &:hover {
+ .display_name {
+ text-decoration: underline;
+ }
+ }
+ }
+
+ .username {
+ display: block;
+ color: $darker-text-color;
+ }
+ }
+ }
+}
+
.landing-page {
.grid {
display: grid;
@@ -486,128 +756,6 @@ $small-breakpoint: 960px;
}
}
- .information-board {
- background: darken($ui-base-color, 4%);
- padding: 20px 0;
-
- .container-alt {
- position: relative;
- padding-right: 280px + 15px;
- }
-
- &__sections {
- display: flex;
- justify-content: space-between;
- flex-wrap: wrap;
- }
-
- &__section {
- flex: 1 0 0;
- font-family: 'mastodon-font-sans-serif', sans-serif;
- font-size: 16px;
- line-height: 28px;
- color: $primary-text-color;
- text-align: right;
- padding: 10px 15px;
-
- span,
- strong {
- display: block;
- }
-
- span {
- &:last-child {
- color: $secondary-text-color;
- }
- }
-
- strong {
- font-weight: 500;
- font-size: 32px;
- line-height: 48px;
- }
-
- @media screen and (max-width: $column-breakpoint) {
- text-align: center;
- }
- }
-
- .panel {
- position: absolute;
- width: 280px;
- box-sizing: border-box;
- background: darken($ui-base-color, 8%);
- padding: 20px;
- padding-top: 10px;
- border-radius: 4px 4px 0 0;
- right: 0;
- bottom: -40px;
-
- .panel-header {
- font-family: 'mastodon-font-display', sans-serif;
- font-size: 14px;
- line-height: 24px;
- font-weight: 500;
- color: $darker-text-color;
- padding-bottom: 5px;
- margin-bottom: 15px;
- border-bottom: 1px solid lighten($ui-base-color, 4%);
- text-overflow: ellipsis;
- white-space: nowrap;
- overflow: hidden;
-
- a,
- span {
- font-weight: 400;
- color: darken($darker-text-color, 10%);
- }
-
- a {
- text-decoration: none;
- }
- }
- }
-
- .owner {
- text-align: center;
-
- .avatar {
- width: 80px;
- height: 80px;
- margin: 0 auto;
- margin-bottom: 15px;
-
- img {
- display: block;
- width: 80px;
- height: 80px;
- border-radius: 48px;
- }
- }
-
- .name {
- font-size: 14px;
-
- a {
- display: block;
- color: $primary-text-color;
- text-decoration: none;
-
- &:hover {
- .display_name {
- text-decoration: underline;
- }
- }
- }
-
- .username {
- display: block;
- color: $darker-text-color;
- }
- }
- }
- }
-
&.alternative {
padding: 10px 0;
@@ -983,21 +1131,6 @@ $small-breakpoint: 960px;
}
}
- .extended-description {
- padding: 50px 0;
- font-family: 'mastodon-font-sans-serif', sans-serif;
- font-size: 16px;
- font-weight: 400;
- font-size: 16px;
- line-height: 30px;
- color: $darker-text-color;
-
- a {
- color: $highlight-text-color;
- text-decoration: underline;
- }
- }
-
.footer-links {
padding-bottom: 50px;
text-align: right;
diff --git a/app/javascript/styles/mastodon/containers.scss b/app/javascript/styles/mastodon/containers.scss
index 7b339277f..ba36d62d9 100644
--- a/app/javascript/styles/mastodon/containers.scss
+++ b/app/javascript/styles/mastodon/containers.scss
@@ -115,6 +115,34 @@
}
}
+.grid-3 {
+ display: grid;
+ grid-gap: 10px;
+ grid-template-columns: 3fr 1fr;
+ grid-auto-columns: 25%;
+ grid-auto-rows: max-content;
+
+ .column-0 {
+ grid-column: 1/3;
+ grid-row: 1;
+ }
+
+ .column-1 {
+ grid-column: 1;
+ grid-row: 2;
+ }
+
+ .column-2 {
+ grid-column: 2;
+ grid-row: 2;
+ }
+
+ .column-3 {
+ grid-column: 1/3;
+ grid-row: 3;
+ }
+}
+
.public-layout {
@media screen and (max-width: $no-gap-breakpoint) {
padding-top: 48px;
@@ -300,6 +328,15 @@
}
}
+ &--no-bar {
+ margin-bottom: 0;
+
+ .public-account-header__image,
+ .public-account-header__image img {
+ border-radius: 4px;
+ }
+ }
+
@media screen and (max-width: $no-gap-breakpoint) {
margin-bottom: 0;
box-shadow: none;
diff --git a/app/javascript/styles/mastodon/widgets.scss b/app/javascript/styles/mastodon/widgets.scss
index b05bbbda7..875a36959 100644
--- a/app/javascript/styles/mastodon/widgets.scss
+++ b/app/javascript/styles/mastodon/widgets.scss
@@ -103,6 +103,48 @@
}
}
+.box-widget {
+ padding: 20px;
+ border-radius: 4px;
+ background: $ui-base-color;
+ box-shadow: 0 0 15px rgba($base-shadow-color, 0.2);
+}
+
+.contact-widget,
+.landing-page__information.contact-widget {
+ box-sizing: border-box;
+ padding: 20px;
+ height: 100%;
+ border-radius: 4px;
+ background: $ui-base-color;
+ box-shadow: 0 0 15px rgba($base-shadow-color, 0.2);
+}
+
+.contact-widget {
+ font-size: 15px;
+ color: $darker-text-color;
+ line-height: 20px;
+ word-wrap: break-word;
+ font-weight: 400;
+
+ p {
+ margin-bottom: 10px;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+ }
+
+ &__mail {
+ margin-top: 10px;
+
+ a {
+ color: $primary-text-color;
+ text-decoration: none;
+ }
+ }
+}
+
.moved-account-widget {
padding: 15px;
padding-bottom: 20px;
diff --git a/app/views/about/_administration.html.haml b/app/views/about/_administration.html.haml
deleted file mode 100644
index 02286d68b..000000000
--- a/app/views/about/_administration.html.haml
+++ /dev/null
@@ -1,19 +0,0 @@
-.account
- .account__wrapper
- - if @instance_presenter.contact_account
- = link_to TagManager.instance.url_for(@instance_presenter.contact_account), class: 'account__display-name' do
- .account__avatar-wrapper
- .account__avatar{ style: "background-image: url(#{@instance_presenter.contact_account.avatar.url})" }
- %span.display-name
- %bdi
- %strong.display-name__html.emojify= display_name(@instance_presenter.contact_account, custom_emojify: true)
- %span.display-name__account @#{@instance_presenter.contact_account.acct}
- - else
- .account__display-name
- .account__avatar-wrapper
- .account__avatar{ style: "background-image: url(#{full_asset_url('avatars/original/missing.png', skip_pipeline: true)})" }
- %span.display-name
- %strong= t 'about.contact_missing'
- %span.display-name__account= t 'about.contact_unavailable'
-
- = link_to t('about.learn_more'), about_more_path, class: 'button button-alternative'
diff --git a/app/views/about/_contact.html.haml b/app/views/about/_contact.html.haml
deleted file mode 100644
index 3215d50b5..000000000
--- a/app/views/about/_contact.html.haml
+++ /dev/null
@@ -1,22 +0,0 @@
-.panel
- .panel-header
- = succeed ':' do
- = t 'about.contact'
- - if contact.site_contact_email.present?
- = mail_to contact.site_contact_email, nil, title: contact.site_contact_email
- - else
- %span= t 'about.contact_unavailable'
- .panel-body
- - if contact.contact_account
- .owner
- .avatar= image_tag contact.contact_account.avatar.url
- .name
- = link_to TagManager.instance.url_for(contact.contact_account) do
- %span.display_name.emojify= display_name(contact.contact_account, custom_emojify: true)
- %span.username @#{contact.contact_account.acct}
- - else
- .owner
- .avatar= image_tag full_asset_url('avatars/original/missing.png', skip_pipeline: true)
- .name
- %span.display_name= t 'about.contact_missing'
- %span.username= t 'about.contact_unavailable'
diff --git a/app/views/about/more.html.haml b/app/views/about/more.html.haml
index df072b8ae..9e042ca73 100644
--- a/app/views/about/more.html.haml
+++ b/app/views/about/more.html.haml
@@ -5,39 +5,41 @@
= javascript_pack_tag 'public', integrity: true, crossorigin: 'anonymous'
= render partial: 'shared/og'
-.landing-page
- .header-wrapper.compact
- .header
- = render 'links'
+.grid-3
+ .column-0
+ .public-account-header.public-account-header--no-bar
+ .public-account-header__image
+ = image_tag @instance_presenter.hero&.file&.url || @instance_presenter.thumbnail&.file&.url || asset_pack_path('preview.jpg'), alt: @instance_presenter.site_title, class: 'parallax'
- .container-alt.hero
- .heading
- %h3= t('about.description_headline', domain: site_hostname)
- %p= @instance_presenter.site_description.html_safe.presence || t('about.generic_description', domain: site_hostname)
+ .column-1
+ .landing-page__call-to-action{ dir: 'ltr' }
+ .row
+ .row__information-board
+ .information-board__section
+ %span= t 'about.user_count_before'
+ %strong= number_with_delimiter @instance_presenter.user_count
+ %span= t 'about.user_count_after'
+ .information-board__section
+ %span= t 'about.status_count_before'
+ %strong= number_with_delimiter @instance_presenter.status_count
+ %span= t 'about.status_count_after'
+ .row__mascot
+ .landing-page__mascot
+ = image_tag asset_pack_path('elephant_ui_plane.svg')
- .information-board
- .container-alt
- .information-board__sections
- .information-board__section
- %span= t 'about.user_count_before'
- %strong= number_with_delimiter @instance_presenter.user_count
- %span= t 'about.user_count_after'
- .information-board__section
- %span= t 'about.status_count_before'
- %strong= number_with_delimiter @instance_presenter.status_count
- %span= t 'about.status_count_after'
- .information-board__section
- %span= t 'about.domain_count_before'
- %strong= number_with_delimiter @instance_presenter.domain_count
- %span= t 'about.domain_count_after'
- = render 'contact', contact: @instance_presenter
+ .column-2
+ .landing-page__information.contact-widget
+ %p= t 'about.administered_by'
- .extended-description
- .container-alt
- = @instance_presenter.site_extended_description.html_safe.presence || t('about.extended_description_html')
+ = account_link_to(@instance_presenter.contact_account)
- .footer-links
- .container-alt
- %p
- = link_to t('about.source_code'), @instance_presenter.source_url
- = " (#{@instance_presenter.version_number})"
+ - if @instance_presenter.site_contact_email.present?
+ %p.contact-widget__mail
+ = succeed ':' do
+ = t 'about.contact'
+ %br/
+ = mail_to @instance_presenter.site_contact_email, nil, title: @instance_presenter.site_contact_email
+
+ .column-3
+ .box-widget
+ .rich-formatting= @instance_presenter.site_extended_description.html_safe.presence || t('about.extended_description_html')
diff --git a/app/views/about/show.html.haml b/app/views/about/show.html.haml
index fba46d54b..8a40b97cc 100644
--- a/app/views/about/show.html.haml
+++ b/app/views/about/show.html.haml
@@ -110,7 +110,7 @@
%p= t 'about.about_mastodon_html'
%div.contact
%h3= t 'about.administered_by'
- = render 'administration'
+ = account_link_to(@instance_presenter.contact_account, link_to(t('about.learn_more'), about_more_path, class: 'button button-alternative'))
= render 'features'
@@ -131,7 +131,7 @@
%p= t 'about.about_mastodon_html'
%div.contact
%h3= t 'about.administered_by'
- = render 'administration'
+ = account_link_to(@instance_presenter.contact_account, link_to(t('about.learn_more'), about_more_path, class: 'button button-alternative'))
= render 'features'
diff --git a/app/views/about/terms.html.haml b/app/views/about/terms.html.haml
index c7d36ed47..9d076a91b 100644
--- a/app/views/about/terms.html.haml
+++ b/app/views/about/terms.html.haml
@@ -1,11 +1,9 @@
- content_for :page_title do
= t('terms.title', instance: site_hostname)
-.landing-page
- .header-wrapper.compact
- .header
- = render 'links'
-
- .extended-description
- .container-alt
- = @instance_presenter.site_terms.html_safe.presence || t('terms.body_html')
+.grid
+ .column-0
+ .box-widget
+ .rich-formatting= @instance_presenter.site_terms.html_safe.presence || t('terms.body_html')
+ .column-1
+ = render 'application/sidebar'
diff --git a/config/locales/ar.yml b/config/locales/ar.yml
index d40ae0f72..c2d7dc75e 100644
--- a/config/locales/ar.yml
+++ b/config/locales/ar.yml
@@ -9,9 +9,6 @@ ar:
contact: للتواصل معنا
contact_missing: غير محدد
contact_unavailable: غير متوفر
- description_headline: ما هو %{domain}?
- domain_count_after: خوادم أخرى
- domain_count_before: متصل بـ
extended_description_html: |
مكان جيد للقواعد
لا يوجد تفصيل طويل حتى الآن.
diff --git a/config/locales/ast.yml b/config/locales/ast.yml
index 3dae9cc1a..65620a7c4 100644
--- a/config/locales/ast.yml
+++ b/config/locales/ast.yml
@@ -3,8 +3,6 @@ ast:
about:
about_mastodon_html: Mastodon ye una rede social basada en protocolos abiertos y software de códigu llibre. Ye descentralizada, como'l corréu electrónicu.
contact_unavailable: N/D
- description_headline: "¿Qué ye %{domain}?"
- domain_count_after: otres instancies
features:
not_a_product_title: Yes una persona, non un productu
source_code: Códigu fonte
diff --git a/config/locales/bg.yml b/config/locales/bg.yml
index f101101e2..8c11ac7b7 100644
--- a/config/locales/bg.yml
+++ b/config/locales/bg.yml
@@ -5,9 +5,6 @@ bg:
about_this: За тази инстанция
closed_registrations: В момента регистрациите за тази инстанция са затворени.
contact: За контакти
- description_headline: Какво е %{domain}?
- domain_count_after: други инстанции
- domain_count_before: Свързани към
other_instances: Други инстанции
source_code: Програмен код
status_count_after: публикации
diff --git a/config/locales/ca.yml b/config/locales/ca.yml
index ea8a5712b..41c35e79b 100644
--- a/config/locales/ca.yml
+++ b/config/locales/ca.yml
@@ -9,9 +9,6 @@ ca:
contact: Contacte
contact_missing: No configurat
contact_unavailable: N/D
- description_headline: Què es %{domain}?
- domain_count_after: altres instàncies
- domain_count_before: Connectada a
extended_description_html: |
Un bon lloc per les regles
Encara no s'ha configurat la descripció ampliada.
diff --git a/config/locales/co.yml b/config/locales/co.yml
index 4326dde67..09d470c97 100644
--- a/config/locales/co.yml
+++ b/config/locales/co.yml
@@ -9,9 +9,6 @@ co:
contact: Cuntattu
contact_missing: Mancante
contact_unavailable: Micca dispunibule
- description_headline: Quale hè %{domain} ?
- domain_count_after: altre istanze
- domain_count_before: Cunnettati à
extended_description_html: |
Una bona piazza per e regule
A descrizzione stesa ùn hè micca stata riempiuta.
diff --git a/config/locales/cs.yml b/config/locales/cs.yml
index 6529992dc..27bc793ed 100644
--- a/config/locales/cs.yml
+++ b/config/locales/cs.yml
@@ -9,9 +9,6 @@ cs:
contact: Kontakt
contact_missing: Nenastaveno
contact_unavailable: Neuvedeno
- description_headline: Co je %{domain}?
- domain_count_after: dalším instancím
- domain_count_before: Připojeno k
extended_description_html: |
Dobré místo pro pravidla
Rozšířený popis ještě nebyl nastaven.
diff --git a/config/locales/da.yml b/config/locales/da.yml
index 4c7f0f550..2b6207de6 100644
--- a/config/locales/da.yml
+++ b/config/locales/da.yml
@@ -9,9 +9,6 @@ da:
contact: Kontakt
contact_missing: Ikke sat
contact_unavailable: Ikke tilgængeligt
- description_headline: Hvad er %{domain}?
- domain_count_after: andre instanser
- domain_count_before: Forbundet til
extended_description_html: |
Et godt sted for regler
Den udvidede beskrivelse er endnu ikke blevet opsat.
diff --git a/config/locales/de.yml b/config/locales/de.yml
index a7e3c6ffe..24ee095be 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -9,9 +9,6 @@ de:
contact: Kontakt
contact_missing: Nicht angegeben
contact_unavailable: N/A
- description_headline: Was ist %{domain}?
- domain_count_after: anderen Instanzen
- domain_count_before: Vernetzt mit
extended_description_html: |
Ein guter Platz für Regeln
Die erweiterte Beschreibung wurde noch nicht aufgesetzt.
diff --git a/config/locales/el.yml b/config/locales/el.yml
index 905564317..674712d98 100644
--- a/config/locales/el.yml
+++ b/config/locales/el.yml
@@ -9,9 +9,6 @@ el:
contact: Επικοινωνία
contact_missing: Δεν έχει οριστεί
contact_unavailable: Μ/Δ
- description_headline: Τι είναι το %{domain};
- domain_count_after: άλλους διακομιστές
- domain_count_before: Συνδέεται με
extended_description_html: |
Ένα καλό σημείο για κανόνες
Η αναλυτική περιγραφή δεν έχει ακόμα οριστεί
diff --git a/config/locales/en.yml b/config/locales/en.yml
index ef5b2c93b..a5e4ab75d 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -10,10 +10,7 @@ en:
contact: Contact
contact_missing: Not set
contact_unavailable: N/A
- description_headline: What is %{domain}?
documentation: Documentation
- domain_count_after: other instances
- domain_count_before: Connected to
extended_description_html: |
A good place for rules
The extended description has not been set up yet.
diff --git a/config/locales/eo.yml b/config/locales/eo.yml
index 72010a085..788fd5f52 100644
--- a/config/locales/eo.yml
+++ b/config/locales/eo.yml
@@ -9,9 +9,6 @@ eo:
contact: Kontakti
contact_missing: Ne elektita
contact_unavailable: Ne disponebla
- description_headline: Kio estas %{domain}?
- domain_count_after: aliaj nodoj
- domain_count_before: Konektita al
extended_description_html: |
Bona loko por reguloj
La detala priskribo ne estis elektita.
diff --git a/config/locales/es.yml b/config/locales/es.yml
index 3aae7f934..ca04f0b1c 100644
--- a/config/locales/es.yml
+++ b/config/locales/es.yml
@@ -9,9 +9,6 @@ es:
contact: Contacto
contact_missing: No especificado
contact_unavailable: N/A
- description_headline: "¿Qué es %{domain}?"
- domain_count_after: otras instancias
- domain_count_before: Conectado a
extended_description_html: |
Un buen lugar para las reglas
La descripción extendida no se ha colocado aún.
diff --git a/config/locales/eu.yml b/config/locales/eu.yml
index c11e05908..7b70ca77e 100644
--- a/config/locales/eu.yml
+++ b/config/locales/eu.yml
@@ -9,9 +9,6 @@ eu:
contact: Kontaktua
contact_missing: Ezarri gabe
contact_unavailable: E/E
- description_headline: Zer da %{domain}?
- domain_count_after: instantzia desberdinetara
- domain_count_before: Konektatuta
extended_description_html: |
Arauentzako toki egoki bat
Azalpen luzea ez da ezarri oraindik.
diff --git a/config/locales/fa.yml b/config/locales/fa.yml
index b4dc3fd8a..25d1e81ab 100644
--- a/config/locales/fa.yml
+++ b/config/locales/fa.yml
@@ -9,9 +9,6 @@ fa:
contact: تماس
contact_missing: تعیین نشده
contact_unavailable: موجود نیست
- description_headline: "%{domain} چیست؟"
- domain_count_after: سرور دیگر
- domain_count_before: متصل به
extended_description_html: |
جای خوبی برای قانونها
توضیحات تکمیلی نوشته نشده است.
diff --git a/config/locales/fi.yml b/config/locales/fi.yml
index 2c534f071..7fa2bc8de 100644
--- a/config/locales/fi.yml
+++ b/config/locales/fi.yml
@@ -9,9 +9,6 @@ fi:
contact: Ota yhteyttä
contact_missing: Ei asetettu
contact_unavailable: Ei saatavilla
- description_headline: Mikä on %{domain}?
- domain_count_after: muuhun instanssiin
- domain_count_before: Yhdistyneenä
extended_description_html: |
Hyvä paikka säännöille
Pidempää kuvausta ei ole vielä laadittu.
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index a4f2758e0..2eb1ba0ce 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -9,9 +9,6 @@ fr:
contact: Contact
contact_missing: Manquant
contact_unavailable: Non disponible
- description_headline: Qu’est-ce que %{domain} ?
- domain_count_after: autres instances
- domain_count_before: Connecté⋅e⋅s à
extended_description_html: |
Un bon endroit pour les règles
La description étendue n’a pas été remplie.
diff --git a/config/locales/gl.yml b/config/locales/gl.yml
index a5732168b..92b71cce6 100644
--- a/config/locales/gl.yml
+++ b/config/locales/gl.yml
@@ -9,9 +9,6 @@ gl:
contact: Contacto
contact_missing: Non establecido
contact_unavailable: N/A
- description_headline: Qué é %{domain}?
- domain_count_after: outras instancias
- domain_count_before: Conectada a
extended_description_html: |
Un bo lugar para regras
A descrición extendida aínda non se proporcionou.
diff --git a/config/locales/he.yml b/config/locales/he.yml
index b03f184ca..e3bb64364 100644
--- a/config/locales/he.yml
+++ b/config/locales/he.yml
@@ -8,9 +8,6 @@ he:
contact: צור קשר
contact_missing: אין
contact_unavailable: לא רלוונטי/חסר
- description_headline: מהו %{domain}?
- domain_count_after: שרתים אחרים
- domain_count_before: מחובר אל
extended_description_html: |
מקום טוב לכללים
התיאור המורחב טרם הוגדר.
diff --git a/config/locales/hr.yml b/config/locales/hr.yml
index 07373d19d..a6e7649f2 100644
--- a/config/locales/hr.yml
+++ b/config/locales/hr.yml
@@ -5,9 +5,6 @@ hr:
about_this: O ovoj instanci
closed_registrations: Registracije na ovoj instanci su trenutno zatvorene.
contact: Kontakt
- description_headline: Što je %{domain}?
- domain_count_after: druge instance
- domain_count_before: Spojen na
other_instances: Druge instance
source_code: Izvorni kod
status_count_after: statusi
diff --git a/config/locales/hu.yml b/config/locales/hu.yml
index af10dfd80..824a46066 100644
--- a/config/locales/hu.yml
+++ b/config/locales/hu.yml
@@ -8,9 +8,6 @@ hu:
contact: Kapcsolat
contact_missing: Nincs megadva
contact_unavailable: N/A
- description_headline: Mi az a %{domain}?
- domain_count_after: további instanciával
- domain_count_before: Kapcsolatban
extended_description_html: |
Ez itt a szabályzat helye
Még nem állítottál be bővebb leírást.
diff --git a/config/locales/id.yml b/config/locales/id.yml
index c391a6b4e..33a764a28 100644
--- a/config/locales/id.yml
+++ b/config/locales/id.yml
@@ -5,9 +5,6 @@ id:
about_this: Tentang server ini
closed_registrations: Pendaftaran untuk server ini sedang ditutup.
contact: Kontak
- description_headline: Apa itu %{domain}?
- domain_count_after: server lain
- domain_count_before: Terhubung dengan
other_instances: Server lain
source_code: Kode sumber
status_count_after: status
diff --git a/config/locales/io.yml b/config/locales/io.yml
index 71a7f2d94..287c1d0e6 100644
--- a/config/locales/io.yml
+++ b/config/locales/io.yml
@@ -5,9 +5,6 @@ io:
about_this: Pri ta instaluro
closed_registrations: Membresko ne nun esas posible en ta instaluro.
contact: Kontaktar
- description_headline: Quo esas %{domain}?
- domain_count_after: altra instaluri
- domain_count_before: Konektita ad
other_instances: Altra instaluri
source_code: Fontkodexo
status_count_after: mesaji
diff --git a/config/locales/it.yml b/config/locales/it.yml
index e985d1f10..0f25dd231 100644
--- a/config/locales/it.yml
+++ b/config/locales/it.yml
@@ -9,9 +9,6 @@ it:
contact: Contatti
contact_missing: Non impostato
contact_unavailable: N/D
- description_headline: Cos'è %{domain}?
- domain_count_after: altri server
- domain_count_before: Connesso a
extended_description_html: |
Un buon posto per le regole
La descrizione estesa non è ancora stata preparata.
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index d9503a141..69c7d3367 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -9,9 +9,6 @@ ja:
contact: 連絡先
contact_missing: 未設定
contact_unavailable: N/A
- description_headline: "%{domain} とは?"
- domain_count_after: 個のインスタンス
- domain_count_before: 接続中
extended_description_html: |
ルールを書くのに適した場所
詳細説明が設定されていません。
diff --git a/config/locales/ko.yml b/config/locales/ko.yml
index 00b3b249d..d328ae4e7 100644
--- a/config/locales/ko.yml
+++ b/config/locales/ko.yml
@@ -9,9 +9,6 @@ ko:
contact: 연락처
contact_missing: 미설정
contact_unavailable: N/A
- description_headline: "%{domain} (은)는 무엇인가요?"
- domain_count_after: 개의 인스턴스
- domain_count_before: 연결된
extended_description_html: |
룰을 작성하는 장소
아직 설명이 작성되지 않았습니다.
diff --git a/config/locales/nl.yml b/config/locales/nl.yml
index 0001891b2..112b5d5fe 100644
--- a/config/locales/nl.yml
+++ b/config/locales/nl.yml
@@ -9,9 +9,6 @@ nl:
contact: Contact
contact_missing: Niet ingesteld
contact_unavailable: n.v.t
- description_headline: Wat is %{domain}?
- domain_count_after: andere servers
- domain_count_before: Verbonden met
extended_description_html: |
Een goede plek voor richtlijnen
De uitgebreide omschrijving is nog niet ingevuld.
diff --git a/config/locales/no.yml b/config/locales/no.yml
index c17ea3e86..bcf3966d4 100644
--- a/config/locales/no.yml
+++ b/config/locales/no.yml
@@ -8,9 +8,6 @@
contact: Kontakt
contact_missing: Ikke innstilt
contact_unavailable: Ikke tilgjengelig
- description_headline: Hva er %{domain}?
- domain_count_after: andre instanser
- domain_count_before: Koblet til
extended_description_html: |
En god plassering for regler
En utvidet beskrivelse er ikke satt opp ennå.
diff --git a/config/locales/oc.yml b/config/locales/oc.yml
index 828ecfbf5..3ff2dae66 100644
--- a/config/locales/oc.yml
+++ b/config/locales/oc.yml
@@ -9,9 +9,6 @@ oc:
contact: Contacte
contact_missing: Pas parametrat
contact_unavailable: Pas disponible
- description_headline: Qué es %{domain} ?
- domain_count_after: autras instàncias
- domain_count_before: Connectat a
extended_description_html: |
Una bona plaça per las règlas
La descripcion longa es pas estada causida pel moment.
diff --git a/config/locales/pl.yml b/config/locales/pl.yml
index 4407fd548..fb5c51c5e 100644
--- a/config/locales/pl.yml
+++ b/config/locales/pl.yml
@@ -10,10 +10,7 @@ pl:
contact: Kontakt
contact_missing: Nie ustawiono
contact_unavailable: Nie dotyczy
- description_headline: Czym jest %{domain}?
documentation: Dokumentacja
- domain_count_after: instancjami
- domain_count_before: Serwer połączony z
extended_description_html: |
Dobre miejsce na zasady użytkowania
Nie ustawiono jeszcze szczegółowego opisu
diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml
index 0c1cc6a6d..9aedd375c 100644
--- a/config/locales/pt-BR.yml
+++ b/config/locales/pt-BR.yml
@@ -9,9 +9,6 @@ pt-BR:
contact: Contato
contact_missing: Não definido
contact_unavailable: N/A
- description_headline: O que é %{domain}?
- domain_count_after: outras instâncias
- domain_count_before: Conectado a
extended_description_html: |
Um bom lugar para regras
A descrição da instância ainda não foi feita.
diff --git a/config/locales/pt.yml b/config/locales/pt.yml
index 33b6b0acb..eebeb498e 100644
--- a/config/locales/pt.yml
+++ b/config/locales/pt.yml
@@ -8,9 +8,6 @@ pt:
contact: Contacto
contact_missing: Não configurado
contact_unavailable: n.d.
- description_headline: O que é o %{domain}?
- domain_count_after: outras instâncias
- domain_count_before: Ligado a
extended_description_html: |
Um bom lugar para regras
A descrição estendida ainda não foi configurada.
diff --git a/config/locales/ru.yml b/config/locales/ru.yml
index f3184e238..9d41e20ff 100644
--- a/config/locales/ru.yml
+++ b/config/locales/ru.yml
@@ -9,9 +9,6 @@ ru:
contact: Связаться
contact_missing: Не установлено
contact_unavailable: Недоступен
- description_headline: Что такое %{domain}?
- domain_count_after: другими узлами
- domain_count_before: Связан с
extended_description_html: |
Хорошее место для правил
Расширенное описание еще не настроено.
diff --git a/config/locales/sk.yml b/config/locales/sk.yml
index 0c86f5aa0..1be11baa4 100644
--- a/config/locales/sk.yml
+++ b/config/locales/sk.yml
@@ -9,9 +9,6 @@ sk:
contact: Kontakt
contact_missing: Nezadané
contact_unavailable: Neuvedené
- description_headline: Čo je %{domain}?
- domain_count_after: ďalším instanciám
- domain_count_before: Pripojený k
extended_description_html: |
Pravidlá
Žiadne zatiaľ nie sú
diff --git a/config/locales/sl.yml b/config/locales/sl.yml
index 16ace08d3..f7ef65423 100644
--- a/config/locales/sl.yml
+++ b/config/locales/sl.yml
@@ -9,9 +9,6 @@ sl:
contact: Kontakt
contact_missing: Ni nastavljeno
contact_unavailable: Ni na voljo
- description_headline: Kaj je %{domain}?
- domain_count_after: ostala vozlišča
- domain_count_before: Povezan z
extended_description_html: |
Dober prostor za pravila
Razširjen opis še ni bil nastavljen.
diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml
index d7dd574c7..d9813db47 100644
--- a/config/locales/sr-Latn.yml
+++ b/config/locales/sr-Latn.yml
@@ -8,9 +8,6 @@ sr-Latn:
contact: Kontakt
contact_missing: Nije postavljeno
contact_unavailable: N/A
- description_headline: Šta je %{domain}?
- domain_count_after: ostale instance
- domain_count_before: Povezan na
extended_description_html: |
Dobro mesto za pravila
Prošireni opis koji još nije postavljen.
diff --git a/config/locales/sr.yml b/config/locales/sr.yml
index 63c42f62f..61c0b123c 100644
--- a/config/locales/sr.yml
+++ b/config/locales/sr.yml
@@ -9,9 +9,6 @@ sr:
contact: Контакт
contact_missing: Није постављено
contact_unavailable: N/A
- description_headline: Шта је %{domain}?
- domain_count_after: остале инстанце
- domain_count_before: Повезан на
extended_description_html: |
Добро место за правила
Проширени опис који још није постављен.
diff --git a/config/locales/sv.yml b/config/locales/sv.yml
index cf1ab582f..605d9db12 100644
--- a/config/locales/sv.yml
+++ b/config/locales/sv.yml
@@ -9,9 +9,6 @@ sv:
contact: Kontakt
contact_missing: Inte inställd
contact_unavailable: N/A
- description_headline: Vad är %{domain}?
- domain_count_after: andra instanser
- domain_count_before: Uppkopplad mot
extended_description_html: |
En bra plats för regler
Den utökade beskrivningen har inte konfigurerats ännu.
diff --git a/config/locales/th.yml b/config/locales/th.yml
index 182bde388..88e1eb44c 100644
--- a/config/locales/th.yml
+++ b/config/locales/th.yml
@@ -5,9 +5,6 @@ th:
about_this: เกี่ยวกับอินซะแตนซ์นี้
closed_registrations: อินซะแตนซ์นี้ปิดรับลงทะเบียนแล้ว.
contact: ติดต่อ
- description_headline: โดเมนคือ %{domain} ?
- domain_count_after: อินซะแตนซ์อื่นๆ
- domain_count_before: เชื่อมต่อกับ
other_instances: อินซะแตนซ์อื่นๆ
source_code: ซอร์สโค๊ด
status_count_after: สถานะ
diff --git a/config/locales/tr.yml b/config/locales/tr.yml
index 3609261ed..26dd4c1e3 100644
--- a/config/locales/tr.yml
+++ b/config/locales/tr.yml
@@ -5,9 +5,6 @@ tr:
about_this: Bu sunucu hakkında
closed_registrations: Bu sunucu şu anda yeni kayıt almamaktadır.
contact: İletişim
- description_headline: Peki %{domain} nedir?
- domain_count_after: sunucu var.
- domain_count_before: Bağlı olduğu
other_instances: Diğer sunucular
source_code: Kaynak kodu
status_count_after: adet gönderi yazıldı.
diff --git a/config/locales/uk.yml b/config/locales/uk.yml
index 266c878f1..1380635eb 100644
--- a/config/locales/uk.yml
+++ b/config/locales/uk.yml
@@ -7,9 +7,6 @@ uk:
closed_registrations: На даний момент реєстрація на цій інстанції закрита.
contact: Зв'язатися
contact_missing: Не зазначено
- description_headline: Що таке %{domain}?
- domain_count_after: іншими інстанціями
- domain_count_before: Зв'язаний з
features:
humane_approach_title: Більш людський підхід
real_conversation_title: Побудований для справжньої розмови
diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml
index 6e64aff5a..b2f9fd01e 100644
--- a/config/locales/zh-CN.yml
+++ b/config/locales/zh-CN.yml
@@ -9,9 +9,6 @@ zh-CN:
contact: 联系方式
contact_missing: 未设定
contact_unavailable: 未公开
- description_headline: 关于 %{domain}
- domain_count_after: 个其它实例
- domain_count_before: 现已接入
extended_description_html: |
这里可以写一些规定
本站尚未设置详细介绍。
diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml
index 7ff0d7ae6..ee7ca4443 100644
--- a/config/locales/zh-HK.yml
+++ b/config/locales/zh-HK.yml
@@ -9,9 +9,6 @@ zh-HK:
contact: 聯絡
contact_missing: 未設定
contact_unavailable: 未公開
- description_headline: 甚麼是 %{domain} ?
- domain_count_after: 個其他服務站
- domain_count_before: 已連接至
extended_description_html: |
這裡可以寫一些網站規則
本站未有詳細介紹
diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml
index 483cffe8e..0a18dc990 100644
--- a/config/locales/zh-TW.yml
+++ b/config/locales/zh-TW.yml
@@ -9,9 +9,6 @@ zh-TW:
contact: 聯絡我們
contact_missing: 未設定
contact_unavailable: 未公開
- description_headline: 關於 %{domain}?
- domain_count_after: 個站點相連
- domain_count_before: 與其他
extended_description_html: |
這裡可以寫一些網站規則
本站點未有詳細介紹
diff --git a/spec/views/about/_contact.html.haml_spec.rb b/spec/views/about/_contact.html.haml_spec.rb
deleted file mode 100644
index 25ba15794..000000000
--- a/spec/views/about/_contact.html.haml_spec.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-describe 'about/_contact.html.haml' do
- describe 'the contact account', without_verify_partial_doubles: true do
- before do
- allow(view).to receive(:display_name).and_return('Display Name!')
- end
-
- it 'shows info when account is present' do
- account = Account.new(username: 'admin')
- contact = double(contact_account: account, site_contact_email: '')
- render 'about/contact', contact: contact
-
- expect(rendered).to have_content('@admin')
- end
-
- it 'does not show info when account is missing' do
- contact = double(contact_account: nil, site_contact_email: '')
- render 'about/contact', contact: contact
-
- expect(rendered).not_to have_content('@')
- end
- end
-
- describe 'the contact email' do
- it 'show info when email is present' do
- contact = double(site_contact_email: 'admin@example.com', contact_account: nil)
- render 'about/contact', contact: contact
-
- expect(rendered).to have_content('admin@example.com')
- end
- end
-end
From aff6a15061de203842653d680047322277dc7af6 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Thu, 9 Aug 2018 15:24:29 +0200
Subject: [PATCH 070/196] When follow is removed, remove endorsement (#8149)
---
app/models/follow.rb | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/app/models/follow.rb b/app/models/follow.rb
index eaf8445f3..3fce14b9a 100644
--- a/app/models/follow.rb
+++ b/app/models/follow.rb
@@ -33,10 +33,15 @@ class Follow < ApplicationRecord
end
before_validation :set_uri, only: :create
+ after_destroy :remove_endorsements
private
def set_uri
self.uri = ActivityPub::TagManager.instance.generate_uri_for(self) if uri.nil?
end
+
+ def remove_endorsements
+ AccountPin.where(target_account_id: target_account_id, account_id: account_id).delete_all
+ end
end
From 8c279b1648fc0a07b5c5d4a0e18526bcb51c7700 Mon Sep 17 00:00:00 2001
From: Aaron Brady
Date: Thu, 9 Aug 2018 16:37:48 -0400
Subject: [PATCH 071/196] Update docker-compose to cope with build-time assets
(#8156)
#7780 means that asset compilation happens as a build step.
Having the assets and packs volumes defined in `docker-compose.yml` breaks this. For people who run under Docker Compose, I believe this will fix their CSS (which even running the asset recompilation separately did not).
---
docker-compose.yml | 3 ---
1 file changed, 3 deletions(-)
diff --git a/docker-compose.yml b/docker-compose.yml
index c54c73e44..3b50f6d31 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -46,8 +46,6 @@ services:
- redis
# - es
volumes:
- - ./public/assets:/mastodon/public/assets
- - ./public/packs:/mastodon/public/packs
- ./public/system:/mastodon/public/system
streaming:
@@ -78,7 +76,6 @@ services:
- external_network
- internal_network
volumes:
- - ./public/packs:/mastodon/public/packs
- ./public/system:/mastodon/public/system
## Uncomment to enable federation with tor instances along with adding the following ENV variables
## http_proxy=http://privoxy:8118
From 5b8603879f06573d51c5c33edda6f410d1af7a02 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Fri, 10 Aug 2018 06:43:02 +0200
Subject: [PATCH 072/196] Adjust responsive design for /about/more and /terms
(#8158)
Follow-up to #8142
---
app/javascript/styles/mastodon/about.scss | 11 ++++
.../styles/mastodon/containers.scss | 53 +++++++++++++++++++
app/javascript/styles/mastodon/widgets.scss | 11 +++-
app/views/about/more.html.haml | 8 +--
4 files changed, 78 insertions(+), 5 deletions(-)
diff --git a/app/javascript/styles/mastodon/about.scss b/app/javascript/styles/mastodon/about.scss
index bba7044cf..228dd96f0 100644
--- a/app/javascript/styles/mastodon/about.scss
+++ b/app/javascript/styles/mastodon/about.scss
@@ -790,8 +790,10 @@ $small-breakpoint: 960px;
border-radius: 4px;
padding: 25px 40px;
overflow: hidden;
+ box-sizing: border-box;
.row {
+ width: 100%;
display: flex;
flex-direction: row-reverse;
flex-wrap: wrap;
@@ -808,11 +810,20 @@ $small-breakpoint: 960px;
flex: 1 0 auto;
padding: 0 10px;
}
+
+ @media screen and (max-width: $no-gap-breakpoint) {
+ width: 100%;
+ justify-content: space-between;
+ }
}
.row__mascot {
flex: 1;
margin: 10px -50px 0 0;
+
+ @media screen and (max-width: $no-gap-breakpoint) {
+ display: none;
+ }
}
}
diff --git a/app/javascript/styles/mastodon/containers.scss b/app/javascript/styles/mastodon/containers.scss
index ba36d62d9..8ecedd2cb 100644
--- a/app/javascript/styles/mastodon/containers.scss
+++ b/app/javascript/styles/mastodon/containers.scss
@@ -141,6 +141,55 @@
grid-column: 1/3;
grid-row: 3;
}
+
+ .landing-page__call-to-action {
+ min-height: 100%;
+ }
+
+ @media screen and (max-width: 738px) {
+ grid-template-columns: minmax(0, 50%) minmax(0, 50%);
+
+ .landing-page__call-to-action {
+ padding: 20px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ }
+
+ .row__information-board {
+ width: 100%;
+ justify-content: center;
+ align-items: center;
+ }
+
+ .row__mascot {
+ display: none;
+ }
+ }
+
+ @media screen and (max-width: $no-gap-breakpoint) {
+ grid-gap: 0;
+ grid-template-columns: minmax(0, 100%);
+
+ .column-0 {
+ grid-column: 1;
+ }
+
+ .column-1 {
+ grid-column: 1;
+ grid-row: 3;
+ }
+
+ .column-2 {
+ grid-column: 1;
+ grid-row: 2;
+ }
+
+ .column-3 {
+ grid-column: 1;
+ grid-row: 4;
+ }
+ }
}
.public-layout {
@@ -334,6 +383,10 @@
.public-account-header__image,
.public-account-header__image img {
border-radius: 4px;
+
+ @media screen and (max-width: $no-gap-breakpoint) {
+ border-radius: 0;
+ }
}
}
diff --git a/app/javascript/styles/mastodon/widgets.scss b/app/javascript/styles/mastodon/widgets.scss
index 875a36959..f843f0b42 100644
--- a/app/javascript/styles/mastodon/widgets.scss
+++ b/app/javascript/styles/mastodon/widgets.scss
@@ -114,7 +114,7 @@
.landing-page__information.contact-widget {
box-sizing: border-box;
padding: 20px;
- height: 100%;
+ min-height: 100%;
border-radius: 4px;
background: $ui-base-color;
box-shadow: 0 0 15px rgba($base-shadow-color, 0.2);
@@ -127,6 +127,10 @@
word-wrap: break-word;
font-weight: 400;
+ strong {
+ font-weight: 500;
+ }
+
p {
margin-bottom: 10px;
@@ -226,7 +230,10 @@
}
.moved-account-widget,
-.memoriam-widget {
+.memoriam-widget,
+.box-widget,
+.contact-widget,
+.landing-page__information.contact-widget {
@media screen and (max-width: $no-gap-breakpoint) {
margin-bottom: 0;
box-shadow: none;
diff --git a/app/views/about/more.html.haml b/app/views/about/more.html.haml
index 9e042ca73..8411cd276 100644
--- a/app/views/about/more.html.haml
+++ b/app/views/about/more.html.haml
@@ -29,14 +29,16 @@
.column-2
.landing-page__information.contact-widget
- %p= t 'about.administered_by'
+ %p
+ %strong= t 'about.administered_by'
= account_link_to(@instance_presenter.contact_account)
- if @instance_presenter.site_contact_email.present?
%p.contact-widget__mail
- = succeed ':' do
- = t 'about.contact'
+ %strong
+ = succeed ':' do
+ = t 'about.contact'
%br/
= mail_to @instance_presenter.site_contact_email, nil, title: @instance_presenter.site_contact_email
From d2e0818d5a472849817ec409639f176c69d1a9fc Mon Sep 17 00:00:00 2001
From: Evgeny Petrov
Date: Sat, 11 Aug 2018 00:39:52 +0300
Subject: [PATCH 073/196] [RU] Updated translation (#8164)
---
app/javascript/mastodon/locales/ru.json | 4 ++--
config/locales/activerecord.ru.yml | 2 +-
config/locales/ru.yml | 5 ++++-
config/locales/simple_form.ru.yml | 2 +-
4 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json
index 2706d5b71..6774bdc03 100644
--- a/app/javascript/mastodon/locales/ru.json
+++ b/app/javascript/mastodon/locales/ru.json
@@ -19,7 +19,7 @@
"account.mute_notifications": "Скрыть уведомления от @{name}",
"account.muted": "Приглушён",
"account.posts": "Посты",
- "account.posts_with_replies": "Посты с ответами",
+ "account.posts_with_replies": "Посты и ответы",
"account.report": "Пожаловаться",
"account.requested": "Ожидает подтверждения",
"account.share": "Поделиться профилем @{name}",
@@ -271,7 +271,7 @@
"status.reblog": "Продвинуть",
"status.reblog_private": "Продвинуть для своей аудитории",
"status.reblogged_by": "{name} продвинул(а)",
- "status.redraft": "Удалить и повторить",
+ "status.redraft": "Удалить и исправить",
"status.reply": "Ответить",
"status.replyAll": "Ответить на тред",
"status.report": "Пожаловаться",
diff --git a/config/locales/activerecord.ru.yml b/config/locales/activerecord.ru.yml
index 1a7ac9978..2a2d62a7e 100644
--- a/config/locales/activerecord.ru.yml
+++ b/config/locales/activerecord.ru.yml
@@ -6,7 +6,7 @@ ru:
account:
attributes:
username:
- invalid: только буквы, цифры и символ подеркивания
+ invalid: только буквы, цифры и символ подчёркивания
status:
attributes:
reblog:
diff --git a/config/locales/ru.yml b/config/locales/ru.yml
index 9d41e20ff..9d5c3184b 100644
--- a/config/locales/ru.yml
+++ b/config/locales/ru.yml
@@ -34,6 +34,7 @@ ru:
user_count_before: Здесь живет
what_is_mastodon: Что такое Mastodon?
accounts:
+ choices_html: "%{name} рекомендует:"
follow: Подписаться
followers: Подписчики
following: Подписан(а)
@@ -44,6 +45,8 @@ ru:
nothing_here: Здесь ничего нет!
people_followed_by: Люди, на которых подписан(а) %{name}
people_who_follow: Подписчики %{name}
+ pin_errors:
+ following: Чтобы порекомендовать кого-то, надо сначала на них подписаться
posts: Посты
posts_with_replies: Посты с ответами
reserved_username: Имя пользователя зарезервировано
@@ -358,7 +361,7 @@ ru:
title: Разрешить удаление аккаунтов
min_invite_role:
disabled: Никого
- title: Разрешает приглашения от
+ title: Разрешать приглашения от
open:
desc_html: Позволяет любому создавать аккаунт
title: Открыть регистрацию
diff --git a/config/locales/simple_form.ru.yml b/config/locales/simple_form.ru.yml
index 4db6fd45c..5cb0a0064 100644
--- a/config/locales/simple_form.ru.yml
+++ b/config/locales/simple_form.ru.yml
@@ -52,7 +52,7 @@ ru:
data: Данные
display_name: Показываемое имя
email: Адрес e-mail
- expires_in: Срок действия
+ expires_in: Истекает через
fields: Метаданные профиля
header: Заголовок
inbox_url: URL для входящих от ретрансляторов
From 3d7979c2ca1a8f1d555fb696e58e7d6e492c9acc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marcin=20Miko=C5=82ajczak?=
Date: Sat, 11 Aug 2018 00:52:36 +0200
Subject: [PATCH 074/196] i18n: Update Polish translation (#8155)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* i18n: Update Polish translation
Signed-off-by: Marcin Mikołajczak
* i18n-tasks normalize && yarn manage:translations
---
app/javascript/mastodon/locales/ar.json | 2 ++
app/javascript/mastodon/locales/ast.json | 2 ++
app/javascript/mastodon/locales/bg.json | 2 ++
app/javascript/mastodon/locales/ca.json | 2 ++
app/javascript/mastodon/locales/co.json | 2 ++
app/javascript/mastodon/locales/cs.json | 2 ++
app/javascript/mastodon/locales/da.json | 2 ++
app/javascript/mastodon/locales/de.json | 2 ++
app/javascript/mastodon/locales/defaultMessages.json | 8 ++++++++
app/javascript/mastodon/locales/el.json | 2 ++
app/javascript/mastodon/locales/en.json | 2 ++
app/javascript/mastodon/locales/eo.json | 2 ++
app/javascript/mastodon/locales/es.json | 2 ++
app/javascript/mastodon/locales/eu.json | 2 ++
app/javascript/mastodon/locales/fa.json | 2 ++
app/javascript/mastodon/locales/fi.json | 2 ++
app/javascript/mastodon/locales/fr.json | 2 ++
app/javascript/mastodon/locales/gl.json | 2 ++
app/javascript/mastodon/locales/he.json | 2 ++
app/javascript/mastodon/locales/hr.json | 2 ++
app/javascript/mastodon/locales/hu.json | 2 ++
app/javascript/mastodon/locales/hy.json | 2 ++
app/javascript/mastodon/locales/id.json | 2 ++
app/javascript/mastodon/locales/io.json | 2 ++
app/javascript/mastodon/locales/it.json | 2 ++
app/javascript/mastodon/locales/ja.json | 2 ++
app/javascript/mastodon/locales/ko.json | 2 ++
app/javascript/mastodon/locales/nl.json | 2 ++
app/javascript/mastodon/locales/no.json | 2 ++
app/javascript/mastodon/locales/oc.json | 2 ++
app/javascript/mastodon/locales/pl.json | 2 ++
app/javascript/mastodon/locales/pt-BR.json | 2 ++
app/javascript/mastodon/locales/pt.json | 2 ++
app/javascript/mastodon/locales/ru.json | 2 ++
app/javascript/mastodon/locales/sk.json | 2 ++
app/javascript/mastodon/locales/sl.json | 2 ++
app/javascript/mastodon/locales/sr-Latn.json | 2 ++
app/javascript/mastodon/locales/sr.json | 2 ++
app/javascript/mastodon/locales/sv.json | 2 ++
app/javascript/mastodon/locales/te.json | 2 ++
app/javascript/mastodon/locales/th.json | 2 ++
app/javascript/mastodon/locales/tr.json | 2 ++
app/javascript/mastodon/locales/uk.json | 2 ++
app/javascript/mastodon/locales/zh-CN.json | 2 ++
app/javascript/mastodon/locales/zh-HK.json | 2 ++
app/javascript/mastodon/locales/zh-TW.json | 2 ++
config/locales/pl.yml | 3 +++
47 files changed, 101 insertions(+)
diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json
index 221aa4a41..491ec7d20 100644
--- a/app/javascript/mastodon/locales/ar.json
+++ b/app/javascript/mastodon/locales/ar.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "قد لا تعكس المعلومات أدناه الملف الشخصي الكامل للمستخدم.",
"account.domain_blocked": "النطاق مخفي",
"account.edit_profile": "تعديل الملف الشخصي",
+ "account.endorse": "Feature on profile",
"account.follow": "تابِع",
"account.followers": "المتابعون",
"account.follows": "يتبع",
@@ -26,6 +27,7 @@
"account.show_reblogs": "عرض ترقيات @{name}",
"account.unblock": "إلغاء الحظر عن @{name}",
"account.unblock_domain": "فك حظر {domain}",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "إلغاء المتابعة",
"account.unmute": "إلغاء الكتم عن @{name}",
"account.unmute_notifications": "إلغاء كتم إخطارات @{name}",
diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json
index 16bfd77bb..1327d0ec2 100644
--- a/app/javascript/mastodon/locales/ast.json
+++ b/app/javascript/mastodon/locales/ast.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
"account.domain_blocked": "Domain hidden",
"account.edit_profile": "Edit profile",
+ "account.endorse": "Feature on profile",
"account.follow": "Follow",
"account.followers": "Followers",
"account.follows": "Follows",
@@ -26,6 +27,7 @@
"account.show_reblogs": "Show boosts from @{name}",
"account.unblock": "Unblock @{name}",
"account.unblock_domain": "Unhide {domain}",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "Unfollow",
"account.unmute": "Unmute @{name}",
"account.unmute_notifications": "Unmute notifications from @{name}",
diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json
index b7c08a8fb..fa1ba594d 100644
--- a/app/javascript/mastodon/locales/bg.json
+++ b/app/javascript/mastodon/locales/bg.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
"account.domain_blocked": "Domain hidden",
"account.edit_profile": "Редактирай профила си",
+ "account.endorse": "Feature on profile",
"account.follow": "Последвай",
"account.followers": "Последователи",
"account.follows": "Следвам",
@@ -26,6 +27,7 @@
"account.show_reblogs": "Show boosts from @{name}",
"account.unblock": "Не блокирай",
"account.unblock_domain": "Unhide {domain}",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "Не следвай",
"account.unmute": "Unmute @{name}",
"account.unmute_notifications": "Unmute notifications from @{name}",
diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json
index 3bfcff46e..0ffc7509b 100644
--- a/app/javascript/mastodon/locales/ca.json
+++ b/app/javascript/mastodon/locales/ca.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "La informació següent pot reflectir incompleta el perfil de l'usuari.",
"account.domain_blocked": "Domini ocult",
"account.edit_profile": "Editar el perfil",
+ "account.endorse": "Feature on profile",
"account.follow": "Segueix",
"account.followers": "Seguidors",
"account.follows": "Seguint",
@@ -26,6 +27,7 @@
"account.show_reblogs": "Mostra els impulsos de @{name}",
"account.unblock": "Desbloca @{name}",
"account.unblock_domain": "Mostra {domain}",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "Deixa de seguir",
"account.unmute": "Treure silenci de @{name}",
"account.unmute_notifications": "Activar notificacions de @{name}",
diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json
index 5fec67e66..e8ac0d8e3 100644
--- a/app/javascript/mastodon/locales/co.json
+++ b/app/javascript/mastodon/locales/co.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "Ghjè pussibule chì l’infurmazione quì sottu ùn rifletta micca u prufile sanu di l’utilizatore.",
"account.domain_blocked": "Duminiu piattatu",
"account.edit_profile": "Mudificà u prufile",
+ "account.endorse": "Feature on profile",
"account.follow": "Siguità",
"account.followers": "Abbunati",
"account.follows": "Abbunamenti",
@@ -26,6 +27,7 @@
"account.show_reblogs": "Vede spartere da @{name}",
"account.unblock": "Sbluccà @{name}",
"account.unblock_domain": "Ùn piattà più {domain}",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "Ùn siguità più",
"account.unmute": "Ùn piattà più @{name}",
"account.unmute_notifications": "Ùn piattà più nutificazione da @{name}",
diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json
index d276c4651..8f2402d60 100644
--- a/app/javascript/mastodon/locales/cs.json
+++ b/app/javascript/mastodon/locales/cs.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "Níže uvedené informace nemusejí zcela odrážet profil uživatele.",
"account.domain_blocked": "Doména skryta",
"account.edit_profile": "Upravit profil",
+ "account.endorse": "Feature on profile",
"account.follow": "Sleduj",
"account.followers": "Sledovatelé",
"account.follows": "Sleduje",
@@ -26,6 +27,7 @@
"account.show_reblogs": "Zobrazit boosty od uživatele @{name}",
"account.unblock": "Odblokovat uživatele @{name}",
"account.unblock_domain": "Odkrýt doménu {domain}",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "Přestat sledovat",
"account.unmute": "Přestat ignorovat uživatele @{name}",
"account.unmute_notifications": "Odtišit oznámení od uživatele @{name}",
diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json
index 76e769a51..10f52465d 100644
--- a/app/javascript/mastodon/locales/da.json
+++ b/app/javascript/mastodon/locales/da.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "Nedenstående oplysninger reflekterer ikke nødvendigvis brugerens profil fuldstændigt.",
"account.domain_blocked": "Domænet er blevet skjult",
"account.edit_profile": "Rediger profil",
+ "account.endorse": "Feature on profile",
"account.follow": "Følg",
"account.followers": "Følgere",
"account.follows": "Følger",
@@ -26,6 +27,7 @@
"account.show_reblogs": "Vis fremhævelserne fra @{name}",
"account.unblock": "Fjern blokeringen af @{name}",
"account.unblock_domain": "Skjul ikke længere {domain}",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "Følg ikke længere",
"account.unmute": "Fjern dæmpningen af @{name}",
"account.unmute_notifications": "Fjern dæmpningen af notifikationer fra @{name}",
diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json
index 1bc6e12e1..bdd631a26 100644
--- a/app/javascript/mastodon/locales/de.json
+++ b/app/javascript/mastodon/locales/de.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "Das Profil wird möglicherweise unvollständig wiedergegeben.",
"account.domain_blocked": "Domain versteckt",
"account.edit_profile": "Profil bearbeiten",
+ "account.endorse": "Feature on profile",
"account.follow": "Folgen",
"account.followers": "Folgende",
"account.follows": "Folgt",
@@ -26,6 +27,7 @@
"account.show_reblogs": "Von @{name} geteilte Beiträge anzeigen",
"account.unblock": "@{name} entblocken",
"account.unblock_domain": "{domain} wieder anzeigen",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "Entfolgen",
"account.unmute": "@{name} nicht mehr stummschalten",
"account.unmute_notifications": "Benachrichtigungen von @{name} einschalten",
diff --git a/app/javascript/mastodon/locales/defaultMessages.json b/app/javascript/mastodon/locales/defaultMessages.json
index 85a6cc264..103c9a3f7 100644
--- a/app/javascript/mastodon/locales/defaultMessages.json
+++ b/app/javascript/mastodon/locales/defaultMessages.json
@@ -557,6 +557,14 @@
"defaultMessage": "Muted users",
"id": "navigation_bar.mutes"
},
+ {
+ "defaultMessage": "Feature on profile",
+ "id": "account.endorse"
+ },
+ {
+ "defaultMessage": "Don't feature on profile",
+ "id": "account.unendorse"
+ },
{
"defaultMessage": "Information below may reflect the user's profile incompletely.",
"id": "account.disclaimer_full"
diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json
index c38e05059..a34396ccf 100644
--- a/app/javascript/mastodon/locales/el.json
+++ b/app/javascript/mastodon/locales/el.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "Οι παρακάτω πληροφορίες μπορει να μην αντανακλούν το προφίλ του χρήστη επαρκως.",
"account.domain_blocked": "Κρυμμένος τομέας",
"account.edit_profile": "Επεξεργάσου το προφίλ",
+ "account.endorse": "Feature on profile",
"account.follow": "Ακολούθησε",
"account.followers": "Ακόλουθοι",
"account.follows": "Ακολουθεί",
@@ -26,6 +27,7 @@
"account.show_reblogs": "Δείξε τις προωθήσεις του/της @{name}",
"account.unblock": "Ξεμπλόκαρε τον/την @{name}",
"account.unblock_domain": "Αποκάλυψε το {domain}",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "Διακοπή παρακολούθησης",
"account.unmute": "Διακοπή αποσιώπησης του/της @{name}",
"account.unmute_notifications": "Διακοπή αποσιώπησης ειδοποιήσεων του/της @{name}",
diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json
index e1a504df0..0845e9539 100644
--- a/app/javascript/mastodon/locales/en.json
+++ b/app/javascript/mastodon/locales/en.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
"account.domain_blocked": "Domain hidden",
"account.edit_profile": "Edit profile",
+ "account.endorse": "Feature on profile",
"account.follow": "Follow",
"account.followers": "Followers",
"account.follows": "Follows",
@@ -26,6 +27,7 @@
"account.show_reblogs": "Show boosts from @{name}",
"account.unblock": "Unblock @{name}",
"account.unblock_domain": "Unhide {domain}",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "Unfollow",
"account.unmute": "Unmute @{name}",
"account.unmute_notifications": "Unmute notifications from @{name}",
diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json
index 37a7cd889..862c2b4d0 100644
--- a/app/javascript/mastodon/locales/eo.json
+++ b/app/javascript/mastodon/locales/eo.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "Subaj informoj povas reflekti la profilon de la uzanto nekomplete.",
"account.domain_blocked": "Domajno kaŝita",
"account.edit_profile": "Redakti profilon",
+ "account.endorse": "Feature on profile",
"account.follow": "Sekvi",
"account.followers": "Sekvantoj",
"account.follows": "Sekvatoj",
@@ -26,6 +27,7 @@
"account.show_reblogs": "Montri diskonigojn de @{name}",
"account.unblock": "Malbloki @{name}",
"account.unblock_domain": "Malkaŝi {domain}",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "Ne plu sekvi",
"account.unmute": "Malsilentigi @{name}",
"account.unmute_notifications": "Malsilentigi sciigojn de @{name}",
diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json
index 8fcee87cd..2359f4ba3 100644
--- a/app/javascript/mastodon/locales/es.json
+++ b/app/javascript/mastodon/locales/es.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "La siguiente información del usuario puede estar incompleta.",
"account.domain_blocked": "Dominio oculto",
"account.edit_profile": "Editar perfil",
+ "account.endorse": "Feature on profile",
"account.follow": "Seguir",
"account.followers": "Seguidores",
"account.follows": "Sigue",
@@ -26,6 +27,7 @@
"account.show_reblogs": "Mostrar retoots de @{name}",
"account.unblock": "Desbloquear a @{name}",
"account.unblock_domain": "Mostrar a {domain}",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "Dejar de seguir",
"account.unmute": "Dejar de silenciar a @{name}",
"account.unmute_notifications": "Dejar de silenciar las notificaciones de @{name}",
diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json
index 55709acfc..2d7589296 100644
--- a/app/javascript/mastodon/locales/eu.json
+++ b/app/javascript/mastodon/locales/eu.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "Baliteke beheko informazioak erabiltzailearen profilaren zati bat baino ez erakustea.",
"account.domain_blocked": "Ezkutatutako domeinua",
"account.edit_profile": "Profila aldatu",
+ "account.endorse": "Feature on profile",
"account.follow": "Jarraitu",
"account.followers": "Jarraitzaileak",
"account.follows": "Jarraitzen",
@@ -26,6 +27,7 @@
"account.show_reblogs": "Erakutsi @{name}(r)en bultzadak",
"account.unblock": "Desblokeatu @{name}",
"account.unblock_domain": "Berriz erakutsi {domain}",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "Jarraitzeari utzi",
"account.unmute": "Desmututu @{name}",
"account.unmute_notifications": "Desmututu @{name}(r)en jakinarazpenak",
diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json
index ea2fd3401..f95c9dc78 100644
--- a/app/javascript/mastodon/locales/fa.json
+++ b/app/javascript/mastodon/locales/fa.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "اطلاعات زیر ممکن است نمایهٔ این کاربر را به تمامی نشان ندهد.",
"account.domain_blocked": "دامین پنهانشده",
"account.edit_profile": "ویرایش نمایه",
+ "account.endorse": "Feature on profile",
"account.follow": "پی بگیرید",
"account.followers": "پیگیران",
"account.follows": "پی میگیرد",
@@ -26,6 +27,7 @@
"account.show_reblogs": "نشاندادن بازبوقهای @{name}",
"account.unblock": "رفع انسداد @{name}",
"account.unblock_domain": "رفع پنهانسازی از {domain}",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "پایان پیگیری",
"account.unmute": "باصدا کردن @{name}",
"account.unmute_notifications": "باصداکردن اعلانها از طرف @{name}",
diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json
index 888f7a267..c092764fc 100644
--- a/app/javascript/mastodon/locales/fi.json
+++ b/app/javascript/mastodon/locales/fi.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "Alla olevat käyttäjän profiilitiedot saattavat olla epätäydellisiä.",
"account.domain_blocked": "Verkko-osoite piilotettu",
"account.edit_profile": "Muokkaa",
+ "account.endorse": "Feature on profile",
"account.follow": "Seuraa",
"account.followers": "Seuraajia",
"account.follows": "Seuraa",
@@ -26,6 +27,7 @@
"account.show_reblogs": "Näytä buustaukset käyttäjältä @{name}",
"account.unblock": "Salli @{name}",
"account.unblock_domain": "Näytä {domain}",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "Lakkaa seuraamasta",
"account.unmute": "Poista käyttäjän @{name} mykistys",
"account.unmute_notifications": "Poista mykistys käyttäjän @{name} ilmoituksilta",
diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json
index 8a525e576..725a62c4e 100644
--- a/app/javascript/mastodon/locales/fr.json
+++ b/app/javascript/mastodon/locales/fr.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "Les données ci-dessous peuvent ne pas refléter ce profil dans sa totalité.",
"account.domain_blocked": "Domaine caché",
"account.edit_profile": "Modifier le profil",
+ "account.endorse": "Feature on profile",
"account.follow": "Suivre",
"account.followers": "Abonné⋅e⋅s",
"account.follows": "Abonnements",
@@ -26,6 +27,7 @@
"account.show_reblogs": "Afficher les partages de @{name}",
"account.unblock": "Débloquer",
"account.unblock_domain": "Ne plus masquer {domain}",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "Ne plus suivre",
"account.unmute": "Ne plus masquer",
"account.unmute_notifications": "Réactiver les notifications de @{name}",
diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json
index 64cab40c1..6cb399d87 100644
--- a/app/javascript/mastodon/locales/gl.json
+++ b/app/javascript/mastodon/locales/gl.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "A información inferior podería mostrar un perfil incompleto da usuaria.",
"account.domain_blocked": "Dominio agochado",
"account.edit_profile": "Editar perfil",
+ "account.endorse": "Feature on profile",
"account.follow": "Seguir",
"account.followers": "Seguidoras",
"account.follows": "Seguindo",
@@ -26,6 +27,7 @@
"account.show_reblogs": "Mostrar repeticións de @{name}",
"account.unblock": "Desbloquear @{name}",
"account.unblock_domain": "Non ocultar {domain}",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "Non seguir",
"account.unmute": "Non acalar @{name}",
"account.unmute_notifications": "Desbloquear as notificacións de @{name}",
diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json
index 033cf794a..ef86c0dfa 100644
--- a/app/javascript/mastodon/locales/he.json
+++ b/app/javascript/mastodon/locales/he.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "המידע להלן עשוי להיות לא עדכני או לא שלם.",
"account.domain_blocked": "Domain hidden",
"account.edit_profile": "עריכת פרופיל",
+ "account.endorse": "Feature on profile",
"account.follow": "מעקב",
"account.followers": "עוקבים",
"account.follows": "נעקבים",
@@ -26,6 +27,7 @@
"account.show_reblogs": "להראות הדהודים מאת @{name}",
"account.unblock": "הסרת חסימה מעל @{name}",
"account.unblock_domain": "הסר חסימה מקהילת {domain}",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "הפסקת מעקב",
"account.unmute": "הפסקת השתקת @{name}",
"account.unmute_notifications": "להפסיק הסתרת הודעות מעם @{name}",
diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json
index 34ed197d4..2b5adc353 100644
--- a/app/javascript/mastodon/locales/hr.json
+++ b/app/javascript/mastodon/locales/hr.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "Ovaj korisnik je sa druge instance. Ovaj broj bi mogao biti veći.",
"account.domain_blocked": "Domain hidden",
"account.edit_profile": "Uredi profil",
+ "account.endorse": "Feature on profile",
"account.follow": "Slijedi",
"account.followers": "Sljedbenici",
"account.follows": "Slijedi",
@@ -26,6 +27,7 @@
"account.show_reblogs": "Show boosts from @{name}",
"account.unblock": "Deblokiraj @{name}",
"account.unblock_domain": "Poništi sakrivanje {domain}",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "Prestani slijediti",
"account.unmute": "Poništi utišavanje @{name}",
"account.unmute_notifications": "Unmute notifications from @{name}",
diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json
index e2aa52c36..791be67e3 100644
--- a/app/javascript/mastodon/locales/hu.json
+++ b/app/javascript/mastodon/locales/hu.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "Az alul található információk hiányosan mutathatják be a felhasználót.",
"account.domain_blocked": "Domain hidden",
"account.edit_profile": "Profil szerkesztése",
+ "account.endorse": "Feature on profile",
"account.follow": "Követés",
"account.followers": "Követők",
"account.follows": "Követve",
@@ -26,6 +27,7 @@
"account.show_reblogs": "@{name} kedvenceinek mutatása",
"account.unblock": "@{name} kiblokkolása",
"account.unblock_domain": "{domain} mutatása",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "Követés abbahagyása",
"account.unmute": "@{name} kinémítása",
"account.unmute_notifications": "@{name} értesítéseinek kinémítása",
diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json
index 207dd7eea..1d90c20de 100644
--- a/app/javascript/mastodon/locales/hy.json
+++ b/app/javascript/mastodon/locales/hy.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "Ներքոհիշյալը կարող է ոչ ամբողջությամբ արտացոլել օգտատիրոջ էջի տվյալները։",
"account.domain_blocked": "Domain hidden",
"account.edit_profile": "Խմբագրել անձնական էջը",
+ "account.endorse": "Feature on profile",
"account.follow": "Հետեւել",
"account.followers": "Հետեւվողներ",
"account.follows": "Հետեւում է",
@@ -26,6 +27,7 @@
"account.show_reblogs": "Ցուցադրել @{name}֊ի տարածածները",
"account.unblock": "Ապաարգելափակել @{name}֊ին",
"account.unblock_domain": "Ցուցադրել {domain} թաքցված տիրույթի գրառումները",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "Չհետեւել",
"account.unmute": "Ապալռեցնել @{name}֊ին",
"account.unmute_notifications": "Միացնել ծանուցումները @{name}֊ից",
diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json
index 260a5f8ca..6b182bbe9 100644
--- a/app/javascript/mastodon/locales/id.json
+++ b/app/javascript/mastodon/locales/id.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "Informasi di bawah mungkin tidak mencerminkan profil user secara lengkap.",
"account.domain_blocked": "Domain disembunyikan",
"account.edit_profile": "Ubah profil",
+ "account.endorse": "Feature on profile",
"account.follow": "Ikuti",
"account.followers": "Pengikut",
"account.follows": "Mengikuti",
@@ -26,6 +27,7 @@
"account.show_reblogs": "Tampilkan boost dari @{name}",
"account.unblock": "Hapus blokir @{name}",
"account.unblock_domain": "Tampilkan {domain}",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "Berhenti mengikuti",
"account.unmute": "Berhenti membisukan @{name}",
"account.unmute_notifications": "Munculkan notifikasi dari @{name}",
diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json
index 87ebe31d8..75924d9e1 100644
--- a/app/javascript/mastodon/locales/io.json
+++ b/app/javascript/mastodon/locales/io.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
"account.domain_blocked": "Domain hidden",
"account.edit_profile": "Modifikar profilo",
+ "account.endorse": "Feature on profile",
"account.follow": "Sequar",
"account.followers": "Sequanti",
"account.follows": "Sequas",
@@ -26,6 +27,7 @@
"account.show_reblogs": "Show boosts from @{name}",
"account.unblock": "Desblokusar @{name}",
"account.unblock_domain": "Unhide {domain}",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "Ne plus sequar",
"account.unmute": "Ne plus celar @{name}",
"account.unmute_notifications": "Unmute notifications from @{name}",
diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json
index 5ee6f7d14..a0e1a1d2d 100644
--- a/app/javascript/mastodon/locales/it.json
+++ b/app/javascript/mastodon/locales/it.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "Il profilo dell'utente mostrato qui sotto potrebbe essere incompleto.",
"account.domain_blocked": "Dominio nascosto",
"account.edit_profile": "Modifica profilo",
+ "account.endorse": "Feature on profile",
"account.follow": "Segui",
"account.followers": "Seguaci",
"account.follows": "Segue",
@@ -26,6 +27,7 @@
"account.show_reblogs": "Mostra condivisioni da @{name}",
"account.unblock": "Sblocca @{name}",
"account.unblock_domain": "Non nascondere {domain}",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "Non seguire",
"account.unmute": "Non silenziare @{name}",
"account.unmute_notifications": "Non silenziare più le notifiche da @{name}",
diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json
index 3cec058bc..1e077f661 100644
--- a/app/javascript/mastodon/locales/ja.json
+++ b/app/javascript/mastodon/locales/ja.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "以下の情報は不正確な可能性があります。",
"account.domain_blocked": "ドメイン非表示中",
"account.edit_profile": "プロフィールを編集",
+ "account.endorse": "Feature on profile",
"account.follow": "フォロー",
"account.followers": "フォロワー",
"account.follows": "フォロー",
@@ -26,6 +27,7 @@
"account.show_reblogs": "@{name}さんからのブーストを表示",
"account.unblock": "@{name}さんのブロックを解除",
"account.unblock_domain": "{domain}を表示",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "フォロー解除",
"account.unmute": "@{name}さんのミュートを解除",
"account.unmute_notifications": "@{name}さんからの通知を受け取るようにする",
diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json
index 9e630520d..d309e7d4c 100644
--- a/app/javascript/mastodon/locales/ko.json
+++ b/app/javascript/mastodon/locales/ko.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "여기 있는 정보는 유저의 프로파일을 정확히 반영하지 못 할 수도 있습니다.",
"account.domain_blocked": "도메인 숨겨짐",
"account.edit_profile": "프로필 편집",
+ "account.endorse": "Feature on profile",
"account.follow": "팔로우",
"account.followers": "팔로워",
"account.follows": "팔로우",
@@ -26,6 +27,7 @@
"account.show_reblogs": "@{name}의 부스트 보기",
"account.unblock": "차단 해제",
"account.unblock_domain": "{domain} 숨김 해제",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "팔로우 해제",
"account.unmute": "뮤트 해제",
"account.unmute_notifications": "@{name}의 알림 뮤트 해제",
diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json
index 9ef0d9ed4..5c6d18e1d 100644
--- a/app/javascript/mastodon/locales/nl.json
+++ b/app/javascript/mastodon/locales/nl.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "De informatie hieronder kan mogelijk een incompleet beeld geven van dit gebruikersprofiel.",
"account.domain_blocked": "Domein verborgen",
"account.edit_profile": "Profiel bewerken",
+ "account.endorse": "Feature on profile",
"account.follow": "Volgen",
"account.followers": "Volgers",
"account.follows": "Volgt",
@@ -26,6 +27,7 @@
"account.show_reblogs": "Toon boosts van @{name}",
"account.unblock": "Deblokkeer @{name}",
"account.unblock_domain": "{domain} niet langer negeren",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "Ontvolgen",
"account.unmute": "@{name} niet langer negeren",
"account.unmute_notifications": "@{name} meldingen niet langer negeren",
diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json
index 983a0b8f2..d11e3a5a4 100644
--- a/app/javascript/mastodon/locales/no.json
+++ b/app/javascript/mastodon/locales/no.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "Informasjonen nedenfor kan gi et ufullstendig bilde av brukerens profil.",
"account.domain_blocked": "Domain hidden",
"account.edit_profile": "Rediger profil",
+ "account.endorse": "Feature on profile",
"account.follow": "Følg",
"account.followers": "Følgere",
"account.follows": "Følger",
@@ -26,6 +27,7 @@
"account.show_reblogs": "Vis boosts fra @{name}",
"account.unblock": "Avblokker @{name}",
"account.unblock_domain": "Vis {domain}",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "Avfølg",
"account.unmute": "Avdemp @{name}",
"account.unmute_notifications": "Vis varsler fra @{name}",
diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json
index a7e51720f..1d81594ca 100644
--- a/app/javascript/mastodon/locales/oc.json
+++ b/app/javascript/mastodon/locales/oc.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "Aquelas informacions de perfil pòdon èsser incomplètas.",
"account.domain_blocked": "Domeni amagat",
"account.edit_profile": "Modificar lo perfil",
+ "account.endorse": "Feature on profile",
"account.follow": "Sègre",
"account.followers": "Seguidors",
"account.follows": "Abonaments",
@@ -26,6 +27,7 @@
"account.show_reblogs": "Mostrar los partatges de @{name}",
"account.unblock": "Desblocar @{name}",
"account.unblock_domain": "Desblocar {domain}",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "Quitar de sègre",
"account.unmute": "Quitar de rescondre @{name}",
"account.unmute_notifications": "Mostrar las notificacions de @{name}",
diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json
index aedc8539a..5b22b5f69 100644
--- a/app/javascript/mastodon/locales/pl.json
+++ b/app/javascript/mastodon/locales/pl.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "Poniższe informacje mogą nie odwzorowywać bezbłędnie profilu użytkownika.",
"account.domain_blocked": "Ukryto domenę",
"account.edit_profile": "Edytuj profil",
+ "account.endorse": "Polecaj na profilu",
"account.follow": "Śledź",
"account.followers": "Śledzący",
"account.follows": "Śledzeni",
@@ -26,6 +27,7 @@
"account.show_reblogs": "Pokazuj podbicia od @{name}",
"account.unblock": "Odblokuj @{name}",
"account.unblock_domain": "Odblokuj domenę {domain}",
+ "account.unendorse": "Przestań polecać",
"account.unfollow": "Przestań śledzić",
"account.unmute": "Cofnij wyciszenie @{name}",
"account.unmute_notifications": "Cofnij wyciszenie powiadomień od @{name}",
diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json
index 69db735dd..5f5bbe692 100644
--- a/app/javascript/mastodon/locales/pt-BR.json
+++ b/app/javascript/mastodon/locales/pt-BR.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "As informações abaixo podem refletir o perfil do usuário de maneira incompleta.",
"account.domain_blocked": "Domínio escondido",
"account.edit_profile": "Editar perfil",
+ "account.endorse": "Feature on profile",
"account.follow": "Seguir",
"account.followers": "Seguidores",
"account.follows": "Segue",
@@ -26,6 +27,7 @@
"account.show_reblogs": "Mostra compartilhamentos de @{name}",
"account.unblock": "Desbloquear @{name}",
"account.unblock_domain": "Desbloquear {domain}",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "Deixar de seguir",
"account.unmute": "Não silenciar @{name}",
"account.unmute_notifications": "Retirar silêncio das notificações vindas de @{name}",
diff --git a/app/javascript/mastodon/locales/pt.json b/app/javascript/mastodon/locales/pt.json
index 802f22b45..94e68db43 100644
--- a/app/javascript/mastodon/locales/pt.json
+++ b/app/javascript/mastodon/locales/pt.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "As informações abaixo podem refletir o perfil do usuário de forma incompleta.",
"account.domain_blocked": "Domain hidden",
"account.edit_profile": "Editar perfil",
+ "account.endorse": "Feature on profile",
"account.follow": "Seguir",
"account.followers": "Seguidores",
"account.follows": "Segue",
@@ -26,6 +27,7 @@
"account.show_reblogs": "Mostrar partilhas de @{name}",
"account.unblock": "Não bloquear @{name}",
"account.unblock_domain": "Mostrar {domain}",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "Deixar de seguir",
"account.unmute": "Não silenciar @{name}",
"account.unmute_notifications": "Deixar de silenciar @{name}",
diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json
index 6774bdc03..0f2a26e76 100644
--- a/app/javascript/mastodon/locales/ru.json
+++ b/app/javascript/mastodon/locales/ru.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "Нижеуказанная информация может не полностью отражать профиль пользователя.",
"account.domain_blocked": "Домен скрыт",
"account.edit_profile": "Изменить профиль",
+ "account.endorse": "Feature on profile",
"account.follow": "Подписаться",
"account.followers": "Подписаны",
"account.follows": "Подписки",
@@ -26,6 +27,7 @@
"account.show_reblogs": "Показывать продвижения от @{name}",
"account.unblock": "Разблокировать",
"account.unblock_domain": "Разблокировать {domain}",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "Отписаться",
"account.unmute": "Снять глушение",
"account.unmute_notifications": "Показывать уведомления от @{name}",
diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json
index 54671b243..7554485a3 100644
--- a/app/javascript/mastodon/locales/sk.json
+++ b/app/javascript/mastodon/locales/sk.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "Inofrmácie uvedené nižšie nemusia byť úplným odrazom uživateľovho účtu.",
"account.domain_blocked": "Doména ukrytá",
"account.edit_profile": "Upraviť profil",
+ "account.endorse": "Feature on profile",
"account.follow": "Následuj",
"account.followers": "Sledujúci",
"account.follows": "Následuje",
@@ -26,6 +27,7 @@
"account.show_reblogs": "Ukáž povýšenia od @{name}",
"account.unblock": "Odblokovať @{name}",
"account.unblock_domain": "Prestať blokovať {domain}",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "Prestať nasledovať",
"account.unmute": "Prestať ignorovať @{name}",
"account.unmute_notifications": "Odtĺmiť notifikácie od @{name}",
diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json
index 2793f3cf1..8f637143c 100644
--- a/app/javascript/mastodon/locales/sl.json
+++ b/app/javascript/mastodon/locales/sl.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "Spodnje informacije lahko nepopolno prikazujejo profil uporabnika.",
"account.domain_blocked": "Skrita domena",
"account.edit_profile": "Uredi profil",
+ "account.endorse": "Feature on profile",
"account.follow": "Sledi",
"account.followers": "Sledilci",
"account.follows": "Sledi",
@@ -26,6 +27,7 @@
"account.show_reblogs": "Pokaži delitve osebe @{name}",
"account.unblock": "Odblokiraj @{name}",
"account.unblock_domain": "Razkrij {domain}",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "Prenehaj slediti",
"account.unmute": "Odtišaj @{name}",
"account.unmute_notifications": "Vklopi obvestila od @{name}",
diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json
index 9baeb4c77..473b18fa3 100644
--- a/app/javascript/mastodon/locales/sr-Latn.json
+++ b/app/javascript/mastodon/locales/sr-Latn.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "Navedene informacije možda ne odslikavaju korisnički profil u potpunosti.",
"account.domain_blocked": "Domain hidden",
"account.edit_profile": "Izmeni profil",
+ "account.endorse": "Feature on profile",
"account.follow": "Zaprati",
"account.followers": "Pratioca",
"account.follows": "Prati",
@@ -26,6 +27,7 @@
"account.show_reblogs": "Prikaži podrške od korisnika @{name}",
"account.unblock": "Odblokiraj korisnika @{name}",
"account.unblock_domain": "Odblokiraj domen {domain}",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "Otprati",
"account.unmute": "Ukloni ućutkavanje korisniku @{name}",
"account.unmute_notifications": "Uključi nazad obaveštenja od korisnika @{name}",
diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json
index fc146686a..4ee47fb2d 100644
--- a/app/javascript/mastodon/locales/sr.json
+++ b/app/javascript/mastodon/locales/sr.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "Наведене информације можда не одсликавају кориснички профил у потпуности.",
"account.domain_blocked": "Domain hidden",
"account.edit_profile": "Измени профил",
+ "account.endorse": "Feature on profile",
"account.follow": "Запрати",
"account.followers": "Пратиоца",
"account.follows": "Прати",
@@ -26,6 +27,7 @@
"account.show_reblogs": "Прикажи подршке од корисника @{name}",
"account.unblock": "Одблокирај корисника @{name}",
"account.unblock_domain": "Одблокирај домен {domain}",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "Отпрати",
"account.unmute": "Уклони ућуткавање кориснику @{name}",
"account.unmute_notifications": "Укључи назад обавештења од корисника @{name}",
diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json
index 2fd87cb3a..0d55fbd82 100644
--- a/app/javascript/mastodon/locales/sv.json
+++ b/app/javascript/mastodon/locales/sv.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "Informationen nedan kan spegla användarens profil ofullständigt.",
"account.domain_blocked": "Domän gömd",
"account.edit_profile": "Redigera profil",
+ "account.endorse": "Feature on profile",
"account.follow": "Följ",
"account.followers": "Följare",
"account.follows": "Följer",
@@ -26,6 +27,7 @@
"account.show_reblogs": "Visa knuffar från @{name}",
"account.unblock": "Avblockera @{name}",
"account.unblock_domain": "Ta fram {domain}",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "Sluta följa",
"account.unmute": "Ta bort tystad @{name}",
"account.unmute_notifications": "Återaktivera notifikationer från @{name}",
diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json
index 635647355..1ed91d344 100644
--- a/app/javascript/mastodon/locales/te.json
+++ b/app/javascript/mastodon/locales/te.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "క్రింది సమాచారం వాడుకరి యొక్క ప్రొఫైల్ను అసంపూర్తిగా ప్రతిబింబించవచ్చు.",
"account.domain_blocked": "డొమైన్ దాచిపెట్టబడినది",
"account.edit_profile": "ప్రొఫైల్ని సవరించండి",
+ "account.endorse": "Feature on profile",
"account.follow": "అనుసరించు",
"account.followers": "అనుచరులు",
"account.follows": "అనుసరిస్తున్నవి",
@@ -26,6 +27,7 @@
"account.show_reblogs": "@{name}నుంచి బూస్ట్ లను చూపించు",
"account.unblock": "@{name}పై బ్లాక్ ను తొలగించు",
"account.unblock_domain": "{domain}ను దాచవద్దు",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "అనుసరించవద్దు",
"account.unmute": "@{name}పై మ్యూట్ ని తొలగించు",
"account.unmute_notifications": "@{name} నుంచి ప్రకటనలపై మ్యూట్ ని తొలగించు",
diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json
index 09b48f5cd..ce48e7259 100644
--- a/app/javascript/mastodon/locales/th.json
+++ b/app/javascript/mastodon/locales/th.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
"account.domain_blocked": "Domain hidden",
"account.edit_profile": "Edit profile",
+ "account.endorse": "Feature on profile",
"account.follow": "Follow",
"account.followers": "Followers",
"account.follows": "Follows",
@@ -26,6 +27,7 @@
"account.show_reblogs": "Show boosts from @{name}",
"account.unblock": "Unblock @{name}",
"account.unblock_domain": "Unhide {domain}",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "Unfollow",
"account.unmute": "Unmute @{name}",
"account.unmute_notifications": "Unmute notifications from @{name}",
diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json
index c96eee746..032a82a22 100644
--- a/app/javascript/mastodon/locales/tr.json
+++ b/app/javascript/mastodon/locales/tr.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
"account.domain_blocked": "Domain hidden",
"account.edit_profile": "Profili düzenle",
+ "account.endorse": "Feature on profile",
"account.follow": "Takip et",
"account.followers": "Takipçiler",
"account.follows": "Takip ettikleri",
@@ -26,6 +27,7 @@
"account.show_reblogs": "Show boosts from @{name}",
"account.unblock": "Engeli kaldır @{name}",
"account.unblock_domain": "Unhide {domain}",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "Takipten vazgeç",
"account.unmute": "Sesi aç @{name}",
"account.unmute_notifications": "Unmute notifications from @{name}",
diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json
index 5b7b09a27..624108a77 100644
--- a/app/javascript/mastodon/locales/uk.json
+++ b/app/javascript/mastodon/locales/uk.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
"account.domain_blocked": "Domain hidden",
"account.edit_profile": "Налаштування профілю",
+ "account.endorse": "Feature on profile",
"account.follow": "Підписатися",
"account.followers": "Підписники",
"account.follows": "Підписки",
@@ -26,6 +27,7 @@
"account.show_reblogs": "Show boosts from @{name}",
"account.unblock": "Розблокувати",
"account.unblock_domain": "Розблокувати {domain}",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "Відписатися",
"account.unmute": "Зняти глушення",
"account.unmute_notifications": "Unmute notifications from @{name}",
diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json
index cc5f911c7..dd4ec4adc 100644
--- a/app/javascript/mastodon/locales/zh-CN.json
+++ b/app/javascript/mastodon/locales/zh-CN.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "此处显示的信息可能不是全部内容。",
"account.domain_blocked": "网站已屏蔽",
"account.edit_profile": "修改个人资料",
+ "account.endorse": "Feature on profile",
"account.follow": "关注",
"account.followers": "关注者",
"account.follows": "正在关注",
@@ -26,6 +27,7 @@
"account.show_reblogs": "显示来自 @{name} 的转嘟",
"account.unblock": "不再屏蔽 @{name}",
"account.unblock_domain": "不再隐藏来自 {domain} 的内容",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "取消关注",
"account.unmute": "不再隐藏 @{name}",
"account.unmute_notifications": "不再隐藏来自 @{name} 的通知",
diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json
index 012790cc7..70442cfe8 100644
--- a/app/javascript/mastodon/locales/zh-HK.json
+++ b/app/javascript/mastodon/locales/zh-HK.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "下列資料不一定完整。",
"account.domain_blocked": "服務站被隱藏",
"account.edit_profile": "修改個人資料",
+ "account.endorse": "Feature on profile",
"account.follow": "關注",
"account.followers": "關注的人",
"account.follows": "正關注",
@@ -26,6 +27,7 @@
"account.show_reblogs": "顯示 @{name} 的推文",
"account.unblock": "解除對 @{name} 的封鎖",
"account.unblock_domain": "不再隱藏 {domain}",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "取消關注",
"account.unmute": "取消 @{name} 的靜音",
"account.unmute_notifications": "取消來自 @{name} 通知的靜音",
diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json
index 2de00690b..841f79dd3 100644
--- a/app/javascript/mastodon/locales/zh-TW.json
+++ b/app/javascript/mastodon/locales/zh-TW.json
@@ -7,6 +7,7 @@
"account.disclaimer_full": "下列資料不一定完整。",
"account.domain_blocked": "站點被隱藏",
"account.edit_profile": "編輯使用者資訊",
+ "account.endorse": "Feature on profile",
"account.follow": "關注",
"account.followers": "關注者",
"account.follows": "正在關注",
@@ -26,6 +27,7 @@
"account.show_reblogs": "顯示來自 @{name} 的嘟文",
"account.unblock": "取消封鎖 @{name}",
"account.unblock_domain": "不再隱藏 {domain}",
+ "account.unendorse": "Don't feature on profile",
"account.unfollow": "取消關注",
"account.unmute": "不再靜音 @{name}",
"account.unmute_notifications": "不再對來自 @{name} 的通知靜音",
diff --git a/config/locales/pl.yml b/config/locales/pl.yml
index fb5c51c5e..09e9e87f7 100644
--- a/config/locales/pl.yml
+++ b/config/locales/pl.yml
@@ -36,6 +36,7 @@ pl:
user_count_before: Z serwera korzysta
what_is_mastodon: Czym jest Mastodon?
accounts:
+ choices_html: 'Polecani przez %{name}:'
follow: Śledź
followers: Śledzący
following: Śledzeni
@@ -46,6 +47,8 @@ pl:
nothing_here: Niczego tu nie ma!
people_followed_by: Konta śledzone przez %{name}
people_who_follow: Osoby, które śledzą konto %{name}
+ pin_errors:
+ following: Musisz śledzić osobę, którą chcesz polecać
posts: Wpisy
posts_with_replies: Wpisy z odpowiedziami
reserved_username: Ta nazwa użytkownika jest zarezerwowana
From e8b7f3f3e2d55e467f510f490eae08ea2c0e2682 Mon Sep 17 00:00:00 2001
From: Yamagishi Kazutoshi
Date: Sat, 11 Aug 2018 14:51:30 +0900
Subject: [PATCH 075/196] Weblate translations (2018-08-11) (#8167)
* Translated using Weblate (Japanese)
Currently translated at 100.0% (307 of 307 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/ja/
* Translated using Weblate (Japanese)
Currently translated at 98.5% (657 of 667 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Japanese)
Currently translated at 98.5% (657 of 667 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Japanese)
Currently translated at 99.8% (666 of 667 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Czech)
Currently translated at 100.0% (307 of 307 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/cs/
* Translated using Weblate (Czech)
Currently translated at 98.5% (657 of 667 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/cs/
* Translated using Weblate (Czech)
Currently translated at 100.0% (307 of 307 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/cs/
* Translated using Weblate (Czech)
Currently translated at 99.8% (666 of 667 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/cs/
* Translated using Weblate (Czech)
Currently translated at 100.0% (2 of 2 strings)
Translation: Mastodon/Activerecord
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/activerecord/cs/
* Translated using Weblate (Czech)
Currently translated at 61.2% (38 of 62 strings)
Translation: Mastodon/Devise
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/devise/cs/
* Translated using Weblate (Ukrainian)
Currently translated at 51.2% (42 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/uk/
* Translated using Weblate (Czech)
Currently translated at 100.0% (62 of 62 strings)
Translation: Mastodon/Devise
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/devise/cs/
* Translated using Weblate (Galician)
Currently translated at 99.8% (666 of 667 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/gl/
* Translated using Weblate (Portuguese (Brazil))
Currently translated at 99.8% (666 of 667 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/pt_BR/
* Translated using Weblate (Dutch)
Currently translated at 100.0% (667 of 667 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/nl/
* Translated using Weblate (Ukrainian)
Currently translated at 99.6% (306 of 307 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/uk/
* Translated using Weblate (Czech)
Currently translated at 67.0% (55 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/cs/
* Translated using Weblate (Ukrainian)
Currently translated at 97.0% (647 of 667 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/uk/
* Translated using Weblate (Ukrainian)
Currently translated at 97.1% (648 of 667 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/uk/
* Translated using Weblate (Czech)
Currently translated at 100.0% (82 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/cs/
* Translated using Weblate (Czech)
Currently translated at 18.3% (18 of 98 strings)
Translation: Mastodon/Doorkeeper
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/cs/
* Translated using Weblate (Danish)
Currently translated at 79.3% (529 of 667 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/da/
* Translated using Weblate (Czech)
Currently translated at 61.2% (60 of 98 strings)
Translation: Mastodon/Doorkeeper
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/cs/
* Translated using Weblate (Czech)
Currently translated at 100.0% (98 of 98 strings)
Translation: Mastodon/Doorkeeper
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/cs/
* Translated using Weblate (Occitan)
Currently translated at 99.7% (667 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/oc/
* Translated using Weblate (German)
Currently translated at 96.5% (646 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/de/
* Translated using Weblate (Japanese)
Currently translated at 99.7% (667 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Portuguese (Brazil))
Currently translated at 99.8% (668 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/pt_BR/
* Translated using Weblate (Czech)
Currently translated at 99.8% (668 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/cs/
* Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (307 of 307 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/pt_BR/
* Translated using Weblate (Corsican)
Currently translated at 99.3% (305 of 307 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/co/
* Translated using Weblate (Corsican)
Currently translated at 92.2% (617 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/co/
* Translated using Weblate (Telugu)
Currently translated at 100.0% (307 of 307 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/te/
* Translated using Weblate (Arabic)
Currently translated at 91.4% (75 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/ar/
* Translated using Weblate (Arabic)
Currently translated at 100.0% (307 of 307 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/ar/
* Translated using Weblate (Arabic)
Currently translated at 92.9% (622 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ar/
* Translated using Weblate (Danish)
Currently translated at 92.8% (91 of 98 strings)
Translation: Mastodon/Doorkeeper
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/da/
* Translated using Weblate (Greek)
Currently translated at 99.8% (668 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/el/
* Translated using Weblate (Danish)
Currently translated at 82.0% (549 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/da/
* Translated using Weblate (Portuguese (Brazil))
Currently translated at 99.8% (668 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/pt_BR/
* Translated using Weblate (Korean)
Currently translated at 98.2% (657 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ko/
* Translated using Weblate (Korean)
Currently translated at 100.0% (307 of 307 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/ko/
* Translated using Weblate (German)
Currently translated at 97.7% (654 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/de/
* Translated using Weblate (Corsican)
Currently translated at 98.5% (659 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/co/
* Translated using Weblate (Corsican)
Currently translated at 100.0% (82 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/co/
* Translated using Weblate (Corsican)
Currently translated at 100.0% (307 of 307 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/co/
* Translated using Weblate (Corsican)
Currently translated at 100.0% (98 of 98 strings)
Translation: Mastodon/Doorkeeper
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/co/
* Translated using Weblate (French)
Currently translated at 100.0% (307 of 307 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/fr/
* Translated using Weblate (Basque)
Currently translated at 96.2% (644 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/eu/
* Translated using Weblate (Basque)
Currently translated at 100.0% (98 of 98 strings)
Translation: Mastodon/Doorkeeper
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/eu/
* Translated using Weblate (Basque)
Currently translated at 90.2% (74 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/eu/
* Translated using Weblate (Basque)
Currently translated at 100.0% (307 of 307 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/eu/
* Translated using Weblate (Czech)
Currently translated at 99.8% (668 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/cs/
* Translated using Weblate (Czech)
Currently translated at 100.0% (2 of 2 strings)
Translation: Mastodon/Activerecord
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/activerecord/cs/
* Translated using Weblate (Czech)
Currently translated at 100.0% (82 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/cs/
* Translated using Weblate (Czech)
Currently translated at 100.0% (307 of 307 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/cs/
* Translated using Weblate (Asturian)
Currently translated at 29.8% (200 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ast/
* Translated using Weblate (Greek)
Currently translated at 99.8% (668 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/el/
* Translated using Weblate (Greek)
Currently translated at 100.0% (307 of 307 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/el/
* Translated using Weblate (Czech)
Currently translated at 100.0% (98 of 98 strings)
Translation: Mastodon/Doorkeeper
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/cs/
* Translated using Weblate (German)
Currently translated at 100.0% (98 of 98 strings)
Translation: Mastodon/Doorkeeper
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/de/
* Translated using Weblate (Greek)
Currently translated at 100.0% (82 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/el/
* Translated using Weblate (German)
Currently translated at 96.3% (79 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/de/
* Translated using Weblate (German)
Currently translated at 99.7% (667 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/de/
* Translated using Weblate (German)
Currently translated at 100.0% (307 of 307 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/de/
* Translated using Weblate (German)
Currently translated at 100.0% (98 of 98 strings)
Translation: Mastodon/Doorkeeper
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/de/
* Translated using Weblate (French)
Currently translated at 100.0% (98 of 98 strings)
Translation: Mastodon/Doorkeeper
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/fr/
* Translated using Weblate (German)
Currently translated at 97.5% (80 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/de/
* Translated using Weblate (French)
Currently translated at 100.0% (82 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/fr/
* Translated using Weblate (French)
Currently translated at 100.0% (307 of 307 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/fr/
* Translated using Weblate (German)
Currently translated at 98.7% (81 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/de/
* Translated using Weblate (German)
Currently translated at 99.8% (668 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/de/
* Translated using Weblate (German)
Currently translated at 98.7% (81 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/de/
* Translated using Weblate (German)
Currently translated at 98.7% (82 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/de/
* i18n-tasks normalize && i18n-tasks remove-unused
* yarn manage:translations
* re-add simple_form.uk.yml
* remove ar.simple_form.hints.defaults.*.one
---
app/javascript/mastodon/locales/ar.json | 4 +-
app/javascript/mastodon/locales/co.json | 38 +--
app/javascript/mastodon/locales/cs.json | 30 +-
app/javascript/mastodon/locales/de.json | 10 +-
app/javascript/mastodon/locales/el.json | 6 +-
app/javascript/mastodon/locales/eu.json | 8 +-
app/javascript/mastodon/locales/fr.json | 6 +-
app/javascript/mastodon/locales/ja.json | 2 +-
app/javascript/mastodon/locales/ko.json | 2 +-
app/javascript/mastodon/locales/pt-BR.json | 2 +-
app/javascript/mastodon/locales/te.json | 2 +-
app/javascript/mastodon/locales/uk.json | 304 ++++++++++-----------
config/locales/activerecord.cs.yml | 2 +-
config/locales/ar.yml | 2 +-
config/locales/ast.yml | 88 ++++++
config/locales/co.yml | 61 ++++-
config/locales/cs.yml | 47 ++--
config/locales/da.yml | 48 +++-
config/locales/de.yml | 117 +++++++-
config/locales/devise.cs.yml | 42 ++-
config/locales/doorkeeper.co.yml | 30 +-
config/locales/doorkeeper.cs.yml | 131 ++++++++-
config/locales/doorkeeper.da.yml | 1 +
config/locales/doorkeeper.de.yml | 8 +-
config/locales/doorkeeper.eu.yml | 30 +-
config/locales/doorkeeper.fr.yml | 3 +
config/locales/el.yml | 31 ++-
config/locales/eu.yml | 29 ++
config/locales/gl.yml | 10 +
config/locales/ja.yml | 17 +-
config/locales/ko.yml | 2 +-
config/locales/nl.yml | 10 +
config/locales/oc.yml | 14 +-
config/locales/pt-BR.yml | 21 +-
config/locales/simple_form.ar.yml | 7 +-
config/locales/simple_form.co.yml | 21 +-
config/locales/simple_form.cs.yml | 93 ++++++-
config/locales/simple_form.de.yml | 4 +
config/locales/simple_form.el.yml | 2 +-
config/locales/simple_form.eu.yml | 3 +
config/locales/simple_form.fr.yml | 4 +
config/locales/uk.yml | 55 +++-
42 files changed, 1063 insertions(+), 284 deletions(-)
diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json
index 491ec7d20..b14be3434 100644
--- a/app/javascript/mastodon/locales/ar.json
+++ b/app/javascript/mastodon/locales/ar.json
@@ -139,7 +139,7 @@
"keyboard_shortcuts.hotkey": "مفتاح الإختصار",
"keyboard_shortcuts.legend": "لعرض هذا المفتاح",
"keyboard_shortcuts.mention": "لذِكر الناشر",
- "keyboard_shortcuts.profile": "to open author's profile",
+ "keyboard_shortcuts.profile": "لفتح رابط الناشر",
"keyboard_shortcuts.reply": "للردّ",
"keyboard_shortcuts.search": "للتركيز على البحث",
"keyboard_shortcuts.toggle_hidden": "لعرض أو إخفاء النص مِن وراء التحذير",
@@ -169,7 +169,7 @@
"navigation_bar.domain_blocks": "النطاقات المخفية",
"navigation_bar.edit_profile": "تعديل الملف الشخصي",
"navigation_bar.favourites": "المفضلة",
- "navigation_bar.filters": "Muted words",
+ "navigation_bar.filters": "الكلمات المكتومة",
"navigation_bar.follow_requests": "طلبات المتابعة",
"navigation_bar.info": "معلومات إضافية",
"navigation_bar.keyboard_shortcuts": "إختصارات لوحة المفاتيح",
diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json
index e8ac0d8e3..feb796577 100644
--- a/app/javascript/mastodon/locales/co.json
+++ b/app/javascript/mastodon/locales/co.json
@@ -61,9 +61,9 @@
"column_header.show_settings": "Mustrà i parametri",
"column_header.unpin": "Spuntarulà",
"column_subheading.settings": "Parametri",
- "community.column_settings.media_only": "Media Only",
+ "community.column_settings.media_only": "Solu media",
"compose_form.direct_message_warning": "Solu l'utilizatori mintuvati puderenu vede stu statutu.",
- "compose_form.direct_message_warning_learn_more": "Learn more",
+ "compose_form.direct_message_warning_learn_more": "Amparà di più",
"compose_form.hashtag_warning": "Stu statutu ùn hè \"Micca listatu\" è ùn sarà micca listatu indè e circate da hashtag. Per esse vistu in quesse, u statutu deve esse \"Pubblicu\".",
"compose_form.lock_disclaimer": "U vostru contu ùn hè micca {locked}. Tuttu u mondu pò seguitavi è vede i vostri statuti privati.",
"compose_form.lock_disclaimer.lock": "privatu",
@@ -83,11 +83,11 @@
"confirmations.delete_list.confirm": "Toglie",
"confirmations.delete_list.message": "Site sicuru·a che vulete supprime sta lista?",
"confirmations.domain_block.confirm": "Piattà tuttu u duminiu",
- "confirmations.domain_block.message": "Site sicuru·a che vulete piattà tuttu à {domain}? Saria forse abbastanza di bluccà ò piattà alcuni conti da quallà.",
+ "confirmations.domain_block.message": "Site sicuru·a che vulete piattà tuttu à {domain}? Saria forse abbastanza di bluccà ò piattà alcuni conti da quallà. Ùn viderete più nunda da quallà indè e linee pubbliche o e nutificazione. I vostri abbunati da stu duminiu saranu tolti.",
"confirmations.mute.confirm": "Piattà",
"confirmations.mute.message": "Site sicuru·a che vulete piattà @{name}?",
- "confirmations.redraft.confirm": "Delete & redraft",
- "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
+ "confirmations.redraft.confirm": "Sguassà è riscrive",
+ "confirmations.redraft.message": "Site sicuru·a chè vulete sguassà stu statutu è riscrivelu? Tutti i favuriti, risposte è spartere saranu persi.",
"confirmations.unfollow.confirm": "Disabbunassi",
"confirmations.unfollow.message": "Site sicuru·a ch'ùn vulete più siguità @{name}?",
"embed.instructions": "Integrà stu statutu à u vostru situ cù u codice quì sottu.",
@@ -116,14 +116,14 @@
"empty_column.public": "Ùn c'hè nunda quì! Scrivete qualcosa in pubblicu o seguitate utilizatori d'altre istanze per empie a linea pubblica",
"follow_request.authorize": "Auturizà",
"follow_request.reject": "Righjittà",
- "getting_started.developers": "Developers",
+ "getting_started.developers": "Sviluppatori",
"getting_started.documentation": "Documentation",
- "getting_started.find_friends": "Find friends from Twitter",
+ "getting_started.find_friends": "Truvà amichi da Twitter",
"getting_started.heading": "Per principià",
- "getting_started.invite": "Invite people",
+ "getting_started.invite": "Invità ghjente",
"getting_started.open_source_notice": "Mastodon ghjè un lugiziale liberu. Pudete cuntribuisce à u codice o a traduzione, o palisà un bug, nant'à GitHub: {github}.",
- "getting_started.security": "Security",
- "getting_started.terms": "Terms of service",
+ "getting_started.security": "Sicurità",
+ "getting_started.terms": "Cundizione di u serviziu",
"home.column_settings.basic": "Bàsichi",
"home.column_settings.show_reblogs": "Vede e spartere",
"home.column_settings.show_replies": "Vede e risposte",
@@ -139,7 +139,7 @@
"keyboard_shortcuts.hotkey": "Accorta",
"keyboard_shortcuts.legend": "vede a legenda",
"keyboard_shortcuts.mention": "mintuvà l'autore",
- "keyboard_shortcuts.profile": "to open author's profile",
+ "keyboard_shortcuts.profile": "per apre u prufile di l'autore",
"keyboard_shortcuts.reply": "risponde",
"keyboard_shortcuts.search": "fucalizà nant'à l'area di circata",
"keyboard_shortcuts.toggle_hidden": "vede/piattà u testu daretu à l'avertimentu CW",
@@ -165,11 +165,11 @@
"navigation_bar.blocks": "Utilizatori bluccati",
"navigation_bar.community_timeline": "Linea pubblica lucale",
"navigation_bar.direct": "Missaghji diretti",
- "navigation_bar.discover": "Discover",
+ "navigation_bar.discover": "Scopre",
"navigation_bar.domain_blocks": "Duminii piattati",
"navigation_bar.edit_profile": "Mudificà u prufile",
"navigation_bar.favourites": "Favuriti",
- "navigation_bar.filters": "Muted words",
+ "navigation_bar.filters": "Parolle silenzate",
"navigation_bar.follow_requests": "Dumande d'abbunamentu",
"navigation_bar.info": "À prupositu di l'istanza",
"navigation_bar.keyboard_shortcuts": "Accorte cù a tastera",
@@ -180,7 +180,7 @@
"navigation_bar.pins": "Statuti puntarulati",
"navigation_bar.preferences": "Preferenze",
"navigation_bar.public_timeline": "Linea pubblica glubale",
- "navigation_bar.security": "Security",
+ "navigation_bar.security": "Sicurità",
"notification.favourite": "{name} hà aghjuntu u vostru statutu à i so favuriti",
"notification.follow": "{name} v'hà seguitatu",
"notification.mention": "{name} v'hà mintuvatu",
@@ -196,7 +196,7 @@
"notifications.column_settings.reblog": "Spartere:",
"notifications.column_settings.show": "Mustrà indè a colonna",
"notifications.column_settings.sound": "Sunà",
- "notifications.group": "{count} notifications",
+ "notifications.group": "{count} nutificazione",
"onboarding.done": "Fatta",
"onboarding.next": "Siguente",
"onboarding.page_five.public_timelines": "A linea pubblica lucale mostra statuti pubblichi da tuttu u mondu nant'à {domain}. A linea pubblica glubale mostra ancu quelli di a ghjente seguitata da l'utilizatori di {domain}. Quesse sò una bona manera d'incuntrà nove parsone.",
@@ -208,7 +208,7 @@
"onboarding.page_one.welcome": "Benvenuti/a nant'à Mastodon!",
"onboarding.page_six.admin": "L'amministratore di a vostr'istanza hè {admin}.",
"onboarding.page_six.almost_done": "Quasgi finitu...",
- "onboarding.page_six.appetoot": "Bon Appetoot!",
+ "onboarding.page_six.appetoot": "Bon Appitootu!",
"onboarding.page_six.apps_available": "Ci sò {apps} dispunibule per iOS, Android è altre piattaforme.",
"onboarding.page_six.github": "Mastodon ghjè un lugiziale liberu. Pudete cuntribuisce à u codice o a traduzione, o palisà un prublemu, nant'à {github}.",
"onboarding.page_six.guidelines": "regule di a cumunità",
@@ -260,7 +260,7 @@
"status.direct": "Mandà un missaghju @{name}",
"status.embed": "Integrà",
"status.favourite": "Aghjunghje à i favuriti",
- "status.filtered": "Filtered",
+ "status.filtered": "Filtratu",
"status.load_more": "Vede di più",
"status.media_hidden": "Media piattata",
"status.mention": "Mintuvà @{name}",
@@ -273,7 +273,7 @@
"status.reblog": "Sparte",
"status.reblog_private": "Sparte à l'audienza uriginale",
"status.reblogged_by": "{name} hà spartutu",
- "status.redraft": "Delete & re-draft",
+ "status.redraft": "Sguassà è riscrive",
"status.reply": "Risponde",
"status.replyAll": "Risponde à tutti",
"status.report": "Palisà @{name}",
@@ -291,7 +291,7 @@
"tabs_bar.local_timeline": "Lucale",
"tabs_bar.notifications": "Nutificazione",
"tabs_bar.search": "Cercà",
- "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
+ "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} parlanu",
"ui.beforeunload": "A bruttacopia sarà persa s'ellu hè chjosu Mastodon.",
"upload_area.title": "Drag & drop per caricà un fugliale",
"upload_button.label": "Aghjunghje un media",
diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json
index 8f2402d60..6efb99381 100644
--- a/app/javascript/mastodon/locales/cs.json
+++ b/app/javascript/mastodon/locales/cs.json
@@ -20,7 +20,7 @@
"account.mute_notifications": "Skrýt oznámení od uživatele @{name}",
"account.muted": "Ztišen/a",
"account.posts": "Tooty",
- "account.posts_with_replies": "Tooty s odpověďmi",
+ "account.posts_with_replies": "Tooty a odpovědi",
"account.report": "Nahlásit uživatele @{name}",
"account.requested": "Požadavek čeká na schválení. Kliknutím zrušíte požadavek o sledování",
"account.share": "Sdílet profil uživatele @{name}",
@@ -79,7 +79,7 @@
"confirmations.block.confirm": "Blokovat",
"confirmations.block.message": "Jste si jistý/á, že chcete zablokovat uživatele {name}?",
"confirmations.delete.confirm": "Smazat",
- "confirmations.delete.message": "Jste si jistý/á, že chcete smazat tento status?",
+ "confirmations.delete.message": "Jste si jistý/á, že chcete smazat tento příspěvek?",
"confirmations.delete_list.confirm": "Smazat",
"confirmations.delete_list.message": "Jste si jistý/á, že chcete tento seznam navždy vymazat?",
"confirmations.domain_block.confirm": "Skrýt celou doménu",
@@ -87,10 +87,10 @@
"confirmations.mute.confirm": "Ignorovat",
"confirmations.mute.message": "Jste si jistý/á, že chcete ignorovat uživatele {name}?",
"confirmations.redraft.confirm": "Vymazat a přepsat",
- "confirmations.redraft.message": "Jste si jistý/á, že chcete vymazat a přepsat tento status? Ztratíte všechny jeho odpovědi, boosty a oblíbení.",
+ "confirmations.redraft.message": "Jste si jistý/á, že chcete vymazat a přepsat tento příspěvek? Ztratíte všechny jeho odpovědi, boosty a oblíbení.",
"confirmations.unfollow.confirm": "Přestat sledovat",
"confirmations.unfollow.message": "jste si jistý/á, že chcete přestat sledovat uživatele {name}?",
- "embed.instructions": "Pro přidání statusu na vaši webovou stránku zkopírujte níže uvedený kód.",
+ "embed.instructions": "Pro přidání příspěvku na vaši webovou stránku zkopírujte níže uvedený kód.",
"embed.preview": "Takhle to bude vypadat:",
"emoji_button.activity": "Aktivita",
"emoji_button.custom": "Vlastní",
@@ -111,7 +111,7 @@
"empty_column.hashtag": "Pod tímto hashtagem ještě nic není.",
"empty_column.home": "Vaše domovská časová osa je prázdná! Začněte navštívením {public} nebo použijte hledání a seznamte se s dalšími uživateli.",
"empty_column.home.public_timeline": "veřejné časové osy",
- "empty_column.list": "V tomto seznamu ještě nic není. Pokud budou členové tohoto seznamu psát nové statusy, objeví se zde.",
+ "empty_column.list": "V tomto seznamu ještě nic není. Pokud budou členové tohoto seznamu psát nové příspěvky, objeví se zde.",
"empty_column.notifications": "Ještě nemáte žádná oznámení. Začněte konverzaci komunikováním s ostatními.",
"empty_column.public": "Tady nic není! Napište něco veřejně, nebo manuálně začněte sledovat uživatele z jiných instancí, aby tu něco přibylo",
"follow_request.authorize": "Autorizovat",
@@ -129,17 +129,17 @@
"home.column_settings.show_replies": "Zobrazit odpovědi",
"keyboard_shortcuts.back": "k návratu zpět",
"keyboard_shortcuts.boost": "k boostnutí",
- "keyboard_shortcuts.column": "k zaměření na status v jednom ze sloupců",
+ "keyboard_shortcuts.column": "k zaměření na příspěvek v jednom ze sloupců",
"keyboard_shortcuts.compose": "k zaměření na psací prostor",
"keyboard_shortcuts.description": "Popis",
"keyboard_shortcuts.down": "k přesunutí dolů v seznamu",
- "keyboard_shortcuts.enter": "k otevření statusu",
+ "keyboard_shortcuts.enter": "k otevření příspěvku",
"keyboard_shortcuts.favourite": "k oblíbení",
"keyboard_shortcuts.heading": "Klávesové zkratky",
"keyboard_shortcuts.hotkey": "Horká klávesa",
"keyboard_shortcuts.legend": "k zobrazení této legendy",
"keyboard_shortcuts.mention": "ke zmínění autora",
- "keyboard_shortcuts.profile": "to open author's profile",
+ "keyboard_shortcuts.profile": "k otevření autorova profilu",
"keyboard_shortcuts.reply": "k odpovězení",
"keyboard_shortcuts.search": "k zaměření na vyhledávání",
"keyboard_shortcuts.toggle_hidden": "k zobrazení/skrytí textu za CW",
@@ -160,7 +160,7 @@
"loading_indicator.label": "Načítám...",
"media_gallery.toggle_visible": "Přepínat viditelnost",
"missing_indicator.label": "Nenalezeno",
- "missing_indicator.sublabel": "Tento zdroj se nepodažilo najít",
+ "missing_indicator.sublabel": "Tento zdroj se nepodařilo najít",
"mute_modal.hide_notifications": "Skrýt oznámení před tímto uživatelem?",
"navigation_bar.blocks": "Blokovaní uživatelé",
"navigation_bar.community_timeline": "Místní časová osa",
@@ -181,10 +181,10 @@
"navigation_bar.preferences": "Předvolby",
"navigation_bar.public_timeline": "Federovaná časová osa",
"navigation_bar.security": "Zabezpečení",
- "notification.favourite": "{name} označil/a váš status jako oblíbený",
+ "notification.favourite": "{name} si oblíbil/a váš příspěvek",
"notification.follow": "{name} vás začal/a sledovat",
"notification.mention": "{name} vás zmínil/a",
- "notification.reblog": "{name} vám boostnul/a status",
+ "notification.reblog": "{name} boostnul/a váš příspěvek",
"notifications.clear": "Vymazat oznámení",
"notifications.clear_confirmation": "Jste si jistý/á, že chcete trvale vymazat všechna vaše oznámení?",
"notifications.column_settings.alert": "Desktopová oznámení",
@@ -218,7 +218,7 @@
"onboarding.page_three.search": "Pomocí vyhledávacího řádku najděte lidi a podívejte se na hashtagy jako {illustration} a {introductions}. Chcete-li najít někoho, kdo není na této instanci, použijte jeho celou adresu profilu.",
"onboarding.page_two.compose": "Příspěvky pište z pole na komponování. Ikonami níže můžete nahrávat obrázky, změnit nastavení soukromí a přidat varování o obsahu.",
"onboarding.skip": "Přeskočit",
- "privacy.change": "Změnit viditelnost statusu",
+ "privacy.change": "Změnit viditelnost příspěvku",
"privacy.direct.long": "Odeslat pouze zmíněným uživatelům",
"privacy.direct.short": "Přímé",
"privacy.private.long": "Odeslat pouze sledovatelům",
@@ -243,9 +243,9 @@
"report.target": "Nahlásit {target}",
"search.placeholder": "Hledat",
"search_popout.search_format": "Pokročilé vyhledávání",
- "search_popout.tips.full_text": "Jednoduchý textový výpis statusů, které jste napsal/a, oblíbil/a si, povýšil/a, nebo v nich byl/a zmíněn/a, včetně odpovídajících přezdívek, jmen a hashtagů.",
+ "search_popout.tips.full_text": "Jednoduchý textový výpis příspěvků, které jste napsal/a, oblíbil/a si, boostnul/a, nebo v nich byl/a zmíněn/a, včetně odpovídajících přezdívek, jmen a hashtagů.",
"search_popout.tips.hashtag": "hashtag",
- "search_popout.tips.status": "status",
+ "search_popout.tips.status": "příspěvek",
"search_popout.tips.text": "Jednoduchý textový výpis odpovídajících jmen, přezdívek a hashtagů",
"search_popout.tips.user": "uživatel",
"search_results.accounts": "Lidé",
@@ -267,7 +267,7 @@
"status.more": "Více",
"status.mute": "Ignorovat uživatele @{name}",
"status.mute_conversation": "Ignorovat konverzaci",
- "status.open": "Otevřít tento status",
+ "status.open": "Rozbalit tento příspěvek",
"status.pin": "Připnout na profil",
"status.pinned": "Připnutý toot",
"status.reblog": "Boostnout",
diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json
index bdd631a26..83e675682 100644
--- a/app/javascript/mastodon/locales/de.json
+++ b/app/javascript/mastodon/locales/de.json
@@ -1,6 +1,6 @@
{
"account.badges.bot": "Bot",
- "account.block": "@{name} blocken",
+ "account.block": "@{name} blockieren",
"account.block_domain": "Alles von {domain} verstecken",
"account.blocked": "Blockiert",
"account.direct": "Direct Message @{name}",
@@ -83,7 +83,7 @@
"confirmations.delete_list.confirm": "Delete",
"confirmations.delete_list.message": "Bist du dir sicher, dass du diese Liste permanent löschen möchtest?",
"confirmations.domain_block.confirm": "Die ganze Domain verbergen",
- "confirmations.domain_block.message": "Bist du dir wirklich sicher, dass du die ganze Domain {domain} verbergen willst? In den meisten Fällen reichen ein paar gezielte Blocks aus. Du wirst nicht den Inhalt von dieser Domain in irgendwelchen öffentlichen Timelines oder den Benachrichtigungen finden. Deine Follower von dieser Domain werden entfernt.",
+ "confirmations.domain_block.message": "Bist du dir wirklich sicher, dass du die ganze Domain {domain} blockieren willst? In den meisten Fällen reichen ein paar gezielte Blockierungen oder Stummschaltungen aus. Du wirst den Inhalt von dieser Domain nicht in irgendwelchen öffentlichen Timelines oder den Benachrichtigungen finden. Deine Follower von dieser Domain werden entfernt.",
"confirmations.mute.confirm": "Stummschalten",
"confirmations.mute.message": "Bist du dir sicher, dass du {name} stummschalten möchtest?",
"confirmations.redraft.confirm": "Löschen und neu erstellen",
@@ -139,7 +139,7 @@
"keyboard_shortcuts.hotkey": "Tastenkürzel",
"keyboard_shortcuts.legend": "um diese Übersicht anzuzeigen",
"keyboard_shortcuts.mention": "um Autor_in zu erwähnen",
- "keyboard_shortcuts.profile": "to open author's profile",
+ "keyboard_shortcuts.profile": "um Profil des Autors zu öffnen",
"keyboard_shortcuts.reply": "um zu antworten",
"keyboard_shortcuts.search": "um die Suche zu fokussieren",
"keyboard_shortcuts.toggle_hidden": "um den Text hinter einer Inhaltswarnung zu verstecken oder ihn anzuzeigen",
@@ -169,7 +169,7 @@
"navigation_bar.domain_blocks": "Versteckte Domains",
"navigation_bar.edit_profile": "Profil bearbeiten",
"navigation_bar.favourites": "Favoriten",
- "navigation_bar.filters": "Muted words",
+ "navigation_bar.filters": "Stummgeschaltene Wörter",
"navigation_bar.follow_requests": "Folgeanfragen",
"navigation_bar.info": "Über diese Instanz",
"navigation_bar.keyboard_shortcuts": "Tastenkombinationen",
@@ -253,7 +253,7 @@
"search_results.statuses": "Beiträge",
"search_results.total": "{count, number} {count, plural, one {Ergebnis} other {Ergebnisse}}",
"standalone.public_title": "Ein kleiner Einblick …",
- "status.block": "Block @{name}",
+ "status.block": "Blockiere @{name}",
"status.cancel_reblog_private": "Nicht mehr teilen",
"status.cannot_reblog": "Dieser Beitrag kann nicht geteilt werden",
"status.delete": "Löschen",
diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json
index a34396ccf..1e059b682 100644
--- a/app/javascript/mastodon/locales/el.json
+++ b/app/javascript/mastodon/locales/el.json
@@ -1,7 +1,7 @@
{
"account.badges.bot": "Μποτ",
"account.block": "Απόκλεισε τον/την @{name}",
- "account.block_domain": "Απόκρυψε τα πάντα από τον/την",
+ "account.block_domain": "Απόκρυψε τα πάντα από το {domain}",
"account.blocked": "Αποκλεισμένος/η",
"account.direct": "Προσωπικό μήνυμα προς @{name}",
"account.disclaimer_full": "Οι παρακάτω πληροφορίες μπορει να μην αντανακλούν το προφίλ του χρήστη επαρκως.",
@@ -197,7 +197,7 @@
"notifications.column_settings.show": "Εμφάνισε σε στήλη",
"notifications.column_settings.sound": "Ηχητική ειδοποίηση",
"notifications.group": "{count} ειδοποιήσεις",
- "onboarding.done": "Έγινε",
+ "onboarding.done": "Όλα έτοιμα",
"onboarding.next": "Επόμενο",
"onboarding.page_five.public_timelines": "Η τοπική ροή δείχνει τις δημόσιες δημοσιεύσεις από όσους εδρεύουν στον κόμβο {domain}. Η ομοσπονδιακή ροή δείχνει τις δημόσιες δημοσιεύσεις εκείνων που οι χρήστες του {domain} ακολουθούν. Αυτές οι είναι Δημόσιες Ροές, ένας ωραίος τρόπος να ανακαλύψεις καινούριους ανθρώπους.",
"onboarding.page_four.home": "Η αρχική ροή δείχνει καταστάσεις από ανθρώπους που ακολουθείς.",
@@ -211,7 +211,7 @@
"onboarding.page_six.appetoot": "Καλά τουτ!",
"onboarding.page_six.apps_available": "Υπάρχουν {apps} για iOS, Android και άλλες πλατφόρμες.",
"onboarding.page_six.github": "Το Mastodon είναι ελεύθερο λογισμικό. Μπορείς να αναφέρεις σφάλματα, να αιτηθείς νέες λειτουργίες ή να συνεισφέρεις κώδικα στο {github}.",
- "onboarding.page_six.guidelines": "οδηγίες κοινότητας",
+ "onboarding.page_six.guidelines": "κατευθύνσεις κοινότητας",
"onboarding.page_six.read_guidelines": "Παρακαλώ διάβασε τις {guidelines} του κόμβου {domain}!",
"onboarding.page_six.various_app": "εφαρμογές κινητών",
"onboarding.page_three.profile": "Επεξεργάσου το προφίλ σου για να αλλάξεις την εικόνα σου, το βιογραφικό σου και το εμφανιζόμενο όνομά σου. Εκεί θα βρεις επίσης κι άλλες προτιμήσεις.",
diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json
index 2d7589296..aab24b231 100644
--- a/app/javascript/mastodon/locales/eu.json
+++ b/app/javascript/mastodon/locales/eu.json
@@ -6,7 +6,7 @@
"account.direct": "Mezu zuzena @{name}(r)i",
"account.disclaimer_full": "Baliteke beheko informazioak erabiltzailearen profilaren zati bat baino ez erakustea.",
"account.domain_blocked": "Ezkutatutako domeinua",
- "account.edit_profile": "Profila aldatu",
+ "account.edit_profile": "Aldatu profila",
"account.endorse": "Feature on profile",
"account.follow": "Jarraitu",
"account.followers": "Jarraitzaileak",
@@ -139,7 +139,7 @@
"keyboard_shortcuts.hotkey": "Laster-tekla",
"keyboard_shortcuts.legend": "legenda hau bistaratzea",
"keyboard_shortcuts.mention": "egilea aipatzea",
- "keyboard_shortcuts.profile": "to open author's profile",
+ "keyboard_shortcuts.profile": "egilearen profila irekitzeko",
"keyboard_shortcuts.reply": "erantzutea",
"keyboard_shortcuts.search": "bilaketan fokua jartzea",
"keyboard_shortcuts.toggle_hidden": "testua erakustea/ezkutatzea abisu baten atzean",
@@ -169,7 +169,7 @@
"navigation_bar.domain_blocks": "Ezkutatutako domeinuak",
"navigation_bar.edit_profile": "Aldatu profila",
"navigation_bar.favourites": "Gogokoak",
- "navigation_bar.filters": "Muted words",
+ "navigation_bar.filters": "Mutututako hitzak",
"navigation_bar.follow_requests": "Jarraitzeko eskariak",
"navigation_bar.info": "Instantzia honi buruz",
"navigation_bar.keyboard_shortcuts": "Laster-teklak",
@@ -260,7 +260,7 @@
"status.direct": "Mezu zuzena @{name}(r)i",
"status.embed": "Txertatu",
"status.favourite": "Gogokoa",
- "status.filtered": "Filtered",
+ "status.filtered": "Iragazita",
"status.load_more": "Kargatu gehiago",
"status.media_hidden": "Multimedia ezkutatua",
"status.mention": "Aipatu @{name}",
diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json
index 725a62c4e..a4797f1fc 100644
--- a/app/javascript/mastodon/locales/fr.json
+++ b/app/javascript/mastodon/locales/fr.json
@@ -139,7 +139,7 @@
"keyboard_shortcuts.hotkey": "Raccourci",
"keyboard_shortcuts.legend": "pour afficher cette légende",
"keyboard_shortcuts.mention": "pour mentionner l'auteur",
- "keyboard_shortcuts.profile": "to open author's profile",
+ "keyboard_shortcuts.profile": "pour ouvrir le profil de l'auteur",
"keyboard_shortcuts.reply": "pour répondre",
"keyboard_shortcuts.search": "pour cibler la recherche",
"keyboard_shortcuts.toggle_hidden": "pour afficher/cacher un texte derrière CW",
@@ -169,7 +169,7 @@
"navigation_bar.domain_blocks": "Domaines cachés",
"navigation_bar.edit_profile": "Modifier le profil",
"navigation_bar.favourites": "Favoris",
- "navigation_bar.filters": "Muted words",
+ "navigation_bar.filters": "Mots silenciés",
"navigation_bar.follow_requests": "Demandes de suivi",
"navigation_bar.info": "Plus d’informations",
"navigation_bar.keyboard_shortcuts": "Raccourcis-clavier",
@@ -260,7 +260,7 @@
"status.direct": "Envoyer un message direct à @{name}",
"status.embed": "Intégrer",
"status.favourite": "Ajouter aux favoris",
- "status.filtered": "Filtered",
+ "status.filtered": "Filtré",
"status.load_more": "Charger plus",
"status.media_hidden": "Média caché",
"status.mention": "Mentionner",
diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json
index 1e077f661..08382b5a6 100644
--- a/app/javascript/mastodon/locales/ja.json
+++ b/app/javascript/mastodon/locales/ja.json
@@ -139,7 +139,7 @@
"keyboard_shortcuts.hotkey": "ホットキー",
"keyboard_shortcuts.legend": "この一覧を表示",
"keyboard_shortcuts.mention": "メンション",
- "keyboard_shortcuts.profile": "to open author's profile",
+ "keyboard_shortcuts.profile": "プロフィールを開く",
"keyboard_shortcuts.reply": "返信",
"keyboard_shortcuts.search": "検索欄に移動",
"keyboard_shortcuts.toggle_hidden": "CWで隠れた文を見る/隠す",
diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json
index d309e7d4c..b7b280591 100644
--- a/app/javascript/mastodon/locales/ko.json
+++ b/app/javascript/mastodon/locales/ko.json
@@ -139,7 +139,7 @@
"keyboard_shortcuts.hotkey": "핫키",
"keyboard_shortcuts.legend": "이 도움말 표시",
"keyboard_shortcuts.mention": "멘션",
- "keyboard_shortcuts.profile": "to open author's profile",
+ "keyboard_shortcuts.profile": "프로필 열기",
"keyboard_shortcuts.reply": "답장",
"keyboard_shortcuts.search": "검색창에 포커스",
"keyboard_shortcuts.toggle_hidden": "CW로 가려진 텍스트를 표시/비표시",
diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json
index 5f5bbe692..2764fb4c6 100644
--- a/app/javascript/mastodon/locales/pt-BR.json
+++ b/app/javascript/mastodon/locales/pt-BR.json
@@ -139,7 +139,7 @@
"keyboard_shortcuts.hotkey": "Atalho",
"keyboard_shortcuts.legend": "para mostrar essa legenda",
"keyboard_shortcuts.mention": "para mencionar o autor",
- "keyboard_shortcuts.profile": "to open author's profile",
+ "keyboard_shortcuts.profile": "para abrir o perfil do autor",
"keyboard_shortcuts.reply": "para responder",
"keyboard_shortcuts.search": "para focar a pesquisa",
"keyboard_shortcuts.toggle_hidden": "mostrar/esconder o texto com aviso de conteúdo",
diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json
index 1ed91d344..f8228e7ff 100644
--- a/app/javascript/mastodon/locales/te.json
+++ b/app/javascript/mastodon/locales/te.json
@@ -139,7 +139,7 @@
"keyboard_shortcuts.hotkey": "హాట్ కీ",
"keyboard_shortcuts.legend": "ఈ లెజెండ్ ప్రదర్శించడానికి",
"keyboard_shortcuts.mention": "రచయితను ప్రస్తావించడానికి",
- "keyboard_shortcuts.profile": "to open author's profile",
+ "keyboard_shortcuts.profile": "రచయిత ప్రొఫైల్ ను తెరవాలంటే",
"keyboard_shortcuts.reply": "ప్రత్యుత్తరం ఇవ్వడానికి",
"keyboard_shortcuts.search": "శోధనపై దృష్టి పెట్టండి",
"keyboard_shortcuts.toggle_hidden": "CW వెనుక ఉన్న పాఠ్యాన్ని చూపడానికి / దాచడానికి",
diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json
index 624108a77..cca98840b 100644
--- a/app/javascript/mastodon/locales/uk.json
+++ b/app/javascript/mastodon/locales/uk.json
@@ -1,221 +1,221 @@
{
- "account.badges.bot": "Bot",
- "account.block": "Заблокувати",
+ "account.badges.bot": "Бот",
+ "account.block": "Заблокувати @{name}",
"account.block_domain": "Заглушити {domain}",
- "account.blocked": "Blocked",
- "account.direct": "Direct Message @{name}",
- "account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
- "account.domain_blocked": "Domain hidden",
- "account.edit_profile": "Налаштування профілю",
+ "account.blocked": "Заблоковані",
+ "account.direct": "Пряме повідомлення @{name}",
+ "account.disclaimer_full": "Інфомація знизу може відображати профіль користувача неповністю.",
+ "account.domain_blocked": "Домен приховано",
+ "account.edit_profile": "Редагувати профіль",
"account.endorse": "Feature on profile",
"account.follow": "Підписатися",
"account.followers": "Підписники",
"account.follows": "Підписки",
"account.follows_you": "Підписаний(-а) на Вас",
- "account.hide_reblogs": "Hide boosts from @{name}",
- "account.media": "Медія",
- "account.mention": "Згадати",
- "account.moved_to": "{name} has moved to:",
- "account.mute": "Заглушити",
- "account.mute_notifications": "Mute notifications from @{name}",
- "account.muted": "Muted",
- "account.posts": "Пости",
- "account.posts_with_replies": "Toots with replies",
- "account.report": "Поскаржитися",
- "account.requested": "Очікує підтвердження",
- "account.share": "Share @{name}'s profile",
- "account.show_reblogs": "Show boosts from @{name}",
+ "account.hide_reblogs": "Сховати передмухи від @{name}",
+ "account.media": "Медіа",
+ "account.mention": "Згадати @{name}",
+ "account.moved_to": "{name} переїхав на:",
+ "account.mute": "Заглушити @{name}",
+ "account.mute_notifications": "Не показувати сповіщення від @{name}",
+ "account.muted": "Заглушений",
+ "account.posts": "Дмухи",
+ "account.posts_with_replies": "Дмухи й відповіді",
+ "account.report": "Поскаржитися на @{name}",
+ "account.requested": "Очікує підтвердження. Натисніть щоб відмінити запит",
+ "account.share": "Поширити профіль @{name}",
+ "account.show_reblogs": "Показати передмухи від @{name}",
"account.unblock": "Розблокувати",
"account.unblock_domain": "Розблокувати {domain}",
"account.unendorse": "Don't feature on profile",
"account.unfollow": "Відписатися",
- "account.unmute": "Зняти глушення",
- "account.unmute_notifications": "Unmute notifications from @{name}",
- "account.view_full_profile": "View full profile",
- "alert.unexpected.message": "An unexpected error occurred.",
- "alert.unexpected.title": "Oops!",
+ "account.unmute": "Зняти глушення @{name}",
+ "account.unmute_notifications": "Показувати сповіщення від @{name}",
+ "account.view_full_profile": "Показати профіль повністю",
+ "alert.unexpected.message": "Трапилась неочікувана помилка.",
+ "alert.unexpected.title": "Ой!",
"boost_modal.combo": "Ви можете натиснути {combo}, щоб пропустити це наступного разу",
- "bundle_column_error.body": "Something went wrong while loading this component.",
- "bundle_column_error.retry": "Try again",
- "bundle_column_error.title": "Network error",
- "bundle_modal_error.close": "Close",
- "bundle_modal_error.message": "Something went wrong while loading this component.",
- "bundle_modal_error.retry": "Try again",
+ "bundle_column_error.body": "Щось пішло не так при завантаженні компоненту.",
+ "bundle_column_error.retry": "Спробуйте ще",
+ "bundle_column_error.title": "Помилка мережі",
+ "bundle_modal_error.close": "Закрити",
+ "bundle_modal_error.message": "Щось пішло не так при завантаженні компоненту.",
+ "bundle_modal_error.retry": "Спробувати ще",
"column.blocks": "Заблоковані користувачі",
"column.community": "Локальна стрічка",
- "column.direct": "Direct messages",
- "column.domain_blocks": "Hidden domains",
+ "column.direct": "Прямі повідомлення",
+ "column.domain_blocks": "Приховані домени",
"column.favourites": "Вподобане",
"column.follow_requests": "Запити на підписку",
"column.home": "Головна",
- "column.lists": "Lists",
+ "column.lists": "Списки",
"column.mutes": "Заглушені користувачі",
"column.notifications": "Сповіщення",
- "column.pins": "Pinned toot",
+ "column.pins": "Закріплені дмухи",
"column.public": "Глобальна стрічка",
"column_back_button.label": "Назад",
- "column_header.hide_settings": "Hide settings",
+ "column_header.hide_settings": "Приховати налаштування",
"column_header.moveLeft_settings": "Move column to the left",
- "column_header.moveRight_settings": "Move column to the right",
- "column_header.pin": "Pin",
- "column_header.show_settings": "Show settings",
- "column_header.unpin": "Unpin",
+ "column_header.moveRight_settings": "Змістити колонку вправо",
+ "column_header.pin": "Закріпити",
+ "column_header.show_settings": "Показати налаштування",
+ "column_header.unpin": "Відкріпити",
"column_subheading.settings": "Налаштування",
- "community.column_settings.media_only": "Media Only",
- "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.",
- "compose_form.direct_message_warning_learn_more": "Learn more",
- "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
+ "community.column_settings.media_only": "Тільки медіа",
+ "compose_form.direct_message_warning": "Цей дмух буде видимий тільки згаданим користувачам.",
+ "compose_form.direct_message_warning_learn_more": "Дізнатись більше",
+ "compose_form.hashtag_warning": "Цей дмух не буде відображений у жодній стрічці хештеґу, так як він прихований. Тільки публічні дмухи можуть бути знайдені за хештеґом.",
"compose_form.lock_disclaimer": "Ваш акаунт не {locked}. Кожен може підписатися на Вас та бачити Ваші приватні пости.",
"compose_form.lock_disclaimer.lock": "приватний",
"compose_form.placeholder": "Що у Вас на думці?",
"compose_form.publish": "Дмухнути",
"compose_form.publish_loud": "{publish}!",
- "compose_form.sensitive.marked": "Media is marked as sensitive",
- "compose_form.sensitive.unmarked": "Media is not marked as sensitive",
- "compose_form.spoiler.marked": "Text is hidden behind warning",
- "compose_form.spoiler.unmarked": "Text is not hidden",
+ "compose_form.sensitive.marked": "Медіа відмічене несприйнятливим ",
+ "compose_form.sensitive.unmarked": "Медіа відмічене сприйнятливим",
+ "compose_form.spoiler.marked": "Текст приховано за попередженням",
+ "compose_form.spoiler.unmarked": "Текст видимий",
"compose_form.spoiler_placeholder": "Попередження щодо прихованого тексту",
"confirmation_modal.cancel": "Відмінити",
"confirmations.block.confirm": "Заблокувати",
"confirmations.block.message": "Ви впевнені, що хочете заблокувати {name}?",
"confirmations.delete.confirm": "Видалити",
"confirmations.delete.message": "Ви впевнені, що хочете видалити цей допис?",
- "confirmations.delete_list.confirm": "Delete",
- "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?",
+ "confirmations.delete_list.confirm": "Видалити",
+ "confirmations.delete_list.message": "Ви впевнені, що хочете видалити цей список назавжди?",
"confirmations.domain_block.confirm": "Сховати весь домен",
- "confirmations.domain_block.message": "Ви точно, точно впевнені, що хочете заблокувати весь домен {domain}? У більшості випадків для нормальної роботи краще заблокувати/заглушити лише деяких користувачів.",
+ "confirmations.domain_block.message": "Ви точно, точно впевнені, що хочете заблокувати весь домен {domain}? У більшості випадків для нормальної роботи краще заблокувати/заглушити лише деяких користувачів. Ви не зможете бачити контент з цього домену у будь-яких стрічках або ваших сповіщеннях. Ваші підписники з цього домену будуть відписані від вас.",
"confirmations.mute.confirm": "Заглушити",
"confirmations.mute.message": "Ви впевнені, що хочете заглушити {name}?",
- "confirmations.redraft.confirm": "Delete & redraft",
- "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
- "confirmations.unfollow.confirm": "Unfollow",
- "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
- "embed.instructions": "Embed this status on your website by copying the code below.",
- "embed.preview": "Here is what it will look like:",
+ "confirmations.redraft.confirm": "Видалити і перестворити",
+ "confirmations.redraft.message": "Ви впевнені, що хочете видалити допис і перестворити його? Ви втратите всі відповіді, передмухи та вподобайки допису.",
+ "confirmations.unfollow.confirm": "Відписатися",
+ "confirmations.unfollow.message": "Ви впевнені, що хочете відписатися від {name}?",
+ "embed.instructions": "Інтегруйте цей статус на вашому вебсайті, скопіювавши код нижче.",
+ "embed.preview": "Ось як він виглядатиме:",
"emoji_button.activity": "Заняття",
- "emoji_button.custom": "Custom",
+ "emoji_button.custom": "Особливі",
"emoji_button.flags": "Прапори",
"emoji_button.food": "Їжа та напої",
"emoji_button.label": "Вставити емодзі",
"emoji_button.nature": "Природа",
- "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
+ "emoji_button.not_found": "Немає емодзі!! (╯°□°)╯︵ ┻━┻",
"emoji_button.objects": "Предмети",
"emoji_button.people": "Люди",
- "emoji_button.recent": "Frequently used",
+ "emoji_button.recent": "Часто використовувані",
"emoji_button.search": "Знайти...",
- "emoji_button.search_results": "Search results",
+ "emoji_button.search_results": "Результати пошуку",
"emoji_button.symbols": "Символи",
"emoji_button.travel": "Подорожі",
"empty_column.community": "Локальна стрічка пуста. Напишіть щось, щоб розігріти народ!",
- "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
+ "empty_column.direct": "У вас ще немає прямих повідомлень. Коли ви відправите чи отримаєте якесь, воно з'явиться тут.",
"empty_column.hashtag": "Дописів з цим хештегом поки не існує.",
"empty_column.home": "Ви поки ні на кого не підписані. Погортайте {public}, або скористуйтесь пошуком, щоб освоїтися та познайомитися з іншими користувачами.",
"empty_column.home.public_timeline": "публічні стрічки",
- "empty_column.list": "There is nothing in this list yet.",
+ "empty_column.list": "Немає нічого в цьому списку. Коли його учасники дмухнуть нові статуси, вони з'являться тут.",
"empty_column.notifications": "У вас ще немає сповіщень. Переписуйтесь з іншими користувачами, щоб почати розмову.",
- "empty_column.public": "Тут поки нічого немає! Опублікуйте щось, або вручну підпишіться на користувачів інших інстанцій, щоб заповнити стрічку.",
+ "empty_column.public": "Тут поки нічого немає! Опублікуйте щось, або вручну підпишіться на користувачів інших інстанцій, щоб заповнити стрічку",
"follow_request.authorize": "Авторизувати",
"follow_request.reject": "Відмовити",
- "getting_started.developers": "Developers",
- "getting_started.documentation": "Documentation",
- "getting_started.find_friends": "Find friends from Twitter",
+ "getting_started.developers": "Розробникам",
+ "getting_started.documentation": "Документація",
+ "getting_started.find_friends": "Знайдіть друзів із Twitter",
"getting_started.heading": "Ласкаво просимо",
- "getting_started.invite": "Invite people",
+ "getting_started.invite": "Запросіть людей",
"getting_started.open_source_notice": "Mastodon - програма з відкритим вихідним кодом. Ви можете допомогти проекту, або повідомити про проблеми на GitHub за адресою {github}.",
- "getting_started.security": "Security",
- "getting_started.terms": "Terms of service",
+ "getting_started.security": "Безпека",
+ "getting_started.terms": "Умови використання",
"home.column_settings.basic": "Основні",
"home.column_settings.show_reblogs": "Показувати передмухи",
"home.column_settings.show_replies": "Показувати відповіді",
- "keyboard_shortcuts.back": "to navigate back",
- "keyboard_shortcuts.boost": "to boost",
- "keyboard_shortcuts.column": "to focus a status in one of the columns",
- "keyboard_shortcuts.compose": "to focus the compose textarea",
- "keyboard_shortcuts.description": "Description",
- "keyboard_shortcuts.down": "to move down in the list",
- "keyboard_shortcuts.enter": "to open status",
- "keyboard_shortcuts.favourite": "to favourite",
- "keyboard_shortcuts.heading": "Keyboard Shortcuts",
- "keyboard_shortcuts.hotkey": "Hotkey",
- "keyboard_shortcuts.legend": "to display this legend",
- "keyboard_shortcuts.mention": "to mention author",
- "keyboard_shortcuts.profile": "to open author's profile",
- "keyboard_shortcuts.reply": "to reply",
- "keyboard_shortcuts.search": "to focus search",
- "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
- "keyboard_shortcuts.toot": "to start a brand new toot",
- "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
- "keyboard_shortcuts.up": "to move up in the list",
+ "keyboard_shortcuts.back": "переходити назад",
+ "keyboard_shortcuts.boost": "передмухувати",
+ "keyboard_shortcuts.column": "фокусуватися на одній з колонок",
+ "keyboard_shortcuts.compose": "фокусуватися на полі введення",
+ "keyboard_shortcuts.description": "Опис",
+ "keyboard_shortcuts.down": "рухатися вниз стрічкою",
+ "keyboard_shortcuts.enter": "відкрити статус",
+ "keyboard_shortcuts.favourite": "вподобати",
+ "keyboard_shortcuts.heading": "Гарячі клавіші",
+ "keyboard_shortcuts.hotkey": "Гаряча клавіша",
+ "keyboard_shortcuts.legend": "показати підказку",
+ "keyboard_shortcuts.mention": "згадати автора",
+ "keyboard_shortcuts.profile": "відкрити профіль автора",
+ "keyboard_shortcuts.reply": "відповісти",
+ "keyboard_shortcuts.search": "сфокусуватися на пошуку",
+ "keyboard_shortcuts.toggle_hidden": "показати/приховати прихований текст",
+ "keyboard_shortcuts.toot": "почати писати новий дмух",
+ "keyboard_shortcuts.unfocus": "розфокусуватися з нового допису чи пошуку",
+ "keyboard_shortcuts.up": "рухатися вверх списком",
"lightbox.close": "Закрити",
- "lightbox.next": "Next",
- "lightbox.previous": "Previous",
- "lists.account.add": "Add to list",
- "lists.account.remove": "Remove from list",
- "lists.delete": "Delete list",
- "lists.edit": "Edit list",
- "lists.new.create": "Add list",
- "lists.new.title_placeholder": "New list title",
- "lists.search": "Search among people you follow",
- "lists.subheading": "Your lists",
+ "lightbox.next": "Далі",
+ "lightbox.previous": "Назад",
+ "lists.account.add": "Додати до списку",
+ "lists.account.remove": "Видалити зі списку",
+ "lists.delete": "Видалити список",
+ "lists.edit": "Редагувати список",
+ "lists.new.create": "Додати список",
+ "lists.new.title_placeholder": "Нова назва списку",
+ "lists.search": "Шукати серед людей, на яких ви підписані",
+ "lists.subheading": "Ваші списки",
"loading_indicator.label": "Завантаження...",
"media_gallery.toggle_visible": "Показати/приховати",
"missing_indicator.label": "Не знайдено",
- "missing_indicator.sublabel": "This resource could not be found",
- "mute_modal.hide_notifications": "Hide notifications from this user?",
+ "missing_indicator.sublabel": "Ресурс не знайдений",
+ "mute_modal.hide_notifications": "Приховати сповіщення від користувача?",
"navigation_bar.blocks": "Заблоковані користувачі",
"navigation_bar.community_timeline": "Локальна стрічка",
- "navigation_bar.direct": "Direct messages",
- "navigation_bar.discover": "Discover",
- "navigation_bar.domain_blocks": "Hidden domains",
+ "navigation_bar.direct": "Прямі повідомлення",
+ "navigation_bar.discover": "Знайти",
+ "navigation_bar.domain_blocks": "Приховані домени",
"navigation_bar.edit_profile": "Редагувати профіль",
"navigation_bar.favourites": "Вподобане",
- "navigation_bar.filters": "Muted words",
+ "navigation_bar.filters": "Приховані слова",
"navigation_bar.follow_requests": "Запити на підписку",
- "navigation_bar.info": "Про інстанцію",
- "navigation_bar.keyboard_shortcuts": "Keyboard shortcuts",
- "navigation_bar.lists": "Lists",
+ "navigation_bar.info": "Про сайт",
+ "navigation_bar.keyboard_shortcuts": "Гарячі клавіши",
+ "navigation_bar.lists": "Списки",
"navigation_bar.logout": "Вийти",
"navigation_bar.mutes": "Заглушені користувачі",
- "navigation_bar.personal": "Personal",
- "navigation_bar.pins": "Pinned toots",
+ "navigation_bar.personal": "Особисте",
+ "navigation_bar.pins": "Закріплені дмухи",
"navigation_bar.preferences": "Налаштування",
"navigation_bar.public_timeline": "Глобальна стрічка",
- "navigation_bar.security": "Security",
- "notification.favourite": "{name} сподобався ваш допис",
+ "navigation_bar.security": "Безпека",
+ "notification.favourite": "{name} вподобав(-ла) ваш допис",
"notification.follow": "{name} підписався(-лась) на Вас",
"notification.mention": "{name} згадав(-ла) Вас",
"notification.reblog": "{name} передмухнув(-ла) Ваш допис",
"notifications.clear": "Очистити сповіщення",
- "notifications.clear_confirmation": "Ви впевнені, що хочете видалити всі сповіщеня?",
- "notifications.column_settings.alert": "Десктопні сповіщення",
+ "notifications.clear_confirmation": "Ви впевнені, що хочете назавжди видалити всі сповіщеня?",
+ "notifications.column_settings.alert": "Сповіщення на комп'ютері",
"notifications.column_settings.favourite": "Вподобане:",
"notifications.column_settings.follow": "Нові підписники:",
- "notifications.column_settings.mention": "Сповіщення:",
- "notifications.column_settings.push": "Push notifications",
- "notifications.column_settings.push_meta": "This device",
+ "notifications.column_settings.mention": "Згадки:",
+ "notifications.column_settings.push": "Push-сповіщення",
+ "notifications.column_settings.push_meta": "Цей пристрій",
"notifications.column_settings.reblog": "Передмухи:",
"notifications.column_settings.show": "Показати в колонці",
- "notifications.column_settings.sound": "Відтворювати звук",
- "notifications.group": "{count} notifications",
+ "notifications.column_settings.sound": "Відтворювати звуки",
+ "notifications.group": "{count} сповіщень",
"onboarding.done": "Готово",
"onboarding.next": "Далі",
- "onboarding.page_five.public_timelines": "Локальна стрічка показує публічні пости усіх користувачів {domain}. Глобальна стрічка показує публічні пости усіх людей, на яких підписані користувачі {domain}. Це публичні стрічки, відмінний спосіб знайти нових людей.",
+ "onboarding.page_five.public_timelines": "Локальна стрічка показує публічні пости усіх користувачів {domain}. Глобальна стрічка показує публічні пости усіх людей, на яких підписані користувачі {domain}. Це публічні стрічки, відмінний спосіб знайти нових людей.",
"onboarding.page_four.home": "Домашня стрічка показує пости користувачів, на яких Ви підписані.",
- "onboarding.page_four.notifications": "Колонка сповіщень показує моменти, коли хтось звертається до Вас.",
- "onboarding.page_one.federation": "Mastodon - це мережа незалежних серверів, які разом образовують єдину соціальну мережу. Ми называємо ці сервери інстанціями.",
+ "onboarding.page_four.notifications": "Колонка сповіщень показує моменти, коли хтось взаємодії з Вами.",
+ "onboarding.page_one.federation": "Mastodon - це мережа незалежних серверів, які разом формують єдину соціальну мережу. Ми називаємо ці сервери сайтами.",
"onboarding.page_one.full_handle": "Your full handle",
"onboarding.page_one.handle_hint": "This is what you would tell your friends to search for.",
"onboarding.page_one.welcome": "Ласкаво просимо до Mastodon!",
- "onboarding.page_six.admin": "Адміністратором Вашої інстанції є {admin}.",
+ "onboarding.page_six.admin": "Адміністратором Вашого сайту є {admin}.",
"onboarding.page_six.almost_done": "Майже готово...",
- "onboarding.page_six.appetoot": "Bon Appetoot!",
+ "onboarding.page_six.appetoot": "Смачного дудіння!",
"onboarding.page_six.apps_available": "Для Mastodon існують {apps}, доступні для iOS, Android та інших платформ.",
- "onboarding.page_six.github": "Ви можете допомогти проектові чи сповістити про проблеми на GitHub за адресою {github}.",
- "onboarding.page_six.guidelines": "правила",
+ "onboarding.page_six.github": "Mastodon - це вільне відкрите програмне забезпечення. Ви можете допомогти проектові чи сповістити про проблеми на GitHub за адресою {github}.",
+ "onboarding.page_six.guidelines": "правила спільноти",
"onboarding.page_six.read_guidelines": "Будь ласка, прочитайте {guidelines} домену {domain}!",
- "onboarding.page_six.various_app": "мобільні додатки",
+ "onboarding.page_six.various_app": "мобільні застосунки",
"onboarding.page_three.profile": "Відредагуйте Ваш профіль, щоб змінити Ваши аватарку, інформацію та відображуване ім'я. Там Ви зможете знайти і інші налаштування.",
- "onboarding.page_three.search": "Використовуйте рядок пошуку, щоб знайти інших людей та подивитися хештеги накшталт {illustration} та {introductions}. Для того, щоб знайти людину з іншої інстанції, використовуйте їхній повний нікнейм.",
+ "onboarding.page_three.search": "Використовуйте рядок пошуку, щоб знайти інших людей та подивитися хештеги на кшталт {illustration} та {introductions}. Для того, щоб знайти людину з іншого сайту, використовуйте їхній повний нікнейм.",
"onboarding.page_two.compose": "Пишіть пости у колонці 'Написати'. Ви можете завантажувати зображення, міняти налаштування приватності та додавати попередження за допомогою піктограм знизу.",
"onboarding.skip": "Пропустити",
"privacy.change": "Змінити видимість допису",
@@ -227,17 +227,17 @@
"privacy.public.short": "Публічний",
"privacy.unlisted.long": "Не показувати у публічних стрічках",
"privacy.unlisted.short": "Прихований",
- "regeneration_indicator.label": "Loading…",
- "regeneration_indicator.sublabel": "Your home feed is being prepared!",
- "relative_time.days": "{number}d",
- "relative_time.hours": "{number}h",
- "relative_time.just_now": "now",
- "relative_time.minutes": "{number}m",
- "relative_time.seconds": "{number}s",
+ "regeneration_indicator.label": "Завантаження…",
+ "regeneration_indicator.sublabel": "Ваша домашня стрічка готова!",
+ "relative_time.days": "{number}д",
+ "relative_time.hours": "{number}г",
+ "relative_time.just_now": "щойно",
+ "relative_time.minutes": "{number}х",
+ "relative_time.seconds": "{number}с",
"reply_indicator.cancel": "Відмінити",
- "report.forward": "Forward to {target}",
- "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?",
- "report.hint": "The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:",
+ "report.forward": "Надіслати до {target}",
+ "report.forward_hint": "Це аккаунт з іншого серверу. Відправити анонімізовану копію скарги і туди?",
+ "report.hint": "Скаргу буде відправлено модераторам Вашого сайту. Ви можете надати їм пояснення, чому ви скаржитесь на аккаунт нижче:",
"report.placeholder": "Додаткові коментарі",
"report.submit": "Відправити",
"report.target": "Скаржимося на",
@@ -290,22 +290,22 @@
"tabs_bar.home": "Головна",
"tabs_bar.local_timeline": "Локальна",
"tabs_bar.notifications": "Сповіщення",
- "tabs_bar.search": "Search",
+ "tabs_bar.search": "Пошук",
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
- "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
+ "ui.beforeunload": "Вашу чернетку буде втрачено, якщо ви покинете Mastodon.",
"upload_area.title": "Перетягніть сюди, щоб завантажити",
"upload_button.label": "Додати медіаконтент",
- "upload_form.description": "Describe for the visually impaired",
- "upload_form.focus": "Crop",
- "upload_form.undo": "Відмінити",
+ "upload_form.description": "Опишіть для людей з вадами зору",
+ "upload_form.focus": "Обрізати",
+ "upload_form.undo": "Видалити",
"upload_progress.label": "Завантаження...",
- "video.close": "Close video",
- "video.exit_fullscreen": "Exit full screen",
- "video.expand": "Expand video",
- "video.fullscreen": "Full screen",
- "video.hide": "Hide video",
- "video.mute": "Mute sound",
- "video.pause": "Pause",
- "video.play": "Play",
- "video.unmute": "Unmute sound"
+ "video.close": "Закрити відео",
+ "video.exit_fullscreen": "Вийти з повного екрану",
+ "video.expand": "Розширити відео",
+ "video.fullscreen": "На весь екран",
+ "video.hide": "Приховати відео",
+ "video.mute": "Вимкнути звук",
+ "video.pause": "Призупинити",
+ "video.play": "Програвати",
+ "video.unmute": "Увімкнути звук"
}
diff --git a/config/locales/activerecord.cs.yml b/config/locales/activerecord.cs.yml
index 006d3e600..838dee15f 100644
--- a/config/locales/activerecord.cs.yml
+++ b/config/locales/activerecord.cs.yml
@@ -10,4 +10,4 @@ cs:
status:
attributes:
reblog:
- taken: stavu již existuje
+ taken: příspěvku již existuje
diff --git a/config/locales/ar.yml b/config/locales/ar.yml
index c2d7dc75e..76c4078db 100644
--- a/config/locales/ar.yml
+++ b/config/locales/ar.yml
@@ -352,7 +352,7 @@ ar:
desc_html: عرض شارة الموظفين على صفحة المستخدم
title: إظهار شارة الموظفين
site_description:
- desc_html: فقرة تمهيدية على الصفحة الأولى وفي العلامات الوصفية. يمكنك استخدام علامات HTML ، ولا سيما <a>
و <em>
.
+ desc_html: فقرة تمهيدية على الصفحة الأولى. صف ميزات خادوم ماستدون هذا و ما يميّزه عن الآخرين. يمكنك استخدام علامات HTML ، ولا سيما <a>
و <em>
.
title: وصف مثيل الخادوم
site_description_extended:
desc_html: مكان جيد لمدونة قواعد السلوك والقواعد والإرشادات وغيرها من الأمور التي تحدد حالتك. يمكنك استخدام علامات HTML
diff --git a/config/locales/ast.yml b/config/locales/ast.yml
index 65620a7c4..9cc80ef16 100644
--- a/config/locales/ast.yml
+++ b/config/locales/ast.yml
@@ -2,15 +2,28 @@
ast:
about:
about_mastodon_html: Mastodon ye una rede social basada en protocolos abiertos y software de códigu llibre. Ye descentralizada, como'l corréu electrónicu.
+ about_this: Tocante a
+ administered_by: 'Alministráu por:'
+ contact: Contautu
contact_unavailable: N/D
+ extended_description_html: |
+ Un llugar bonu pa les regles
+ Entá nun se configuró la descripción estendida.
features:
+ humane_approach_title: Una visión más humana
+ not_a_product_body: Mastodon nun ye una rede comercial, nun hai anuncios, nun recueye datos o nun pon muries a xardinos. Nin siquier tien una autoridá central.
not_a_product_title: Yes una persona, non un productu
+ real_conversation_title: Fechu pa conversaciones de verdá
+ within_reach_title: Siempres al algame
+ hosted_on: Mastodon ta agospiáu en %{domain}
+ learn_more: Deprendi más
source_code: Códigu fonte
status_count_after: estaos
user_count_after: usuarios
what_is_mastodon: "¿Qué ye Mastodon?"
accounts:
followers: Siguidores
+ moved_html: "%{name} mudóse a %{new_profile_link}:"
network_hidden: Esta información nun ta disponible
nothing_here: "¡Equí nun hai nada!"
people_followed_by: Persones a les que sigue %{name}
@@ -20,19 +33,31 @@ ast:
bot: Robó
admin:
accounts:
+ are_you_sure: "¿De xuru?"
avatar: Avatar
by_domain: Dominiu
domain: Dominiu
+ email: Corréu
followers: Siguidores
ip: IP
+ location:
+ local: Llocal
+ title: Allugamientu
protocol: Protocolu
resend_confirmation:
already_confirmed: Esti usuariu yá ta confirmáu
role: Permisos
roles:
+ admin: Alministrador
moderator: Llendador
+ user: Usuariu
+ title: Cuentes
username: Nome d'usuariu
web: Web
+ action_logs:
+ actions:
+ create_domain_block: "%{name} bloquió'l dominiu %{target}"
+ disable_user: "%{name} desactivó l'aniciu de sesión del usuariu %{target}"
custom_emojis:
by_domain: Dominiu
copy_failed_msg: Nun pudo facese una copia llocal d'esi fustaxe
@@ -40,10 +65,14 @@ ast:
update_failed_msg: Nun pudo anovase esi fustaxe
dashboard:
config: Configuración
+ feature_registrations: Rexistros
features: Carauterístiques
hidden_service: Federación con servicios anubríos
+ recent_users: Usuarios recientes
software: Software
total_users: usuarios en total
+ week_interactions: interaiciones d'esta selmana
+ week_users_new: usuarios d'esta selmana
domain_blocks:
domain: Dominiu
email_domain_blocks:
@@ -55,12 +84,25 @@ ast:
invites:
filter:
available: Disponible
+ expired: Caducó
+ title: Invitaciones
reports:
+ are_you_sure: "¿De xuru?"
id: ID
+ status: Estáu
+ settings:
+ registrations:
+ min_invite_role:
+ disabled: Naide
+ site_description:
+ title: Descipción de la instancia
+ site_title: Nome de la instancia
+ title: Axustes del sitiu
statuses:
failed_to_execute: Fallu al executar
subscriptions:
title: WebSub
+ title: Alministración
admin_mailer:
new_report:
body_remote: Daquién dende %{domain} informó de %{target}
@@ -68,8 +110,10 @@ ast:
salutation: "%{name},"
applications:
invalid_url: La URL apurrida nun ye válida
+ warning: Ten curiáu con estos datos, ¡enxamás nun los compartas con naide!
auth:
change_password: Contraseña
+ delete_account_html: Si deseyes desaniciar la to cuenta, pues siguir equí . Va pidísete la confirmación.
forgot_password: "¿Escaeciesti la contraseña?"
providers:
cas: CAS
@@ -78,19 +122,36 @@ ast:
authorize_follow:
already_following: Yá tas siguiendo a esta cuenta
error: Desafortunadamente, hebo un fallu guetando la cuenta remota
+ follow_request: 'Unviesti una solicitú de siguimientu a:'
+ post_follow:
+ close: O pues zarrar esta ventana.
+ return: Amosar el perfil del usuariu
+ web: Dir a la web
+ datetime:
+ distance_in_words:
+ half_a_minute: Púramente agora
+ less_than_x_seconds: Púramente agora
deletes:
+ bad_password_msg: "¡Bon intentu, crackers! Contraseña incorreuta"
confirm_password: Introduz la contraseña pa verificar la to identidá
errors:
'403': Nun tienes permisu pa ver esta páxina.
'404': La páxina que tabes guetando nun esiste.
'410': La páxina que tabes guetando yá nun esiste.
+ '422':
+ content: Falló la verificación de seguranza. ¿Tas bloquiando les cookies?
+ title: Falló la verificación de seguranza
+ '429': Ficiéronse milenta solicitúes
exports:
archive_takeout:
+ date: Data
+ hint_html: Pues solicitar un archivu colos tos toots y ficheros xubíos . Los datos esportaos van tar nel formatu ActivityPub, llexible pa cualesquier software que seya compatible. Pues solicitar un archivu cada 7 díes.
size: Tamañu
csv: CSV
filters:
contexts:
public: Llinies temporales públiques
+ thread: Conversaciones
followers:
domain: Dominiu
followers_count: Númberu de siguidores
@@ -103,6 +164,7 @@ ast:
'604800': 1 selmana
'86400': 1 día
expires_in_prompt: Enxamás
+ invited_by: 'Convidóte:'
max_uses:
one: 1 usu
other: "%{count} usos"
@@ -120,7 +182,10 @@ ast:
notification_mailer:
digest:
mention: "%{name} mentóte en:"
+ subject:
+ other: "%{count} avisos nuevos dende la última visita \U0001F418"
follow:
+ body: "¡Agora %{name} ta siguiéndote!"
title: Siguidor nuevu
follow_request:
body: "%{name} solicitó siguite"
@@ -133,42 +198,59 @@ ast:
human:
decimal_units:
format: "%n%u"
+ pagination:
+ next: Siguiente
preferences:
languages: Llingües
web: Web
remote_follow:
+ no_account_html: "¿Nun tienes una cuenta? Pues rexistrate equí "
prompt: 'Vas siguir a:'
remote_unfollow:
error: Fallu
sessions:
browser: Restolador
browsers:
+ alipay: Alipay
blackberry: Blackberry
chrome: Chrome
edge: Microsoft Edge
electron: Electron
+ firefox: Firefox
+ generic: Restolador desconocíu
ie: Internet Explorer
micro_messenger: MicroMessenger
opera: Opera
+ otter: Otter
phantom_js: PhantomJS
+ qq: QQ Browser
safari: Safari
uc_browser: UCBrowser
weibo: Weibo
+ current_session: Sesión actual
description: "%{browser} en %{platform}"
ip: IP
platforms:
+ adobe_air: Adobe Air
+ android: Android
blackberry: Blackberry
chrome_os: ChromeOS
firefox_os: Firefox OS
ios: iOS
linux: Linux
mac: Mac
+ other: plataforma desconocida
windows: Windows
windows_mobile: Windows Mobile
windows_phone: Windows Phone
title: Sesiones
settings:
+ authorized_apps: Aplicaciones autorizaes
+ back: Volver a Mastodon
+ edit_profile: Edición del perfil
+ notifications: Avisos
preferences: Preferencies
+ settings: Axustes
statuses:
attached:
image:
@@ -177,6 +259,9 @@ ast:
video:
one: "%{count} videu"
other: "%{count} vídeos"
+ pin_errors:
+ limit: Yá fixesti'l númberu máxiumu de toots
+ show_more: Amosar más
title: "%{name}: «%{quote}»"
stream_entries:
sensitive_content: Conteníu sensible
@@ -185,6 +270,8 @@ ast:
two_factor_authentication:
code_hint: Introduz el códigu xeneráu pola aplicación autenticadora pa confirmar
enabled: L'autenticación en dos pasos ta activada
+ enabled_success: L'autenticación en dos pasos activóse con ésitu
+ manual_instructions: 'Si nun pues escaniar el códigu QR y precises introducilu a mano, equí ta''l secretu en testu planu:'
user_mailer:
welcome:
full_handle_hint: Esto ye lo que-yos diríes a los collacios pa que puean unviate mensaxes o siguite dende otra instancia.
@@ -192,3 +279,4 @@ ast:
tips: Conseyos
users:
invalid_email: La direición de corréu nun ye válida
+ seamless_external_login: Aniciesti sesión pente un serviciu esternu, polo que los axustes de la contraseña y corréu nun tán disponibles.
diff --git a/config/locales/co.yml b/config/locales/co.yml
index 09d470c97..bb0ae8134 100644
--- a/config/locales/co.yml
+++ b/config/locales/co.yml
@@ -5,10 +5,12 @@ co:
about_mastodon_html: Mastodon ghjè una rete suciale custruita incù prutucolli web aperti è lugiziali liberi. Hè decentralizatu cumu l’e-mail.
about_this: À prupositu
administered_by: 'Amministratu da:'
+ api: API
closed_registrations: Pè avà, l’arregistramenti sò chjosi nant’à st’istanza. Mà pudete truvà un’altr’istanza per fà un contu è avè accessu à listessa reta da quallà.
contact: Cuntattu
contact_missing: Mancante
contact_unavailable: Micca dispunibule
+ documentation: Ducumentazione
extended_description_html: |
Una bona piazza per e regule
A descrizzione stesa ùn hè micca stata riempiuta.
@@ -25,9 +27,11 @@ co:
hosted_on: Mastodon allughjatu nant’à %{domain}
learn_more: Amparà di più
other_instances: Lista di l’istanze
+ privacy_policy: Pulitica di vita privata
source_code: Codice di fonte
status_count_after: statuti
status_count_before: chì anu pubblicatu
+ terms: Cundizione di u serviziu
user_count_after: parsone quì
user_count_before: Ci sò
what_is_mastodon: Quale hè Mastodon?
@@ -202,6 +206,25 @@ co:
update_failed_msg: Ùn s’hè micca pussutu mette à ghjornu l’emoji
updated_msg: L’emoji hè stata messa à ghjornu!
upload: Caricà
+ dashboard:
+ config: Cunfigurazione
+ feature_deletions: Sguassamenti di conti
+ feature_invites: Ligami d'invitazione
+ feature_registrations: Arregistramenti
+ feature_relay: Ripetitore di federazione
+ features: Funziunalità
+ hidden_service: Federazione cù servizii piattati
+ open_reports: signalamenti aperti
+ recent_users: Utilizatori ricenti
+ search: Ricerca di testu sanu
+ single_user_mode: Modu utilizatore unicu
+ software: Lugiziale
+ space: Usu di u spaziu
+ total_users: utilizatori in tutale
+ trends: Tindenze
+ week_interactions: interazzione sta settimana
+ week_users_active: attivi sta settimana
+ week_users_new: utilizatori sta settimana
domain_blocks:
add_new: Aghjustà
created_msg: U blucchime di u duminiu hè attivu
@@ -257,6 +280,14 @@ co:
expired: Spirati
title: Filtrà
title: Invitazione
+ relays:
+ add_new: Aghjustà un ripetitore
+ description_html: Un ripetitore di federazione ghjè un servore intermediariu chì manda statuti pubblichi trà l'istanze abbunate. Pò aiutà l'istanze chjuche è mezane à scuprì u cuntinutu di u fediverse senza chì l'utilizatori appianu bisognu di seguità tutti i conti di l'altri servori.
+ enable_hint: Quandu sarà attivatu, u vostru servore hà da seguità i statuti pubblichi di u ripetitore, è mandarà i so statuti pubblichi quallà.
+ inbox_url: URL di u ripetitore
+ setup: Creà una cunnessione cù un ripetitore
+ status: Statutu
+ title: Ripetitori
report_notes:
created_msg: Nota di signalamentu creata!
destroyed_msg: Nota di signalamentu sguassata!
@@ -317,7 +348,7 @@ co:
desc_html: Affissatu nant’a pagina d’accolta quandu l’arregistramenti sò chjosi. Pudete fà usu di u furmattu HTML
title: Missaghju per l’arregistramenti chjosi
deletion:
- desc_html: Auturizà tuttu u mondu di sguassà u so propiu contu
+ desc_html: Auturizà tuttu u mondu à sguassà u so propiu contu
title: Auturizà à sguassà i conti
min_invite_role:
disabled: Nisunu
@@ -332,11 +363,13 @@ co:
desc_html: Mustrerà un badge Squadra nant’à un prufile d’utilizatore
title: Mustrà un badge staff
site_description:
- desc_html: Paragrafu di prisentazione nant’a pagina d’accolta è i marchi meta. Pudete fà usu di marchi HTML, in particulare <a>
è <em>
.
+ desc_html: Paragrafu di prisentazione nant’a pagina d’accolta. Parlate di cio chì rende stu servore speziale, o d'altre cose impurtante. Pudete fà usu di marchi HTML, in particulare <a>
è <em>
.
title: Discrizzione di l’istanza
site_description_extended:
desc_html: Una bona piazza per e regule, infurmazione è altre cose chì l’utilizatori duverìanu sapè. Pudete fà usu di marchi HTML
title: Discrizzione stesa di u situ
+ site_short_description:
+ title: Descrizzione corta di l'istanza
site_terms:
desc_html: Quì pudete scrive e vostre regule di cunfidenzialità, cundizione d’usu o altre menzione legale. Pudete fà usu di marchi HTML
title: Termini persunalizati
@@ -420,7 +453,7 @@ co:
following: 'Eccu! Avà seguitate:'
post_follow:
close: O pudete ancu chjude sta finestra.
- return: Rivultà à u prufile di l’utilizatore
+ return: Vede u prufile di l’utilizatore
web: Andà à l’interfaccia web
title: Siguità %{acct}
datetime:
@@ -470,6 +503,20 @@ co:
follows: Seguitate
mutes: Piattate
storage: I vostri media
+ filters:
+ contexts:
+ notifications: Nutificazione
+ public: Linee pubbliche
+ thread: Cunversazione
+ edit:
+ title: Mudificà u filtru
+ errors:
+ invalid_context: Micca abbastanza cuntestu
+ index:
+ delete: Toglie
+ title: Filtri
+ new:
+ title: Aghjustà un novu filtru
followers:
domain: Duminiu
explanation_html: Per assicuravi di a cunfidenzialità di i vostri statuti, duvete avè primura di quale vi seguita. I vostri statuti privati sò mandati à tutte l’istanze induve avete abbunati . Pensate à u vostru livellu di cunfidenza in i so amministratori.
@@ -482,6 +529,10 @@ co:
true_privacy_html: Ùn vi scurdate chì una vera cunfidenzialità pò solu esse ottenuta cù crittografia da un capu à l’altru .
unlocked_warning_html: Tuttu u mondu pò seguitavi è vede i vostri statuti privati. %{lock_link} per pudè cunfirmà o righjittà abbunamenti.
unlocked_warning_title: U vostru contu hè pubblicu
+ footer:
+ developers: Sviluppatori
+ more: Di più…
+ resources: Risorze
generic:
changes_saved_msg: Cambiamenti salvati!
save_changes: Salvà e mudificazione
@@ -509,6 +560,7 @@ co:
'86400': 1 ghjornu
expires_in_prompt: Mai
generate: Creà
+ invited_by: 'Site statu·a invitatu·a da:'
max_uses:
one: 1 usu
other: "%{count} usi"
@@ -591,6 +643,7 @@ co:
remote_follow:
acct: Entrate u vostru cugnome@istanza da induve vulete siguità stu contu
missing_resource: Ùn avemu pussutu à truvà l’indirizzu di ridirezzione
+ no_account_html: Ùn avete micca un contu? Pudete arregistravi quì
proceed: Cuntinuà per siguità
prompt: 'Avete da siguità:'
remote_unfollow:
@@ -667,6 +720,7 @@ co:
disallowed_hashtags:
one: 'cuntene l’hashtag disattivatu: %{tags}'
other: 'cuntene l’hashtag disattivati: %{tags}'
+ language_detection: Truvà a lingua autumaticamente
open_in_web: Apre nant’à u web
over_character_limit: Site sopr’à a limita di %{max} caratteri
pin_errors:
@@ -696,6 +750,7 @@ co:
time:
formats:
default: "%d %b %Y, %H:%M"
+ month: "%b %Y"
two_factor_authentication:
code_hint: Entrate u codice generatu da l’applicazione per cunfirmà
description_html: S’ella hè attivata l’identificazione à dui fattori , duvete avè u vostru telefuninu pè ottene un codice di cunnezzione.
diff --git a/config/locales/cs.yml b/config/locales/cs.yml
index 27bc793ed..94577249e 100644
--- a/config/locales/cs.yml
+++ b/config/locales/cs.yml
@@ -5,10 +5,12 @@ cs:
about_mastodon_html: Mastodon je sociální síť založená na otevřených webových protokolech a svobodném, otevřeném softwaru. Je decentrovalizovaná jako e-mail.
about_this: O této instanci
administered_by: 'Server spravuje:'
+ api: API
closed_registrations: Registrace na této instanci jsou momentálně uzavřené. Můžete si však najít jinou instanci, vytvořit si na ní účet a získat z ní přístup do naprosto stejné sítě.
contact: Kontakt
contact_missing: Nenastaveno
contact_unavailable: Neuvedeno
+ documentation: Dokumentace
extended_description_html: |
Dobré místo pro pravidla
Rozšířený popis ještě nebyl nastaven.
@@ -25,9 +27,11 @@ cs:
hosted_on: Mastodon hostovaný na %{domain}
learn_more: Zjistit více
other_instances: Seznam instancí
+ privacy_policy: Zásady soukromí
source_code: Zdrojový kód
status_count_after: příspěvků
status_count_before: Kteří napsali
+ terms: Podmínky používání
user_count_after: uživatelů
user_count_before: Domov
what_is_mastodon: Co je Mastodon?
@@ -35,6 +39,7 @@ cs:
follow: Sledovat
followers: Sledovatelé
following: Sleduje
+ joined: Připojil/a se %{date}
media: Média
moved_html: 'Účet %{name} byl přesunut na %{new_profile_link}:'
network_hidden: Tato informace není k dispozici
@@ -42,7 +47,7 @@ cs:
people_followed_by: Lidé, které %{name} sleduje
people_who_follow: Lidé, kteří sledují uživatele %{name}
posts: Tooty
- posts_with_replies: Tooty s odpověďmi
+ posts_with_replies: Tooty a odpovědi
reserved_username: Toto uživatelské jméno je rezervováno
roles:
admin: Administrátor
@@ -137,7 +142,7 @@ cs:
report: nahlášení
targeted_reports: Nahlášení vytvořena o tomto účtu
silence: Utišit
- statuses: Statusy
+ statuses: Příspěvky
subscribe: Odebírat
title: Účty
unconfirmed_email: Nepotvrzený e-mail
@@ -157,7 +162,7 @@ cs:
demote_user: "%{name} degradoval/a uživatele %{target}"
destroy_domain_block: "%{name} odblokoval/a doménu %{target}"
destroy_email_domain_block: "%{name} odebral/a e-mailovou doménu %{target} z černé listiny"
- destroy_status: "%{name} odstranil/a status uživatele %{target}"
+ destroy_status: "%{name} odstranil/a příspěvek uživatele %{target}"
disable_2fa_user: "%{name} vypnul/a požadavek pro dvoufaktorovou autentikaci pro uživatele %{target}"
disable_custom_emoji: "%{name} zakázal/a emoji %{target}"
disable_user: "%{name} zakázal/a přihlašování pro uživatele %{target}"
@@ -175,7 +180,7 @@ cs:
unsilence_account: "%{name} odtišil/a účet uživatele %{target}"
unsuspend_account: "%{name} zrušil/a suspenzaci účtu uživatele %{target}"
update_custom_emoji: "%{name} aktualizoval/a emoji %{target}"
- update_status: "%{name} aktualizoval/a status uživatele %{target}"
+ update_status: "%{name} aktualizoval/a příspěvek uživatele %{target}"
title: Záznam auditu
custom_emojis:
by_domain: Doména
@@ -327,7 +332,7 @@ cs:
view: Zobrazit
settings:
activity_api_enabled:
- desc_html: Počty lokálně publikovaných statusů, aktivních uživatelů a nových registrací, v týdenních intervalech
+ desc_html: Počty lokálně publikovaných příspěvků, aktivních uživatelů a nových registrací, v týdenních intervalech
title: Publikovat hromadné statistiky o uživatelské aktivitě
bootstrap_timeline_accounts:
desc_html: Je-li uživatelskch jmen více, oddělujte je čárkami. Lze zadat pouze místní a odemknuté účty. Je-li tohle prázdné, jsou výchozí hodnotou všichni místní administrátoři.
@@ -364,11 +369,14 @@ cs:
desc_html: Zobrazit na stránce uživatele odznak člena personálu
title: Zobrazit odznak personálu
site_description:
- desc_html: Úvodní odstavec na hlavní straně a v meta značkách. Můžete zde používat HTML značky, hlavně <a>
a <em>
.
+ desc_html: Úvodní odstavec na hlavní straně. Popište, díky čemu je tento server Mastodon zvláštní, a cokoliv jiného, co je důležité. Můžete zde používat HTML značky, hlavně <a>
a <em>
.
title: Popis instance
site_description_extended:
desc_html: Dobré místo pro vaše pravidla, pokyny a jiné věci, které vaši instanci odlišují od ostatních. Lze použít HTML značky
- title: Vlastní doplňujísí informace
+ title: Vlastní doplňující informace
+ site_short_description:
+ desc_html: Zobrazen v postranním panelu a meta značkách. Popište, co je Mastodon a díky čemu je tento server zvláštní v jediném odstavci. Je-li tohle prázdné, zobrazí se popis instance.
+ title: Krátký popis instance
site_terms:
desc_html: Můžete si napsat vlastní zásady soukromí, podmínky používání či jiné legality. Můžete použít HTML značky
title: Vlastní podmínky používání
@@ -390,7 +398,7 @@ cs:
media:
title: Média
no_media: Žádná média
- title: Statusy účtů
+ title: Příspěvky účtu
with_media: S médii
subscriptions:
callback_url: Zpáteční URL
@@ -411,7 +419,7 @@ cs:
settings: 'Změnit volby e-mailu: %{link}'
view: 'Zobrazit:'
view_profile: Zobrazit profil
- view_status: Zobrazit status
+ view_status: Zobrazit příspěvek
applications:
created: Aplikace úspěšně vytvořena
destroyed: Aplikace úspěšně smazána
@@ -520,7 +528,7 @@ cs:
title: Přidat nový filtr
followers:
domain: Doména
- explanation_html: Chcete-li zaručit soukromí vašich statusů, musíte mít na vědomí, kdo vás sleduje. Vaše soukromé statusy jsou doručeny na všechny instance, kde máte sledovatele . Nejspíš si je budete chtít zkontrolovat a odstranit sledovatele na instancích, jejichž personálu či softwaru nedůvěřujete s respektováním vašeho soukromí.
+ explanation_html: Chcete-li zaručit soukromí vašich příspěvků, musíte mít na vědomí, kdo vás sleduje. Vaše soukromé příspěvky jsou doručeny na všechny instance, kde máte sledovatele . Nejspíš si je budete chtít zkontrolovat a odstranit sledovatele na instancích, jejichž personálu či softwaru nedůvěřujete s respektováním vašeho soukromí.
followers_count: Počet sledovatelů
lock_link: Zamkněte svůj účet
purge: Odstranit ze sledovatelů
@@ -528,8 +536,12 @@ cs:
one: V průběhu utišování sledovatelů z jedné domény...
other: V průběhu utišování sledovatelů z %{count} domén...
true_privacy_html: Berte prosím na vědomí, že skutečného soukromí se dá dosáhnout pouze za pomoci end-to-end šifrování .
- unlocked_warning_html: Kdokoliv vás může sledovat a okamžitě vidět vaše soukromé statusy. %{lock_link}, abyste mohl/a zkontrolovat a odmítnout sledovatele.
+ unlocked_warning_html: Kdokoliv vás může sledovat a okamžitě vidět vaše soukromé příspěvky. %{lock_link}, abyste mohl/a zkontrolovat a odmítnout sledovatele.
unlocked_warning_title: Váš účet není zamknutý
+ footer:
+ developers: Vývojáři
+ more: Více…
+ resources: Zdroje
generic:
changes_saved_msg: Změny byly úspěšně uloženy!
save_changes: Uložit změny
@@ -572,7 +584,7 @@ cs:
limit: Dosáhl/a jste maximálního počtu seznamů
media_attachments:
validations:
- images_and_video: Ke statusu, který již obsahuje obrázky, nelze připojit video
+ images_and_video: K příspěvku, který již obsahuje obrázky, nelze připojit video
too_many: Nelze připojit více než 4 soubory
migrations:
acct: přezdívka@doména nového účtu
@@ -594,8 +606,8 @@ cs:
other: "%{count} nových oznámení od vaší poslední návštěvy \U0001F418"
title: Ve vaší absenci...
favourite:
- body: 'Váš status si oblíbil/a %{name}:'
- subject: "%{name} si oblíbil/a váš status"
+ body: 'Váš příspěvek si oblíbil/a %{name}:'
+ subject: "%{name} si oblíbil/a váš příspěvek"
title: Nové oblíbení
follow:
body: "%{name} vás nyní sleduje!"
@@ -612,8 +624,8 @@ cs:
subject: Byl/a jste zmíněn/a uživatelem %{name}
title: Nová zmínka
reblog:
- body: 'Váš status byl boostnutý uživatelem %{name}:'
- subject: "%{name} boostnul/a váš status"
+ body: 'Váš příspěvek byl boostnutý uživatelem %{name}:'
+ subject: "%{name} boostnul/a váš příspěvek"
title: Nové boostnutí
number:
human:
@@ -624,7 +636,7 @@ cs:
million: mil
quadrillion: bld
thousand: tis
- trillion: T
+ trillion: bil
pagination:
newer: Novější
next: Starší
@@ -827,6 +839,7 @@ cs:
time:
formats:
default: "%d. %b %Y, %H:%M"
+ month: "%b %Y"
two_factor_authentication:
code_hint: Pro potvrzení zadejte kód vygenerovaný vaší autentikační aplikací
description_html: Povolíte-li dvoufaktorové ověřování , budete při přihlášení potřebovat telefon, který vám vygeneruje přístupové tokeny, které musíte zadat.
diff --git a/config/locales/da.yml b/config/locales/da.yml
index 2b6207de6..54da05aa8 100644
--- a/config/locales/da.yml
+++ b/config/locales/da.yml
@@ -5,10 +5,12 @@ da:
about_mastodon_html: Mastodon er et socialt netværk der er baseret på åbne web protokoller og frit, open-source source software. Der er decentraliseret ligesom e-mail tjenester.
about_this: Om
administered_by: 'Administreret af:'
+ api: API
closed_registrations: Registreringer er på nuværrende tidspunkt lukkede for denne instans. Du kan dog finde andre instanser du kan oprette dig på og få adgang til det samme netværk derfra.
contact: Kontakt
contact_missing: Ikke sat
contact_unavailable: Ikke tilgængeligt
+ documentation: Dokumentation
extended_description_html: |
Et godt sted for regler
Den udvidede beskrivelse er endnu ikke blevet opsat.
@@ -25,9 +27,11 @@ da:
hosted_on: Mostodon hostet på %{domain}
learn_more: Lær mere
other_instances: Liste over instanser
+ privacy_policy: Privatlivspolitik
source_code: Kildekode
status_count_after: statusser
status_count_before: Som har skrevet
+ terms: Vilkår for service
user_count_after: brugere
user_count_before: Hjem til
what_is_mastodon: Hvad er Mastodon?
@@ -35,15 +39,16 @@ da:
follow: Følg
followers: Følgere
following: Følger
+ joined: Tilmeldt den %{date}
media: Multimedia
moved_html: "%{name} er flyttet til %{new_profile_link}:"
network_hidden: Denne information er ikke tilgængelig
nothing_here: Der er intet her!
- people_followed_by: Folk some %{name} følger
+ people_followed_by: Folk som %{name} følger
people_who_follow: Folk der følger %{name}
- posts: Dyt
- posts_with_replies: Toots og svar
- reserved_username: Brugernavnet er reserveret
+ posts: Trut
+ posts_with_replies: Trut og svar
+ reserved_username: Brugernavnet er allerede taget
roles:
admin: Administrator
bot: Robot
@@ -51,7 +56,7 @@ da:
unfollow: Følg ikke længere
admin:
account_moderation_notes:
- create: Læg en kommentar
+ create: Læg en note
created_msg: Moderator notat succesfuldt oprettet!
delete: Slet
destroyed_msg: Moderator notat succesfuldt destrueret!
@@ -133,8 +138,8 @@ da:
search: Søg
shared_inbox_url: Link til delt indbakke
show:
- created_reports: Rapporter oprettet af denne konto
- report: rapporter
+ created_reports: Anmeldelser oprettet af denne konto
+ report: anmeld
targeted_reports: Anmeldelser fra denne konto
silence: Dæmp
statuses: Statusser
@@ -208,10 +213,13 @@ da:
feature_deletions: Konto sletninger
feature_invites: Invitations links
feature_registrations: Registreringer
+ feature_relay: Føderations relæ
features: Funktioner
+ hidden_service: Føderation med skjulte tjenester
open_reports: åbne anmeldelser
recent_users: Seneste brugere
search: Søg på fuld tekst
+ single_user_mode: Enkelt bruger mode
software: Software
space: Brugt lagerplads
title: Betjeningspanel
@@ -252,7 +260,9 @@ da:
undo: Fortryd
email_domain_blocks:
add_new: Tilføj ny
+ created_msg: Tilføjede succesfuldt email domænet til sortliste
delete: Slet
+ destroyed_msg: Fjernede succesfuldt email domænet fra sortliste
domain: Domæne
new:
create: Tilføj domæne
@@ -336,6 +346,8 @@ da:
title: Vis personale emblem
site_description:
title: Beskrivelse af instans
+ site_short_description:
+ title: Kort beskrivelse af instans
site_title: Navn på instans
timeline_preview:
desc_html: Vis offentlig tidslinje på landingssiden
@@ -371,6 +383,8 @@ da:
view_profile: Se profil
view_status: Se status
applications:
+ created: Applikation blev oprettet
+ destroyed: Applikation er blevet slettet
invalid_url: Det angivne URL er ugyldigt
warning: Vær meget forsigtig med disse data. Del dem aldrig med nogen!
auth:
@@ -458,9 +472,16 @@ da:
lock_link: Lås din konto
purge: Fjern fra følgere
unlocked_warning_title: Din konto er ikke låst
+ footer:
+ developers: Udviklere
+ more: Mere…
+ resources: Ressourcer
generic:
changes_saved_msg: Ændringerne blev gemt!
save_changes: Gem ændringer
+ validation_errors:
+ one: Der er noget der ikke er helt som det bør være! Tag lige et kig på følgende fejl forneden
+ other: Der er noget der ikke er helt som det bør være! Tag lige et kig på følgende %{count} fejl forneden
imports:
types:
blocking: Blokeringsliste
@@ -505,6 +526,11 @@ da:
digest:
action: Se alle notifikationer
mention: "%{name} nævnte dig i:"
+ new_followers_summary:
+ other: Du har også fået %{count} nye følgere mens du var væk! Fantastisk!
+ subject:
+ one: "1 ny notifikation siden du sidst var her \U0001F418"
+ other: "%{count} nye notifikationer siden du sidst var her \U0001F418"
title: Mens du var væk...
favourite:
body: 'Din status blev favoriseret af %{name}:'
@@ -538,6 +564,10 @@ da:
other: Andet
publishing: Offentligører
web: Web
+ remote_follow:
+ no_account_html: Har du ikke en konto? Du kan oprette dig her
+ proceed: Fortsæt for at følge
+ prompt: 'Du er ved at følge:'
remote_unfollow:
error: Fejl
title: Titel
@@ -582,6 +612,7 @@ da:
video:
one: "%{count} video"
other: "%{count} videoer"
+ boosted_from_html: Fremhævet fra %{acct_link}
content_warning: 'Advarsel om indhold: %{warning}'
language_detection: Opfang automatisk sprog
pin_errors:
@@ -603,6 +634,9 @@ da:
contrast: Høj kontrast
default: Mastodon
mastodon-light: Mastodon (lys)
+ time:
+ formats:
+ month: "%b %Y"
two_factor_authentication:
code_hint: Indtast koden der er genereret af din app for at bekræfte
disable: Deaktiver
diff --git a/config/locales/de.yml b/config/locales/de.yml
index 24ee095be..8c221e957 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -5,10 +5,12 @@ de:
about_mastodon_html: Mastodon ist ein soziales Netzwerk. Es basiert auf offenen Web-Protokollen und freier, quelloffener Software. Es ist dezentral (so wie E-Mail!).
about_this: Über diese Instanz
administered_by: 'Administriert von:'
+ api: API
closed_registrations: Die Registrierung auf dieser Instanz ist momentan geschlossen. Aber du kannst dein Konto auch auf einer anderen Instanz erstellen! Von dort hast du genauso Zugriff auf das Mastodon-Netzwerk.
contact: Kontakt
contact_missing: Nicht angegeben
contact_unavailable: N/A
+ documentation: Dokumentation
extended_description_html: |
Ein guter Platz für Regeln
Die erweiterte Beschreibung wurde noch nicht aufgesetzt.
@@ -25,9 +27,11 @@ de:
hosted_on: Mastodon, beherbergt auf %{domain}
learn_more: Mehr erfahren
other_instances: Andere Instanzen
+ privacy_policy: Datenschutzbestimmungen
source_code: Quellcode
status_count_after: Beiträge verfassten
status_count_before: die
+ terms: Nutzungsbedingungen
user_count_after: Wesen
user_count_before: Zuhause für
what_is_mastodon: Was ist Mastodon?
@@ -35,6 +39,7 @@ de:
follow: Folgen
followers: Folgende
following: Folgt
+ joined: Beigetreten am %{date}
media: Medien
moved_html: "%{name} ist auf %{new_profile_link} umgezogen:"
network_hidden: Diese Informationen sind nicht verfügbar
@@ -205,14 +210,24 @@ de:
dashboard:
backlog: Unerledigte Jobs
config: Konfiguration
+ feature_deletions: Kontolöschung
feature_invites: Einladungslinks
feature_registrations: Registrierung
+ feature_relay: Föderations-Relay
features: Eigenschaften
+ hidden_service: Föderation mit versteckten Diensten
open_reports: Offene Meldungen
+ recent_users: Neueste Nutzer
search: Volltextsuche
+ single_user_mode: Einzelnutzermodus
+ software: Software
space: Speicherverbrauch
title: Übersicht
total_users: Benutzer Insgesamt
+ trends: Tendenz
+ week_interactions: Interaktionen diese Woche
+ week_users_active: Aktiv diese Woche
+ week_users_new: Benutzer diese Woche
domain_blocks:
add_new: Neu hinzufügen
created_msg: Die Domain-Blockade wird nun durchgeführt
@@ -270,6 +285,12 @@ de:
title: Einladungen
relays:
add_new: Neues Relay hinzufügen
+ description_html: Ein Föderierungsrelay ist ein vermittelnder Server, der eine große Anzahl öffentlicher Beiträge zwischen Servern austauscht, die es abonnieren und zu ihm veröffentlichen. Es kann kleinen und mittleren Servern dabei helfen, Inhalte des Fediverse zu entdecken , was andernfalls das manuelle Folgen anderer Leute auf entfernten Servern durch lokale Nutzer erfordern würde.
+ enable_hint: Sobald aktiviert wird dein Server alle öffentlichen Beiträge dieses Relays abonnieren und wird alle öffentlichen Beiträge dieses Servers an es senden.
+ inbox_url: Relay-URL
+ setup: Relayverbindung einrichten
+ status: Status
+ title: Relays
report_notes:
created_msg: Meldungs-Kommentar erfolgreich erstellt!
destroyed_msg: Meldungs-Kommentar erfolgreich gelöscht!
@@ -325,6 +346,9 @@ de:
peers_api_enabled:
desc_html: Domain-Namen dieser Instanz, die im Fediverse gefunden wurden
title: Veröffentliche Liste von gefundenen Instanzen
+ preview_sensitive_media:
+ desc_html: Linkvorschauen auf anderen Webseiten werden ein Vorschaubild anzeigen, obwohl die Medien als heikel gekennzeichnet sind
+ title: Heikle Medien in OpenGraph-Vorschauen anzeigen
registrations:
closed_message:
desc_html: Wird auf der Frontseite angezeigt, wenn die Registrierung geschlossen ist. Du kannst HTML-Tags benutzen
@@ -345,11 +369,14 @@ de:
desc_html: Zeige Mitarbeiter-Badge auf Benutzerseite
title: Zeige Mitarbeiter-Badge
site_description:
- desc_html: Wird als Absatz auf der Frontseite angezeigt und als Meta-Tag benutzt. Du kannst HTML-Tags benutzen, insbesondere <a>
und <em>
.
+ desc_html: Einleitungsabschnitt auf der Frontseite. Beschreibe, was diese Mastodon-Instanz ausmacht. Du kannst HTML-Tags benutzen, insbesondere <a>
und <em>
.
title: Beschreibung der Instanz
site_description_extended:
desc_html: Bietet sich für Verhaltenskodizes, Regeln, Richtlinien und weiteres an, was deine Instanz auszeichnet. Du kannst HTML-Tags benutzen
title: Erweiterte Beschreibung der Instanz
+ site_short_description:
+ desc_html: Wird angezeigt in der Seitenleiste und in Meta-Tags. Beschreibe in einem einzigen Abschnitt, was Mastodon ist und was diesen Server ausmacht. Falls leer, wird die Instanz-Beschreibung verwendet.
+ title: Kurze Instanz-Beschreibung
site_terms:
desc_html: Hier kannst du deine eigenen Geschäftsbedingungen, Datenschutzerklärung und anderes rechtlich Relevante eintragen. Du kannst HTML-Tags benutzen
title: Eigene Geschäftsbedingungen
@@ -511,6 +538,10 @@ de:
true_privacy_html: Bitte beachte, dass wirklicher Schutz deiner Privatsphäre nur durch Ende-zu-Ende-Verschlüsselung erreicht werden kann. .
unlocked_warning_html: Wer dir folgen will, kann dies jederzeit ohne deine vorige Einverständnis tun und erhält damit automatisch Zugriff auf deine privaten Beiträge. Wenn du %{lock_link}, kannst du vorab entscheiden, wer dir folgen darf und wer nicht.
unlocked_warning_title: Dein Konto ist nicht gesperrt
+ footer:
+ developers: Entwickler
+ more: Mehr…
+ resources: Ressourcen
generic:
changes_saved_msg: Änderungen gespeichert!
save_changes: Änderungen speichern
@@ -720,6 +751,89 @@ de:
reblogged: teilte
sensitive_content: Heikle Inhalte
terms:
+ body_html: |
+ Datenschutzerklärung
+ Welche Informationen sammeln wir?
+
+
+ Grundlegende Kontoinformationen : Wenn du dich auf diesem Server registrierst, wirst du darum gebeten, einen Benutzernamen, eine E-Mail-Adresse und ein Passwort einzugeben. Du kannst auch zusätzliche Profilinformationen wie etwa einen Anzeigenamen oder eine Biografie eingeben und ein Profilbild oder ein Headerbild hochladen. Der Benutzername, der Anzeigename, die Biografie, das Profilbild und das Headerbild werden immer öffentlich angezeigt.
+ Beiträge, Folge- und andere öffentliche Informationen : Die Liste der Leute, denen du folgst, wird öffentlich gezeigt, das gleiche gilt für deine Folgenden (Follower). Sobald du eine Nachricht übermittelst, wird das Datum und die Uhrzeit gemeinsam mit der Information, welche Anwendung du dafür verwendet hast, gespeichert. Nachricht können Medienanhänge enthalten, etwa Bilder und Videos. Öffentliche und ungelistete Beiträge sind öffentlich verfügbar. Sobald du einen Beitrag auf deinem Profil featurest, sind dies auch öffentlich verfügbare Informationen. Deine Beiträge werden an deine Folgenden ausgeliefert, was in manchen Fällen bedeutet, dass sie an andere Server ausgeliefert werden und dort Kopien gespeichert werden. Sobald du Beiträge löschst, wird dies ebenso an deine Follower ausgeliefert. Die Handlungen des Teilens und Favorisieren eines anderen Beitrages ist immer öffentlich.
+ Direkte und "Nur Folgende"-Beiträge : Alle Beiträge werden auf dem Server gespeichert und verarbeitet. "Nur Folgende"-Beiträge werden an deine Folgenden und an Benutzer, die du in ihnen erwähnst, ausgeliefert, direkte Beiträge nur an in ihnen erwähnte Benutzer. In manchen Fällen bedeutet dass, dass sie an andere Server ausgeliefert werden und dort Kopien gespeichert werden. Wir bemühen uns nach bestem Wissen und Gewissen, den Zugriff auf diese Beiträge auf nur autorisierte Personen einzuschränken, jedoch könnten andere Server dabei scheitern. Deswegen ist es wichtig, die Server, zu denen deine Folgenden gehören, zu überprüfen. Du kannst eine Option in den Einstellungen umschalten, um neue Folgenden manuell anzunehmen oder abzuweisen. Bitte beachte, dass die Betreiber des Server und jedes empfangenden Servers solche Nachrichten anschauen könnten und dass Empfänger von diesen eine Bildschirmkopie erstellen könnten, sie kopieren oder anderweitig weiterverteilen könnten. Teile nicht irgendwelche gefährlichen Informationen über Mastodon.
+ Internet Protocol-Adressen (IP-Adressen) und andere Metadaten : Sobald du dich anmeldest, erfassen wir sowohl die IP-Adresse, von der aus du dich anmeldest, als auch den Namen deine Browseranwendung. Alle angemeldeten Sitzungen (Sessions) sind für deine Überprüfung und Widerruf in den Einstellungen verfügbar. Die letzte verwendete IP-Adresse wird bis zu 12 Monate lang gespeichert. Wir könnten auch Serverprotokoll behalten, welche die IP-Adresse von jeder Anfrage an unseren Server enthalten.
+
+
+
+
+ Für was verwenden wir deine Informationen?
+
+ Jede der von dir gesammelten Information kann in den folgenden Weisen verwendet werden:
+
+
+ Um die Kernfunktionalität von Mastodon bereitzustellen. Du kannst du mit dem Inhalt anderer Leute interagieren und deine eigenen Inhalte beitragen, wenn du angemeldet bist. Zum Beispiel kannst du anderen folgen, um deren kombinierten Beiträge in deine personalisierten Start-Timeline zu sehen.
+ Um Moderation der Community zu ermöglichen, zum Beispiel beim Vergleichen deiner IP-Adresse mit anderen bekannten, um Verbotsumgehung oder andere Vergehen festzustellen.
+ Die E-Mail-Adresse, die du bereitstellst, kann dazu verwendet werden, dir Informationen, Benachrichtigungen über andere Leute, die mit deinen Inhalten interagieren oder dir Nachrichten senden, und auf Anfragen, Wünsche und/oder Fragen zu antworten.
+
+
+
+
+ Wie beschützen wir deine Informationen?
+
+ Wir implementieren eine Reihe von Sicherheitsmaßnahmen, um die Sicherheit deiner persönlichen Information sicherzustellen, wenn du persönliche Informationen eingibst, übermittelst oder auf sie zugreifst. Neben anderen Dingen, wird sowohl deine Browsersitzung, als auch der Datenverkehr zischen deinen Anwendungen und der Programmierschnittstelle (API) mit SSL gesichert, dein Passwort wird mit einem starken Einwegalgorithmus gehasht. Du kannst Zwei-Faktor-Authentifizierung aktivieren, um den Zugriff auf dein Konto zusätzlich abzusichern.
+
+
+
+ Was ist unsere Datenspeicherungsrichtlinie?
+
+ Wir werden mit bestem Wissen und Gewissen:
+
+
+ Serverprotokolle, die IP-Adressen von allen deinen Anfragen an diesen Server, falls solche Protokolle behalten werden, für nicht mehr als 90 Tage behalten.
+ registrierten Benutzern zu geordnete IP-Adressen nicht länger als 12 Monate behalten.
+
+
+ Du kannst ein Archiv deines Inhalts anfordern und herunterladen, inkludierend deiner Beiträge, Medienanhänge, Profilbilder und Headerbilder.
+
+ Du kannst dein Konto unwiderruflich jederzeit löschen.
+
+
+
+ Verwenden wir Cookies?
+
+ Ja. Cookies sind kleine Dateien, die eine Webseite oder ihr Serviceanbieter über deinen Webbrowser (sofern er es erlaubt) auf die Festplatte deines Computers überträgt. Diese Cookies ermöglichen es der Seite deinen Browser wiederzuerkennen und, sofern du ein registriertes Konto hast, diesen mit deinem registrierten Konto zu verknüpfen.
+
+ Wir verwenden Cookies, um deine Einstellungen zu verstehen und für zukünftige Besuche zu speichern.
+
+
+
+ Offenbaren wir Informationen an Dritte?
+
+ Wir verkaufen nicht, handeln nicht mit oder übertragen deine persönlich identifizierbaren Informationen nicht an Dritte. Dies beinhaltet nicht Dritte, die vertrauenswürdig sind und uns beim Betreiben unserer Seite, Leiten unseres Geschäftes oder dabei, die Dienste für dich bereitzustellen, unterstützen, sofern diese Dritte zustimmen, diese Informationen vertraulich zu halten. Wir können auch Informationen freigeben, wenn wir glauben, dass Freigabe angemessen ist, um dem Gesetz zu entsprechen, unsere Seitenrichtlinien durchzusetzen oder unsere Rechte, Eigentum und/oder Sicherheit oder die anderer zu beschützen.
+
+ Dein öffentlicher Inhalt kann durch andere Server im Netzwerk heruntergeladen werden. Deine öffentlichen und "Nur Folgende"-Beiträge werden an die Server ausgeliefert, bei denen sich deine Folgenden befinden und direkte Nachrichten werden an die Server des Empfängers ausgeliefert, falls diese Folgenden oder Empfänger sich auf einem anderen Server als diesen befinden.
+
+ Wenn du eine Anwendung autorisierst, dein Konto zu benutzen, kann diese – abhängig von den von dir genehmigten Befugnissen – auf deine öffentlichen Profilinformationen, deine Folgt- und Folgende-Liste, deine Listen, alle deine Beiträge und deine Favoriten zugreifen. Anwendungen können nie auf deine E-Mail-Adresse oder dein Passwort zugreifen
+
+
+
+ Webseitenbenutzung durch Kinder
+
+ Wenn sich dieser Server in der EU oder im Europäischen Wirtschaftsraum befinden: Unsere Website, Produkte und Dienstleistungen sind alle an Leute gerichtet, die mindestens 16 Jahre als sind. Wenn du unter 16 bist, darfst du nach den Bestimmungen der DSGVO (Datenschutz-Grundverordnung ) diese Webseite nicht benutzen.
+
+ Wenn sich dieser Server in den USA befindet: Unsere Webseite, Produkte und Dienstleistungen sind alle an Leute gerichtet, die mindestens 13 Jahre alt sind. Wenn du unter 13 bist, darfst du nach den Bestimmungen des COPPA (Children's Online Privacy Protection Act, dt. "Gesetz zum Schutz der Privatsphäre von Kindern im Internet" ) diese Webseite nicht benutzen.
+
+ Gesetzesvorschriften können unterschiedlich sein, wenn sich dieser Server in anderer Gerichtsbarkeit befindet.
+
+
+
+ Änderung an unserer Datenschutzerklärung
+
+ Wenn wir uns entscheiden, Änderungen an unserer Datenschutzerklärung vorzunehmen, werden wird diese Änderungen auf dieser Seite bekannt geben.
+
+ Dies ist eine Übersetzung, Irrtümer und Übersetzungsfehler vorbehalten. Im Zweifelsfall gilt die englische Originalversion
+
+ Dieses Dokument ist CC-BY-SA. Es wurde zuletzt aktualisiert am 7. März 2018.
+
+ Ursprünglich übernommen von der Discourse-Datenschutzerklärung .
title: "%{instance} Nutzungsbedingungen und Datenschutzerklärung"
themes:
contrast: Hoher Kontrast
@@ -728,6 +842,7 @@ de:
time:
formats:
default: "%d.%m.%Y %H:%M"
+ month: "%b %Y"
two_factor_authentication:
code_hint: Gib zur Bestätigung den Code ein, den deine Authenticator-App generiert hat
description_html: Wenn du Zwei-Faktor-Authentisierung (2FA) aktivierst, wirst du dein Telefon zum Anmelden benötigen. Darauf werden Tokens erzeugt, die du bei der Anmeldung eingeben musst.
diff --git a/config/locales/devise.cs.yml b/config/locales/devise.cs.yml
index 19593cbac..49814b368 100644
--- a/config/locales/devise.cs.yml
+++ b/config/locales/devise.cs.yml
@@ -34,9 +34,49 @@ cs:
title: Heslo bylo změněno
reconfirmation_instructions:
explanation: Potvrďte novou adresu pro změnu e-mailu.
- extra: Pokud jste tuto akci nevyžádal/a vy, prosím ignorujte tento e-mail. E-mailová adresa nebude změněna, dokud nepřejdete na výše uvedenou adresu.
+ extra: Pokud jste tuto změnu nevyžádal/a vy, prosím ignorujte tento e-mail. E-mailová adresa nebude změněna, dokud nepřejdete na výše uvedenou adresu.
subject: 'Mastodon: Potvrďte e-mail pro %{instance}'
title: Ověřit e-mailovou adresu
reset_password_instructions:
action: Změnit heslo
explanation: Vyžádal/a jste si pro svůj účet nové heslo.
+ extra: Pokud jste tohle nevyžádal/a, prosím ignorujte tento e-mail. Vaše heslo nebude změněno, dokud nepřejdete na výše uvedenou adresu a nevytvoříte si nové.
+ subject: 'Mastodon: Instrukce pro obnovu hesla'
+ title: Obnovení hesla
+ unlock_instructions:
+ subject: 'Mastodon: Instrukce pro odemčení účtu'
+ omniauth_callbacks:
+ failure: Nelze vás ověřit z %{kind}, protože "%{reason}".
+ success: Úspěšně ověřeno z účtu %{kind}.
+ passwords:
+ no_token: Tuto stránku nemůžete navštívit, pokud nepřicházíte z e-mailu pro obnovu hesla. Pokud jste z něj přišel/la, ujistěte se, že jste použil/a celé URL z e-mailu.
+ send_instructions: Pokud vaše e-mailová adresa existuje v naší databázi, obdržíte za pár minut ve vašem e-mailu odkaz pro obnovení hesla. Prosím zkontrolujte si složku spam, jestli jste tento e-mail neobdržel/a.
+ send_paranoid_instructions: Pokud vaše e-mailová adresa existuje v naší databázi, obdržíte za pár minut ve vašem e-mailu odkaz pro obnovení hesla. Prosím zkontrolujte si složku spam, jestli jste tento e-mail neobdržel/a.
+ updated: Vaše heslo bylo úspěšně změněno. Nyní jste přihlášen/a.
+ updated_not_active: Vaše heslo bylo úspěšně změněno.
+ registrations:
+ destroyed: Sbohem! Váš účet byl úspěšně zrušen. Doufáme, že vás opět brzy uvidíme.
+ signed_up: Vítejte! Registroval/a jste se úspěšně.
+ signed_up_but_inactive: Registroval/a jste se úspěšně. Nemohli jsme vás však přihlásit, protože váš účet ještě není aktivován.
+ signed_up_but_locked: Registroval/a jste se úspěšně. Nemohli jsme vás však přihlásit, protože váš účet je uzamčen.
+ signed_up_but_unconfirmed: Na vaši e-mailovou adresu byla poslána zpráva s potvrzovacím odkazem. Pro aktivaci účtu přejděte na danou adresu. Prosím zkontrolujte si složku spam, jestli jste tento e-mail neobdržel/a.
+ update_needs_confirmation: Váš účet byl úspěšně aktualizován, ale je potřeba ověřit vaši novou e-mailovou adresu. Prosím zkontrolujte si e-mail a klikněte na odkaz pro potvrzení vaši nové e-mailové adresy. Prosím zkontrolujte si složku spam, jestli jste tento e-mail neobdržel/a.
+ updated: Váš účet byl úspěšně aktualizován.
+ sessions:
+ already_signed_out: Odhlášení proběhlo úspěšně.
+ signed_in: Přihlášení proběhlo úspěšně.
+ signed_out: Odhlášení proběhlo úspěšně.
+ unlocks:
+ send_instructions: Za pár minut obdržíte e-mail s instrukcemi pro odemčení vašeho účtu. Prosím zkontrolujte si složku spam, jestli jste tento e-mail neobdržel/a.
+ send_paranoid_instructions: Pokud váš účet existuje, obdržíte za pár minut e-mail s instrukcemi pro odemčení vašeho účtu. Prosím zkontrolujte si složku spam, jestli jste tento e-mail neobdržel/a.
+ unlocked: Váš účet byl úspěšně odemčen. Pro pokračování se prosím přihlaste.
+ errors:
+ messages:
+ already_confirmed: byl již potvrzen, prosím zkuste se přihlásit
+ confirmation_period_expired: musí být potvrzen do %{period}, prosím vyžádejte si nový
+ expired: vypršel, prosím vyžádejte si nový
+ not_found: nenalezen
+ not_locked: nebyl uzamčen
+ not_saved:
+ one: '1 chyba zabránila uložení tohoto %{resource}:'
+ other: "%{count} chyb zabránila uložení tohoto %{resource}:"
diff --git a/config/locales/doorkeeper.co.yml b/config/locales/doorkeeper.co.yml
index 52777eaf0..542ad7c57 100644
--- a/config/locales/doorkeeper.co.yml
+++ b/config/locales/doorkeeper.co.yml
@@ -114,7 +114,29 @@ co:
application:
title: Auturizazione OAuth riquestata
scopes:
- follow: bluccà, sbluccà, è reghje l’abbunamenti
- push: Riceve nutificazione push per u vostru contu
- read: leghje l’infurmazione di u vostru contu
- write: mandà missaghji per voi
+ follow: Mudificà rilazione trà i conti
+ push: Riceve e vostre nutificazione push
+ read: leghje tutte l’infurmazioni di u vostru contu
+ read:accounts: Vede l'infurmazione di i conti
+ read:blocks: vede i vostri blucchimi
+ read:favourites: vede i vostri favuriti
+ read:filters: vede i vostri filtri
+ read:follows: vede i vostri abbunamenti
+ read:lists: vede e vostre liste
+ read:mutes: vede i vostri piattati
+ read:notifications: vede e vostre nutificazione
+ read:reports: vede i vostri signalamenti
+ read:search: ricercà per voi
+ read:statuses: vede tutti i statuti
+ write: mudificà i dati di u vostru contu
+ write:accounts: mudificà u prufile
+ write:blocks: bluccà conti è dumini
+ write:favourites: aghjustà statuti à i favuriti
+ write:filters: creà filtri
+ write:follows: siguità conti
+ write:lists: creà liste
+ write:media: caricà fugliali media
+ write:mutes: piattà persone è cunversazione
+ write:notifications: sguassà e nutificazione
+ write:reports: palisà altre persone
+ write:statuses: pubblicà statuti
diff --git a/config/locales/doorkeeper.cs.yml b/config/locales/doorkeeper.cs.yml
index f8b7ba46c..352b31895 100644
--- a/config/locales/doorkeeper.cs.yml
+++ b/config/locales/doorkeeper.cs.yml
@@ -4,10 +4,139 @@ cs:
attributes:
doorkeeper/application:
name: Název aplikace
+ redirect_uri: URI přesměrování
+ scopes: Rozsahy
website: Stránka aplikace
+ errors:
+ models:
+ doorkeeper/application:
+ attributes:
+ redirect_uri:
+ fragment_present: nesmí obsahovat fragment.
+ invalid_uri: musí být platné URI.
+ relative_uri: musí být apsolutní URI.
+ secured_uri: musí být URI HTTPS/SSL.
doorkeeper:
applications:
buttons:
- authorize: Ověřit
+ authorize: Autorizovat
cancel: Zrušit
destroy: Zničit
+ edit: Upravit
+ submit: Odeslat
+ confirmations:
+ destroy: Jste si jistý/á?
+ edit:
+ title: Upravit aplikaci
+ form:
+ error: A jéje! Zkontrolujte svůj formulář kvůli případným chybám
+ help:
+ native_redirect_uri: Použijte %{native_redirect_uri} pro místní testy
+ redirect_uri: Jedno URI na řádek
+ scopes: Oddělujte rozsahy mezerami. Pro použití výchozích rozsahů zanechte prázdné.
+ index:
+ application: Aplikace
+ callback_url: Zpáteční URL
+ delete: Smazat
+ name: Název
+ new: Nová aplikace
+ scopes: Rozsahy
+ show: Zobrazit
+ title: Vaše aplikace
+ new:
+ title: Nová aplikace
+ show:
+ actions: Akce
+ application_id: Klientský klíč
+ callback_urls: Zpáteční URL
+ scopes: Rozsahy
+ secret: Klientské tajemství
+ title: 'Aplikace: %{name}'
+ authorizations:
+ buttons:
+ authorize: Ověřit
+ deny: Zamítnout
+ error:
+ title: Vyskytla se chyba
+ new:
+ able_to: Bude moci
+ prompt: Aplikace %{client_name} vyžaduje přístup k vašemu účtu
+ title: Je vyžadována autorizace
+ show:
+ title: Zkopírujte tento autorizační kód a vložte ho do aplikace.
+ authorized_applications:
+ buttons:
+ revoke: Zamítnout
+ confirmations:
+ revoke: Jste si jistý/á?
+ index:
+ application: Aplikace
+ created_at: Autorizováno
+ date_format: "%d.%m.%Y %H:%M:%S"
+ scopes: Rozsahy
+ title: Vaše autorizované aplikace
+ errors:
+ messages:
+ access_denied: Vlastník zdroje či autorizační server zamítl požadavek.
+ credential_flow_not_configured: Proud Resource Owner Password Credentials selhal, protože Doorkeeper.configure.resource_owner_from_credentials nebylo nakonfigurováno.
+ invalid_client: Ověření klienta selhalo kvůli neznámému klientovi, chybějící klientské autentikaci či nepodporované autentikační metodě.
+ invalid_grant: Poskytnuté oprávnění je neplatné, vypršelé, zamítnuté, neshoduje se s URI přesměrování použitým v požadavku o autorizaci, nebo bylo uděleno jinému klientu.
+ invalid_redirect_uri: Přesměrovací URI není platné.
+ invalid_request: Požadavku chybí pžadovaný parametr, obsahuje nepodporovanou hodnotu parametru, či je jinak malformovaný.
+ invalid_resource_owner: Poskytnuté přihlašovací údaje vlastníka zdroje nejsou platné, nebo vlastník zdroje nemůže být nalezen
+ invalid_scope: Požadovaný rozsah je neplatný, neznámý, nebo malformovaný.
+ invalid_token:
+ expired: Přístupový token vypršel
+ revoked: Přístupový token byl zamítnut
+ unknown: Přístupový token je neplatný
+ resource_owner_authenticator_not_configured: Nález Resource Owner selhal, protože Doorkeeper.configure.resource_owner_authenticator nebylo nakonfigurováno.
+ server_error: Autorizační server se setkal s neočekávanou chybou, která mu zabránila ve vykonání požadavku.
+ temporarily_unavailable: Autorizační server vás nyní nemůže obsloužit kvůli dočasnému přetížení či údržbě serveru.
+ unauthorized_client: Klient není autorizován k vykonání tohoto požadavku touto metodou.
+ unsupported_grant_type: Tento typ oprávnění není podporován autorizačním serverem.
+ unsupported_response_type: Autorizační server nepodporuje tento typ odpovědi.
+ flash:
+ applications:
+ create:
+ notice: Aplikace vytvořena.
+ destroy:
+ notice: Aplikace smazána.
+ update:
+ notice: Aplikace aktualizována.
+ authorized_applications:
+ destroy:
+ notice: Aplikace zamítnuta.
+ layouts:
+ admin:
+ nav:
+ applications: Aplikace
+ oauth2_provider: Poskytovatel OAuth2
+ application:
+ title: Je požadována autorizace OAuth
+ scopes:
+ follow: upravovat vztahy mezi profily
+ push: přijímat vaše push oznámení
+ read: vidět všechna data vašeho účtu
+ read:accounts: vidět informace o účtech
+ read:blocks: vidět vaše blokace
+ read:favourites: vidět vaše oblíbení
+ read:filters: vidět vaše filtry
+ read:follows: vidět vaše sledování
+ read:lists: vidět vaše seznamy
+ read:mutes: vidět vaše ignorace
+ read:notifications: vidět vaše oznámení
+ read:reports: vidět vaše nahlášení
+ read:search: vyhledávat za vás
+ read:statuses: vidět všechny příspěvky
+ write: měnit všechna data vašeho účtu
+ write:accounts: měnit váš profil
+ write:blocks: blokovat účty a domény
+ write:favourites: oblibovat si příspěvky
+ write:filters: vytvářet filtry
+ write:follows: sledovat lidi
+ write:lists: vytvářet seznamy
+ write:media: nahrávat mediální soubory
+ write:mutes: ignorovat lidi a konverzace
+ write:notifications: vymazávat vaše oznámení
+ write:reports: nahlašovat jiné uživatele
+ write:statuses: publikovat příspěvky
diff --git a/config/locales/doorkeeper.da.yml b/config/locales/doorkeeper.da.yml
index 051bfd237..7b6d0d361 100644
--- a/config/locales/doorkeeper.da.yml
+++ b/config/locales/doorkeeper.da.yml
@@ -78,6 +78,7 @@ da:
errors:
messages:
access_denied: Ejeren af ressourcen eller godkendelses serveren afviste anmodningen.
+ invalid_client: Klient autentikationen mislykkedes grundet en ukendt klient, ingen klient autentikation fulgte med, eller en ikke-understøttet metode.
invalid_redirect_uri: Ormdirigerings-uri'en der blev angivet er ikke gyldig.
invalid_request: Anmodningen mangler en parametre, inkluderer en ikke understøttet parametre værdi eller er på en eller anden måde deformeret.
invalid_scope: Det anmodede omfang er ugyldigt, ukendt eller deformeret.
diff --git a/config/locales/doorkeeper.de.yml b/config/locales/doorkeeper.de.yml
index 7f3764180..bf4b06e7c 100644
--- a/config/locales/doorkeeper.de.yml
+++ b/config/locales/doorkeeper.de.yml
@@ -15,7 +15,7 @@ de:
fragment_present: darf kein Fragment enthalten.
invalid_uri: muss ein valider URI sein.
relative_uri: muss ein absoluter URI sein.
- secured_uri: muss ein HTTPS/SSL-URI sein.
+ secured_uri: muss ein HTTPS-/SSL-URI sein.
doorkeeper:
applications:
buttons:
@@ -59,7 +59,7 @@ de:
error:
title: Ein Fehler ist aufgetreten
new:
- able_to: Es wird in der Lage sein zu
+ able_to: 'Es wird folgende Befugnisse haben:'
prompt: Die Anwendung %{client_name} verlangt Zugriff auf dein Konto
title: Autorisierung erforderlich
show:
@@ -115,13 +115,13 @@ de:
title: OAuth-Autorisierung nötig
scopes:
follow: Kontenbeziehungen verändern
- push: erhalte deine Push-Benachrichtigungen
+ push: deine Push-Benachrichtigungen erhalten
read: all deine Daten lesen
read:accounts: deine Konteninformationen einsehen
read:blocks: deine Blockaden einsehen
read:favourites: deine Favoriten ansehen
read:filters: deine Filter ansehen
- read:follows: deine Follows sehen
+ read:follows: sehen, wem du folgst
read:lists: deine Listen sehen
read:mutes: deine Stummschaltungen einsehen
read:notifications: deine Benachrichtigungen sehen
diff --git a/config/locales/doorkeeper.eu.yml b/config/locales/doorkeeper.eu.yml
index aba3166ac..f98babae6 100644
--- a/config/locales/doorkeeper.eu.yml
+++ b/config/locales/doorkeeper.eu.yml
@@ -114,7 +114,29 @@ eu:
application:
title: OAuth autorizazioa behar da
scopes:
- follow: jarraitu kontuak, blokeatu, utzi jarraitzeari eta desblokeatu
- push: jaso zure kontuaren push jakinarazpenak
- read: irakurri zure kontuko datuak
- write: zure izenean argitaratu
+ follow: aldatu kontuaren erlazioak
+ push: jaso push jakinarazpenak
+ read: irakurri zure kontuko datu guztiak
+ read:accounts: ikusi kontuaren informazioa
+ read:blocks: ikusi zure blokeoak
+ read:favourites: ikusi zure gogokoak
+ read:filters: ikusi zure iragazkiak
+ read:follows: ikusi zuk jarraitutakoak
+ read:lists: ikusi zure zerrendak
+ read:mutes: ikusi zuk mutututakoak
+ read:notifications: ikusi zure jakinarazpenak
+ read:reports: ikusi zure salaketak
+ read:search: bilatu zure izenean
+ read:statuses: ikusi mezu guztiak
+ write: kontuaren datu guztiak aldatzea
+ write:accounts: zure profila aldatzea
+ write:blocks: kontuak eta domeinuak blokeatzea
+ write:favourites: gogoko mezuak
+ write:filters: sortu iragazkiak
+ write:follows: jarraitu jendea
+ write:lists: sortu zerrendak
+ write:media: igo multimedia fitxategiak
+ write:mutes: mututu pertsonak eta elkarrizketak
+ write:notifications: garbitu zure jakinarazpenak
+ write:reports: salatu beste jendea
+ write:statuses: argitaratu mezuak
diff --git a/config/locales/doorkeeper.fr.yml b/config/locales/doorkeeper.fr.yml
index 09660cb49..e8668ba82 100644
--- a/config/locales/doorkeeper.fr.yml
+++ b/config/locales/doorkeeper.fr.yml
@@ -122,6 +122,7 @@ fr:
read:blocks: voir vos bloqués
read:favourites: voir vos favoris
read:filters: voir vos filtres
+ read:follows: voir vos suivis
read:lists: voir vos listes
read:mutes: voir vos silenciés
read:notifications: voir vos notifications
@@ -131,10 +132,12 @@ fr:
write: modifier toutes les données de votre compte
write:accounts: modifier votre profil
write:blocks: bloquer des comptes et des domaines
+ write:favourites: statuts favoris
write:filters: créer des filtres
write:follows: suivre les gens
write:lists: créer des listes
write:media: téléverser des fichiers-média
write:mutes: silencier des gens et des conversations
write:notifications: nettoyer vos notifications
+ write:reports: rapporter d'autres personnes
write:statuses: publier des statuts
diff --git a/config/locales/el.yml b/config/locales/el.yml
index 674712d98..da2a3d3cc 100644
--- a/config/locales/el.yml
+++ b/config/locales/el.yml
@@ -5,10 +5,12 @@ el:
about_mastodon_html: Το Mastodon είναι ένα κοινωνικό δίκτυο που βασίζεται σε ανοιχτά δικτυακά πρωτόκολλα και ελεύθερο λογισμικό ανοιχτού κώδικα. Είναι αποκεντρωμένο όπως το e-mail.
about_this: Σχετικά
administered_by: 'Διαχειρίζεται από:'
+ api: API
closed_registrations: Αυτή τη στιγμή οι εγγραφές σε αυτό τον κόμβο είναι κλειστές. Αλλά! Μπορείς να βρεις έναν άλλο κόμβο για να ανοίξεις λογαριασμό και να έχεις πρόσβαση από εκεί στο ίδιο ακριβώς δίκτυο.
contact: Επικοινωνία
contact_missing: Δεν έχει οριστεί
contact_unavailable: Μ/Δ
+ documentation: Τεκμηρίωση
extended_description_html: |
Ένα καλό σημείο για κανόνες
Η αναλυτική περιγραφή δεν έχει ακόμα οριστεί
@@ -25,9 +27,11 @@ el:
hosted_on: Το Mastodon φιλοξενείται στο %{domain}
learn_more: Μάθε περισσότερα
other_instances: Λίστα κόμβων
+ privacy_policy: Πολιτική απορρήτου
source_code: Πηγαίος κώδικας
status_count_after: καταστάσεις
- status_count_before: Που έχουν γράψει
+ status_count_before: Που έγραψαν
+ terms: Όροι χρήσης
user_count_after: χρήστες
user_count_before: Σπίτι για
what_is_mastodon: Τι είναι το Mastodon;
@@ -35,6 +39,7 @@ el:
follow: Ακολούθησε
followers: Ακόλουθοι
following: Ακολουθεί
+ joined: Εγγράφηκε στις %{date}
media: Πολυμέσα
moved_html: 'Ο/Η %{name} μετακόμισε στο %{new_profile_link}:'
network_hidden: Αυτή η πληροφορία δεν είναι διαθέσιμη
@@ -364,11 +369,14 @@ el:
desc_html: Δείξε ένα σήμα προσωπικού στη σελίδα ενός χρήστη
title: Δείξε διακριτικό προσωπικού
site_description:
- desc_html: Εισαγωγική παράγραφος στην αρχική σελίδα και στα meta tags. Μπορείς να χρησιμοποιήσεις HTML tags, συγκεκριμένα < a>
και < em>
.
+ desc_html: Εισαγωγική παράγραφος στην αρχική σελίδα. Περιέγραψε τι κάνει αυτό τον διακομιστή Mastodon διαφορετικό και ό,τι άλλο ενδιαφέρον. Μπορείς να χρησιμοποιήσεις HTML tags, συγκεκριμένα < a>
και < em>
.
title: Περιγραφή κόμβου
site_description_extended:
desc_html: Ένα καλό μέρος για τον κώδικα δεοντολογίας, τους κανόνες, τις οδηγίες και ό,τι άλλο διαφοροποιεί τον κόμβο σου. Δέχεται και κώδικα HTML
title: Προσαρμοσμένες εκτεταμένες πληροφορίες
+ site_short_description:
+ desc_html: Εμφανίζεται στην πλαϊνή μπάρα και στα meta tags. Περιέγραψε τι είναι το Mastodon και τι κάνει αυτό τον διακομιστή ιδιαίτερο σε μια παράγραφο. Αν μείνει κενό, θα πάρει την προκαθορισμένη περιγραφή του κόμβου.
+ title: Σύντομη περιγραφή του κόμβου
site_terms:
desc_html: Μπορείς να γράψεις τη δική σου πολιτική απορρήτου, όρους χρήσης ή άλλους νομικούς όρους. Μπορείς να χρησιμοποιήσεις HTML tags
title: Προσαρμοσμένοι όροι χρήσης της υπηρεσίας
@@ -530,9 +538,13 @@ el:
true_privacy_html: Έχε υπ' όψιν σου πως η πραγματική ιδιωτικότητα επιτυγχάνεται μόνο με κρυπτογράφηση από άκρη σε άκρη .
unlocked_warning_html: Μπορεί ο οποιοσδήποτε να σε ακολουθήσει και να βλέπει κατευθείαν τις ιδιωτικές ενημερώσεις σου. %{lock_link} για να αναθεωρήσεις και απορρίψεις ακόλουθους.
unlocked_warning_title: Ο λογαριασμός σου δεν είναι κλειδωμένος
+ footer:
+ developers: Ανάπτυξη
+ more: Περισσότερα…
+ resources: Πόροι
generic:
changes_saved_msg: Οι αλλαγές αποθηκεύτηκαν!
- save_changes: Αποθήκευσε αλλαγές
+ save_changes: Αποθήκευσε τις αλλαγές
validation_errors:
one: Κάτι δεν είναι εντάξει ακόμα! Για κοίταξε το παρακάτω σφάλμα
other: Κάτι δεν είναι εντάξει ακόμα! Για κοίταξε τα παρακάτω %{count} σφάλματα
@@ -620,11 +632,11 @@ el:
decimal_units:
format: "%n%u"
units:
- billion: Δις.
- million: Εκ.
- quadrillion: Τετράκις.
- thousand: Χ.
- trillion: Τρις.
+ billion: δις.
+ million: εκ.
+ quadrillion: τετράκις.
+ thousand: χ.
+ trillion: τρις.
pagination:
newer: Νεότερο
next: Επόμενο
@@ -731,7 +743,7 @@ el:
private_long: Εμφάνιση μόνο σε ακόλουθους
public: Δημόσιο
public_long: Βλέπει οποιοσδήποτε
- unlisted: Ακαταχώριστο
+ unlisted: Μη καταχωρημένο
unlisted_long: Βλέπει οποιοσδήποτε, αλλά δεν καταχωρείται στις δημόσιες ροές
stream_entries:
pinned: Καρφιτσωμένο τουτ
@@ -827,6 +839,7 @@ el:
time:
formats:
default: "%b %d, %Y, %H:%M"
+ month: "%b %Y"
two_factor_authentication:
code_hint: Βάλε τον κωδικό που δημιούργησε η εφαρμογή πιστοποίησής σου για επιβεβαίωση
description_html: Αν ενεργοποιήσεις την πιστοποίηση 2 παραγόντων (2FA) , για να συνδεθείς θα πρέπει να έχεις το τηλέφωνό σου, που θα σου δημιουργήσει κλειδιά εισόδου.
diff --git a/config/locales/eu.yml b/config/locales/eu.yml
index 7b70ca77e..46975f016 100644
--- a/config/locales/eu.yml
+++ b/config/locales/eu.yml
@@ -5,10 +5,12 @@ eu:
about_mastodon_html: Mastodon web protokolo ireki eta libreak darabiltzan gizarte sare bat da. E-mail sarea bezala deszentralizatua da.
about_this: Honi buruz
administered_by: 'Administratzailea(k):'
+ api: APIa
closed_registrations: Harpidetza itxita dago orain instantzia honetan. Hala ere, beste instantzia bat aurkitu dezakezu kontua egiteko eta hona ere sarbidea izan.
contact: Kontaktua
contact_missing: Ezarri gabe
contact_unavailable: E/E
+ documentation: Dokumentazioa
extended_description_html: |
Arauentzako toki egoki bat
Azalpen luzea ez da ezarri oraindik.
@@ -25,9 +27,11 @@ eu:
hosted_on: Mastodon %{domain} domeinuan ostatatua
learn_more: Ikasi gehiago
other_instances: Instantzien zerrenda
+ privacy_policy: Pribatutasun politika
source_code: Iturburu kodea
status_count_after: mezu idatzi dituzte
status_count_before: Hauek
+ terms: Erabilera baldintzak
user_count_after: erabiltzaile daude
user_count_before: Hemen
what_is_mastodon: Zer da Mastodon?
@@ -35,6 +39,7 @@ eu:
follow: Jarraitu
followers: Jarraitzaile
following: Jarraitzen
+ joined: "%{date}(e)an elkartua"
media: Multimedia
moved_html: "%{name} hona lekualdatu da %{new_profile_link}:"
network_hidden: Informazio hau ez dago eskuragarri
@@ -202,6 +207,27 @@ eu:
update_failed_msg: Ezin izan da emoji hori eguneratu
updated_msg: Emoji-a ongi eguneratu da!
upload: Igo
+ dashboard:
+ backlog: aurreikusitako lanak
+ config: Konfigurazioa
+ feature_deletions: Kontu ezabaketak
+ feature_invites: Gonbidapen estekak
+ feature_registrations: Izen emateak
+ feature_relay: Federazio haria
+ features: Ezaugarriak
+ hidden_service: Federazioa ezkutuko zerbitzuekin
+ open_reports: salaketa irekiak
+ recent_users: Azken erabiltzaileak
+ search: Testu osoko bilaketa
+ single_user_mode: Erabiltzaile bakarreko modua
+ software: Software
+ space: Espazio erabilera
+ title: Kontrol panela
+ total_users: erabiltzaile guztira
+ trends: Joerak
+ week_interactions: interakzio aste honetan
+ week_users_active: aktibo aste honetan
+ week_users_new: erabiltzaile aste honetan
domain_blocks:
add_new: Gehitu berria
created_msg: Domeinuaren blokeoa orain prozesatzen ari da
@@ -257,6 +283,8 @@ eu:
expired: Iraungitua
title: Iragazi
title: Gonbidapenak
+ relays:
+ add_new: Gehitu hari berria
report_notes:
created_msg: Salaketa oharra ongi sortu da!
destroyed_msg: Salaketa oharra ongi ezabatu da!
@@ -779,6 +807,7 @@ eu:
time:
formats:
default: "%Y(e)ko %b %d, %H:%M"
+ month: "%b %Y"
two_factor_authentication:
code_hint: Sartu zure autentifikazio aplikazioak sortutako kodea berresteko
description_html: "Bi faktoreetako autentifikazioa gaitzen baduzu, saioa hasteko telefonoa eskura izan beharko duzu, honek zuk sartu behar dituzun kodeak sortuko dituelako."
diff --git a/config/locales/gl.yml b/config/locales/gl.yml
index 92b71cce6..2550e04e0 100644
--- a/config/locales/gl.yml
+++ b/config/locales/gl.yml
@@ -5,10 +5,12 @@ gl:
about_mastodon_html: Mastodon é unha rede social que se basea en protocolos web abertos e libres, software de código aberto. É descentralizada como o correo electrónico.
about_this: Sobre
administered_by: 'Administrada por:'
+ api: API
closed_registrations: O rexistro en esta instancia está pechado en este intre. Porén! Pode atopar unha instancia diferente para obter unha conta e ter acceso exactamente a misma rede desde alí.
contact: Contacto
contact_missing: Non establecido
contact_unavailable: N/A
+ documentation: Documentación
extended_description_html: |
Un bo lugar para regras
A descrición extendida aínda non se proporcionou.
@@ -25,9 +27,11 @@ gl:
hosted_on: Mastodon aloxado en %{domain}
learn_more: Coñeza máis
other_instances: Listado de instancias
+ privacy_policy: Política de intimidade
source_code: Código fonte
status_count_after: estados
status_count_before: Que publicaron
+ terms: Termos do servizo
user_count_after: usuarias
user_count_before: Fogar de
what_is_mastodon: Qué é Mastodon?
@@ -35,6 +39,7 @@ gl:
follow: Seguir
followers: Seguidoras
following: Seguindo
+ joined: Uneuse %{date}
media: Medios
moved_html: "%{name} mudouse a %{new_profile_link}:"
network_hidden: A información non está dispoñible
@@ -529,6 +534,10 @@ gl:
true_privacy_html: Por favor teña en conta que a verdadeira intimidade só pode ser conseguida con cifrado de extremo-a-extremo .
unlocked_warning_html: Calquera pode seguila para inmediatamente ver os seus estados privados. %{lock_link} para poder revisar e rexeitar seguidoras.
unlocked_warning_title: A súa conta non está pechada
+ footer:
+ developers: Desenvolvedoras
+ more: Máis…
+ resources: Recursos
generic:
changes_saved_msg: Cambios gardados correctamente!!
save_changes: Gardar cambios
@@ -827,6 +836,7 @@ gl:
time:
formats:
default: "%d %b, %Y, %H:%M"
+ month: "%b %Y"
two_factor_authentication:
code_hint: Introducir o código xerado polo seu aplicativo de autenticación para confirmar
description_html: Si habilita a autenticación de doble factor , a conexión pediralle estar en posesión do seu teléfono, que xerará testemuños para poder entrar.
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index 69c7d3367..b0adbbb5d 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -5,10 +5,12 @@ ja:
about_mastodon_html: Mastodon は、オープンなウェブプロトコルを採用した、自由でオープンソースなソーシャルネットワークです。電子メールのような分散型の仕組みを採っています。
about_this: 詳細情報
administered_by: '管理者:'
+ api: API
closed_registrations: 現在このインスタンスでの新規登録は受け付けていません。しかし、他のインスタンスにアカウントを作成しても全く同じネットワークに参加することができます。
contact: 連絡先
contact_missing: 未設定
contact_unavailable: N/A
+ documentation: ドキュメント
extended_description_html: |
ルールを書くのに適した場所
詳細説明が設定されていません。
@@ -25,9 +27,11 @@ ja:
hosted_on: Mastodon hosted on %{domain}
learn_more: もっと詳しく
other_instances: 他のインスタンス
+ privacy_policy: プライバシーポリシー
source_code: ソースコード
status_count_after: トゥート
status_count_before: トゥート数
+ terms: 利用規約
user_count_after: 人
user_count_before: ユーザー数
what_is_mastodon: Mastodon とは?
@@ -35,6 +39,7 @@ ja:
follow: フォロー
followers: フォロワー
following: フォロー中
+ joined: "%{date} に登録"
media: メディア
moved_html: "%{name} さんは引っ越しました %{new_profile_link}:"
network_hidden: この情報は利用できません
@@ -220,7 +225,7 @@ ja:
title: ダッシュボード
total_users: 全ユーザー
trends: トレンドタグ
- week_interactions: 今週の交流数
+ week_interactions: 今週交流のあった回数
week_users_active: 今週活動した人数
week_users_new: 今週登録した人数
domain_blocks:
@@ -282,7 +287,7 @@ ja:
add_new: リレーを追加
description_html: "連合リレー とは、登録しているサーバー間の公開トゥートを仲介するサーバーです。中小規模のサーバーが連合のコンテンツを見つけるのを助けます。 これを使用しない場合、ローカルユーザーがリモートユーザーを手動でフォローする必要があります。"
enable_hint: 有効にすると、リレーから全ての公開トゥートを受信するようになり、またこのサーバーの全ての公開トゥートをリレーに送信するようになります。
- inbox_url: Relay URL
+ inbox_url: リレーURL
setup: リレー接続を設定する
status: ステータス
title: リレー
@@ -369,6 +374,9 @@ ja:
site_description_extended:
desc_html: あなたのインスタンスにおける行動規範やルール、ガイドライン、そのほかの記述をする際に最適な場所です。HTMLタグが使えます
title: カスタム詳細説明
+ site_short_description:
+ desc_html: サイドバーと meta タグに表示されます。Mastodon とは何か、そしてこのサーバーの特別な何かを1段落で記述してください。空欄の場合、インスタンスの説明が使用されます。
+ title: 短いインスタンスの説明
site_terms:
desc_html: あなたは独自のプライバシーポリシーや利用規約、そのほかの法的根拠を書くことができます。HTMLタグが使えます
title: カスタム利用規約
@@ -530,6 +538,10 @@ ja:
true_privacy_html: "プライバシーの保護はエンドツーエンドの暗号化でのみ実現可能 であることに留意ください。"
unlocked_warning_html: 誰でもあなたをフォローすることができ、フォロワー限定の投稿をすぐに見ることができます。フォローする人を限定したい場合は%{lock_link}に設定してください。
unlocked_warning_title: このアカウントは承認制アカウントに設定されていません
+ footer:
+ developers: 開発者向け
+ more: さらに…
+ resources: リソース
generic:
changes_saved_msg: 正常に変更されました!
save_changes: 変更を保存
@@ -828,6 +840,7 @@ ja:
time:
formats:
default: "%Y年%m月%d日 %H:%M"
+ month: "%Y年 %b"
two_factor_authentication:
code_hint: 確認するには認証アプリで表示されたコードを入力してください
description_html: "二段階認証 を有効にするとログイン時、認証アプリからコードを入力する必要があります。"
diff --git a/config/locales/ko.yml b/config/locales/ko.yml
index d328ae4e7..b5da99049 100644
--- a/config/locales/ko.yml
+++ b/config/locales/ko.yml
@@ -366,7 +366,7 @@ ko:
desc_html: 유저 페이지에 스태프 배지를 표시합니다
title: 스태프 배지 표시
site_description:
- desc_html: 탑 페이지와 meta 태그에 사용됩니다. HTML 태그, 주로 <a>
, <em>
같은 것을 사용 가능합니다.
+ desc_html: 프론트 페이지의 소개문에 사용 됩니다.이 마스토돈 서버의 특별한 점 등을 설명하세요. HTML 태그, 주로 <a>
, <em>
같은 것을 사용 가능합니다.
title: 사이트 설명
site_description_extended:
desc_html: 규칙, 가이드라인 등을 작성하기 좋은 곳입니다. HTML 태그를 사용할 수 있습니다
diff --git a/config/locales/nl.yml b/config/locales/nl.yml
index 112b5d5fe..c3390fe73 100644
--- a/config/locales/nl.yml
+++ b/config/locales/nl.yml
@@ -5,10 +5,12 @@ nl:
about_mastodon_html: Mastodon is een sociaal netwerk dat gebruikt maakt van open webprotocollen en vrije software. Het is net zoals e-mail gedecentraliseerd.
about_this: Over deze server
administered_by: 'Beheerd door:'
+ api: API
closed_registrations: Registreren op deze server is momenteel niet mogelijk. Je kunt echter een andere server vinden om zo toegang te krijgen tot het netwerk.
contact: Contact
contact_missing: Niet ingesteld
contact_unavailable: n.v.t
+ documentation: Documentatie
extended_description_html: |
Een goede plek voor richtlijnen
De uitgebreide omschrijving is nog niet ingevuld.
@@ -25,9 +27,11 @@ nl:
hosted_on: Mastodon op %{domain}
learn_more: Meer leren
other_instances: Andere servers
+ privacy_policy: Privacybeleid
source_code: Broncode
status_count_after: toots
status_count_before: Zij schreven
+ terms: Gebruiksvoorwaarden
user_count_after: gebruikers
user_count_before: Thuisbasis van
what_is_mastodon: Wat is Mastodon?
@@ -35,6 +39,7 @@ nl:
follow: Volgen
followers: Volgers
following: Volgend
+ joined: Geregistreerd in %{date}
media: Media
moved_html: "%{name} is verhuisd naar %{new_profile_link}:"
network_hidden: Deze informatie is niet beschikbaar
@@ -530,6 +535,10 @@ nl:
true_privacy_html: Hou er wel rekening mee dat echte privacy alleen gegarandeerd kan worden met behulp van end-to-end-encryptie .
unlocked_warning_html: Iedereen kan jou volgen en daarmee meteen toots zien die je alleen aan jouw volgers hebt gericht. %{lock_link} om volgers te kunnen beoordelen en desnoods te weigeren.
unlocked_warning_title: Jouw account is niet besloten
+ footer:
+ developers: Ontwikkelaars
+ more: Meer…
+ resources: Hulpmiddelen
generic:
changes_saved_msg: Wijzigingen succesvol opgeslagen!
save_changes: Wijzigingen opslaan
@@ -828,6 +837,7 @@ nl:
time:
formats:
default: "%d %B %Y om %H:%M"
+ month: "%b %Y"
two_factor_authentication:
code_hint: Voer de code in die door de authenticatie-app gegenereerd is
description_html: Na het instellen van tweestapsverificatie , kun jij je alleen aanmelden als je jouw mobiele telefoon bij je hebt. Hiermee genereer je namelijk de in te voeren aanmeldcode.
diff --git a/config/locales/oc.yml b/config/locales/oc.yml
index 3ff2dae66..08a824c93 100644
--- a/config/locales/oc.yml
+++ b/config/locales/oc.yml
@@ -5,10 +5,12 @@ oc:
about_mastodon_html: Mastodon es un malhum social bastit amb de protocòls liures e gratuits. Es descentralizat coma los corrièls.
about_this: A prepaus d’aquesta instància
administered_by: 'Gerida per :'
+ api: API
closed_registrations: Las inscripcions son clavadas pel moment sus aquesta instància.
contact: Contacte
contact_missing: Pas parametrat
contact_unavailable: Pas disponible
+ documentation: Documentacion
extended_description_html: |
Una bona plaça per las règlas
La descripcion longa es pas estada causida pel moment.
@@ -25,9 +27,11 @@ oc:
hosted_on: Mastodon albergat sus %{domain}
learn_more: Ne saber mai
other_instances: Lista d’instàncias
+ privacy_policy: Politica de confidencialitat
source_code: Còdi font
status_count_after: estatuts
status_count_before: qu’an escrich
+ terms: Condicions d’utilizacion
user_count_after: personas
user_count_before: Ostal de
what_is_mastodon: Qu’es Mastodon ?
@@ -35,6 +39,7 @@ oc:
follow: Sègre
followers: Seguidors
following: Abonaments
+ joined: Arribèt lo %{date}
media: Mèdias
moved_html: "%{name} a mudat a %{new_profile_link} :"
network_hidden: Aquesta informacion es pas disponibla
@@ -365,11 +370,14 @@ oc:
desc_html: Mostrar lo badge Personal sus la pagina de perfil
title: Mostrar lo badge personal
site_description:
- desc_html: Afichada jos la forma de paragraf sus la pagina d’acuèlh e utilizada coma balisa meta. Podètz utilizar de balisas HTML, en particular <a>
e <em>
.
+ desc_html: Paragraf d’introduccion sus la pagina d’acuèlh. Explicatz çò que fa diferent aqueste servidor Mastodon e tot çò qu’es important de dire. Podètz utilizare de balises HTML, en particular <a>
e<em>
.
title: Descripcion de l’instància
site_description_extended:
desc_html: Afichada sus la pagina d’informacion complementària del site Podètz utilizar de balisas HTML
title: Descripcion espandida del site
+ site_short_description:
+ desc_html: Mostrat dins la barra laterala e dins las meta balisas. Explica çò qu’es Mastodon e perque aqueste servidor es especial en un solet paragraf. S’es void, serà garnit amb la descripcion de l’instància.
+ title: Descripcion corta de l’instància
site_terms:
desc_html: Afichada sus la pagina de las condicions d’utilizacion Podètz utilizar de balisas HTML
title: Politica de confidencialitat del site
@@ -587,6 +595,10 @@ oc:
true_privacy_html: Mèfi que la vertadièra confidencialitat pòt solament èsser amb un chiframent del cap a la fin (end-to-end) .
unlocked_warning_html: Tot lo monde pòt vos sègre e veire sulpic vòstres estatuts privats. %{lock_link} per poder repassar e regetar los seguidors.
unlocked_warning_title: Vòstre compte es pas clavat
+ footer:
+ developers: Desvolopaires
+ more: Mai…
+ resources: Ressorsas
generic:
changes_saved_msg: Cambiaments ben realizats !
save_changes: Salvar los cambiaments
diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml
index 9aedd375c..1e9a2d0ab 100644
--- a/config/locales/pt-BR.yml
+++ b/config/locales/pt-BR.yml
@@ -5,10 +5,12 @@ pt-BR:
about_mastodon_html: Mastodon é uma rede social baseada em protocolos abertos e software gratuito e de código aberto. É descentralizada como e-mail.
about_this: Sobre
administered_by: 'Administrado por:'
+ api: API
closed_registrations: Os cadastros estão atualmente fechados nesta instância. No entanto, você pode procurar uma instância diferente na qual possa criar uma conta e acessar a mesma rede por lá.
contact: Contato
contact_missing: Não definido
contact_unavailable: N/A
+ documentation: Documentação
extended_description_html: |
Um bom lugar para regras
A descrição da instância ainda não foi feita.
@@ -25,9 +27,11 @@ pt-BR:
hosted_on: Mastodon hospedado em %{domain}
learn_more: Saiba mais
other_instances: Lista de instâncias
+ privacy_policy: Política de Privacidade
source_code: Código-fonte
status_count_after: publicações
status_count_before: Autores de
+ terms: Termos de Serviço
user_count_after: usuários
user_count_before: Casa de
what_is_mastodon: O que é Mastodon?
@@ -35,6 +39,7 @@ pt-BR:
follow: Seguir
followers: Seguidores
following: Seguindo
+ joined: Participa desde %{date}
media: Mídia
moved_html: "%{name} se mudou para %{new_profile_link}:"
network_hidden: Esta informação não está disponível
@@ -203,14 +208,14 @@ pt-BR:
updated_msg: Emoji atualizado com sucesso!
upload: Enviar
dashboard:
- backlog: Tarefas na fila
+ backlog: tarefas na fila
config: Configuração
feature_deletions: Remoção de contas
feature_invites: Convites
- feature_registrations: Registros
+ feature_registrations: Cadastros
feature_relay: Repetidor da federação
features: Funcionalidades
- hidden_service: Federação com serviços escondidos
+ hidden_service: Federação com serviços onion
open_reports: Denúncias em aberto
recent_users: Usuários recentes
search: Pesquisa em texto
@@ -364,11 +369,14 @@ pt-BR:
desc_html: Mostrar uma insígnia de Equipe na página de usuário
title: Mostrar insígnia de equipe
site_description:
- desc_html: Parágrafo introdutório na página inicial e em meta tags. Você pode usar tags HTML, em especial <a>
e <em>
.
+ desc_html: Parágrafo introdutório na página inicial. Descreva o que faz esse servidor especial, e qualquer outra coisa de importante. Você pode usar tags HTML, em especial <a>
e <em>
.
title: Descrição da instância
site_description_extended:
desc_html: Um ótimo lugar para seu código de conduta, regras, diretrizes e outras coisas para diferenciar a sua instância. Você pode usar tags HTML
title: Informação estendida customizada
+ site_short_description:
+ desc_html: Aparece na barra lateral e nas meta tags. Descreva o que é Mastodon e o que faz esse servidor especial em um único parágrafo. Se não for preenchido, é substituído pela descrição da instância.
+ title: Descrição curta da instância
site_terms:
desc_html: Você pode escrever a sua própria política de privacidade, termos de serviço, entre outras coisas. Você pode usar tags HTML
title: Termos de serviço customizados
@@ -530,6 +538,10 @@ pt-BR:
true_privacy_html: Lembre-se de que a verdadeira privacidade só pode ser alcançada através de encriptação ponto-a-ponto .
unlocked_warning_html: Qualquer pessoa pode te seguir e ver as suas postagens privadas. %{lock_link} para ser capaz de revisar e rejeitar seguidores.
unlocked_warning_title: A sua conta não está trancada
+ footer:
+ developers: Desenvolvedores
+ more: Mais…
+ resources: Recursos
generic:
changes_saved_msg: Mudanças salvas com sucesso!
save_changes: Salvar mudanças
@@ -828,6 +840,7 @@ pt-BR:
time:
formats:
default: "%b %d, %Y, %H:%M"
+ month: "%B de %Y"
two_factor_authentication:
code_hint: Insira o código gerado pelo seu aplicativo auteticador para confirmar
description_html: Se você ativar a autenticação em dois passos , o acesso à sua conta exigirá posse de seu celular, que irá gerar tokens para validação.
diff --git a/config/locales/simple_form.ar.yml b/config/locales/simple_form.ar.yml
index 0474e1ef2..c7eb95857 100644
--- a/config/locales/simple_form.ar.yml
+++ b/config/locales/simple_form.ar.yml
@@ -8,17 +8,12 @@ ar:
bot: يُعلِم أنّ هذا الحساب لا يمثل شخصًا
context: واحد أو أكثر من السياقات التي يجب أن ينطبق عليها عامل التصفية
digest: تُرسَل إليك بعد مُضيّ مدة مِن خمول نشاطك و فقط إذا ما تلقيت رسائل شخصية مباشِرة أثناء فترة غيابك مِن الشبكة
- display_name:
- one: 1 حرف باق
- other: %{count} حرف باق
fields: يُمكنك عرض 4 عناصر على شكل جدول في ملفك الشخصي
header: ملف PNG أو GIF أو JPG. حجمه على أقصى تصدير %{size}. سيتم تصغيره إلى %{dimensions}px
+ inbox_url: نسخ العنوان الذي تريد استخدامه مِن صفحة الإستقبال للمُرحَّل
irreversible: التبويقات التي تم تصفيتها ستختفي لا محالة حتى و إن تمت إزالة عامِل التصفية لاحقًا
locale: لغة واجهة المستخدم و الرسائل الإلكترونية و الإشعارات
locked: يتطلب منك الموافقة يدويا على طلبات المتابعة
- note:
- one: 1 حرف باق
- other: %{count} حرف باق
scopes: ما هي المجالات المسموح بها في التطبيق ؟ إن قمت باختيار أعلى المجالات فيمكنك الإستغناء عن الخَيار اليدوي.
setting_default_language: يمكن الكشف التلقائي للّغة اللتي استخدمتها في تحرير تبويقاتك ، غيرَ أنّ العملية ليست دائما دقيقة
setting_hide_network: الحسابات التي تُتابعها و التي تُتابِعك على حد سواء لن تُعرَض على صفحتك الشخصية
diff --git a/config/locales/simple_form.co.yml b/config/locales/simple_form.co.yml
index 85a98a3f6..b1b83b9cb 100644
--- a/config/locales/simple_form.co.yml
+++ b/config/locales/simple_form.co.yml
@@ -3,35 +3,49 @@ co:
simple_form:
hints:
defaults:
+ autofollow: Quelli·e chì s'arregistranu cù l'invitazione saranu autumaticamente abbunati·e à voi
avatar: Furmatu PNG, GIF o JPG. 2Mo o menu. Sarà ridottu à %{dimensions}px
bot: Stu contu hè autumatizatu è ùn hè forse micca survegliatu
+ context: Cuntestu·i induve u filtru deve esse applicatu
digest: Solu mandatu dopu à una longa perioda d’inattività, è solu s’elli ci sò novi missaghji diretti
display_name:
one: Ci ferma 1 caratteru
other: Ci fermanu %{count} caratteri
fields: Pudete avè fin’à 4 elementi mustrati cum’un tavulone nant’à u vostru prufile
header: Furmatu PNG, GIF o JPG. 2Mo o menu. Sarà ridottu à %{dimensions}px
+ inbox_url: Cupiate l'URL di a pagina d'accolta di u ripetitore chì vulete utilizà
+ irreversible: I statuti filtrati saranu sguassati di manera irreversibile, ancu s'ellu hè toltu u filtru
+ locale: A lingua di l'interfaccia utilizatore, di l'e-mail è di e nutificazione push
locked: Duvarete appruvà e dumande d’abbunamentu
note:
one: Ci ferma 1 caratteru
other: Ci fermanu %{count} caratteri
+ phrase: Sarà trovu senza primura di e maiuscule o di l'avertimenti
+ scopes: L'API à quelle l'applicazione averà accessu. S'è voi selezziunate un parametru d'altu livellu, un c'hè micca bisognu di selezziunà quell'individuali.
+ setting_default_language: A lingua di i vostri statuti pò esse induvinata autumaticamente, mà ùn marchja micca sempre bè
setting_hide_network: I vostri abbunati è abbunamenti ùn saranu micca mustrati nant’à u vostru prufile
setting_noindex: Tocca à u vostru prufile pubblicu è i vostri statuti
setting_theme: Tocca à l’apparenza di Mastodon quandu site cunnettatu·a da qualch’apparechju.
+ whole_word: Quandu a parolla o a frasa sana hè alfanumerica, sarà applicata solu s'ella currisponde à a parolla sana
imports:
data: Un fugliale CSV da un’altr’istanza di Mastodon
sessions:
otp: 'Entrate u codice d’identificazione à dui fattori nant’à u vostru telefuninu, o unu di i vostri codici di ricuperazione:'
+ user:
+ chosen_languages: Soli i statuti scritti in e lingue selezziunate saranu mustrati indè e linee pubbliche
labels:
account:
fields:
name: Label
value: Cuntinutu
defaults:
+ autofollow: Invità à siguità u vostru contu
avatar: Ritrattu di prufile
bot: Stu contu hè un bot
+ chosen_languages: Filtrà lingue
confirm_new_password: Cunfirmà a nova chjave d’accessu
confirm_password: Cunfirmà a chjave d’accessu
+ context: Cuntesti di u filtru
current_password: Chjave d’accessu attuale
data: Dati
display_name: Nome pubblicu
@@ -39,15 +53,19 @@ co:
expires_in: Spira dopu à
fields: Metadata di u prufile
header: Ritrattu di cuprendula
- locale: Lingua
+ inbox_url: URL di l'inbox di u ripetitore
+ irreversible: Sguassà invece di piattà
+ locale: Lingua di l'interfaccia
locked: Privatizà u contu
max_uses: Numeru massimale d’utilizazione
new_password: Nova chjave d’accessu
note: Descrizzione
otp_attempt: Codice d’identificazione à dui fattori
password: Chjave d’accessu
+ phrase: Parolla-chjave o frasa
setting_auto_play_gif: Lettura autumatica di i GIF animati
setting_boost_modal: Mustrà una cunfirmazione per sparte un statutu
+ setting_default_language: Lingua di pubblicazione
setting_default_privacy: Cunfidenzialità di i statuti
setting_default_sensitive: Sempre cunsiderà media cum’è sensibili
setting_delete_modal: Mustrà une cunfirmazione per toglie un statutu
@@ -62,6 +80,7 @@ co:
type: Tippu d’impurtazione
username: Cugnome
username_or_email: Cugnome o Email
+ whole_word: Parolla sana
interactions:
must_be_follower: Piattà e nutificazione di quelli·e ch’ùn vi seguitanu
must_be_following: Piattà e nutificazione di quelli·e ch’ùn seguitate
diff --git a/config/locales/simple_form.cs.yml b/config/locales/simple_form.cs.yml
index 48ab9cdac..c23aad3c4 100644
--- a/config/locales/simple_form.cs.yml
+++ b/config/locales/simple_form.cs.yml
@@ -3,8 +3,97 @@ cs:
simple_form:
hints:
defaults:
- avatar: PNG, GIF či JPG. Maximálně %{size}. Bude zmenšena na %{dimensions}px
+ autofollow: Lidé, kteří se zaregistrují přes pozvání, vás budou automaticky sledovat
+ avatar: PNG, GIF či JPG. Maximálně %{size}. Bude zmenšena na %{dimensions} px
bot: Tento účet provádí hlavně automatizované akce a nemusí být spravován
+ context: Jedno či více kontextů, ve kterých má být filtr uplatněn
+ digest: Odesíláno pouze po dlouhé době nečinnosti a pouze, pokud jste při své nepřítomnosti obdržel/a osobní zprávy
display_name:
one: Zbývá 1 znak
- other: Zbývá %{count} znaků
+ other: Zbývá vám %{count} znaků
+ fields: Na profilu můžete mít až 4 položky zobrazené jako tabulka
+ header: PNG, GIF či JPG. Maximálně %{size}. Bude zmenšena na %{dimensions} px
+ inbox_url: Zkopírujte URL z hlavní stránky mostu, který chcete použít
+ irreversible: Filtrované tooty nenávratně zmizí, i pokud bude filtr později odstraněn
+ locale: Jazyk uživatelského rozhraní, e-mailů a oznámení push
+ locked: Vyžaduje manuální schvalování sledovatelů
+ note:
+ one: Zbývá 1 znak
+ other: Zbývá %{count} znaků
+ phrase: Shoda bude nalezena bez ohledu na velikost písmen v těle tootu či varování o obsahu
+ scopes: Které API bude aplikace povolena používat. Pokud vyberete rozsah nejvyššího stupně, nebudete je muset vybírat po jednom.
+ setting_default_language: Jazyk vašich tootů může být detekován automaticky, není to však vždy přesné
+ setting_hide_network: Koho sledujete a kdo sleduje vás nebude zobrazeno na vašem profilu
+ setting_noindex: Ovlivňuje váš veřejný profil a stránky příspěvků
+ setting_theme: Ovlivňuje jak Mastodon vypadá, jste-li přihlášen na libovolném zařízení.
+ whole_word: Je-li klíčové slovo či fráze pouze alfanumerická, bude aplikována pouze, pokud se shoduje s celým slovem
+ imports:
+ data: Soubor CSV exportován z jiné instance Mastodon
+ sessions:
+ otp: 'Napište dvoufaktorový kód vygenerovaný vaší mobilní aplikací, nebo použijte jeden z vašich záložních kódů:'
+ user:
+ chosen_languages: Je-li tohle zaškrtnuto, budou ve veřejných časových osách zobrazeny pouze tooty ve zvolených jazycích
+ labels:
+ account:
+ fields:
+ name: Označení
+ value: Obsah
+ defaults:
+ autofollow: Pozvěte ke sledování vašeho účtu
+ avatar: Avatar
+ bot: Tohle je účet robota
+ chosen_languages: Filtrovat jazyky
+ confirm_new_password: Potvrďte nové heslo
+ confirm_password: Potvrdit heslo
+ context: Kontexty filtrů
+ current_password: Současné heslo
+ data: Data
+ display_name: Zobrazované jméno
+ email: E-mailová adresa
+ expires_in: Expirovat po
+ fields: Metadata profilu
+ header: Hlavičkový obrázek
+ inbox_url: URL schránky mostu
+ irreversible: Zahodit místo skrytí
+ locale: Jazyk rozhraní
+ locked: Zamknout účet
+ max_uses: Maximální počet použití
+ new_password: Nové heslo
+ note: O vás
+ otp_attempt: Dvoufaktorový kód
+ password: Heslo
+ phrase: Klíčové slovo či fráze
+ setting_auto_play_gif: Automaticky přehrávat animace GIF
+ setting_boost_modal: Zobrazovat před boostnutím potvrzovací okno
+ setting_default_language: Jazyk příspěvků
+ setting_default_privacy: Soukromí příspěvků
+ setting_default_sensitive: Vždy označovat média jako citlivá
+ setting_delete_modal: Zobrazovat před smazáním tootu potvrzovací okno
+ setting_display_sensitive_media: Vždy zobrazovat média označená jako citlivá
+ setting_hide_network: Skrýt svou síť
+ setting_noindex: Neindexovat svůj profil vyhledávači
+ setting_reduce_motion: Redukovat pohyb v animacích
+ setting_system_font_ui: Použít výchozí písmo systému
+ setting_theme: Motiv stránky
+ setting_unfollow_modal: Zobrazovat před zrušením sledování potvrzovací okno
+ severity: Přísnost
+ type: Typ importu
+ username: Uživatelské jméno
+ username_or_email: Uživatelské jméno nebo e-mail
+ whole_word: Celé slovo
+ interactions:
+ must_be_follower: Blokovat oznámení od lidí, kteří vás nesledují
+ must_be_following: Blokovat oznámení od lidí, které nesledujete
+ must_be_following_dm: Blokovat přímé zprávy od lidí, které nesledujete
+ notification_emails:
+ digest: Posílat e-maily s přehledem
+ favourite: Posílat e-maily, když si někdo oblíbí váš příspěvek
+ follow: Posílat e-maily, když vás někdo začne sledovat
+ follow_request: Posílat e-maily, když vás někdo požádá o sledování
+ mention: Posílat e-maily, když vás někdo zmíní
+ reblog: Posílat e-maily, když někdo boostne váš příspěvek
+ 'no': Ne
+ required:
+ mark: "*"
+ text: požadováno
+ 'yes': Ano
diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml
index e9e795bf4..38e276d52 100644
--- a/config/locales/simple_form.de.yml
+++ b/config/locales/simple_form.de.yml
@@ -13,6 +13,7 @@ de:
other: %{count} Zeichen verbleiben
fields: Du kannst bis zu 4 Elemente als Tabelle dargestellt auf deinem Profil anzeigen lassen
header: PNG, GIF oder JPG. Maximal %{size}. Wird auf 700×335 px herunterskaliert
+ inbox_url: Kopiere die URL von der Startseite des gewünschten Relays
irreversible: Gefilterte Beiträge werden unwiderruflich gefiltert, selbst wenn der Filter später entfernt wurde
locale: Die Sprache der Oberfläche, E-Mails und Push-Benachrichtigungen
locked: Wer dir folgen möchte, muss um deine Erlaubnis bitten
@@ -25,6 +26,7 @@ de:
setting_hide_network: Wem du folgst und wer dir folgt wird in deinem Profil nicht angezeigt
setting_noindex: Betrifft dein öffentliches Profil und deine Beiträge
setting_theme: Wirkt sich darauf aus, wie Mastodon aussieht, egal auf welchem Gerät du eingeloggt bist.
+ whole_word: Wenn das Schlüsselwort oder -phrase nur Buchstaben und Zahlen enthält, wird es nur angewendet werden, wenn es dem ganzen Wort entspricht
imports:
data: CSV-Datei, die aus einer anderen Mastodon-Instanz exportiert wurde
sessions:
@@ -51,6 +53,7 @@ de:
expires_in: Läuft ab
fields: Profil-Metadaten
header: Kopfbild
+ inbox_url: Inbox-URL des Relays
irreversible: Fallen lassen anstatt es zu verstecken
locale: Sprache der Benutzeroberfläche
locked: Gesperrtes Profil
@@ -77,6 +80,7 @@ de:
type: Importtyp
username: Profilname
username_or_email: Profilname oder Email
+ whole_word: Ganzes Wort
interactions:
must_be_follower: Benachrichtigungen von Nicht-Folgenden blockieren
must_be_following: Benachrichtigungen von Profilen blockieren, denen ich nicht folge
diff --git a/config/locales/simple_form.el.yml b/config/locales/simple_form.el.yml
index 75d97dcd0..c85959557 100644
--- a/config/locales/simple_form.el.yml
+++ b/config/locales/simple_form.el.yml
@@ -23,7 +23,7 @@ el:
phrase: Θα ταιριάζει ανεξαρτήτως πεζών/κεφαλαίων ή προειδοποίησης περιεχομένου του τουτ
scopes: Ποια API θα επιτρέπεται στην εφαρμογή να χρησιμοποιήσεις. Αν επιλέξεις κάποιο υψηλό εύρος εφαρμογής, δε χρειάζεται να επιλέξεις και εξειδικευμένα.
setting_default_language: Η γλώσσα των τουτ σου μπορεί να ανιχνευτεί αυτόματα αλλά δεν είναι πάντα ακριβές
- setting_hide_network: Το ποιους ακολουθείς και το ποιοι σε ακολουθούν δε θα φαίνεται στο προφίλ σου
+ setting_hide_network: Δε θα εμφανίζεται στο προφίλ σου ποιους ακολουθείς και ποιοι σε ακολουθούν
setting_noindex: Επηρεάζει το δημόσιο προφίλ και τις δημοσιεύσεις σου
setting_theme: Επηρεάζει την εμφάνιση του Mastodon όταν συνδέεται από οποιαδήποτε συσκευή.
whole_word: Όταν η λέξη ή η φράση κλειδί είναι μόνο αλφαριθμητική, θα εφαρμοστεί μόνο αν ταιριάζει με ολόκληρη τη λέξη
diff --git a/config/locales/simple_form.eu.yml b/config/locales/simple_form.eu.yml
index 481e95e39..649d18484 100644
--- a/config/locales/simple_form.eu.yml
+++ b/config/locales/simple_form.eu.yml
@@ -6,17 +6,20 @@ eu:
autofollow: Gonbidapena erabiliz izena ematen dutenek automatikoki jarraituko zaituzte
avatar: PNG, GIF edo JPG. Gehienez %{size}. %{dimensions}px neurrira eskalatuko da
bot: Kontu honek nagusiki automatizatutako ekintzak burutzen ditu eta agian ez du inork monitorizatzen
+ context: Iragazkia aplikatzeko testuinguru bat edo batzuk
digest: Soilik jarduerarik gabeko epe luze bat eta gero, eta soilik ez zeudela mezu pertsonalen bat jaso baduzu
display_name:
one: Karaktere 1 geratzen da
other: %{count} karaktere geratzen dira
fields: 4 elementu bistaratu ditzakezu taula batean zure profilean
header: PNG, GIF edo JPG. Gehienez %{size}. %{dimensions}px eskalara txikituko da
+ irreversible: Iragazitako toot-ak betirako galduko dira, geroago iragazkia kentzen baduzu ere
locale: Erabiltzaile-interfazea, e-mail mezuen eta jakinarazpenen hizkuntza
locked: Jarraitzaileak eskuz onartu behar dituzu
note:
one: Karaktere1 geratzen da
other: %{count} karaktere geratzen dira
+ phrase: Bat egingo du Maiuskula/minuskula kontuan hartu gabe eta edukiaren abisua kontuan hartu gabe
setting_default_language: Zure toot-en hizkuntza automatikoki antzeman daiteke, baina ez da beti zehatza
setting_hide_network: Nor jarraitzen duzun eta nork jarraitzen zaituen ez da bistaratuko zure profilean
setting_noindex: Zure profil publiko eta toot orrietan eragina du
diff --git a/config/locales/simple_form.fr.yml b/config/locales/simple_form.fr.yml
index 1a5bb3494..a023faf92 100644
--- a/config/locales/simple_form.fr.yml
+++ b/config/locales/simple_form.fr.yml
@@ -13,6 +13,7 @@ fr:
other: %{count} caractères restants
fields: Vous pouvez avoir jusqu'à 4 éléments affichés en tant que tableau sur votre profil
header: Au format PNG, GIF ou JPG. 2 Mo maximum. Sera réduit à %{dimensions}px
+ inbox_url: Copiez l'URL depuis la page d'accueil du relais que vous souhaitez utiliser
irreversible: Les pouets filtrés disparaîtront irrémédiablement, même si le filtre est supprimé plus tard
locale: La langue de l'interface-utilisateur, des courriels, et des notifications
locked: Vous devrez approuver chaque abonné⋅e et vos statuts ne s’afficheront qu’à vos abonné⋅es
@@ -25,6 +26,7 @@ fr:
setting_hide_network: Ceux que vous suivez et ceux qui vous suivent ne seront pas affichés sur votre profil
setting_noindex: Affecte votre profil public ainsi que vos statuts
setting_theme: Affecte l’apparence de Mastodon quand vous êtes connecté·e depuis n’importe quel appareil.
+ whole_word: Lorsque le mot-clef ou la phrase-clef est uniquement alphanumérique, ça sera uniquement appliqué s'il correspond au mot entier
imports:
data: Un fichier CSV généré par une autre instance de Mastodon
sessions:
@@ -51,6 +53,7 @@ fr:
expires_in: Expire après
fields: Métadonnées du profil
header: Image d’en-tête
+ inbox_url: URL de la boîte de relais
irreversible: Supprimer plutôt que de cacher
locale: Langue de l'interface
locked: Verrouiller le compte
@@ -77,6 +80,7 @@ fr:
type: Type d’import
username: Identifiant
username_or_email: Nom d'utilisateur ou courriel
+ whole_word: Mot entier
interactions:
must_be_follower: Masquer les notifications des personnes qui ne vous suivent pas
must_be_following: Masquer les notifications des personnes que vous ne suivez pas
diff --git a/config/locales/uk.yml b/config/locales/uk.yml
index 1380635eb..5a37c0c36 100644
--- a/config/locales/uk.yml
+++ b/config/locales/uk.yml
@@ -4,29 +4,44 @@ uk:
about_hashtag_html: Немає публічних постів з хештегом#%{hashtag} . Ви можете You can interact with them if you have an account anywhere in the fediverse.
about_mastodon_html: Mastodon - це вільна соціальна мережа з відкритим вихідним кодом . Вона є децентралізованою альтернативою комерційним платформам, що дозволяє уникнути ризиків монополізації вашого спілкування однією компанією. Виберіть сервер, якому ви довіряєте — що б ви не вибрали, Ви зможете спілкуватись з усіма іншими. Будь-який користувач може запустити власну інстанцію Mastodon та без проблем брати участь в соціальній мережі .
about_this: Про цю інстанцію
+ administered_by: 'Адміністратор:'
+ api: API
closed_registrations: На даний момент реєстрація на цій інстанції закрита.
contact: Зв'язатися
contact_missing: Не зазначено
+ contact_unavailable: Недоступно
+ documentation: Документація
+ extended_description_html: |
+ Гарне місце для правил
+ Детальний опис ще не налаштований.
features:
+ humane_approach_body: Навчаючись з помилок інших соціальних мереж, Mastodon націлений на етичні рішення для боротьби з направильним використанням соціальних медіа.
humane_approach_title: Більш людський підхід
+ not_a_product_body: Mastodon - це некомерційна мережа. Ніякої реклами, збору даних і залізних стін. Тут немає центральної влади.
+ not_a_product_title: Ви - особистість, а не продукт
real_conversation_title: Побудований для справжньої розмови
+ within_reach_body: Велика кількість застосунків для iOS, Android та інших платформ, завдяки дружній до розробника екосистемі дозволяє бути на звязку з друзями звідусіль.
within_reach_title: Завжди на звязку
generic_description: "%{domain} є одним сервером у мережі"
- hosted_on: Мастодон розміщено на %{domain}
+ hosted_on: Mastodon розміщено на %{domain}
learn_more: Дізнатися більше
other_instances: Інші інстанції
+ privacy_policy: Політика приватності
source_code: Вихідний код
status_count_after: статусів
status_count_before: Опубліковано
+ terms: Правила використання
user_count_after: користувачів
user_count_before: Тут живе
- what_is_mastodon: Що таке Мастодон?
+ what_is_mastodon: Що таке Mastodon?
accounts:
follow: Підписатися
followers: Підписники
following: Підписаний(-а)
+ joined: Приєднався %{date}
media: Медіа
moved_html: "%{name} переїхав на %{new_profile_link}:"
+ network_hidden: Ця інформація недоступна
nothing_here: Тут нічого немає!
people_followed_by: Люди, на яких підписаний(-а) %{name}
people_who_follow: Підписники %{name}
@@ -47,30 +62,42 @@ uk:
accounts:
are_you_sure: Ви впевнені?
avatar: Аватар
+ by_domain: Домен
change_email:
changed_msg: Поштова адреса аккаунту успішно змінена!
current_email: Поточна поштова адреса
label: Змінити поштову адресу
+ new_email: Новий e-mail
submit: Змінити поштову адресу
title: Змінити поштову адресу для %{username}
confirm: Зберегти
confirmed: Збережено
confirming: Зберігається
+ demote: Усунути
+ disable: Вимкнути
+ disable_two_factor_authentication: Вимкнути двофакторну авторизацію
+ disabled: Вимкнено
display_name: Відображуване ім'я
domain: Домен
edit: Змінити
email: Email
+ email_status: Статус e-mail
+ enable: Увімкнути
+ enabled: Увімкнено
feed_url: URL фіду
followers: Підписники
followers_url: URL підписників
follows: Підписки
+ inbox_url: Вхідний URL
ip: IP
location:
all: Усі
local: Локальні
remote: Віддалені
title: Розміщення
+ login_status: Статус авторизації
media_attachments: Мультимедійні вкладення
+ memorialize: Зробити пам'ятником
moderation:
all: Усі
silenced: Заглушені
@@ -87,11 +114,16 @@ uk:
outbox_url: Вихідний URL
perform_full_suspension: Повне блокування
profile_url: URL профілю
+ promote: Просунути
protocol: Протокол
public: Публічний
push_subscription_expires: Підписка PuSH спливає
redownload: Оновити аватар
remove_avatar: Видалити аватар
+ resend_confirmation:
+ already_confirmed: Цей користувач уже підтверджений
+ send: Надіслати підтвердження ще раз
+ success: Повідомлення з підтвердженням успішно надіслано!
reset: Скинути
reset_password: Зкинути пароль
resubscribe: Перепідписатися
@@ -105,11 +137,14 @@ uk:
search: Пошук
shared_inbox_url: URL спільного вхідного кошика
show:
+ created_reports: Скарги створені цим аккаунтом
report: скарга
+ targeted_reports: Скарги щодо цього аккаунту
silence: Глушення
statuses: Статуси
subscribe: Підписатися
title: Акаунти
+ unconfirmed_email: Непідтверджений e-mail
undo_silenced: Зняти глушення
undo_suspension: Зняти блокування
unsubscribe: Відписатися
@@ -123,6 +158,7 @@ uk:
create_custom_emoji: "%{name} вивантажив(-ла) нове емодзі %{target}"
create_domain_block: "%{name} заблокував(-ла) домен %{target}"
create_email_domain_block: "%{name} додав(-ла) поштовий домен %{target} до чорного списку"
+ demote_user: "%{name} понизив(-ла) %{target}"
destroy_domain_block: "%{name} розблокував(-ла) домен %{target}"
destroy_email_domain_block: "%{name} додав(-ла) поштовий домен %{target} до білого списку"
destroy_status: "%{name} видалив(-ла) статус користувача %{target}"
@@ -131,11 +167,16 @@ uk:
disable_user: "%{name} заборонив(-ла) авторизацію користувачу %{target}"
enable_custom_emoji: "%{name} увімкнув(-ла) емодзі %{target}"
enable_user: "%{name} увімкнув(-ла) авторизацію користувачу %{target}"
+ memorialize_account: "%{name} перетворив(-ла) сторінку %{target} у пам'ятник"
promote_user: "%{name} підвищив(-ла) користувача %{target}"
remove_avatar_user: "%{name} прибрав(-ла) аватар користувача %{target}"
reopen_report: "%{name} перевідкрив(-ла) скаргу %{target}"
reset_password_user: "%{name} скинув(-ла) пароль користувача %{target}"
+ resolve_report: "%{name} розв'язав(-ла) скаргу %{target}"
+ silence_account: "%{name} заглушив(-ла) аккаунт %{target}"
suspend_account: "%{name} заблокував аккаунт користувача %{target}"
+ unassigned_report: "%{name} зняв(-ла) призначення скарги %{target}"
+ unsilence_account: "%{name} розглушив(-ла) аккаунт %{target}"
unsuspend_account: "%{name} розблокував аккаунт користувача %{target}"
update_custom_emoji: "%{name} оновив(-ла) емодзі %{target}"
update_status: "%{name} змінив(-ла) статус користуача %{target}"
@@ -167,6 +208,7 @@ uk:
upload: Вивантажити
dashboard:
config: Налаштування
+ feature_deletions: Видалення аккаунтів
feature_invites: Посилання-запрошення
feature_registrations: Реєстрації
features: Можливості
@@ -261,6 +303,7 @@ uk:
mark_as_unresolved: Відмітити як невирішену
notes:
create: Додати примітку
+ create_and_resolve: Розв'язати з приміткою
create_and_unresolve: Перевідкрити з приміткою
delete: Видалити
placeholder: Опишіть, які дії були виконані, або інші зміни, що стосуються справи...
@@ -444,7 +487,7 @@ uk:
'500':
content: Пробачте, та щось пішло не так з нашого боку.
title: Ця сторінка неправильна
- noscript_html: Для використання веб-застосунку Мастодон, будь-ласка увімкніть JavaScript. Якщо у вас немає такої можливості, скористайтесь одним із нативних застосунків для Мастодон для вашої платформи.
+ noscript_html: Для використання веб-застосунку Mastodon, будь-ласка увімкніть JavaScript. Якщо у вас немає такої можливості, скористайтесь одним із нативних застосунків для Mastodon для вашої платформи.
exports:
archive_takeout:
date: Дата
@@ -629,7 +672,7 @@ uk:
weibo: Weibo
current_session: Активна сесія
description: "%{browser} на %{platform}"
- explanation: Це веб-браузери, нині авторизовані до вашого аккаунту Мастодон.
+ explanation: Це веб-браузери, нині авторизовані до вашого аккаунту Mastodon.
ip: IP
platforms:
adobe_air: Adobe Air
@@ -649,7 +692,7 @@ uk:
title: Сесії
settings:
authorized_apps: Авторизовані застосунки
- back: Назад у Мастодон
+ back: Назад у Mastodon
delete: Видалення аккаунту
development: Розробка
edit_profile: Редагувати профіль
@@ -660,7 +703,7 @@ uk:
notifications: Сповіщення
preferences: Налаштування
settings: Опції
- two_factor_authentication: Двофакторна аутентифікація
+ two_factor_authentication: Двофакторна авторизація
your_apps: Ваші затосунки
statuses:
attached:
From 84e2446d26d7ef6031ae5c63a9c311e28a0dadaa Mon Sep 17 00:00:00 2001
From: Nathaniel Ekoniak
Date: Sat, 11 Aug 2018 01:52:05 -0400
Subject: [PATCH 076/196] i18n: fix Slovak language name (#8169)
---
app/helpers/settings_helper.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/helpers/settings_helper.rb b/app/helpers/settings_helper.rb
index a9539e6e0..8528be267 100644
--- a/app/helpers/settings_helper.rb
+++ b/app/helpers/settings_helper.rb
@@ -34,7 +34,7 @@ module SettingsHelper
pt: 'Português',
'pt-BR': 'Português do Brasil',
ru: 'Русский',
- sk: 'Slovensky',
+ sk: 'Slovenčina',
sl: 'Slovenščina',
sr: 'Српски',
'sr-Latn': 'Srpski (latinica)',
From 7b5ea7270db8de2a57e3a93dad4aaa5cd46d2d99 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?M=C3=A9lanie=20Chauvel=20=28ariasuni=29?=
Date: Sat, 11 Aug 2018 11:52:53 +0200
Subject: [PATCH 077/196] =?UTF-8?q?Fix=20crash=20when=20clicking=20?=
=?UTF-8?q?=E2=80=9CShow=20more/less=20for=20all=E2=80=9D=20when=20a=20too?=
=?UTF-8?q?t=20is=20not=20visible=20(#8118)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/javascript/mastodon/reducers/statuses.js | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/app/javascript/mastodon/reducers/statuses.js b/app/javascript/mastodon/reducers/statuses.js
index 3abe69bce..6e3d830da 100644
--- a/app/javascript/mastodon/reducers/statuses.js
+++ b/app/javascript/mastodon/reducers/statuses.js
@@ -49,11 +49,19 @@ export default function statuses(state = initialState, action) {
return state.setIn([action.id, 'muted'], false);
case STATUS_REVEAL:
return state.withMutations(map => {
- action.ids.forEach(id => map.setIn([id, 'hidden'], false));
+ action.ids.forEach(id => {
+ if (!(state.get(id) === undefined)) {
+ map.setIn([id, 'hidden'], false);
+ }
+ });
});
case STATUS_HIDE:
return state.withMutations(map => {
- action.ids.forEach(id => map.setIn([id, 'hidden'], true));
+ action.ids.forEach(id => {
+ if (!(state.get(id) === undefined)) {
+ map.setIn([id, 'hidden'], true);
+ }
+ });
});
case TIMELINE_DELETE:
return deleteStatus(state, action.id, action.references);
From 44680c46ed55065d73f6fc64e349b39fa57673e9 Mon Sep 17 00:00:00 2001
From: ThibG
Date: Sat, 11 Aug 2018 11:53:10 +0200
Subject: [PATCH 078/196] Ensure single user is a local user (fixes #8154)
(#8157)
---
app/controllers/home_controller.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb
index b71424107..b5d6460f9 100644
--- a/app/controllers/home_controller.rb
+++ b/app/controllers/home_controller.rb
@@ -58,7 +58,7 @@ class HomeController < ApplicationController
if request.path.start_with?('/web')
new_user_session_path
elsif single_user_mode?
- short_account_path(Account.first)
+ short_account_path(Account.local.where(suspended: false).first)
else
about_path
end
From cbc2e6bd4094bf2e9d3bf71d7150b8a46cba171b Mon Sep 17 00:00:00 2001
From: ThibG
Date: Sat, 11 Aug 2018 18:00:41 +0200
Subject: [PATCH 079/196] Make some migration script more robust (fixes #8007)
(#8170)
Include a dummy Account class in the migration script containing only the
attributes relevant to the migration in order to not rely as much on the
codebase being in sync with the database schema.
---
db/migrate/20180528141303_fix_accounts_unique_index.rb | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/db/migrate/20180528141303_fix_accounts_unique_index.rb b/db/migrate/20180528141303_fix_accounts_unique_index.rb
index 96cee37f9..624ea229e 100644
--- a/db/migrate/20180528141303_fix_accounts_unique_index.rb
+++ b/db/migrate/20180528141303_fix_accounts_unique_index.rb
@@ -1,4 +1,13 @@
class FixAccountsUniqueIndex < ActiveRecord::Migration[5.2]
+ class Account < ApplicationRecord
+ # Dummy class, to make migration possible across version changes
+ has_one :user, inverse_of: :account
+
+ def local?
+ domain.nil?
+ end
+ end
+
disable_ddl_transaction!
def up
From 38e39c9366d16ccb6536b4de5164e76684ff500b Mon Sep 17 00:00:00 2001
From: Yamagishi Kazutoshi
Date: Sun, 12 Aug 2018 04:59:23 +0900
Subject: [PATCH 080/196] Weblate translations (2018-08-12) (#8171)
* Translated using Weblate (Japanese)
Currently translated at 100.0% (307 of 307 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/ja/
* Translated using Weblate (Japanese)
Currently translated at 98.5% (657 of 667 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Japanese)
Currently translated at 98.5% (657 of 667 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Japanese)
Currently translated at 99.8% (666 of 667 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Czech)
Currently translated at 100.0% (307 of 307 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/cs/
* Translated using Weblate (Czech)
Currently translated at 98.5% (657 of 667 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/cs/
* Translated using Weblate (Czech)
Currently translated at 100.0% (307 of 307 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/cs/
* Translated using Weblate (Czech)
Currently translated at 99.8% (666 of 667 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/cs/
* Translated using Weblate (Czech)
Currently translated at 100.0% (2 of 2 strings)
Translation: Mastodon/Activerecord
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/activerecord/cs/
* Translated using Weblate (Czech)
Currently translated at 61.2% (38 of 62 strings)
Translation: Mastodon/Devise
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/devise/cs/
* Translated using Weblate (Ukrainian)
Currently translated at 51.2% (42 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/uk/
* Translated using Weblate (Czech)
Currently translated at 100.0% (62 of 62 strings)
Translation: Mastodon/Devise
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/devise/cs/
* Translated using Weblate (Galician)
Currently translated at 99.8% (666 of 667 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/gl/
* Translated using Weblate (Portuguese (Brazil))
Currently translated at 99.8% (666 of 667 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/pt_BR/
* Translated using Weblate (Dutch)
Currently translated at 100.0% (667 of 667 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/nl/
* Translated using Weblate (Ukrainian)
Currently translated at 99.6% (306 of 307 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/uk/
* Translated using Weblate (Czech)
Currently translated at 67.0% (55 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/cs/
* Translated using Weblate (Ukrainian)
Currently translated at 97.0% (647 of 667 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/uk/
* Translated using Weblate (Ukrainian)
Currently translated at 97.1% (648 of 667 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/uk/
* Translated using Weblate (Czech)
Currently translated at 100.0% (82 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/cs/
* Translated using Weblate (Czech)
Currently translated at 18.3% (18 of 98 strings)
Translation: Mastodon/Doorkeeper
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/cs/
* Translated using Weblate (Danish)
Currently translated at 79.3% (529 of 667 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/da/
* Translated using Weblate (Czech)
Currently translated at 61.2% (60 of 98 strings)
Translation: Mastodon/Doorkeeper
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/cs/
* Translated using Weblate (Czech)
Currently translated at 100.0% (98 of 98 strings)
Translation: Mastodon/Doorkeeper
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/cs/
* Translated using Weblate (Occitan)
Currently translated at 99.7% (667 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/oc/
* Translated using Weblate (German)
Currently translated at 96.5% (646 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/de/
* Translated using Weblate (Japanese)
Currently translated at 99.7% (667 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Portuguese (Brazil))
Currently translated at 99.8% (668 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/pt_BR/
* Translated using Weblate (Czech)
Currently translated at 99.8% (668 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/cs/
* Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (307 of 307 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/pt_BR/
* Translated using Weblate (Corsican)
Currently translated at 99.3% (305 of 307 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/co/
* Translated using Weblate (Corsican)
Currently translated at 92.2% (617 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/co/
* Translated using Weblate (Telugu)
Currently translated at 100.0% (307 of 307 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/te/
* Translated using Weblate (Arabic)
Currently translated at 91.4% (75 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/ar/
* Translated using Weblate (Arabic)
Currently translated at 100.0% (307 of 307 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/ar/
* Translated using Weblate (Arabic)
Currently translated at 92.9% (622 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ar/
* Translated using Weblate (Danish)
Currently translated at 92.8% (91 of 98 strings)
Translation: Mastodon/Doorkeeper
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/da/
* Translated using Weblate (Greek)
Currently translated at 99.8% (668 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/el/
* Translated using Weblate (Danish)
Currently translated at 82.0% (549 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/da/
* Translated using Weblate (Portuguese (Brazil))
Currently translated at 99.8% (668 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/pt_BR/
* Translated using Weblate (Korean)
Currently translated at 98.2% (657 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ko/
* Translated using Weblate (Korean)
Currently translated at 100.0% (307 of 307 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/ko/
* Translated using Weblate (German)
Currently translated at 97.7% (654 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/de/
* Translated using Weblate (Corsican)
Currently translated at 98.5% (659 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/co/
* Translated using Weblate (Corsican)
Currently translated at 100.0% (82 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/co/
* Translated using Weblate (Corsican)
Currently translated at 100.0% (307 of 307 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/co/
* Translated using Weblate (Corsican)
Currently translated at 100.0% (98 of 98 strings)
Translation: Mastodon/Doorkeeper
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/co/
* Translated using Weblate (French)
Currently translated at 100.0% (307 of 307 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/fr/
* Translated using Weblate (Basque)
Currently translated at 96.2% (644 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/eu/
* Translated using Weblate (Basque)
Currently translated at 100.0% (98 of 98 strings)
Translation: Mastodon/Doorkeeper
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/eu/
* Translated using Weblate (Basque)
Currently translated at 90.2% (74 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/eu/
* Translated using Weblate (Basque)
Currently translated at 100.0% (307 of 307 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/eu/
* Translated using Weblate (Czech)
Currently translated at 99.8% (668 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/cs/
* Translated using Weblate (Czech)
Currently translated at 100.0% (2 of 2 strings)
Translation: Mastodon/Activerecord
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/activerecord/cs/
* Translated using Weblate (Czech)
Currently translated at 100.0% (82 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/cs/
* Translated using Weblate (Czech)
Currently translated at 100.0% (307 of 307 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/cs/
* Translated using Weblate (Asturian)
Currently translated at 29.8% (200 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ast/
* Translated using Weblate (Greek)
Currently translated at 99.8% (668 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/el/
* Translated using Weblate (Greek)
Currently translated at 100.0% (307 of 307 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/el/
* Translated using Weblate (Czech)
Currently translated at 100.0% (98 of 98 strings)
Translation: Mastodon/Doorkeeper
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/cs/
* Translated using Weblate (German)
Currently translated at 100.0% (98 of 98 strings)
Translation: Mastodon/Doorkeeper
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/de/
* Translated using Weblate (Greek)
Currently translated at 100.0% (82 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/el/
* Translated using Weblate (German)
Currently translated at 96.3% (79 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/de/
* Translated using Weblate (German)
Currently translated at 99.7% (667 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/de/
* Translated using Weblate (German)
Currently translated at 100.0% (307 of 307 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/de/
* Translated using Weblate (German)
Currently translated at 100.0% (98 of 98 strings)
Translation: Mastodon/Doorkeeper
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/de/
* Translated using Weblate (French)
Currently translated at 100.0% (98 of 98 strings)
Translation: Mastodon/Doorkeeper
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/fr/
* Translated using Weblate (German)
Currently translated at 97.5% (80 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/de/
* Translated using Weblate (French)
Currently translated at 100.0% (82 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/fr/
* Translated using Weblate (French)
Currently translated at 100.0% (307 of 307 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/fr/
* Translated using Weblate (German)
Currently translated at 98.7% (81 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/de/
* Translated using Weblate (German)
Currently translated at 99.8% (668 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/de/
* Translated using Weblate (German)
Currently translated at 98.7% (81 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/de/
* Translated using Weblate (German)
Currently translated at 98.7% (82 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/de/
* Translated using Weblate (French)
Currently translated at 97.4% (652 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/fr/
* Translated using Weblate (German)
Currently translated at 99.8% (668 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/de/
* Translated using Weblate (Japanese)
Currently translated at 99.8% (668 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (German)
Currently translated at 99.8% (668 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/de/
* Translated using Weblate (Dutch)
Currently translated at 100.0% (669 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/nl/
* Translated using Weblate (German)
Currently translated at 99.8% (668 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/de/
* Translated using Weblate (Danish)
Currently translated at 85.0% (569 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/da/
* Translated using Weblate (Czech)
Currently translated at 100.0% (307 of 307 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/cs/
* Translated using Weblate (Dutch)
Currently translated at 100.0% (307 of 307 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/nl/
* Translated using Weblate (Dutch)
Currently translated at 100.0% (669 of 669 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/nl/
* yarn manage:translations
* i18n-tasks normalize && i18n-tasks remove-unused
---
app/javascript/mastodon/locales/cs.json | 2 +-
app/javascript/mastodon/locales/nl.json | 2 +-
config/locales/da.yml | 22 +++++++++++
config/locales/de.yml | 10 ++---
config/locales/fr.yml | 49 ++++++++++++++++++++++++-
config/locales/ja.yml | 2 +-
config/locales/nl.yml | 5 ++-
config/locales/simple_form.ar.yml | 2 +
8 files changed, 84 insertions(+), 10 deletions(-)
diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json
index 6efb99381..e93baf750 100644
--- a/app/javascript/mastodon/locales/cs.json
+++ b/app/javascript/mastodon/locales/cs.json
@@ -252,7 +252,7 @@
"search_results.hashtags": "Hashtagy",
"search_results.statuses": "Tooty",
"search_results.total": "{count, number} {count, plural, one {výsledek} other {výsledků}}",
- "standalone.public_title": "Nahlédnout dovnitř...",
+ "standalone.public_title": "Nahlédněte dovnitř...",
"status.block": "Zablokovat uživatele @{name}",
"status.cancel_reblog_private": "Zrušit boost",
"status.cannot_reblog": "Tento příspěvek nemůže být boostnutý",
diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json
index 5c6d18e1d..c19598a21 100644
--- a/app/javascript/mastodon/locales/nl.json
+++ b/app/javascript/mastodon/locales/nl.json
@@ -139,7 +139,7 @@
"keyboard_shortcuts.hotkey": "Sneltoets",
"keyboard_shortcuts.legend": "om deze legenda te tonen",
"keyboard_shortcuts.mention": "om de auteur te vermelden",
- "keyboard_shortcuts.profile": "to open author's profile",
+ "keyboard_shortcuts.profile": "om het gebruikersprofiel te openen",
"keyboard_shortcuts.reply": "om te reageren",
"keyboard_shortcuts.search": "om het zoekvak te focussen",
"keyboard_shortcuts.toggle_hidden": "om tekst achter een waarschuwing (CW) te tonen/verbergen",
diff --git a/config/locales/da.yml b/config/locales/da.yml
index 54da05aa8..1a27db34f 100644
--- a/config/locales/da.yml
+++ b/config/locales/da.yml
@@ -368,6 +368,7 @@ da:
confirmed: Bekræftet
expires_in: Udløber om
last_delivery: Sidste levering
+ title: Websub
topic: Emne
title: Administration
admin_mailer:
@@ -403,6 +404,7 @@ da:
saml: SAML
register: Opret dig
register_elsewhere: Opret dig på en anden server
+ resend_confirmation: Gensend bekræftelses instrukser
reset_password: Nulstil kodeord
security: Sikkerhed
set_new_password: Sæt et nyt kodeord
@@ -539,6 +541,8 @@ da:
body: "%{name} følger dig nu!"
subject: "%{name} følger dig nu"
title: Ny følger
+ follow_request:
+ body: "%{name} har anmodet om at følge dig"
mention:
action: Svar
body: 'Du blev nævnt af %{name} i:'
@@ -554,6 +558,10 @@ da:
units:
billion: mia.
million: mio.
+ quadrillion: Q
+ thousand: K
+ trillion: T
+ unit: "\n"
pagination:
newer: Nyere
next: Næste
@@ -578,18 +586,23 @@ da:
browsers:
blackberry: Blackberry OS
chrome: Google Chrome
+ edge: Microsoft edge
firefox: Mozilla Firefox
generic: Ukendt browser
ie: IE
+ qq: QQ browser
safari: Apple Safari
description: "%{browser} på %{platform}"
ip: IP
platforms:
+ adobe_air: Adobe air
android: Android
ios: iOS
linux: Linux
mac: Mac.
other: ukendt platform
+ windows: Microsoft windows
+ windows_phone: Windows fon
settings:
authorized_apps: Godkendte apps
back: Tilbage til Mastodon
@@ -602,6 +615,7 @@ da:
notifications: Notifikationer
preferences: Indstillinger
settings: Indstillinger
+ two_factor_authentication: To-faktor godkendelse
your_apps: Dine applikationer
statuses:
attached:
@@ -615,10 +629,13 @@ da:
boosted_from_html: Fremhævet fra %{acct_link}
content_warning: 'Advarsel om indhold: %{warning}'
language_detection: Opfang automatisk sprog
+ open_in_web: Åbn i browser
+ over_character_limit: grænsen på %{max} tegn er overskredet
pin_errors:
limit: Du har allerede fastgjort det maksimale antal trut
ownership: Dun kan ikke fastgøre en anden persons toot
private: Ikke offentlige trut kan ikke blive fastgjort
+ reblog: Fremhævede trut kan ikke fastgøres
show_more: Vis mere
title: '%{name}: "%{quote}"'
visibilities:
@@ -627,15 +644,20 @@ da:
public: Offentlig
public_long: Alle kan se
unlisted: Ikke listet
+ unlisted_long: Alle kan se, men vil ikke være listet på offentlige tidslinjer
stream_entries:
pinned: Fastgjort toot
+ reblogged: fremhævede
sensitive_content: Følsomt indhold
+ terms:
+ title: Vilkår og privatlivpolitik for %{instance}
themes:
contrast: Høj kontrast
default: Mastodon
mastodon-light: Mastodon (lys)
time:
formats:
+ default: "%b %d, %Y, %H:%M"
month: "%b %Y"
two_factor_authentication:
code_hint: Indtast koden der er genereret af din app for at bekræfte
diff --git a/config/locales/de.yml b/config/locales/de.yml
index 8c221e957..299e74392 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -27,7 +27,7 @@ de:
hosted_on: Mastodon, beherbergt auf %{domain}
learn_more: Mehr erfahren
other_instances: Andere Instanzen
- privacy_policy: Datenschutzbestimmungen
+ privacy_policy: Datenschutzerklärung
source_code: Quellcode
status_count_after: Beiträge verfassten
status_count_before: die
@@ -56,7 +56,7 @@ de:
unfollow: Entfolgen
admin:
account_moderation_notes:
- create: Notiz hinterlassen
+ create: Notiz erstellen
created_msg: Moderationsnotiz erfolgreich erstellt!
delete: Löschen
destroyed_msg: Moderationsnotiz erfolgreich gelöscht!
@@ -224,7 +224,7 @@ de:
space: Speicherverbrauch
title: Übersicht
total_users: Benutzer Insgesamt
- trends: Tendenz
+ trends: Trends
week_interactions: Interaktionen diese Woche
week_users_active: Aktiv diese Woche
week_users_new: Benutzer diese Woche
@@ -501,7 +501,7 @@ de:
archive_takeout:
date: Datum
download: Dein Archiv herunterladen
- hint_html: Du kannst ein Archiv deiner Beiträge und hochgeladenen Medien anfragen. Die exportierten Daten werden im ActivityPub-Format gespeichert, welches mit jeder Software lesbar ist, die das Format unterstützt. Du kannst alle 7 Tage ein neues Archiv anfordern.
+ hint_html: Du kannst ein Archiv deiner Beiträge und hochgeladenen Medien anfragen. Die exportierten Daten werden im ActivityPub-Format gespeichert, welches mit jeder Software lesbar ist die das Format unterstützt. Du kannst alle 7 Tage ein Archiv anfordern.
in_progress: Stelle dein Archiv zusammen...
request: Dein Archiv anfragen
size: Größe
@@ -885,6 +885,6 @@ de:
users:
invalid_email: Ungültige E-Mail-Adresse
invalid_otp_token: Ungültiger Zwei-Faktor-Authentisierungs-Code
- otp_lost_help_html: Wenn Sie zu beidem keinen Zugriff mehr haben, kontaktieren sie %{email}
+ otp_lost_help_html: Wenn Du beides nicht mehr weißt, melde Dich bei uns unter der E-Mailadresse %{email}
seamless_external_login: Du bist angemeldet über einen Drittanbieter-Dienst, weswegen Passwort- und E-Maileinstellungen nicht verfügbar sind.
signed_in_as: 'Angemeldet als:'
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index 2eb1ba0ce..c6884fd4a 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -5,10 +5,12 @@ fr:
about_mastodon_html: Mastodon est un réseau social utilisant des formats ouverts et des logiciels libres. Comme le courriel, il est décentralisé.
about_this: À propos
administered_by: 'Administré par :'
+ api: API
closed_registrations: Les inscriptions sont actuellement fermées sur cette instance. Cependant, vous pouvez trouver une autre instance sur laquelle vous créer un compte et à partir de laquelle vous pourrez accéder au même réseau.
contact: Contact
contact_missing: Manquant
contact_unavailable: Non disponible
+ documentation: Documentation
extended_description_html: |
Un bon endroit pour les règles
La description étendue n’a pas été remplie.
@@ -202,6 +204,23 @@ fr:
update_failed_msg: N'a pas pu mettre à jour cet emoji
updated_msg: Emoji mis à jour avec succès !
upload: Téléverser
+ dashboard:
+ config: Configuration
+ feature_invites: Liens d'invitation
+ feature_relay: Relais de fédération
+ features: Fonctionnalités
+ hidden_service: Fédération avec des services cachés
+ recent_users: Utilisateurs récents
+ search: Recherche texte-plein
+ single_user_mode: Mode utilisateur unique
+ software: Logiciel
+ space: Utilisation d'espace
+ title: Tableau de bord
+ total_users: utilisateurs au total
+ trends: Tendances
+ week_interactions: interactions cette semaine
+ week_users_active: actif cette semaine
+ week_users_new: utilisateurs cette semaine
domain_blocks:
add_new: Ajouter
created_msg: Le blocage de domaine est désormais activé
@@ -257,6 +276,12 @@ fr:
expired: Expiré
title: Filtre
title: Invitations
+ relays:
+ add_new: Ajouter un nouveau relais
+ inbox_url: URL de relais
+ setup: Paramétrer une connexion de relais
+ status: Statut
+ title: Relais
report_notes:
created_msg: Note de signalement créée avec succès !
destroyed_msg: Note de signalement effacée avec succès !
@@ -332,11 +357,13 @@ fr:
desc_html: Montrer un badge de responsable sur une page utilisateur
title: Montrer un badge de responsable
site_description:
- desc_html: Paragraphe introductif sur la page d'accueil et dans les méta-balises. Vous pouvez utiliser des balises HTML, en particulier <a>
et <em>
.
+ desc_html: Paragraphe introductif sur la page d'accueil. Décrivez ce qui rend spécifique ce serveur Mastodon et toute autre chose importante. Vous pouvez utiliser des balises HTML, en particulier <a>
et <em>
.
title: Description du site
site_description_extended:
desc_html: Affichée sur la page d’informations complémentaires du site Vous pouvez utiliser des balises HTML
title: Description étendue du site
+ site_short_description:
+ title: Description courte de l'instance
site_terms:
desc_html: Affichée sur la page des conditions d’utilisation du site Vous pouvez utiliser des balises HTML
title: Politique de confidentialité
@@ -470,6 +497,19 @@ fr:
follows: Vous suivez
mutes: Vous masquez
storage: Médias stockés
+ filters:
+ contexts:
+ home: Ligne de temps personnelle
+ notifications: Notifications
+ public: Lignes de temps public
+ thread: Conversations
+ edit:
+ title: Filtre d'édition
+ index:
+ delete: Effacer
+ title: Filtres
+ new:
+ title: Ajouter un nouveau filtre
followers:
domain: Domaine
explanation_html: Si vous voulez être sûr⋅e que vos statuts restent privés, vous devez savoir qui vous suit. Vos statuts privés seront diffusés à toutes les instances des utilisateur⋅ice⋅s qui vous suivent . Vous voudrez peut-être les passer en revue et les supprimer si vous n’êtes pas sûr⋅e que votre vie privée sera respectée par l’administration ou le logiciel de ces instances.
@@ -482,6 +522,10 @@ fr:
true_privacy_html: Soyez conscient⋅e⋅s qu’une vraie confidentialité ne peut être atteinte que par un chiffrement de bout-en-bout .
unlocked_warning_html: N’importe qui peut vous suivre et voir vos statuts privés. %{lock_link} afin de pouvoir vérifier et rejeter des abonné⋅e⋅s.
unlocked_warning_title: Votre compte n’est pas privé
+ footer:
+ developers: Développeurs
+ more: Davantage…
+ resources: Ressources
generic:
changes_saved_msg: Les modifications ont été enregistrées avec succès !
save_changes: Enregistrer les modifications
@@ -509,6 +553,7 @@ fr:
'86400': 1 jour
expires_in_prompt: Jamais
generate: Générer
+ invited_by: 'Vous avez été invité par :'
max_uses:
one: 1 usage
other: "%{count} usages"
@@ -667,6 +712,7 @@ fr:
disallowed_hashtags:
one: 'contient un hashtag désactivé : %{tags}'
other: 'contient les hashtag désactivés : %{tags}'
+ language_detection: Détecter automatiquement la langue
open_in_web: Ouvrir sur le web
over_character_limit: limite de caractères dépassée de %{max} caractères
pin_errors:
@@ -696,6 +742,7 @@ fr:
time:
formats:
default: "%d %b %Y, %H:%M"
+ month: "%b %Y"
two_factor_authentication:
code_hint: Entrez le code généré par votre application pour confirmer
description_html: Si vous activez l’identification à deux facteurs , vous devrez être en possession de votre téléphone afin de générer un code de connexion.
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index b0adbbb5d..5fe784aae 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -369,7 +369,7 @@ ja:
desc_html: ユーザーページにスタッフのバッジを表示します
title: スタッフバッジを表示する
site_description:
- desc_html: フロントページへの表示と meta タグに使用される紹介文です。HTMLタグ、特に<a>
と <em>
が使えます。
+ desc_html: フロントページへの表示に使用される紹介文です。このMastodonインスタンスを特徴付けることやその他重要なことを記述してください。HTMLタグ、特に<a>
と <em>
が使えます。
title: インスタンスの説明
site_description_extended:
desc_html: あなたのインスタンスにおける行動規範やルール、ガイドライン、そのほかの記述をする際に最適な場所です。HTMLタグが使えます
diff --git a/config/locales/nl.yml b/config/locales/nl.yml
index c3390fe73..f11717208 100644
--- a/config/locales/nl.yml
+++ b/config/locales/nl.yml
@@ -369,11 +369,14 @@ nl:
desc_html: Medewerkersbadge op profielpagina tonen
title: Medewerkersbadge tonen
site_description:
- desc_html: Dit wordt als een alinea op de voorpagina getoond en gebruikt als meta-tag in de paginabron. Je kan HTML gebruiken, zoals <a>
en <em>
.
+ desc_html: Dit wordt als een alinea op de voorpagina getoond. Beschrijf wat er speciaal is aan deze server en andere zaken die van belang zijn. Je kan HTML gebruiken, zoals <a>
en <em>
.
title: Omschrijving Mastodonserver
site_description_extended:
desc_html: Wordt op de uitgebreide informatiepagina weergegeven Je kan ook hier HTML gebruiken
title: Uitgebreide omschrijving Mastodonserver
+ site_short_description:
+ desc_html: Dit wordt in de zijbalk getoond als en als metatag in de paginabron. Beschrijf in één alinea wat Mastodon is en wat deze server speciaal maakt. De (langere) omschrijving van de Mastodonserver wordt gebruikt wanneer dit veld wordt leeg gelaten.
+ title: Korte omschrijving Mastodonserver
site_terms:
desc_html: Je kan hier jouw eigen privacybeleid, gebruiksvoorwaarden en ander juridisch jargon kwijt. Je kan HTML gebruiken
title: Aangepaste gebruiksvoorwaarden
diff --git a/config/locales/simple_form.ar.yml b/config/locales/simple_form.ar.yml
index c7eb95857..d7cb88a6f 100644
--- a/config/locales/simple_form.ar.yml
+++ b/config/locales/simple_form.ar.yml
@@ -8,12 +8,14 @@ ar:
bot: يُعلِم أنّ هذا الحساب لا يمثل شخصًا
context: واحد أو أكثر من السياقات التي يجب أن ينطبق عليها عامل التصفية
digest: تُرسَل إليك بعد مُضيّ مدة مِن خمول نشاطك و فقط إذا ما تلقيت رسائل شخصية مباشِرة أثناء فترة غيابك مِن الشبكة
+ display_name: %{count} حرف باق
fields: يُمكنك عرض 4 عناصر على شكل جدول في ملفك الشخصي
header: ملف PNG أو GIF أو JPG. حجمه على أقصى تصدير %{size}. سيتم تصغيره إلى %{dimensions}px
inbox_url: نسخ العنوان الذي تريد استخدامه مِن صفحة الإستقبال للمُرحَّل
irreversible: التبويقات التي تم تصفيتها ستختفي لا محالة حتى و إن تمت إزالة عامِل التصفية لاحقًا
locale: لغة واجهة المستخدم و الرسائل الإلكترونية و الإشعارات
locked: يتطلب منك الموافقة يدويا على طلبات المتابعة
+ note: %{count} حرف باق
scopes: ما هي المجالات المسموح بها في التطبيق ؟ إن قمت باختيار أعلى المجالات فيمكنك الإستغناء عن الخَيار اليدوي.
setting_default_language: يمكن الكشف التلقائي للّغة اللتي استخدمتها في تحرير تبويقاتك ، غيرَ أنّ العملية ليست دائما دقيقة
setting_hide_network: الحسابات التي تُتابعها و التي تُتابِعك على حد سواء لن تُعرَض على صفحتك الشخصية
From 110b3f63352e85c6ac138918b285d963382ce623 Mon Sep 17 00:00:00 2001
From: ThibG
Date: Sat, 11 Aug 2018 22:02:55 +0200
Subject: [PATCH 081/196] Add some feedback to maintenance rake tasks (#8173)
---
lib/tasks/mastodon.rake | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/lib/tasks/mastodon.rake b/lib/tasks/mastodon.rake
index de8c0bb86..f693c8b5a 100644
--- a/lib/tasks/mastodon.rake
+++ b/lib/tasks/mastodon.rake
@@ -502,18 +502,24 @@ namespace :mastodon do
desc 'Remove media attachments attributed to silenced accounts'
task remove_silenced: :environment do
+ nb_media_attachments = 0
MediaAttachment.where(account: Account.silenced).select(:id).find_in_batches do |media_attachments|
+ nb_media_attachments += media_attachments.length
Maintenance::DestroyMediaWorker.push_bulk(media_attachments.map(&:id))
end
+ puts "Scheduled the deletion of #{nb_media_attachments} media attachments"
end
desc 'Remove cached remote media attachments that are older than NUM_DAYS. By default 7 (week)'
task remove_remote: :environment do
time_ago = ENV.fetch('NUM_DAYS') { 7 }.to_i.days.ago
+ nb_media_attachments = 0
MediaAttachment.where.not(remote_url: '').where.not(file_file_name: nil).where('created_at < ?', time_ago).select(:id).find_in_batches do |media_attachments|
+ nb_media_attachments += media_attachments.length
Maintenance::UncacheMediaWorker.push_bulk(media_attachments.map(&:id))
end
+ puts "Scheduled the deletion of #{nb_media_attachments} media attachments"
end
desc 'Set unknown attachment type for remote-only attachments'
@@ -527,10 +533,13 @@ namespace :mastodon do
task redownload_avatars: :environment do
accounts = Account.remote
accounts = accounts.where(domain: ENV['DOMAIN']) if ENV['DOMAIN'].present?
+ nb_accounts = 0
accounts.select(:id).find_in_batches do |accounts_batch|
+ nb_accounts += accounts_batch.length
Maintenance::RedownloadAccountMediaWorker.push_bulk(accounts_batch.map(&:id))
end
+ puts "Scheduled the download of avatars/headers for #{nb_accounts} remote users"
end
end
From 2aeeffc3ec421111f751cab61a15642cbddd9f0d Mon Sep 17 00:00:00 2001
From: "S.H"
Date: Sun, 12 Aug 2018 19:25:23 +0900
Subject: [PATCH 082/196] Update Rails (#8141)
* Update Rails
* fix Update Rails
---
Gemfile | 2 +-
Gemfile.lock | 88 +++++++++----------
.../controllers/api/salmon_controller_spec.rb | 9 +-
.../api/subscriptions_controller_spec.rb | 3 +-
.../concerns/signature_verification_spec.rb | 2 +-
5 files changed, 50 insertions(+), 54 deletions(-)
diff --git a/Gemfile b/Gemfile
index 7a6e1568d..8c2970c41 100644
--- a/Gemfile
+++ b/Gemfile
@@ -6,7 +6,7 @@ ruby '>= 2.3.0', '< 2.6.0'
gem 'pkg-config', '~> 1.3'
gem 'puma', '~> 3.11'
-gem 'rails', '~> 5.2.0'
+gem 'rails', '~> 5.2.1'
gem 'hamlit-rails', '~> 0.2'
gem 'pg', '~> 1.0'
diff --git a/Gemfile.lock b/Gemfile.lock
index e1929a05c..f9cf3d345 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -15,25 +15,25 @@ GIT
GEM
remote: https://rubygems.org/
specs:
- actioncable (5.2.0)
- actionpack (= 5.2.0)
+ actioncable (5.2.1)
+ actionpack (= 5.2.1)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
- actionmailer (5.2.0)
- actionpack (= 5.2.0)
- actionview (= 5.2.0)
- activejob (= 5.2.0)
+ actionmailer (5.2.1)
+ actionpack (= 5.2.1)
+ actionview (= 5.2.1)
+ activejob (= 5.2.1)
mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 2.0)
- actionpack (5.2.0)
- actionview (= 5.2.0)
- activesupport (= 5.2.0)
+ actionpack (5.2.1)
+ actionview (= 5.2.1)
+ activesupport (= 5.2.1)
rack (~> 2.0)
rack-test (>= 0.6.3)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.0.2)
- actionview (5.2.0)
- activesupport (= 5.2.0)
+ actionview (5.2.1)
+ activesupport (= 5.2.1)
builder (~> 3.1)
erubi (~> 1.4)
rails-dom-testing (~> 2.0)
@@ -44,20 +44,20 @@ GEM
case_transform (>= 0.2)
jsonapi-renderer (>= 0.1.1.beta1, < 0.3)
active_record_query_trace (1.5.4)
- activejob (5.2.0)
- activesupport (= 5.2.0)
+ activejob (5.2.1)
+ activesupport (= 5.2.1)
globalid (>= 0.3.6)
- activemodel (5.2.0)
- activesupport (= 5.2.0)
- activerecord (5.2.0)
- activemodel (= 5.2.0)
- activesupport (= 5.2.0)
+ activemodel (5.2.1)
+ activesupport (= 5.2.1)
+ activerecord (5.2.1)
+ activemodel (= 5.2.1)
+ activesupport (= 5.2.1)
arel (>= 9.0)
- activestorage (5.2.0)
- actionpack (= 5.2.0)
- activerecord (= 5.2.0)
+ activestorage (5.2.1)
+ actionpack (= 5.2.1)
+ activerecord (= 5.2.1)
marcel (~> 0.3.1)
- activesupport (5.2.0)
+ activesupport (5.2.1)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 0.7, < 2)
minitest (~> 5.1)
@@ -269,7 +269,7 @@ GEM
httplog (1.0.2)
colorize (~> 0.8)
rack (>= 1.0)
- i18n (1.0.1)
+ i18n (1.1.0)
concurrent-ruby (~> 1.0)
i18n-tasks (0.9.21)
activesupport (>= 4.0.2)
@@ -346,8 +346,8 @@ GEM
net-scp (1.2.1)
net-ssh (>= 2.6.5)
net-ssh (4.2.0)
- nio4r (2.3.0)
- nokogiri (1.8.2)
+ nio4r (2.3.1)
+ nokogiri (1.8.4)
mini_portile2 (~> 2.3.0)
nokogumbo (1.5.0)
nokogiri
@@ -415,7 +415,7 @@ GEM
puma (3.11.4)
pundit (1.1.0)
activesupport (>= 3.0.0)
- rack (2.0.4)
+ rack (2.0.5)
rack-attack (5.2.0)
rack
rack-cors (1.0.2)
@@ -423,20 +423,20 @@ GEM
rack
rack-proxy (0.6.4)
rack
- rack-test (1.0.0)
+ rack-test (1.1.0)
rack (>= 1.0, < 3)
- rails (5.2.0)
- actioncable (= 5.2.0)
- actionmailer (= 5.2.0)
- actionpack (= 5.2.0)
- actionview (= 5.2.0)
- activejob (= 5.2.0)
- activemodel (= 5.2.0)
- activerecord (= 5.2.0)
- activestorage (= 5.2.0)
- activesupport (= 5.2.0)
+ rails (5.2.1)
+ actioncable (= 5.2.1)
+ actionmailer (= 5.2.1)
+ actionpack (= 5.2.1)
+ actionview (= 5.2.1)
+ activejob (= 5.2.1)
+ activemodel (= 5.2.1)
+ activerecord (= 5.2.1)
+ activestorage (= 5.2.1)
+ activesupport (= 5.2.1)
bundler (>= 1.3.0)
- railties (= 5.2.0)
+ railties (= 5.2.1)
sprockets-rails (>= 2.0.0)
rails-controller-testing (1.0.2)
actionpack (~> 5.x, >= 5.0.1)
@@ -452,12 +452,12 @@ GEM
railties (>= 5.0, < 6)
rails-settings-cached (0.6.6)
rails (>= 4.2.0)
- railties (5.2.0)
- actionpack (= 5.2.0)
- activesupport (= 5.2.0)
+ railties (5.2.1)
+ actionpack (= 5.2.1)
+ activesupport (= 5.2.1)
method_source
rake (>= 0.8.7)
- thor (>= 0.18.1, < 2.0)
+ thor (>= 0.19.0, < 2.0)
rainbow (3.0.0)
rake (12.3.1)
rb-fsevent (0.10.3)
@@ -725,7 +725,7 @@ DEPENDENCIES
pundit (~> 1.1)
rack-attack (~> 5.2)
rack-cors (~> 1.0)
- rails (~> 5.2.0)
+ rails (~> 5.2.1)
rails-controller-testing (~> 1.0)
rails-i18n (~> 5.1)
rails-settings-cached (~> 0.6)
@@ -764,4 +764,4 @@ RUBY VERSION
ruby 2.5.0p0
BUNDLED WITH
- 1.16.2
+ 1.16.3
diff --git a/spec/controllers/api/salmon_controller_spec.rb b/spec/controllers/api/salmon_controller_spec.rb
index 5f01f8073..8ce4913a5 100644
--- a/spec/controllers/api/salmon_controller_spec.rb
+++ b/spec/controllers/api/salmon_controller_spec.rb
@@ -15,8 +15,7 @@ RSpec.describe Api::SalmonController, type: :controller do
describe 'POST #update' do
context 'with valid post data' do
before do
- request.env['RAW_POST_DATA'] = File.read(File.join(Rails.root, 'spec', 'fixtures', 'salmon', 'mention.xml'))
- post :update, params: { id: account.id }
+ post :update, params: { id: account.id }, body: File.read(File.join(Rails.root, 'spec', 'fixtures', 'salmon', 'mention.xml'))
end
it 'contains XML in the request body' do
@@ -42,8 +41,7 @@ RSpec.describe Api::SalmonController, type: :controller do
context 'with empty post data' do
before do
- request.env['RAW_POST_DATA'] = ''
- post :update, params: { id: account.id }
+ post :update, params: { id: account.id }, body: ''
end
it 'returns http client error' do
@@ -56,8 +54,7 @@ RSpec.describe Api::SalmonController, type: :controller do
service = double(call: false)
allow(VerifySalmonService).to receive(:new).and_return(service)
- request.env['RAW_POST_DATA'] = File.read(File.join(Rails.root, 'spec', 'fixtures', 'salmon', 'mention.xml'))
- post :update, params: { id: account.id }
+ post :update, params: { id: account.id }, body: File.read(File.join(Rails.root, 'spec', 'fixtures', 'salmon', 'mention.xml'))
end
it 'returns http client error' do
diff --git a/spec/controllers/api/subscriptions_controller_spec.rb b/spec/controllers/api/subscriptions_controller_spec.rb
index 48eb1fc64..b46971a54 100644
--- a/spec/controllers/api/subscriptions_controller_spec.rb
+++ b/spec/controllers/api/subscriptions_controller_spec.rb
@@ -53,9 +53,8 @@ RSpec.describe Api::SubscriptionsController, type: :controller do
stub_request(:any, "https://mastodon.social/users/Gargron").to_return(status: 404)
request.env['HTTP_X_HUB_SIGNATURE'] = "sha1=#{OpenSSL::HMAC.hexdigest('sha1', 'abc', feed)}"
- request.env['RAW_POST_DATA'] = feed
- post :update, params: { id: account.id }
+ post :update, params: { id: account.id }, body: feed
end
it 'returns http success' do
diff --git a/spec/controllers/concerns/signature_verification_spec.rb b/spec/controllers/concerns/signature_verification_spec.rb
index 64648621e..3daf1fc4e 100644
--- a/spec/controllers/concerns/signature_verification_spec.rb
+++ b/spec/controllers/concerns/signature_verification_spec.rb
@@ -105,7 +105,7 @@ describe ApplicationController, type: :controller do
end
it 'returns nil when body has been tampered' do
- request.headers['RAW_POST_DATA'] = 'doo doo doo'
+ post :success, body: 'doo doo doo'
expect(controller.signed_request_account).to be_nil
end
end
From 39e361a56d849a027ed12df69122a369bc6ff39d Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Sun, 12 Aug 2018 18:16:26 +0200
Subject: [PATCH 083/196] Expect relays to answer with accept/reject (#8179)
---
app/lib/activitypub/activity/accept.rb | 14 ++++++++++++++
app/lib/activitypub/activity/reject.rb | 14 ++++++++++++++
app/models/relay.rb | 12 ++++++++----
.../20180812123222_change_relays_enabled.rb | 19 +++++++++++++++++++
db/schema.rb | 5 ++---
5 files changed, 57 insertions(+), 7 deletions(-)
create mode 100644 db/migrate/20180812123222_change_relays_enabled.rb
diff --git a/app/lib/activitypub/activity/accept.rb b/app/lib/activitypub/activity/accept.rb
index bd90c9019..7e60b2c00 100644
--- a/app/lib/activitypub/activity/accept.rb
+++ b/app/lib/activitypub/activity/accept.rb
@@ -11,6 +11,8 @@ class ActivityPub::Activity::Accept < ActivityPub::Activity
private
def accept_follow
+ return accept_follow_for_relay if relay_follow?
+
target_account = account_from_uri(target_uri)
return if target_account.nil? || !target_account.local?
@@ -19,6 +21,18 @@ class ActivityPub::Activity::Accept < ActivityPub::Activity
follow_request&.authorize!
end
+ def accept_follow_for_relay
+ relay.update!(state: :accepted)
+ end
+
+ def relay
+ @relay ||= Relay.find_by(follow_activity_id: object_uri)
+ end
+
+ def relay_follow?
+ relay.present?
+ end
+
def target_uri
@target_uri ||= value_or_id(@object['actor'])
end
diff --git a/app/lib/activitypub/activity/reject.rb b/app/lib/activitypub/activity/reject.rb
index 28d472883..d81b157de 100644
--- a/app/lib/activitypub/activity/reject.rb
+++ b/app/lib/activitypub/activity/reject.rb
@@ -11,6 +11,8 @@ class ActivityPub::Activity::Reject < ActivityPub::Activity
private
def reject_follow
+ return reject_follow_for_relay if relay_follow?
+
target_account = account_from_uri(target_uri)
return if target_account.nil? || !target_account.local?
@@ -21,6 +23,18 @@ class ActivityPub::Activity::Reject < ActivityPub::Activity
UnfollowService.new.call(target_account, @account) if target_account.following?(@account)
end
+ def reject_follow_for_relay
+ relay.update!(state: :rejected)
+ end
+
+ def relay
+ @relay ||= Relay.find_by(follow_activity_id: object_uri)
+ end
+
+ def relay_follow?
+ relay.present?
+ end
+
def target_uri
@target_uri ||= value_or_id(@object['actor'])
end
diff --git a/app/models/relay.rb b/app/models/relay.rb
index 76143bb27..75cb060b2 100644
--- a/app/models/relay.rb
+++ b/app/models/relay.rb
@@ -5,10 +5,10 @@
#
# id :bigint(8) not null, primary key
# inbox_url :string default(""), not null
-# enabled :boolean default(FALSE), not null
# follow_activity_id :string
# created_at :datetime not null
# updated_at :datetime not null
+# state :integer default("idle"), not null
#
class Relay < ApplicationRecord
@@ -16,24 +16,28 @@ class Relay < ApplicationRecord
validates :inbox_url, presence: true, uniqueness: true, url: true, if: :will_save_change_to_inbox_url?
- scope :enabled, -> { where(enabled: true) }
+ enum state: [:idle, :pending, :accepted, :rejected]
+
+ scope :enabled, -> { accepted }
before_destroy :ensure_disabled
+ alias enabled? accepted?
+
def enable!
activity_id = ActivityPub::TagManager.instance.generate_uri_for(nil)
payload = Oj.dump(follow_activity(activity_id))
+ update!(state: :pending, follow_activity_id: activity_id)
ActivityPub::DeliveryWorker.perform_async(payload, some_local_account.id, inbox_url)
- update(enabled: true, follow_activity_id: activity_id)
end
def disable!
activity_id = ActivityPub::TagManager.instance.generate_uri_for(nil)
payload = Oj.dump(unfollow_activity(activity_id))
+ update!(state: :idle, follow_activity_id: nil)
ActivityPub::DeliveryWorker.perform_async(payload, some_local_account.id, inbox_url)
- update(enabled: false, follow_activity_id: nil)
end
private
diff --git a/db/migrate/20180812123222_change_relays_enabled.rb b/db/migrate/20180812123222_change_relays_enabled.rb
new file mode 100644
index 000000000..c4fd8179b
--- /dev/null
+++ b/db/migrate/20180812123222_change_relays_enabled.rb
@@ -0,0 +1,19 @@
+class ChangeRelaysEnabled < ActiveRecord::Migration[5.2]
+ def up
+ # The relays table is supposed to be very small,
+ # single-digit number of rows, so this should be fine
+ safety_assured do
+ add_column :relays, :state, :integer, default: 0, null: false
+
+ # At the time of this migration, no relays reject anyone, so if
+ # there are enabled ones, they are accepted
+ execute 'UPDATE relays SET state = 2 WHERE enabled = true'
+ remove_column :relays, :enabled
+ end
+ end
+
+ def down
+ remove_column :relays, :state
+ add_column :relays, :enabled, :boolean, default: false, null: false
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 46ee42714..edb5a023c 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 2018_08_08_175627) do
+ActiveRecord::Schema.define(version: 2018_08_12_123222) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -383,11 +383,10 @@ ActiveRecord::Schema.define(version: 2018_08_08_175627) do
create_table "relays", force: :cascade do |t|
t.string "inbox_url", default: "", null: false
- t.boolean "enabled", default: false, null: false
t.string "follow_activity_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
- t.index ["enabled"], name: "index_relays_on_enabled"
+ t.integer "state", default: 0, null: false
end
create_table "report_notes", force: :cascade do |t|
From b7091c6c0fe057f7469a97f138c3e2451d95a28f Mon Sep 17 00:00:00 2001
From: Evgeny Petrov
Date: Mon, 13 Aug 2018 00:11:40 +0300
Subject: [PATCH 084/196] Added endorse strings, fixed footer 'developers'
string (#8183)
---
app/javascript/mastodon/locales/ru.json | 4 ++--
config/locales/ru.yml | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json
index 0f2a26e76..0e8586903 100644
--- a/app/javascript/mastodon/locales/ru.json
+++ b/app/javascript/mastodon/locales/ru.json
@@ -7,7 +7,7 @@
"account.disclaimer_full": "Нижеуказанная информация может не полностью отражать профиль пользователя.",
"account.domain_blocked": "Домен скрыт",
"account.edit_profile": "Изменить профиль",
- "account.endorse": "Feature on profile",
+ "account.endorse": "Рекомендовать в профиле",
"account.follow": "Подписаться",
"account.followers": "Подписаны",
"account.follows": "Подписки",
@@ -27,7 +27,7 @@
"account.show_reblogs": "Показывать продвижения от @{name}",
"account.unblock": "Разблокировать",
"account.unblock_domain": "Разблокировать {domain}",
- "account.unendorse": "Don't feature on profile",
+ "account.unendorse": "Не рекомендовать в профиле",
"account.unfollow": "Отписаться",
"account.unmute": "Снять глушение",
"account.unmute_notifications": "Показывать уведомления от @{name}",
diff --git a/config/locales/ru.yml b/config/locales/ru.yml
index 9d5c3184b..44e41eaf6 100644
--- a/config/locales/ru.yml
+++ b/config/locales/ru.yml
@@ -544,7 +544,7 @@ ru:
unlocked_warning_html: Кто угодно может подписаться на Вас и получить доступ к просмотру Ваших приватных статусов. %{lock_link}, чтобы получить возможность рассматривать и вручную подтверждать запросы о подписке.
unlocked_warning_title: Ваш аккаунт не закрыт для подписки
footer:
- developers: Разработчики
+ developers: Разработчикам
more: Ещё…
resources: Ссылки
generic:
From 018a9e4e7fdfac0f2e482f4b5fa66247afbc2ddb Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Mon, 13 Aug 2018 13:40:01 +0200
Subject: [PATCH 085/196] Add post-deployment migration system (#8182)
Adopted from GitLab CE. Generate new migration with:
rails g post_deployment_migration name_of_migration_here
By default they are run together with db:migrate. To not run them,
the env variable SKIP_POST_DEPLOYMENT_MIGRATIONS must be set
Code by Yorick Peterse , see also:
https://gitlab.com/gitlab-org/gitlab-ce/commit/83c8241160ed48ab066e2c5bd58d0914a745197c
---
.rubocop.yml | 1 +
.../0_post_deployment_migrations.rb | 15 +++++++++++++++
db/post_migrate/.gitkeep | 0
.../post_deployment_migration_generator.rb | 17 +++++++++++++++++
.../post_deployment_migration/migration.rb | 8 ++++++++
5 files changed, 41 insertions(+)
create mode 100644 config/initializers/0_post_deployment_migrations.rb
create mode 100644 db/post_migrate/.gitkeep
create mode 100644 lib/generators/post_deployment_migration_generator.rb
create mode 100644 lib/templates/rails/post_deployment_migration/migration.rb
diff --git a/.rubocop.yml b/.rubocop.yml
index 6faeaca6f..4f9e09b43 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -11,6 +11,7 @@ AllCops:
- 'Vagrantfile'
- 'vendor/**/*'
- 'lib/json_ld/*'
+ - 'lib/templates/**/*'
Bundler/OrderedGems:
Enabled: false
diff --git a/config/initializers/0_post_deployment_migrations.rb b/config/initializers/0_post_deployment_migrations.rb
new file mode 100644
index 000000000..61121ccd7
--- /dev/null
+++ b/config/initializers/0_post_deployment_migrations.rb
@@ -0,0 +1,15 @@
+# Post deployment migrations are included by default. This file must be loaded
+# before other initializers as Rails may otherwise memoize a list of migrations
+# excluding the post deployment migrations.
+
+unless ENV['SKIP_POST_DEPLOYMENT_MIGRATIONS']
+ Rails.application.config.paths['db'].each do |db_path|
+ path = Rails.root.join(db_path, 'post_migrate').to_s
+
+ Rails.application.config.paths['db/migrate'] << path
+
+ # Rails memoizes migrations at certain points where it won't read the above
+ # path just yet. As such we must also update the following list of paths.
+ ActiveRecord::Migrator.migrations_paths << path
+ end
+end
diff --git a/db/post_migrate/.gitkeep b/db/post_migrate/.gitkeep
new file mode 100644
index 000000000..e69de29bb
diff --git a/lib/generators/post_deployment_migration_generator.rb b/lib/generators/post_deployment_migration_generator.rb
new file mode 100644
index 000000000..798c01b88
--- /dev/null
+++ b/lib/generators/post_deployment_migration_generator.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+
+require 'rails/generators'
+
+module Rails
+ class PostDeploymentMigrationGenerator < Rails::Generators::NamedBase
+ def create_migration_file
+ timestamp = Time.zone.now.strftime('%Y%m%d%H%M%S')
+
+ template 'migration.rb', "db/post_migrate/#{timestamp}_#{file_name}.rb"
+ end
+
+ def migration_class_name
+ file_name.camelize
+ end
+ end
+end
diff --git a/lib/templates/rails/post_deployment_migration/migration.rb b/lib/templates/rails/post_deployment_migration/migration.rb
new file mode 100644
index 000000000..503205b84
--- /dev/null
+++ b/lib/templates/rails/post_deployment_migration/migration.rb
@@ -0,0 +1,8 @@
+# frozen_string_literal: true
+
+class <%= migration_class_name %> < ActiveRecord::Migration[5.2]
+ disable_ddl_transaction!
+
+ def change
+ end
+end
From 8e111b753a3411b258cdb008c9a53bad696f4df1 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Tue, 14 Aug 2018 19:19:32 +0200
Subject: [PATCH 086/196] Move status counters to separate table, count replies
(#8104)
* Move status counters to separate table, count replies
* Migration to remove old counter columns from statuses table
* Fix schema file
---
app/models/favourite.rb | 13 +---
app/models/status.rb | 72 ++++++++++++++-----
app/models/status_stat.rb | 17 +++++
app/serializers/rest/status_serializer.rb | 3 +-
.../20180812162710_create_status_stats.rb | 12 ++++
.../20180812173710_copy_status_stats.rb | 19 +++++
...0180813113448_copy_status_stats_cleanup.rb | 12 ++++
db/schema.rb | 15 +++-
spec/fabricators/status_stat_fabricator.rb | 6 ++
spec/models/status_stat_spec.rb | 5 ++
10 files changed, 142 insertions(+), 32 deletions(-)
create mode 100644 app/models/status_stat.rb
create mode 100644 db/migrate/20180812162710_create_status_stats.rb
create mode 100644 db/migrate/20180812173710_copy_status_stats.rb
create mode 100644 db/post_migrate/20180813113448_copy_status_stats_cleanup.rb
create mode 100644 spec/fabricators/status_stat_fabricator.rb
create mode 100644 spec/models/status_stat_spec.rb
diff --git a/app/models/favourite.rb b/app/models/favourite.rb
index 0fce82f6f..ce7a6a336 100644
--- a/app/models/favourite.rb
+++ b/app/models/favourite.rb
@@ -32,20 +32,11 @@ class Favourite < ApplicationRecord
private
def increment_cache_counters
- if association(:status).loaded?
- status.update_attribute(:favourites_count, status.favourites_count + 1)
- else
- Status.where(id: status_id).update_all('favourites_count = COALESCE(favourites_count, 0) + 1')
- end
+ status.increment_count!(:favourites_count)
end
def decrement_cache_counters
return if association(:status).loaded? && (status.marked_for_destruction? || status.marked_for_mass_destruction?)
-
- if association(:status).loaded?
- status.update_attribute(:favourites_count, [status.favourites_count - 1, 0].max)
- else
- Status.where(id: status_id).update_all('favourites_count = GREATEST(COALESCE(favourites_count, 0) - 1, 0)')
- end
+ status.decrement_count!(:favourites_count)
end
end
diff --git a/app/models/status.rb b/app/models/status.rb
index e7dd0df29..1c87f2566 100644
--- a/app/models/status.rb
+++ b/app/models/status.rb
@@ -15,8 +15,6 @@
# visibility :integer default("public"), not null
# spoiler_text :text default(""), not null
# reply :boolean default(FALSE), not null
-# favourites_count :integer default(0), not null
-# reblogs_count :integer default(0), not null
# language :string
# conversation_id :bigint(8)
# local :boolean
@@ -26,6 +24,8 @@
#
class Status < ApplicationRecord
+ self.cache_versioning = false
+
include Paginable
include Streamable
include Cacheable
@@ -59,6 +59,7 @@ class Status < ApplicationRecord
has_one :notification, as: :activity, dependent: :destroy
has_one :stream_entry, as: :activity, inverse_of: :status
+ has_one :status_stat, inverse_of: :status
validates :uri, uniqueness: true, presence: true, unless: :local?
validates :text, presence: true, unless: -> { with_media? || reblog? }
@@ -81,7 +82,25 @@ class Status < ApplicationRecord
scope :not_excluded_by_account, ->(account) { where.not(account_id: account.excluded_from_timeline_account_ids) }
scope :not_domain_blocked_by_account, ->(account) { account.excluded_from_timeline_domains.blank? ? left_outer_joins(:account) : left_outer_joins(:account).where('accounts.domain IS NULL OR accounts.domain NOT IN (?)', account.excluded_from_timeline_domains) }
- cache_associated :account, :application, :media_attachments, :conversation, :tags, :stream_entry, mentions: :account, reblog: [:account, :application, :stream_entry, :tags, :media_attachments, :conversation, mentions: :account], thread: :account
+ cache_associated :account,
+ :application,
+ :media_attachments,
+ :conversation,
+ :status_stat,
+ :tags,
+ :stream_entry,
+ mentions: :account,
+ reblog: [
+ :account,
+ :application,
+ :stream_entry,
+ :tags,
+ :media_attachments,
+ :conversation,
+ :status_stat,
+ mentions: :account,
+ ],
+ thread: :account
delegate :domain, to: :account, prefix: true
@@ -175,6 +194,26 @@ class Status < ApplicationRecord
@marked_for_mass_destruction
end
+ def replies_count
+ status_stat&.replies_count || 0
+ end
+
+ def reblogs_count
+ status_stat&.reblogs_count || 0
+ end
+
+ def favourites_count
+ status_stat&.favourites_count || 0
+ end
+
+ def increment_count!(key)
+ update_status_stat!(key => public_send(key) + 1)
+ end
+
+ def decrement_count!(key)
+ update_status_stat!(key => [public_send(key) - 1, 0].max)
+ end
+
after_create :increment_counter_caches
after_destroy :decrement_counter_caches
@@ -190,6 +229,10 @@ class Status < ApplicationRecord
before_validation :set_local
class << self
+ def cache_ids
+ left_outer_joins(:status_stat).select('statuses.id, greatest(statuses.updated_at, status_stats.updated_at) AS updated_at')
+ end
+
def in_chosen_languages(account)
where(language: nil).or where(language: account.chosen_languages)
end
@@ -352,6 +395,11 @@ class Status < ApplicationRecord
private
+ def update_status_stat!(attrs)
+ record = status_stat || build_status_stat
+ record.update(attrs)
+ end
+
def store_uri
update_attribute(:uri, ActivityPub::TagManager.instance.uri_for(self)) if uri.nil?
end
@@ -408,13 +456,8 @@ class Status < ApplicationRecord
Account.where(id: account_id).update_all('statuses_count = COALESCE(statuses_count, 0) + 1')
end
- return unless reblog?
-
- if association(:reblog).loaded?
- reblog.update_attribute(:reblogs_count, reblog.reblogs_count + 1)
- else
- Status.where(id: reblog_of_id).update_all('reblogs_count = COALESCE(reblogs_count, 0) + 1')
- end
+ thread.increment_count!(:replies_count) if in_reply_to_id.present?
+ reblog.increment_count!(:reblogs_count) if reblog?
end
def decrement_counter_caches
@@ -426,12 +469,7 @@ class Status < ApplicationRecord
Account.where(id: account_id).update_all('statuses_count = GREATEST(COALESCE(statuses_count, 0) - 1, 0)')
end
- return unless reblog?
-
- if association(:reblog).loaded?
- reblog.update_attribute(:reblogs_count, [reblog.reblogs_count - 1, 0].max)
- else
- Status.where(id: reblog_of_id).update_all('reblogs_count = GREATEST(COALESCE(reblogs_count, 0) - 1, 0)')
- end
+ thread.decrement_count!(:replies_count) if in_reply_to_id.present?
+ reblog.decrement_count!(:reblogs_count) if reblog?
end
end
diff --git a/app/models/status_stat.rb b/app/models/status_stat.rb
new file mode 100644
index 000000000..9d358776b
--- /dev/null
+++ b/app/models/status_stat.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+# == Schema Information
+#
+# Table name: status_stats
+#
+# id :bigint(8) not null, primary key
+# status_id :bigint(8) not null
+# replies_count :bigint(8) default(0), not null
+# reblogs_count :bigint(8) default(0), not null
+# favourites_count :bigint(8) default(0), not null
+# created_at :datetime not null
+# updated_at :datetime not null
+#
+
+class StatusStat < ApplicationRecord
+ belongs_to :status, inverse_of: :status_stat
+end
diff --git a/app/serializers/rest/status_serializer.rb b/app/serializers/rest/status_serializer.rb
index fe3dc9bfc..61423f961 100644
--- a/app/serializers/rest/status_serializer.rb
+++ b/app/serializers/rest/status_serializer.rb
@@ -3,7 +3,8 @@
class REST::StatusSerializer < ActiveModel::Serializer
attributes :id, :created_at, :in_reply_to_id, :in_reply_to_account_id,
:sensitive, :spoiler_text, :visibility, :language,
- :uri, :content, :url, :reblogs_count, :favourites_count
+ :uri, :content, :url, :replies_count, :reblogs_count,
+ :favourites_count
attribute :favourited, if: :current_user?
attribute :reblogged, if: :current_user?
diff --git a/db/migrate/20180812162710_create_status_stats.rb b/db/migrate/20180812162710_create_status_stats.rb
new file mode 100644
index 000000000..d4da36fe7
--- /dev/null
+++ b/db/migrate/20180812162710_create_status_stats.rb
@@ -0,0 +1,12 @@
+class CreateStatusStats < ActiveRecord::Migration[5.2]
+ def change
+ create_table :status_stats do |t|
+ t.belongs_to :status, null: false, foreign_key: { on_delete: :cascade }, index: { unique: true }
+ t.bigint :replies_count, null: false, default: 0
+ t.bigint :reblogs_count, null: false, default: 0
+ t.bigint :favourites_count, null: false, default: 0
+
+ t.timestamps
+ end
+ end
+end
diff --git a/db/migrate/20180812173710_copy_status_stats.rb b/db/migrate/20180812173710_copy_status_stats.rb
new file mode 100644
index 000000000..6ecccc0ae
--- /dev/null
+++ b/db/migrate/20180812173710_copy_status_stats.rb
@@ -0,0 +1,19 @@
+class CopyStatusStats < ActiveRecord::Migration[5.2]
+ disable_ddl_transaction!
+
+ def up
+ safety_assured do
+ execute <<-SQL.squish
+ INSERT INTO status_stats (status_id, reblogs_count, favourites_count)
+ SELECT id, reblogs_count, favourites_count
+ FROM statuses
+ ON CONFLICT (status_id) DO UPDATE
+ SET reblogs_count = EXCLUDED.reblogs_count, favourites_count = EXCLUDED.favourites_count
+ SQL
+ end
+ end
+
+ def down
+ # Nothing
+ end
+end
diff --git a/db/post_migrate/20180813113448_copy_status_stats_cleanup.rb b/db/post_migrate/20180813113448_copy_status_stats_cleanup.rb
new file mode 100644
index 000000000..f3ae772c7
--- /dev/null
+++ b/db/post_migrate/20180813113448_copy_status_stats_cleanup.rb
@@ -0,0 +1,12 @@
+# frozen_string_literal: true
+
+class CopyStatusStatsCleanup < ActiveRecord::Migration[5.2]
+ disable_ddl_transaction!
+
+ def change
+ safety_assured do
+ remove_column :statuses, :reblogs_count, :integer, default: 0, null: false
+ remove_column :statuses, :favourites_count, :integer, default: 0, null: false
+ end
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index edb5a023c..2cf7b849a 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 2018_08_12_123222) do
+ActiveRecord::Schema.define(version: 2018_08_13_113448) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -456,6 +456,16 @@ ActiveRecord::Schema.define(version: 2018_08_12_123222) do
t.index ["account_id", "status_id"], name: "index_status_pins_on_account_id_and_status_id", unique: true
end
+ create_table "status_stats", force: :cascade do |t|
+ t.bigint "status_id", null: false
+ t.bigint "replies_count", default: 0, null: false
+ t.bigint "reblogs_count", default: 0, null: false
+ t.bigint "favourites_count", default: 0, null: false
+ t.datetime "created_at", null: false
+ t.datetime "updated_at", null: false
+ t.index ["status_id"], name: "index_status_stats_on_status_id", unique: true
+ end
+
create_table "statuses", id: :bigint, default: -> { "timestamp_id('statuses'::text)" }, force: :cascade do |t|
t.string "uri"
t.text "text", default: "", null: false
@@ -468,8 +478,6 @@ ActiveRecord::Schema.define(version: 2018_08_12_123222) do
t.integer "visibility", default: 0, null: false
t.text "spoiler_text", default: "", null: false
t.boolean "reply", default: false, null: false
- t.integer "favourites_count", default: 0, null: false
- t.integer "reblogs_count", default: 0, null: false
t.string "language"
t.bigint "conversation_id"
t.boolean "local"
@@ -630,6 +638,7 @@ ActiveRecord::Schema.define(version: 2018_08_12_123222) do
add_foreign_key "session_activations", "users", name: "fk_e5fda67334", on_delete: :cascade
add_foreign_key "status_pins", "accounts", name: "fk_d4cb435b62", on_delete: :cascade
add_foreign_key "status_pins", "statuses", on_delete: :cascade
+ add_foreign_key "status_stats", "statuses", on_delete: :cascade
add_foreign_key "statuses", "accounts", column: "in_reply_to_account_id", name: "fk_c7fa917661", on_delete: :nullify
add_foreign_key "statuses", "accounts", name: "fk_9bda1543f7", on_delete: :cascade
add_foreign_key "statuses", "statuses", column: "in_reply_to_id", on_delete: :nullify
diff --git a/spec/fabricators/status_stat_fabricator.rb b/spec/fabricators/status_stat_fabricator.rb
new file mode 100644
index 000000000..9c67fd404
--- /dev/null
+++ b/spec/fabricators/status_stat_fabricator.rb
@@ -0,0 +1,6 @@
+Fabricator(:status_stat) do
+ status_id nil
+ replies_count ""
+ reblogs_count ""
+ favourites_count ""
+end
diff --git a/spec/models/status_stat_spec.rb b/spec/models/status_stat_spec.rb
new file mode 100644
index 000000000..5e9351aff
--- /dev/null
+++ b/spec/models/status_stat_spec.rb
@@ -0,0 +1,5 @@
+require 'rails_helper'
+
+RSpec.describe StatusStat, type: :model do
+ pending "add some examples to (or delete) #{__FILE__}"
+end
From be13e95d066bcef058abb88790d5cdff74f57a21 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Tue, 14 Aug 2018 20:24:36 +0200
Subject: [PATCH 087/196] Fix null constraint violation in copy status stats
migration (#8198)
---
db/migrate/20180812173710_copy_status_stats.rb | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/db/migrate/20180812173710_copy_status_stats.rb b/db/migrate/20180812173710_copy_status_stats.rb
index 6ecccc0ae..64a564ca0 100644
--- a/db/migrate/20180812173710_copy_status_stats.rb
+++ b/db/migrate/20180812173710_copy_status_stats.rb
@@ -4,8 +4,8 @@ class CopyStatusStats < ActiveRecord::Migration[5.2]
def up
safety_assured do
execute <<-SQL.squish
- INSERT INTO status_stats (status_id, reblogs_count, favourites_count)
- SELECT id, reblogs_count, favourites_count
+ INSERT INTO status_stats (status_id, reblogs_count, favourites_count, created_at, updated_at)
+ SELECT id, reblogs_count, favourites_count, created_at, updated_at
FROM statuses
ON CONFLICT (status_id) DO UPDATE
SET reblogs_count = EXCLUDED.reblogs_count, favourites_count = EXCLUDED.favourites_count
From 464daffdf9a37e9a773d224a162fad022890d463 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Tue, 14 Aug 2018 20:24:47 +0200
Subject: [PATCH 088/196] Upgrade Doorkeeper to 4.4.1 (#8197)
---
Gemfile | 2 +-
Gemfile.lock | 4 ++--
..._change_account_id_nonnullable_in_lists.rb | 2 --
..._confidential_to_doorkeeper_application.rb | 23 +++++++++++++++++++
db/schema.rb | 3 ++-
5 files changed, 28 insertions(+), 6 deletions(-)
create mode 100644 db/migrate/20180814171349_add_confidential_to_doorkeeper_application.rb
diff --git a/Gemfile b/Gemfile
index 8c2970c41..cb34ae2ec 100644
--- a/Gemfile
+++ b/Gemfile
@@ -41,7 +41,7 @@ gem 'omniauth-cas', '~> 1.1'
gem 'omniauth-saml', '~> 1.10'
gem 'omniauth', '~> 1.2'
-gem 'doorkeeper', '~> 4.2', '< 4.3'
+gem 'doorkeeper', '~> 4.4'
gem 'fast_blank', '~> 1.0'
gem 'fastimage'
gem 'goldfinger', '~> 2.1'
diff --git a/Gemfile.lock b/Gemfile.lock
index f9cf3d345..ba7bdaa7b 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -181,7 +181,7 @@ GEM
docile (1.3.0)
domain_name (0.5.20180417)
unf (>= 0.0.5, < 1.0.0)
- doorkeeper (4.2.6)
+ doorkeeper (4.4.1)
railties (>= 4.2)
dotenv (2.2.2)
dotenv-rails (2.2.2)
@@ -670,7 +670,7 @@ DEPENDENCIES
devise (~> 4.4)
devise-two-factor (~> 3.0)
devise_pam_authenticatable2 (~> 9.1)
- doorkeeper (~> 4.2, < 4.3)
+ doorkeeper (~> 4.4)
dotenv-rails (~> 2.2, < 2.3)
fabrication (~> 2.20)
faker (~> 1.8)
diff --git a/db/migrate/20171201000000_change_account_id_nonnullable_in_lists.rb b/db/migrate/20171201000000_change_account_id_nonnullable_in_lists.rb
index 120f74402..3369e3b9e 100644
--- a/db/migrate/20171201000000_change_account_id_nonnullable_in_lists.rb
+++ b/db/migrate/20171201000000_change_account_id_nonnullable_in_lists.rb
@@ -1,5 +1,3 @@
-require Rails.root.join('lib', 'mastodon', 'migration_helpers')
-
class ChangeAccountIdNonnullableInLists < ActiveRecord::Migration[5.1]
def change
change_column_null :lists, :account_id, false
diff --git a/db/migrate/20180814171349_add_confidential_to_doorkeeper_application.rb b/db/migrate/20180814171349_add_confidential_to_doorkeeper_application.rb
new file mode 100644
index 000000000..7077a4e65
--- /dev/null
+++ b/db/migrate/20180814171349_add_confidential_to_doorkeeper_application.rb
@@ -0,0 +1,23 @@
+require Rails.root.join('lib', 'mastodon', 'migration_helpers')
+
+class AddConfidentialToDoorkeeperApplication < ActiveRecord::Migration[5.2]
+ include Mastodon::MigrationHelpers
+
+ disable_ddl_transaction!
+
+ def up
+ safety_assured do
+ add_column_with_default(
+ :oauth_applications,
+ :confidential,
+ :boolean,
+ allow_null: false,
+ default: true # maintaining backwards compatibility: require secrets
+ )
+ end
+ end
+
+ def down
+ remove_column :oauth_applications, :confidential
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 2cf7b849a..8e9242973 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 2018_08_13_113448) do
+ActiveRecord::Schema.define(version: 2018_08_14_171349) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -349,6 +349,7 @@ ActiveRecord::Schema.define(version: 2018_08_13_113448) do
t.string "website"
t.string "owner_type"
t.bigint "owner_id"
+ t.boolean "confidential", default: true, null: false
t.index ["owner_id", "owner_type"], name: "index_oauth_applications_on_owner_id_and_owner_type"
t.index ["uid"], name: "index_oauth_applications_on_uid", unique: true
end
From ec2c516ab865ea63b5e7bc4405d0141d377e3e12 Mon Sep 17 00:00:00 2001
From: ThibG
Date: Tue, 14 Aug 2018 21:51:17 +0200
Subject: [PATCH 089/196] Various fixes regarding the video position slider
(#8201)
* Prevent default event handling when clicking on the video position slider
This prevents accidental text selection when clicking on the position slider.
* Fix bug when clicking on video position slider before starting the video
* Slightly more aggressive video preloading
- Preload video metadata if the video is loaded in detailed view, as it is
likely to get played, and metadata is useful for seeking in the video.
- Preload video data if it's fullscreen as it is extremely likely to get
played right after being put in fullscreen (although those are two steps).
- Preload video data if the user has clicked the position slider, as the video
will play as soon as the mouse button is released, and video metadata is
needed to properly seek into the video.
---
.../mastodon/features/video/index.js | 20 ++++++++++++++++---
1 file changed, 17 insertions(+), 3 deletions(-)
diff --git a/app/javascript/mastodon/features/video/index.js b/app/javascript/mastodon/features/video/index.js
index 47a165e16..55ea32acb 100644
--- a/app/javascript/mastodon/features/video/index.js
+++ b/app/javascript/mastodon/features/video/index.js
@@ -158,6 +158,9 @@ export default class Video extends React.PureComponent {
this.setState({ dragging: true });
this.video.pause();
this.handleMouseMove(e);
+
+ e.preventDefault();
+ e.stopPropagation();
}
handleMouseUp = () => {
@@ -174,8 +177,10 @@ export default class Video extends React.PureComponent {
const { x } = getPointerPosition(this.seek, e);
const currentTime = Math.floor(this.video.duration * x);
- this.video.currentTime = currentTime;
- this.setState({ currentTime });
+ if (!isNaN(currentTime)) {
+ this.video.currentTime = currentTime;
+ this.setState({ currentTime });
+ }
}, 60);
togglePlay = () => {
@@ -281,6 +286,15 @@ export default class Video extends React.PureComponent {
playerStyle.height = height;
}
+ let preload;
+ if (startTime || fullscreen || dragging) {
+ preload = 'auto';
+ } else if (detailed) {
+ preload = 'metadata';
+ } else {
+ preload = 'none';
+ }
+
return (
Date: Tue, 14 Aug 2018 21:56:17 +0200
Subject: [PATCH 090/196] Show exact number of followers/statuses on export
page/in tooltip (#8199)
* Show exact number of followers/statuses on export page/in tooltip
* Fix tests
---
.../features/account/components/action_bar.js | 6 +++---
app/models/export.rb | 10 +++++++++-
app/views/accounts/_header.html.haml | 6 +++---
app/views/settings/exports/show.html.haml | 14 +++++++++++---
app/views/settings/imports/show.html.haml | 11 +++++++----
spec/models/export_spec.rb | 6 +++---
6 files changed, 36 insertions(+), 17 deletions(-)
diff --git a/app/javascript/mastodon/features/account/components/action_bar.js b/app/javascript/mastodon/features/account/components/action_bar.js
index 43b4811e1..bc6f86628 100644
--- a/app/javascript/mastodon/features/account/components/action_bar.js
+++ b/app/javascript/mastodon/features/account/components/action_bar.js
@@ -147,17 +147,17 @@ export default class ActionBar extends React.PureComponent {
-
+
{shortNumberFormat(account.get('statuses_count'))}
-
+
{shortNumberFormat(account.get('following_count'))}
-
+
{shortNumberFormat(account.get('followers_count'))}
diff --git a/app/models/export.rb b/app/models/export.rb
index f0d5dd255..0eeac0dc0 100644
--- a/app/models/export.rb
+++ b/app/models/export.rb
@@ -24,8 +24,16 @@ class Export
account.media_attachments.sum(:file_file_size)
end
+ def total_statuses
+ account.statuses_count
+ end
+
def total_follows
- account.following.count
+ account.following_count
+ end
+
+ def total_followers
+ account.followers_count
end
def total_blocks
diff --git a/app/views/accounts/_header.html.haml b/app/views/accounts/_header.html.haml
index d3b9893c4..caf03bd7c 100644
--- a/app/views/accounts/_header.html.haml
+++ b/app/views/accounts/_header.html.haml
@@ -14,17 +14,17 @@
.public-account-header__tabs__tabs
.details-counters
.counter{ class: active_nav_class(short_account_url(account)) }
- = link_to short_account_url(account), class: 'u-url u-uid' do
+ = link_to short_account_url(account), class: 'u-url u-uid', title: number_with_delimiter(account.statuses_count) do
%span.counter-number= number_to_human account.statuses_count, strip_insignificant_zeros: true
%span.counter-label= t('accounts.posts')
.counter{ class: active_nav_class(account_following_index_url(account)) }
- = link_to account_following_index_url(account) do
+ = link_to account_following_index_url(account), title: number_with_delimiter(account.following_count) do
%span.counter-number= number_to_human account.following_count, strip_insignificant_zeros: true
%span.counter-label= t('accounts.following')
.counter{ class: active_nav_class(account_followers_url(account)) }
- = link_to account_followers_url(account) do
+ = link_to account_followers_url(account), title: number_with_delimiter(account.followers_count) do
%span.counter-number= number_to_human account.followers_count, strip_insignificant_zeros: true
%span.counter-label= t('accounts.followers')
.spacer
diff --git a/app/views/settings/exports/show.html.haml b/app/views/settings/exports/show.html.haml
index 30cd26914..ef2d2b894 100644
--- a/app/views/settings/exports/show.html.haml
+++ b/app/views/settings/exports/show.html.haml
@@ -8,17 +8,25 @@
%th= t('exports.storage')
%td= number_to_human_size @export.total_storage
%td
+ %tr
+ %th= t('accounts.statuses')
+ %td= number_with_delimiter @export.total_statuses
+ %td
%tr
%th= t('exports.follows')
- %td= number_to_human @export.total_follows
+ %td= number_with_delimiter @export.total_follows
%td= table_link_to 'download', t('exports.csv'), settings_exports_follows_path(format: :csv)
+ %tr
+ %th= t('accounts.followers')
+ %td= number_with_delimiter @export.total_followers
+ %td
%tr
%th= t('exports.blocks')
- %td= number_to_human @export.total_blocks
+ %td= number_with_delimiter @export.total_blocks
%td= table_link_to 'download', t('exports.csv'), settings_exports_blocks_path(format: :csv)
%tr
%th= t('exports.mutes')
- %td= number_to_human @export.total_mutes
+ %td= number_with_delimiter @export.total_mutes
%td= table_link_to 'download', t('exports.csv'), settings_exports_mutes_path(format: :csv)
%p.muted-hint= t('exports.archive_takeout.hint_html')
diff --git a/app/views/settings/imports/show.html.haml b/app/views/settings/imports/show.html.haml
index 991dd4e94..2b43cb134 100644
--- a/app/views/settings/imports/show.html.haml
+++ b/app/views/settings/imports/show.html.haml
@@ -1,11 +1,14 @@
- content_for :page_title do
= t('settings.import')
-%p.hint= t('imports.preface')
-
= simple_form_for @import, url: settings_import_path do |f|
- = f.input :type, collection: Import.types.keys, wrapper: :with_label, include_blank: false, label_method: lambda { |type| I18n.t("imports.types.#{type}") }, as: :radio_buttons, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li'
- = f.input :data, wrapper: :with_label, hint: t('simple_form.hints.imports.data')
+ %p.hint= t('imports.preface')
+
+ .field-group
+ = f.input :type, collection: Import.types.keys, wrapper: :with_label, include_blank: false, label_method: lambda { |type| I18n.t("imports.types.#{type}") }, as: :radio_buttons, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li'
+
+ .field-group
+ = f.input :data, wrapper: :with_block_label, hint: t('simple_form.hints.imports.data')
.actions
= f.button :button, t('imports.upload'), type: :submit
diff --git a/spec/models/export_spec.rb b/spec/models/export_spec.rb
index 6daa46145..277dcc526 100644
--- a/spec/models/export_spec.rb
+++ b/spec/models/export_spec.rb
@@ -48,17 +48,17 @@ describe Export do
describe 'total_follows' do
it 'returns the total number of the followed accounts' do
target_accounts.each(&account.method(:follow!))
- expect(Export.new(account).total_follows).to eq 2
+ expect(Export.new(account.reload).total_follows).to eq 2
end
it 'returns the total number of the blocked accounts' do
target_accounts.each(&account.method(:block!))
- expect(Export.new(account).total_blocks).to eq 2
+ expect(Export.new(account.reload).total_blocks).to eq 2
end
it 'returns the total number of the muted accounts' do
target_accounts.each(&account.method(:mute!))
- expect(Export.new(account).total_mutes).to eq 2
+ expect(Export.new(account.reload).total_mutes).to eq 2
end
end
end
From b0f4fe456b15bfe74b9feca247d0ac67a8ba21fb Mon Sep 17 00:00:00 2001
From: Immae
Date: Wed, 15 Aug 2018 18:12:44 +0200
Subject: [PATCH 091/196] Add ldap search filter (#8151)
---
.env.production.sample | 1 +
config/initializers/devise.rb | 3 +++
lib/devise/ldap_authenticatable.rb | 3 ++-
3 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/.env.production.sample b/.env.production.sample
index ebb078878..349daedd8 100644
--- a/.env.production.sample
+++ b/.env.production.sample
@@ -162,6 +162,7 @@ STREAMING_CLUSTER_NUM=1
# LDAP_BIND_DN=
# LDAP_PASSWORD=
# LDAP_UID=cn
+# LDAP_SEARCH_FILTER="%{uid}=%{email}"
# PAM authentication (optional)
# PAM authentication uses for the email generation the "email" pam variable
diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb
index 8532c9d9a..cd9bacf68 100644
--- a/config/initializers/devise.rb
+++ b/config/initializers/devise.rb
@@ -59,6 +59,8 @@ module Devise
@@ldap_password = nil
mattr_accessor :ldap_tls_no_verify
@@ldap_tls_no_verify = false
+ mattr_accessor :ldap_search_filter
+ @@ldap_search_filter = nil
class Strategies::PamAuthenticatable
def valid?
@@ -362,5 +364,6 @@ Devise.setup do |config|
config.ldap_password = ENV.fetch('LDAP_PASSWORD')
config.ldap_uid = ENV.fetch('LDAP_UID', 'cn')
config.ldap_tls_no_verify = ENV['LDAP_TLS_NO_VERIFY'] == 'true'
+ config.ldap_search_filter = ENV.fetch('LDAP_SEARCH_FILTER', '%{uid}=%{email}')
end
end
diff --git a/lib/devise/ldap_authenticatable.rb b/lib/devise/ldap_authenticatable.rb
index ef786fbb7..534c7a851 100644
--- a/lib/devise/ldap_authenticatable.rb
+++ b/lib/devise/ldap_authenticatable.rb
@@ -24,7 +24,8 @@ module Devise
connect_timeout: 10
)
- if (user_info = ldap.bind_as(base: Devise.ldap_base, filter: "(#{Devise.ldap_uid}=#{email})", password: password))
+ filter = format(Devise.ldap_search_filter, uid: Devise.ldap_uid, email: email)
+ if (user_info = ldap.bind_as(base: Devise.ldap_base, filter: filter, password: password))
user = User.ldap_get_user(user_info.first)
success!(user)
else
From 4df9cabb22cbed8f9cd8af45325ecdcc7c72d6cb Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Wed, 15 Aug 2018 19:29:52 +0200
Subject: [PATCH 092/196] Display replies count in web UI (#8181)
---
.../mastodon/components/status_action_bar.js | 12 ++++++++++-
.../styles/mastodon/components.scss | 20 +++++++++++++++++--
2 files changed, 29 insertions(+), 3 deletions(-)
diff --git a/app/javascript/mastodon/components/status_action_bar.js b/app/javascript/mastodon/components/status_action_bar.js
index 0ae21e3f0..c799d4e98 100644
--- a/app/javascript/mastodon/components/status_action_bar.js
+++ b/app/javascript/mastodon/components/status_action_bar.js
@@ -32,6 +32,16 @@ const messages = defineMessages({
embed: { id: 'status.embed', defaultMessage: 'Embed' },
});
+const obfuscatedCount = count => {
+ if (count < 0) {
+ return 0;
+ } else if (count <= 1) {
+ return count;
+ } else {
+ return '1+';
+ }
+};
+
@injectIntl
export default class StatusActionBar extends ImmutablePureComponent {
@@ -194,7 +204,7 @@ export default class StatusActionBar extends ImmutablePureComponent {
return (
-
+
{obfuscatedCount(status.get('replies_count'))}
{shareButton}
diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss
index 708a6868a..931f1aa0d 100644
--- a/app/javascript/styles/mastodon/components.scss
+++ b/app/javascript/styles/mastodon/components.scss
@@ -921,15 +921,31 @@
align-items: center;
display: flex;
margin-top: 8px;
+
+ &__counter {
+ display: inline-flex;
+ margin-right: 11px;
+ align-items: center;
+
+ .status__action-bar-button {
+ margin-right: 4px;
+ }
+
+ &__label {
+ display: inline-block;
+ width: 14px;
+ font-size: 12px;
+ font-weight: 500;
+ color: $action-button-color;
+ }
+ }
}
.status__action-bar-button {
- float: left;
margin-right: 18px;
}
.status__action-bar-dropdown {
- float: left;
height: 23.15px;
width: 23.15px;
}
From af912fb308cffe98f52e155484c4c6b0a62efceb Mon Sep 17 00:00:00 2001
From: ThibG
Date: Wed, 15 Aug 2018 19:33:36 +0200
Subject: [PATCH 093/196] Allow accessing local private/DM messages by URL
(#8196)
* Allow accessing local private/DM messages by URL
(Provided the user pasting the URL is authorized to see the toot, obviously)
* Fix SearchServiceSpec tests
---
app/services/resolve_url_service.rb | 10 ++++++++--
app/services/search_service.rb | 2 +-
spec/services/search_service_spec.rb | 6 +++---
3 files changed, 12 insertions(+), 6 deletions(-)
diff --git a/app/services/resolve_url_service.rb b/app/services/resolve_url_service.rb
index a068c1ed8..1db1917e2 100644
--- a/app/services/resolve_url_service.rb
+++ b/app/services/resolve_url_service.rb
@@ -2,11 +2,13 @@
class ResolveURLService < BaseService
include JsonLdHelper
+ include Authorization
attr_reader :url
- def call(url)
+ def call(url, on_behalf_of: nil)
@url = url
+ @on_behalf_of = on_behalf_of
return process_local_url if local_url?
@@ -84,6 +86,10 @@ class ResolveURLService < BaseService
def check_local_status(status)
return if status.nil?
- status if status.public_visibility? || status.unlisted_visibility?
+ authorize_with @on_behalf_of, status, :show?
+ status
+ rescue Mastodon::NotPermittedError
+ # Do not disclose the existence of status the user is not authorized to see
+ nil
end
end
diff --git a/app/services/search_service.rb b/app/services/search_service.rb
index 5bb395942..cc1fcb52f 100644
--- a/app/services/search_service.rb
+++ b/app/services/search_service.rb
@@ -53,7 +53,7 @@ class SearchService < BaseService
end
def url_resource
- @_url_resource ||= ResolveURLService.new.call(query)
+ @_url_resource ||= ResolveURLService.new.call(query, on_behalf_of: @account)
end
def url_resource_symbol
diff --git a/spec/services/search_service_spec.rb b/spec/services/search_service_spec.rb
index 673de5233..671080f1d 100644
--- a/spec/services/search_service_spec.rb
+++ b/spec/services/search_service_spec.rb
@@ -29,7 +29,7 @@ describe SearchService, type: :service do
allow(ResolveURLService).to receive(:new).and_return(service)
results = subject.call(@query, 10)
- expect(service).to have_received(:call).with(@query)
+ expect(service).to have_received(:call).with(@query, on_behalf_of: nil)
expect(results).to eq empty_results
end
end
@@ -41,7 +41,7 @@ describe SearchService, type: :service do
allow(ResolveURLService).to receive(:new).and_return(service)
results = subject.call(@query, 10)
- expect(service).to have_received(:call).with(@query)
+ expect(service).to have_received(:call).with(@query, on_behalf_of: nil)
expect(results).to eq empty_results.merge(accounts: [account])
end
end
@@ -53,7 +53,7 @@ describe SearchService, type: :service do
allow(ResolveURLService).to receive(:new).and_return(service)
results = subject.call(@query, 10)
- expect(service).to have_received(:call).with(@query)
+ expect(service).to have_received(:call).with(@query, on_behalf_of: nil)
expect(results).to eq empty_results.merge(statuses: [status])
end
end
From 625b5a567bb94a557572176357cd2381ac17a06d Mon Sep 17 00:00:00 2001
From: ThibG
Date: Wed, 15 Aug 2018 19:38:56 +0200
Subject: [PATCH 094/196] Get rid of the Content Warning rainbows (#8129)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* Disable the animated rainbow text when the “Reduce motion” setting is set
* Get rid of the Content Warning rainbows
* Revert to default color for CWs in admin view
Since that colorscheme is apparently broken for some colorblind people.
* Use HTML5's details and summary for statuses with CWs in admin interface
---
app/javascript/styles/mastodon/tables.scss | 16 ++++------------
app/views/admin/reports/_status.html.haml | 12 +++++++-----
2 files changed, 11 insertions(+), 17 deletions(-)
diff --git a/app/javascript/styles/mastodon/tables.scss b/app/javascript/styles/mastodon/tables.scss
index e54c55947..c2206cf55 100644
--- a/app/javascript/styles/mastodon/tables.scss
+++ b/app/javascript/styles/mastodon/tables.scss
@@ -1,9 +1,3 @@
-@keyframes Swag {
- 0% { background-position: 0% 0%; }
- 50% { background-position: 100% 0%; }
- 100% { background-position: 200% 0%; }
-}
-
.table {
width: 100%;
max-width: 100%;
@@ -191,14 +185,12 @@ a.table-action-link {
.status__content {
padding-top: 0;
+ summary {
+ display: list-item;
+ }
+
strong {
font-weight: 700;
- background: linear-gradient(to right, orange , yellow, green, cyan, blue, violet,orange , yellow, green, cyan, blue, violet);
- background-size: 200% 100%;
- -webkit-background-clip: text;
- background-clip: text;
- color: transparent;
- animation: Swag 2s linear 0s infinite;
}
}
}
diff --git a/app/views/admin/reports/_status.html.haml b/app/views/admin/reports/_status.html.haml
index 5e174f312..5b410ec84 100644
--- a/app/views/admin/reports/_status.html.haml
+++ b/app/views/admin/reports/_status.html.haml
@@ -3,11 +3,13 @@
= f.check_box :status_ids, { multiple: true, include_hidden: false }, status.id
.batch-table__row__content
.status__content><
- - unless status.proper.spoiler_text.blank?
- %p><
- %strong> Content warning: #{Formatter.instance.format_spoiler(status.proper)}
-
- = Formatter.instance.format(status.proper, custom_emojify: true)
+ - if status.proper.spoiler_text.blank?
+ = Formatter.instance.format(status.proper, custom_emojify: true)
+ - else
+ %details<
+ %summary><
+ %strong> Content warning: #{Formatter.instance.format_spoiler(status.proper)}
+ = Formatter.instance.format(status.proper, custom_emojify: true)
- unless status.proper.media_attachments.empty?
- if status.proper.media_attachments.first.video?
From 4f24dc31dc58cedc3820baf258112e9bed2b3e69 Mon Sep 17 00:00:00 2001
From: ThibG
Date: Wed, 15 Aug 2018 20:23:12 +0200
Subject: [PATCH 095/196] Fix FixAccountsUniqueIndex migration (#8212)
---
db/migrate/20180528141303_fix_accounts_unique_index.rb | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/db/migrate/20180528141303_fix_accounts_unique_index.rb b/db/migrate/20180528141303_fix_accounts_unique_index.rb
index 624ea229e..bd4e158b7 100644
--- a/db/migrate/20180528141303_fix_accounts_unique_index.rb
+++ b/db/migrate/20180528141303_fix_accounts_unique_index.rb
@@ -6,6 +6,10 @@ class FixAccountsUniqueIndex < ActiveRecord::Migration[5.2]
def local?
domain.nil?
end
+
+ def acct
+ local? ? username : "#{username}@#{domain}"
+ end
end
disable_ddl_transaction!
From be0b372a22347fcad9d4e4e4199e9f59caa5f901 Mon Sep 17 00:00:00 2001
From: ThibG
Date: Wed, 15 Aug 2018 23:38:31 +0200
Subject: [PATCH 096/196] Fix admin.js starting rails-ujs twice (fixes #8168)
(#8213)
---
app/javascript/packs/admin.js | 3 ---
1 file changed, 3 deletions(-)
diff --git a/app/javascript/packs/admin.js b/app/javascript/packs/admin.js
index b151b4af0..5dbcc03d3 100644
--- a/app/javascript/packs/admin.js
+++ b/app/javascript/packs/admin.js
@@ -1,7 +1,4 @@
import { delegate } from 'rails-ujs';
-import { start } from '../mastodon/common';
-
-start();
function handleDeleteStatus(event) {
const [data] = event.detail;
From d78474264da0bd51e021c5f04311515e10ac828e Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Thu, 16 Aug 2018 14:21:52 +0200
Subject: [PATCH 097/196] Update reply counters only if the reply is
public/unlisted (#8211)
---
app/models/status.rb | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/models/status.rb b/app/models/status.rb
index 1c87f2566..2eed33659 100644
--- a/app/models/status.rb
+++ b/app/models/status.rb
@@ -456,8 +456,8 @@ class Status < ApplicationRecord
Account.where(id: account_id).update_all('statuses_count = COALESCE(statuses_count, 0) + 1')
end
- thread.increment_count!(:replies_count) if in_reply_to_id.present?
reblog.increment_count!(:reblogs_count) if reblog?
+ thread.increment_count!(:replies_count) if in_reply_to_id.present? && (public_visibility? || unlisted_visibility?)
end
def decrement_counter_caches
@@ -469,7 +469,7 @@ class Status < ApplicationRecord
Account.where(id: account_id).update_all('statuses_count = GREATEST(COALESCE(statuses_count, 0) - 1, 0)')
end
- thread.decrement_count!(:replies_count) if in_reply_to_id.present?
reblog.decrement_count!(:reblogs_count) if reblog?
+ thread.decrement_count!(:replies_count) if in_reply_to_id.present? && (public_visibility? || unlisted_visibility?)
end
end
From c98681c358c1f32f044992d2fe97f2e7843c83d1 Mon Sep 17 00:00:00 2001
From: ThibG
Date: Thu, 16 Aug 2018 20:02:52 +0200
Subject: [PATCH 098/196] Do not error out when performing admin actions on no
statuses (#8220)
Fixes the other issue with #8168
---
app/controllers/admin/statuses_controller.rb | 4 ++++
config/locales/en.yml | 1 +
2 files changed, 5 insertions(+)
diff --git a/app/controllers/admin/statuses_controller.rb b/app/controllers/admin/statuses_controller.rb
index 382bfc4a2..a69f12084 100644
--- a/app/controllers/admin/statuses_controller.rb
+++ b/app/controllers/admin/statuses_controller.rb
@@ -28,6 +28,10 @@ module Admin
@form = Form::StatusBatch.new(form_status_batch_params.merge(current_account: current_account, action: action_from_button))
flash[:alert] = I18n.t('admin.statuses.failed_to_execute') unless @form.save
+ redirect_to admin_account_statuses_path(@account.id, current_params)
+ rescue ActionController::ParameterMissing
+ flash[:alert] = I18n.t('admin.statuses.no_status_selected')
+
redirect_to admin_account_statuses_path(@account.id, current_params)
end
diff --git a/config/locales/en.yml b/config/locales/en.yml
index a5e4ab75d..9c2800433 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -401,6 +401,7 @@ en:
media:
title: Media
no_media: No media
+ no_status_selected: No statuses were changed as none were selected
title: Account statuses
with_media: With media
subscriptions:
From 106fa28a00ae9b336c05a25b800b9897bd61820d Mon Sep 17 00:00:00 2001
From: ThibG
Date: Thu, 16 Aug 2018 20:05:26 +0200
Subject: [PATCH 099/196] Prevent actions log from crashing when displaying
deleted status (fixes #8133) (#8219)
---
app/helpers/admin/action_logs_helper.rb | 6 +++++-
config/locales/en.yml | 1 +
2 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/app/helpers/admin/action_logs_helper.rb b/app/helpers/admin/action_logs_helper.rb
index 4c663211e..85bd30304 100644
--- a/app/helpers/admin/action_logs_helper.rb
+++ b/app/helpers/admin/action_logs_helper.rb
@@ -34,7 +34,11 @@ module Admin::ActionLogsHelper
link_to attributes['domain'], "https://#{attributes['domain']}"
when 'Status'
tmp_status = Status.new(attributes)
- link_to tmp_status.account&.acct || "##{tmp_status.account_id}", TagManager.instance.url_for(tmp_status)
+ if tmp_status.account
+ link_to tmp_status.account&.acct || "##{tmp_status.account_id}", admin_account_path(tmp_status.account_id)
+ else
+ I18n.t('admin.action_logs.deleted_status')
+ end
end
end
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 9c2800433..cc24a02cf 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -184,6 +184,7 @@ en:
unsuspend_account: "%{name} unsuspended %{target}'s account"
update_custom_emoji: "%{name} updated emoji %{target}"
update_status: "%{name} updated status by %{target}"
+ deleted_status: "(deleted status)"
title: Audit log
custom_emojis:
by_domain: Domain
From 4601a58ac24f2c97ba4934445da694ca18308b81 Mon Sep 17 00:00:00 2001
From: ThibG
Date: Fri, 17 Aug 2018 14:07:38 +0200
Subject: [PATCH 100/196] Defer scrollIntoView after DOM is drawn (fixes #8239)
(#8242)
---
app/javascript/mastodon/features/status/index.js | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/app/javascript/mastodon/features/status/index.js b/app/javascript/mastodon/features/status/index.js
index 89387ca43..0ffeaa4dc 100644
--- a/app/javascript/mastodon/features/status/index.js
+++ b/app/javascript/mastodon/features/status/index.js
@@ -355,7 +355,9 @@ export default class Status extends ImmutablePureComponent {
if (status && ancestorsIds && ancestorsIds.size > 0) {
const element = this.node.querySelectorAll('.focusable')[ancestorsIds.size - 1];
- element.scrollIntoView(true);
+ window.requestAnimationFrame(() => {
+ element.scrollIntoView(true);
+ });
this._scrolledIntoView = true;
}
}
From 1ee675d68bfd2034183a03408a2377c338dfac41 Mon Sep 17 00:00:00 2001
From: ThibG
Date: Fri, 17 Aug 2018 14:08:17 +0200
Subject: [PATCH 101/196] Use correct activity id in Accept when receiving
duplicate Follow (fixes #8218) (#8244)
---
app/lib/activitypub/activity/follow.rb | 2 +-
app/services/authorize_follow_service.rb | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/lib/activitypub/activity/follow.rb b/app/lib/activitypub/activity/follow.rb
index 826dcf18e..c45832648 100644
--- a/app/lib/activitypub/activity/follow.rb
+++ b/app/lib/activitypub/activity/follow.rb
@@ -13,7 +13,7 @@ class ActivityPub::Activity::Follow < ActivityPub::Activity
# Fast-forward repeat follow requests
if @account.following?(target_account)
- AuthorizeFollowService.new.call(@account, target_account, skip_follow_request: true)
+ AuthorizeFollowService.new.call(@account, target_account, skip_follow_request: true, follow_request_uri: @json['id'])
return
end
diff --git a/app/services/authorize_follow_service.rb b/app/services/authorize_follow_service.rb
index f47d488f1..1674239df 100644
--- a/app/services/authorize_follow_service.rb
+++ b/app/services/authorize_follow_service.rb
@@ -3,7 +3,7 @@
class AuthorizeFollowService < BaseService
def call(source_account, target_account, **options)
if options[:skip_follow_request]
- follow_request = FollowRequest.new(account: source_account, target_account: target_account)
+ follow_request = FollowRequest.new(account: source_account, target_account: target_account, uri: options[:follow_request_uri])
else
follow_request = FollowRequest.find_by!(account: source_account, target_account: target_account)
follow_request.authorize!
From 59f7f4c923494bb8dd6f2881a1610c7b51240d9c Mon Sep 17 00:00:00 2001
From: ThibG
Date: Fri, 17 Aug 2018 16:24:56 +0200
Subject: [PATCH 102/196] Implement Undo { Accept { Follow } } (fixes #8234)
(#8245)
* Add Follow#revoke_request!
* Implement Undo { Accept { Follow } } (fixes #8234)
---
app/lib/activitypub/activity/undo.rb | 6 +++++
app/models/follow.rb | 5 +++++
spec/lib/activitypub/activity/undo_spec.rb | 26 ++++++++++++++++++++++
spec/models/follow_spec.rb | 16 +++++++++++++
4 files changed, 53 insertions(+)
diff --git a/app/lib/activitypub/activity/undo.rb b/app/lib/activitypub/activity/undo.rb
index cbed417c4..64c2be7d9 100644
--- a/app/lib/activitypub/activity/undo.rb
+++ b/app/lib/activitypub/activity/undo.rb
@@ -5,6 +5,8 @@ class ActivityPub::Activity::Undo < ActivityPub::Activity
case @object['type']
when 'Announce'
undo_announce
+ when 'Accept'
+ undo_accept
when 'Follow'
undo_follow
when 'Like'
@@ -27,6 +29,10 @@ class ActivityPub::Activity::Undo < ActivityPub::Activity
end
end
+ def undo_accept
+ ::Follow.find_by(target_account: @account, uri: target_uri)&.revoke_request!
+ end
+
def undo_follow
target_account = account_from_uri(target_uri)
diff --git a/app/models/follow.rb b/app/models/follow.rb
index 3fce14b9a..714f4e898 100644
--- a/app/models/follow.rb
+++ b/app/models/follow.rb
@@ -32,6 +32,11 @@ class Follow < ApplicationRecord
false # Force uri_for to use uri attribute
end
+ def revoke_request!
+ FollowRequest.create!(account: account, target_account: target_account, show_reblogs: show_reblogs, uri: uri)
+ destroy!
+ end
+
before_validation :set_uri, only: :create
after_destroy :remove_endorsements
diff --git a/spec/lib/activitypub/activity/undo_spec.rb b/spec/lib/activitypub/activity/undo_spec.rb
index e01c5e03e..9545e1f46 100644
--- a/spec/lib/activitypub/activity/undo_spec.rb
+++ b/spec/lib/activitypub/activity/undo_spec.rb
@@ -52,6 +52,32 @@ RSpec.describe ActivityPub::Activity::Undo do
end
end
+ context 'with Accept' do
+ let(:recipient) { Fabricate(:account) }
+ let(:object_json) do
+ {
+ id: 'bar',
+ type: 'Accept',
+ actor: ActivityPub::TagManager.instance.uri_for(sender),
+ object: 'follow-to-revoke',
+ }
+ end
+
+ before do
+ recipient.follow!(sender, uri: 'follow-to-revoke')
+ end
+
+ it 'deletes follow from recipient to sender' do
+ subject.perform
+ expect(recipient.following?(sender)).to be false
+ end
+
+ it 'creates a follow request from recipient to sender' do
+ subject.perform
+ expect(recipient.requested?(sender)).to be true
+ end
+ end
+
context 'with Block' do
let(:recipient) { Fabricate(:account) }
diff --git a/spec/models/follow_spec.rb b/spec/models/follow_spec.rb
index 43175d852..f221973b6 100644
--- a/spec/models/follow_spec.rb
+++ b/spec/models/follow_spec.rb
@@ -37,4 +37,20 @@ RSpec.describe Follow, type: :model do
expect(a[1]).to eq follow0
end
end
+
+ describe 'revoke_request!' do
+ let(:follow) { Fabricate(:follow, account: account, target_account: target_account) }
+ let(:account) { Fabricate(:account) }
+ let(:target_account) { Fabricate(:account) }
+
+ it 'revokes the follow relation' do
+ follow.revoke_request!
+ expect(account.following?(target_account)).to be false
+ end
+
+ it 'creates a follow request' do
+ follow.revoke_request!
+ expect(account.requested?(target_account)).to be true
+ end
+ end
end
From bf1bde5d6a8306284a0cce89eb8f492b8c9b7a67 Mon Sep 17 00:00:00 2001
From: Dachi Natsvlishvili
Date: Fri, 17 Aug 2018 20:00:01 +0400
Subject: [PATCH 103/196] Add Georgian language translation (#8250)
* Add Georgian language translation
* i18n-tasks normalize
---
app/helpers/settings_helper.rb | 1 +
app/javascript/mastodon/locales/ka.json | 311 ++++++
.../mastodon/locales/whitelist_ka.json | 2 +
config/application.rb | 1 +
config/locales/activerecord.ka.yml | 13 +
config/locales/devise.ka.yml | 82 ++
config/locales/doorkeeper.ka.yml | 142 +++
config/locales/ka.yml | 893 ++++++++++++++++++
config/locales/simple_form.ka.yml | 99 ++
9 files changed, 1544 insertions(+)
create mode 100644 app/javascript/mastodon/locales/ka.json
create mode 100644 app/javascript/mastodon/locales/whitelist_ka.json
create mode 100644 config/locales/activerecord.ka.yml
create mode 100644 config/locales/devise.ka.yml
create mode 100644 config/locales/doorkeeper.ka.yml
create mode 100644 config/locales/ka.yml
create mode 100644 config/locales/simple_form.ka.yml
diff --git a/app/helpers/settings_helper.rb b/app/helpers/settings_helper.rb
index 8528be267..14ca2333e 100644
--- a/app/helpers/settings_helper.rb
+++ b/app/helpers/settings_helper.rb
@@ -26,6 +26,7 @@ module SettingsHelper
io: 'Ido',
it: 'Italiano',
ja: '日本語',
+ ka: 'ქართული',
ko: '한국어',
nl: 'Nederlands',
no: 'Norsk',
diff --git a/app/javascript/mastodon/locales/ka.json b/app/javascript/mastodon/locales/ka.json
new file mode 100644
index 000000000..494270b9d
--- /dev/null
+++ b/app/javascript/mastodon/locales/ka.json
@@ -0,0 +1,311 @@
+{
+ "account.badges.bot": "ბოტი",
+ "account.block": "დაბლოკე @{name}",
+ "account.block_domain": "დაიმალოს ყველაფერი დომენიდან {domain}",
+ "account.blocked": "დაიბლოკა",
+ "account.direct": "პირდაპირი წერილი @{name}-ს",
+ "account.disclaimer_full": "ქვემოთ მოცემულმა ინფორმაციამ შეიძლება სრულად არ ასახოს მომხმარებლის პროფილი.",
+ "account.domain_blocked": "დომენი დამალულია",
+ "account.edit_profile": "პროფილის ცვლილება",
+ "account.endorse": "გამორჩევა პროფილზე",
+ "account.follow": "გაყოლა",
+ "account.followers": "მიმდევრები",
+ "account.follows": "მიდევნებები",
+ "account.follows_you": "მოგყვებათ",
+ "account.hide_reblogs": "დაიმალოს ბუსტები @{name}-სგან",
+ "account.media": "მედია",
+ "account.mention": "ასახელეთ @{name}",
+ "account.moved_to": "{name} გადავიდა:",
+ "account.mute": "გააჩუმე @{name}",
+ "account.mute_notifications": "გააჩუმე შეტყობინებები @{name}-სგან",
+ "account.muted": "გაჩუმებული",
+ "account.posts": "ტუტები",
+ "account.posts_with_replies": "ტუტები და პასუხები",
+ "account.report": "დაარეპორტე @{name}",
+ "account.requested": "დამტკიცების მოლოდინში. დააწკაპუნეთ რომ უარყოთ დადევნების მოთხონვა",
+ "account.share": "გააზიარე @{name}-ის პროფილი",
+ "account.show_reblogs": "აჩვენე ბუსტები @{name}-სგან",
+ "account.unblock": "განბლოკე @{name}",
+ "account.unblock_domain": "გამოაჩინე {domain}",
+ "account.unendorse": "არ გამოირჩეს პროფილზე",
+ "account.unfollow": "ნუღარ მიჰყვები",
+ "account.unmute": "ნუღარ აჩუმებ @{name}-ს",
+ "account.unmute_notifications": "ნუღარ აჩუმებ შეტყობინებებს @{name}-სგან",
+ "account.view_full_profile": "სრული პროფილის ჩვენება",
+ "alert.unexpected.message": "წარმოიშვა მოულოდნელი შეცდომა.",
+ "alert.unexpected.title": "უპს!",
+ "boost_modal.combo": "შეგიძლიათ დააჭიროთ {combo}-ს რათა შემდეგ ჯერზე გამოტოვოთ ეს",
+ "bundle_column_error.body": "ამ კომპონენტის ჩატვირთვისას რაღაც აირია.",
+ "bundle_column_error.retry": "სცადეთ კიდევ ერთხელ",
+ "bundle_column_error.title": "ქსელის შეცდომა",
+ "bundle_modal_error.close": "დახურვა",
+ "bundle_modal_error.message": "ამ კომპონენტის ჩატვირთვისას რაღაც აირია.",
+ "bundle_modal_error.retry": "სცადეთ კიდევ ერთხელ",
+ "column.blocks": "დაბლოკილი მომხმარებლები",
+ "column.community": "ლოკალური თაიმლაინი",
+ "column.direct": "პირდაპირი წერილები",
+ "column.domain_blocks": "დამალული დომენები",
+ "column.favourites": "ფავორიტები",
+ "column.follow_requests": "დადევნების მოთხოვნები",
+ "column.home": "სახლი",
+ "column.lists": "სიები",
+ "column.mutes": "გაჩუმებული მომხმარებლები",
+ "column.notifications": "შეტყობინებები",
+ "column.pins": "აპინული ტუტები",
+ "column.public": "ფედერალური თაიმლაინი",
+ "column_back_button.label": "უკან",
+ "column_header.hide_settings": "პარამეტრების დამალვა",
+ "column_header.moveLeft_settings": "სვეტის მარცხნივ გადატანა",
+ "column_header.moveRight_settings": "სვეტის მარჯვნივ გადატანა",
+ "column_header.pin": "აპინვა",
+ "column_header.show_settings": "პარამეტრების ჩვენება",
+ "column_header.unpin": "პინის მოხსნა",
+ "column_subheading.settings": "პარამეტრები",
+ "community.column_settings.media_only": "მხოლოდ მედია",
+ "compose_form.direct_message_warning": "ეს ტუტი გაეგზავნება მხოლოდ ნახსენებ მომხმარებლებს.",
+ "compose_form.direct_message_warning_learn_more": "გაიგე მეტი",
+ "compose_form.hashtag_warning": "ეს ტუტი არ მოექცევა ჰეშტეგების ქვეს, რამეთუ ის არაა მითითებული. მხოლოდ ღია ტუტები მოიძებნება ჰეშტეგით.",
+ "compose_form.lock_disclaimer": "თქვენი ანგარიში არაა {locked}. ნებისმიერს შეიძლია გამოგყვეთ, რომ იხილოს თქვენი მიმდევრებზე გათვლილი პოსტები.",
+ "compose_form.lock_disclaimer.lock": "ჩაკეტილი",
+ "compose_form.placeholder": "რაზე ფიქრობ?",
+ "compose_form.publish": "ტუტი",
+ "compose_form.publish_loud": "{publish}!",
+ "compose_form.sensitive.marked": "მედია მონიშნულია მგრძნობიარედ",
+ "compose_form.sensitive.unmarked": "მედია არაა მონიშნული მგრძნობიარედ",
+ "compose_form.spoiler.marked": "გაფრთხილების უკან ტექსტი დამალულია",
+ "compose_form.spoiler.unmarked": "ტექსტი არაა დამალული",
+ "compose_form.spoiler_placeholder": "თქვენი გაფრთხილება დაწერეთ აქ",
+ "confirmation_modal.cancel": "უარყოფა",
+ "confirmations.block.confirm": "ბლოკი",
+ "confirmations.block.message": "დარწმუნებული ხართ, გსურთ დაბლოკოთ {name}?",
+ "confirmations.delete.confirm": "გაუქმება",
+ "confirmations.delete.message": "დარწმუნებული ხართ, გსურთ გააუქმოთ ეს სტატუსი?",
+ "confirmations.delete_list.confirm": "გაუქმება",
+ "confirmations.delete_list.message": "დარწმუნებული ხართ, გსურთ სამუდამოდ გააუქმოთ ეს სია?",
+ "confirmations.domain_block.confirm": "მთელი დომენის დამალვა",
+ "confirmations.domain_block.message": "ნაღდად, ნაღდად, დარწმუნებული ხართ, გსურთ დაბლოკოთ მთელი {domain}? უმეტეს შემთხვევაში რამდენიმე გამიზნული ბლოკი ან გაჩუმება საკმარისი და უკეთესია. კონტენტს ამ დომენიდან ვერ იხილავთ ვერც ერთ ღია თაიმლაინზე ან თქვენს შეტყობინებებში. ამ დომენიდან არსებული მიმდევრები ამოიშლება.",
+ "confirmations.mute.confirm": "გაჩუმება",
+ "confirmations.mute.message": "დარწმუნებული ხართ, გსურთ გააჩუმოთ {name}?",
+ "confirmations.redraft.confirm": "გაუქმება და გადანაწილება",
+ "confirmations.redraft.message": "დარწმუნებული ხართ, გსურთ გააუქმოთ ეს სტატუსი და გადაანაწილოთ? დაკარგავთ ყველა პასუხს, ბუსტს და მასზედ არსებულ ფავორიტს.",
+ "confirmations.unfollow.confirm": "ნუღარ მიჰყვები",
+ "confirmations.unfollow.message": "დარწმუნებული ხართ, აღარ გსურთ მიჰყვებოდეთ {name}-ს?",
+ "embed.instructions": "ეს სტატუსი ჩასვით თქვენს ვებ-საიტზე შემდეგი კოდის კოპირებით.",
+ "embed.preview": "ესაა თუ როგორც გამოჩნდება:",
+ "emoji_button.activity": "აქტივობა",
+ "emoji_button.custom": "პერსონალიზირებული",
+ "emoji_button.flags": "დროშები",
+ "emoji_button.food": "საჭმელი და სასლმელი",
+ "emoji_button.label": "ემოჯის ჩასმა",
+ "emoji_button.nature": "ბუმება",
+ "emoji_button.not_found": "არაა ემოჯი!! (╯°□°)╯︵ ┻━┻",
+ "emoji_button.objects": "ობიექტები",
+ "emoji_button.people": "ხალხი",
+ "emoji_button.recent": "ხშირად გამოყენებული",
+ "emoji_button.search": "ძებნა...",
+ "emoji_button.search_results": "ძებნის შედეგები",
+ "emoji_button.symbols": "სიმბოლოები",
+ "emoji_button.travel": "მოგზაურობა და ადგილები",
+ "empty_column.community": "ლოკალური თაიმლაინი ცარიელია. დაწერეთ რაიმე ღიად ან ქენით რაიმე სხვა!",
+ "empty_column.direct": "ჯერ პირდაპირი წერილები არ გაქვთ. როდესაც მიიღებთ ან გააგზავნით, გამოჩნდება აქ.",
+ "empty_column.hashtag": "ამ ჰეშტეგში ჯერ არაფერია.",
+ "empty_column.home": "თქვენი სახლის თაიმლაინი ცარიელია! ესტუმრეთ {public}-ს ან დასაწყისისთვის გამოიყენეთ ძებნა, რომ შეხვდეთ სხვა მომხმარებლებს.",
+ "empty_column.home.public_timeline": "ღია თაიმლაინი",
+ "empty_column.list": "ამ სიაში ჯერ არაფერია. როდესაც სიის წევრები დაპოსტავენ ახალ სტატუსებს, ისინი გამოჩნდებიან აქ.",
+ "empty_column.notifications": "ჯერ შეტყობინებები არ გაქვთ. საუბრის დასაწყებად იურთიერთქმედეთ სხვებთან.",
+ "empty_column.public": "აქ არაფერია! შესავსებად, დაწერეთ რაიმე ღიად ან ხელით გაჰყევით მომხმარებლებს სხვა ინსტანციებისგან",
+ "follow_request.authorize": "ავტორიზაცია",
+ "follow_request.reject": "უარყოფა",
+ "getting_started.developers": "დეველოპერები",
+ "getting_started.documentation": "დოკუმენტაცია",
+ "getting_started.find_friends": "იპოვეთ მეგობრები ტვიტერიდან",
+ "getting_started.heading": "დაწყება",
+ "getting_started.invite": "ხალხის მოწვევა",
+ "getting_started.open_source_notice": "მასტოდონი ღია პროგრამაა. შეგიძლიათ შეუწყოთ ხელი ან შექმნათ პრობემის რეპორტი {github}-ზე.",
+ "getting_started.security": "უსაფრთხოება",
+ "getting_started.terms": "მომსახურების პირობები",
+ "home.column_settings.basic": "ძირითადი",
+ "home.column_settings.show_reblogs": "ბუსტების ჩვენება",
+ "home.column_settings.show_replies": "პასუხების ჩვენება",
+ "keyboard_shortcuts.back": "უკან გადასასვლელად",
+ "keyboard_shortcuts.boost": "დასაბუსტად",
+ "keyboard_shortcuts.column": "ერთ-ერთი სვეტში სტატუსზე ფოკუსირებისთვის",
+ "keyboard_shortcuts.compose": "შედგენის ტექსტ-არეაზე ფოკუსირებისთვის",
+ "keyboard_shortcuts.description": "აღწერილობა",
+ "keyboard_shortcuts.down": "სიაში ქვემოთ გადასაადგილებლად",
+ "keyboard_shortcuts.enter": "სტატუსის გასახსნელად",
+ "keyboard_shortcuts.favourite": "ფავორიტად ქცევისთვის",
+ "keyboard_shortcuts.heading": "კლავიატურის სწრაფი ბმულები",
+ "keyboard_shortcuts.hotkey": "ცხელი კლავიში",
+ "keyboard_shortcuts.legend": "ამ ლეგენდის გამოსაჩენად",
+ "keyboard_shortcuts.mention": "ავტორის დასახელებლად",
+ "keyboard_shortcuts.profile": "ავტორის პროფილის გასახსნელად",
+ "keyboard_shortcuts.reply": "პასუხისთვის",
+ "keyboard_shortcuts.search": "ძიებაზე ფოკუსირებისთვის",
+ "keyboard_shortcuts.toggle_hidden": "გაფრთხილების უკან ტექსტის გამოსაჩენად/დასამალვად",
+ "keyboard_shortcuts.toot": "ახალი ტუტის დასაწყებად",
+ "keyboard_shortcuts.unfocus": "შედგენის ტექსტ-არეაზე ფოკუსის მოსაშორებლად",
+ "keyboard_shortcuts.up": "სიაში ზემოთ გადასაადგილებლად",
+ "lightbox.close": "დახურვა",
+ "lightbox.next": "შემდეგი",
+ "lightbox.previous": "წინა",
+ "lists.account.add": "სიაში დამატება",
+ "lists.account.remove": "სიიდან ამოშლა",
+ "lists.delete": "სიის წაშლა",
+ "lists.edit": "სიის შეცვლა",
+ "lists.new.create": "სიის დამატება",
+ "lists.new.title_placeholder": "ახალი სიის სათაური",
+ "lists.search": "ძებნა ადამიანებს შორის რომელთაც მიჰყვებით",
+ "lists.subheading": "თქვენი სიები",
+ "loading_indicator.label": "იტვირთება...",
+ "media_gallery.toggle_visible": "ხილვადობის ჩართვა",
+ "missing_indicator.label": "არაა ნაპოვნი",
+ "missing_indicator.sublabel": "ამ რესურსის პოვნა ვერ მოხერხდა",
+ "mute_modal.hide_notifications": "დავმალოთ შეტყობინებები ამ მომხმარებლისგან?",
+ "navigation_bar.blocks": "დაბლოკილი მომხმარებლები",
+ "navigation_bar.community_timeline": "ლოკალური თაიმლაინი",
+ "navigation_bar.direct": "პირდაპირი წერილები",
+ "navigation_bar.discover": "აღმოაჩინე",
+ "navigation_bar.domain_blocks": "დამალული დომენები",
+ "navigation_bar.edit_profile": "შეცვალე პროფილი",
+ "navigation_bar.favourites": "ფავორიტები",
+ "navigation_bar.filters": "გაჩუმებული სიტყვები",
+ "navigation_bar.follow_requests": "დადევნების მოთხოვნები",
+ "navigation_bar.info": "ამ ინსტანციის შესახებ",
+ "navigation_bar.keyboard_shortcuts": "ცხელი კლავიშები",
+ "navigation_bar.lists": "სიები",
+ "navigation_bar.logout": "გასვლა",
+ "navigation_bar.mutes": "გაჩუმებული მომხმარებლები",
+ "navigation_bar.personal": "პირადი",
+ "navigation_bar.pins": "აპინული ტუტები",
+ "navigation_bar.preferences": "პრეფერენსიები",
+ "navigation_bar.public_timeline": "ფედერალური თაიმლაინი",
+ "navigation_bar.security": "უსაფრთხოება",
+ "notification.favourite": "{name}-მა თქვენი სტატუსი აქცია ფავორიტად",
+ "notification.follow": "{name} გამოგყვათ",
+ "notification.mention": "{name}-მა გასახელათ",
+ "notification.reblog": "{name}-მა დაბუსტა თქვენი სტატუსი",
+ "notifications.clear": "შეტყობინებების გასუფთავება",
+ "notifications.clear_confirmation": "დარწმუნებული ხართ, გსურთ სამუდამოდ წაშალოთ ყველა თქვენი შეტყობინება?",
+ "notifications.column_settings.alert": "დესკტოპ შეტყობინებები",
+ "notifications.column_settings.favourite": "ფავორიტები:",
+ "notifications.column_settings.follow": "ახალი მიმდევრები:",
+ "notifications.column_settings.mention": "ხსენებები:",
+ "notifications.column_settings.push": "ფუშ შეტყობინებები",
+ "notifications.column_settings.push_meta": "ეს მოწყობილობა",
+ "notifications.column_settings.reblog": "ბუსტები:",
+ "notifications.column_settings.show": "გამოჩნდეს სვეტში",
+ "notifications.column_settings.sound": "ხმის დაკვრა",
+ "notifications.group": "{count} შეტყობინება",
+ "onboarding.done": "დასასრული",
+ "onboarding.next": "შემდეგი",
+ "onboarding.page_five.public_timelines": "ლოკალური თაიმლაინი {domain}-ზე საჯარო პოსტებს აჩვენებს ყველასგან. ფედერალური თაიმლაინი {domain}-ზე აჩვენებს საჯარო პოსტებს ყველასგან ვინც მიჰყვება. ეს საჯარო თაიმლაინებია, ახალი ადამიანების აღმოჩენის კარგი გზაა.",
+ "onboarding.page_four.home": "სახლის თაიმლაინი აჩვენებს პოსტებს ადამიანებისგან, რომლებსაც მიჰყვებით.",
+ "onboarding.page_four.notifications": "შეტყობინებების სვეტი აჩვენებს სხვის ურთიერთქმედებებს თქვენთან.",
+ "onboarding.page_one.federation": "მასტოდონი დამოუკიდებელი სერვერების ქსელია, რომლებიც ერთიანდებიან ერთი დიდი სოციალური ქსელის შექმნისთვის. ამ სერვერებს ჩვენ ვეძახით ინსტანციებს.",
+ "onboarding.page_one.full_handle": "თქვენი სრული სახელური",
+ "onboarding.page_one.handle_hint": "ეს არის ის რასაც ეტყოდით თქვენს მეგობრებს რომ მოძიონ.",
+ "onboarding.page_one.welcome": "კეთილი იყოს თქვენი მასტოდონში მობრძანება!",
+ "onboarding.page_six.admin": "თქვენი ინსტანციის ადმინისტრატორია {admin}.",
+ "onboarding.page_six.almost_done": "თითქმის დასრულდა...",
+ "onboarding.page_six.appetoot": "ბონ აპეტუტ!",
+ "onboarding.page_six.apps_available": "ხელმისაწვდომია {apps} აი-ოსისთვის, ანდროიდისთვის და სხვა პლატფორმებისთვის.",
+ "onboarding.page_six.github": "მასტოდონი უფასო ღია პროგრამაა. შეგიძლიათ დაარეპორტოთ შეცდომები, მოითხოვოთ ფუნქციები, შეუწყოთ ხელი კოდს {github}-ზე.",
+ "onboarding.page_six.guidelines": "საზოგადოების სახელმძღვანელო",
+ "onboarding.page_six.read_guidelines": "გთხოვთ გაეცნოთ {domain}-ს {guidelines}!",
+ "onboarding.page_six.various_app": "მობაილ აპები",
+ "onboarding.page_three.profile": "შეცვალეთ თქვენი პროფილი რომ შეცვალოთ ავატარი, ბიოგრაფია და დისპლეის სახელი. იქ, ასევე იხილავთ სხვა პრეფერენსიების.",
+ "onboarding.page_three.search": "გამოიყენეთ ძიება რომ იპოვნოთ ადამიანები და იხილოთ ჰეშტეგები, ისეთები როგორებიცაა {illustration} და {introductions}. რომ მოძებნოთ ადამიანი ვინც არაა ამ ინსტანციაზე, გამოიყენეთ სრული სახელური.",
+ "onboarding.page_two.compose": "პოსტები შექმენით კომპოზიციის სვეტიდან. შეგიძლიათ ატვირთოთ სურათები, შეცვალოთ კონფიდენციალურობა და ქვემოთ მოცემული პიქტოგრამით დაამატოთ კონტენტის გაფრთხილება.",
+ "onboarding.skip": "გამოტოვება",
+ "privacy.change": "სტატუსის კონფიდენციალურობის მითითება",
+ "privacy.direct.long": "დაიპოსტოს მხოლოდ დასახელებულ მომხმარებლებთან",
+ "privacy.direct.short": "პირდაპირი",
+ "privacy.private.long": "დაიპოსტოს მხოლოდ მიმდევრებთან",
+ "privacy.private.short": "მხოლოდ-მიმდევრებისთვის",
+ "privacy.public.long": "დაიპოსტოს საჯარო თაიმლაინებზე",
+ "privacy.public.short": "საჯარო",
+ "privacy.unlisted.long": "არ დაიპოსტოს საჯარო თაიმლაინებზე",
+ "privacy.unlisted.short": "ჩამოუთვლელი",
+ "regeneration_indicator.label": "იტვირთება…",
+ "regeneration_indicator.sublabel": "თქვენი სახლის ლენტა მზადდება!",
+ "relative_time.days": "{number}დღ",
+ "relative_time.hours": "{number}სთ",
+ "relative_time.just_now": "ახლა",
+ "relative_time.minutes": "{number}წთ",
+ "relative_time.seconds": "{number}წმ",
+ "reply_indicator.cancel": "უარყოფა",
+ "report.forward": "ფორვარდი {target}-ს",
+ "report.forward_hint": "ანგარიში სხვა სერვერიდანაა. გავაგზავნოთ რეპორტის ანონიმური ასლიც?",
+ "report.hint": "რეპორტი გაეგზავნება თქვენი ინსტანციის მოდერატორებს. ქვემოთ შეგიძლიათ დაამატოთ მიზეზი თუ რატომ არეპორტებთ ამ ანგარიშს:",
+ "report.placeholder": "დამატებითი კომენტარები",
+ "report.submit": "დასრულება",
+ "report.target": "არეპორტებთ {target}",
+ "search.placeholder": "ძებნა",
+ "search_popout.search_format": "დეტალური ძებნის ფორმა",
+ "search_popout.tips.full_text": "მარტივი ტექსტი აბრუნებს სტატუსებს რომლებიც შექმენით, აქციეთ ფავორიტად, დაბუსტეთ, ან რაშიც ასახელეთ, ასევე ემთხვევა მომხმარებლის სახელებს, დისპლეი სახელებს, და ჰეშტეგებს.",
+ "search_popout.tips.hashtag": "ჰეშტეგი",
+ "search_popout.tips.status": "სტატუსი",
+ "search_popout.tips.text": "მარტივი ტექსტი აბრუნებს დამთხვეულ დისპლეი სახელებს, მომხმარებლის სახელებს და ჰეშტეგებს",
+ "search_popout.tips.user": "მომხმარებელი",
+ "search_results.accounts": "ხალხი",
+ "search_results.hashtags": "ჰეშტეგები",
+ "search_results.statuses": "ტუტები",
+ "search_results.total": "{count, number} {count, plural, one {result} other {results}}",
+ "standalone.public_title": "შიდა ხედი...",
+ "status.block": "დაბლოკე @{name}",
+ "status.cancel_reblog_private": "ბუსტის მოშორება",
+ "status.cannot_reblog": "ეს პოსტი ვერ დაიბუსტება",
+ "status.delete": "წაშლა",
+ "status.direct": "პირდაპირი წერილი @{name}-ს",
+ "status.embed": "ჩართვა",
+ "status.favourite": "ფავორიტი",
+ "status.filtered": "ფილტრირებული",
+ "status.load_more": "მეტის ჩატვირთვა",
+ "status.media_hidden": "მედია დამალულია",
+ "status.mention": "ასახელე @{name}",
+ "status.more": "მეტი",
+ "status.mute": "გააჩუმე @{name}",
+ "status.mute_conversation": "გააჩუმე საუბარი",
+ "status.open": "ამ სტატუსის გაფართოება",
+ "status.pin": "აპინე პროფილზე",
+ "status.pinned": "აპინული ტუტი",
+ "status.reblog": "ბუსტი",
+ "status.reblog_private": "დაიბუსტოს საწყის აუდიტორიაზე",
+ "status.reblogged_by": "{name} დაიბუსტა",
+ "status.redraft": "გაუქმდეს და გადანაწილდეს",
+ "status.reply": "პასუხი",
+ "status.replyAll": "უპასუხე თემას",
+ "status.report": "დაარეპორტე @{name}",
+ "status.sensitive_toggle": "დააწკაპუნეთ სანახავად",
+ "status.sensitive_warning": "მგრძნობიარე კონტენტი",
+ "status.share": "გაზიარება",
+ "status.show_less": "აჩვენე ნაკლები",
+ "status.show_less_all": "აჩვენე ნაკლები ყველაზე",
+ "status.show_more": "აჩვენე მეტი",
+ "status.show_more_all": "აჩვენე მეტი ყველაზე",
+ "status.unmute_conversation": "საუბარზე გაჩუმების მოშორება",
+ "status.unpin": "პროფილიდან პინის მოშორება",
+ "tabs_bar.federated_timeline": "ფედერალური",
+ "tabs_bar.home": "სახლი",
+ "tabs_bar.local_timeline": "ლოკალური",
+ "tabs_bar.notifications": "შეტყობინებები",
+ "tabs_bar.search": "ძებნა",
+ "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} საუბრობს",
+ "ui.beforeunload": "თქვენი დრაფტი გაუქმდება თუ დატოვებთ მასტოდონს.",
+ "upload_area.title": "გადმოწიეთ და ჩააგდეთ ასატვირთათ",
+ "upload_button.label": "მედიის დამატება",
+ "upload_form.description": "აღწერილობა ვიზუალურად უფასურისთვის",
+ "upload_form.focus": "კროპი",
+ "upload_form.undo": "გაუქმება",
+ "upload_progress.label": "იტვირთება...",
+ "video.close": "ვიდეოს დახურვა",
+ "video.exit_fullscreen": "სრულ ეკრანზე ჩვენების გათიშვა",
+ "video.expand": "ვიდეოს გაფართოება",
+ "video.fullscreen": "ჩვენება სრულ ეკრანზე",
+ "video.hide": "ვიდეოს დამალვა",
+ "video.mute": "ხმის გაჩუმება",
+ "video.pause": "პაუზა",
+ "video.play": "დაკვრა",
+ "video.unmute": "ხმის გაჩუმების მოშორება"
+}
diff --git a/app/javascript/mastodon/locales/whitelist_ka.json b/app/javascript/mastodon/locales/whitelist_ka.json
new file mode 100644
index 000000000..0d4f101c7
--- /dev/null
+++ b/app/javascript/mastodon/locales/whitelist_ka.json
@@ -0,0 +1,2 @@
+[
+]
diff --git a/config/application.rb b/config/application.rb
index df64f0256..ea4949bf2 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -60,6 +60,7 @@ module Mastodon
:io,
:it,
:ja,
+ :ka,
:ko,
:nl,
:no,
diff --git a/config/locales/activerecord.ka.yml b/config/locales/activerecord.ka.yml
new file mode 100644
index 000000000..cdd4f9c4c
--- /dev/null
+++ b/config/locales/activerecord.ka.yml
@@ -0,0 +1,13 @@
+---
+ka:
+ activerecord:
+ errors:
+ models:
+ account:
+ attributes:
+ username:
+ invalid: მხოლოდ ასოები, ციფრები და "ქვედა-ტირე"
+ status:
+ attributes:
+ reblog:
+ taken: სტატუსის უკვე არსებობს
diff --git a/config/locales/devise.ka.yml b/config/locales/devise.ka.yml
new file mode 100644
index 000000000..3267eb22e
--- /dev/null
+++ b/config/locales/devise.ka.yml
@@ -0,0 +1,82 @@
+---
+ka:
+ devise:
+ confirmations:
+ confirmed: თქვენი ელ-ფოსტის მისამართი წარმატებით დამოწმდა.
+ send_instructions: თქვენ მიიღებთ ელ-ფოსტას ინსტრუქციებით თუ როგორც დაამოწმოთ თქვენი ელ-ფოსტის მისამართი რამდენიმე წუთში. გთხოვთ შეხედოთ თქვენი სპამის ფოლდერს თუ არ მიიღებთ ამ წერილს.
+ send_paranoid_instructions: თუ თქვენი ელ-ფოსტა არსებობს ჩვენს მონაცემთა ბაზაში, თქვენ მიიღებთ ელ-ფოსტას ინსტრუქციებით თუ როგორც დაამოწმოთ თქვენი ელ-ფოსტის მისამართი რამდენიმე წუთში. გთხოვთ შეხედოთ თქვენი სპამის ფოლდერს თუ არ მიიღებთ ამ წერილს.
+ failure:
+ already_authenticated: უკვე შესული ხართ.
+ inactive: თქვენი ანგარიში ჯერ არაა აქტივირებული.
+ invalid: არასწორი %{authentication_keys} ან პაროლი.
+ last_attempt: თქვენი ანგარიშის ჩაკეტვამდე დაგრჩათ კიდევ ერთი მცდელობა.
+ locked: თქვენი ანგარიში ჩაიკეტა.
+ not_found_in_database: არასწორი %{authentication_keys} ან პაროლი.
+ timeout: თქვენს სესიას გაუვიდა ვადა. გთხოვთ შედით ახლიდან რომ გააგრძელოთ.
+ unauthenticated: გაგრძელებამდე საჭიროა შეხვიდეთ ან დარეგისტრირდეთ.
+ unconfirmed: გაგრძელებამდე საჭიროა დაამოწმოთ თქვენი ელ-ფოსტა.
+ mailer:
+ confirmation_instructions:
+ action: დაამოწმეთ ელ-ფოსტის მისამართი
+ explanation: თქვენ ამ ელ-ფოსტის მისამართი ანგარიში შექმენით %{host}-ზე. დარჩა ერთი დაწკაპუნება მის აქტივაციამდე. თუ ეს თქვენ არ იყავით, გთხოვთ არ მიაქციოთ ყურადღება ამ წერილს.
+ extra_html: გთხოვთ ასევე გაეცნოთ ინსტანციის წესებს და ჩვენს კონფინდენციალურობის პოლიტიკას .
+ subject: 'მასტოდონი: დამოწმების ინსტრუქციები %{instance}-თვის'
+ title: ელ-ფოსტის მისამართის დამოწმება
+ email_changed:
+ explanation: 'თქვენი ანგარიშის ელ-ფოსტის მისამართი იცვლება შემდეგზე:'
+ extra: თუ თქვენ არ შეგიცვლიათ თქვენი ელ-ფოსტის მისამართი, როგორც ჩანს სხვამ ხელთ იგდო თქვენი ანგარიში. გთოხვთ შეცვალოთ თქვენი პაროლი რაც შეიძლება მალე, ან დაუკავშირდეთ ინსტანციის ადმინისტრატორს თუ თქვენი ანგარიში ჩაიკეტა.
+ subject: 'მასტოდონი: ელ-ფოსტა შეიცვალა'
+ title: ახალი ელ-ფოსტის მისამართი
+ password_change:
+ explanation: თქვენი ანგარიშის პაროლი შეიცვალა.
+ extra: თუ თქვენ არ შეგიცვლიათ პაროლი, როგორც ჩანს სხვამ ხელთ იგდო თქვენი ანგარიში. გთოხვთ შეცვალოთ თქვენი პაროლი რაც შეიძლება მალე, ან დაუკავშირდეთ ინსტანციის ადმინისტრატორს თუ თქვენი ანგარიში ჩაიკეტა.
+ subject: 'მასტოდონი: პაროლი შეიცვალა'
+ title: პაროლი შეიცვალა
+ reconfirmation_instructions:
+ explanation: დაამოწმეთ ახალი ელ-ფოსტის მისამართი ცვლილებისთვის.
+ extra: თუ თქვენ არ გამოიწვიეთ ეს ცვლილება, გთხოვთ არ მიაქციოთ ყურადღება ამ წერილს. მასტოდონის ელ-ფოსტის მისამართი არ შეიცვლება სანამ არ გადახვალთ ზემოთ მოცემულ ბმულზე.
+ subject: 'მასტოდონი: დაამოწმეთ ელ-ფოსტის მისამართი %{instance}-თვის'
+ title: დაამოწმეთ ელ-ფოსტის მისამართი
+ reset_password_instructions:
+ action: შეცვალეთ პაროლი
+ explanation: თქვენ მოითხოვეთ ახალი პაროლი თქვენი ანგარიშისთვის.
+ extra: თუ ეს თქვენ არ მოგითხოვიათ, გთხოვთ არ მიაქციოთ ყურადღება ამ წერილს. თქვენი პაროლი არ შეიცვლება, სანამ არ გადახვალთ ზემოთ მოცემულ ბმულზე.
+ subject: 'მასტოდონი: პაროლის განახლების ინსტრუქცეიბი'
+ title: პაროლის განახლება
+ unlock_instructions:
+ subject: 'მასტოდონი: ჩაკეტვის მოხსნის ინსტრუქციები'
+ omniauth_callbacks:
+ failure: 'ვერ მოხდა აუტენტიფიკაცია %{kind}-თან. მიზეზი: "%{reason}".'
+ success: წარმატებით შედგა აუტენტიფიკაცია %{kind} ანგარიშთან.
+ passwords:
+ no_token: ამ გვერდზე წვდომა ვერ გექნებათ თუ არ მოდიხართ პაროლის აღდგენის ელ-ფოსტის წერილიდან. თუ მოდიხართ პაროლის აღგენის წერილიდან, დაამოწმეთ რომ გადადიხართ სრულ ურლ-ზე.
+ send_instructions: თუ თქვენი ელ-ფოსტა არსებობს ჩვენს მონაცემთა ბაზაში, თქვენ მიიღებთ ელ-ფოსტაზე წერილს პაროლის განახლების ბმულით, რამდენიმე წუთში. გთხოვთ შეხედოთ თქვენი სპამის ფოლდერს თუ არ მიიღებთ ამ წერილს.
+ send_paranoid_instructions: თუ თქვენი ელ-ფოსტა არსებობს ჩვენს მონაცემთა ბაზაში, თქვენ მიიღებთ ელ-ფოსტაზე წერილს პაროლის განახლების ბმულით, რამდენიმე წუთში. გთხოვთ შეხედოთ თქვენი სპამის ფოლდერს თუ არ მიიღებთ ამ წერილს.
+ updated: თქვენი პაროლი წარმატებით შეიცვალა. ახლა შესული ხართ.
+ updated_not_active: თქვენი პაროლი წარმატებით შეიცვალა.
+ registrations:
+ destroyed: ნახვამდის! თქვენი ანგარიში წარმატებით გაუქმდა. იმედი გვაქვს ისევ შევხვდებით.
+ signed_up: გამარჯობა! თქვენ წარმატებით დარეგისტრირდით.
+ signed_up_but_inactive: თქვენ წარმატებით დარეგისტრირდით. თუმცა, ავტორიზაცია ვერ შედგა, თქვენი ანგარიში ჯერ არაა გააქტიურებული.
+ signed_up_but_locked: თქვენ წარმატებით დარეგისტრირდით. თუმცა, აცტორიზაცია ვერ შედგა, თქვენი ანგარიში ჩაკეტილია.
+ signed_up_but_unconfirmed: წერილი დამოწმების ბმულით თქვენს ელ-ფოსტაზე გამოგზავნილია. გთხოვთ გაჰყევით ბმულს, რათა გაააქტიუროთ ანგარიში. გთხოვთ შეხედოთ თქვენი სპამის ფოლდერს თუ არ მიიღებთ ამ წერილს.
+ update_needs_confirmation: თქვენი ანგარიში წარმატებით განახლდა, მაგრამ გვესაჭიროება თქვენი ელ-ფოსტის მისამართის დამოწმება. შეამოწმეთ ელ-ფოსტა და დასამოწმებლად გადადით მიღებულ ბმულზე. გთხოვთ შეხედოთ თქვენი სპამის ფოლდერს თუ არ მიიღებთ ამ წერილს.
+ updated: თქვენი ანგარიში წარმატებით განახლდა.
+ sessions:
+ already_signed_out: წარმატებით გახვედით.
+ signed_in: წარმატებით შეხვედით.
+ signed_out: წარმატებით გახვედით.
+ unlocks:
+ send_instructions: წერილს, ინსტრუქციებით თუ როგორ მოხსნათ ჩაკეტვა თქვენს ანგარიშს, მიიღებთ რამდენიმე წუთში. გთხოვთ შეხედოთ თქვენი სპამის ფოლდერს თუ არ მიიღებთ ამ წერილს.
+ send_paranoid_instructions: თუ თქვენი ელ-ფოსტა არსებობს ჩვენს მონაცემთა ბაზაში, თქვენ მიიღებთ ელ-ფოსტაზე წერილს ჩაკეტვის მოხნის ინსტრუქციებით. გთხოვთ შეხედოთ თქვენი სპამის ფოლდერს თუ არ მიიღებთ ამ წერილს.
+ unlocked: თქვენს ანგარიშს ჩაკეტვა წარმატებით მოეხსნა. გაგრძელებისთვის, გთხოვთ გაიაროთ ავტორიზაცია.
+ errors:
+ messages:
+ already_confirmed: უკვე დამოწმდა, გთხოვთ სცადოთ ავტორიზაციის გავლა
+ confirmation_period_expired: საჭიროებს დამოწმებას პერიოდში %{period}, გთხოვთ მოითხოვოთ ახლიდან
+ expired: გაუვიდა ვადა, გთხოვთ მოითხოვოთ ახალი
+ not_found: ვერ იქნა ნაპოვნი
+ not_locked: არ ჩაკეტილა
+ not_saved:
+ one: "%{resource} ვერ დამახსოვრდა ერთი შეცდომის გამო:"
+ other: "%{resource} ვერ დამახსოვრდა %{count} შეცდომის გამო:"
diff --git a/config/locales/doorkeeper.ka.yml b/config/locales/doorkeeper.ka.yml
new file mode 100644
index 000000000..e462e66f1
--- /dev/null
+++ b/config/locales/doorkeeper.ka.yml
@@ -0,0 +1,142 @@
+---
+ka:
+ activerecord:
+ attributes:
+ doorkeeper/application:
+ name: აპლიკაციის სახელი
+ redirect_uri: გადამისამართების ური
+ scopes: ფარგლები
+ website: აპლიკაციის ვებ-საიტი
+ errors:
+ models:
+ doorkeeper/application:
+ attributes:
+ redirect_uri:
+ fragment_present: ვერ ექნება ფრაგმეტი.
+ invalid_uri: უნდა იყოს ვალიდური ური.
+ relative_uri: უნდა იყოს აბსოლუტური ური.
+ secured_uri: უნდა იყოს ჰტტპს/სსლ ური.
+ doorkeeper:
+ applications:
+ buttons:
+ authorize: ავტორიზაცია
+ cancel: უარყოფა
+ destroy: გაუქმება
+ edit: შეცვლა
+ submit: გაგრძელება
+ confirmations:
+ destroy: დარწმუნებული ხართ?
+ edit:
+ title: აპლიკაციის შეცვლა
+ form:
+ error: უპს! შესაძლო შეცდომებზე შეამოწმეთ თქვენი ფორმა
+ help:
+ native_redirect_uri: ლოკალური ტესტებისთვის მოიხმარეთ %{native_redirect_uri}
+ redirect_uri: გამოიყენეთ ერთი ხაზი თითო ური-სთვის
+ scopes: ფარგლები გამოჰყავით სიცარიელით. საწყისი ფარგლის გამოსაყენებლად დატოვეთ ცარიელი.
+ index:
+ application: აპლიკაცია
+ callback_url: ქოლბექ ურლ
+ delete: გაუქმება
+ name: სახელი
+ new: ახალი აპლიკაცია
+ scopes: ფარგლები
+ show: ჩვენება
+ title: თქვენი აპლიკაციები
+ new:
+ title: ახალი აპლიკაცია
+ show:
+ actions: მოქმედებები
+ application_id: კლიენტის გასაღები
+ callback_urls: ქოლბექ ურლები
+ scopes: ფარგლები
+ secret: კლიენტის სერვერი
+ title: 'აპლიკაცია: %{name}'
+ authorizations:
+ buttons:
+ authorize: ავტორიზაცია
+ deny: აკრძალვა
+ error:
+ title: წარმოიშვა შეცდომა
+ new:
+ able_to: ის შეძლებს
+ prompt: აპლიკაცია %{client_name} ითხოვს წვდომას თქვენს ანგარიშზე
+ title: საჭიროა ავტორიზაცია
+ show:
+ title: დააკოპირეთ ეს ავტორიზაციის კოდი და ჩასვით აპლიკაციაში.
+ authorized_applications:
+ buttons:
+ revoke: გაუქმება
+ confirmations:
+ revoke: დარწმუნებული ხართ?
+ index:
+ application: აპლიკაცია
+ created_at: ავტორიზებული
+ date_format: "%Y-%m-%d %H:%M:%S"
+ scopes: ფარგლები
+ title: თქვენი ავტორიზებული აპლიკაციები
+ errors:
+ messages:
+ access_denied: რესურსის მფლობელმა ან აუტორიზაციის სერვერმა აკრძალა ეს მოთხოვნა.
+ credential_flow_not_configured: რესურის მფლობელის პაროლის რწმუნებულებების ნაკადი ვერ შესრულდა არაკონფიგურირებული Doorkeeper.configure.resource_owner_from_credentials გამო.
+ invalid_client: ამოუცნობი კლიენტის გამო კლიენტ აუტენტიფიკაცია ვერ მოხერხდა, კლიენტის აუტენტიფიკაცია არ იყო თან დართული, ან მხარდაუჭერელი აუტენტიფიკაციის მეთოდი.
+ invalid_grant: მოწოდებული ავტორიზაციის გრანტი არასწორია, ვადაგასულია, გაუქმებულია არ ემთხვევა გადამისამართების ურის, რომელიც მოიხმარება ავტორიზაცის მოთხოვნაში, ან მიეცა სხვა კლიენტს.
+ invalid_redirect_uri: მითითებული გადამისამართების ური არაა ვალიდური.
+ invalid_request: მოთხოვნას აკლია აუცილებელი პარამეტრი, მოიცავს მხარდაუჭერელ პარამეტრის მნიშვნელობას, ან სხვაგვარად არაა გამართული.
+ invalid_resource_owner: მოწოდებული რესურსის მფლობელის რწმუნებულებები არაა ვალიდური, ან მფლობელის პონვა ვერ ხერხდება
+ invalid_scope: მოთხოვნილი ფარგალი არასწორია, ამოუცნობია ან არაა გამართული.
+ invalid_token:
+ expired: წვდომის ტოკენს გაუვიდა ვადა
+ revoked: წვდომის ტოკენი გაუქმდა
+ unknown: წვდომის ტოკენი არაა ვალიდური
+ resource_owner_authenticator_not_configured: რესურსის მფლობელის მოპოვება არ შედგა Doorkeeper.configure.resource_owner_authenticator კონფიგურაციის არ არსებობის გამო.
+ server_error: აუტორიზაციის სერვერს შეხვდა მოულოდნელი მდგომარეობა, რამაც ხელი შეუშალა მას აღესრულებინა მოთხონვა.
+ temporarily_unavailable: ავტორიზაციის სერვერი ამჟამად ვერ ახერხებს მოთხოვნის შემუშავებას დროებითი გადატვირთვის ან სერვერის შენარჩუნების გამო.
+ unauthorized_client: კლიენტი არაა ავტორიზებული შეასრულოს ეს მოთხოვნა ამ მეთოდით.
+ unsupported_grant_type: ავტორიზაციის გრანტის სახეობა არაა მხარდაჭერილი ავტორიზაციის სერვერის მიერ.
+ unsupported_response_type: ავტორიზაციის სერვერი არ უჭერს მხარს ამ პასუხის სახეობას.
+ flash:
+ applications:
+ create:
+ notice: აპლიკაცია შეიქმნა.
+ destroy:
+ notice: აპლიკაცია გაუქმდა.
+ update:
+ notice: აპლიკაცია განახლდა.
+ authorized_applications:
+ destroy:
+ notice: აპლიკაცია წაიშალა.
+ layouts:
+ admin:
+ nav:
+ applications: აპლიკაციები
+ oauth2_provider: ოუ-აუთ2 პროვაიდერი
+ application:
+ title: საჭიროა ოუ-აუთ ავტორიზაცია
+ scopes:
+ follow: შეცვალეთ ანგარიშის ურთიერთობები
+ push: მიიღეთ თქვენი ფუშ შეტყობინებები
+ read: წაიკითხოს მთელი თქვენი ანგარიშის მონაცემები
+ read:accounts: იხილოს ანგარიშის ინფორმაცია
+ read:blocks: იხილოს თქვენი ბლოკები
+ read:favourites: იხილოს თქვენი ფავორიტები
+ read:filters: იხილოს თქვენი ფილრები
+ read:follows: იხილოს თქვენი მიდევნებები
+ read:lists: იხილოს თქვენი სიები
+ read:mutes: იხილოს თქვენი გაჩუმებები
+ read:notifications: იხილოს თქვენი შეტყობინებები
+ read:reports: იხილოს თქვენი რეპორტები
+ read:search: მოძებნოს თქვენი სახელით
+ read:statuses: იხილოს ყველა სტატუსი
+ write: შეცვალოს მთელი თქვენი ანგარიშის მონაცემები
+ write:accounts: შეცვალოს თქვენი პროფილი
+ write:blocks: დაბლოკოს ანგარიშები და დომენები
+ write:favourites: ფავორიტი სტატუსები
+ write:filters: შექმნას ფილტრები
+ write:follows: გაყვეს ხალხს
+ write:lists: შექმნას სიები
+ write:media: ატვირთოს მედია ფაილები
+ write:mutes: გააგჩუმოს ადამიანები და საუბრები
+ write:notifications: გაასუფთავოს თქვენი შეტყობინებები
+ write:reports: დაარეპორტოს სხვა ადამიანები
+ write:statuses: გამოაქვეყნოს სტატუსები
diff --git a/config/locales/ka.yml b/config/locales/ka.yml
new file mode 100644
index 000000000..86d982665
--- /dev/null
+++ b/config/locales/ka.yml
@@ -0,0 +1,893 @@
+---
+ka:
+ about:
+ about_hashtag_html: ეს საჯარო ტუტებია, რომლებიც ატარებენ #%{hashtag} ტეგს. მათთან ინტერაქციას შეძლებთ, თუ ფედივერსში გაქვთ რაიმე ანგარიში.
+ about_mastodon_html: მასტოდონი ღია ვებ პროტოკოლებზე და უფასო, ღია პროგრამებზე დაფუძნებული სოციალური ქსელია. ის ისეთი დეცენტრალიზებულია როგორც ელ-ფოსტა.
+ about_this: შესახებ
+ administered_by: 'ადმინისტრატორი:'
+ api: აპი
+ closed_registrations: რეგისტრაციები ამჟამად ინსტანციაზე დახურულია. თუმცა! ანგარიშის შესაქმნელად შეგიძლიათ იპოვოთ სხვა ინსტანცია და იმავე ქსელზე იქონიოთ წვდომა იქიდან.
+ contact: კონტაქტი
+ contact_missing: არაა დაყენებული
+ contact_unavailable: მიუწ.
+ documentation: დოკუმენტაცია
+ extended_description_html: |
+ კარგი ადგილი წესებისთვის
+ განვრცობილი აღწერილობა ჯერ არ შექმნილა.
+ features:
+ humane_approach_body: სხვა ქსელების შეცდომების გათვალისწინებით, მასტოდონი მიზნად ისახავს ეტიკური დიზაინის არჩევნების გაკეთებას, დაუპირისპირდეს სოციალური მედიის არასწორ მოხმარებას.
+ humane_approach_title: უფრო ადამიანური მიდგომა
+ not_a_product_body: მასტოდონი არ არის კომერციული ქსელი. არაა რეკლამა, არაა მაინინგი, არაა შემოღობილი ბაღები. არაა ცენტრალური ავტორიტეტი.
+ not_a_product_title: შენ ხარ პერსონა და არა პროდუქტი
+ real_conversation_body: 500 ნიშნის განკარგულებით, მარცვლოვანი კონტენტის და მედია გაფრთხილებების მხარდაჭერით, შეგიძლიათ გამოხატოთ ისე როგორც გსურთ.
+ real_conversation_title: შექმნილია ნამდვილი საუბრისთვის
+ within_reach_body: დეველოპერისთვის-მეგობრული აპი ექოსისტემის წყალობით, მრავალი აპლიკაცია აი-ოსისთვის, ანდროიდისთვის და სხვა პლატფორმებისთვის, საშალებას მოგცემთ ნებისმიერი ადგილიდან იქონიოთ კავშირი თქვენს მეგობრებთან.
+ within_reach_title: მუდამ წვდომის ქვეშ
+ generic_description: "%{domain} ერთი სერვერია ქსელში"
+ hosted_on: მასტოდონს მასპინძლობს %{domain}
+ learn_more: გაიგე მეტი
+ other_instances: ინსტანციების სია
+ privacy_policy: კონფიდენციალურობის პოლიტიკა
+ source_code: კოდი
+ status_count_after: სტატუსები
+ status_count_before: ვინც უავტორა
+ terms: მომსახურების პირობები
+ user_count_after: მომხმარებლისთვის
+ user_count_before: სახლი
+ what_is_mastodon: რა არის მასტოდონი?
+ accounts:
+ choices_html: "%{name}-ის არჩევნები:"
+ follow: გაყევი
+ followers: მიმდევრები
+ following: მიჰყვება
+ joined: გაწევრიანდა %{date}
+ media: მედია
+ moved_html: "%{name} გადავიდა %{new_profile_link}:"
+ network_hidden: ეს ინფორმაცია ხელმიუწვდომელია
+ nothing_here: აქ არაფერია!
+ people_followed_by: ხალხი ვისაც %{name} მიჰყვება
+ people_who_follow: ხალხი ვინც მიჰყვება %{name}-ს
+ pin_errors:
+ following: იმ ადამიანს, ვინც მოგწონთ, უკვე უნდა მიჰყვებოდეთ
+ posts: ტუტები
+ posts_with_replies: ტუტები და პასუხები
+ reserved_username: მომხმარებელი რეზერვირებულია
+ roles:
+ admin: ადმინისტრატორი
+ bot: ბოტი
+ moderator: მოდერატორი
+ unfollow: ნუღარ მიჰყვები
+ admin:
+ account_moderation_notes:
+ create: დატოვეთ ჩანაწერი
+ created_msg: მოდერაციის ჩანაწერი წარმატებით შეიქმნა!
+ delete: გაუქმება
+ destroyed_msg: მოდერაციის ჩანაწერი წარმატებით გაუქმდა!
+ accounts:
+ are_you_sure: დარწმუნებული ხარ?
+ avatar: ავატარი
+ by_domain: დომენი
+ change_email:
+ changed_msg: ანგარიშის ელ-ფოსტა წარმატებით შეიცვალა!
+ current_email: მიმდინარე ელ-ფოსტა
+ label: ელ-ფოსტის შეცვლა
+ new_email: ახალი ელ-ფოსტა
+ submit: ელ-ფოსტის შეცვლა
+ title: შეცვალეთ ელ-ფოსტა მომხმარებლისთვის %{username}
+ confirm: დადასტურება
+ confirmed: დადასტურებულია
+ confirming: დასტურდება
+ demote: დაქვეითება
+ disable: გამორთვა
+ disable_two_factor_authentication: გამორთე 2FA
+ disabled: გამორთულია
+ display_name: დისპლეი სახელი
+ domain: დომენი
+ edit: შეცვლა
+ email: ელ-ფოსტა
+ email_status: ელ-ფოსტის სტატუსი
+ enable: ჩართვა
+ enabled: ჩართულია
+ feed_url: ლენტის ურლ
+ followers: მიმდევრები
+ followers_url: მიმდევრების ურლ
+ follows: დადევნებები
+ inbox_url: ინბოქსის ურლ
+ ip: აი-პი
+ location:
+ all: ყველა
+ local: ლოკალური
+ remote: დისტანციური
+ title: ადგილმდებარეობა
+ login_status: ლოგინის სტატუსი
+ media_attachments: თან-დართული მედია
+ memorialize: აქციე მემორანდუმად
+ moderation:
+ all: ყველა
+ silenced: გაჩუმებული
+ suspended: შეჩერებული
+ title: მოდერაცია
+ moderation_notes: მოდერაციის ჩანაწერები
+ most_recent_activity: უახლესი აქტივობა
+ most_recent_ip: უახლესი აი-პი
+ not_subscribed: გამოუწერელი
+ order:
+ alphabetic: ანბანური
+ most_recent: უახლესი
+ title: წესრიგი
+ outbox_url: აუთბოქსის ურლ
+ perform_full_suspension: მოახდინეთ სრული შეჩერება
+ profile_url: პროფილის ურლ
+ promote: დაწინაურება
+ protocol: პროტოკოლი
+ public: საჯარო
+ push_subscription_expires: ფუშ გამოწერა უქმდება
+ redownload: განაახლე ავატარი
+ remove_avatar: გააუქმე ავატარი
+ resend_confirmation:
+ already_confirmed: ეს მომხმარებელი უკვე დამოწმებულია
+ send: დამოწმების ინსტრუქციების გადაგზავნა
+ success: დამოწმების ინსტრუქციები წარმატებით გაიგზავნა!
+ reset: გადატვირთვა
+ reset_password: პაროლის გადატვირთვა
+ resubscribe: ხელახალი გამოწერა
+ role: უფლებები
+ roles:
+ admin: ადმინისტრატორი
+ moderator: მოდერატორი
+ staff: სტაფი
+ user: მომხმარებელი
+ salmon_url: სალმონის ურლ
+ search: ძებნა
+ shared_inbox_url: გაზიარებული ინბოქსის ურლ
+ show:
+ created_reports: ამ ანგარიშის მიერ შექმნილი რეპორტები
+ report: რეპორტი
+ targeted_reports: ამ ანგარიშზე მიღებული რეპორტები
+ silence: სიჩუმე
+ statuses: სტატუსები
+ subscribe: გამოწერა
+ title: ანგარიშები
+ unconfirmed_email: დაუმოწმებელი ელ-ფოსტა
+ undo_silenced: გაჩუმების მოშორება
+ undo_suspension: შეჩერების მოშორება
+ unsubscribe: გამოწერის შეწყვეტა
+ username: მომხმარებლის სახელი
+ web: ვები
+ action_logs:
+ actions:
+ assigned_to_self_report: "%{name}-მა დანიშნა რეპორტი %{target} საკუთარ თავზე"
+ change_email_user: "%{name}-მა შეცვალა %{target} მომხმარებლის ელ-ფოსტის მისამართი"
+ confirm_user: "%{name}-მა დაამოწმა %{target} მომხმარებლის ელ-ფოსტის მისამართი"
+ create_custom_emoji: "%{name}-მა ატვირთა ახალი ემოჯი %{target}"
+ create_domain_block: "%{name}-მა დაბლოკა დომენი %{target}"
+ create_email_domain_block: "%{name}-მა შავ სიაში მოაქცია დომენი %{target}"
+ demote_user: "%{name}-მა დააქვეითა მომხმარებელი %{target}"
+ destroy_domain_block: "%{name}-მა ბლოკი მოხსნა დომენს %{target}"
+ destroy_email_domain_block: "%{name} თეთრ სიაში მოაქცია დომენი %{target}"
+ destroy_status: "%{name}-მა გააუქმა სტატუსი %{target}-ზე"
+ disable_2fa_user: "%{name} გათიშა მეორე ფაქტორის მოთხოვნილება მომხმარებელზე %{target}"
+ disable_custom_emoji: "%{name}-მა გათისა ემოჯი %{target}"
+ disable_user: "%{name}-მა გათიშა ლოგინი მომხმარებლისთვის %{target}"
+ enable_custom_emoji: "%{name}-მა ჩართო ემოჯი %{target}"
+ enable_user: "%{name}-მა ჩართო ლოგინი მომხმარებლისთვის %{target}"
+ memorialize_account: "%{name}-მა აქცია ანგარიში %{target} მემორანდუმის გვერდად"
+ promote_user: "%{name}-მა დააწინაურა მომხმარებელი %{target}"
+ remove_avatar_user: "%{name}-მა გააუქმა %{target} მომხმარებლის ავატარი"
+ reopen_report: "%{name}-მა ხელახლა გახსნა რეპორტი %{target}"
+ reset_password_user: "%{name} გადატვირთა მომხმარებლის %{target} პაროლი"
+ resolve_report: "%{name}-მა მოაგვარა %{target} მომხმარებლის რეპორტი"
+ silence_account: "%{name}-მა გააჩუმა %{target} ანგარიში"
+ suspend_account: "%{name} შეაჩერა %{target} ანგარიში"
+ unassigned_report: "%{name}-მა მოაშორა რეპორტი %{target}"
+ unsilence_account: "%{name}-მა მოაშორა გაჩუმება %{target} ანგარიშს"
+ unsuspend_account: "%{name}-მა მოაშორა შეჩერება %{target} ანგარიშს"
+ update_custom_emoji: "%{name}-მა განაახლა ემოჯი %{target}"
+ update_status: "%{name}-მა განაახლა სტატუსი %{target}-ით"
+ deleted_status: "(გაუქმებული სტატუსი)"
+ title: აუდიტის ლოგი
+ custom_emojis:
+ by_domain: დომენი
+ copied_msg: ემოჯის ლოკალური ასლი წარმატებით შეიქმნა
+ copy: კოპირება
+ copy_failed_msg: ამ ემოჯის ლოკალური ასლი ვერ შეიქმნა
+ created_msg: ემოჯი წარმატებით შეიქმნა!
+ delete: გაუქმება
+ destroyed_msg: ემოჯი წარმატებით გაუქმდა!
+ disable: გათიშვა
+ disabled_msg: ეს ემოჯი წარმატებით გაითიშა
+ emoji: ემოჯი
+ enable: ჩართვა
+ enabled_msg: წარმატებით ჩაირთო ეს ემოჯი
+ image_hint: PNG 50კბმდე
+ listed: ჩამოთვლილი
+ new:
+ title: ახალი პერსონალიზირებული ემოჯის დამატება
+ overwrite: გადაწერა
+ shortcode: მოკლე-კოდი
+ shortcode_hint: მინ. 2 ნიშანი, მხოლოდ ალფანუმერიკული ნიშნები და "ქვედა-ტირეები"
+ title: პერსონალიზირებული ემოჯიები
+ unlisted: ჩამოუთვლელი
+ update_failed_msg: ემოჯის განახლება ვერ მოხერხდა
+ updated_msg: ემოჯი წარმატებით განახლდა!
+ upload: ატვირთვა
+ dashboard:
+ backlog: დაუსრულებელი საქმეები
+ config: კონფიგურაცია
+ feature_deletions: ანგარიშის გაუქმებები
+ feature_invites: მოწვევის ბმულები
+ feature_registrations: რეგისტრაციები
+ feature_relay: ფედერაციის რილეი
+ features: ფუნქციები
+ hidden_service: ფედერაცია დამალულ სერვისებთან
+ open_reports: ღია რეპორტები
+ recent_users: ახალი მომხმარებლები
+ search: სრული-ტექსტის ძიება
+ single_user_mode: ერთ-მომხმარებლიანი რეჟიმი
+ software: პროგრამა
+ space: მოცულობის მოხმარება
+ title: დაფა
+ total_users: სულ მომხმარებლები
+ trends: ტრენდები
+ week_interactions: ამ კვირის ინტერაქციები
+ week_users_active: აქტიური ამ კვირას
+ week_users_new: ამ კვირის მომხმარებლები
+ domain_blocks:
+ add_new: ახლის დამატება
+ created_msg: დომენის ბლოკი ახლა პროცესირების ქვეშაა
+ destroyed_msg: დომენის ბლოკი გაუქმდა
+ domain: დომენი
+ new:
+ create: ბლოკის შექმნა
+ hint: დომენის ბლოკი არ შეაჩერებს ანგარიშების ჩაწერას მონაცემთა ბაზაში, მაგრამ ეს ამ ანგარიშებზე რეტროაქტიულად და ავტომატურად გაატარებს სპეციფიურ მოდერაციის მეთოდებს.
+ severity:
+ desc_html: "გაჩუმება გახდის ანგარიშის პოსტებს უჩინარს ყველასთვის, ვინც მას არ მიჰყვება. შეჩერება გააუქმებს ანგარიშის მთელ კონტენტს, მედიას და პროფილის მონაცემს. გამოიყენეთ არც ერთი თუ გსურთ უბრალოდ უარყოთ ფაილები."
+ noop: არც ერთი
+ silence: გაჩუმება
+ suspend: შეჩერება
+ title: ახალი დომენის ბლოკი
+ reject_media: მედია ფაილების უარყოფა
+ reject_media_hint: შლის ლოკალურად შენახულ მედია ფაილებს და უარყოფს სამომავლო გადმოტვირთებს. შეუსაბამო შეჩერებებისთვის
+ severities:
+ noop: არც ერთი
+ silence: გაჩუმება
+ suspend: შეჩერება
+ severity: სიმძიმე
+ show:
+ affected_accounts:
+ one: გავლენა იქონია მონაცემთა ბაზაში ერთ ანგარიშზე
+ other: გავლენა იქონიო მონაცემთა ბაზაში %{count} ანგარიშზე
+ retroactive:
+ silence: ამ დომენში ყველა არსებულ ანგარიშზე გაჩუმების მოშორება
+ suspend: ამ დომენში ყველა არსებულ ანგარიშზე შეჩერების მოშორება
+ title: უკუაქციეთ დომენის ბლოკი %{domain} დომენზე
+ undo: უკუქცევა
+ title: დომენის ბლოკები
+ undo: უკუქცევა
+ email_domain_blocks:
+ add_new: ახლის დამატება
+ created_msg: ელ-ფოსტის დომენი წარმატებით დაემატა შავ სიას
+ delete: გაუქმება
+ destroyed_msg: ელ-ფოსტის დომენი წარმატებით ამოიშალა შავი სიიდან
+ domain: დომენი
+ new:
+ create: დომენის დამატება
+ title: ელ-ფოსტის ახალი შენატანი შავ სიაში
+ title: ელ-ფოსტის შავი სია
+ instances:
+ account_count: ცნობილი ანგარიშები
+ domain_name: დომენი
+ reset: გადატვირთვა
+ search: ძებნა
+ title: ცნობილი ინსტანციები
+ invites:
+ filter:
+ all: ყველა
+ available: ხელმისაწვდომი
+ expired: ვადაგასული
+ title: ფილტრი
+ title: მოწვევები
+ relays:
+ add_new: ახელი რილეი
+ description_html: "ფედერაციის რილეი შუამავალი სერვერია, რომელიც ცვლის საჯარო ტუტების დიდ ოდენობას იმ სერვერებს შორის, რომლებიც გამოიწერენ და მასზე გამოაქვეყნებენ. ეს მცირე და საშუალო სერვერებს ეხმარება აღმოაჩინონ კონტენტი ფედივერსისგან , რომელიც სხვა შემთხვევაში მომხარებლებს აიძულებდა მექნიკურ რეჟიმში გაჰყოლოდნენ ხალხს სხვა დისტანციურ სერვერებზე."
+ enable_hint: ამოქმდების შემდეგ, თქვენი სერვერი გამოიწერს ყველა საჯარო ტუტს ამ რილეიდან და დაიწყებს სერვერის ღია ტუტების იქ გაგზავნას.
+ inbox_url: რილეი ურლ
+ setup: რილეი კავშირის დამყარება
+ status: სტატუსი
+ title: რილეი სია
+ report_notes:
+ created_msg: რეპორტის ჩანაწერი წარმატებით შეიქმნა!
+ destroyed_msg: რეპორტის ჩანაწერი წარმატებით გაუქმდა!
+ reports:
+ account:
+ note: ჩანაწერი
+ report: რეპორტი
+ action_taken_by: მოქმედება შეასრულა
+ are_you_sure: დარწმუნებული ხარ?
+ assign_to_self: დანიშნე ჩემზე
+ assigned: დაინიშნა მოდერატორი
+ comment:
+ none: არაფერი
+ created_at: რეპორტის დრო
+ id: იდ
+ mark_as_resolved: მონიშნე გადაწყვეტილად
+ mark_as_unresolved: მონიშნე გადაუწყვეტლად
+ notes:
+ create: ჩანაწერის დამატება
+ create_and_resolve: გადაწყვეტა ჩანაწერით
+ create_and_unresolve: ხელახალი გახსნა ჩანაწერით
+ delete: გაუქმება
+ placeholder: აღწერეთ თუ რა ნაბიჯები უნდა გადაიდგას, ან სხვა დაკავშირებული განახლებები...
+ reopen: რეპორტის ხელახალი გახსნა
+ report: 'რეპორტი #%{id}'
+ report_contents: მოცულობები
+ reported_account: დარეპორტებული ანგარიში
+ reported_by: დაარეპორტა
+ resolved: გადაწყვეტილი
+ resolved_msg: რეპორტი წარმატებით გადაწყდა!
+ silence_account: ანგარიშის გაჩუმება
+ status: სტატუსი
+ suspend_account: ანგარიშის შეჩერება
+ target: მიზანი
+ title: რეპორტები
+ unassign: გადაყენება
+ unresolved: გადაუწყვეტელი
+ updated_at: განახების დრო
+ view: ჩვენება
+ settings:
+ activity_api_enabled:
+ desc_html: ლოკალურად გამოქვეყნებული სტატუსების, აქტიური მომხმარებლების და ყოველკვირეული რეგისტრაციების მთვლელი
+ title: გამოაქვეყნე აგრეგატი სტატისტიკები მომხმარებლის აქტივობაზე
+ bootstrap_timeline_accounts:
+ desc_html: გამოჰყავი მომხმარებლები მძიმით. იმუშავებს მხოლოდ ლოკალური და "ბლოკ-მოხსნილ" ანგარიშები. საწყისი როდესაც ცარიელია ყველა ლოკალური ადმინი.
+ title: საწყისი მიდევნებები ახლა მომხმარებლებზე
+ contact_information:
+ email: ბიზნეს ელ-ფოსტა
+ username: საკონტაქტო მომხმარებლის სახელი
+ hero:
+ desc_html: წინა გვერდზე გამოჩენილი. მინ. 600/100პიქს. რეკომენდირებული. როდესაც არაა დაყენებული, ჩნდება ინსტანციის პიქტოგრამა
+ title: გმირი სურათი
+ peers_api_enabled:
+ desc_html: დომენების სახელები რომლებსაც შეხვდა ეს ინსტანცია ფედივერსში
+ title: გამოაქვეყნე აღმოჩენილი ინსტანციების სია
+ preview_sensitive_media:
+ desc_html: ბმულის პრევიუები სხვა ვებ-საიტებზე გამოაჩენენ პიქტოგრამას, მაშინაც კი თუ მედია მონიშნულია მგრძნობიარედ
+ title: გამოაჩინე მგრძნობიარე მედია ოუფენ-გრეფ პრევიუებში
+ registrations:
+ closed_message:
+ desc_html: გამოჩნდება წინა გვერდზე, როდესაც რეგისტრაციები დახურულია. შეგიძლიათ გამოიყენოთ ჰტმლ ტეგები
+ title: დახურული რეგისტრაციის წერილი
+ deletion:
+ desc_html: უფლება მიეცით ყველას, გააუქმონ თავიანთი ანგარიში
+ title: ღია ანგარიშის გაუქმება
+ min_invite_role:
+ disabled: არავინ
+ title: ნება დაერთოს მოწვეევებს
+ open:
+ desc_html: უფლება მიეცით ყველას, გახსნან ანგარიში
+ title: ღია რეგისტრაცია
+ show_known_fediverse_at_about_page:
+ desc_html: ჩართვისას, ეს გამოაჩენს ტუტებს ყველა ცნობილი ფედივერსისგან პრევიუზე. სხვა შემთხვევაში, გამოაჩენს მხოლოდ ლოკალურ ტუტებს.
+ title: გამოჩნდეს ცნობილი ვედივერსი თაიმლაინ პრევიუში
+ show_staff_badge:
+ desc_html: გამოჩნდეს სტაფის ნიშანი მომხმარებლის გვერდზე
+ title: სტაფის ნიშნის გამოჩენა
+ site_description:
+ desc_html: საშესავლო პარაგრაფი წინა გვერდზე. აღწერეთ თუ რა ხდის ამ მასტოდონის სერვერს განსაკუთრებულს და სხვა მნიშვნელოვანი. შეგიძლიათ გამოიყენოთ ჰტმლ ტეგები, კერძოდ <a>
და <em>
.
+ title: ინსტანციის აღწერილობა
+ site_description_extended:
+ desc_html: კარგი ადგილი მოქცევის კოდექსისთვის, წესები, სახელმძღვანელოები და სხვა რაც გამოარჩევს თქვენს ინსტანციას. შეგიძლიათ გამოიყენოთ ჰტმლ ტეგები
+ title: პერსონალიზირებული განვრცობილი ინფორმაცია
+ site_short_description:
+ desc_html: გამოჩნდება გვერდით ბარში და მეტა ტეგებში. აღწერეთ თუ რა არის მასტოდონი და რა ხდის ამ სერვერს უნიკალურს ერთ პარაგრაფში. თუ ცარიელია, გამოჩნდება ინსტანციის აღწერილობა.
+ title: აჩვენეთ ინსტანციის აღწერილობა
+ site_terms:
+ desc_html: შეგიძლიათ დაწეროთ საკუთარი კონფიდენციალურობის პოლიტიკა, მომსახურების პირობები ან სხვა იურიდიული დოკუმენტი. შეგიძლიათ გამოიყენოთ ჰტმლ ტეგები
+ title: პერსონალიზირებული მომსახურების პირობები
+ site_title: ინსტანციის სახელი
+ thumbnail:
+ desc_html: გამოიყენება პრევიუებისთვის ოუფენ-გრეფში და აპი-ში. 1200/630პიქს. რეკომენდირებული
+ title: ინსტანციის პიქტოგრამა
+ timeline_preview:
+ desc_html: აჩვენეთ საჯარო თაიმლაინი ლენდინგ გვერდზე
+ title: თაიმლაინ პრევიუ
+ title: საიტის პარამეტრები
+ statuses:
+ back_to_account: უკან ანგარიშის გვერდისკენ
+ batch:
+ delete: გაუქმება
+ nsfw_off: მონიშნე არა-მგრძნობიარედ
+ nsfw_on: მონიშნე მგრძნობიარედ
+ failed_to_execute: ვერ გაეშვა
+ media:
+ title: მედია
+ no_media: არაა მედია
+ no_status_selected: სატუსები არ შეცვლილა, რადგან არცერთი არ მონიშნულა
+ title: ანგარიშის სტატუსები
+ with_media: მედიით
+ subscriptions:
+ callback_url: ქოლბექ ურლ
+ confirmed: დამოწმდა
+ expires_in: ვადა გასდის
+ last_delivery: ბოლო მიღება
+ title: ვებ-საბი
+ topic: სათაური
+ title: ადმინისტრაცია
+ admin_mailer:
+ new_report:
+ body: "%{reporter}-მა დაარეპორტა %{target}"
+ body_remote: ვიღაცამ %{domain}-იდან დაარეპორტა %{target}
+ subject: ახალი რეპორტი %{instance} (#%{id})-ზე
+ application_mailer:
+ notification_preferences: შეცვალეთ ელ-ფოსტის პრეფერნსიები
+ salutation: "%{name},"
+ settings: 'შეცვალეთ ელ-ფოსტის პრეფერენსიები: %{link}'
+ view: 'ჩვენება:'
+ view_profile: პროფილის ჩვენება
+ view_status: სტატუსის ჩვენება
+ applications:
+ created: აპლიკაცია წარმატებით შეიქმნა
+ destroyed: აპლიკაცია წარმატებით გაუქმდა
+ invalid_url: მოწოდებული ურლ არასწორია
+ regenerate_token: წვდომის ტოკენის რეგენერაცია
+ token_regenerated: წვდომის ტოკენის რეგენერაცია მოხერხდა
+ warning: იყავით ძალიან ფრთხილად ამ მონაცემთან. არასდროს გააზიაროთ ეს!
+ your_token: თქვენი წვდომის ტოკენი
+ auth:
+ agreement_html: რეგისტრაციით თქვენ ეთანხმებით ინსტანციის წესებს და ჩვენ მომსახურების პირობებს .
+ change_password: პაროლი
+ confirm_email: ელ-ფოსტის დამოწმება
+ delete_account: ანგარიშის გაუქმება
+ delete_account_html: თუ გსურთ გააუქმოთ თქვენი ანგარიში, შეგიძლიათ გააგრძელოთ აქ . საჭირო იქნება დამოწმება.
+ didnt_get_confirmation: არ მოგსვლიათ დამოწმების ინსტრუქციები?
+ forgot_password: დაგავიწყდათ პაროლი?
+ invalid_reset_password_token: პაროლის გადატვირთვის ტოკენი არასწორია ან ვადაგასული. გთხოვთ მოითხოვეთ ახალი.
+ login: შესვლა
+ logout: გასვლა
+ migrate_account: სხვა ანგარიშზე გადასვლა
+ migrate_account_html: თუ გსურთ ამ ანგარიშის რედირექტის ხვაზე, შეგიძლიათ გაუწიოთ კონფიგურაცია აქ .
+ or: ან
+ or_log_in_with: ან გამოიყენეთ
+ providers:
+ cas: ქეს
+ saml: სამლ
+ register: რეგისტრაცია
+ register_elsewhere: რეგისტრაცია სხვა სერვერზე
+ resend_confirmation: დამოწმების ინსტრუქციების ხელახალი გამოგზავნა
+ reset_password: პაროლის გადატვირთვა
+ security: უსაფრთხოება
+ set_new_password: ახალი პაროლის დაყენება
+ authorize_follow:
+ already_following: უკვე მიჰყვებით ამ ანგარიშს
+ error: სამწუხაროთ, დისტანციური სერვერის წაკითხვამ გამოიწვია შეცდომა
+ follow: გაყევი
+ follow_request: 'დადევნების მოთხონვა გაეგზავნა:'
+ following: 'წარმატება! ახლა მიჰყვებით:'
+ post_follow:
+ close: ან შეგიძლიათ დახუროთ ეს ფანჯარა.
+ return: მომხმარებლის პროფილის ჩვენება
+ web: ვებზე გადასვლა
+ title: გაყევი %{acct}-ს
+ datetime:
+ distance_in_words:
+ about_x_hours: "%{count}სთ"
+ about_x_months: "%{count}თვე"
+ about_x_years: "%{count}წელი"
+ almost_x_years: "%{count}წელი"
+ half_a_minute: ამ წამს
+ less_than_x_minutes: "%{count}წთ"
+ less_than_x_seconds: ამ წამს
+ over_x_years: "%{count}წელი"
+ x_days: "%{count}დღე"
+ x_minutes: "%{count}წთ"
+ x_months: "%{count}თვე"
+ x_seconds: "%{count}წმ"
+ deletes:
+ bad_password_msg: კარგად სცადეთ, ჰაკერებო! არასწორი პაროლი
+ confirm_password: იდენტობის დასამოწმებლად შეიყვანეთ მიმდინარე პაროლი
+ description_html: ეს სამუდამოდ, დაუბრუნებლად გააუქმებს კონტენტს თქვენი ანგარიშიდან და მოახდენს მის დეაქტივაციას. მომხმარებლის სახელი კი, სამომავლო იმპერსონაციების შესაჩერებლად, გახდება რეზერვირებული
+ proceed: ანგარიშის გაუქმება
+ success_msg: თქვენი ანგარიში წარმატებით გაუქმდა
+ warning_html: მოცულობის გაუქმება გარანტირებულია მხოლოდ ამ ინსტანციაზე. კონტენტი რომელიც ფართო მასშტაბით გაზიარდა უფრო დატოვებს კვალს. ოფლაინ სერვერები და სერვერები, რომლებმაც შეწყვიტეს თქვენი განახლებების გამოწერა არ განაახლებენ მონაცემთა ბაზებს.
+ warning_title: წვდომა გავრცელებულ კონტენტზე
+ errors:
+ '403': ამ გვერდის ხილვის უფლება არ გაქვთ.
+ '404': გვერდი რომელსაც ეძებთ არ არსებობს.
+ '410': გვერდი რომელსაც ეძებდით აღარ არსებობს.
+ '422':
+ content: უსაფრთხოების ვერიფიკაცია ვერ მოხერხდა. ბლოკავთ ქუქის?
+ title: უსაფრთხოების ვერიფიკაცია არ შედგა
+ '429': დარტყმა
+ '500':
+ content: ბოდიში, ჩვენ მხარეს რაღაც არია.
+ title: გვერდი არაა სწორი
+ noscript_html: მასტოდონ ვებ-აპლიკაციის გამოყენებისთვის, გთხოვთ ჩართოთ ჯავასკრიპტი. სხვა შემთხვევაში, მასტოდონის თქვენი პატფორმისთვის სცადეთ გამოიყენოთ ერთ-ერთი მშობლიური აპლიკაცია .
+ exports:
+ archive_takeout:
+ date: თარიღი
+ download: ჩამოტვირთეთ თქვენი არქივი
+ hint_html: შეგიძლიათ მოითხოვოთ თქვენი აქივი ტუტებისა და ატვირთული მედიისა . ექსპორტირებული მონაცემები იქნება ექთივითი-ფაბ ფორმატში, წაკითხვადი ნებისმიერი თავსებადი პროგრამით. არქივის მოთხოვნა შეგიძლიათ 7 დღეში ერთხელ.
+ in_progress: მიმდინარეობს თქვენი არქივის შედგენა...
+ request: თქვენი არქივის მოთხოვნა
+ size: ზომა
+ blocks: თქვენ ბლოკავთ
+ csv: ცსვ
+ follows: თქვენ მიჰყვებით
+ mutes: თქვენ აჩუმებთ
+ storage: მედია საცავი
+ filters:
+ contexts:
+ home: სახლის თაიმლაინი
+ notifications: შეტყობინებები
+ public: საჯარო თაიმლაინი
+ thread: საუბრები
+ edit:
+ title: ფილტრის ცვლილება
+ errors:
+ invalid_context: მოწოდებულია არასწორი ან ცარიელი კონტექსტი
+ invalid_irreversible: დაუბრუნებელი ფილტრაცია მუშაობს მხოლოდ სახლის ან ნოტიფიკაციის კონტექსტში
+ index:
+ delete: გაუქმება
+ title: ფილტრები
+ new:
+ title: ახალი ფილტრის დამატება
+ followers:
+ domain: დომენი
+ explanation_html: თუ გსურთ უზრუნველყოთ თქვენი სტატუსების კონფიდენციალურობა, უნდა იცოდეთ თუ ვინ მოგყვებათ. კერძო სტატუსები მიეწოდება ყველა ინსტანციას, სადაც გყავთ მიმდევრები . შესაძლოა გსურდეთ განიხილოთ ისინი და ამოშალოთ მიმდევრები თუ არ ენდობით თქვენი კონფიდენციალურობის პატივისცემას სტაფისა თუ პროგრამისგან იმ ინსტანციებში.
+ followers_count: მიმდევრების რაოდენობა
+ lock_link: თქვენი ანგარიშის ჩაკეტვა
+ purge: მიმდევრებიდან ამოშლა
+ success:
+ one: მიმდევრების სოფტ-ბლოკირების პროცესი ერთი დომენზე...
+ other: მიმდევრების სოფტ-ბლოკირების პროცესი %{count} დომენზე...
+ true_privacy_html: გთხოვთ გაითვალისწინეთ, ჭეშმარიტი კონფიდენციალურობა მიღწევადია მხოლოდ ენდ-თუ-ენდ შიფრაციით .
+ unlocked_warning_html: ყველას შეუძლია გამოგყვეთ, რომ უცბად იხილოს თქვენი სტატუსები. %{lock_link} რომ შეძლოთ განიხილოთ და უარყოთ მიმდევრები.
+ unlocked_warning_title: თქვენი ანგარიში არაა ჩაკეტილი
+ footer:
+ developers: დეველოპერები
+ more: მეტი…
+ resources: რესურსები
+ generic:
+ changes_saved_msg: ცვლილებები წარმატებით დამახსოვრდა!
+ save_changes: ცვლილებების შენახვა
+ validation_errors:
+ one: რაღაც ჯერ არაა მთლად კარგად! გთხოვთ განიხილოთ ქვემოთ მოცემული შეცდომები
+ other: რაღაც ჯერ არაა მთლად კარგად! გთხოვთ განიხილოთ ქვემოთ მოცემული %{count} შეცდომა
+ imports:
+ preface: შეგიძლიათ დააიმპორტოთ მონაცემები, რომლებიც დააექსპორტეთ სხვა სერვერიდან, მაგალითად ადამიანების სია, რომლებსაც მიჰყვებით ან ბლოკავთ.
+ success: თქვენი მონაცემები წარმატებით აიტვირთა და მათი პროცესირება მოხდება გარკვეულ დროში
+ types:
+ blocking: ბლოკირების სია
+ following: დადევნების სია
+ muting: გაჩუმების სია
+ upload: ატვირთვა
+ in_memoriam_html: მემორანდუმში.
+ invites:
+ delete: დეაქტივაცია
+ expired: ვადა გაუვიდა
+ expires_in:
+ '1800': 30 წუთში
+ '21600': 6 საათში
+ '3600': 1 საათში
+ '43200': 12 საათში
+ '604800': 1 კვირაში
+ '86400': 1 დღეში
+ expires_in_prompt: არასდროს
+ generate: გენერირება
+ invited_by: 'თქვენ მოგიწვიათ:'
+ max_uses:
+ one: 1 მოხმარება
+ other: "%{count} მოხმარება"
+ max_uses_prompt: ლიმიტის გარეშე
+ prompt: ამ ინსტანციაზე წვდომის მისაცემად, დააგენერირეთ და გააზიარეთ ბმულები სხვებთან
+ table:
+ expires_at: ვადა გასდის
+ uses: მოხმარება
+ title: მოიწვიეთ ხალხი
+ lists:
+ errors:
+ limit: მიაღწიეთ სიების მაქსიმალურ ოდენობას
+ media_attachments:
+ validations:
+ images_and_video: ვიდეოს დართვა სტატუსზე, რომელიც უკვე მოიცავს სურათებს, ვერ მოხერხდება
+ too_many: თან ვერ დაურთავთ 4 ფაილზე მეტს
+ migrations:
+ acct: username@domain ახალი ანგარიშის
+ currently_redirecting: 'თქვენი პროფილი გამართულია მოახდინოს გადამისამართება მისამართზე:'
+ proceed: შენახვა
+ updated_msg: თქვენი ანგარიშის მიგრაციის პარამეტრები წარმატეებით დამახსოვრდა!
+ moderation:
+ title: მოდერაცია
+ notification_mailer:
+ digest:
+ action: ყველა შეტყობინების ჩვენება
+ body: 'აქ მოკლე შინაარსია წერილების, რომლებიც გამოგეპარათ წინა სტუმრობის შემდეგ: %{since}'
+ mention: "%{name}-მა დაგასახელათ:"
+ new_followers_summary:
+ one: ასევე, არყოფნისას შეგეძინათ ერთი ახალი მიმდევარი! იეი!
+ other: ასევე, არყოფნისას შეგეძინათ %{count} ახალი მიმდევარი! შესანიშნავია!
+ subject:
+ one: "1 ახალი შეტყობინება თქვენი ბოლო სტუმრობის შემდეგ \U0001F418"
+ other: "%{count} ახალი შეტყობინება თქვენი ბოლო სტუმრობის შემდეგ \U0001F418"
+ title: თქვენს არყოფნაში...
+ favourite:
+ body: 'თქვენი სტატუსი ფავორიტი გახადა %{name}-მა:'
+ subject: "%{name}-მა თქვენი სტატუსი გახადა ფავორიტი"
+ title: ახალი ფავორიტი
+ follow:
+ body: "%{name} ახლა მოგყვებათ!"
+ subject: "%{name} ახლა მოგყვებათ"
+ title: ახალი მიმდევარი
+ follow_request:
+ action: დადევნების მოთხოვნების მენეჯმენტი
+ body: "%{name}-მა მოითხოვა გამოგყვეთ"
+ subject: 'მიმდევარი მოლოდინში: %{name}'
+ title: ახალი დადევნების მოთხოვნა
+ mention:
+ action: პასუხი
+ body: 'თქვენ %{name}-მა გასახელათ:'
+ subject: თქვენ გასახელათ %{name}-მა
+ title: ახალი სახელობა
+ reblog:
+ body: 'თქვენი სტატუსი გაზარდა %{name}-მა:'
+ subject: "%{name}-მა გაზარდა თქვენი სტატუსი"
+ title: ახალი ბუსტი
+ number:
+ human:
+ decimal_units:
+ format: "%n%u"
+ units:
+ billion: ბილ.
+ million: მილ.
+ quadrillion: კუად.
+ thousand: ათას.
+ trillion: ტრილ.
+ unit: ''
+ pagination:
+ newer: უფრო ახალი
+ next: შემდეგი
+ older: ძველი
+ prev: წინა
+ truncate: "…"
+ preferences:
+ languages: ენები
+ other: სხვა
+ publishing: გამოქვეყნება
+ web: ვები
+ remote_follow:
+ acct: შეიყვანეთ თქვენი username@domain საიდანაც გსურთ გაჰყვეთ
+ missing_resource: საჭირო გადამისამართების ურლ თქვენი ანგარიშისთვის ვერ მოიძებნა
+ no_account_html: არ გაქვთ ანგარიში? შეგიძლიათ დარეგისტრირდეთ აქ
+ proceed: გააგრძელეთ გასაყოლად
+ prompt: 'თქვენ გაჰყვებით:'
+ remote_unfollow:
+ error: შეცდომა
+ title: სათაური
+ unfollowed: დადევნების შეწყვეტა
+ sessions:
+ activity: ბოლო აქტივობა
+ browser: ბრაუზერი
+ browsers:
+ alipay: ალიფეი
+ blackberry: ბლექბერი
+ chrome: ქრომი
+ edge: მაიკროსოფთ ედჯი
+ electron: ელექტრონი
+ firefox: ფაირფოქსი
+ generic: ამოუცნობი ბრაუზერი
+ ie: ინტერნეტ ექფლორერი
+ micro_messenger: მიკრო-მესინჯერი
+ nokia: ნოკია ს40 ოვი ბრაუზერი
+ opera: ოპერა
+ otter: ოტერი
+ phantom_js: ფანტომჯეიესი
+ qq: ქქ ბრაუზერი
+ safari: საფარი
+ uc_browser: იუსიბიბრაუზერი
+ weibo: ვეიბო
+ current_session: მიმდინარე სესია
+ description: "%{browser} %{platform}-ზე"
+ explanation: ეს ვებ-ბრაუზერებია, რომლებიც ამჟამად აუტენტიფიცირებულ არიან თქვენს მასტოდონ ანგარიშთან.
+ ip: აი-პი
+ platforms:
+ adobe_air: ედობ ეარი
+ android: ანდროიდი
+ blackberry: ბლექბერი
+ chrome_os: ქრომო-ოსი
+ firefox_os: ფაირფოქს-ოსი
+ ios: აი-ოსი
+ linux: ლინუქსი
+ mac: მაკი
+ other: ამოუცნობი პლატფორმა
+ windows: ვინდოუსი
+ windows_mobile: ვინდოუს მობაილი
+ windows_phone: ვინდოუს ფოუნი
+ revoke: გაუქმება
+ revoke_success: სესია წარმატებით გაუქმდა
+ title: სესიები
+ settings:
+ authorized_apps: ავტორიზირებული აპლიკაციები
+ back: უკან მასტოდონისკენ
+ delete: ანგარიშის გაუქმება
+ development: დეველოპმენტი
+ edit_profile: პროფილის ცვლილება
+ export: მონაცემის ექსპორტი
+ followers: ავტორიზირებული მიმდევრები
+ import: იმპორტი
+ migrate: ანგარიშის მიგრაცია
+ notifications: შეტყობინებები
+ preferences: პრეფერენციები
+ settings: პარამეტრები
+ two_factor_authentication: მეორე-ფაქტორის აუტენტიფიკაცია
+ your_apps: თქვენი აპლიკაციები
+ statuses:
+ attached:
+ description: 'თან დართული: %{attached}'
+ image:
+ one: "%{count} სურათი"
+ other: "%{count} სურათები"
+ video:
+ one: "%{count} ვიდეო"
+ other: "%{count} ვიდეოები"
+ boosted_from_html: გაიზარდა %{acct_link}-იდან
+ content_warning: 'გაფრთხილება კონტენტზე: %{warning}'
+ disallowed_hashtags:
+ one: 'მოიცავდა აკრძალულ ჰეშტეგს: %{tags}'
+ other: 'მოიცავს აკრძალულ ჰეშტეგს: %{tags}'
+ language_detection: ავტომატურად დადგინდეს ენა
+ open_in_web: ვებში გახნსა
+ over_character_limit: ნიშნების ლიმიტი გადასცდა %{max}-ს
+ pin_errors:
+ limit: ტუტების მაქსიმალური რაოდენობა უკვე აპინეთ
+ ownership: სხვისი ტუტი ვერ აიპინება
+ private: არა-საჯარო ტუტი ვერ აიპინება
+ reblog: ბუსტი ვერ აიპინება
+ show_more: მეტის ჩვენება
+ title: '%{name}: "%{quote}"'
+ visibilities:
+ private: მხოლოდ-მიმდევრები
+ private_long: აჩვენე მხოლოდ მიმდევრებს
+ public: საჯარო
+ public_long: ხედავს ყველა
+ unlisted: ჩამოუთვლელი
+ unlisted_long: ხედავს ყველა, მაგრამ არ ჩანს საჯარო თაიმლაინებში
+ stream_entries:
+ pinned: აპინული ტუტი
+ reblogged: გაზრდილი
+ sensitive_content: მგრძნობიარე კონტენტი
+ terms:
+ body_html: |
+ კონფიდენციალურობის პოლიტიკა
+ რა ინფორმაციას ვაგროვებთ?
+
+
+ ძირითადი ანგარიშის ინფორმაცია : თუ დარეგისტრირდებით ამ სერვერზე, შესაძლოა მოგთხოვოთ მომხმარებლის სახელი, ელ-ფოსტის მისამართი და პაროლი. შესაძლებელია, ასევე შეიყვანოთ დამატებითი პროფილის ინორმაცია, როგორიცაა დისპლეის სახელი და ბიოგრაფია, ასევე ატვირთოთ პროფილის და დასათაურების სურათი. მომხმარებლის სახელი, დისპლეის სახელი, ბიოგრაფია, პროფილის სურათი, დასათაურების სურათი ყოველთვის ღიადაა ჩამოთვლილი.
+ პოსტები, დადევნებები და სხვა საჯარო ინფორმაცია : ადამიანების სია, რომლებსაც მიჰყვებით საჯაროდაა ჩამოთვლილი, იგივე ეხება თქვენს მიდევრებსაც. როდესაც აგზავნით წერილს, თარიღი, დრო და აპლიკაცია თუ საიდანაც განათავსეთ წერილი ინახება. წერილები შესაძლოა შეიცავდნენ მედია ფაილებს, როგორებიცაა სურათები და ვიდეოები. ღია და ჩამოუთვლელი პოსტები ხელმისაწვდომია საჯაროდ. როდესაც ათავსებთ პოსტს თქვენს პროფილზე, ის ასევე საჟაროდ წვდომადი ხდება. თქვენი პოსტები ეგზავნებათ თქვენს მიმდევრებს, ზოგიერთ შემთხვევაში ეს ნიშნავს, რომ ისინი იგზავნება სხვა სერვერებზე და მათი ასლები იქვე ინახება. როდესაც აუქმებთ პოსტს, ეს მოქმედება ეგზავნებათ თქვენს მიმდევრებს. რე-ბლოგირების ან ფავორიტად ქცევის ქმედებები ასევე საქვეყნოა.
+ პირდაპირი და პოსტები მხოლოდ-მიმდევრებისთვის : ყველა პოსტი ინახება და მათი პროცესირება ხდება სერვერზე. პოსტები რომლებიც განეკუთვნება მხოლოდ მიმდევრებს მიეწოდებათ მათ, მომხმარებლები, რომლებიც დასახელებულია პოსტებში და პირდაპირი პოსტები ეგზავნებათ მხოლოდ ჩამოთვლილ მომხმარებლებს. ზოგიერთ შემთხვევაში, ეს ნიშნავს, რომ გადაგზავნა ხდება გარე სერვერებზე და ასლებიც იქ ინახება. ჩვენ დიდ ძალისხმევას ვუწევთ წვდომის ლიმიტს მხოლოდ აუტორიზირებული ადამიანებისთვის, თუმცა სხვა სერვერებმა შეიძლება ეს არ აწარმოონ. აქედან გამომდინარე, მნიშვნელოვანია განიხილოთ სერვერები, საიდანაც მოდიან თქვენი მიმდევრები. შეგიძლიათ ჩართოთ ან გამორთოთ პარამეტრი, დაადასტუროთ ან უარყოთ ახალი მიმდევარი. გთხოვთ გაითვალისწინოთ, რომ სერვერის ოპერაციები და სხვა მიმღები სერვერები შესაძლოა კითხულობდნენ ამგვარ წერილებს , მიმღებებს შეუძლიათ შექმნან სქრინშოთი, დააკოპირონ ან ხელახლა გააზიარონ ისინი. არ გააზიაროთ საშიში ინფორმაცია მასტოდონით.
+ აი-პიები და სხვა მეტა-მონაცემები : როდესაც გაივლით აუტენტიფიკაციას, ჩვენ ვინახავთ აი-პი მისამართს საიდანაც შემოხვედით, ასევე ბრაუზერის აპლიკაციას. ყველა ავტორიზირებული სესია თქვენთვის განსახილველად და გასაუქმებლად ხელმისაწვდომია პარამეტრებში. ბოლო შენახული აი-პი მისამართი ინახება მაქსიმუმ 12 თვით. ჩვენ ასევე შეიძლება გაგვაჩნდეს სერვერის ლოგი, რომელიც ინახავს თითოეული მოთხოვნის IP მისამართს.
+
+
+
+
+ რაში ვიყენებთ ინფორმაციას?
+
+ ნებისმიერი სხვა ინფორმაცია, რომელსაც ვაგროვებთ თქვენგან შესაძლოა გამოყენებულ იქნას შემდეგი გზებით:
+
+
+ რომ უზრუნველვყოთ მასტოდონის მთავარი ფუნქციონალი. შეგიძლიათ ინტერაქცია გაუწიოთ მხოლოდ სხვის კონტენტს და შექმნათ პოსტები მაშინ როდესაც ავტორიზებული ხართ. მაგალითად, შესაძლოა გაჰყვეთ სხვა ადამიანებს, რათა იხილოთ მათი ჯამური პოსტები საკუთარ პერსონალიზებულ სახლის თაიმლაინზე.
+ რომ შევუწყვოთ ხელი საზოგადოების მოდერაციას, მაგალითად შევადაროთ თქვენი აი-პი მისამართი სხვა ცნობილ მისამართებს, რათა ამოვიცნოთ ბანის გადაუხდელობა ან სხვა დარღვევები.
+ ელ-ფოსტის მისამართი რომელსაც გვაწვდით, შესაძლოა გამოვიყენოთ თქვენთვის ინფორმაციის გამოსაგძავნად, შეგატყობინოთ სხვა ადამიანების ინტერაქციაზე თქვენს კონტენტთან ან თქვენთვის გამოგზავნილ წერილებზე, ასევე რომ გიპასუხოთ მოთხოვნებზე და/ან სხვა საკითხებზე.
+
+
+
+
+ როგორ ვიცავთ თქვენს ინფორმაციას?
+
+ მიღებული გვაქვს სხვადასხვა ზომა, შევინარჩუნოთ თქვენი პირადი ინფორმაციის უსაფრთხოება, რომელსაც აგზავნით, შეგყავთ ან კითხულობთ. ამ ყველაფერთან ერთად თქვენი ბრაუზერის სესია, ტრეფიკი თქვენს აპლიკაციასა და აპის შორის დაცულია სსლ-ით, თქვენი პაროლი იშიფრება ძლიერი ალგორითმით. შეგიძლიათ ჩართოთ მეორე-ფაქტორის აუტენტიფიკაცია, რათა გააღმაოთ თქვენი ანგარიშის თავდაცვა.
+
+
+
+ რა არის ჩვენი მონაცემის უარყოფის პოლიტიკა?
+
+ ჩვენ არ დავიშურებთ ძალისხმევას რომ:
+
+
+ შევინარჩუნოთ სერვერის ლოგები, რომლებიც მოიცავენ ყველა მოთხოვნის აი-პი მისამართს, თუმცა ესეთი ლოგები არ ინახება 90 დღეზე მეტ ხანს.
+ შევინარჩუნოთ რეგისტრირებული მომხმარებლების აი-პი მისამართები მაქსიმუმ 12 თვით.
+
+
+ შეგიძლიათ მოითხოვოთ და ჩამოტვირთოთ თქვენი კონტენტის არქივი, რომელიც მოიცავს თქვენს პოსტებს, მედია ფაილებს, პროფილის და დასათაურების სურათს.
+
+ შეგიძლიათ დაუბრუნებლად გააუქმოთ თქვენი ანგარიში ნებისმიერ დროს.
+
+
+
+ ვიყენებთ თუ არა ქუქის?
+
+ დიახ. ქუქიები წარმოადგენენ პატარა ფაილებს, რომელთაც, საიტი ან სერვის-პროვაიდერი, ათავსებს თქვენი კომპიუტერის მყარ დისკზე, ვებ-ბრაუზერის (თუ ნებას რთავთ) მეშვეობით. ქუქიები საშუალებას აძლევს საიტს ამოიცნონ თქვენი ბრაუზზერი და თუ გაქვთ რეგისტრირებული ანგარიში მისი ასოციაცია მოახდინონ თქვენს ანგარიშთან.
+
+ ჩვენ ვიყენებთ ქუქის, ვიცოდეთ და შევინახოთ თქვენი პრეფერენსიები სამომავლო სტუმრობებისთვის.
+
+
+
+ ვამჟღავნებთ თუ არა ინფორმაციას გარე მხარეებისთვის?
+
+ ჩვენ არ ვყიდით, ვვაჭრობთ ან გადაქვაქ თქვენთვის პირადად იდენტიფიცირებადი ინფორმაცია სხვა მხარეებისთვის. ეს არ მოიცავს სანდო მხარეებს, რომლებიც გვეხმარება საიტის ოპერირებაში, ჩვენი საქმიანობის ჩატარებაში, ან თქვენთვის მომსახურების გაწევაში, წინაპირობით კონფიდენციალურად შეინახონ თქვენი ინფორმაცია. ჩვენ შესაძლოა გამოვაქვეყნოთ თქვენი ინფორმაცია, რომელიც შესაბამისად შეიძლება ჩავთვალოთ კანონმდებლობასთან შეთავსებისთვის, აღვასრულოთ პოლიტიკა ან დავიცვათ ჩვენი ან სხვისი უფლებები, კუთვნილება ან უსაფრთხოება.
+
+ თქვენი საჯარო ინფორმაცია შესაძლოა ჩამოტვირთულ იქნას სხვა სერვერების მიერ ქსელში. თქვენი ღია და მიმდევრებზე გათვლილი პოსტები მიეწოდება სერვერებს სადაც თქვენი მიმდევრები მოღვაწეობენ, იმ შემთხვევაში თუ მიმღებები მომდინარეობენ სხვა სერვერიდან, პირდაპირი წერილები მიეწოდებათ მიმღებების სერვერებს.
+
+ როდესაც უფლებას მისცემთ აპლიკაციას გამოიყენოს თქვენი ანგარიში, უფლებებისგან გამომდინარე, მან შესაძლოა მოიპოვოს თქვენი საჯარო ინფორმაცია, თქვენი დადევნების სიები, თქვენი მიმდევრები, თქვენი სიები, ყველა პოსტი და თქვენი ფავორიტები. აპლიკაციები ვერასდროს იქონიებენ წვდომას თქვენი ელ-ფოსტის მისამართზე ან პაროლზე.
+
+
+
+ საიტის მოხმარებს ბავშვების მიერ
+
+ თუ ეს სერვერი მდებარეობს ეუ-ში ან ეეა-ში: ჩვენი საიტი, პროდუქტები და სერვისები მიმართულია ადამიანებისთვის, რომელთაც შეუსრულდათ 16 წელი. თუ თქვენი ასაკი 16 წელიწადზე ნაკლებია, ჯიდიფიარის (ზოგადი მონაცემების დაცვის რეგულაცია/a>) მოთხოვნის მიხედვით არ გამოიყენოთ ეს საიტი.
+
+ თუ ეს სერვერი მდებარეობს ა.შ.შ.-ში: ჩვენი საიტი პროდუქტი და სერვისები მიმართულია ადამიანებისთვის, რომელთაც შეუსრულდათ 13 წელი. თუ თქვენი ასაკი 13 წელიწადზე ნაკლებია, კოპპას (ბავშვთა ონლაინ კონფიდენციალურობის დაცვის აქტი ) მოთხოვნების მიხედვით არ გამოიყენოთ ეს საიტი.
+
+ იურიდიული მოთხოვნილებები შეიძლება განსხვავდებოდეს, თუ ეს სერვერი იმყოფება სხვა იურისდიქციის ქვეშ.
+
+
+
+ ცვლილებები კონფიდენციალურობის პოლიტიკაში
+
+ თუ გადავწყვეტთ შევცვალოთ კონფიდენციალურობის პოლიტიკა, გამოვაქვეყნებთ ამ გვერდზე.
+
+ ეს დოკუმენტი არის ცც-ბაი-სა. ეს ბოლოს განახლდა 2018 წლის, 17 აგვისტოს.
+
+ საწყისად ადაპტირებულია გამჟღავნების კონფიდენციალური პოლიტიკისგან .
+ title: "%{instance} მომსახურების პირობები და კონფიდენციალურობის პოლიტიკა"
+ themes:
+ contrast: მაღალი კონტრასტი
+ default: მასტოდონი
+ mastodon-light: მასტოდონი (ღია)
+ time:
+ formats:
+ default: "%b %d, %Y, %H:%M"
+ month: "%b %Y"
+ two_factor_authentication:
+ code_hint: დასამოწმებლად შეიყვანეთ თქვენი აუტენტიფიკატორ აპლიკაციისგან გენერირებული კოდი
+ description_html: თუ ჩართავთ მეორე-ფაქტორის აუტენტიფიკაციას , შესვლისას აუცილებელი იქნება ფლობდეთ ტელეფონს, რომელიც დააგენერირებს შესვლის ტოკენებს.
+ disable: გათიშვა
+ enable: ჩართვა
+ enabled: მეორე-ფაქტორის აუტენტიფიკაცია ჩართულია
+ enabled_success: მეორე-ფაქტორის აუტენტიფიკაცია წარმატებით ჩაირთო
+ generate_recovery_codes: აღდგენის კოდების გენერაცია
+ instructions_html: "დაასკანირეთ ეს ქრ კოდი გუგლ აუტენტიფიკატორში ან მსგავს ტოტპ აპლიკაციაში თქვენს ტელეფონზე . ამიერიდან, ეს აპლიკაცია დააგენერირებს ტოკენებს მაშინ როდესაც დაგჭირდებათ ავტორიზაცია."
+ lost_recovery_codes: აღდგენის კოდები უფლებას გაძლევთ მიიღოთ ხელმეორე წვდომა თქვენი ანგარიშისადმი თუ დაკარგავთ ტელეფონს. თუ დაკარგეთ აღდგენის კოდები, მათ რეგენერაცია შეგიძლიათ აქ. ძველი აღდგენის კოდები აღარ იქნება ვალიდური.
+ manual_instructions: 'თუ ვერ ასკანირებთ ქრ კოდს და საჭიროებთ მის მექანიკურ რეჟიმში შეყვანას, აქ არის ჩვეულებრივი ტექსტური საიდუმლო:'
+ recovery_codes: გაუწიეთ აღდგენის კოდებს რეზერვაცია
+ recovery_codes_regenerated: აღგენის კოდების რეგენერაცია წარმატებით შესრულდა
+ recovery_instructions_html: თუ როდესმე დაკარგავთ წვდომას თქვენს ტელეფონთან, შეგიძლიათ ქვემოთ მოცემული აღდგენის კოდები გამოიყენოთ, რათა მოიპოვოთ ხელმეორე წვდომა თქვენი ანგარიშისადმი. იქონიეთ აღდგენის კოდები დაცულად . მაგალითისთვის, შეგიძლიათ ამობეჭდოთ და შეინახოთ სხვა საბუთებთან ერთად.
+ setup: დაყენება
+ wrong_code: შეყვანილი კოდი არ იყო სწორი! სწორია სერვერის და მოწყობილობის დრო?
+ user_mailer:
+ backup_ready:
+ explanation: თქვენ მოითხოვეთ თქვენი მასტოდონის ანგარიშის სრული რეზერვაცია. ის ახლა უკვე მზადაა გადმოსაწერად!
+ subject: თქვენი არქივი გადმოსაწერად მზადაა
+ title: არქივის მიღება
+ welcome:
+ edit_profile_action: პროფილის მოწყობა
+ edit_profile_step: შეგიძლიათ მოაწყოთ თქვენი პროფილი ავატარის ატვირთვით, დასათაურების სურათით, თქვენი დისპლეი სახელის შეცვლით და სხვა. თუ გსურთ გაუწიოთ ახალ მიმდევრებს რევიუ, სანამ რეალურად გამოგყვებიან, შეგიძლიათ ჩაკეტოთ თქვენი ანგარიში.
+ explanation: აქ რამდენიმე რჩევაა დასაწყისისთვის
+ final_action: დაიწყე პოსტვა
+ final_step: 'დაიწყე პოსტვა! თქვენი ღია წერილები შესაძლოა ნახონ სხვებმა მიმდევრების გარეშეც კი, მაგალითად თქვენს ლოკალურ თაიმლაინზე ან ჰეშტეგებში. შეგიძლიათ წარადგინოთ თქვენი თავი #introductions ჰეშტეგით.'
+ full_handle: თქვენი სრული სახელური
+ full_handle_hint: ეს არის ის რასაც ეტყვით თქვენს მეგობრებს, რათა მოგწერონ ან გამოგყვნენ სხვა ინსტანციიდან.
+ review_preferences_action: შეცვალეთ პრეფერენსიები
+ review_preferences_step: დარწმუნდით რომ აყენებთ თქვენს პრეფერენსიებს, მაგალითად რა ელ-ფოსტის წერილების მიღება გსურთ, ან კონფიდენციალურობის რა დონე გსურთ ჰქონდეთ თქვენს პოსტებს საწყისად. თუ არ გაღიზიანებთ მოძრაობა, შეგიძლიათ ჩართოთ გიფის ავტო-დაკვრა.
+ subject: კეთილი იყოს თქვენი მობრძანება მასტოდონში
+ tip_bridge_html: თუ მოდიხართ ტვიტერიდან, შეგიძლიათ იპოვოთ მეგობრები მასტოდონში ხიდის აპლიკაციით . თუმცა, ეს მუშაობს მხოლოდ მაშინ თუ მათაც მოიხმარეს ხიდის აპლიკაცია!
+ tip_federated_timeline: ფედერალური თაიმლაინი მასტოდონის ქსელის ცეცხლოვანი ხედია. ის მოიცავს მხოლოდ იმ ადამიანებს, რომელთაგანაც გამოიწერეს თქვენმა მეზობლებმა, ასე რომ ეს არაა სრული.
+ tip_following: თქვენ საწყისად მიჰყვებით თქვენი სერვერის ადმინისტრატორ(ებ)ს. უფრო საინტერესო ადამიანების მოსაძებნად იხილეთ ლოკალური და ფედერალური თაიმლაინები.
+ tip_local_timeline: ლოკალური თაიმლაინი ცეცხლოვანი ხედია ადამიანებისთვის %{instance}-ზე. ისინი არიან თქვენი უსიტყვო მეზობლები!
+ tip_mobile_webapp: თუ თქვენი მობილური ბრაუზერი გთავაზობთ მასტოდონის სახლის-ეკრანზე დამატებას, შეძლებთ ფუშ შეტყობინებების მიღებას. ეს მრავალმხრივ მოქმედებს როგორც მშობლიური აპლიკაცია!
+ tips: რჩევები
+ title: კეთილი იყოს თქვენი მობრძანება, %{name}!
+ users:
+ invalid_email: ელ-ფოსტის მისამართი არაა მართებული
+ invalid_otp_token: არასწორი მეორე ფაქტორის კოდი
+ otp_lost_help_html: თუ დაკარგეთ წვდომა ორივეზე, შესაძლოა დაუკავშირდეთ %{email}-ს
+ seamless_external_login: შესული ხართ გარე სერვისით, აქედან გამომდინარე პაროლი და ელ-ფოსტის მისამართი არაა ხელმისაწვდომი.
+ signed_in_as: 'შესული ხართ როგორც:'
diff --git a/config/locales/simple_form.ka.yml b/config/locales/simple_form.ka.yml
new file mode 100644
index 000000000..eb6d82bb2
--- /dev/null
+++ b/config/locales/simple_form.ka.yml
@@ -0,0 +1,99 @@
+---
+ka:
+ simple_form:
+ hints:
+ defaults:
+ autofollow: ადამიანები რომლებიც დარეგისტრირდებიან მოწვევით, ავტომატურად გამოგყვებიან
+ avatar: პნგ, გიფ ან ჯპგ. მაქს. %{size}. ზომა დაპატარავდება %{dimensions}პიქს.-ზე
+ bot: ეს ანგარიში უმთავრესად ასრულებს ავტომატურ მოქმედებებს და შესაძლოა არ იყოს მონიტორინგის ქვეშ
+ context: ერთ ან მრავალი კონტექსტი სადაც ფილტრი უნდა შესრულდეს
+ digest: იგზავნება მხოლოდ ხანგრძლივი უაქტივობის პერიოდის შემდეგ და არყოფნისას თუ მიიღეთ ერთი წერილი მაინც
+ display_name:
+ one: დარჩა ერთი ნიშანი
+ other: დარჩა %{count} ნიშანი
+ fields: პროფილზე ტაბულის სახით შესაძლოა საჩვენებლად გაგაჩნდეთ მაქს. 4 პუნქტი
+ header: პნგ, გიფ ან ჯპგ. მაქს. %{size}. ზომა დაპატარავდება %{dimensions}პიქს.-ზე
+ inbox_url: ურლ დააკოირეთ გამოყენებისთვის სასურველი რილეის წინა გვერდიდან
+ irreversible: გაფილტრული ტუტები გაუქმდება აღუდგენლად, იმ შემთხვევაშიც კი თუ ფილტრი სამომავლოდ გაუქმდება
+ locale: მომხმარებლის ინტერფეისის, ელ-ფოსტის წერილების და ფუშ შეტყობინებების ენა
+ locked: საჭიროებს თქვენ მიერ მიმდევრების ხელით დადასტურებას
+ note:
+ one: დარჩა ერთი ნიშანი
+ other: დარჩა %{count} ნიშანი
+ phrase: დამთხვევა მოხდება დიდი და პატარა ასოების ან კონტენტის გაფრთხილების გათვალისწინების გარეშე
+ scopes: რომელი აპიებისადმი ექნება აპლიკაციას ცვდომა. თუ არიჩევთ უმთავრეს ფარგლებს, არ დაგჭირდებათ ინდივიდუალურების ამორჩევა.
+ setting_default_language: თქვენი ტუტების ენა შეიძლება დადგინდეს ავტომატურად, მაგრამ ეს არაა ყოველთვის ზუსტი
+ setting_hide_network: ვის მიყვებით და ვინ მოგყვებათ არ გამოჩნდება აქ
+ setting_noindex: გავლენას ახდენს თქვენს ღია პროფილისა და სტატუსის გვერდებზე
+ setting_theme: გავლენას ახდენს თუ როგორ გამოიყურება მასტოდონი, როდესაც შესული ხართ რომელიმე მოწყობილობიდან.
+ whole_word: როდესაც სიტყვა ან ფრაზა მხოლოდ ალფა-ნუმერიკულია, ის დაფიქსირდება თუ ემთხვევა სრულ სიტყვას
+ imports:
+ data: ცსვ ფაილის ექსპორტი მოხდა მასტოდონის სხვა ინსტანციიდან
+ sessions:
+ otp: 'შეიყვანეთ მეორე ფაქტორის კოდი, რომელიც დააგერირა თქვენმა ტელეფონმა ან მოიხმარეთ შემდეგი აღდგენის კოდებიდან ერთ-ერთი:'
+ user:
+ chosen_languages: როდესაც მოინიშნება, ღია თაიმლაინზე გამოჩნდება ტუტები მხოლოდ არჩეულ ენებზე
+ labels:
+ account:
+ fields:
+ name: ლეიბლი
+ value: მოცულობა
+ defaults:
+ autofollow: მოიწვიეთ რომ გამოჰყვნენ თქვენს ანგარიშს
+ avatar: ავატარი
+ bot: ეს ბოტის ანგარიშია
+ chosen_languages: ენების ფილტრი
+ confirm_new_password: დაადასტურეთ ახალი პაროლი
+ confirm_password: დაადასტურეთ პაროლი
+ context: კონტექსტის ფილტრი
+ current_password: მიმდინარე პაროლი
+ data: მონაცემები
+ display_name: დისპლეის სახელი
+ email: ელ-ფოსტის მისამართი
+ expires_in: ვადის გასვლის დრო
+ fields: პროფილის მეტა-მონაცემი
+ header: დასათაურება
+ inbox_url: რილეი ინბოქსის ურლ
+ irreversible: გაუქმდეს დამალვის მაგივრად
+ locale: ინტერფეისის ენა
+ locked: ანგარიშის ჩაკეტვა
+ max_uses: მოხმარების მაქს. ოდენობა
+ new_password: ახალი პაროლი
+ note: ბიო.
+ otp_attempt: მეორე-ფაქტორის კოდი
+ password: პაროლი
+ phrase: სიტყვა ან ფრაზა
+ setting_auto_play_gif: ანიმაციური გიფების ავტო-დაკვრა
+ setting_boost_modal: ბუსტამე მოხდეს დამოწმება
+ setting_default_language: პოსტინგის ენა
+ setting_default_privacy: პოსტის კონფიდენციალურობა
+ setting_default_sensitive: ყოველთვის მოინიშნოს მედია მგრძნობიარედ
+ setting_delete_modal: ტუტის გაუქმებამდე გამოჩნდეს დადასტურების ფანჯარა
+ setting_display_sensitive_media: ყოველთვის გამოჩნდეს მგრძნობიარე მედია
+ setting_hide_network: თქვენი ქსელის დამალვა
+ setting_noindex: საძოები სისტემების ინდექსაციის შეჩერება
+ setting_reduce_motion: მოძრაობის შემცირება ანიმაციებში
+ setting_system_font_ui: მოხდეს სისტემის საწყისი ფონტის მოხმარება
+ setting_theme: საიტის თემა
+ setting_unfollow_modal: გამოჩნდეს დადასტურების ფანჯარა, სანამ შეყვეტთ ვინმეს დადევნებას
+ severity: სიმძიმე
+ type: იმპორტის სახეობა
+ username: მომხმარებლის სახელი
+ username_or_email: მომხმარებლის სახელი ან ელ-ფოსტა
+ whole_word: მთელი სიტყვა
+ interactions:
+ must_be_follower: დაიბლოკოს შეტყობინებები არა მიმდევრებისგან
+ must_be_following: დაიბლოკოს შეტყობინებები ადამიანებისგან ვისაც არ მიჰყვებით
+ must_be_following_dm: დაიბლოკოს პირადი წერილები ადამიანბისგან ვისაც არ მიჰყვებით
+ notification_emails:
+ digest: გამოიგზავნოს დაიჯესტ წერილები
+ favourite: გამოიგზავნოს წერილი როდესაც ვინმე ფავორიტად აქცევს თქვენს სტატუსს
+ follow: გამოიგზავნოს წერილი როდესაც ვინმე გამოგყვებათ
+ follow_request: გამოიგზავნოს წერილი როდესაც ვინმე მოგთხოვთ გაჰყვეთ
+ mention: გამოიგზავნოს წერილი როდესაც ვინმე გასახელებთ
+ reblog: გამოიგზავნოს წერილი როდესაც ვინმე გაზრდის თქვენს სტატუსს
+ 'no': არა
+ required:
+ mark: "*"
+ text: აუცილებელი
+ 'yes': კი
From 78fa926ed560e6a9738144bec7e152fa42104139 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Sat, 18 Aug 2018 03:03:12 +0200
Subject: [PATCH 104/196] Add remote interaction dialog for toots (#8202)
* Add remote interaction dialog for toots
* Change AuthorizeFollow into AuthorizeInteraction, support statuses
* Update brakeman.ignore
* Adjust how interaction buttons are display on public pages
* Fix tests
---
.../authorize_follows_controller.rb | 66 -------
.../authorize_interactions_controller.rb | 66 +++++++
app/controllers/intents_controller.rb | 2 +-
app/controllers/remote_follow_controller.rb | 1 +
.../remote_interaction_controller.rb | 48 +++++
app/helpers/home_helper.rb | 10 +
app/javascript/packs/public.js | 21 +-
.../styles/mastodon/components.scss | 1 +
.../styles/mastodon/stream_entries.scss | 5 +
app/models/remote_follow.rb | 4 +
app/serializers/webfinger_serializer.rb | 2 +-
app/views/authorize_follows/show.html.haml | 17 --
.../_post_follow_actions.html.haml | 4 +-
.../error.html.haml | 0
.../authorize_interactions/show.html.haml | 18 ++
.../success.html.haml | 6 +-
app/views/layouts/modal.html.haml | 2 +-
app/views/remote_interaction/new.html.haml | 17 ++
.../stream_entries/_detailed_status.html.haml | 15 +-
.../stream_entries/_simple_status.html.haml | 10 +-
app/views/stream_entries/show.html.haml | 2 +-
app/views/well_known/webfinger/show.xml.ruby | 2 +-
config/brakeman.ignore | 180 +++++++++++-------
config/locales/en.yml | 5 +-
config/routes.rb | 5 +-
...authorize_interactions_controller_spec.rb} | 31 +--
spec/controllers/intents_controller_spec.rb | 2 +-
27 files changed, 347 insertions(+), 195 deletions(-)
delete mode 100644 app/controllers/authorize_follows_controller.rb
create mode 100644 app/controllers/authorize_interactions_controller.rb
create mode 100644 app/controllers/remote_interaction_controller.rb
delete mode 100644 app/views/authorize_follows/show.html.haml
rename app/views/{authorize_follows => authorize_interactions}/_post_follow_actions.html.haml (61%)
rename app/views/{authorize_follows => authorize_interactions}/error.html.haml (100%)
create mode 100644 app/views/authorize_interactions/show.html.haml
rename app/views/{authorize_follows => authorize_interactions}/success.html.haml (60%)
create mode 100644 app/views/remote_interaction/new.html.haml
rename spec/controllers/{authorize_follows_controller_spec.rb => authorize_interactions_controller_spec.rb} (71%)
diff --git a/app/controllers/authorize_follows_controller.rb b/app/controllers/authorize_follows_controller.rb
deleted file mode 100644
index 775d5f23f..000000000
--- a/app/controllers/authorize_follows_controller.rb
+++ /dev/null
@@ -1,66 +0,0 @@
-# frozen_string_literal: true
-
-class AuthorizeFollowsController < ApplicationController
- layout 'modal'
-
- before_action :authenticate_user!
- before_action :set_body_classes
-
- def show
- @account = located_account || render(:error)
- end
-
- def create
- @account = follow_attempt.try(:target_account)
-
- if @account.nil?
- render :error
- else
- render :success
- end
- rescue ActiveRecord::RecordNotFound, Mastodon::NotPermittedError
- render :error
- end
-
- private
-
- def follow_attempt
- FollowService.new.call(current_account, acct_without_prefix)
- end
-
- def located_account
- if acct_param_is_url?
- account_from_remote_fetch
- else
- account_from_remote_follow
- end
- end
-
- def account_from_remote_fetch
- FetchRemoteAccountService.new.call(acct_without_prefix)
- end
-
- def account_from_remote_follow
- ResolveAccountService.new.call(acct_without_prefix)
- end
-
- def acct_param_is_url?
- parsed_uri.path && %w(http https).include?(parsed_uri.scheme)
- end
-
- def parsed_uri
- Addressable::URI.parse(acct_without_prefix).normalize
- end
-
- def acct_without_prefix
- acct_params.gsub(/\Aacct:/, '')
- end
-
- def acct_params
- params.fetch(:acct, '')
- end
-
- def set_body_classes
- @body_classes = 'modal-layout'
- end
-end
diff --git a/app/controllers/authorize_interactions_controller.rb b/app/controllers/authorize_interactions_controller.rb
new file mode 100644
index 000000000..e27366ea3
--- /dev/null
+++ b/app/controllers/authorize_interactions_controller.rb
@@ -0,0 +1,66 @@
+# frozen_string_literal: true
+
+class AuthorizeInteractionsController < ApplicationController
+ include Authorization
+
+ layout 'modal'
+
+ before_action :authenticate_user!
+ before_action :set_body_classes
+ before_action :set_resource
+
+ def show
+ if @resource.is_a?(Account)
+ render :show
+ elsif @resource.is_a?(Status)
+ redirect_to web_url("statuses/#{@resource.id}")
+ else
+ render :error
+ end
+ end
+
+ def create
+ if @resource.is_a?(Account) && FollowService.new.call(current_account, @resource)
+ render :success
+ else
+ render :error
+ end
+ rescue ActiveRecord::RecordNotFound, Mastodon::NotPermittedError
+ render :error
+ end
+
+ private
+
+ def set_resource
+ @resource = located_resource || render(:error)
+ authorize(@resource, :show?) if @resource.is_a?(Status)
+ end
+
+ def located_resource
+ if uri_param_is_url?
+ ResolveURLService.new.call(uri_param)
+ else
+ account_from_remote_follow
+ end
+ end
+
+ def account_from_remote_follow
+ ResolveAccountService.new.call(uri_param)
+ end
+
+ def uri_param_is_url?
+ parsed_uri.path && %w(http https).include?(parsed_uri.scheme)
+ end
+
+ def parsed_uri
+ Addressable::URI.parse(uri_param).normalize
+ end
+
+ def uri_param
+ params[:uri] || params.fetch(:acct, '').gsub(/\Aacct:/, '')
+ end
+
+ def set_body_classes
+ @body_classes = 'modal-layout'
+ end
+end
diff --git a/app/controllers/intents_controller.rb b/app/controllers/intents_controller.rb
index 56129d69a..9f41cf48a 100644
--- a/app/controllers/intents_controller.rb
+++ b/app/controllers/intents_controller.rb
@@ -8,7 +8,7 @@ class IntentsController < ApplicationController
if uri.scheme == 'web+mastodon'
case uri.host
when 'follow'
- return redirect_to authorize_follow_path(acct: uri.query_values['uri'].gsub(/\Aacct:/, ''))
+ return redirect_to authorize_interaction_path(uri: uri.query_values['uri'].gsub(/\Aacct:/, ''))
when 'share'
return redirect_to share_path(text: uri.query_values['text'])
end
diff --git a/app/controllers/remote_follow_controller.rb b/app/controllers/remote_follow_controller.rb
index cd61fd763..8ba331cd1 100644
--- a/app/controllers/remote_follow_controller.rb
+++ b/app/controllers/remote_follow_controller.rb
@@ -42,5 +42,6 @@ class RemoteFollowController < ApplicationController
def set_body_classes
@body_classes = 'modal-layout'
+ @hide_header = true
end
end
diff --git a/app/controllers/remote_interaction_controller.rb b/app/controllers/remote_interaction_controller.rb
new file mode 100644
index 000000000..6299a1e13
--- /dev/null
+++ b/app/controllers/remote_interaction_controller.rb
@@ -0,0 +1,48 @@
+# frozen_string_literal: true
+
+class RemoteInteractionController < ApplicationController
+ include Authorization
+
+ layout 'modal'
+
+ before_action :set_status
+ before_action :set_body_classes
+
+ def new
+ @remote_follow = RemoteFollow.new(session_params)
+ end
+
+ def create
+ @remote_follow = RemoteFollow.new(resource_params)
+
+ if @remote_follow.valid?
+ session[:remote_follow] = @remote_follow.acct
+ redirect_to @remote_follow.interact_address_for(@status)
+ else
+ render :new
+ end
+ end
+
+ private
+
+ def resource_params
+ params.require(:remote_follow).permit(:acct)
+ end
+
+ def session_params
+ { acct: session[:remote_follow] }
+ end
+
+ def set_status
+ @status = Status.find(params[:id])
+ authorize @status, :show?
+ rescue Mastodon::NotPermittedError
+ # Reraise in order to get a 404
+ raise ActiveRecord::RecordNotFound
+ end
+
+ def set_body_classes
+ @body_classes = 'modal-layout'
+ @hide_header = true
+ end
+end
diff --git a/app/helpers/home_helper.rb b/app/helpers/home_helper.rb
index 8449f6c8a..f5b501235 100644
--- a/app/helpers/home_helper.rb
+++ b/app/helpers/home_helper.rb
@@ -38,4 +38,14 @@ module HomeHelper
end
end
end
+
+ def obscured_counter(count)
+ if count <= 0
+ 0
+ elsif count == 1
+ 1
+ else
+ '1+'
+ end
+ end
end
diff --git a/app/javascript/packs/public.js b/app/javascript/packs/public.js
index 6b47eecf9..dc18da853 100644
--- a/app/javascript/packs/public.js
+++ b/app/javascript/packs/public.js
@@ -67,13 +67,6 @@ function main() {
}, datetime, now, datetime.getFullYear());
});
- [].forEach.call(document.querySelectorAll('.modal-button'), (content) => {
- content.addEventListener('click', (e) => {
- e.preventDefault();
- window.open(e.target.href, 'mastodon-intent', 'width=445,height=600,resizable=no,menubar=no,status=no,scrollbars=yes');
- });
- });
-
const reactComponents = document.querySelectorAll('[data-component]');
if (reactComponents.length > 0) {
import(/* webpackChunkName: "containers/media_container" */ '../mastodon/containers/media_container')
@@ -119,6 +112,20 @@ function main() {
return false;
});
+ delegate(document, '.modal-button', 'click', e => {
+ e.preventDefault();
+
+ let href;
+
+ if (e.target.nodeName !== 'A') {
+ href = e.target.parentNode.href;
+ } else {
+ href = e.target.href;
+ }
+
+ window.open(href, 'mastodon-intent', 'width=445,height=600,resizable=no,menubar=no,status=no,scrollbars=yes');
+ });
+
delegate(document, '#account_display_name', 'input', ({ target }) => {
const nameCounter = document.querySelector('.name-counter');
const name = document.querySelector('.card .display-name strong');
diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss
index 931f1aa0d..cfd8e5ad4 100644
--- a/app/javascript/styles/mastodon/components.scss
+++ b/app/javascript/styles/mastodon/components.scss
@@ -628,6 +628,7 @@
overflow: hidden;
white-space: pre-wrap;
padding-top: 2px;
+ color: $primary-text-color;
&:focus {
outline: 0;
diff --git a/app/javascript/styles/mastodon/stream_entries.scss b/app/javascript/styles/mastodon/stream_entries.scss
index 9e2aa720c..03bbd84db 100644
--- a/app/javascript/styles/mastodon/stream_entries.scss
+++ b/app/javascript/styles/mastodon/stream_entries.scss
@@ -3,6 +3,7 @@
border-radius: 4px;
overflow: hidden;
margin-bottom: 10px;
+ text-align: left;
@media screen and (max-width: $no-gap-breakpoint) {
margin-bottom: 0;
@@ -63,6 +64,10 @@
}
}
}
+
+ &--highlighted .entry {
+ background: lighten($ui-base-color, 8%);
+ }
}
.button.logo-button {
diff --git a/app/models/remote_follow.rb b/app/models/remote_follow.rb
index 070144e2d..2537de36c 100644
--- a/app/models/remote_follow.rb
+++ b/app/models/remote_follow.rb
@@ -22,6 +22,10 @@ class RemoteFollow
addressable_template.expand(uri: account.local_username_and_domain).to_s
end
+ def interact_address_for(status)
+ addressable_template.expand(uri: ActivityPub::TagManager.instance.uri_for(status)).to_s
+ end
+
private
def populate_template
diff --git a/app/serializers/webfinger_serializer.rb b/app/serializers/webfinger_serializer.rb
index f80d12c02..8c0b07702 100644
--- a/app/serializers/webfinger_serializer.rb
+++ b/app/serializers/webfinger_serializer.rb
@@ -20,7 +20,7 @@ class WebfingerSerializer < ActiveModel::Serializer
{ rel: 'self', type: 'application/activity+json', href: account_url(object) },
{ rel: 'salmon', href: api_salmon_url(object.id) },
{ rel: 'magic-public-key', href: "data:application/magic-public-key,#{object.magic_key}" },
- { rel: 'http://ostatus.org/schema/1.0/subscribe', template: "#{authorize_follow_url}?acct={uri}" },
+ { rel: 'http://ostatus.org/schema/1.0/subscribe', template: "#{authorize_interaction_url}?uri={uri}" },
]
end
end
diff --git a/app/views/authorize_follows/show.html.haml b/app/views/authorize_follows/show.html.haml
deleted file mode 100644
index 90e65b34f..000000000
--- a/app/views/authorize_follows/show.html.haml
+++ /dev/null
@@ -1,17 +0,0 @@
-- content_for :page_title do
- = t('authorize_follow.title', acct: @account.acct)
-
-.form-container
- .follow-prompt
- = render 'application/card', account: @account
-
- - if current_account.following?(@account)
- .flash-message
- %strong
- = t('authorize_follow.already_following')
- = render 'post_follow_actions'
-
- - else
- = form_tag authorize_follow_path, method: :post, class: 'simple_form' do
- = hidden_field_tag :acct, @account.acct
- = button_tag t('authorize_follow.follow'), type: :submit
diff --git a/app/views/authorize_follows/_post_follow_actions.html.haml b/app/views/authorize_interactions/_post_follow_actions.html.haml
similarity index 61%
rename from app/views/authorize_follows/_post_follow_actions.html.haml
rename to app/views/authorize_interactions/_post_follow_actions.html.haml
index 2a9c062e9..561c60137 100644
--- a/app/views/authorize_follows/_post_follow_actions.html.haml
+++ b/app/views/authorize_interactions/_post_follow_actions.html.haml
@@ -1,4 +1,4 @@
.post-follow-actions
- %div= link_to t('authorize_follow.post_follow.web'), web_url("accounts/#{@account.id}"), class: 'button button--block'
- %div= link_to t('authorize_follow.post_follow.return'), TagManager.instance.url_for(@account), class: 'button button--block'
+ %div= link_to t('authorize_follow.post_follow.web'), web_url("accounts/#{@resource.id}"), class: 'button button--block'
+ %div= link_to t('authorize_follow.post_follow.return'), TagManager.instance.url_for(@resource), class: 'button button--block'
%div= t('authorize_follow.post_follow.close')
diff --git a/app/views/authorize_follows/error.html.haml b/app/views/authorize_interactions/error.html.haml
similarity index 100%
rename from app/views/authorize_follows/error.html.haml
rename to app/views/authorize_interactions/error.html.haml
diff --git a/app/views/authorize_interactions/show.html.haml b/app/views/authorize_interactions/show.html.haml
new file mode 100644
index 000000000..7ca9b98c1
--- /dev/null
+++ b/app/views/authorize_interactions/show.html.haml
@@ -0,0 +1,18 @@
+- content_for :page_title do
+ = t('authorize_follow.title', acct: @resource.acct)
+
+.form-container
+ .follow-prompt
+ = render 'application/card', account: @resource
+
+ - if current_account.following?(@resource)
+ .flash-message
+ %strong
+ = t('authorize_follow.already_following')
+
+ = render 'post_follow_actions'
+ - else
+ = form_tag authorize_interaction_path, method: :post, class: 'simple_form' do
+ = hidden_field_tag :action, :follow
+ = hidden_field_tag :acct, @resource.acct
+ = button_tag t('authorize_follow.follow'), type: :submit
diff --git a/app/views/authorize_follows/success.html.haml b/app/views/authorize_interactions/success.html.haml
similarity index 60%
rename from app/views/authorize_follows/success.html.haml
rename to app/views/authorize_interactions/success.html.haml
index cf9cb50ea..47fd09767 100644
--- a/app/views/authorize_follows/success.html.haml
+++ b/app/views/authorize_interactions/success.html.haml
@@ -1,13 +1,13 @@
- content_for :page_title do
- = t('authorize_follow.title', acct: @account.acct)
+ = t('authorize_follow.title', acct: @resource.acct)
.form-container
.follow-prompt
- - if @account.locked?
+ - if @resource.locked?
%h2= t('authorize_follow.follow_request')
- else
%h2= t('authorize_follow.following')
- = render 'application/card', account: @account
+ = render 'application/card', account: @resource
= render 'post_follow_actions'
diff --git a/app/views/layouts/modal.html.haml b/app/views/layouts/modal.html.haml
index 325b4ec72..b73068459 100644
--- a/app/views/layouts/modal.html.haml
+++ b/app/views/layouts/modal.html.haml
@@ -2,7 +2,7 @@
= javascript_pack_tag 'public', integrity: true, crossorigin: 'anonymous'
- content_for :content do
- - if user_signed_in?
+ - if user_signed_in? && !@hide_header
.account-header
.avatar= image_tag current_account.avatar.url(:original)
.name
diff --git a/app/views/remote_interaction/new.html.haml b/app/views/remote_interaction/new.html.haml
new file mode 100644
index 000000000..7357546b6
--- /dev/null
+++ b/app/views/remote_interaction/new.html.haml
@@ -0,0 +1,17 @@
+.form-container
+ .follow-prompt
+ %h2= t('remote_interaction.prompt')
+
+ .public-layout
+ .activity-stream.activity-stream--highlighted
+ = render 'stream_entries/status', status: @status
+
+ = simple_form_for @remote_follow, as: :remote_follow, url: remote_interaction_path(@status) do |f|
+ = render 'shared/error_messages', object: @remote_follow
+
+ = f.input :acct, placeholder: t('remote_follow.acct'), input_html: { autocapitalize: 'none', autocorrect: 'off' }
+
+ .actions
+ = f.button :button, t('remote_interaction.proceed'), type: :submit
+
+ %p.hint.subtle-hint= t('remote_follow.no_account_html', sign_up_path: open_registrations? ? new_user_registration_path : 'https://joinmastodon.org/#getting-started')
diff --git a/app/views/stream_entries/_detailed_status.html.haml b/app/views/stream_entries/_detailed_status.html.haml
index aa160b979..a7c767816 100644
--- a/app/views/stream_entries/_detailed_status.html.haml
+++ b/app/views/stream_entries/_detailed_status.html.haml
@@ -39,6 +39,11 @@
- else
= link_to status.application.name, status.application.website, class: 'detailed-status__application', target: '_blank', rel: 'noopener'
·
+ = link_to remote_interaction_path(status), class: 'modal-button detailed-status__link' do
+ = fa_icon('reply')
+ %span.detailed-status__reblogs>= number_to_human status.replies_count, strip_insignificant_zeros: true
+ = " "
+ ·
- if status.direct_visibility?
%span.detailed-status__link<
= fa_icon('envelope')
@@ -46,13 +51,15 @@
%span.detailed-status__link<
= fa_icon('lock')
- else
- %span.detailed-status__link<
+ = link_to remote_interaction_path(status), class: 'modal-button detailed-status__link' do
= fa_icon('retweet')
- %span.detailed-status__reblogs= number_to_human status.reblogs_count, strip_insignificant_zeros: true
+ %span.detailed-status__reblogs>= number_to_human status.reblogs_count, strip_insignificant_zeros: true
+ = " "
·
- %span.detailed-status__link<
+ = link_to remote_interaction_path(status), class: 'modal-button detailed-status__link' do
= fa_icon('star')
- %span.detailed-status__favorites= number_to_human status.favourites_count, strip_insignificant_zeros: true
+ %span.detailed-status__favorites>= number_to_human status.favourites_count, strip_insignificant_zeros: true
+ = " "
- if user_signed_in?
·
diff --git a/app/views/stream_entries/_simple_status.html.haml b/app/views/stream_entries/_simple_status.html.haml
index 676d367ca..ec8b69bb6 100644
--- a/app/views/stream_entries/_simple_status.html.haml
+++ b/app/views/stream_entries/_simple_status.html.haml
@@ -29,14 +29,16 @@
= react_component :media_gallery, height: 343, sensitive: status.sensitive? && !current_account&.user&.setting_display_sensitive_media, 'autoPlayGif': current_account&.user&.setting_auto_play_gif, media: status.media_attachments.map { |a| ActiveModelSerializers::SerializableResource.new(a, serializer: REST::MediaAttachmentSerializer).as_json }
.status__action-bar
- .status__action-bar-button.static-icon-button<
+ .status__action-bar__counter
+ = link_to remote_interaction_path(status), class: 'status__action-bar-button icon-button modal-button', style: 'font-size: 18px; width: 23.1429px; height: 23.1429px; line-height: 23.15px;' do
+ = fa_icon 'reply fw'
+ .status__action-bar__counter__label= obscured_counter status.replies_count
+ = link_to remote_interaction_path(status), class: 'status__action-bar-button icon-button modal-button', style: 'font-size: 18px; width: 23.1429px; height: 23.1429px; line-height: 23.15px;' do
- if status.public_visibility? || status.unlisted_visibility?
= fa_icon 'retweet fw'
- %span.detailed-status__reblogs= number_to_human status.reblogs_count, strip_insignificant_zeros: true
- elsif status.private_visibility?
= fa_icon 'lock fw'
- else
= fa_icon 'envelope fw'
- .status__action-bar-button.static-icon-button<
+ = link_to remote_interaction_path(status), class: 'status__action-bar-button icon-button modal-button', style: 'font-size: 18px; width: 23.1429px; height: 23.1429px; line-height: 23.15px;' do
= fa_icon 'star fw'
- %span.detailed-status__favorites= number_to_human status.favourites_count, strip_insignificant_zeros: true
diff --git a/app/views/stream_entries/show.html.haml b/app/views/stream_entries/show.html.haml
index 9da6245dc..2edc155bf 100644
--- a/app/views/stream_entries/show.html.haml
+++ b/app/views/stream_entries/show.html.haml
@@ -19,7 +19,7 @@
.grid
.column-0
- .activity-stream.activity-stream-headless.h-entry
+ .activity-stream.h-entry
= render partial: "stream_entries/#{@type}", locals: { @type.to_sym => @stream_entry.activity, include_threads: true }
.column-1
= render 'application/sidebar'
diff --git a/app/views/well_known/webfinger/show.xml.ruby b/app/views/well_known/webfinger/show.xml.ruby
index 4352a24e9..968c8c138 100644
--- a/app/views/well_known/webfinger/show.xml.ruby
+++ b/app/views/well_known/webfinger/show.xml.ruby
@@ -37,7 +37,7 @@ doc << Ox::Element.new('XRD').tap do |xrd|
xrd << Ox::Element.new('Link').tap do |link|
link['rel'] = 'http://ostatus.org/schema/1.0/subscribe'
- link['template'] = "#{authorize_follow_url}?acct={uri}"
+ link['template'] = "#{authorize_interaction_url}?acct={uri}"
end
end
diff --git a/config/brakeman.ignore b/config/brakeman.ignore
index e8956639c..40fef7283 100644
--- a/config/brakeman.ignore
+++ b/config/brakeman.ignore
@@ -1,5 +1,25 @@
{
"ignored_warnings": [
+ {
+ "warning_type": "SQL Injection",
+ "warning_code": 0,
+ "fingerprint": "04dbbc249b989db2e0119bbb0f59c9818e12889d2b97c529cdc0b1526002ba4b",
+ "check_name": "SQL",
+ "message": "Possible SQL injection",
+ "file": "app/models/report.rb",
+ "line": 86,
+ "link": "https://brakemanscanner.org/docs/warning_types/sql_injection/",
+ "code": "Admin::ActionLog.from(\"(#{[Admin::ActionLog.where(:target_type => \"Report\", :target_id => id, :created_at => ((created_at..updated_at))).unscope(:order), Admin::ActionLog.where(:target_type => \"Account\", :target_id => target_account_id, :created_at => ((created_at..updated_at))).unscope(:order), Admin::ActionLog.where(:target_type => \"Status\", :target_id => status_ids, :created_at => ((created_at..updated_at))).unscope(:order)].map do\n \"(#{query.to_sql})\"\n end.join(\" UNION ALL \")}) AS admin_action_logs\")",
+ "render_path": null,
+ "location": {
+ "type": "method",
+ "class": "Report",
+ "method": "history"
+ },
+ "user_input": "Admin::ActionLog.where(:target_type => \"Status\", :target_id => status_ids, :created_at => ((created_at..updated_at))).unscope(:order)",
+ "confidence": "High",
+ "note": ""
+ },
{
"warning_type": "Cross-Site Scripting",
"warning_code": 4,
@@ -7,8 +27,8 @@
"check_name": "LinkToHref",
"message": "Potentially unsafe model attribute in link_to href",
"file": "app/views/admin/accounts/show.html.haml",
- "line": 147,
- "link": "http://brakemanscanner.org/docs/warning_types/link_to_href",
+ "line": 167,
+ "link": "https://brakemanscanner.org/docs/warning_types/link_to_href",
"code": "link_to(Account.find(params[:id]).inbox_url, Account.find(params[:id]).inbox_url)",
"render_path": [{"type":"controller","class":"Admin::AccountsController","method":"show","line":18,"file":"app/controllers/admin/accounts_controller.rb"}],
"location": {
@@ -26,8 +46,8 @@
"check_name": "LinkToHref",
"message": "Potentially unsafe model attribute in link_to href",
"file": "app/views/admin/accounts/show.html.haml",
- "line": 153,
- "link": "http://brakemanscanner.org/docs/warning_types/link_to_href",
+ "line": 173,
+ "link": "https://brakemanscanner.org/docs/warning_types/link_to_href",
"code": "link_to(Account.find(params[:id]).shared_inbox_url, Account.find(params[:id]).shared_inbox_url)",
"render_path": [{"type":"controller","class":"Admin::AccountsController","method":"show","line":18,"file":"app/controllers/admin/accounts_controller.rb"}],
"location": {
@@ -45,8 +65,8 @@
"check_name": "LinkToHref",
"message": "Potentially unsafe model attribute in link_to href",
"file": "app/views/admin/accounts/show.html.haml",
- "line": 57,
- "link": "http://brakemanscanner.org/docs/warning_types/link_to_href",
+ "line": 75,
+ "link": "https://brakemanscanner.org/docs/warning_types/link_to_href",
"code": "link_to(Account.find(params[:id]).url, Account.find(params[:id]).url)",
"render_path": [{"type":"controller","class":"Admin::AccountsController","method":"show","line":18,"file":"app/controllers/admin/accounts_controller.rb"}],
"location": {
@@ -57,6 +77,26 @@
"confidence": "Weak",
"note": ""
},
+ {
+ "warning_type": "Mass Assignment",
+ "warning_code": 105,
+ "fingerprint": "28d81cc22580ef76e912b077b245f353499aa27b3826476667224c00227af2a9",
+ "check_name": "PermitAttributes",
+ "message": "Potentially dangerous key allowed for mass assignment",
+ "file": "app/controllers/admin/reports_controller.rb",
+ "line": 86,
+ "link": "https://brakemanscanner.org/docs/warning_types/mass_assignment/",
+ "code": "params.permit(:account_id, :resolved, :target_account_id)",
+ "render_path": null,
+ "location": {
+ "type": "method",
+ "class": "Admin::ReportsController",
+ "method": "filter_params"
+ },
+ "user_input": ":account_id",
+ "confidence": "High",
+ "note": ""
+ },
{
"warning_type": "Dynamic Render Path",
"warning_code": 15,
@@ -65,9 +105,9 @@
"message": "Render path contains parameter value",
"file": "app/views/stream_entries/embed.html.haml",
"line": 3,
- "link": "http://brakemanscanner.org/docs/warning_types/dynamic_render_path/",
+ "link": "https://brakemanscanner.org/docs/warning_types/dynamic_render_path/",
"code": "render(action => \"stream_entries/#{Account.find_local!(params[:account_username]).statuses.find(params[:id]).stream_entry.activity_type.downcase}\", { Account.find_local!(params[:account_username]).statuses.find(params[:id]).stream_entry.activity_type.downcase.to_sym => Account.find_local!(params[:account_username]).statuses.find(params[:id]).stream_entry.activity, :centered => true })",
- "render_path": [{"type":"controller","class":"StatusesController","method":"embed","line":45,"file":"app/controllers/statuses_controller.rb"}],
+ "render_path": [{"type":"controller","class":"StatusesController","method":"embed","line":58,"file":"app/controllers/statuses_controller.rb"}],
"location": {
"type": "template",
"template": "stream_entries/embed"
@@ -83,8 +123,8 @@
"check_name": "Render",
"message": "Render path contains parameter value",
"file": "app/views/admin/action_logs/index.html.haml",
- "line": 5,
- "link": "http://brakemanscanner.org/docs/warning_types/dynamic_render_path/",
+ "line": 4,
+ "link": "https://brakemanscanner.org/docs/warning_types/dynamic_render_path/",
"code": "render(action => Admin::ActionLog.page(params[:page]), {})",
"render_path": [{"type":"controller","class":"Admin::ActionLogsController","method":"index","line":7,"file":"app/controllers/admin/action_logs_controller.rb"}],
"location": {
@@ -95,6 +135,26 @@
"confidence": "Weak",
"note": ""
},
+ {
+ "warning_type": "Redirect",
+ "warning_code": 18,
+ "fingerprint": "5fad11cd67f905fab9b1d5739d01384a1748ebe78c5af5ac31518201925265a7",
+ "check_name": "Redirect",
+ "message": "Possible unprotected redirect",
+ "file": "app/controllers/remote_interaction_controller.rb",
+ "line": 20,
+ "link": "https://brakemanscanner.org/docs/warning_types/redirect/",
+ "code": "redirect_to(RemoteFollow.new(resource_params).interact_address_for(Status.find(params[:id])))",
+ "render_path": null,
+ "location": {
+ "type": "method",
+ "class": "RemoteInteractionController",
+ "method": "create"
+ },
+ "user_input": "RemoteFollow.new(resource_params).interact_address_for(Status.find(params[:id]))",
+ "confidence": "High",
+ "note": ""
+ },
{
"warning_type": "Cross-Site Scripting",
"warning_code": 4,
@@ -102,8 +162,8 @@
"check_name": "LinkToHref",
"message": "Potentially unsafe model attribute in link_to href",
"file": "app/views/admin/accounts/show.html.haml",
- "line": 156,
- "link": "http://brakemanscanner.org/docs/warning_types/link_to_href",
+ "line": 176,
+ "link": "https://brakemanscanner.org/docs/warning_types/link_to_href",
"code": "link_to(Account.find(params[:id]).followers_url, Account.find(params[:id]).followers_url)",
"render_path": [{"type":"controller","class":"Admin::AccountsController","method":"show","line":18,"file":"app/controllers/admin/accounts_controller.rb"}],
"location": {
@@ -121,8 +181,8 @@
"check_name": "LinkToHref",
"message": "Potentially unsafe model attribute in link_to href",
"file": "app/views/admin/accounts/show.html.haml",
- "line": 130,
- "link": "http://brakemanscanner.org/docs/warning_types/link_to_href",
+ "line": 149,
+ "link": "https://brakemanscanner.org/docs/warning_types/link_to_href",
"code": "link_to(Account.find(params[:id]).salmon_url, Account.find(params[:id]).salmon_url)",
"render_path": [{"type":"controller","class":"Admin::AccountsController","method":"show","line":18,"file":"app/controllers/admin/accounts_controller.rb"}],
"location": {
@@ -141,7 +201,7 @@
"message": "Render path contains parameter value",
"file": "app/views/admin/custom_emojis/index.html.haml",
"line": 45,
- "link": "http://brakemanscanner.org/docs/warning_types/dynamic_render_path/",
+ "link": "https://brakemanscanner.org/docs/warning_types/dynamic_render_path/",
"code": "render(action => filtered_custom_emojis.eager_load(:local_counterpart).page(params[:page]), {})",
"render_path": [{"type":"controller","class":"Admin::CustomEmojisController","method":"index","line":11,"file":"app/controllers/admin/custom_emojis_controller.rb"}],
"location": {
@@ -160,7 +220,7 @@
"message": "Possible SQL injection",
"file": "lib/mastodon/snowflake.rb",
"line": 87,
- "link": "http://brakemanscanner.org/docs/warning_types/sql_injection/",
+ "link": "https://brakemanscanner.org/docs/warning_types/sql_injection/",
"code": "connection.execute(\" CREATE OR REPLACE FUNCTION timestamp_id(table_name text)\\n RETURNS bigint AS\\n $$\\n DECLARE\\n time_part bigint;\\n sequence_base bigint;\\n tail bigint;\\n BEGIN\\n time_part := (\\n -- Get the time in milliseconds\\n ((date_part('epoch', now()) * 1000))::bigint\\n -- And shift it over two bytes\\n << 16);\\n\\n sequence_base := (\\n 'x' ||\\n -- Take the first two bytes (four hex characters)\\n substr(\\n -- Of the MD5 hash of the data we documented\\n md5(table_name ||\\n '#{SecureRandom.hex(16)}' ||\\n time_part::text\\n ),\\n 1, 4\\n )\\n -- And turn it into a bigint\\n )::bit(16)::bigint;\\n\\n -- Finally, add our sequence number to our base, and chop\\n -- it to the last two bytes\\n tail := (\\n (sequence_base + nextval(table_name || '_id_seq'))\\n & 65535);\\n\\n -- Return the time part and the sequence part. OR appears\\n -- faster here than addition, but they're equivalent:\\n -- time_part has no trailing two bytes, and tail is only\\n -- the last two bytes.\\n RETURN time_part | tail;\\n END\\n $$ LANGUAGE plpgsql VOLATILE;\\n\")",
"render_path": null,
"location": {
@@ -180,7 +240,7 @@
"message": "Render path contains parameter value",
"file": "app/views/admin/accounts/index.html.haml",
"line": 67,
- "link": "http://brakemanscanner.org/docs/warning_types/dynamic_render_path/",
+ "link": "https://brakemanscanner.org/docs/warning_types/dynamic_render_path/",
"code": "render(action => filtered_accounts.page(params[:page]), {})",
"render_path": [{"type":"controller","class":"Admin::AccountsController","method":"index","line":12,"file":"app/controllers/admin/accounts_controller.rb"}],
"location": {
@@ -191,25 +251,6 @@
"confidence": "Weak",
"note": ""
},
- {
- "warning_type": "Cross-Site Request Forgery",
- "warning_code": 7,
- "fingerprint": "ab491f72606337a348482d006eb67a3b1616685fd48644d5ac909bbcd62a5000",
- "check_name": "ForgerySetting",
- "message": "'protect_from_forgery' should be called in WellKnown::HostMetaController",
- "file": "app/controllers/well_known/host_meta_controller.rb",
- "line": 4,
- "link": "http://brakemanscanner.org/docs/warning_types/cross-site_request_forgery/",
- "code": null,
- "render_path": null,
- "location": {
- "type": "controller",
- "controller": "WellKnown::HostMetaController"
- },
- "user_input": null,
- "confidence": "High",
- "note": ""
- },
{
"warning_type": "Redirect",
"warning_code": 18,
@@ -218,7 +259,7 @@
"message": "Possible unprotected redirect",
"file": "app/controllers/media_controller.rb",
"line": 10,
- "link": "http://brakemanscanner.org/docs/warning_types/redirect/",
+ "link": "https://brakemanscanner.org/docs/warning_types/redirect/",
"code": "redirect_to(MediaAttachment.attached.find_by!(:shortcode => ((params[:id] or params[:medium_id]))).file.url(:original))",
"render_path": null,
"location": {
@@ -237,8 +278,8 @@
"check_name": "LinkToHref",
"message": "Potentially unsafe model attribute in link_to href",
"file": "app/views/admin/accounts/show.html.haml",
- "line": 119,
- "link": "http://brakemanscanner.org/docs/warning_types/link_to_href",
+ "line": 138,
+ "link": "https://brakemanscanner.org/docs/warning_types/link_to_href",
"code": "link_to(Account.find(params[:id]).remote_url, Account.find(params[:id]).remote_url)",
"render_path": [{"type":"controller","class":"Admin::AccountsController","method":"show","line":18,"file":"app/controllers/admin/accounts_controller.rb"}],
"location": {
@@ -256,8 +297,8 @@
"check_name": "Redirect",
"message": "Possible unprotected redirect",
"file": "app/controllers/remote_follow_controller.rb",
- "line": 18,
- "link": "http://brakemanscanner.org/docs/warning_types/redirect/",
+ "line": 19,
+ "link": "https://brakemanscanner.org/docs/warning_types/redirect/",
"code": "redirect_to(RemoteFollow.new(resource_params).subscribe_address_for(Account.find_local!(params[:account_username])))",
"render_path": null,
"location": {
@@ -276,8 +317,8 @@
"check_name": "Render",
"message": "Render path contains parameter value",
"file": "app/views/admin/reports/index.html.haml",
- "line": 25,
- "link": "http://brakemanscanner.org/docs/warning_types/dynamic_render_path/",
+ "line": 22,
+ "link": "https://brakemanscanner.org/docs/warning_types/dynamic_render_path/",
"code": "render(action => filtered_reports.page(params[:page]), {})",
"render_path": [{"type":"controller","class":"Admin::ReportsController","method":"index","line":10,"file":"app/controllers/admin/reports_controller.rb"}],
"location": {
@@ -288,25 +329,6 @@
"confidence": "Weak",
"note": ""
},
- {
- "warning_type": "Cross-Site Request Forgery",
- "warning_code": 7,
- "fingerprint": "d4278f04e807ec58a23925f8ab31fad5e84692f2fb9f2f57e7931aff05d57cf8",
- "check_name": "ForgerySetting",
- "message": "'protect_from_forgery' should be called in WellKnown::WebfingerController",
- "file": "app/controllers/well_known/webfinger_controller.rb",
- "line": 4,
- "link": "http://brakemanscanner.org/docs/warning_types/cross-site_request_forgery/",
- "code": null,
- "render_path": null,
- "location": {
- "type": "controller",
- "controller": "WellKnown::WebfingerController"
- },
- "user_input": null,
- "confidence": "High",
- "note": ""
- },
{
"warning_type": "Cross-Site Scripting",
"warning_code": 4,
@@ -314,8 +336,8 @@
"check_name": "LinkToHref",
"message": "Potentially unsafe model attribute in link_to href",
"file": "app/views/admin/accounts/show.html.haml",
- "line": 150,
- "link": "http://brakemanscanner.org/docs/warning_types/link_to_href",
+ "line": 170,
+ "link": "https://brakemanscanner.org/docs/warning_types/link_to_href",
"code": "link_to(Account.find(params[:id]).outbox_url, Account.find(params[:id]).outbox_url)",
"render_path": [{"type":"controller","class":"Admin::AccountsController","method":"show","line":18,"file":"app/controllers/admin/accounts_controller.rb"}],
"location": {
@@ -326,6 +348,26 @@
"confidence": "Weak",
"note": ""
},
+ {
+ "warning_type": "Mass Assignment",
+ "warning_code": 105,
+ "fingerprint": "e867661b2c9812bc8b75a5df12b28e2a53ab97015de0638b4e732fe442561b28",
+ "check_name": "PermitAttributes",
+ "message": "Potentially dangerous key allowed for mass assignment",
+ "file": "app/controllers/api/v1/reports_controller.rb",
+ "line": 42,
+ "link": "https://brakemanscanner.org/docs/warning_types/mass_assignment/",
+ "code": "params.permit(:account_id, :comment, :forward, :status_ids => ([]))",
+ "render_path": null,
+ "location": {
+ "type": "method",
+ "class": "Api::V1::ReportsController",
+ "method": "report_params"
+ },
+ "user_input": ":account_id",
+ "confidence": "High",
+ "note": ""
+ },
{
"warning_type": "Dynamic Render Path",
"warning_code": 15,
@@ -333,10 +375,10 @@
"check_name": "Render",
"message": "Render path contains parameter value",
"file": "app/views/stream_entries/show.html.haml",
- "line": 24,
- "link": "http://brakemanscanner.org/docs/warning_types/dynamic_render_path/",
+ "line": 23,
+ "link": "https://brakemanscanner.org/docs/warning_types/dynamic_render_path/",
"code": "render(partial => \"stream_entries/#{Account.find_local!(params[:account_username]).statuses.find(params[:id]).stream_entry.activity_type.downcase}\", { :locals => ({ Account.find_local!(params[:account_username]).statuses.find(params[:id]).stream_entry.activity_type.downcase.to_sym => Account.find_local!(params[:account_username]).statuses.find(params[:id]).stream_entry.activity, :include_threads => true }) })",
- "render_path": [{"type":"controller","class":"StatusesController","method":"show","line":22,"file":"app/controllers/statuses_controller.rb"}],
+ "render_path": [{"type":"controller","class":"StatusesController","method":"show","line":30,"file":"app/controllers/statuses_controller.rb"}],
"location": {
"type": "template",
"template": "stream_entries/show"
@@ -346,6 +388,6 @@
"note": ""
}
],
- "updated": "2018-02-16 06:42:53 +0100",
- "brakeman_version": "4.0.1"
+ "updated": "2018-08-18 00:49:25 +0200",
+ "brakeman_version": "4.2.1"
}
diff --git a/config/locales/en.yml b/config/locales/en.yml
index cc24a02cf..90086103c 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -655,11 +655,14 @@ en:
publishing: Publishing
web: Web
remote_follow:
- acct: Enter your username@domain you want to follow from
+ acct: Enter your username@domain you want to act from
missing_resource: Could not find the required redirect URL for your account
no_account_html: Don't have an account? You can sign up here
proceed: Proceed to follow
prompt: 'You are going to follow:'
+ remote_interaction:
+ proceed: Proceed to interact
+ prompt: 'You want to interact with this toot:'
remote_unfollow:
error: Error
title: Title
diff --git a/config/routes.rb b/config/routes.rb
index 2983011d2..fd3b5fe4b 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -74,6 +74,9 @@ Rails.application.routes.draw do
get '/@:account_username/:id', to: 'statuses#show', as: :short_account_status
get '/@:account_username/:id/embed', to: 'statuses#embed', as: :embed_short_account_status
+ get '/interact/:id', to: 'remote_interaction#new', as: :remote_interaction
+ post '/interact/:id', to: 'remote_interaction#create'
+
namespace :settings do
resource :profile, only: [:show, :update]
resource :preferences, only: [:show, :update]
@@ -120,7 +123,7 @@ Rails.application.routes.draw do
# Remote follow
resource :remote_unfollow, only: [:create]
- resource :authorize_follow, only: [:show, :create]
+ resource :authorize_interaction, only: [:show, :create]
resource :share, only: [:show, :create]
namespace :admin do
diff --git a/spec/controllers/authorize_follows_controller_spec.rb b/spec/controllers/authorize_interactions_controller_spec.rb
similarity index 71%
rename from spec/controllers/authorize_follows_controller_spec.rb
rename to spec/controllers/authorize_interactions_controller_spec.rb
index 52971c724..81fd9ceb7 100644
--- a/spec/controllers/authorize_follows_controller_spec.rb
+++ b/spec/controllers/authorize_interactions_controller_spec.rb
@@ -2,7 +2,7 @@
require 'rails_helper'
-describe AuthorizeFollowsController do
+describe AuthorizeInteractionsController do
render_views
describe 'GET #show' do
@@ -39,19 +39,19 @@ describe AuthorizeFollowsController do
expect(service).to have_received(:call).with('missing@hostname')
end
- it 'sets account from url' do
+ it 'sets resource from url' do
account = Account.new
service = double
- allow(FetchRemoteAccountService).to receive(:new).and_return(service)
+ allow(ResolveURLService).to receive(:new).and_return(service)
allow(service).to receive(:call).with('http://example.com').and_return(account)
get :show, params: { acct: 'http://example.com' }
expect(response).to have_http_status(200)
- expect(assigns(:account)).to eq account
+ expect(assigns(:resource)).to eq account
end
- it 'sets account from acct uri' do
+ it 'sets resource from acct uri' do
account = Account.new
service = double
allow(ResolveAccountService).to receive(:new).and_return(service)
@@ -60,7 +60,7 @@ describe AuthorizeFollowsController do
get :show, params: { acct: 'acct:found@hostname' }
expect(response).to have_http_status(200)
- expect(assigns(:account)).to eq account
+ expect(assigns(:resource)).to eq account
end
end
end
@@ -75,8 +75,8 @@ describe AuthorizeFollowsController do
end
describe 'when signed in' do
- let(:user) { Fabricate(:user) }
- let(:account) { Fabricate(:account, user: user) }
+ let!(:user) { Fabricate(:user) }
+ let!(:account) { user.account }
before do
sign_in(user)
@@ -84,25 +84,26 @@ describe AuthorizeFollowsController do
it 'shows error when account not found' do
service = double
- allow(FollowService).to receive(:new).and_return(service)
- allow(service).to receive(:call).with(account, 'user@hostname').and_return(nil)
+
+ allow(ResolveAccountService).to receive(:new).and_return(service)
+ allow(service).to receive(:call).with('user@hostname').and_return(nil)
post :create, params: { acct: 'acct:user@hostname' }
- expect(service).to have_received(:call).with(account, 'user@hostname')
expect(response).to render_template(:error)
end
it 'follows account when found' do
target_account = Fabricate(:account)
- result_account = double(target_account: target_account)
service = double
- allow(FollowService).to receive(:new).and_return(service)
- allow(service).to receive(:call).with(account, 'user@hostname').and_return(result_account)
+
+ allow(ResolveAccountService).to receive(:new).and_return(service)
+ allow(service).to receive(:call).with('user@hostname').and_return(target_account)
post :create, params: { acct: 'acct:user@hostname' }
- expect(service).to have_received(:call).with(account, 'user@hostname')
+ expect(service).to have_received(:call).with('user@hostname')
+ expect(account.following?(target_account)).to be true
expect(response).to render_template(:success)
end
end
diff --git a/spec/controllers/intents_controller_spec.rb b/spec/controllers/intents_controller_spec.rb
index 3dde7f835..ddfd5ea36 100644
--- a/spec/controllers/intents_controller_spec.rb
+++ b/spec/controllers/intents_controller_spec.rb
@@ -13,7 +13,7 @@ RSpec.describe IntentsController, type: :controller do
context 'when host is follow' do
let(:uri) { 'web+mastodon://follow?uri=test' }
- it { is_expected.to redirect_to authorize_follow_path(acct: 'test') }
+ it { is_expected.to redirect_to authorize_interaction_path(uri: 'test') }
end
context 'when host is share' do
From d010816ba876bf4f749749e9d7432a843e8a1ff9 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Sat, 18 Aug 2018 03:03:23 +0200
Subject: [PATCH 105/196] Fix error when trying to update counters for statuses
that are gone (#8251)
---
app/models/favourite.rb | 4 ++--
app/models/status.rb | 10 ++++++----
spec/models/status_spec.rb | 21 +++++++++++++++++++++
3 files changed, 29 insertions(+), 6 deletions(-)
diff --git a/app/models/favourite.rb b/app/models/favourite.rb
index ce7a6a336..17f8c9fa6 100644
--- a/app/models/favourite.rb
+++ b/app/models/favourite.rb
@@ -32,11 +32,11 @@ class Favourite < ApplicationRecord
private
def increment_cache_counters
- status.increment_count!(:favourites_count)
+ status&.increment_count!(:favourites_count)
end
def decrement_cache_counters
return if association(:status).loaded? && (status.marked_for_destruction? || status.marked_for_mass_destruction?)
- status.decrement_count!(:favourites_count)
+ status&.decrement_count!(:favourites_count)
end
end
diff --git a/app/models/status.rb b/app/models/status.rb
index 2eed33659..533d12354 100644
--- a/app/models/status.rb
+++ b/app/models/status.rb
@@ -396,6 +396,8 @@ class Status < ApplicationRecord
private
def update_status_stat!(attrs)
+ return if marked_for_destruction? || destroyed?
+
record = status_stat || build_status_stat
record.update(attrs)
end
@@ -456,8 +458,8 @@ class Status < ApplicationRecord
Account.where(id: account_id).update_all('statuses_count = COALESCE(statuses_count, 0) + 1')
end
- reblog.increment_count!(:reblogs_count) if reblog?
- thread.increment_count!(:replies_count) if in_reply_to_id.present? && (public_visibility? || unlisted_visibility?)
+ reblog&.increment_count!(:reblogs_count) if reblog?
+ thread&.increment_count!(:replies_count) if in_reply_to_id.present? && (public_visibility? || unlisted_visibility?)
end
def decrement_counter_caches
@@ -469,7 +471,7 @@ class Status < ApplicationRecord
Account.where(id: account_id).update_all('statuses_count = GREATEST(COALESCE(statuses_count, 0) - 1, 0)')
end
- reblog.decrement_count!(:reblogs_count) if reblog?
- thread.decrement_count!(:replies_count) if in_reply_to_id.present? && (public_visibility? || unlisted_visibility?)
+ reblog&.decrement_count!(:reblogs_count) if reblog?
+ thread&.decrement_count!(:replies_count) if in_reply_to_id.present? && (public_visibility? || unlisted_visibility?)
end
end
diff --git a/spec/models/status_spec.rb b/spec/models/status_spec.rb
index b3e475d99..d03005107 100644
--- a/spec/models/status_spec.rb
+++ b/spec/models/status_spec.rb
@@ -182,6 +182,27 @@ RSpec.describe Status, type: :model do
reblog.destroy
expect(subject.reblogs_count).to eq 0
end
+
+ it 'does not fail when original is deleted before reblog' do
+ reblog = Fabricate(:status, account: bob, reblog: subject)
+ expect(subject.reblogs_count).to eq 1
+ expect { subject.destroy }.to_not raise_error
+ expect(Status.find_by(id: reblog.id)).to be_nil
+ end
+ end
+
+ describe '#replies_count' do
+ it 'is the number of replies' do
+ reply = Fabricate(:status, account: bob, thread: subject)
+ expect(subject.replies_count).to eq 1
+ end
+
+ it 'is decremented when reply is removed' do
+ reply = Fabricate(:status, account: bob, thread: subject)
+ expect(subject.replies_count).to eq 1
+ reply.destroy
+ expect(subject.replies_count).to eq 0
+ end
end
describe '#favourites_count' do
From edb1de780060a0d62bc57153d743002c0a8bde67 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Sat, 18 Aug 2018 03:44:50 +0200
Subject: [PATCH 106/196] Make CopyStatusStats migration use batches of 1000 to
avoid locks (#8256)
---
db/migrate/20180812173710_copy_status_stats.rb | 17 ++++++++++-------
1 file changed, 10 insertions(+), 7 deletions(-)
diff --git a/db/migrate/20180812173710_copy_status_stats.rb b/db/migrate/20180812173710_copy_status_stats.rb
index 64a564ca0..0c5907c30 100644
--- a/db/migrate/20180812173710_copy_status_stats.rb
+++ b/db/migrate/20180812173710_copy_status_stats.rb
@@ -3,13 +3,16 @@ class CopyStatusStats < ActiveRecord::Migration[5.2]
def up
safety_assured do
- execute <<-SQL.squish
- INSERT INTO status_stats (status_id, reblogs_count, favourites_count, created_at, updated_at)
- SELECT id, reblogs_count, favourites_count, created_at, updated_at
- FROM statuses
- ON CONFLICT (status_id) DO UPDATE
- SET reblogs_count = EXCLUDED.reblogs_count, favourites_count = EXCLUDED.favourites_count
- SQL
+ Status.where.not(id: StatusStat.select('status_id')).select('id').find_in_batches do |statuses|
+ execute <<-SQL.squish
+ INSERT INTO status_stats (status_id, reblogs_count, favourites_count, created_at, updated_at)
+ SELECT id, reblogs_count, favourites_count, created_at, updated_at
+ FROM statuses
+ WHERE id IN (#{statuses.map(&:id).join(', ')})
+ ON CONFLICT (status_id) DO UPDATE
+ SET reblogs_count = EXCLUDED.reblogs_count, favourites_count = EXCLUDED.favourites_count
+ SQL
+ end
end
end
From 5059989cc743e18f05e3f5f95ad557d7f7f34afd Mon Sep 17 00:00:00 2001
From: ThibG
Date: Sat, 18 Aug 2018 04:05:42 +0200
Subject: [PATCH 107/196] Use CircleCI workflows for ruby dependencies (#8228)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* Add “bundle clean” suggestion from CircleCI doc
Cf. https://circleci.com/docs/2.0/caching/#bundler-ruby
* Use workspaces instead of caches for ruby gems
Cache are not guaranteed to be available, while the test jobs *require* their
depencies to run. Workspaces are thus more suitable.
One downside is that the order of workspace layer additions need to be
deterministic, which is why install-ruby{2.3,2.4} now depend on
install-ruby2.5.
---
.circleci/config.yml | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/.circleci/config.yml b/.circleci/config.yml
index ac8dfc334..20688b8e9 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -64,12 +64,17 @@ aliases:
- run: ruby -e 'puts RUBY_VERSION' | tee /tmp/.ruby-version
- *restore_ruby_dependencies
- - run: bundle install --clean --jobs 16 --path ./vendor/bundle/ --retry 3 --with pam_authentication --without development production
+ - run: bundle install --clean --jobs 16 --path ./vendor/bundle/ --retry 3 --with pam_authentication --without development production && bundle clean
- save_cache:
key: v2-ruby-dependencies-{{ checksum "/tmp/.ruby-version" }}-{{ checksum "Gemfile.lock" }}
paths:
- ./.bundle/
- ./vendor/bundle/
+ - persist_to_workspace:
+ root: ~/projects/
+ paths:
+ - ./mastodon/.bundle/
+ - ./mastodon/vendor/bundle/
- &test_steps
steps:
@@ -78,9 +83,6 @@ aliases:
- *install_system_dependencies
- run: sudo apt-get install -y ffmpeg
- - run: ruby -e 'puts RUBY_VERSION' | tee /tmp/.ruby-version
- - *restore_ruby_dependencies
-
- run:
name: Prepare Tests
command: ./bin/rails parallel:create parallel:load_schema parallel:prepare
@@ -116,8 +118,6 @@ jobs:
steps:
- *attach_workspace
- *install_system_dependencies
- - run: ruby -e 'puts RUBY_VERSION' | tee /tmp/.ruby-version
- - *restore_ruby_dependencies
- run: ./bin/rails assets:precompile
- persist_to_workspace:
root: ~/projects/
@@ -170,8 +170,6 @@ jobs:
<<: *defaults
steps:
- *attach_workspace
- - run: ruby -e 'puts RUBY_VERSION' | tee /tmp/.ruby-version
- - *restore_ruby_dependencies
- run: bundle exec i18n-tasks check-normalized
- run: bundle exec i18n-tasks unused
@@ -186,9 +184,11 @@ workflows:
- install-ruby2.4:
requires:
- install
+ - install-ruby2.5
- install-ruby2.3:
requires:
- install
+ - install-ruby2.5
- build:
requires:
- install-ruby2.5
From 85bb32c410a975bf6154a78a82797f82713e2428 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Sat, 18 Aug 2018 12:48:27 +0200
Subject: [PATCH 108/196] Add "sign in to participate" message to public toot
page (#8200)
---
app/javascript/styles/mastodon/stream_entries.scss | 12 ++++++++----
app/views/stream_entries/_status.html.haml | 6 ++++++
config/locales/en.yml | 1 +
3 files changed, 15 insertions(+), 4 deletions(-)
diff --git a/app/javascript/styles/mastodon/stream_entries.scss b/app/javascript/styles/mastodon/stream_entries.scss
index 03bbd84db..5aa809f76 100644
--- a/app/javascript/styles/mastodon/stream_entries.scss
+++ b/app/javascript/styles/mastodon/stream_entries.scss
@@ -37,7 +37,8 @@
&:last-child {
.detailed-status,
- .status {
+ .status,
+ .load-more {
border-bottom: 0;
border-radius: 0 0 4px 4px;
}
@@ -45,13 +46,15 @@
&:first-child {
.detailed-status,
- .status {
+ .status,
+ .load-more {
border-radius: 4px 4px 0 0;
}
&:last-child {
.detailed-status,
- .status {
+ .status,
+ .load-more {
border-radius: 4px;
}
}
@@ -59,7 +62,8 @@
@media screen and (max-width: 740px) {
.detailed-status,
- .status {
+ .status,
+ .load-more {
border-radius: 0 !important;
}
}
diff --git a/app/views/stream_entries/_status.html.haml b/app/views/stream_entries/_status.html.haml
index 320c9bc4f..92003a48f 100644
--- a/app/views/stream_entries/_status.html.haml
+++ b/app/views/stream_entries/_status.html.haml
@@ -53,3 +53,9 @@
- if @next_descendant_thread
.entry{ class: entry_classes }
= link_to_more short_account_status_url(status.account.username, status, since_descendant_thread_id: @max_descendant_thread_id - 1)
+
+- if include_threads && !embedded_view? && !user_signed_in?
+ .entry{ class: entry_classes }
+ = link_to new_user_session_path, class: 'load-more load-gap' do
+ = fa_icon 'comments'
+ = t('statuses.sign_in_to_participate')
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 90086103c..66ab8f10a 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -746,6 +746,7 @@ en:
private: Non-public toot cannot be pinned
reblog: A boost cannot be pinned
show_more: Show more
+ sign_in_to_participate: Sign in to participate in the conversation
title: '%{name}: "%{quote}"'
visibilities:
private: Followers-only
From 298ee84488758fc08a0ae9233e04c9637aa2fe02 Mon Sep 17 00:00:00 2001
From: M Somerville
Date: Sat, 18 Aug 2018 11:50:32 +0100
Subject: [PATCH 109/196] Fix #8264 - Do not override ctrl/cmd+click. (#8265)
This includes clicks on hashtags, mentions, display names and media in the
timeline; and usernames in reply-indicator, detailed status, and the boost
modal.
---
app/javascript/mastodon/components/media_gallery.js | 2 +-
app/javascript/mastodon/components/status.js | 2 +-
app/javascript/mastodon/components/status_content.js | 4 ++--
.../mastodon/features/compose/components/reply_indicator.js | 2 +-
.../mastodon/features/status/components/detailed_status.js | 2 +-
app/javascript/mastodon/features/ui/components/boost_modal.js | 2 +-
6 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/app/javascript/mastodon/components/media_gallery.js b/app/javascript/mastodon/components/media_gallery.js
index 1d351279f..63bc4a59b 100644
--- a/app/javascript/mastodon/components/media_gallery.js
+++ b/app/javascript/mastodon/components/media_gallery.js
@@ -50,7 +50,7 @@ class Item extends React.PureComponent {
handleClick = (e) => {
const { index, onClick } = this.props;
- if (e.button === 0) {
+ if (e.button === 0 && !(e.ctrlKey || e.metaKey)) {
e.preventDefault();
onClick(index);
}
diff --git a/app/javascript/mastodon/components/status.js b/app/javascript/mastodon/components/status.js
index 922b609ec..e653906f1 100644
--- a/app/javascript/mastodon/components/status.js
+++ b/app/javascript/mastodon/components/status.js
@@ -65,7 +65,7 @@ export default class Status extends ImmutablePureComponent {
}
handleAccountClick = (e) => {
- if (this.context.router && e.button === 0) {
+ if (this.context.router && e.button === 0 && !(e.ctrlKey || e.metaKey)) {
const id = e.currentTarget.getAttribute('data-id');
e.preventDefault();
this.context.router.history.push(`/accounts/${id}`);
diff --git a/app/javascript/mastodon/components/status_content.js b/app/javascript/mastodon/components/status_content.js
index 9b86592f6..81013747e 100644
--- a/app/javascript/mastodon/components/status_content.js
+++ b/app/javascript/mastodon/components/status_content.js
@@ -64,7 +64,7 @@ export default class StatusContent extends React.PureComponent {
}
onMentionClick = (mention, e) => {
- if (this.context.router && e.button === 0) {
+ if (this.context.router && e.button === 0 && !(e.ctrlKey || e.metaKey)) {
e.preventDefault();
this.context.router.history.push(`/accounts/${mention.get('id')}`);
}
@@ -73,7 +73,7 @@ export default class StatusContent extends React.PureComponent {
onHashtagClick = (hashtag, e) => {
hashtag = hashtag.replace(/^#/, '').toLowerCase();
- if (this.context.router && e.button === 0) {
+ if (this.context.router && e.button === 0 && !(e.ctrlKey || e.metaKey)) {
e.preventDefault();
this.context.router.history.push(`/timelines/tag/${hashtag}`);
}
diff --git a/app/javascript/mastodon/features/compose/components/reply_indicator.js b/app/javascript/mastodon/features/compose/components/reply_indicator.js
index 5b4b81eac..6f358a98b 100644
--- a/app/javascript/mastodon/features/compose/components/reply_indicator.js
+++ b/app/javascript/mastodon/features/compose/components/reply_indicator.js
@@ -30,7 +30,7 @@ export default class ReplyIndicator extends ImmutablePureComponent {
}
handleAccountClick = (e) => {
- if (e.button === 0) {
+ if (e.button === 0 && !(e.ctrlKey || e.metaKey)) {
e.preventDefault();
this.context.router.history.push(`/accounts/${this.props.status.getIn(['account', 'id'])}`);
}
diff --git a/app/javascript/mastodon/features/status/components/detailed_status.js b/app/javascript/mastodon/features/status/components/detailed_status.js
index 417719004..12ffb7579 100644
--- a/app/javascript/mastodon/features/status/components/detailed_status.js
+++ b/app/javascript/mastodon/features/status/components/detailed_status.js
@@ -26,7 +26,7 @@ export default class DetailedStatus extends ImmutablePureComponent {
};
handleAccountClick = (e) => {
- if (e.button === 0) {
+ if (e.button === 0 && !(e.ctrlKey || e.metaKey)) {
e.preventDefault();
this.context.router.history.push(`/accounts/${this.props.status.getIn(['account', 'id'])}`);
}
diff --git a/app/javascript/mastodon/features/ui/components/boost_modal.js b/app/javascript/mastodon/features/ui/components/boost_modal.js
index 0e9592c97..1c90d10dd 100644
--- a/app/javascript/mastodon/features/ui/components/boost_modal.js
+++ b/app/javascript/mastodon/features/ui/components/boost_modal.js
@@ -37,7 +37,7 @@ export default class BoostModal extends ImmutablePureComponent {
}
handleAccountClick = (e) => {
- if (e.button === 0) {
+ if (e.button === 0 && !(e.ctrlKey || e.metaKey)) {
e.preventDefault();
this.props.onClose();
this.context.router.history.push(`/accounts/${this.props.status.getIn(['account', 'id'])}`);
From 7a0f781aa9aad505dbde6a2bf3aa5048638c2de0 Mon Sep 17 00:00:00 2001
From: Spanky <2788886+SpankyWorks@users.noreply.github.com>
Date: Sat, 18 Aug 2018 12:40:35 -0500
Subject: [PATCH 110/196] Fix ctrl+enter not submitting toot when text cursor
is composing image description (#8273)
---
.../mastodon/features/compose/components/upload.js | 13 +++++++++++++
.../features/compose/containers/upload_container.js | 5 +++++
2 files changed, 18 insertions(+)
diff --git a/app/javascript/mastodon/features/compose/components/upload.js b/app/javascript/mastodon/features/compose/components/upload.js
index bfa2b4727..3d09217dc 100644
--- a/app/javascript/mastodon/features/compose/components/upload.js
+++ b/app/javascript/mastodon/features/compose/components/upload.js
@@ -20,6 +20,7 @@ export default class Upload extends ImmutablePureComponent {
onUndo: PropTypes.func.isRequired,
onDescriptionChange: PropTypes.func.isRequired,
onOpenFocalPoint: PropTypes.func.isRequired,
+ onSubmit: PropTypes.func.isRequired,
};
state = {
@@ -28,6 +29,17 @@ export default class Upload extends ImmutablePureComponent {
dirtyDescription: null,
};
+ handleKeyDown = (e) => {
+ if (e.keyCode === 13 && (e.ctrlKey || e.metaKey)) {
+ this.handleSubmit();
+ }
+ }
+
+ handleSubmit = () => {
+ this.handleInputBlur();
+ this.props.onSubmit();
+ }
+
handleUndoClick = () => {
this.props.onUndo(this.props.media.get('id'));
}
@@ -93,6 +105,7 @@ export default class Upload extends ImmutablePureComponent {
onFocus={this.handleInputFocus}
onChange={this.handleInputChange}
onBlur={this.handleInputBlur}
+ onKeyDown={this.handleKeyDown}
/>
diff --git a/app/javascript/mastodon/features/compose/containers/upload_container.js b/app/javascript/mastodon/features/compose/containers/upload_container.js
index d6b57e5ff..9f3aab4bc 100644
--- a/app/javascript/mastodon/features/compose/containers/upload_container.js
+++ b/app/javascript/mastodon/features/compose/containers/upload_container.js
@@ -2,6 +2,7 @@ import { connect } from 'react-redux';
import Upload from '../components/upload';
import { undoUploadCompose, changeUploadCompose } from '../../../actions/compose';
import { openModal } from '../../../actions/modal';
+import { submitCompose } from '../../../actions/compose';
const mapStateToProps = (state, { id }) => ({
media: state.getIn(['compose', 'media_attachments']).find(item => item.get('id') === id),
@@ -21,6 +22,10 @@ const mapDispatchToProps = dispatch => ({
dispatch(openModal('FOCAL_POINT', { id }));
},
+ onSubmit () {
+ dispatch(submitCompose());
+ },
+
});
export default connect(mapStateToProps, mapDispatchToProps)(Upload);
From abc5548cca42dd87926c7c3d4b42b59a7e306eb8 Mon Sep 17 00:00:00 2001
From: ThibG
Date: Sat, 18 Aug 2018 19:42:13 +0200
Subject: [PATCH 111/196] Do not process outgoing mentions to suspended
accounts (#8272)
---
app/services/process_mentions_service.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/services/process_mentions_service.rb b/app/services/process_mentions_service.rb
index 2ed6698cf..b4641c4b4 100644
--- a/app/services/process_mentions_service.rb
+++ b/app/services/process_mentions_service.rb
@@ -25,7 +25,7 @@ class ProcessMentionsService < BaseService
end
end
- next match if mention_undeliverable?(mentioned_account)
+ next match if mention_undeliverable?(mentioned_account) || mentioned_account&.suspended
mentions << mentioned_account.mentions.where(status: status).first_or_create(status: status)
From c6eab9e0aa06928e644cfe8445c0787e5515cd4f Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Sat, 18 Aug 2018 21:06:12 +0200
Subject: [PATCH 112/196] Add Makara dependency to support read-replicas
(#8216)
Not active by default unless config/database.yml is edited
---
Gemfile | 1 +
Gemfile.lock | 3 +++
2 files changed, 4 insertions(+)
diff --git a/Gemfile b/Gemfile
index cb34ae2ec..31c3c8086 100644
--- a/Gemfile
+++ b/Gemfile
@@ -10,6 +10,7 @@ gem 'rails', '~> 5.2.1'
gem 'hamlit-rails', '~> 0.2'
gem 'pg', '~> 1.0'
+gem 'makara', '~> 0.4'
gem 'pghero', '~> 2.1'
gem 'dotenv-rails', '~> 2.2', '< 2.3'
diff --git a/Gemfile.lock b/Gemfile.lock
index ba7bdaa7b..71f2f6c7d 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -322,6 +322,8 @@ GEM
nokogiri (>= 1.5.9)
mail (2.7.0)
mini_mime (>= 0.1.1)
+ makara (0.4.0)
+ activerecord (>= 3.0.0)
marcel (0.3.2)
mimemagic (~> 0.3.2)
mario-redis-lock (1.2.1)
@@ -697,6 +699,7 @@ DEPENDENCIES
letter_opener_web (~> 1.3)
link_header (~> 0.0)
lograge (~> 0.10)
+ makara (~> 0.4)
mario-redis-lock (~> 1.2)
memory_profiler
microformats (~> 4.0)
From 9dd5639f90e7a256863a2b1fc199390def8bdb14 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Sun, 19 Aug 2018 00:58:53 +0200
Subject: [PATCH 113/196] Add admin function to deactivate all invites (#8279)
Fix #8261
---
app/controllers/admin/invites_controller.rb | 6 +++++
app/policies/invite_policy.rb | 4 +++
app/views/admin/invites/index.html.haml | 28 +++++++++++++--------
config/locales/en.yml | 1 +
config/routes.rb | 7 +++++-
5 files changed, 34 insertions(+), 12 deletions(-)
diff --git a/app/controllers/admin/invites_controller.rb b/app/controllers/admin/invites_controller.rb
index faccaa7c8..44a8eec77 100644
--- a/app/controllers/admin/invites_controller.rb
+++ b/app/controllers/admin/invites_controller.rb
@@ -30,6 +30,12 @@ module Admin
redirect_to admin_invites_path
end
+ def deactivate_all
+ authorize :invite, :deactivate_all?
+ Invite.available.in_batches.update_all(expires_at: Time.now.utc)
+ redirect_to admin_invites_path
+ end
+
private
def resource_params
diff --git a/app/policies/invite_policy.rb b/app/policies/invite_policy.rb
index a2a65f934..14236f78b 100644
--- a/app/policies/invite_policy.rb
+++ b/app/policies/invite_policy.rb
@@ -9,6 +9,10 @@ class InvitePolicy < ApplicationPolicy
min_required_role?
end
+ def deactivate_all?
+ admin?
+ end
+
def destroy?
owner? || (Setting.min_invite_role == 'admin' ? admin? : staff?)
end
diff --git a/app/views/admin/invites/index.html.haml b/app/views/admin/invites/index.html.haml
index 944a60471..42159e9f3 100644
--- a/app/views/admin/invites/index.html.haml
+++ b/app/views/admin/invites/index.html.haml
@@ -9,22 +9,28 @@
%li= filter_link_to t('admin.invites.filter.available'), available: 1, expired: nil
%li= filter_link_to t('admin.invites.filter.expired'), available: nil, expired: 1
+%hr.spacer/
+
- if policy(:invite).create?
%p= t('invites.prompt')
= render 'invites/form'
- %hr/
+ %hr.spacer/
-%table.table
- %thead
- %tr
- %th
- %th= t('invites.table.uses')
- %th= t('invites.table.expires_at')
- %th
- %th
- %tbody
- = render @invites
+.table-wrapper
+ %table.table
+ %thead
+ %tr
+ %th
+ %th= t('invites.table.uses')
+ %th= t('invites.table.expires_at')
+ %th
+ %th
+ %tbody
+ = render @invites
= paginate @invites
+
+- if policy(:invite).deactivate_all?
+ = link_to t('admin.invites.deactivate_all'), deactivate_all_admin_invites_path, method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button'
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 66ab8f10a..65fc7b78e 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -281,6 +281,7 @@ en:
search: Search
title: Known instances
invites:
+ deactivate_all: Deactivate all
filter:
all: All
available: Available
diff --git a/config/routes.rb b/config/routes.rb
index fd3b5fe4b..a8716aae5 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -134,7 +134,12 @@ Rails.application.routes.draw do
resources :email_domain_blocks, only: [:index, :new, :create, :destroy]
resources :action_logs, only: [:index]
resource :settings, only: [:edit, :update]
- resources :invites, only: [:index, :create, :destroy]
+
+ resources :invites, only: [:index, :create, :destroy] do
+ collection do
+ post :deactivate_all
+ end
+ end
resources :relays, only: [:index, :new, :create, :destroy] do
member do
From 0fc0980de1d8b9fd94da5aa4ce5f222f57649eff Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Sun, 19 Aug 2018 01:17:44 +0200
Subject: [PATCH 114/196] Link to mobile apps page (#8278)
Fix #8269
---
app/javascript/mastodon/features/getting_started/index.js | 1 +
app/views/layouts/public.html.haml | 2 +-
config/locales/en.yml | 1 +
3 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/app/javascript/mastodon/features/getting_started/index.js b/app/javascript/mastodon/features/getting_started/index.js
index 074ab01c8..95af8997e 100644
--- a/app/javascript/mastodon/features/getting_started/index.js
+++ b/app/javascript/mastodon/features/getting_started/index.js
@@ -139,6 +139,7 @@ export default class GettingStarted extends ImmutablePureComponent {
{multiColumn && · }
·
·
+ ·
·
·
·
diff --git a/app/views/layouts/public.html.haml b/app/views/layouts/public.html.haml
index f9d808bed..ca9dac8bb 100644
--- a/app/views/layouts/public.html.haml
+++ b/app/views/layouts/public.html.haml
@@ -45,6 +45,6 @@
%h4= t 'footer.more'
%ul
%li= link_to t('about.source_code'), Mastodon::Version.source_url
- %li= link_to 'joinmastodon.org', 'https://joinmastodon.org'
+ %li= link_to t('about.apps'), 'https://joinmastodon.org/apps'
= render template: 'layouts/application'
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 65fc7b78e..7809b8e68 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -6,6 +6,7 @@ en:
about_this: About
administered_by: 'Administered by:'
api: API
+ apps: Mobile apps
closed_registrations: Registrations are currently closed on this instance. However! You can find a different instance to make an account on and get access to the very same network from there.
contact: Contact
contact_missing: Not set
From f13afa1ee92ceb40ce2e44f6457bd6e75b80adb5 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Sun, 19 Aug 2018 02:01:49 +0200
Subject: [PATCH 115/196] Do not use WHERE NOT IN in CopyStatusStats migration
(#8281)
Fix #8275
As the batch operation progresses, the statuses_stats table grows,
and the WHERE NOT IN subquery becomes more expensive
---
db/migrate/20180812173710_copy_status_stats.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/db/migrate/20180812173710_copy_status_stats.rb b/db/migrate/20180812173710_copy_status_stats.rb
index 0c5907c30..850aa9c13 100644
--- a/db/migrate/20180812173710_copy_status_stats.rb
+++ b/db/migrate/20180812173710_copy_status_stats.rb
@@ -3,7 +3,7 @@ class CopyStatusStats < ActiveRecord::Migration[5.2]
def up
safety_assured do
- Status.where.not(id: StatusStat.select('status_id')).select('id').find_in_batches do |statuses|
+ Status.unscoped.select('id').find_in_batches(batch_size: 5_000) do |statuses|
execute <<-SQL.squish
INSERT INTO status_stats (status_id, reblogs_count, favourites_count, created_at, updated_at)
SELECT id, reblogs_count, favourites_count, created_at, updated_at
From 025fbb8285cdedf495d9e4d015db611b0c622cbb Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Sun, 19 Aug 2018 03:17:01 +0200
Subject: [PATCH 116/196] Show compose form on delete & redraft when in mobile
layout (#8277)
Fix #8274
---
app/javascript/mastodon/actions/statuses.js | 6 +++++-
app/javascript/mastodon/components/status_action_bar.js | 4 ++--
app/javascript/mastodon/containers/status_container.js | 6 +++---
.../mastodon/features/status/components/action_bar.js | 4 ++--
app/javascript/mastodon/features/status/index.js | 6 +++---
5 files changed, 15 insertions(+), 11 deletions(-)
diff --git a/app/javascript/mastodon/actions/statuses.js b/app/javascript/mastodon/actions/statuses.js
index 3e1e5f270..8d5e72bec 100644
--- a/app/javascript/mastodon/actions/statuses.js
+++ b/app/javascript/mastodon/actions/statuses.js
@@ -140,7 +140,7 @@ export function redraft(status) {
};
};
-export function deleteStatus(id, withRedraft = false) {
+export function deleteStatus(id, router, withRedraft = false) {
return (dispatch, getState) => {
const status = getState().getIn(['statuses', id]);
@@ -153,6 +153,10 @@ export function deleteStatus(id, withRedraft = false) {
if (withRedraft) {
dispatch(redraft(status));
+
+ if (!getState().getIn(['compose', 'mounted'])) {
+ router.push('/statuses/new');
+ }
}
}).catch(error => {
dispatch(deleteStatusFail(id, error));
diff --git a/app/javascript/mastodon/components/status_action_bar.js b/app/javascript/mastodon/components/status_action_bar.js
index c799d4e98..6d44a4b45 100644
--- a/app/javascript/mastodon/components/status_action_bar.js
+++ b/app/javascript/mastodon/components/status_action_bar.js
@@ -96,11 +96,11 @@ export default class StatusActionBar extends ImmutablePureComponent {
}
handleDeleteClick = () => {
- this.props.onDelete(this.props.status);
+ this.props.onDelete(this.props.status, this.context.router.history);
}
handleRedraftClick = () => {
- this.props.onDelete(this.props.status, true);
+ this.props.onDelete(this.props.status, this.context.router.history, true);
}
handlePinClick = () => {
diff --git a/app/javascript/mastodon/containers/status_container.js b/app/javascript/mastodon/containers/status_container.js
index eb6329fdc..ed375c3e5 100644
--- a/app/javascript/mastodon/containers/status_container.js
+++ b/app/javascript/mastodon/containers/status_container.js
@@ -93,14 +93,14 @@ const mapDispatchToProps = (dispatch, { intl }) => ({
}));
},
- onDelete (status, withRedraft = false) {
+ onDelete (status, history, withRedraft = false) {
if (!deleteModal) {
- dispatch(deleteStatus(status.get('id'), withRedraft));
+ dispatch(deleteStatus(status.get('id'), history, withRedraft));
} else {
dispatch(openModal('CONFIRM', {
message: intl.formatMessage(withRedraft ? messages.redraftMessage : messages.deleteMessage),
confirm: intl.formatMessage(withRedraft ? messages.redraftConfirm : messages.deleteConfirm),
- onConfirm: () => dispatch(deleteStatus(status.get('id'), withRedraft)),
+ onConfirm: () => dispatch(deleteStatus(status.get('id'), history, withRedraft)),
}));
}
},
diff --git a/app/javascript/mastodon/features/status/components/action_bar.js b/app/javascript/mastodon/features/status/components/action_bar.js
index 541499668..f5977c02c 100644
--- a/app/javascript/mastodon/features/status/components/action_bar.js
+++ b/app/javascript/mastodon/features/status/components/action_bar.js
@@ -65,11 +65,11 @@ export default class ActionBar extends React.PureComponent {
}
handleDeleteClick = () => {
- this.props.onDelete(this.props.status);
+ this.props.onDelete(this.props.status, this.context.router.history);
}
handleRedraftClick = () => {
- this.props.onDelete(this.props.status, true);
+ this.props.onDelete(this.props.status, this.context.router.history, true);
}
handleDirectClick = () => {
diff --git a/app/javascript/mastodon/features/status/index.js b/app/javascript/mastodon/features/status/index.js
index 0ffeaa4dc..e506733b4 100644
--- a/app/javascript/mastodon/features/status/index.js
+++ b/app/javascript/mastodon/features/status/index.js
@@ -174,16 +174,16 @@ export default class Status extends ImmutablePureComponent {
}
}
- handleDeleteClick = (status, withRedraft = false) => {
+ handleDeleteClick = (status, history, withRedraft = false) => {
const { dispatch, intl } = this.props;
if (!deleteModal) {
- dispatch(deleteStatus(status.get('id'), withRedraft));
+ dispatch(deleteStatus(status.get('id'), history, withRedraft));
} else {
dispatch(openModal('CONFIRM', {
message: intl.formatMessage(withRedraft ? messages.redraftMessage : messages.deleteMessage),
confirm: intl.formatMessage(withRedraft ? messages.redraftConfirm : messages.deleteConfirm),
- onConfirm: () => dispatch(deleteStatus(status.get('id'), withRedraft)),
+ onConfirm: () => dispatch(deleteStatus(status.get('id'), history, withRedraft)),
}));
}
}
From 58ffe3f7c3d73f02d646869a5ed500fa7ff846d6 Mon Sep 17 00:00:00 2001
From: AkiraFukushima
Date: Sun, 19 Aug 2018 10:20:37 +0900
Subject: [PATCH 117/196] Revert "Upgrade Doorkeeper to 4.4.1 (#8197)" (#8231)
* Revert "Upgrade Doorkeeper to 4.4.1 (#8197)"
This reverts commit 464daffdf9a37e9a773d224a162fad022890d463.
* Except migration files from revert commit
---
Gemfile | 2 +-
Gemfile.lock | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/Gemfile b/Gemfile
index 31c3c8086..5a6afe9ad 100644
--- a/Gemfile
+++ b/Gemfile
@@ -42,7 +42,7 @@ gem 'omniauth-cas', '~> 1.1'
gem 'omniauth-saml', '~> 1.10'
gem 'omniauth', '~> 1.2'
-gem 'doorkeeper', '~> 4.4'
+gem 'doorkeeper', '~> 4.2', '< 4.3'
gem 'fast_blank', '~> 1.0'
gem 'fastimage'
gem 'goldfinger', '~> 2.1'
diff --git a/Gemfile.lock b/Gemfile.lock
index 71f2f6c7d..32851c67b 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -181,7 +181,7 @@ GEM
docile (1.3.0)
domain_name (0.5.20180417)
unf (>= 0.0.5, < 1.0.0)
- doorkeeper (4.4.1)
+ doorkeeper (4.2.6)
railties (>= 4.2)
dotenv (2.2.2)
dotenv-rails (2.2.2)
@@ -672,7 +672,7 @@ DEPENDENCIES
devise (~> 4.4)
devise-two-factor (~> 3.0)
devise_pam_authenticatable2 (~> 9.1)
- doorkeeper (~> 4.4)
+ doorkeeper (~> 4.2, < 4.3)
dotenv-rails (~> 2.2, < 2.3)
fabrication (~> 2.20)
faker (~> 1.8)
From 19b07ba260a64b300a81890119af0970df0eb994 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Sun, 19 Aug 2018 03:28:43 +0200
Subject: [PATCH 118/196] Make unfollow button light up red when hovered
(#8286)
Fix #8284
---
app/helpers/stream_entries_helper.rb | 2 +-
app/javascript/styles/mastodon/components.scss | 11 +++++++++++
app/javascript/styles/mastodon/stream_entries.scss | 12 ++++++++++++
3 files changed, 24 insertions(+), 1 deletion(-)
diff --git a/app/helpers/stream_entries_helper.rb b/app/helpers/stream_entries_helper.rb
index 121644263..9ded69436 100644
--- a/app/helpers/stream_entries_helper.rb
+++ b/app/helpers/stream_entries_helper.rb
@@ -19,7 +19,7 @@ module StreamEntriesHelper
safe_join([render(file: Rails.root.join('app', 'javascript', 'images', 'logo.svg')), t('settings.edit_profile')])
end
elsif current_account.following?(account) || current_account.requested?(account)
- link_to account_unfollow_path(account), class: 'button logo-button', data: { method: :post } do
+ link_to account_unfollow_path(account), class: 'button logo-button button--destructive', data: { method: :post } do
safe_join([render(file: Rails.root.join('app', 'javascript', 'images', 'logo.svg')), t('accounts.unfollow')])
end
else
diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss
index cfd8e5ad4..7c58828fd 100644
--- a/app/javascript/styles/mastodon/components.scss
+++ b/app/javascript/styles/mastodon/components.scss
@@ -35,6 +35,17 @@
transition: all 200ms ease-out;
}
+ &--destructive {
+ transition: none;
+
+ &:active,
+ &:focus,
+ &:hover {
+ background-color: $error-red;
+ transition: none;
+ }
+ }
+
&:disabled {
background-color: $ui-primary-color;
cursor: default;
diff --git a/app/javascript/styles/mastodon/stream_entries.scss b/app/javascript/styles/mastodon/stream_entries.scss
index 5aa809f76..14306c8bd 100644
--- a/app/javascript/styles/mastodon/stream_entries.scss
+++ b/app/javascript/styles/mastodon/stream_entries.scss
@@ -110,6 +110,18 @@
}
}
+ &.button--destructive {
+ &:active,
+ &:focus,
+ &:hover {
+ background: $error-red;
+
+ svg path:last-child {
+ fill: $error-red;
+ }
+ }
+ }
+
@media screen and (max-width: $no-gap-breakpoint) {
svg {
display: none;
From 59c68c1a74d5398b9c31489744ff8eca82e2ce50 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Sun, 19 Aug 2018 03:50:34 +0200
Subject: [PATCH 119/196] Reduce user active duration from 7 days to 2 days
(#8282)
To minimize fanout work and redis home feed storage space when
there are lots of recent sign-ups
---
app/models/user.rb | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/app/models/user.rb b/app/models/user.rb
index c820c553a..a2cf2565f 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -42,7 +42,14 @@ class User < ApplicationRecord
include Settings::Extend
include Omniauthable
- ACTIVE_DURATION = 7.days
+ # The home and list feeds will be stored in Redis for this amount
+ # of time, and status fan-out to followers will include only people
+ # within this time frame. Lowering the duration may improve performance
+ # if lots of people sign up, but not a lot of them check their feed
+ # every day. Raising the duration reduces the amount of expensive
+ # RegenerationWorker jobs that need to be run when those people come
+ # to check their feed
+ ACTIVE_DURATION = ENV.fetch('USER_ACTIVE_DAYS', 7).to_i.days
devise :two_factor_authenticatable,
otp_secret_encryption_key: Rails.configuration.x.otp_secret
From 91c929a42cbb71b47af976ec021f4be235b9f3fe Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Sun, 19 Aug 2018 15:48:29 +0200
Subject: [PATCH 120/196] Keep scheduler jobs unique until they're done (#8287)
---
app/workers/scheduler/backup_cleanup_scheduler.rb | 2 ++
app/workers/scheduler/doorkeeper_cleanup_scheduler.rb | 2 ++
app/workers/scheduler/email_scheduler.rb | 2 ++
app/workers/scheduler/feed_cleanup_scheduler.rb | 2 ++
app/workers/scheduler/ip_cleanup_scheduler.rb | 2 ++
app/workers/scheduler/media_cleanup_scheduler.rb | 2 ++
app/workers/scheduler/subscriptions_cleanup_scheduler.rb | 2 ++
app/workers/scheduler/subscriptions_scheduler.rb | 2 ++
app/workers/scheduler/user_cleanup_scheduler.rb | 2 ++
9 files changed, 18 insertions(+)
diff --git a/app/workers/scheduler/backup_cleanup_scheduler.rb b/app/workers/scheduler/backup_cleanup_scheduler.rb
index 5ab16c057..cfdf6f4af 100644
--- a/app/workers/scheduler/backup_cleanup_scheduler.rb
+++ b/app/workers/scheduler/backup_cleanup_scheduler.rb
@@ -3,6 +3,8 @@
class Scheduler::BackupCleanupScheduler
include Sidekiq::Worker
+ sidekiq_options unique: :until_executed
+
def perform
old_backups.find_each(&:destroy!)
end
diff --git a/app/workers/scheduler/doorkeeper_cleanup_scheduler.rb b/app/workers/scheduler/doorkeeper_cleanup_scheduler.rb
index bab4ae886..fec08c6bc 100644
--- a/app/workers/scheduler/doorkeeper_cleanup_scheduler.rb
+++ b/app/workers/scheduler/doorkeeper_cleanup_scheduler.rb
@@ -3,6 +3,8 @@
class Scheduler::DoorkeeperCleanupScheduler
include Sidekiq::Worker
+ sidekiq_options unique: :until_executed
+
def perform
Doorkeeper::AccessToken.where('revoked_at IS NOT NULL').where('revoked_at < NOW()').delete_all
Doorkeeper::AccessGrant.where('revoked_at IS NOT NULL').where('revoked_at < NOW()').delete_all
diff --git a/app/workers/scheduler/email_scheduler.rb b/app/workers/scheduler/email_scheduler.rb
index 36866061b..1a5a1c826 100644
--- a/app/workers/scheduler/email_scheduler.rb
+++ b/app/workers/scheduler/email_scheduler.rb
@@ -3,6 +3,8 @@
class Scheduler::EmailScheduler
include Sidekiq::Worker
+ sidekiq_options unique: :until_executed
+
def perform
eligible_users.find_each do |user|
next unless user.allows_digest_emails?
diff --git a/app/workers/scheduler/feed_cleanup_scheduler.rb b/app/workers/scheduler/feed_cleanup_scheduler.rb
index 42cf14128..b02bac883 100644
--- a/app/workers/scheduler/feed_cleanup_scheduler.rb
+++ b/app/workers/scheduler/feed_cleanup_scheduler.rb
@@ -3,6 +3,8 @@
class Scheduler::FeedCleanupScheduler
include Sidekiq::Worker
+ sidekiq_options unique: :until_executed
+
def perform
clean_home_feeds!
clean_list_feeds!
diff --git a/app/workers/scheduler/ip_cleanup_scheduler.rb b/app/workers/scheduler/ip_cleanup_scheduler.rb
index 613a5e336..6bb93df7d 100644
--- a/app/workers/scheduler/ip_cleanup_scheduler.rb
+++ b/app/workers/scheduler/ip_cleanup_scheduler.rb
@@ -5,6 +5,8 @@ class Scheduler::IpCleanupScheduler
RETENTION_PERIOD = 1.year
+ sidekiq_options unique: :until_executed
+
def perform
time_ago = RETENTION_PERIOD.ago
SessionActivation.where('updated_at < ?', time_ago).destroy_all
diff --git a/app/workers/scheduler/media_cleanup_scheduler.rb b/app/workers/scheduler/media_cleanup_scheduler.rb
index c35686fcb..a27e02953 100644
--- a/app/workers/scheduler/media_cleanup_scheduler.rb
+++ b/app/workers/scheduler/media_cleanup_scheduler.rb
@@ -3,6 +3,8 @@
class Scheduler::MediaCleanupScheduler
include Sidekiq::Worker
+ sidekiq_options unique: :until_executed
+
def perform
unattached_media.find_each(&:destroy)
end
diff --git a/app/workers/scheduler/subscriptions_cleanup_scheduler.rb b/app/workers/scheduler/subscriptions_cleanup_scheduler.rb
index af2ae3120..06ba66205 100644
--- a/app/workers/scheduler/subscriptions_cleanup_scheduler.rb
+++ b/app/workers/scheduler/subscriptions_cleanup_scheduler.rb
@@ -3,6 +3,8 @@
class Scheduler::SubscriptionsCleanupScheduler
include Sidekiq::Worker
+ sidekiq_options unique: :until_executed
+
def perform
Subscription.expired.in_batches.delete_all
end
diff --git a/app/workers/scheduler/subscriptions_scheduler.rb b/app/workers/scheduler/subscriptions_scheduler.rb
index dc16e85c2..4b0959af2 100644
--- a/app/workers/scheduler/subscriptions_scheduler.rb
+++ b/app/workers/scheduler/subscriptions_scheduler.rb
@@ -3,6 +3,8 @@
class Scheduler::SubscriptionsScheduler
include Sidekiq::Worker
+ sidekiq_options unique: :until_executed
+
def perform
Pubsubhubbub::SubscribeWorker.push_bulk(expiring_accounts.pluck(:id))
end
diff --git a/app/workers/scheduler/user_cleanup_scheduler.rb b/app/workers/scheduler/user_cleanup_scheduler.rb
index 245536cea..dde195bff 100644
--- a/app/workers/scheduler/user_cleanup_scheduler.rb
+++ b/app/workers/scheduler/user_cleanup_scheduler.rb
@@ -3,6 +3,8 @@
class Scheduler::UserCleanupScheduler
include Sidekiq::Worker
+ sidekiq_options unique: :until_executed
+
def perform
User.where('confirmed_at is NULL AND confirmation_sent_at <= ?', 2.days.ago).find_in_batches do |batch|
Account.where(id: batch.map(&:account_id)).delete_all
From 0d1d9b9a33149adbcdd063177eae9944462c91ff Mon Sep 17 00:00:00 2001
From: mayaeh
Date: Sun, 19 Aug 2018 22:51:57 +0900
Subject: [PATCH 121/196] Fix report text color. (#8288)
---
app/javascript/styles/mastodon/components.scss | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss
index 7c58828fd..399e3a394 100644
--- a/app/javascript/styles/mastodon/components.scss
+++ b/app/javascript/styles/mastodon/components.scss
@@ -4176,6 +4176,10 @@ a.status-card {
color: $highlight-text-color;
}
+ .status__content p {
+ color: $inverted-text-color;
+ }
+
@media screen and (max-width: 480px) {
max-height: 10vh;
}
From 9e75aa30cd229c45fd95e00a93416221c83a4fd7 Mon Sep 17 00:00:00 2001
From: abcang
Date: Sun, 19 Aug 2018 22:52:38 +0900
Subject: [PATCH 122/196] Unuse ActiveRecord::Base#cache_key (#8185)
* Unuse ActiveRecord::Base#cache_key
* Enable cache_versioning
* Call cache_collection
---
app/controllers/accounts_controller.rb | 2 +-
app/controllers/api/v1/statuses_controller.rb | 3 +--
app/controllers/application_controller.rb | 13 ++++---------
app/controllers/emojis_controller.rb | 2 +-
app/controllers/statuses_controller.rb | 4 ++--
app/models/status.rb | 2 --
6 files changed, 9 insertions(+), 17 deletions(-)
diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb
index e5a7301ee..f788a9078 100644
--- a/app/controllers/accounts_controller.rb
+++ b/app/controllers/accounts_controller.rb
@@ -42,7 +42,7 @@ class AccountsController < ApplicationController
format.json do
skip_session!
- render_cached_json(['activitypub', 'actor', @account.cache_key], content_type: 'application/activity+json') do
+ render_cached_json(['activitypub', 'actor', @account], content_type: 'application/activity+json') do
ActiveModelSerializers::SerializableResource.new(@account, serializer: ActivityPub::ActorSerializer, adapter: ActivityPub::Adapter)
end
end
diff --git a/app/controllers/api/v1/statuses_controller.rb b/app/controllers/api/v1/statuses_controller.rb
index c6925d462..49a52f7a6 100644
--- a/app/controllers/api/v1/statuses_controller.rb
+++ b/app/controllers/api/v1/statuses_controller.rb
@@ -17,8 +17,7 @@ class Api::V1::StatusesController < Api::BaseController
CONTEXT_LIMIT = 4_096
def show
- cached = Rails.cache.read(@status.cache_key)
- @status = cached unless cached.nil?
+ @status = cache_collection([@status], Status).first
render json: @status, serializer: REST::StatusSerializer
end
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 29ba6cad6..eafe27047 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -103,12 +103,8 @@ class ApplicationController < ActionController::Base
return raw unless klass.respond_to?(:with_includes)
raw = raw.cache_ids.to_a if raw.is_a?(ActiveRecord::Relation)
- uncached_ids = []
- cached_keys_with_value = Rails.cache.read_multi(*raw.map(&:cache_key))
-
- raw.each do |item|
- uncached_ids << item.id unless cached_keys_with_value.key?(item.cache_key)
- end
+ cached_keys_with_value = Rails.cache.read_multi(*raw).transform_keys(&:id)
+ uncached_ids = raw.map(&:id) - cached_keys_with_value.keys
klass.reload_stale_associations!(cached_keys_with_value.values) if klass.respond_to?(:reload_stale_associations!)
@@ -116,11 +112,11 @@ class ApplicationController < ActionController::Base
uncached = klass.where(id: uncached_ids).with_includes.map { |item| [item.id, item] }.to_h
uncached.each_value do |item|
- Rails.cache.write(item.cache_key, item)
+ Rails.cache.write(item, item)
end
end
- raw.map { |item| cached_keys_with_value[item.cache_key] || uncached[item.id] }.compact
+ raw.map { |item| cached_keys_with_value[item.id] || uncached[item.id] }.compact
end
def respond_with_error(code)
@@ -135,7 +131,6 @@ class ApplicationController < ActionController::Base
def render_cached_json(cache_key, **options)
options[:expires_in] ||= 3.minutes
- cache_key = cache_key.join(':') if cache_key.is_a?(Enumerable)
cache_public = options.key?(:public) ? options.delete(:public) : true
content_type = options.delete(:content_type) || 'application/json'
diff --git a/app/controllers/emojis_controller.rb b/app/controllers/emojis_controller.rb
index c9725ccc0..5d306e600 100644
--- a/app/controllers/emojis_controller.rb
+++ b/app/controllers/emojis_controller.rb
@@ -9,7 +9,7 @@ class EmojisController < ApplicationController
format.json do
skip_session!
- render_cached_json(['activitypub', 'emoji', @emoji.cache_key], content_type: 'application/activity+json') do
+ render_cached_json(['activitypub', 'emoji', @emoji], content_type: 'application/activity+json') do
ActiveModelSerializers::SerializableResource.new(@emoji, serializer: ActivityPub::EmojiSerializer, adapter: ActivityPub::Adapter)
end
end
diff --git a/app/controllers/statuses_controller.rb b/app/controllers/statuses_controller.rb
index 819fcfc70..24824aabb 100644
--- a/app/controllers/statuses_controller.rb
+++ b/app/controllers/statuses_controller.rb
@@ -33,7 +33,7 @@ class StatusesController < ApplicationController
format.json do
skip_session! unless @stream_entry.hidden?
- render_cached_json(['activitypub', 'note', @status.cache_key], content_type: 'application/activity+json', public: !@stream_entry.hidden?) do
+ render_cached_json(['activitypub', 'note', @status], content_type: 'application/activity+json', public: !@stream_entry.hidden?) do
ActiveModelSerializers::SerializableResource.new(@status, serializer: ActivityPub::NoteSerializer, adapter: ActivityPub::Adapter)
end
end
@@ -43,7 +43,7 @@ class StatusesController < ApplicationController
def activity
skip_session!
- render_cached_json(['activitypub', 'activity', @status.cache_key], content_type: 'application/activity+json', public: !@stream_entry.hidden?) do
+ render_cached_json(['activitypub', 'activity', @status], content_type: 'application/activity+json', public: !@stream_entry.hidden?) do
ActiveModelSerializers::SerializableResource.new(@status, serializer: ActivityPub::ActivitySerializer, adapter: ActivityPub::Adapter)
end
end
diff --git a/app/models/status.rb b/app/models/status.rb
index 533d12354..6ba7b7a50 100644
--- a/app/models/status.rb
+++ b/app/models/status.rb
@@ -24,8 +24,6 @@
#
class Status < ApplicationRecord
- self.cache_versioning = false
-
include Paginable
include Streamable
include Cacheable
From 62cd0974142c4b1162205859c3bef7dfd3aa7710 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marcin=20Miko=C5=82ajczak?=
Date: Sun, 19 Aug 2018 17:05:36 +0200
Subject: [PATCH 123/196] i18n: Update Polish translation (#8290)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Marcin Mikołajczak
---
config/locales/pl.yml | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/config/locales/pl.yml b/config/locales/pl.yml
index 09e9e87f7..168975363 100644
--- a/config/locales/pl.yml
+++ b/config/locales/pl.yml
@@ -6,6 +6,7 @@ pl:
about_this: O tej instancji
administered_by: 'Administrowana przez:'
api: API
+ apps: Aplikacje
closed_registrations: Rejestracja na tej instancji jest obecnie zamknięta. Możesz jednak zarejestrować się na innej instancji, uzyskując dostęp do tej samej sieci.
contact: Kontakt
contact_missing: Nie ustawiono
@@ -281,6 +282,7 @@ pl:
search: Szukaj
title: Znane instancje
invites:
+ deactivate_all: Unieważnij wszystkie
filter:
all: Wszystkie
available: Dostępne
@@ -662,11 +664,14 @@ pl:
publishing: Publikowanie
web: Sieć
remote_follow:
- acct: Podaj swój adres (nazwa@domena), z którego chcesz śledzić
+ acct: Podaj swój adres (nazwa@domena), z którego chcesz wykonać działanie
missing_resource: Nie udało się znaleźć adresu przekierowania z Twojej domeny
no_account_html: Nie masz konta? Możesz zarejestrować się tutaj
proceed: Śledź
prompt: 'Zamierzasz śledzić:'
+ remote_interaction:
+ proceed: Przejdź do interakcji
+ prompt: 'Chcesz dokonać interakcji z tym wpisem:'
remote_unfollow:
error: Błąd
title: Tytuł
@@ -754,6 +759,7 @@ pl:
private: Nie możesz przypiąć niepublicznego wpisu
reblog: Nie możesz przypiąć podbicia wpisu
show_more: Pokaż więcej
+ sign_in_to_participate: Zaloguj się, aby udzielić się w tej konwersacji
title: '%{name}: "%{quote}"'
visibilities:
private: Tylko dla śledzących
From 8fe1f8d4cecb9f2f749c1e1e77b2439dd640ddc5 Mon Sep 17 00:00:00 2001
From: cpsdqs
Date: Sun, 19 Aug 2018 17:11:12 +0200
Subject: [PATCH 124/196] Make dropdown animations respect their placement
(#8292)
* Make dropdown animations respect their placement
Also fix the corner radius on the privacy dropdown button when using top placement
* Fix code style issue
---
.../mastodon/components/dropdown_menu.js | 2 +-
.../compose/components/privacy_dropdown.js | 8 +++--
.../styles/mastodon/components.scss | 30 +++++++++++++++++--
3 files changed, 34 insertions(+), 6 deletions(-)
diff --git a/app/javascript/mastodon/components/dropdown_menu.js b/app/javascript/mastodon/components/dropdown_menu.js
index 0a6e7c627..e83f724e9 100644
--- a/app/javascript/mastodon/components/dropdown_menu.js
+++ b/app/javascript/mastodon/components/dropdown_menu.js
@@ -137,7 +137,7 @@ class DropdownMenu extends React.PureComponent {
// It should not be transformed when mounting because the resulting
// size will be used to determine the coordinate of the menu by
// react-overlays
-
+
diff --git a/app/javascript/mastodon/features/compose/components/privacy_dropdown.js b/app/javascript/mastodon/features/compose/components/privacy_dropdown.js
index a772c1c95..e19778fd2 100644
--- a/app/javascript/mastodon/features/compose/components/privacy_dropdown.js
+++ b/app/javascript/mastodon/features/compose/components/privacy_dropdown.js
@@ -28,6 +28,7 @@ class PrivacyDropdownMenu extends React.PureComponent {
style: PropTypes.object,
items: PropTypes.array.isRequired,
value: PropTypes.string.isRequired,
+ placement: PropTypes.string.isRequired,
onClose: PropTypes.func.isRequired,
onChange: PropTypes.func.isRequired,
};
@@ -119,7 +120,7 @@ class PrivacyDropdownMenu extends React.PureComponent {
render () {
const { mounted } = this.state;
- const { style, items, value } = this.props;
+ const { style, items, placement, value } = this.props;
return (
@@ -127,7 +128,7 @@ class PrivacyDropdownMenu extends React.PureComponent {
// It should not be transformed when mounting because the resulting
// size will be used to determine the coordinate of the menu by
// react-overlays
-
+
{items.map(item => (
@@ -226,7 +227,7 @@ export default class PrivacyDropdown extends React.PureComponent {
const valueOption = this.options.find(item => item.value === value);
return (
-
+
diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss
index 399e3a394..b25a9df31 100644
--- a/app/javascript/styles/mastodon/components.scss
+++ b/app/javascript/styles/mastodon/components.scss
@@ -230,7 +230,6 @@
.dropdown-menu {
position: absolute;
- transform-origin: 50% 0;
}
.invisible {
@@ -1634,6 +1633,22 @@ a.account__display-name {
ul {
list-style: none;
}
+
+ &.left {
+ transform-origin: 100% 50%;
+ }
+
+ &.top {
+ transform-origin: 50% 100%;
+ }
+
+ &.bottom {
+ transform-origin: 50% 0;
+ }
+
+ &.right {
+ transform-origin: 0 50%;
+ }
}
.dropdown-menu__arrow {
@@ -3300,7 +3315,14 @@ a.status-card {
border-radius: 4px;
margin-left: 40px;
overflow: hidden;
- transform-origin: 50% 0;
+
+ &.top {
+ transform-origin: 50% 100%;
+ }
+
+ &.bottom {
+ transform-origin: 50% 0;
+ }
}
.privacy-dropdown__option {
@@ -3372,6 +3394,10 @@ a.status-card {
}
}
+ &.top .privacy-dropdown__value {
+ border-radius: 0 0 4px 4px;
+ }
+
.privacy-dropdown__dropdown {
display: block;
box-shadow: 2px 4px 6px rgba($base-shadow-color, 0.1);
From 28163528e5655bba164ebe5c4d1a1deb1056c468 Mon Sep 17 00:00:00 2001
From: ThibG
Date: Sun, 19 Aug 2018 18:44:18 +0200
Subject: [PATCH 125/196] Don't filter own toots (fixes #8289) (#8298)
---
app/javascript/mastodon/selectors/index.js | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/app/javascript/mastodon/selectors/index.js b/app/javascript/mastodon/selectors/index.js
index 106198f74..70f08a8eb 100644
--- a/app/javascript/mastodon/selectors/index.js
+++ b/app/javascript/mastodon/selectors/index.js
@@ -1,5 +1,6 @@
import { createSelector } from 'reselect';
import { List as ImmutableList } from 'immutable';
+import { me } from '../initial_state';
const getAccountBase = (state, id) => state.getIn(['accounts', id], null);
const getAccountCounters = (state, id) => state.getIn(['accounts_counters', id], null);
@@ -83,7 +84,7 @@ export const makeGetStatus = () => {
statusReblog = null;
}
- const regex = regexFromFilters(filters);
+ const regex = (accountReblog || accountBase).get('id') !== me && regexFromFilters(filters);
const filtered = regex && regex.test(statusBase.get('reblog') ? statusReblog.get('search_index') : statusBase.get('search_index'));
return statusBase.withMutations(map => {
From 1d1e0171ec52806ff42e2cafa67b1c68afe1f7bb Mon Sep 17 00:00:00 2001
From: Oskari Noppa
Date: Sun, 19 Aug 2018 20:16:40 +0300
Subject: [PATCH 126/196] Fix a variable for a Finnish translation (#8299)
---
config/locales/fi.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/config/locales/fi.yml b/config/locales/fi.yml
index 7fa2bc8de..96339e35e 100644
--- a/config/locales/fi.yml
+++ b/config/locales/fi.yml
@@ -725,7 +725,7 @@ fi:
tip_local_timeline: Paikallinen aikajana näyttää instanssin %{instance} käyttäjien julkaisut. He ovat naapureitasi!
tip_mobile_webapp: Jos voit lisätä Mastodonin mobiiliselaimen kautta aloitusnäytöllesi, voit vastaanottaa push-ilmoituksia. Toiminta vastaa monin tavoin tavanomaista sovellusta!
tips: Vinkkejä
- title: Tervetuloa mukaan, %name}!
+ title: Tervetuloa mukaan, %{name}!
users:
invalid_email: Virheellinen sähköpostiosoite
invalid_otp_token: Virheellinen kaksivaiheisen todentamisen koodi
From 25f6f41052b52a765a74e9e16d7411750ae46221 Mon Sep 17 00:00:00 2001
From: Annika Backstrom
Date: Sun, 19 Aug 2018 21:44:16 -0400
Subject: [PATCH 127/196] Add hotkey for follow requests (#8307)
---
app/javascript/mastodon/features/ui/index.js | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/app/javascript/mastodon/features/ui/index.js b/app/javascript/mastodon/features/ui/index.js
index 67484fc63..34d52a7d2 100644
--- a/app/javascript/mastodon/features/ui/index.js
+++ b/app/javascript/mastodon/features/ui/index.js
@@ -89,6 +89,7 @@ const keyMap = {
goToProfile: 'g u',
goToBlocked: 'g b',
goToMuted: 'g m',
+ goToRequests: 'g r',
toggleHidden: 'x',
};
@@ -427,6 +428,10 @@ export default class UI extends React.PureComponent {
this.context.router.history.push('/mutes');
}
+ handleHotkeyGoToRequests = () => {
+ this.context.router.history.push('/follow_requests');
+ }
+
render () {
const { draggingOver } = this.state;
const { children, isComposing, location, dropdownMenuIsOpen } = this.props;
@@ -449,6 +454,7 @@ export default class UI extends React.PureComponent {
goToProfile: this.handleHotkeyGoToProfile,
goToBlocked: this.handleHotkeyGoToBlocked,
goToMuted: this.handleHotkeyGoToMuted,
+ goToRequests: this.handleHotkeyGoToRequests,
};
return (
From 6226aa83d7eb0e03cc7d577eee1fe129cf0f36fc Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Mon, 20 Aug 2018 13:28:05 +0200
Subject: [PATCH 128/196] Increase reach of Delete->Actor activities (#8305)
Fix #7316
---
app/services/suspend_account_service.rb | 8 +++++---
spec/services/suspend_account_service_spec.rb | 13 +++++++++++++
2 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/app/services/suspend_account_service.rb b/app/services/suspend_account_service.rb
index 0a98f5fb9..8fc79b8ad 100644
--- a/app/services/suspend_account_service.rb
+++ b/app/services/suspend_account_service.rb
@@ -23,9 +23,7 @@ class SuspendAccountService < BaseService
def purge_content!
if @account.local?
- ActivityPub::RawDistributionWorker.perform_async(delete_actor_json, @account.id)
-
- ActivityPub::DeliveryWorker.push_bulk(Relay.enabled.pluck(:inbox_url)) do |inbox_url|
+ ActivityPub::DeliveryWorker.push_bulk(delivery_inboxes) do |inbox_url|
[delete_actor_json, @account.id, inbox_url]
end
end
@@ -75,4 +73,8 @@ class SuspendAccountService < BaseService
@delete_actor_json = Oj.dump(ActivityPub::LinkedDataSignature.new(payload).sign!(@account))
end
+
+ def delivery_inboxes
+ Account.inboxes + Relay.enabled.pluck(:inbox_url)
+ end
end
diff --git a/spec/services/suspend_account_service_spec.rb b/spec/services/suspend_account_service_spec.rb
index fd303a9d5..8a5bd3301 100644
--- a/spec/services/suspend_account_service_spec.rb
+++ b/spec/services/suspend_account_service_spec.rb
@@ -2,6 +2,11 @@ require 'rails_helper'
RSpec.describe SuspendAccountService, type: :service do
describe '#call' do
+ before do
+ stub_request(:post, "https://alice.com/inbox").to_return(status: 201)
+ stub_request(:post, "https://bob.com/inbox").to_return(status: 201)
+ end
+
subject do
-> { described_class.new.call(account) }
end
@@ -14,6 +19,8 @@ RSpec.describe SuspendAccountService, type: :service do
let!(:active_relationship) { Fabricate(:follow, account: account) }
let!(:passive_relationship) { Fabricate(:follow, target_account: account) }
let!(:subscription) { Fabricate(:subscription, account: account) }
+ let!(:remote_alice) { Fabricate(:account, inbox_url: 'https://alice.com/inbox', protocol: :activitypub) }
+ let!(:remote_bob) { Fabricate(:account, inbox_url: 'https://bob.com/inbox', protocol: :activitypub) }
it 'deletes associated records' do
is_expected.to change {
@@ -29,5 +36,11 @@ RSpec.describe SuspendAccountService, type: :service do
].map(&:count)
}.from([1, 1, 1, 1, 1, 1, 1, 1]).to([0, 0, 0, 0, 0, 0, 0, 0])
end
+
+ it 'sends a delete actor activity to all known inboxes' do
+ subject.call
+ expect(a_request(:post, "https://alice.com/inbox")).to have_been_made.once
+ expect(a_request(:post, "https://bob.com/inbox")).to have_been_made.once
+ end
end
end
From 5fbf12bbb881181eb64c4d3e1b5f49b475572dc5 Mon Sep 17 00:00:00 2001
From: ThibG
Date: Mon, 20 Aug 2018 13:32:43 +0200
Subject: [PATCH 129/196] Skip pagination logic entirely for pinned toots
(fixes #8302) (#8310)
---
app/javascript/mastodon/actions/timelines.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/javascript/mastodon/actions/timelines.js b/app/javascript/mastodon/actions/timelines.js
index 11a199db6..e8fd441e1 100644
--- a/app/javascript/mastodon/actions/timelines.js
+++ b/app/javascript/mastodon/actions/timelines.js
@@ -55,7 +55,7 @@ export function expandTimeline(timelineId, path, params = {}, done = noOp) {
return;
}
- if (!params.max_id && timeline.get('items', ImmutableList()).size > 0) {
+ if (!params.max_id && !params.pinned && timeline.get('items', ImmutableList()).size > 0) {
params.since_id = timeline.getIn(['items', 0]);
}
From b34d6238cbd2be08e5df90b1dd99f266948fab8b Mon Sep 17 00:00:00 2001
From: ThibG
Date: Mon, 20 Aug 2018 18:46:04 +0200
Subject: [PATCH 130/196] Add API endpoint to list featured accounts (fixes
#8315) (#8317)
---
.../api/v1/endorsements_controller.rb | 72 +++++++++++++++++++
app/models/account_pin.rb | 1 +
config/routes.rb | 15 ++--
3 files changed, 81 insertions(+), 7 deletions(-)
create mode 100644 app/controllers/api/v1/endorsements_controller.rb
diff --git a/app/controllers/api/v1/endorsements_controller.rb b/app/controllers/api/v1/endorsements_controller.rb
new file mode 100644
index 000000000..0f04b488f
--- /dev/null
+++ b/app/controllers/api/v1/endorsements_controller.rb
@@ -0,0 +1,72 @@
+# frozen_string_literal: true
+
+class Api::V1::EndorsementsController < Api::BaseController
+ before_action -> { doorkeeper_authorize! :read, :'read:accounts' }
+ before_action :require_user!
+ after_action :insert_pagination_headers
+
+ respond_to :json
+
+ def index
+ @accounts = load_accounts
+ render json: @accounts, each_serializer: REST::AccountSerializer
+ end
+
+ private
+
+ def load_accounts
+ if unlimited?
+ endorsed_accounts.all
+ else
+ endorsed_accounts.paginate_by_max_id(
+ limit_param(DEFAULT_ACCOUNTS_LIMIT),
+ params[:max_id],
+ params[:since_id]
+ )
+ end
+ end
+
+ def endorsed_accounts
+ current_account.endorsed_accounts
+ end
+
+ def insert_pagination_headers
+ set_pagination_headers(next_path, prev_path)
+ end
+
+ def next_path
+ return if unlimited?
+
+ if records_continue?
+ api_v1_endorsements_url pagination_params(max_id: pagination_max_id)
+ end
+ end
+
+ def prev_path
+ return if unlimited?
+
+ unless @accounts.empty?
+ api_v1_endorsements_url pagination_params(since_id: pagination_since_id)
+ end
+ end
+
+ def pagination_max_id
+ @accounts.last.id
+ end
+
+ def pagination_since_id
+ @accounts.first.id
+ end
+
+ def records_continue?
+ @accounts.size == limit_param(DEFAULT_ACCOUNTS_LIMIT)
+ end
+
+ def pagination_params(core_params)
+ params.slice(:limit).permit(:limit).merge(core_params)
+ end
+
+ def unlimited?
+ params[:limit] == '0'
+ end
+end
diff --git a/app/models/account_pin.rb b/app/models/account_pin.rb
index 9a21c3405..b51d3d4cd 100644
--- a/app/models/account_pin.rb
+++ b/app/models/account_pin.rb
@@ -11,6 +11,7 @@
#
class AccountPin < ApplicationRecord
+ include Paginable
include RelationshipCacheable
belongs_to :account
diff --git a/config/routes.rb b/config/routes.rb
index a8716aae5..da7cb8061 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -261,13 +261,14 @@ Rails.application.routes.draw do
get '/search', to: 'search#index', as: :search
- resources :follows, only: [:create]
- resources :media, only: [:create, :update]
- resources :blocks, only: [:index]
- resources :mutes, only: [:index]
- resources :favourites, only: [:index]
- resources :reports, only: [:index, :create]
- resources :filters, only: [:index, :create, :show, :update, :destroy]
+ resources :follows, only: [:create]
+ resources :media, only: [:create, :update]
+ resources :blocks, only: [:index]
+ resources :mutes, only: [:index]
+ resources :favourites, only: [:index]
+ resources :reports, only: [:index, :create]
+ resources :filters, only: [:index, :create, :show, :update, :destroy]
+ resources :endorsements, only: [:index]
namespace :apps do
get :verify_credentials, to: 'credentials#show'
From 8ac5e651e1f6cdf4fdd9e1092abbf02e48b6bbc9 Mon Sep 17 00:00:00 2001
From: ThibG
Date: Mon, 20 Aug 2018 22:42:02 +0200
Subject: [PATCH 131/196] Upgrade doorkeeper to 4.4.2 (#8321)
---
Gemfile | 2 +-
Gemfile.lock | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/Gemfile b/Gemfile
index 5a6afe9ad..31c3c8086 100644
--- a/Gemfile
+++ b/Gemfile
@@ -42,7 +42,7 @@ gem 'omniauth-cas', '~> 1.1'
gem 'omniauth-saml', '~> 1.10'
gem 'omniauth', '~> 1.2'
-gem 'doorkeeper', '~> 4.2', '< 4.3'
+gem 'doorkeeper', '~> 4.4'
gem 'fast_blank', '~> 1.0'
gem 'fastimage'
gem 'goldfinger', '~> 2.1'
diff --git a/Gemfile.lock b/Gemfile.lock
index 32851c67b..fbffc0c2d 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -181,7 +181,7 @@ GEM
docile (1.3.0)
domain_name (0.5.20180417)
unf (>= 0.0.5, < 1.0.0)
- doorkeeper (4.2.6)
+ doorkeeper (4.4.2)
railties (>= 4.2)
dotenv (2.2.2)
dotenv-rails (2.2.2)
@@ -672,7 +672,7 @@ DEPENDENCIES
devise (~> 4.4)
devise-two-factor (~> 3.0)
devise_pam_authenticatable2 (~> 9.1)
- doorkeeper (~> 4.2, < 4.3)
+ doorkeeper (~> 4.4)
dotenv-rails (~> 2.2, < 2.3)
fabrication (~> 2.20)
faker (~> 1.8)
From 6a0d4d36adb3b2efbd145a40248ee40bdbbb163f Mon Sep 17 00:00:00 2001
From: NecroTechno
Date: Mon, 20 Aug 2018 22:58:57 +0100
Subject: [PATCH 132/196] reorder simple form ul to list vertically (fixes
#8236) (#8322)
* reorder simple form ul to list vertically (fixes #8236)
* remove browser specific prefixes
---
app/javascript/styles/mastodon/forms.scss | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/app/javascript/styles/mastodon/forms.scss b/app/javascript/styles/mastodon/forms.scss
index 375c7b64b..22dbfa8cf 100644
--- a/app/javascript/styles/mastodon/forms.scss
+++ b/app/javascript/styles/mastodon/forms.scss
@@ -154,9 +154,8 @@ code {
margin-bottom: 15px;
}
- li {
- float: left;
- width: 50%;
+ ul {
+ columns: 2;
}
}
From 83746b63646088396232a348f4024b101f39c78a Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Tue, 21 Aug 2018 02:49:51 +0200
Subject: [PATCH 133/196] Remove annoying Notification#cache_ids scope warning
(#8333)
---
app/models/notification.rb | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/app/models/notification.rb b/app/models/notification.rb
index 4f6ec8e8e..b9bec0808 100644
--- a/app/models/notification.rb
+++ b/app/models/notification.rb
@@ -39,8 +39,6 @@ class Notification < ApplicationRecord
validates :account_id, uniqueness: { scope: [:activity_type, :activity_id] }
validates :activity_type, inclusion: { in: TYPE_CLASS_MAP.values }
- scope :cache_ids, -> { select(:id, :updated_at, :activity_type, :activity_id) }
-
scope :browserable, ->(exclude_types = []) {
types = TYPE_CLASS_MAP.values - activity_types_from_types(exclude_types + [:follow_request])
where(activity_type: types)
@@ -68,6 +66,10 @@ class Notification < ApplicationRecord
end
class << self
+ def cache_ids
+ select(:id, :updated_at, :activity_type, :activity_id)
+ end
+
def reload_stale_associations!(cached_items)
account_ids = (cached_items.map(&:from_account_id) + cached_items.map { |item| item.target_status&.account_id }.compact).uniq
From d98de8ada743886c3cd48b2ad942d46b805af7a9 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Tue, 21 Aug 2018 12:25:50 +0200
Subject: [PATCH 134/196] Get rid of all batch order warnings (#8334)
---
app/models/form/status_batch.rb | 4 ++--
app/services/after_block_domain_from_account_service.rb | 4 ++--
app/services/backup_service.rb | 4 ++--
app/services/block_domain_service.rb | 6 +++---
app/services/remove_status_service.rb | 4 ++--
app/workers/refollow_worker.rb | 2 +-
app/workers/scheduler/backup_cleanup_scheduler.rb | 2 +-
app/workers/scheduler/email_scheduler.rb | 2 +-
app/workers/scheduler/user_cleanup_scheduler.rb | 2 +-
lib/tasks/mastodon.rake | 8 ++++----
10 files changed, 19 insertions(+), 19 deletions(-)
diff --git a/app/models/form/status_batch.rb b/app/models/form/status_batch.rb
index 4f08a3049..8f5fd1fa2 100644
--- a/app/models/form/status_batch.rb
+++ b/app/models/form/status_batch.rb
@@ -23,7 +23,7 @@ class Form::StatusBatch
media_attached_status_ids = MediaAttachment.where(status_id: status_ids).pluck(:status_id)
ApplicationRecord.transaction do
- Status.where(id: media_attached_status_ids).find_each do |status|
+ Status.where(id: media_attached_status_ids).reorder(nil).find_each do |status|
status.update!(sensitive: sensitive)
log_action :update, status
end
@@ -35,7 +35,7 @@ class Form::StatusBatch
end
def delete_statuses
- Status.where(id: status_ids).find_each do |status|
+ Status.where(id: status_ids).reorder(nil).find_each do |status|
RemovalWorker.perform_async(status.id)
log_action :destroy, status
end
diff --git a/app/services/after_block_domain_from_account_service.rb b/app/services/after_block_domain_from_account_service.rb
index 0f1a8505d..56cc819fb 100644
--- a/app/services/after_block_domain_from_account_service.rb
+++ b/app/services/after_block_domain_from_account_service.rb
@@ -15,13 +15,13 @@ class AfterBlockDomainFromAccountService < BaseService
private
def reject_existing_followers!
- @account.passive_relationships.where(account: Account.where(domain: @domain)).includes(:account).find_each do |follow|
+ @account.passive_relationships.where(account: Account.where(domain: @domain)).includes(:account).reorder(nil).find_each do |follow|
reject_follow!(follow)
end
end
def reject_pending_follow_requests!
- FollowRequest.where(target_account: @account).where(account: Account.where(domain: @domain)).includes(:account).find_each do |follow_request|
+ FollowRequest.where(target_account: @account).where(account: Account.where(domain: @domain)).includes(:account).reorder(nil).find_each do |follow_request|
reject_follow!(follow_request)
end
end
diff --git a/app/services/backup_service.rb b/app/services/backup_service.rb
index 8492c1117..da7db6462 100644
--- a/app/services/backup_service.rb
+++ b/app/services/backup_service.rb
@@ -18,7 +18,7 @@ class BackupService < BaseService
def build_json!
@collection = serialize(collection_presenter, ActivityPub::CollectionSerializer)
- account.statuses.with_includes.find_in_batches do |statuses|
+ account.statuses.with_includes.reorder(nil).find_in_batches do |statuses|
statuses.each do |status|
item = serialize(status, ActivityPub::ActivitySerializer)
item.delete(:'@context')
@@ -60,7 +60,7 @@ class BackupService < BaseService
end
def dump_media_attachments!(tar)
- MediaAttachment.attached.where(account: account).find_in_batches do |media_attachments|
+ MediaAttachment.attached.where(account: account).reorder(nil).find_in_batches do |media_attachments|
media_attachments.each do |m|
download_to_tar(tar, m.file, m.file.path)
end
diff --git a/app/services/block_domain_service.rb b/app/services/block_domain_service.rb
index d082de40b..a1fe93665 100644
--- a/app/services/block_domain_service.rb
+++ b/app/services/block_domain_service.rb
@@ -43,14 +43,14 @@ class BlockDomainService < BaseService
end
def suspend_accounts!
- blocked_domain_accounts.where(suspended: false).find_each do |account|
+ blocked_domain_accounts.where(suspended: false).reorder(nil).find_each do |account|
UnsubscribeService.new.call(account) if account.subscribed?
SuspendAccountService.new.call(account)
end
end
def clear_account_images!
- blocked_domain_accounts.find_each do |account|
+ blocked_domain_accounts.reorder(nil).find_each do |account|
account.avatar.destroy if account.avatar.exists?
account.header.destroy if account.header.exists?
account.save
@@ -58,7 +58,7 @@ class BlockDomainService < BaseService
end
def clear_account_attachments!
- media_from_blocked_domain.find_each do |attachment|
+ media_from_blocked_domain.reorder(nil).find_each do |attachment|
@affected_status_ids << attachment.status_id if attachment.status_id.present?
attachment.file.destroy if attachment.file.exists?
diff --git a/app/services/remove_status_service.rb b/app/services/remove_status_service.rb
index fb889140b..1a53093b8 100644
--- a/app/services/remove_status_service.rb
+++ b/app/services/remove_status_service.rb
@@ -43,13 +43,13 @@ class RemoveStatusService < BaseService
end
def remove_from_followers
- @account.followers_for_local_distribution.find_each do |follower|
+ @account.followers_for_local_distribution.reorder(nil).find_each do |follower|
FeedManager.instance.unpush_from_home(follower, @status)
end
end
def remove_from_lists
- @account.lists_for_local_distribution.select(:id, :account_id).find_each do |list|
+ @account.lists_for_local_distribution.select(:id, :account_id).reorder(nil).find_each do |list|
FeedManager.instance.unpush_from_list(list, @status)
end
end
diff --git a/app/workers/refollow_worker.rb b/app/workers/refollow_worker.rb
index 66bcd27c3..12f2bf671 100644
--- a/app/workers/refollow_worker.rb
+++ b/app/workers/refollow_worker.rb
@@ -9,7 +9,7 @@ class RefollowWorker
target_account = Account.find(target_account_id)
return unless target_account.protocol == :activitypub
- target_account.followers.where(domain: nil).find_each do |follower|
+ target_account.followers.where(domain: nil).reorder(nil).find_each do |follower|
# Locally unfollow remote account
follower.unfollow!(target_account)
diff --git a/app/workers/scheduler/backup_cleanup_scheduler.rb b/app/workers/scheduler/backup_cleanup_scheduler.rb
index cfdf6f4af..023a77307 100644
--- a/app/workers/scheduler/backup_cleanup_scheduler.rb
+++ b/app/workers/scheduler/backup_cleanup_scheduler.rb
@@ -6,7 +6,7 @@ class Scheduler::BackupCleanupScheduler
sidekiq_options unique: :until_executed
def perform
- old_backups.find_each(&:destroy!)
+ old_backups.reorder(nil).find_each(&:destroy!)
end
private
diff --git a/app/workers/scheduler/email_scheduler.rb b/app/workers/scheduler/email_scheduler.rb
index 1a5a1c826..24117e424 100644
--- a/app/workers/scheduler/email_scheduler.rb
+++ b/app/workers/scheduler/email_scheduler.rb
@@ -6,7 +6,7 @@ class Scheduler::EmailScheduler
sidekiq_options unique: :until_executed
def perform
- eligible_users.find_each do |user|
+ eligible_users.reorder(nil).find_each do |user|
next unless user.allows_digest_emails?
DigestMailerWorker.perform_async(user.id)
end
diff --git a/app/workers/scheduler/user_cleanup_scheduler.rb b/app/workers/scheduler/user_cleanup_scheduler.rb
index dde195bff..626fb1652 100644
--- a/app/workers/scheduler/user_cleanup_scheduler.rb
+++ b/app/workers/scheduler/user_cleanup_scheduler.rb
@@ -6,7 +6,7 @@ class Scheduler::UserCleanupScheduler
sidekiq_options unique: :until_executed
def perform
- User.where('confirmed_at is NULL AND confirmation_sent_at <= ?', 2.days.ago).find_in_batches do |batch|
+ User.where('confirmed_at is NULL AND confirmation_sent_at <= ?', 2.days.ago).reorder(nil).find_in_batches do |batch|
Account.where(id: batch.map(&:account_id)).delete_all
User.where(id: batch.map(&:id)).delete_all
end
diff --git a/lib/tasks/mastodon.rake b/lib/tasks/mastodon.rake
index f693c8b5a..191ce634c 100644
--- a/lib/tasks/mastodon.rake
+++ b/lib/tasks/mastodon.rake
@@ -503,7 +503,7 @@ namespace :mastodon do
desc 'Remove media attachments attributed to silenced accounts'
task remove_silenced: :environment do
nb_media_attachments = 0
- MediaAttachment.where(account: Account.silenced).select(:id).find_in_batches do |media_attachments|
+ MediaAttachment.where(account: Account.silenced).select(:id).reorder(nil).find_in_batches do |media_attachments|
nb_media_attachments += media_attachments.length
Maintenance::DestroyMediaWorker.push_bulk(media_attachments.map(&:id))
end
@@ -515,7 +515,7 @@ namespace :mastodon do
time_ago = ENV.fetch('NUM_DAYS') { 7 }.to_i.days.ago
nb_media_attachments = 0
- MediaAttachment.where.not(remote_url: '').where.not(file_file_name: nil).where('created_at < ?', time_ago).select(:id).find_in_batches do |media_attachments|
+ MediaAttachment.where.not(remote_url: '').where.not(file_file_name: nil).where('created_at < ?', time_ago).select(:id).reorder(nil).find_in_batches do |media_attachments|
nb_media_attachments += media_attachments.length
Maintenance::UncacheMediaWorker.push_bulk(media_attachments.map(&:id))
end
@@ -535,7 +535,7 @@ namespace :mastodon do
accounts = accounts.where(domain: ENV['DOMAIN']) if ENV['DOMAIN'].present?
nb_accounts = 0
- accounts.select(:id).find_in_batches do |accounts_batch|
+ accounts.select(:id).reorder(nil).find_in_batches do |accounts_batch|
nb_accounts += accounts_batch.length
Maintenance::RedownloadAccountMediaWorker.push_bulk(accounts_batch.map(&:id))
end
@@ -570,7 +570,7 @@ namespace :mastodon do
desc 'Generates home timelines for users who logged in in the past two weeks'
task build: :environment do
- User.active.select(:id, :account_id).find_in_batches do |users|
+ User.active.select(:id, :account_id).reorder(nil).find_in_batches do |users|
RegenerationWorker.push_bulk(users.map(&:account_id))
end
end
From f06fa099625e928e5858ea81a20be1eddf6c6fbb Mon Sep 17 00:00:00 2001
From: ThibG
Date: Tue, 21 Aug 2018 17:53:01 +0200
Subject: [PATCH 135/196] Revert to using Paperclip's filesystem storage, and
fix dangling records in remove_remote (#8339)
* Fix uncaching worker
* Revert to using Paperclip's filesystem backend instead of fog-local
fog-local has lots of concurrency issues, causing failure to delete files,
dangling file records, and spurious errors UncacheMediaWorker
---
Gemfile | 1 -
Gemfile.lock | 3 ---
app/workers/maintenance/uncache_media_worker.rb | 2 +-
config/initializers/paperclip.rb | 12 ++++--------
4 files changed, 5 insertions(+), 13 deletions(-)
diff --git a/Gemfile b/Gemfile
index 31c3c8086..516d397a2 100644
--- a/Gemfile
+++ b/Gemfile
@@ -16,7 +16,6 @@ gem 'dotenv-rails', '~> 2.2', '< 2.3'
gem 'aws-sdk-s3', '~> 1.9', require: false
gem 'fog-core', '~> 1.45'
-gem 'fog-local', '~> 0.5', require: false
gem 'fog-openstack', '~> 0.1', require: false
gem 'paperclip', '~> 6.0'
gem 'paperclip-av-transcoder', '~> 0.6'
diff --git a/Gemfile.lock b/Gemfile.lock
index fbffc0c2d..ea0e3f0cd 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -220,8 +220,6 @@ GEM
fog-json (1.0.2)
fog-core (~> 1.0)
multi_json (~> 1.10)
- fog-local (0.5.0)
- fog-core (>= 1.27, < 3.0)
fog-openstack (0.1.25)
fog-core (~> 1.40)
fog-json (>= 1.0)
@@ -679,7 +677,6 @@ DEPENDENCIES
fast_blank (~> 1.0)
fastimage
fog-core (~> 1.45)
- fog-local (~> 0.5)
fog-openstack (~> 0.1)
fuubar (~> 2.2)
goldfinger (~> 2.1)
diff --git a/app/workers/maintenance/uncache_media_worker.rb b/app/workers/maintenance/uncache_media_worker.rb
index f6a51a1b8..2d1a670a7 100644
--- a/app/workers/maintenance/uncache_media_worker.rb
+++ b/app/workers/maintenance/uncache_media_worker.rb
@@ -8,7 +8,7 @@ class Maintenance::UncacheMediaWorker
def perform(media_attachment_id)
media = MediaAttachment.find(media_attachment_id)
- return unless media.file.exists?
+ return if media.file.blank?
media.file.destroy
media.save
diff --git a/config/initializers/paperclip.rb b/config/initializers/paperclip.rb
index c134bc5b8..59ab9b9a1 100644
--- a/config/initializers/paperclip.rb
+++ b/config/initializers/paperclip.rb
@@ -74,14 +74,10 @@ elsif ENV['SWIFT_ENABLED'] == 'true'
fog_public: true
)
else
- require 'fog/local'
-
Paperclip::Attachment.default_options.merge!(
- fog_credentials: {
- provider: 'Local',
- local_root: ENV.fetch('PAPERCLIP_ROOT_PATH') { Rails.root.join('public', 'system') },
- },
- fog_directory: '',
- fog_host: ENV.fetch('PAPERCLIP_ROOT_URL') { '/system' }
+ storage: :filesystem,
+ use_timestamp: true,
+ path: (ENV['PAPERCLIP_ROOT_PATH'] || ':rails_root/public/system') + '/:class/:attachment/:id_partition/:style/:filename',
+ url: (ENV['PAPERCLIP_ROOT_URL'] || '/system') + '/:class/:attachment/:id_partition/:style/:filename',
)
end
From 513cb20b750ea347863a9c4cc6b7f04558268bbe Mon Sep 17 00:00:00 2001
From: Yamagishi Kazutoshi
Date: Wed, 22 Aug 2018 01:38:27 +0900
Subject: [PATCH 136/196] Weblate translations (2018-08-22) (#8346)
* Translated using Weblate (Greek)
Currently translated at 99.8% (667 of 668 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/el/
* Translated using Weblate (Persian)
Currently translated at 100.0% (309 of 309 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/fa/
* Translated using Weblate (Persian)
Currently translated at 99.7% (666 of 668 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/fa/
* Translated using Weblate (Dutch)
Currently translated at 100.0% (668 of 668 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/nl/
* Translated using Weblate (Arabic)
Currently translated at 95.2% (636 of 668 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ar/
* Translated using Weblate (Dutch)
Currently translated at 100.0% (668 of 668 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/nl/
* Translated using Weblate (Portuguese (Brazil))
Currently translated at 99.7% (666 of 668 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/pt_BR/
* Translated using Weblate (Polish)
Currently translated at 99.7% (666 of 668 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/pl/
* Translated using Weblate (Czech)
Currently translated at 99.8% (667 of 668 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/cs/
* Translated using Weblate (Czech)
Currently translated at 100.0% (309 of 309 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/cs/
* Translated using Weblate (French)
Currently translated at 100.0% (309 of 309 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/fr/
* Translated using Weblate (French)
Currently translated at 100.0% (309 of 309 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/fr/
* Translated using Weblate (Galician)
Currently translated at 99.8% (667 of 668 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/gl/
* Translated using Weblate (Occitan)
Currently translated at 99.8% (667 of 668 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/oc/
* Translated using Weblate (Ukrainian)
Currently translated at 96.5% (645 of 668 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/uk/
* Translated using Weblate (Ukrainian)
Currently translated at 69.3% (68 of 98 strings)
Translation: Mastodon/Doorkeeper
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/uk/
* Translated using Weblate (Ukrainian)
Currently translated at 43.9% (36 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/uk/
* Translated using Weblate (Czech)
Currently translated at 99.8% (667 of 668 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/cs/
* Translated using Weblate (Basque)
Currently translated at 100.0% (309 of 309 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/eu/
* Translated using Weblate (Basque)
Currently translated at 98.9% (661 of 668 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/eu/
* Translated using Weblate (Basque)
Currently translated at 97.5% (80 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/eu/
* Translated using Weblate (Czech)
Currently translated at 100.0% (309 of 309 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/cs/
* Translated using Weblate (Arabic)
Currently translated at 95.2% (636 of 668 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ar/
* Translated using Weblate (Japanese)
Currently translated at 99.7% (666 of 668 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Japanese)
Currently translated at 99.8% (667 of 668 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Japanese)
Currently translated at 100.0% (309 of 309 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/ja/
* Translated using Weblate (Arabic)
Currently translated at 92.6% (76 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/ar/
* Translated using Weblate (Arabic)
Currently translated at 97.1% (649 of 668 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ar/
* Translated using Weblate (Arabic)
Currently translated at 100.0% (309 of 309 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/ar/
* Translated using Weblate (Arabic)
Currently translated at 97.0% (650 of 670 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ar/
* Translated using Weblate (Greek)
Currently translated at 99.8% (669 of 670 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/el/
* Translated using Weblate (Japanese)
Currently translated at 99.7% (668 of 670 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Galician)
Currently translated at 99.8% (669 of 670 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/gl/
* Translated using Weblate (Galician)
Currently translated at 100.0% (309 of 309 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/gl/
* Translated using Weblate (Japanese)
Currently translated at 99.8% (669 of 670 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Finnish)
Currently translated at 88.5% (593 of 670 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/fi/
* Translated using Weblate (Occitan)
Currently translated at 99.8% (669 of 670 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/oc/
* Translated using Weblate (Persian)
Currently translated at 100.0% (82 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/fa/
* Translated using Weblate (Persian)
Currently translated at 99.7% (668 of 670 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/fa/
* Translated using Weblate (Japanese)
Currently translated at 99.7% (670 of 672 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Arabic)
Currently translated at 96.7% (650 of 672 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ar/
* Translated using Weblate (Arabic)
Currently translated at 100.0% (309 of 309 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/ar/
* Translated using Weblate (Swedish)
Currently translated at 100.0% (309 of 309 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/sv/
* Translated using Weblate (Czech)
Currently translated at 99.8% (672 of 673 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/cs/
* Translated using Weblate (Japanese)
Currently translated at 99.7% (671 of 673 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Danish)
Currently translated at 84.5% (569 of 673 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/da/
* Translated using Weblate (Danish)
Currently translated at 77.4% (48 of 62 strings)
Translation: Mastodon/Devise
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/devise/da/
* Translated using Weblate (Arabic)
Currently translated at 97.0% (654 of 674 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ar/
* Translated using Weblate (Arabic)
Currently translated at 97.0% (655 of 675 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ar/
* Translated using Weblate (Japanese)
Currently translated at 99.7% (673 of 675 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Czech)
Currently translated at 99.8% (674 of 675 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/cs/
* Translated using Weblate (Greek)
Currently translated at 99.8% (674 of 675 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/el/
* Translated using Weblate (Esperanto)
Currently translated at 100.0% (309 of 309 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/eo/
* Translated using Weblate (French)
Currently translated at 96.8% (654 of 675 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/fr/
* Translated using Weblate (Esperanto)
Currently translated at 99.7% (673 of 675 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/eo/
* Translated using Weblate (Danish)
Currently translated at 84.5% (571 of 675 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/da/
* Translated using Weblate (Danish)
Currently translated at 84.8% (573 of 675 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/da/
* Translated using Weblate (Occitan)
Currently translated at 99.7% (673 of 675 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/oc/
* Translated using Weblate (Danish)
Currently translated at 100.0% (309 of 309 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/da/
* Translated using Weblate (Danish)
Currently translated at 88.7% (55 of 62 strings)
Translation: Mastodon/Devise
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/devise/da/
* Translated using Weblate (Italian)
Currently translated at 100.0% (309 of 309 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/it/
* Translated using Weblate (Danish)
Currently translated at 100.0% (62 of 62 strings)
Translation: Mastodon/Devise
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/devise/da/
* Translated using Weblate (Danish)
Currently translated at 85.1% (575 of 675 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/da/
* Translated using Weblate (Hebrew)
Currently translated at 45.4% (307 of 675 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/he/
* Translated using Weblate (Danish)
Currently translated at 100.0% (309 of 309 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/da/
* Translated using Weblate (Russian)
Currently translated at 98.0% (303 of 309 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/ru/
* Translated using Weblate (Hebrew)
Currently translated at 97.4% (301 of 309 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/he/
* Translated using Weblate (Danish)
Currently translated at 100.0% (82 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/da/
* Translated using Weblate (Arabic)
Currently translated at 97.1% (656 of 675 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ar/
* Translated using Weblate (Danish)
Currently translated at 86.8% (586 of 675 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/da/
* Translated using Weblate (Italian)
Currently translated at 83.2% (562 of 675 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/it/
* Translated using Weblate (Danish)
Currently translated at 100.0% (309 of 309 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/da/
* Translated using Weblate (Danish)
Currently translated at 100.0% (62 of 62 strings)
Translation: Mastodon/Devise
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/devise/da/
* Translated using Weblate (Danish)
Currently translated at 93.8% (92 of 98 strings)
Translation: Mastodon/Doorkeeper
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/da/
* Translated using Weblate (Galician)
Currently translated at 100.0% (675 of 675 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/gl/
* Translated using Weblate (Italian)
Currently translated at 83.4% (563 of 675 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/it/
* Translated using Weblate (Arabic)
Currently translated at 97.6% (659 of 675 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ar/
* Translated using Weblate (Dutch)
Currently translated at 100.0% (675 of 675 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/nl/
* Translated using Weblate (Arabic)
Currently translated at 97.7% (660 of 675 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ar/
* Translated using Weblate (Arabic)
Currently translated at 93.9% (77 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/ar/
* Translated using Weblate (Dutch)
Currently translated at 100.0% (675 of 675 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/nl/
* Translated using Weblate (Dutch)
Currently translated at 100.0% (309 of 309 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/nl/
* Translated using Weblate (Portuguese (Brazil))
Currently translated at 99.8% (674 of 675 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/pt_BR/
* Translated using Weblate (Arabic)
Currently translated at 97.7% (660 of 675 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ar/
* Translated using Weblate (Danish)
Currently translated at 86.9% (587 of 675 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/da/
* Translated using Weblate (Arabic)
Currently translated at 100.0% (309 of 309 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/ar/
* Translated using Weblate (Danish)
Currently translated at 97.9% (96 of 98 strings)
Translation: Mastodon/Doorkeeper
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/da/
* yarn manage:translations
* i18n-tasks normalize
---
app/javascript/mastodon/locales/ar.json | 13 ++--
app/javascript/mastodon/locales/ast.json | 1 +
app/javascript/mastodon/locales/bg.json | 1 +
app/javascript/mastodon/locales/ca.json | 1 +
app/javascript/mastodon/locales/co.json | 1 +
app/javascript/mastodon/locales/cs.json | 13 ++--
app/javascript/mastodon/locales/da.json | 31 +++++----
app/javascript/mastodon/locales/de.json | 1 +
.../mastodon/locales/defaultMessages.json | 4 ++
app/javascript/mastodon/locales/el.json | 1 +
app/javascript/mastodon/locales/en.json | 1 +
app/javascript/mastodon/locales/eo.json | 11 +--
app/javascript/mastodon/locales/es.json | 1 +
app/javascript/mastodon/locales/eu.json | 5 +-
app/javascript/mastodon/locales/fa.json | 7 +-
app/javascript/mastodon/locales/fi.json | 1 +
app/javascript/mastodon/locales/fr.json | 5 +-
app/javascript/mastodon/locales/gl.json | 5 +-
app/javascript/mastodon/locales/he.json | 11 +--
app/javascript/mastodon/locales/hr.json | 1 +
app/javascript/mastodon/locales/hu.json | 1 +
app/javascript/mastodon/locales/hy.json | 1 +
app/javascript/mastodon/locales/id.json | 1 +
app/javascript/mastodon/locales/io.json | 1 +
app/javascript/mastodon/locales/it.json | 3 +-
app/javascript/mastodon/locales/ja.json | 5 +-
app/javascript/mastodon/locales/ka.json | 1 +
app/javascript/mastodon/locales/ko.json | 1 +
app/javascript/mastodon/locales/nl.json | 5 +-
app/javascript/mastodon/locales/no.json | 1 +
app/javascript/mastodon/locales/oc.json | 1 +
app/javascript/mastodon/locales/pl.json | 1 +
app/javascript/mastodon/locales/pt-BR.json | 1 +
app/javascript/mastodon/locales/pt.json | 1 +
app/javascript/mastodon/locales/ru.json | 1 +
app/javascript/mastodon/locales/sk.json | 1 +
app/javascript/mastodon/locales/sl.json | 1 +
app/javascript/mastodon/locales/sr-Latn.json | 1 +
app/javascript/mastodon/locales/sr.json | 1 +
app/javascript/mastodon/locales/sv.json | 5 +-
app/javascript/mastodon/locales/te.json | 1 +
app/javascript/mastodon/locales/th.json | 1 +
app/javascript/mastodon/locales/tr.json | 1 +
app/javascript/mastodon/locales/uk.json | 1 +
app/javascript/mastodon/locales/zh-CN.json | 1 +
app/javascript/mastodon/locales/zh-HK.json | 1 +
app/javascript/mastodon/locales/zh-TW.json | 1 +
config/locales/ar.yml | 69 ++++++++++++++++---
config/locales/cs.yml | 15 +++-
config/locales/da.yml | 30 +++++++-
config/locales/devise.da.yml | 21 +++++-
config/locales/doorkeeper.da.yml | 5 ++
config/locales/doorkeeper.uk.yml | 2 +
config/locales/el.yml | 13 +++-
config/locales/eo.yml | 48 ++++++++++++-
config/locales/eu.yml | 31 ++++++++-
config/locales/fa.yml | 20 +++++-
config/locales/fr.yml | 6 ++
config/locales/gl.yml | 19 ++++-
config/locales/he.yml | 7 +-
config/locales/it.yml | 48 +++++++++++--
config/locales/ja.yml | 11 +++
config/locales/nl.yml | 13 +++-
config/locales/oc.yml | 11 +++
config/locales/pl.yml | 2 +-
config/locales/pt-BR.yml | 15 +++-
config/locales/simple_form.ar.yml | 2 +
config/locales/simple_form.da.yml | 28 ++++----
config/locales/simple_form.eu.yml | 6 ++
config/locales/simple_form.fa.yml | 4 +-
config/locales/simple_form.uk.yml | 1 +
config/locales/uk.yml | 1 +
72 files changed, 481 insertions(+), 103 deletions(-)
diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json
index b14be3434..b38dbcf73 100644
--- a/app/javascript/mastodon/locales/ar.json
+++ b/app/javascript/mastodon/locales/ar.json
@@ -7,7 +7,7 @@
"account.disclaimer_full": "قد لا تعكس المعلومات أدناه الملف الشخصي الكامل للمستخدم.",
"account.domain_blocked": "النطاق مخفي",
"account.edit_profile": "تعديل الملف الشخصي",
- "account.endorse": "Feature on profile",
+ "account.endorse": "إبرازه على الملف الشخصي",
"account.follow": "تابِع",
"account.followers": "المتابعون",
"account.follows": "يتبع",
@@ -27,7 +27,7 @@
"account.show_reblogs": "عرض ترقيات @{name}",
"account.unblock": "إلغاء الحظر عن @{name}",
"account.unblock_domain": "فك حظر {domain}",
- "account.unendorse": "Don't feature on profile",
+ "account.unendorse": "إزالة ترويجه مِن الملف الشخصي",
"account.unfollow": "إلغاء المتابعة",
"account.unmute": "إلغاء الكتم عن @{name}",
"account.unmute_notifications": "إلغاء كتم إخطارات @{name}",
@@ -90,7 +90,7 @@
"confirmations.redraft.message": "هل أنت متأكد من أنك تريد حذف هذا المنشور و إعادة صياغته ؟ سوف تفقد جميع الردود و الترقيات و المفضلة المتصلة به.",
"confirmations.unfollow.confirm": "إلغاء المتابعة",
"confirmations.unfollow.message": "متأكد من أنك تريد إلغاء متابعة {name} ؟",
- "embed.instructions": "يمكنكم إدماج هذه الحالة على موقعكم الإلكتروني عن طريق نسخ الشفرة أدناه.",
+ "embed.instructions": "يمكنكم إدماج هذا المنشور على موقعكم الإلكتروني عن طريق نسخ الشفرة أدناه.",
"embed.preview": "هكذا ما سوف يبدو عليه :",
"emoji_button.activity": "الأنشطة",
"emoji_button.custom": "مخصص",
@@ -109,7 +109,7 @@
"empty_column.community": "الخط الزمني المحلي فارغ. أكتب شيئا ما للعامة كبداية !",
"empty_column.direct": "لم تتلق أية رسالة خاصة مباشِرة بعد. سوف يتم عرض الرسائل المباشرة هنا إن قمت بإرسال واحدة أو تلقيت البعض منها.",
"empty_column.hashtag": "ليس هناك بعدُ أي محتوى ذو علاقة بهذا الوسم.",
- "empty_column.home": "إنك لا تتبع بعد أي شخص إلى حد الآن. زر {public} أو استخدام حقل البحث لكي تبدأ على التعرف على مستخدمين آخرين.",
+ "empty_column.home": "إنّ الخيط الزمني لصفحتك الرئيسية فارغ. قم بزيارة {public} أو استخدم حقل البحث لكي تكتشف مستخدمين آخرين.",
"empty_column.home.public_timeline": "الخيط العام",
"empty_column.list": "هذه القائمة فارغة مؤقتا و لكن سوف تمتلئ تدريجيا عندما يبدأ الأعضاء المُنتَمين إليها بنشر تبويقات.",
"empty_column.notifications": "لم تتلق أي إشعار بعدُ. تفاعل مع المستخدمين الآخرين لإنشاء محادثة.",
@@ -162,6 +162,7 @@
"missing_indicator.label": "تعذر العثور عليه",
"missing_indicator.sublabel": "تعذر العثور على هذا المورد",
"mute_modal.hide_notifications": "هل تود إخفاء الإخطارات القادمة من هذا المستخدم ؟",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "الحسابات المحجوبة",
"navigation_bar.community_timeline": "الخيط العام المحلي",
"navigation_bar.direct": "الرسائل المباشِرة",
@@ -181,7 +182,7 @@
"navigation_bar.preferences": "التفضيلات",
"navigation_bar.public_timeline": "الخيط العام الموحد",
"navigation_bar.security": "الأمان",
- "notification.favourite": "{name} أعجب بمنشورك",
+ "notification.favourite": "أُعجِب {name} بمنشورك",
"notification.follow": "{name} يتابعك",
"notification.mention": "{name} ذكرك",
"notification.reblog": "{name} قام بترقية تبويقك",
@@ -272,7 +273,7 @@
"status.pinned": "تبويق مثبَّت",
"status.reblog": "رَقِّي",
"status.reblog_private": "القيام بالترقية إلى الجمهور الأصلي",
- "status.reblogged_by": "{name} رقى",
+ "status.reblogged_by": "رقّاه {name}",
"status.redraft": "إزالة و إعادة الصياغة",
"status.reply": "ردّ",
"status.replyAll": "رُد على الخيط",
diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json
index 1327d0ec2..96e3a14d9 100644
--- a/app/javascript/mastodon/locales/ast.json
+++ b/app/javascript/mastodon/locales/ast.json
@@ -162,6 +162,7 @@
"missing_indicator.label": "Not found",
"missing_indicator.sublabel": "This resource could not be found",
"mute_modal.hide_notifications": "Hide notifications from this user?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Blocked users",
"navigation_bar.community_timeline": "Local timeline",
"navigation_bar.direct": "Direct messages",
diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json
index fa1ba594d..b41045fb8 100644
--- a/app/javascript/mastodon/locales/bg.json
+++ b/app/javascript/mastodon/locales/bg.json
@@ -162,6 +162,7 @@
"missing_indicator.label": "Not found",
"missing_indicator.sublabel": "This resource could not be found",
"mute_modal.hide_notifications": "Hide notifications from this user?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Blocked users",
"navigation_bar.community_timeline": "Local timeline",
"navigation_bar.direct": "Direct messages",
diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json
index 0ffc7509b..7378b703b 100644
--- a/app/javascript/mastodon/locales/ca.json
+++ b/app/javascript/mastodon/locales/ca.json
@@ -162,6 +162,7 @@
"missing_indicator.label": "No trobat",
"missing_indicator.sublabel": "Aquest recurs no pot ser trobat",
"mute_modal.hide_notifications": "Amagar notificacions d'aquest usuari?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Usuaris bloquejats",
"navigation_bar.community_timeline": "Línia de temps Local",
"navigation_bar.direct": "Missatges directes",
diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json
index feb796577..717397d41 100644
--- a/app/javascript/mastodon/locales/co.json
+++ b/app/javascript/mastodon/locales/co.json
@@ -162,6 +162,7 @@
"missing_indicator.label": "Micca trovu",
"missing_indicator.sublabel": "Ùn era micca pussivule di truvà sta risorsa",
"mute_modal.hide_notifications": "Piattà nutificazione da st'utilizatore?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Utilizatori bluccati",
"navigation_bar.community_timeline": "Linea pubblica lucale",
"navigation_bar.direct": "Missaghji diretti",
diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json
index e93baf750..b71179ca0 100644
--- a/app/javascript/mastodon/locales/cs.json
+++ b/app/javascript/mastodon/locales/cs.json
@@ -7,7 +7,7 @@
"account.disclaimer_full": "Níže uvedené informace nemusejí zcela odrážet profil uživatele.",
"account.domain_blocked": "Doména skryta",
"account.edit_profile": "Upravit profil",
- "account.endorse": "Feature on profile",
+ "account.endorse": "Představit na profilu",
"account.follow": "Sleduj",
"account.followers": "Sledovatelé",
"account.follows": "Sleduje",
@@ -27,7 +27,7 @@
"account.show_reblogs": "Zobrazit boosty od uživatele @{name}",
"account.unblock": "Odblokovat uživatele @{name}",
"account.unblock_domain": "Odkrýt doménu {domain}",
- "account.unendorse": "Don't feature on profile",
+ "account.unendorse": "Nepředstavit na profilu",
"account.unfollow": "Přestat sledovat",
"account.unmute": "Přestat ignorovat uživatele @{name}",
"account.unmute_notifications": "Odtišit oznámení od uživatele @{name}",
@@ -162,6 +162,7 @@
"missing_indicator.label": "Nenalezeno",
"missing_indicator.sublabel": "Tento zdroj se nepodařilo najít",
"mute_modal.hide_notifications": "Skrýt oznámení před tímto uživatelem?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Blokovaní uživatelé",
"navigation_bar.community_timeline": "Místní časová osa",
"navigation_bar.direct": "Přímé zprávy",
@@ -229,11 +230,11 @@
"privacy.unlisted.short": "Nezobrazované",
"regeneration_indicator.label": "Načítám…",
"regeneration_indicator.sublabel": "Váš domovský proud se připravuje!",
- "relative_time.days": "{number}d",
- "relative_time.hours": "{number}h",
+ "relative_time.days": "{number} d",
+ "relative_time.hours": "{number} h",
"relative_time.just_now": "teď",
- "relative_time.minutes": "{number}m",
- "relative_time.seconds": "{number}s",
+ "relative_time.minutes": "{number} m",
+ "relative_time.seconds": "{number} s",
"reply_indicator.cancel": "Zrušit",
"report.forward": "Přeposlat k {target}",
"report.forward_hint": "Tento účet je z jiného serveru. Chcete na něj také poslat anonymizovanou kopii?",
diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json
index 10f52465d..4c38b8eb2 100644
--- a/app/javascript/mastodon/locales/da.json
+++ b/app/javascript/mastodon/locales/da.json
@@ -7,27 +7,27 @@
"account.disclaimer_full": "Nedenstående oplysninger reflekterer ikke nødvendigvis brugerens profil fuldstændigt.",
"account.domain_blocked": "Domænet er blevet skjult",
"account.edit_profile": "Rediger profil",
- "account.endorse": "Feature on profile",
+ "account.endorse": "Fremhæv på profil",
"account.follow": "Følg",
"account.followers": "Følgere",
"account.follows": "Følger",
"account.follows_you": "Følger dig",
"account.hide_reblogs": "Skjul fremhævelserne fra @{name}",
- "account.media": "Multimedier",
+ "account.media": "Medie",
"account.mention": "Nævn @{name}",
"account.moved_to": "{name} er flyttet til:",
"account.mute": "Dæmp @{name}",
"account.mute_notifications": "Dæmp notifikationer fra @{name}",
"account.muted": "Dæmpet",
- "account.posts": "Dyt",
- "account.posts_with_replies": "Toots og svar",
+ "account.posts": "Trut",
+ "account.posts_with_replies": "Trut samt svar",
"account.report": "Rapporter @{name}",
"account.requested": "Afventer godkendelse. Tryk for at annullere følgeanmodning",
"account.share": "Del @{name}s profil",
"account.show_reblogs": "Vis fremhævelserne fra @{name}",
"account.unblock": "Fjern blokeringen af @{name}",
"account.unblock_domain": "Skjul ikke længere {domain}",
- "account.unendorse": "Don't feature on profile",
+ "account.unendorse": "Fremhæv ikke på profil",
"account.unfollow": "Følg ikke længere",
"account.unmute": "Fjern dæmpningen af @{name}",
"account.unmute_notifications": "Fjern dæmpningen af notifikationer fra @{name}",
@@ -83,7 +83,7 @@
"confirmations.delete_list.confirm": "Slet",
"confirmations.delete_list.message": "Er du sikker på, du vil slette denne liste?",
"confirmations.domain_block.confirm": "Skjul helt domæne",
- "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.",
+ "confirmations.domain_block.message": "Er du helt sikker på du vil blokere hele {domain} domænet? I de fleste tilfælde vil få specifikke blokeringer eller dæmpninger være nok og at fortrække. Du vil ikke se indhold fra det domæne hverken på offentlige tidslinjer eller i dine notifikationer. Dine følgere fra det domæne vil blive fjernet.",
"confirmations.mute.confirm": "Dæmp",
"confirmations.mute.message": "Er du sikker på, du vil dæmpe {name}?",
"confirmations.redraft.confirm": "Slet & omskriv",
@@ -103,7 +103,7 @@
"emoji_button.people": "Mennesker",
"emoji_button.recent": "Oftest brugt",
"emoji_button.search": "Søg...",
- "emoji_button.search_results": "Søgeresultat",
+ "emoji_button.search_results": "Søgeresultater",
"emoji_button.symbols": "Symboler",
"emoji_button.travel": "Rejser & steder",
"empty_column.community": "Den lokale tidslinje er tom. Skriv noget offentligt for at starte lavinen!",
@@ -139,7 +139,7 @@
"keyboard_shortcuts.hotkey": "Hurtigtast",
"keyboard_shortcuts.legend": "for at vise denne legende",
"keyboard_shortcuts.mention": "for at nævne forfatteren",
- "keyboard_shortcuts.profile": "to open author's profile",
+ "keyboard_shortcuts.profile": "til profil af åben forfatter",
"keyboard_shortcuts.reply": "for at svare",
"keyboard_shortcuts.search": "for at fokusere søgningen",
"keyboard_shortcuts.toggle_hidden": "for at vise/skjule tekst bag CW",
@@ -162,6 +162,7 @@
"missing_indicator.label": "Ikke fundet",
"missing_indicator.sublabel": "Denne ressource kunne ikke blive fundet",
"mute_modal.hide_notifications": "Skjul notifikationer fra denne bruger?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Blokerede brugere",
"navigation_bar.community_timeline": "Lokal tidslinje",
"navigation_bar.direct": "Direkte beskeder",
@@ -215,8 +216,8 @@
"onboarding.page_six.read_guidelines": "Læs venligst {domain}s {guidelines}!",
"onboarding.page_six.various_app": "apps til mobilen",
"onboarding.page_three.profile": "Rediger din profil for at ændre profilbillede, beskrivelse og visningsnavn. Der vil du også finde andre indstillinger.",
- "onboarding.page_three.search": "Use the search bar to find people and look at hashtags, such as {illustration} and {introductions}. To look for a person who is not on this instance, use their full handle.",
- "onboarding.page_two.compose": "Write posts from the compose column. You can upload images, change privacy settings, and add content warnings with the icons below.",
+ "onboarding.page_three.search": "Brug søgefeltdet for at finde folk og at kigge på hashtags, så som {illustration} and {introductions}. For at finde en person der ikke er på denne instans, brug deres fulde brugernavn.",
+ "onboarding.page_two.compose": "Skriv opslag fra skrive kolonnen. Du kan uploade billeder, ændre privatlivsindstillinger, og tilføje indholds advarsler med ikoner forneden.",
"onboarding.skip": "Spring over",
"privacy.change": "Ændre status privatliv",
"privacy.direct.long": "Post til kun de nævnte brugere",
@@ -243,7 +244,7 @@
"report.target": "Anmelder {target}",
"search.placeholder": "Søg",
"search_popout.search_format": "Avanceret søgeformat",
- "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
+ "search_popout.tips.full_text": "Simpel tekst returnerer statusser du har skrevet, favoriseret, fremhævet, eller er blevet nævnt i, lige så vel som matchende brugernavne, visningsnavne, og hashtags.",
"search_popout.tips.hashtag": "emnetag",
"search_popout.tips.status": "status",
"search_popout.tips.text": "Simpelt tekst returnerer passende visningsnavne, brugernavne og hashtags",
@@ -275,7 +276,7 @@
"status.reblogged_by": "{name} fremhævede",
"status.redraft": "Slet og omskriv",
"status.reply": "Svar",
- "status.replyAll": "Svar tråd",
+ "status.replyAll": "Svar samtale",
"status.report": "Anmeld @{name}",
"status.sensitive_toggle": "Tryk for at se",
"status.sensitive_warning": "Følsomt indhold",
@@ -291,11 +292,11 @@
"tabs_bar.local_timeline": "Lokal",
"tabs_bar.notifications": "Notifikationer",
"tabs_bar.search": "Søg",
- "trends.count_by_accounts": "{count} {rawCount, flere, en {person} flere {people}} snakker",
+ "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} snakker",
"ui.beforeunload": "Din kladde vil gå tabt hvis du forlader Mastodon.",
"upload_area.title": "Træk og slip for at uploade",
- "upload_button.label": "Tilføj multimedier",
- "upload_form.description": "Beskrivelse for de svagtseende",
+ "upload_button.label": "Tilføj medie",
+ "upload_form.description": "Beskriv for de svagtseende",
"upload_form.focus": "Beskær",
"upload_form.undo": "Slet",
"upload_progress.label": "Uploader...",
diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json
index 83e675682..3427b322b 100644
--- a/app/javascript/mastodon/locales/de.json
+++ b/app/javascript/mastodon/locales/de.json
@@ -162,6 +162,7 @@
"missing_indicator.label": "Nicht gefunden",
"missing_indicator.sublabel": "Die Ressource konnte nicht gefunden werden",
"mute_modal.hide_notifications": "Benachrichtigungen von diesem Account verbergen?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Blockierte Profile",
"navigation_bar.community_timeline": "Lokale Zeitleiste",
"navigation_bar.direct": "Direktnachrichten",
diff --git a/app/javascript/mastodon/locales/defaultMessages.json b/app/javascript/mastodon/locales/defaultMessages.json
index 103c9a3f7..0079e192a 100644
--- a/app/javascript/mastodon/locales/defaultMessages.json
+++ b/app/javascript/mastodon/locales/defaultMessages.json
@@ -1174,6 +1174,10 @@
"defaultMessage": "About this instance",
"id": "navigation_bar.info"
},
+ {
+ "defaultMessage": "Mobile apps",
+ "id": "navigation_bar.apps"
+ },
{
"defaultMessage": "Terms of service",
"id": "getting_started.terms"
diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json
index 1e059b682..76a003f65 100644
--- a/app/javascript/mastodon/locales/el.json
+++ b/app/javascript/mastodon/locales/el.json
@@ -162,6 +162,7 @@
"missing_indicator.label": "Δε βρέθηκε",
"missing_indicator.sublabel": "Αδύνατη η εύρεση αυτού του πόρου",
"mute_modal.hide_notifications": "Απόκρυψη ειδοποιήσεων αυτού του χρήστη;",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Αποκλεισμένοι χρήστες",
"navigation_bar.community_timeline": "Τοπική ροή",
"navigation_bar.direct": "Προσωπικά μηνύματα",
diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json
index 0845e9539..e00ae84f9 100644
--- a/app/javascript/mastodon/locales/en.json
+++ b/app/javascript/mastodon/locales/en.json
@@ -162,6 +162,7 @@
"missing_indicator.label": "Not found",
"missing_indicator.sublabel": "This resource could not be found",
"mute_modal.hide_notifications": "Hide notifications from this user?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Blocked users",
"navigation_bar.community_timeline": "Local timeline",
"navigation_bar.direct": "Direct messages",
diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json
index 862c2b4d0..f4c316441 100644
--- a/app/javascript/mastodon/locales/eo.json
+++ b/app/javascript/mastodon/locales/eo.json
@@ -7,7 +7,7 @@
"account.disclaimer_full": "Subaj informoj povas reflekti la profilon de la uzanto nekomplete.",
"account.domain_blocked": "Domajno kaŝita",
"account.edit_profile": "Redakti profilon",
- "account.endorse": "Feature on profile",
+ "account.endorse": "Montri en profilo",
"account.follow": "Sekvi",
"account.followers": "Sekvantoj",
"account.follows": "Sekvatoj",
@@ -27,7 +27,7 @@
"account.show_reblogs": "Montri diskonigojn de @{name}",
"account.unblock": "Malbloki @{name}",
"account.unblock_domain": "Malkaŝi {domain}",
- "account.unendorse": "Don't feature on profile",
+ "account.unendorse": "Ne montri en profilo",
"account.unfollow": "Ne plu sekvi",
"account.unmute": "Malsilentigi @{name}",
"account.unmute_notifications": "Malsilentigi sciigojn de @{name}",
@@ -139,7 +139,7 @@
"keyboard_shortcuts.hotkey": "Rapidklavo",
"keyboard_shortcuts.legend": "por montri ĉi tiun noton",
"keyboard_shortcuts.mention": "por mencii la aŭtoron",
- "keyboard_shortcuts.profile": "to open author's profile",
+ "keyboard_shortcuts.profile": "por malfermi la profilon de la aŭtoro",
"keyboard_shortcuts.reply": "por respondi",
"keyboard_shortcuts.search": "por fokusigi la serĉilon",
"keyboard_shortcuts.toggle_hidden": "por montri/kaŝi tekston malantaŭ enhava averto",
@@ -162,6 +162,7 @@
"missing_indicator.label": "Ne trovita",
"missing_indicator.sublabel": "Ĉi tiu elemento ne estis trovita",
"mute_modal.hide_notifications": "Ĉu vi volas kaŝi la sciigojn el ĉi tiu uzanto?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Blokitaj uzantoj",
"navigation_bar.community_timeline": "Loka tempolinio",
"navigation_bar.direct": "Rektaj mesaĝoj",
@@ -169,7 +170,7 @@
"navigation_bar.domain_blocks": "Kaŝitaj domajnoj",
"navigation_bar.edit_profile": "Redakti profilon",
"navigation_bar.favourites": "Stelumoj",
- "navigation_bar.filters": "Muted words",
+ "navigation_bar.filters": "Silentigitaj vortoj",
"navigation_bar.follow_requests": "Petoj de sekvado",
"navigation_bar.info": "Pri ĉi tiu nodo",
"navigation_bar.keyboard_shortcuts": "Rapidklavoj",
@@ -260,7 +261,7 @@
"status.direct": "Rekte mesaĝi @{name}",
"status.embed": "Enkorpigi",
"status.favourite": "Stelumi",
- "status.filtered": "Filtered",
+ "status.filtered": "Filtrita",
"status.load_more": "Ŝargi pli",
"status.media_hidden": "Aŭdovidaĵo kaŝita",
"status.mention": "Mencii @{name}",
diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json
index 2359f4ba3..b17e1411e 100644
--- a/app/javascript/mastodon/locales/es.json
+++ b/app/javascript/mastodon/locales/es.json
@@ -162,6 +162,7 @@
"missing_indicator.label": "No encontrado",
"missing_indicator.sublabel": "No se encontró este recurso",
"mute_modal.hide_notifications": "Ocultar notificaciones de este usuario?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Usuarios bloqueados",
"navigation_bar.community_timeline": "Historia local",
"navigation_bar.direct": "Direct messages",
diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json
index aab24b231..ec27fe425 100644
--- a/app/javascript/mastodon/locales/eu.json
+++ b/app/javascript/mastodon/locales/eu.json
@@ -7,7 +7,7 @@
"account.disclaimer_full": "Baliteke beheko informazioak erabiltzailearen profilaren zati bat baino ez erakustea.",
"account.domain_blocked": "Ezkutatutako domeinua",
"account.edit_profile": "Aldatu profila",
- "account.endorse": "Feature on profile",
+ "account.endorse": "Nabarmendu profilean",
"account.follow": "Jarraitu",
"account.followers": "Jarraitzaileak",
"account.follows": "Jarraitzen",
@@ -27,7 +27,7 @@
"account.show_reblogs": "Erakutsi @{name}(r)en bultzadak",
"account.unblock": "Desblokeatu @{name}",
"account.unblock_domain": "Berriz erakutsi {domain}",
- "account.unendorse": "Don't feature on profile",
+ "account.unendorse": "Ez nabarmendu profilean",
"account.unfollow": "Jarraitzeari utzi",
"account.unmute": "Desmututu @{name}",
"account.unmute_notifications": "Desmututu @{name}(r)en jakinarazpenak",
@@ -162,6 +162,7 @@
"missing_indicator.label": "Ez aurkitua",
"missing_indicator.sublabel": "Baliabide hau ezin izan da aurkitu",
"mute_modal.hide_notifications": "Ezkutatu erabiltzaile honen jakinarazpenak?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Blokeatutako erabiltzaileak",
"navigation_bar.community_timeline": "Denbora-lerro lokala",
"navigation_bar.direct": "Mezu zuzenak",
diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json
index f95c9dc78..03c6bb7ce 100644
--- a/app/javascript/mastodon/locales/fa.json
+++ b/app/javascript/mastodon/locales/fa.json
@@ -7,7 +7,7 @@
"account.disclaimer_full": "اطلاعات زیر ممکن است نمایهٔ این کاربر را به تمامی نشان ندهد.",
"account.domain_blocked": "دامین پنهانشده",
"account.edit_profile": "ویرایش نمایه",
- "account.endorse": "Feature on profile",
+ "account.endorse": "نمایش در نمایه",
"account.follow": "پی بگیرید",
"account.followers": "پیگیران",
"account.follows": "پی میگیرد",
@@ -27,7 +27,7 @@
"account.show_reblogs": "نشاندادن بازبوقهای @{name}",
"account.unblock": "رفع انسداد @{name}",
"account.unblock_domain": "رفع پنهانسازی از {domain}",
- "account.unendorse": "Don't feature on profile",
+ "account.unendorse": "نهفتن از نمایه",
"account.unfollow": "پایان پیگیری",
"account.unmute": "باصدا کردن @{name}",
"account.unmute_notifications": "باصداکردن اعلانها از طرف @{name}",
@@ -139,7 +139,7 @@
"keyboard_shortcuts.hotkey": "میانبر",
"keyboard_shortcuts.legend": "برای نمایش این راهنما",
"keyboard_shortcuts.mention": "برای نامبردن از نویسنده",
- "keyboard_shortcuts.profile": "to open author's profile",
+ "keyboard_shortcuts.profile": "گشودن نمایهٔ نویسنده",
"keyboard_shortcuts.reply": "برای پاسخدادن",
"keyboard_shortcuts.search": "برای فعالکردن جستجو",
"keyboard_shortcuts.toggle_hidden": "برای نمایش/نهفتن نوشتهٔ پشت هشدار محتوا",
@@ -162,6 +162,7 @@
"missing_indicator.label": "پیدا نشد",
"missing_indicator.sublabel": "این منبع پیدا نشد",
"mute_modal.hide_notifications": "اعلانهای این کاربر پنهان شود؟",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "کاربران مسدودشده",
"navigation_bar.community_timeline": "نوشتههای محلی",
"navigation_bar.direct": "پیغامهای خصوصی",
diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json
index c092764fc..0861c42fc 100644
--- a/app/javascript/mastodon/locales/fi.json
+++ b/app/javascript/mastodon/locales/fi.json
@@ -162,6 +162,7 @@
"missing_indicator.label": "Ei löytynyt",
"missing_indicator.sublabel": "Tätä resurssia ei löytynyt",
"mute_modal.hide_notifications": "Piilota tältä käyttäjältä tulevat ilmoitukset?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Estetyt käyttäjät",
"navigation_bar.community_timeline": "Paikallinen aikajana",
"navigation_bar.direct": "Viestit",
diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json
index a4797f1fc..79ce01c05 100644
--- a/app/javascript/mastodon/locales/fr.json
+++ b/app/javascript/mastodon/locales/fr.json
@@ -7,7 +7,7 @@
"account.disclaimer_full": "Les données ci-dessous peuvent ne pas refléter ce profil dans sa totalité.",
"account.domain_blocked": "Domaine caché",
"account.edit_profile": "Modifier le profil",
- "account.endorse": "Feature on profile",
+ "account.endorse": "Figure sur le profil",
"account.follow": "Suivre",
"account.followers": "Abonné⋅e⋅s",
"account.follows": "Abonnements",
@@ -27,7 +27,7 @@
"account.show_reblogs": "Afficher les partages de @{name}",
"account.unblock": "Débloquer",
"account.unblock_domain": "Ne plus masquer {domain}",
- "account.unendorse": "Don't feature on profile",
+ "account.unendorse": "Ne figure pas sur le profil",
"account.unfollow": "Ne plus suivre",
"account.unmute": "Ne plus masquer",
"account.unmute_notifications": "Réactiver les notifications de @{name}",
@@ -162,6 +162,7 @@
"missing_indicator.label": "Non trouvé",
"missing_indicator.sublabel": "Ressource introuvable",
"mute_modal.hide_notifications": "Masquer les notifications de cette personne ?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Comptes bloqués",
"navigation_bar.community_timeline": "Fil public local",
"navigation_bar.direct": "Messages directs",
diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json
index 6cb399d87..d83b11d74 100644
--- a/app/javascript/mastodon/locales/gl.json
+++ b/app/javascript/mastodon/locales/gl.json
@@ -86,8 +86,8 @@
"confirmations.domain_block.message": "Realmente está segura de que quere bloquear por completo o dominio {domain}? Normalmente é suficiente, e preferible, bloquear de xeito selectivo varios elementos. Non verá contidos de ese dominio en ningunha liña temporal ou nas notificacións. As súas seguidoras en ese dominio serán eliminadas.",
"confirmations.mute.confirm": "Acalar",
"confirmations.mute.message": "Está segura de que quere acalar a {name}?",
- "confirmations.redraft.confirm": "Delete & redraft",
- "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
+ "confirmations.redraft.confirm": "Eliminar e reescribir",
+ "confirmations.redraft.message": "Está segura de querer eliminar este estado e voltalo a escribir? Perderá todas as réplicas, promocións e favoritas da mensaxe.",
"confirmations.unfollow.confirm": "Deixar de seguir",
"confirmations.unfollow.message": "Quere deixar de seguir a {name}?",
"embed.instructions": "Copie o código inferior para incrustar no seu sitio web este estado.",
@@ -162,6 +162,7 @@
"missing_indicator.label": "Non atopado",
"missing_indicator.sublabel": "Non se puido atopar o recurso",
"mute_modal.hide_notifications": "Esconder notificacións deste usuario?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Usuarias bloqueadas",
"navigation_bar.community_timeline": "Liña temporal local",
"navigation_bar.direct": "Mensaxes directas",
diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json
index ef86c0dfa..d20adce11 100644
--- a/app/javascript/mastodon/locales/he.json
+++ b/app/javascript/mastodon/locales/he.json
@@ -23,17 +23,17 @@
"account.posts_with_replies": "Toots with replies",
"account.report": "לדווח על @{name}",
"account.requested": "בהמתנה לאישור",
- "account.share": "לשתף את אודות @{name}",
+ "account.share": "לשתף את הפרופיל של @{name}",
"account.show_reblogs": "להראות הדהודים מאת @{name}",
"account.unblock": "הסרת חסימה מעל @{name}",
"account.unblock_domain": "הסר חסימה מקהילת {domain}",
- "account.unendorse": "Don't feature on profile",
+ "account.unendorse": "לא להציג בפרופיל",
"account.unfollow": "הפסקת מעקב",
"account.unmute": "הפסקת השתקת @{name}",
"account.unmute_notifications": "להפסיק הסתרת הודעות מעם @{name}",
- "account.view_full_profile": "הראה אודות מלאות",
- "alert.unexpected.message": "An unexpected error occurred.",
- "alert.unexpected.title": "Oops!",
+ "account.view_full_profile": "הצגת פרופיל מלא",
+ "alert.unexpected.message": "אירעה שגיאה בלתי צפויה.",
+ "alert.unexpected.title": "אופס!",
"boost_modal.combo": "ניתן להקיש {combo} כדי לדלג בפעם הבאה",
"bundle_column_error.body": "משהו השתבש בעת הצגת הרכיב הזה.",
"bundle_column_error.retry": "לנסות שוב",
@@ -162,6 +162,7 @@
"missing_indicator.label": "לא נמצא",
"missing_indicator.sublabel": "This resource could not be found",
"mute_modal.hide_notifications": "להסתיר הודעות מחשבון זה?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "חסימות",
"navigation_bar.community_timeline": "ציר זמן מקומי",
"navigation_bar.direct": "Direct messages",
diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json
index 2b5adc353..e6ce3359d 100644
--- a/app/javascript/mastodon/locales/hr.json
+++ b/app/javascript/mastodon/locales/hr.json
@@ -162,6 +162,7 @@
"missing_indicator.label": "Nije nađen",
"missing_indicator.sublabel": "This resource could not be found",
"mute_modal.hide_notifications": "Hide notifications from this user?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Blokirani korisnici",
"navigation_bar.community_timeline": "Lokalni timeline",
"navigation_bar.direct": "Direct messages",
diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json
index 791be67e3..80c3a1de8 100644
--- a/app/javascript/mastodon/locales/hu.json
+++ b/app/javascript/mastodon/locales/hu.json
@@ -162,6 +162,7 @@
"missing_indicator.label": "Nincs találat",
"missing_indicator.sublabel": "Ezen forrás nem található",
"mute_modal.hide_notifications": "Értesítések elrejtése ezen felhasználótól?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Tiltott felhasználók",
"navigation_bar.community_timeline": "Helyi idővonal",
"navigation_bar.direct": "Direct messages",
diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json
index 1d90c20de..e5ad93fd8 100644
--- a/app/javascript/mastodon/locales/hy.json
+++ b/app/javascript/mastodon/locales/hy.json
@@ -162,6 +162,7 @@
"missing_indicator.label": "Չգտնվեց",
"missing_indicator.sublabel": "This resource could not be found",
"mute_modal.hide_notifications": "Թաքցնե՞լ ցանուցումներն այս օգտատիրոջից։",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Արգելափակված օգտատերեր",
"navigation_bar.community_timeline": "Տեղական հոսք",
"navigation_bar.direct": "Direct messages",
diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json
index 6b182bbe9..010d35b73 100644
--- a/app/javascript/mastodon/locales/id.json
+++ b/app/javascript/mastodon/locales/id.json
@@ -162,6 +162,7 @@
"missing_indicator.label": "Tidak ditemukan",
"missing_indicator.sublabel": "This resource could not be found",
"mute_modal.hide_notifications": "Hide notifications from this user?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Pengguna diblokir",
"navigation_bar.community_timeline": "Linimasa lokal",
"navigation_bar.direct": "Direct messages",
diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json
index 75924d9e1..06e6b02d7 100644
--- a/app/javascript/mastodon/locales/io.json
+++ b/app/javascript/mastodon/locales/io.json
@@ -162,6 +162,7 @@
"missing_indicator.label": "Ne trovita",
"missing_indicator.sublabel": "This resource could not be found",
"mute_modal.hide_notifications": "Hide notifications from this user?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Blokusita uzeri",
"navigation_bar.community_timeline": "Lokala tempolineo",
"navigation_bar.direct": "Direct messages",
diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json
index a0e1a1d2d..c9ac57c74 100644
--- a/app/javascript/mastodon/locales/it.json
+++ b/app/javascript/mastodon/locales/it.json
@@ -139,7 +139,7 @@
"keyboard_shortcuts.hotkey": "Tasto di scelta rapida",
"keyboard_shortcuts.legend": "per mostrare questa spiegazione",
"keyboard_shortcuts.mention": "per menzionare l'autore",
- "keyboard_shortcuts.profile": "to open author's profile",
+ "keyboard_shortcuts.profile": "per aprire il profilo dell'autore",
"keyboard_shortcuts.reply": "per rispondere",
"keyboard_shortcuts.search": "per spostare il focus sulla ricerca",
"keyboard_shortcuts.toggle_hidden": "per mostrare/nascondere il testo dei CW",
@@ -162,6 +162,7 @@
"missing_indicator.label": "Non trovato",
"missing_indicator.sublabel": "Risorsa non trovata",
"mute_modal.hide_notifications": "Nascondere le notifiche da quest'utente?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Utenti bloccati",
"navigation_bar.community_timeline": "Timeline locale",
"navigation_bar.direct": "Messaggi diretti",
diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json
index 08382b5a6..40f1a2fcc 100644
--- a/app/javascript/mastodon/locales/ja.json
+++ b/app/javascript/mastodon/locales/ja.json
@@ -7,7 +7,7 @@
"account.disclaimer_full": "以下の情報は不正確な可能性があります。",
"account.domain_blocked": "ドメイン非表示中",
"account.edit_profile": "プロフィールを編集",
- "account.endorse": "Feature on profile",
+ "account.endorse": "プロフィールで紹介する",
"account.follow": "フォロー",
"account.followers": "フォロワー",
"account.follows": "フォロー",
@@ -27,7 +27,7 @@
"account.show_reblogs": "@{name}さんからのブーストを表示",
"account.unblock": "@{name}さんのブロックを解除",
"account.unblock_domain": "{domain}を表示",
- "account.unendorse": "Don't feature on profile",
+ "account.unendorse": "プロフィールから外す",
"account.unfollow": "フォロー解除",
"account.unmute": "@{name}さんのミュートを解除",
"account.unmute_notifications": "@{name}さんからの通知を受け取るようにする",
@@ -162,6 +162,7 @@
"missing_indicator.label": "見つかりません",
"missing_indicator.sublabel": "見つかりませんでした",
"mute_modal.hide_notifications": "このユーザーからの通知を隠しますか?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "ブロックしたユーザー",
"navigation_bar.community_timeline": "ローカルタイムライン",
"navigation_bar.direct": "ダイレクトメッセージ",
diff --git a/app/javascript/mastodon/locales/ka.json b/app/javascript/mastodon/locales/ka.json
index 494270b9d..d2a915c60 100644
--- a/app/javascript/mastodon/locales/ka.json
+++ b/app/javascript/mastodon/locales/ka.json
@@ -162,6 +162,7 @@
"missing_indicator.label": "არაა ნაპოვნი",
"missing_indicator.sublabel": "ამ რესურსის პოვნა ვერ მოხერხდა",
"mute_modal.hide_notifications": "დავმალოთ შეტყობინებები ამ მომხმარებლისგან?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "დაბლოკილი მომხმარებლები",
"navigation_bar.community_timeline": "ლოკალური თაიმლაინი",
"navigation_bar.direct": "პირდაპირი წერილები",
diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json
index b7b280591..18150d17c 100644
--- a/app/javascript/mastodon/locales/ko.json
+++ b/app/javascript/mastodon/locales/ko.json
@@ -162,6 +162,7 @@
"missing_indicator.label": "찾을 수 없습니다",
"missing_indicator.sublabel": "이 리소스를 찾을 수 없었습니다",
"mute_modal.hide_notifications": "이 사용자로부터의 알림을 뮤트하시겠습니까?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "차단한 사용자",
"navigation_bar.community_timeline": "로컬 타임라인",
"navigation_bar.direct": "다이렉트 메시지",
diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json
index c19598a21..72ffbdc6e 100644
--- a/app/javascript/mastodon/locales/nl.json
+++ b/app/javascript/mastodon/locales/nl.json
@@ -7,7 +7,7 @@
"account.disclaimer_full": "De informatie hieronder kan mogelijk een incompleet beeld geven van dit gebruikersprofiel.",
"account.domain_blocked": "Domein verborgen",
"account.edit_profile": "Profiel bewerken",
- "account.endorse": "Feature on profile",
+ "account.endorse": "Op profiel weergeven",
"account.follow": "Volgen",
"account.followers": "Volgers",
"account.follows": "Volgt",
@@ -27,7 +27,7 @@
"account.show_reblogs": "Toon boosts van @{name}",
"account.unblock": "Deblokkeer @{name}",
"account.unblock_domain": "{domain} niet langer negeren",
- "account.unendorse": "Don't feature on profile",
+ "account.unendorse": "Niet op profiel weergeven",
"account.unfollow": "Ontvolgen",
"account.unmute": "@{name} niet langer negeren",
"account.unmute_notifications": "@{name} meldingen niet langer negeren",
@@ -162,6 +162,7 @@
"missing_indicator.label": "Niet gevonden",
"missing_indicator.sublabel": "Deze hulpbron kan niet gevonden worden",
"mute_modal.hide_notifications": "Verberg meldingen van deze persoon?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Geblokkeerde gebruikers",
"navigation_bar.community_timeline": "Lokale tijdlijn",
"navigation_bar.direct": "Directe berichten",
diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json
index d11e3a5a4..3e9612edb 100644
--- a/app/javascript/mastodon/locales/no.json
+++ b/app/javascript/mastodon/locales/no.json
@@ -162,6 +162,7 @@
"missing_indicator.label": "Ikke funnet",
"missing_indicator.sublabel": "Denne ressursen ble ikke funnet",
"mute_modal.hide_notifications": "Skjul varslinger fra denne brukeren?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Blokkerte brukere",
"navigation_bar.community_timeline": "Lokal tidslinje",
"navigation_bar.direct": "Direct messages",
diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json
index 1d81594ca..6aaf4cc63 100644
--- a/app/javascript/mastodon/locales/oc.json
+++ b/app/javascript/mastodon/locales/oc.json
@@ -162,6 +162,7 @@
"missing_indicator.label": "Pas trobat",
"missing_indicator.sublabel": "Aquesta ressorsa es pas estada trobada",
"mute_modal.hide_notifications": "Rescondre las notificacions d’aquesta persona ?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Personas blocadas",
"navigation_bar.community_timeline": "Flux public local",
"navigation_bar.direct": "Messatges dirèctes",
diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json
index 5b22b5f69..758e207f2 100644
--- a/app/javascript/mastodon/locales/pl.json
+++ b/app/javascript/mastodon/locales/pl.json
@@ -162,6 +162,7 @@
"missing_indicator.label": "Nie znaleziono",
"missing_indicator.sublabel": "Nie można odnaleźć tego zasobu",
"mute_modal.hide_notifications": "Chcesz ukryć powiadomienia od tego użytkownika?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Zablokowani użytkownicy",
"navigation_bar.community_timeline": "Lokalna oś czasu",
"navigation_bar.direct": "Wiadomości bezpośrednie",
diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json
index 2764fb4c6..bdfdd46e5 100644
--- a/app/javascript/mastodon/locales/pt-BR.json
+++ b/app/javascript/mastodon/locales/pt-BR.json
@@ -162,6 +162,7 @@
"missing_indicator.label": "Não encontrado",
"missing_indicator.sublabel": "Esse recurso não pôde ser encontrado",
"mute_modal.hide_notifications": "Esconder notificações deste usuário?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Usuários bloqueados",
"navigation_bar.community_timeline": "Local",
"navigation_bar.direct": "Mensagens diretas",
diff --git a/app/javascript/mastodon/locales/pt.json b/app/javascript/mastodon/locales/pt.json
index 94e68db43..b3c4c3ad9 100644
--- a/app/javascript/mastodon/locales/pt.json
+++ b/app/javascript/mastodon/locales/pt.json
@@ -162,6 +162,7 @@
"missing_indicator.label": "Não encontrado",
"missing_indicator.sublabel": "Este recurso não foi encontrado",
"mute_modal.hide_notifications": "Esconder notificações deste utilizador?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Utilizadores bloqueados",
"navigation_bar.community_timeline": "Local",
"navigation_bar.direct": "Direct messages",
diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json
index 0e8586903..8ba26a3c8 100644
--- a/app/javascript/mastodon/locales/ru.json
+++ b/app/javascript/mastodon/locales/ru.json
@@ -162,6 +162,7 @@
"missing_indicator.label": "Не найдено",
"missing_indicator.sublabel": "Запрашиваемый ресурс не найден",
"mute_modal.hide_notifications": "Убрать уведомления от этого пользователя?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Список блокировки",
"navigation_bar.community_timeline": "Локальная лента",
"navigation_bar.direct": "Личные сообщения",
diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json
index 7554485a3..8c36f866d 100644
--- a/app/javascript/mastodon/locales/sk.json
+++ b/app/javascript/mastodon/locales/sk.json
@@ -162,6 +162,7 @@
"missing_indicator.label": "Nenájdené",
"missing_indicator.sublabel": "Tento zdroj sa nepodarilo nájsť",
"mute_modal.hide_notifications": "Skryť notifikácie od tohoto užívateľa?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Blokovaní užívatelia",
"navigation_bar.community_timeline": "Lokálna časová os",
"navigation_bar.direct": "Súkromné správy",
diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json
index 8f637143c..01617f790 100644
--- a/app/javascript/mastodon/locales/sl.json
+++ b/app/javascript/mastodon/locales/sl.json
@@ -162,6 +162,7 @@
"missing_indicator.label": "Not found",
"missing_indicator.sublabel": "This resource could not be found",
"mute_modal.hide_notifications": "Hide notifications from this user?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Blocked users",
"navigation_bar.community_timeline": "Local timeline",
"navigation_bar.direct": "Direct messages",
diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json
index 473b18fa3..96b46077a 100644
--- a/app/javascript/mastodon/locales/sr-Latn.json
+++ b/app/javascript/mastodon/locales/sr-Latn.json
@@ -162,6 +162,7 @@
"missing_indicator.label": "Nije pronađeno",
"missing_indicator.sublabel": "This resource could not be found",
"mute_modal.hide_notifications": "Sakrij obaveštenja od ovog korisnika?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Blokirani korisnici",
"navigation_bar.community_timeline": "Lokalna lajna",
"navigation_bar.direct": "Direct messages",
diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json
index 4ee47fb2d..681337947 100644
--- a/app/javascript/mastodon/locales/sr.json
+++ b/app/javascript/mastodon/locales/sr.json
@@ -162,6 +162,7 @@
"missing_indicator.label": "Није пронађено",
"missing_indicator.sublabel": "This resource could not be found",
"mute_modal.hide_notifications": "Сакриј обавештења од овог корисника?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Блокирани корисници",
"navigation_bar.community_timeline": "Локална лајна",
"navigation_bar.direct": "Direct messages",
diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json
index 0d55fbd82..5c11e72d9 100644
--- a/app/javascript/mastodon/locales/sv.json
+++ b/app/javascript/mastodon/locales/sv.json
@@ -3,9 +3,9 @@
"account.block": "Blockera @{name}",
"account.block_domain": "Dölj allt från {domain}",
"account.blocked": "Blockerad",
- "account.direct": "Direct Message @{name}",
+ "account.direct": "Direktmeddelande @{name}",
"account.disclaimer_full": "Informationen nedan kan spegla användarens profil ofullständigt.",
- "account.domain_blocked": "Domän gömd",
+ "account.domain_blocked": "Domän dold",
"account.edit_profile": "Redigera profil",
"account.endorse": "Feature on profile",
"account.follow": "Följ",
@@ -162,6 +162,7 @@
"missing_indicator.label": "Hittades inte",
"missing_indicator.sublabel": "Den här resursen kunde inte hittas",
"mute_modal.hide_notifications": "Dölj notifikationer från denna användare?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Blockerade användare",
"navigation_bar.community_timeline": "Lokal tidslinje",
"navigation_bar.direct": "Direktmeddelanden",
diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json
index f8228e7ff..8aeebd048 100644
--- a/app/javascript/mastodon/locales/te.json
+++ b/app/javascript/mastodon/locales/te.json
@@ -162,6 +162,7 @@
"missing_indicator.label": "దొరకలేదు",
"missing_indicator.sublabel": "ఈ వనరు కనుగొనబడలేదు",
"mute_modal.hide_notifications": "ఈ వినియోగదారు నుండి నోటిఫికేషన్లను దాచాలా?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "బ్లాక్ చేయబడిన వినియోగదారులు",
"navigation_bar.community_timeline": "స్థానిక కాలక్రమం",
"navigation_bar.direct": "ప్రత్యక్ష సందేశాలు",
diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json
index ce48e7259..5e4995b71 100644
--- a/app/javascript/mastodon/locales/th.json
+++ b/app/javascript/mastodon/locales/th.json
@@ -162,6 +162,7 @@
"missing_indicator.label": "Not found",
"missing_indicator.sublabel": "This resource could not be found",
"mute_modal.hide_notifications": "Hide notifications from this user?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Blocked users",
"navigation_bar.community_timeline": "Local timeline",
"navigation_bar.direct": "Direct messages",
diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json
index 032a82a22..be7ad47e4 100644
--- a/app/javascript/mastodon/locales/tr.json
+++ b/app/javascript/mastodon/locales/tr.json
@@ -162,6 +162,7 @@
"missing_indicator.label": "Bulunamadı",
"missing_indicator.sublabel": "This resource could not be found",
"mute_modal.hide_notifications": "Hide notifications from this user?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Engellenen kullanıcılar",
"navigation_bar.community_timeline": "Yerel zaman tüneli",
"navigation_bar.direct": "Direct messages",
diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json
index cca98840b..5f7e5c266 100644
--- a/app/javascript/mastodon/locales/uk.json
+++ b/app/javascript/mastodon/locales/uk.json
@@ -162,6 +162,7 @@
"missing_indicator.label": "Не знайдено",
"missing_indicator.sublabel": "Ресурс не знайдений",
"mute_modal.hide_notifications": "Приховати сповіщення від користувача?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Заблоковані користувачі",
"navigation_bar.community_timeline": "Локальна стрічка",
"navigation_bar.direct": "Прямі повідомлення",
diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json
index dd4ec4adc..378a1a45b 100644
--- a/app/javascript/mastodon/locales/zh-CN.json
+++ b/app/javascript/mastodon/locales/zh-CN.json
@@ -162,6 +162,7 @@
"missing_indicator.label": "找不到内容",
"missing_indicator.sublabel": "无法找到此资源",
"mute_modal.hide_notifications": "同时隐藏来自这个用户的通知",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "已屏蔽的用户",
"navigation_bar.community_timeline": "本站时间轴",
"navigation_bar.direct": "私信",
diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json
index 70442cfe8..f0718468a 100644
--- a/app/javascript/mastodon/locales/zh-HK.json
+++ b/app/javascript/mastodon/locales/zh-HK.json
@@ -162,6 +162,7 @@
"missing_indicator.label": "找不到內容",
"missing_indicator.sublabel": "無法找到內容",
"mute_modal.hide_notifications": "隱藏來自這用戶的通知嗎?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "被你封鎖的用戶",
"navigation_bar.community_timeline": "本站時間軸",
"navigation_bar.direct": "個人訊息",
diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json
index 841f79dd3..ca5919e30 100644
--- a/app/javascript/mastodon/locales/zh-TW.json
+++ b/app/javascript/mastodon/locales/zh-TW.json
@@ -162,6 +162,7 @@
"missing_indicator.label": "找不到",
"missing_indicator.sublabel": "找不到此資源",
"mute_modal.hide_notifications": "隱藏來自這個使用者的通知?",
+ "navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "封鎖的使用者",
"navigation_bar.community_timeline": "本地時間軸",
"navigation_bar.direct": "私訊",
diff --git a/config/locales/ar.yml b/config/locales/ar.yml
index 76c4078db..e32dac715 100644
--- a/config/locales/ar.yml
+++ b/config/locales/ar.yml
@@ -1,22 +1,25 @@
---
ar:
about:
- about_hashtag_html: هذه هي الرسائل العامة مع الكلمات الدلالية 1#%{hashtag} . يمكنك التفاعل معهم إذا كان لديك حساب في أي مكان على الإنترنت المتحد.
- about_mastodon_html: ماستدون شبكة إجتماعية حرة و مفتوحة المصدر . هو بديل لامركزي لمنصات تجارية ، يمكنك من تجنب احتكار شركة واحدة للإتصالات الخاصة بك. يمكنك اختيار أي خادم تثق فيه. أيهما تختار، يمكنك التفاعل مع أي شخص آخر على الشبكة. يمكن لأي شخص تنصيب و تشغيل خادم ماستدون خاص به والمشاركة في الشبكات الاجتماعية بكل شفافية.
+ about_hashtag_html: هذه تبويقات متاحة للجمهور تحتوي على الكلمات الدلالية #%{hashtag} . يمكنك التفاعل معها إن كان لديك حساب في أي مكان على الفديفرس.
+ about_mastodon_html: ماستدون شبكة إجتماعية مبنية على أسُس بروتوكولات برمجيات الويب الحرة و مفتوحة المصدر. و هو لامركزي تمامًا كالبريد الإلكتروني.
about_this: عن مثيل الخادوم هذا
- administered_by: 'يديره :'
- closed_registrations: التسجيلات في مثيل الخادوم هذا مُغلقة حاليًا.
+ administered_by: 'يُديره :'
+ api: واجهة برمجة التطبيقات
+ apps: تطبيقات الأجهزة المحمولة
+ closed_registrations: التسجيلات في مثيل الخادوم هذا مُغلقة حاليًا. غير أنه بامكانك العثور على خادم آخر لإنشاء حسابك و مِن ثم النفاذ إلى نفس الشبكة مِن هناك.
contact: للتواصل معنا
- contact_missing: غير محدد
+ contact_missing: لم يتم تعيينه
contact_unavailable: غير متوفر
+ documentation: الدليل
extended_description_html: |
مكان جيد للقواعد
- لا يوجد تفصيل طويل حتى الآن.
+ لم يتم بعد إدخال الوصف الطويل.
features:
humane_approach_body: تعلُّمًا مِن فشل الشبكات الأخرى، غاية ماستدون هي بلوغ الخيارات الأخلاقية في التصميم لمُحارَبة إسائة إستعمال شبكات التواصل الإجتماعية.
- humane_approach_title: أسلوب يعيد الإعتبار للإنسان
+ humane_approach_title: أسلوب يُعيد الإعتبار للفَرد
not_a_product_body: ماستدون ليس شبكة تجارية. لا يحتوي على إعلانات و لا يقوم باستغلال البيانات و لا هو بِبُستان مُسيَّج. لا تحكم فيه وليس له أية هيئةٍ مركزيةٍ.
- not_a_product_title: إنك إنسان و لست سلعة
+ not_a_product_title: إنك فرد و لست سلعة
real_conversation_body: يُمكنكم التعبير عن آرائكم بكل حرية بفضل 500 حرف و انتقاء دقيق للمحتوى و الوسائط بفضل أدوات التحذير التي هي بين أيديكم.
real_conversation_title: مبني لتحقيق تواصل حقيقي
within_reach_body: إبقوا على اتصال دائم بأصدقائكم حيثما كانوا عبر عدة تطبيقات لنظام آي أواس و أندرويد و عدة منصات أخرى بفضل واجهة برمجية للتطبيقات و بيئة صديقة للتطوير.
@@ -25,22 +28,28 @@ ar:
hosted_on: ماستدون مُستضاف على %{domain}
learn_more: تعلم المزيد
other_instances: خوادم أخرى
+ privacy_policy: سياسة الخصوصية
source_code: الشفرة المصدرية
status_count_after: منشورا
status_count_before: نشروا
+ terms: شروط الخدمة
user_count_after: مستخدم
user_count_before: يستضيف
what_is_mastodon: ما هو ماستدون ؟
accounts:
+ choices_html: 'توصيات %{name} :'
follow: إتبع
followers: متابِعون
following: يتابعون
+ joined: انضم·ت في %{date}
media: الوسائط
moved_html: "%{name} إنتقلَ إلى %{new_profile_link} :"
network_hidden: إنّ المعطيات غير متوفرة
nothing_here: لا يوجد أي شيء هنا !
people_followed_by: الأشخاص الذين يتبعهم %{name}
people_who_follow: الأشخاص الذين يتبعون %{name}
+ pin_errors:
+ following: يجب أن تكون مِن متابعي حساب الشخص الذي تريد إبرازه
posts: منشورات
posts_with_replies: التبويقات و الردود
reserved_username: إسم المستخدم محجوز
@@ -176,6 +185,7 @@ ar:
unsuspend_account: لقد قام %{name} بإلغاء التعليق المفروض على حساب %{target}
update_custom_emoji: "%{name} قام بتحديث الإيموجي %{target}"
update_status: لقد قام %{name} بتحديث منشور %{target}
+ deleted_status: "(منشور محذوف)"
title: سِجلّ التفتيش و المعاينة
custom_emojis:
by_domain: النطاق
@@ -203,15 +213,24 @@ ar:
updated_msg: تم تحديث الإيموجي بنجاح !
upload: رفع
dashboard:
+ backlog: الأعمال المتراكمة
+ config: الإعداد
+ feature_deletions: الحسابات المحذوفة
feature_invites: روابط الدعوات
feature_registrations: التسجيلات
feature_relay: المُرحّل الفديرالي
features: الميّزات
hidden_service: الفيديرالية مع الخدمات الخفية
+ open_reports: فتح التقريرات
+ recent_users: أحدث المستخدِمين
search: البحث النصي الكامل
+ single_user_mode: وضع المستخدِم الأوحد
software: البرنامج
space: المساحة المستخدَمة
title: لوح المراقبة
+ total_users: إجمالي المستخدِمين
+ trends: المؤشرات
+ week_interactions: تفاعُلات هذا الأسبوع
week_users_active: نشط هذا الأسبوع
week_users_new: مستخدِمين هذا الأسبوع
domain_blocks:
@@ -263,6 +282,7 @@ ar:
search: البحث
title: مثيلات الخوادم المعروفة
invites:
+ deactivate_all: تعطيلها كافة
filter:
all: الكل
available: المتوفرة
@@ -271,6 +291,7 @@ ar:
title: الدعوات
relays:
add_new: إضافة مُرحّل جديد
+ enable_hint: عندما تقوم بتنشيط هذه الميزة، سوف يشترك خادومك في جميع التبويقات القادمة مِن هذا المُرحِّل و سيشرع كذلك بإرسال كافة التبويقات العمومية إليه.
inbox_url: رابط المُرحّل
setup: إعداد اتصال بمُرحّل
status: الحالة
@@ -332,6 +353,8 @@ ar:
peers_api_enabled:
desc_html: أسماء النطاقات التي إلتقى بها مثيل الخادوم على البيئة الموحَّدة فيديفرس
title: نشر عدد مثيلات الخوادم التي تم مصادفتها
+ preview_sensitive_media:
+ title: إظهار الصور الحساسة في مُعاينات أوبن غراف
registrations:
closed_message:
desc_html: يتم عرضه على الصفحة الرئيسية عندما يتم غلق تسجيل الحسابات الجديدة. يمكنكم إستخدام علامات الأيتش تي أم أل HTML
@@ -357,6 +380,9 @@ ar:
site_description_extended:
desc_html: مكان جيد لمدونة قواعد السلوك والقواعد والإرشادات وغيرها من الأمور التي تحدد حالتك. يمكنك استخدام علامات HTML
title: الوصف المُفصّل للموقع
+ site_short_description:
+ desc_html: يتم عرضه في لوحة جانبية و في البيانات الوصفية. قم بوصف ماستدون و ما يميز هذا السيرفر عن الآخرين في فقرة موجزة. إن تركت الحقل فارغا فسوف يتم عرض الوصف الإفتراضي لمثيل الخادوم.
+ title: مقدمة وصفية قصيرة عن مثيل الخادوم
site_terms:
desc_html: يمكنك كتابة سياسة الخصوصية الخاصة بك ، شروط الخدمة أو غيرها من القوانين. يمكنك استخدام علامات HTML
title: شروط الخدمة المخصصة
@@ -378,6 +404,7 @@ ar:
media:
title: الوسائط
no_media: لا يوجد وسائط
+ no_status_selected: لم يطرأ أي تغيير على أي منشور بما أنه لم يتم اختيار أي واحد
title: منشورات الحساب
with_media: بالوسائط
subscriptions:
@@ -509,7 +536,13 @@ ar:
success:
one: جارية عملية حظر المتابِعين بسلاسة من نطاق آخر ...
other: جارية عملية حظر المتابِعين بسلاسة من %{count} نطاقات أخرى ...
+ true_privacy_html: تذكر دائمًا أنّ الخصوصية التامة لا يمكن بلوغها إلّا بالتعمية و التشفير من طرف إلى آخَر .
+ unlocked_warning_html: يمكن لأي كان متابعة حسابك و الإطلاع مباشرة على تبويقاتك. إستخدِم %{lock_link} لمُعاينة أو رفض طلبات المتابِعين الجُدُد.
unlocked_warning_title: إنّ حسابك غير مقفل
+ footer:
+ developers: المطورون
+ more: المزيد …
+ resources: الموارد
generic:
changes_saved_msg: تم حفظ التعديلات بنجاح !
save_changes: حفظ التغييرات
@@ -524,6 +557,7 @@ ar:
following: قائمة المستخدمين المتبوعين
muting: قائمة الكتم
upload: تحميل
+ in_memoriam_html: في ذكرى.
invites:
delete: تعطيل
expired: إنتهت صلاحيتها
@@ -617,11 +651,14 @@ ar:
publishing: النشر
web: الويب
remote_follow:
- acct: قم بإدخال عنوان حسابك username@domain الذي من خلاله تود المتابعة
+ acct: قم بإدخال عنوان حسابك username@domain الذي من خلاله تود النشاط
missing_resource: تعذر العثور على رابط التحويل المطلوب الخاص بحسابك
no_account_html: أليس عندك حساب بعدُ ؟ يُمْكنك التسجيل مِن هنا
proceed: أكمل المتابعة
prompt: 'إنك بصدد متابعة :'
+ remote_interaction:
+ proceed: إبدأ التفاعل
+ prompt: 'تريد التفاعُل مع هذا التبويق:'
remote_unfollow:
error: خطأ
title: العنوان
@@ -691,6 +728,7 @@ ar:
video:
one: "%{count} فيديو"
other: "%{count} فيديوهات"
+ boosted_from_html: تم إعادة ترقيته مِن %{acct_link}
content_warning: 'تحذير عن المحتوى : %{warning}'
disallowed_hashtags:
one: 'يحتوي على وسم ممنوع : %{tags}'
@@ -701,9 +739,10 @@ ar:
pin_errors:
limit: لقد بلغت الحد الأقصى للتبويقات المدبسة
ownership: لا يمكن تدبيس تبويق نشره شخص آخر
- private: لا يمكن تثبيت تبويق لم يُنشر للعامة
+ private: لا يمكن تدبيس تبويق لم يُنشر للعامة
reblog: لا يمكن تثبيت ترقية
show_more: أظهر المزيد
+ sign_in_to_participate: قم بتسجيل الدخول للمشاركة في هذه المحادثة
title: '%{name} : "%{quote}"'
visibilities:
private: إعرض فقط لمتتبعيك
@@ -725,6 +764,7 @@ ar:
time:
formats:
default: "%b %d, %Y, %H:%M"
+ month: "%b %Y"
two_factor_authentication:
code_hint: قم بإدخال الرمز المُوَلّد عبر تطبيق المصادقة للتأكيد
description_html: في حال تفعيل المصادقة بخطوتين ، فتسجيل الدخول يتطلب منك أن يكون بحوزتك هاتفك النقال قصد توليد الرمز الذي سيتم إدخاله.
@@ -734,6 +774,7 @@ ar:
enabled_success: تم تفعيل المصادقة بخطوتين بنجاح
generate_recovery_codes: توليد رموز الإسترجاع
instructions_html: "قم بمسح رمز الكيو آر عبر Google Authenticator أو أي تطبيق TOTP على جهازك . من الآن فصاعدا سوف يقوم ذاك التطبيق بتوليد رموز يجب عليك إدخالها عند تسجيل الدخول."
+ lost_recovery_codes: تُمكّنك رموز الإسترجاع الإحتاطية مِن استرجاع النفاذ إلى حسابك في حالة فقدان جهازك المحمول. إن ضاعت منك هذه الرموز فبإمكانك إعادة توليدها مِن هنا و إبطال الرموز القديمة.
manual_instructions: 'في حالة تعذّر مسح رمز الكيو آر أو طُلب منك إدخال يدوي، يُمْكِنك إدخال هذا النص السري على التطبيق :'
recovery_codes: النسخ الإحتياطي لرموز الإسترجاع
recovery_codes_regenerated: تم إعادة توليد رموز الإسترجاع الإحتياطية بنجاح
@@ -741,16 +782,22 @@ ar:
wrong_code: الرمز الذي أدخلته غير صالح ! تحقق من صحة الوقت على الخادم و الجهاز ؟
user_mailer:
backup_ready:
- explanation: ''
+ explanation: لقد قمت بطلب نسخة كاملة لحسابك على ماستدون. إنها متوفرة الآن للتنزيل !
subject: نسخة بيانات حسابك جاهزة للتنزيل
title: المغادرة بأرشيف الحساب
welcome:
edit_profile_action: تهيئة الملف الشخصي
explanation: ها هي بعض النصائح قبل بداية الإستخدام
final_action: اشرَع في النشر
+ final_step: |-
+ يمكنك الشروع في النشر في الحين ! حتى و إن لم كنت لا تمتلك متابِعين بعدُ، يمكن للآخرين الإطلاع على منشوراتك الموجهة للجمهور على الخيط المحلي أو إن قمت باستخدام وسوم.
+ إبدأ بتقديم نفسك باستعمال وسم #introductions.
full_handle: عنوانك الكامل
+ full_handle_hint: هذا هو ما يجب تقديمه لأصدقائك قصد أن يكون بإمكانهم متابَعتك أو مُراسَلتك حتى و إن كانت حساباتهم على خوادم أخرى.
review_preferences_action: تعديل التفضيلات
subject: أهلًا بك على ماستدون
+ tip_bridge_html: إن كنت قادما مِن تويتر، باستطاعتك العثور على أصدقائك على ماستدون باستخدام تطبيق الجسر بشرط أن يكون أصدقاؤك قد سجلوا حساباتهم على الجسر مِن قبل، و إلّا فلن تنجح العملية !
+ tip_following: أنت تتبع تلقائيا مديري و مديرات الخادم. للعثور على أشخاص مميزين أو قد تهمك حساباتهم بإمكانك الإطلاع على الخيوط المحلية و كذا الفدرالية.
tips: نصائح
title: أهلاً بك، %{name} !
users:
diff --git a/config/locales/cs.yml b/config/locales/cs.yml
index 94577249e..9ae9c259c 100644
--- a/config/locales/cs.yml
+++ b/config/locales/cs.yml
@@ -6,6 +6,7 @@ cs:
about_this: O této instanci
administered_by: 'Server spravuje:'
api: API
+ apps: Mobilní aplikace
closed_registrations: Registrace na této instanci jsou momentálně uzavřené. Můžete si však najít jinou instanci, vytvořit si na ní účet a získat z ní přístup do naprosto stejné sítě.
contact: Kontakt
contact_missing: Nenastaveno
@@ -36,6 +37,7 @@ cs:
user_count_before: Domov
what_is_mastodon: Co je Mastodon?
accounts:
+ choices_html: 'Volby uživatele %{name}:'
follow: Sledovat
followers: Sledovatelé
following: Sleduje
@@ -46,6 +48,8 @@ cs:
nothing_here: Tady nic není!
people_followed_by: Lidé, které %{name} sleduje
people_who_follow: Lidé, kteří sledují uživatele %{name}
+ pin_errors:
+ following: Musíte již sledovat osobu, kterou chcete podpořit
posts: Tooty
posts_with_replies: Tooty a odpovědi
reserved_username: Toto uživatelské jméno je rezervováno
@@ -181,6 +185,7 @@ cs:
unsuspend_account: "%{name} zrušil/a suspenzaci účtu uživatele %{target}"
update_custom_emoji: "%{name} aktualizoval/a emoji %{target}"
update_status: "%{name} aktualizoval/a příspěvek uživatele %{target}"
+ deleted_status: "(smazaný příspěvek)"
title: Záznam auditu
custom_emojis:
by_domain: Doména
@@ -277,6 +282,7 @@ cs:
search: Hledat
title: Známé instance
invites:
+ deactivate_all: Deaktivovat vše
filter:
all: Vše
available: Dostupné
@@ -398,6 +404,7 @@ cs:
media:
title: Média
no_media: Žádná média
+ no_status_selected: Nebyly změněny žádné příspěvky, neboť žádné nebyly vybrány
title: Příspěvky účtu
with_media: S médii
subscriptions:
@@ -649,11 +656,14 @@ cs:
publishing: Publikování
web: Web
remote_follow:
- acct: Napište svou přezdívku@doménu, ze které chcete sledovat
+ acct: Napište svou přezdívku@doménu, ze které chcete jednat
missing_resource: Nemůžeme najít požadované přesměrovací URL pro váš účet
no_account_html: Ještě nemáte účet? Můžete se registrovat zde
proceed: Pokračujte pro sledování
prompt: 'Budete sledovat:'
+ remote_interaction:
+ proceed: Pokračujte k interakci
+ prompt: 'Chcete interagovat s tímto tootem:'
remote_unfollow:
error: Chyba
title: Nadpis
@@ -737,6 +747,7 @@ cs:
private: Nelze připnout neveřejné tooty
reblog: Nelze připnout boostnutí
show_more: Zobrazit více
+ sign_in_to_participate: Chcete-li se účastnit této konverzace, přihlaste se
title: '%{name}: "%{quote}"'
visibilities:
private: Pouze pro sledovatele
@@ -748,7 +759,7 @@ cs:
stream_entries:
pinned: Připnutý toot
reblogged: boostnutý
- sensitive_content: CItlivý obsah
+ sensitive_content: Citlivý obsah
terms:
body_html: |
Zásady soukromí
diff --git a/config/locales/da.yml b/config/locales/da.yml
index 1a27db34f..285a0b23f 100644
--- a/config/locales/da.yml
+++ b/config/locales/da.yml
@@ -6,6 +6,7 @@ da:
about_this: Om
administered_by: 'Administreret af:'
api: API
+ apps: Apps til mobilen
closed_registrations: Registreringer er på nuværrende tidspunkt lukkede for denne instans. Du kan dog finde andre instanser du kan oprette dig på og få adgang til det samme netværk derfra.
contact: Kontakt
contact_missing: Ikke sat
@@ -36,6 +37,7 @@ da:
user_count_before: Hjem til
what_is_mastodon: Hvad er Mastodon?
accounts:
+ choices_html: "%{name}s valg:"
follow: Følg
followers: Følgere
following: Følger
@@ -46,6 +48,8 @@ da:
nothing_here: Der er intet her!
people_followed_by: Folk som %{name} følger
people_who_follow: Folk der følger %{name}
+ pin_errors:
+ following: Du er nødt til at følge den person du ønsker at støtte
posts: Trut
posts_with_replies: Trut og svar
reserved_username: Brugernavnet er allerede taget
@@ -181,6 +185,7 @@ da:
unsuspend_account: "%{name} fjernede udelukkelsen fra %{target}s konto"
update_custom_emoji: "%{name} opdaterede humørikonet %{target}"
update_status: "%{name} opdaterede status for %{target}"
+ deleted_status: "(slettet status)"
title: Revisionslog
custom_emojis:
by_domain: Domæne
@@ -266,6 +271,7 @@ da:
domain: Domæne
new:
create: Tilføj domæne
+ title: Ny email blokade opslag
title: Email sortliste
instances:
account_count: Kendte konti
@@ -274,6 +280,7 @@ da:
search: Søg
title: Kendte instanser
invites:
+ deactivate_all: Deaktiver alle
filter:
all: Alle
available: Tilgængelig
@@ -318,19 +325,26 @@ da:
suspend_account: Udeluk konto
target: Mål
title: Anmeldelser
+ unassign: Utildel
unresolved: Uløst
updated_at: Opdateret
view: Se
settings:
+ bootstrap_timeline_accounts:
+ title: Standard følger for nye brugere
contact_information:
email: Forretnings email
username: Kontakt brugernavn
hero:
+ desc_html: Vist på forsiden. Mindst 600x100px anbefales. Hvis ikke sat, vil dette falde tilbage til billedet for instansen
title: Billede af helt
peers_api_enabled:
title: Udgiv liste over opdagede instanser
+ preview_sensitive_media:
+ title: Vis følsomt medie i OpenGraph forhåndsvisninger
registrations:
closed_message:
+ desc_html: Vist på forsiden når registreringer er lukkede. Du kan bruge HTML tags
title: Besked for lukkede registreringer
deletion:
desc_html: Tillad alle at slette deres konto
@@ -341,6 +355,8 @@ da:
open:
desc_html: Tillad alle at oprette en konto
title: Åben registrering
+ show_known_fediverse_at_about_page:
+ title: Vis kendte fedivers på tidslinje forhåndsvisning
show_staff_badge:
desc_html: Vis personale emblem på en brugerside
title: Vis personale emblem
@@ -351,6 +367,7 @@ da:
site_title: Navn på instans
timeline_preview:
desc_html: Vis offentlig tidslinje på landingssiden
+ title: Tidslinje forhåndsvisning
title: Indstillinger for side
statuses:
back_to_account: Tilbage til kontosiden
@@ -455,6 +472,7 @@ da:
csv: CSV
follows: Du følger
mutes: Du dæmper
+ storage: Medie lager
filters:
contexts:
home: Hjemme tidslinje
@@ -537,11 +555,13 @@ da:
favourite:
body: 'Din status blev favoriseret af %{name}:'
subject: "%{name} favoriserede din status"
+ title: Ny favorit
follow:
body: "%{name} følger dig nu!"
subject: "%{name} følger dig nu"
title: Ny følger
follow_request:
+ action: Håndter følgeranmodninger
body: "%{name} har anmodet om at følge dig"
mention:
action: Svar
@@ -576,6 +596,8 @@ da:
no_account_html: Har du ikke en konto? Du kan oprette dig her
proceed: Fortsæt for at følge
prompt: 'Du er ved at følge:'
+ remote_interaction:
+ prompt: 'Du ønsker at interagere med dette trut:'
remote_unfollow:
error: Fejl
title: Titel
@@ -609,6 +631,7 @@ da:
delete: Sletning af konto
development: Udvikling
edit_profile: Rediger profil
+ export: Data exportering
followers: Godkendte følgere
import: Importer
migrate: Konto migrering
@@ -633,10 +656,11 @@ da:
over_character_limit: grænsen på %{max} tegn er overskredet
pin_errors:
limit: Du har allerede fastgjort det maksimale antal trut
- ownership: Dun kan ikke fastgøre en anden persons toot
+ ownership: Du kan ikke fastgøre en anden persons trut
private: Ikke offentlige trut kan ikke blive fastgjort
reblog: Fremhævede trut kan ikke fastgøres
show_more: Vis mere
+ sign_in_to_participate: Log ind for at deltage i samtalen
title: '%{name}: "%{quote}"'
visibilities:
private: Kun-følgere
@@ -646,7 +670,7 @@ da:
unlisted: Ikke listet
unlisted_long: Alle kan se, men vil ikke være listet på offentlige tidslinjer
stream_entries:
- pinned: Fastgjort toot
+ pinned: Fastgjort trut
reblogged: fremhævede
sensitive_content: Følsomt indhold
terms:
@@ -680,10 +704,12 @@ da:
edit_profile_action: Opsæt profil
explanation: Her er nogle råd til at starte med
final_action: Kom igang med at poste
+ final_step: 'Start med at skrive opslag! Selv uden følgere vil dine offentlige beskeder kunne ses af andre, foreksempel på den lokale tidslinje og i hashtags. Måske kunne du tænke dig at introducere dig selv på #introductions hashtagget.'
full_handle: Dit fulde brugernavn
full_handle_hint: Dette er hvad du vil fortælle dine venner så de kan sende dig beskeder eller følge dig fra andre instanser.
review_preferences_action: Ændre præferencer
subject: Velkommen til Mastodon
+ tip_bridge_html: Hvis du kommer fra Twitter, kan du finde dine venner på Mastodon ved at bruge bridge appen . Den virker dog kun hvis de også bruger bridge appen!
tip_following: Du følger som standard administratoren(e) for den server du er på. For at finde flere folk, tjek både den lokale og fælles tidslinje.
tip_local_timeline: Den lokale tidslinje er et have af folk i %{instance}. Disse er dine umiddelbare naboer!
tip_mobile_webapp: Hvis din mobil browser tilbyder dig at tilføje Mastodon til din hjemmeskærm, kan du modtage push meddelelser. Dette opfører sig på mange måder ligesom en almindelig app!
diff --git a/config/locales/devise.da.yml b/config/locales/devise.da.yml
index 6660aaae0..b201b7ca8 100644
--- a/config/locales/devise.da.yml
+++ b/config/locales/devise.da.yml
@@ -4,6 +4,7 @@ da:
confirmations:
confirmed: Din email adresse er blevet succesfuldt bekræftet.
send_instructions: Du vil modtage en mail med instrukser for hvordan du bekræfter din email adresse om få minutter. Tjek venligst din spam mappe hvis du ikke har modtaget denne email.
+ send_paranoid_instructions: Hvis din email adresse allerede findes i vores database, vil du modtage en email med instrukser for hvordan du bekræfter din email adresse om få minutter. Tjek gerne din spam mappe hvis du ikke modtager denne email.
failure:
already_authenticated: Du er allerede logget ind.
inactive: Din konto er endnu ikke aktiveret.
@@ -33,14 +34,32 @@ da:
title: Kodeordet er blevet ændret
reconfirmation_instructions:
explanation: Bekræft den nye adresse for at ændre din email.
+ extra: Hvis denne ændring ikke blev foretaget af dig, ignorer denne email. Email adressen for denne Mastodon konto vil ikke blive ændret før du følger linket foroven.
subject: 'Mastodon: Bekræft email for %{instance}'
title: Bekræft email adresse
reset_password_instructions:
action: Ændre kodeord
- explanation: Du anmodede om et nyt kodeord for din konto.
+ explanation: Du anmodede om en ny adgangskode for din konto.
+ extra: Hvis du ikke har anmodet om dette, ignorer denne email. Din adgangskode vil ikke blive ændret før du har fulgt linket foroven og oprettet en ny.
+ subject: 'Mastodon: Instrukser for nulstilling af adgangskode'
title: Kodeordet er blevet nulstillet
+ unlock_instructions:
+ subject: 'Mastodon: Instruktioner for oplåsning'
+ omniauth_callbacks:
+ failure: Kunne ikke godkende dig fra %{kind} fordi "%{reason}".
+ success: Godkendelse fra %{kind} konto lykkedes.
+ passwords:
+ no_token: Du kan ikke tilgå denne side uden at komme fra en email om nulstilling af adgangskode. Hvis du kommer fra en email om nulstilling af adgangskode, tjek om du brugte det fulde link der blev angivet.
+ send_instructions: Hvis din email adresse allerede findes i vores database, vil du modtage et link til nulstilling af adgangskode til din email adresse om få minutter. Tjek din spam mappe hvis du ikke har modtaget denne email.
+ send_paranoid_instructions: Hvis din email adresse allerede findes i vores database, vil du modtage et link til nulstilling af adgangskode til din email adresse om få minutter. Tjek din spam mappe hvis du ikke har modtaget denne email.
+ updated: Din adgangskode er nu blevet ændret. Du er nu logget ind.
+ updated_not_active: Din adgangskode blev ændret.
registrations:
+ destroyed: Farvel! Din konto er nu annulleret. Vi håber snart at se dig igen.
signed_up: Velkommen! Du har nu tilmeldt dig.
+ signed_up_but_inactive: Du har nu oprettet dig. Vi kunne dog ikke logge dig ind da din konto endnu ikke er aktiveret.
+ signed_up_but_locked: Du har nu oprettet dig. Vi kunne dog ikke logge dig ind da din konto er låst.
+ signed_up_but_unconfirmed: En besked med et bekræftelses link er nu blevet sendt til din email adresse. Følg linket for at aktivere din konti. Tjek din spam mappe hvis du ikke har modtaget denne email.
update_needs_confirmation: Du har succesfuldt opdateret din konto, men vi er nødt til at bekræfte din email adresse. Tjek venligst din email og følg bekræftelses linket for at bekræfte din nye email adresse. Tjek venligst din spam mappe hvis du ikke har modtaget denne email.
updated: Din konto er nu blevet opdateret.
sessions:
diff --git a/config/locales/doorkeeper.da.yml b/config/locales/doorkeeper.da.yml
index 7b6d0d361..dd45a5078 100644
--- a/config/locales/doorkeeper.da.yml
+++ b/config/locales/doorkeeper.da.yml
@@ -78,14 +78,19 @@ da:
errors:
messages:
access_denied: Ejeren af ressourcen eller godkendelses serveren afviste anmodningen.
+ credential_flow_not_configured: Flytning af ressourceejers adgangskode mislykkedes grundet Doorkeeper.configure.resource_owner_from_credentials ikke er opsat.
invalid_client: Klient autentikationen mislykkedes grundet en ukendt klient, ingen klient autentikation fulgte med, eller en ikke-understøttet metode.
+ invalid_grant: Autoriseringen er ugyldig, udløbet, ophævet, passer ikke med den henvisnings URI der blev brugt i autoriserings anmodningen, eller blev givet til en anden klient.
invalid_redirect_uri: Ormdirigerings-uri'en der blev angivet er ikke gyldig.
invalid_request: Anmodningen mangler en parametre, inkluderer en ikke understøttet parametre værdi eller er på en eller anden måde deformeret.
+ invalid_resource_owner: De angivne ressource ejer kredentialer er ikke gyldige, eller ressource ejeren kunne ikke blive fundet
invalid_scope: Det anmodede omfang er ugyldigt, ukendt eller deformeret.
invalid_token:
expired: Adgangs-beviset er udløbet
revoked: Adgangs-beviset er blevet ophævet
unknown: Adgangs-beviset er ugyldigt
+ resource_owner_authenticator_not_configured: Ressource ejeren kunne ikke blive fundet grundet Doorkeeper.configure.resource_owner_authenticator ikke er konfigureret.
+ server_error: Autoriserings serveren blev mødt med en uventet betingelse der forhindrede den i at færdiggøre anmodningen.
unauthorized_client: Klienten er ikke godkendt til at udføre denne anmodning ved at bruge denne metode.
unsupported_response_type: Godkendelses serveren understøtter ikke denne type respons.
flash:
diff --git a/config/locales/doorkeeper.uk.yml b/config/locales/doorkeeper.uk.yml
index d80abf01a..205ad026f 100644
--- a/config/locales/doorkeeper.uk.yml
+++ b/config/locales/doorkeeper.uk.yml
@@ -5,6 +5,8 @@ uk:
doorkeeper/application:
name: Ім'я
redirect_uri: URI перенаправлення
+ scopes: Рамки
+ website: Веб-сайт додатку
errors:
models:
doorkeeper/application:
diff --git a/config/locales/el.yml b/config/locales/el.yml
index da2a3d3cc..67baee0f2 100644
--- a/config/locales/el.yml
+++ b/config/locales/el.yml
@@ -6,6 +6,7 @@ el:
about_this: Σχετικά
administered_by: 'Διαχειρίζεται από:'
api: API
+ apps: Εφαρμογές κινητών
closed_registrations: Αυτή τη στιγμή οι εγγραφές σε αυτό τον κόμβο είναι κλειστές. Αλλά! Μπορείς να βρεις έναν άλλο κόμβο για να ανοίξεις λογαριασμό και να έχεις πρόσβαση από εκεί στο ίδιο ακριβώς δίκτυο.
contact: Επικοινωνία
contact_missing: Δεν έχει οριστεί
@@ -36,6 +37,7 @@ el:
user_count_before: Σπίτι για
what_is_mastodon: Τι είναι το Mastodon;
accounts:
+ choices_html: 'Επιλογές του/της %{name}:'
follow: Ακολούθησε
followers: Ακόλουθοι
following: Ακολουθεί
@@ -46,6 +48,8 @@ el:
nothing_here: Δεν υπάρχει τίποτα εδώ!
people_followed_by: Χρήστες που ακολουθεί ο/η %{name}
people_who_follow: Χρήστες που ακολουθούν τον/την %{name}
+ pin_errors:
+ following: Πρέπει ήδη να ακολουθείς το άτομο που θέλεις να επιδοκιμάσεις
posts: Τουτ
posts_with_replies: Τουτ και απαντήσεις
reserved_username: Το όνομα χρήστη είναι κατειλημμένο
@@ -181,6 +185,7 @@ el:
unsuspend_account: Ο/Η %{name} ήρε την παύση του λογαριασμού του χρήστη %{target}
update_custom_emoji: Ο/Η %{name} ενημέρωσε το emoji %{target}
update_status: Ο/Η %{name} ενημέρωσε την κατάσταση του/της %{target}
+ deleted_status: "(διαγραμμένη δημοσίευση)"
title: Αρχείο ελέγχου
custom_emojis:
by_domain: Τομέας
@@ -277,6 +282,7 @@ el:
search: Αναζήτηση
title: Γνωστοί κόμβοι
invites:
+ deactivate_all: Απενεργοποίηση όλων
filter:
all: Όλες
available: Διαθέσιμες
@@ -398,6 +404,7 @@ el:
media:
title: Πολυμέσα
no_media: Χωρίς πολυμέσα
+ no_status_selected: Καμία δημοσίευση δεν άλλαξε αφού καμία δεν ήταν επιλεγμένη
title: Καταστάσεις λογαριασμού
with_media: Με πολυμέσα
subscriptions:
@@ -649,11 +656,14 @@ el:
publishing: Δημοσίευση
web: Διαδίκτυο
remote_follow:
- acct: Γράψε το ΌνομαΧρήστη@τομέας από όπου θέλεις να ακολουθήσεις
+ acct: Γράψε το ΌνομαΧρήστη@τομέα από όπου θέλεις να εκτελέσεις την ενέργεια αυτή
missing_resource: Δεν βρέθηκε το απαιτούμενο URL ανακατεύθυνσης για το λογαριασμό σου
no_account_html: Δεν έχεις λογαριασμό; Μπορείς να γραφτείς εδώ
proceed: Συνέχισε για να ακολουθήσεις
prompt: 'Θα ακολουθήσεις:'
+ remote_interaction:
+ proceed: Συνέχισε για να αλληλεπιδράσεις
+ prompt: 'Θέλεις να αλληλεπιδράσεις με αυτό το τουτ:'
remote_unfollow:
error: Σφάλμα
title: Τίτλος
@@ -737,6 +747,7 @@ el:
private: Τα μη δημόσια τουτ δεν καρφιτσώνονται
reblog: Οι προωθήσεις δεν καρφιτσώνονται
show_more: Δείξε περισσότερα
+ sign_in_to_participate: Εγγράφου για να συμμετάσχεις στη συζήτηση
title: '%{name}: "%{quote}"'
visibilities:
private: Μόνο ακόλουθοι
diff --git a/config/locales/eo.yml b/config/locales/eo.yml
index 788fd5f52..996287335 100644
--- a/config/locales/eo.yml
+++ b/config/locales/eo.yml
@@ -5,10 +5,13 @@ eo:
about_mastodon_html: Mastodon estas socia reto bazita sur malfermitaj retaj protokoloj kaj sur libera malfermitkoda programo. Ĝi estas sencentra kiel retmesaĝoj.
about_this: Pri
administered_by: 'Administrata de:'
+ api: API
+ apps: Poŝtelefonaj aplikaĵoj
closed_registrations: Registriĝoj estas nuntempe fermitaj en ĉi tiu nodo. Tamen, vi povas trovi alian nodon por fari konton kaj aliri al la sama reto de tie.
contact: Kontakti
contact_missing: Ne elektita
contact_unavailable: Ne disponebla
+ documentation: Dokumentado
extended_description_html: |
Bona loko por reguloj
La detala priskribo ne estis elektita.
@@ -25,22 +28,28 @@ eo:
hosted_on: "%{domain} estas nodo de Mastodon"
learn_more: Lerni pli
other_instances: Listo de nodoj
+ privacy_policy: Privateca politiko
source_code: Fontkodo
status_count_after: mesaĝoj
status_count_before: Kie skribiĝis
+ terms: Uzkondiĉoj
user_count_after: uzantoj
user_count_before: Hejmo de
what_is_mastodon: Kio estas Mastodon?
accounts:
+ choices_html: 'Proponoj de %{name}:'
follow: Sekvi
followers: Sekvantoj
following: Sekvatoj
+ joined: Aliĝis je %{date}
media: Aŭdovidaĵoj
moved_html: "%{name} moviĝis al %{new_profile_link}:"
network_hidden: Tiu informo ne estas disponebla
nothing_here: Estas nenio ĉi tie!
people_followed_by: Sekvatoj de %{name}
people_who_follow: Sekvantoj de %{name}
+ pin_errors:
+ following: Vi devas sekvi la homon, kiun vi volas proponi
posts: Mesaĝoj
posts_with_replies: Mesaĝoj kaj respondoj
reserved_username: La uzantnomo estas rezervita
@@ -176,6 +185,7 @@ eo:
unsuspend_account: "%{name} malhaltigis la konton de %{target}"
update_custom_emoji: "%{name} ĝisdatigis emoĝion %{target}"
update_status: "%{name} ĝisdatigis mesaĝon de %{target}"
+ deleted_status: "(forigita mesaĝo)"
title: Kontrola protokolo
custom_emojis:
by_domain: Domajno
@@ -202,6 +212,27 @@ eo:
update_failed_msg: Ĝisdatigi tiun emoĝion ne eblis
updated_msg: Emoĝio sukcese ĝisdatigita!
upload: Alŝuti
+ dashboard:
+ backlog: postigitaj taskoj
+ config: Agordado
+ feature_deletions: Forigo de kontoj
+ feature_invites: Invitaj ligiloj
+ feature_registrations: Registriĝoj
+ feature_relay: Federacia ripetilo
+ features: Funkcioj
+ hidden_service: Federacio kun kaŝitaj servoj
+ open_reports: nefermitaj raportoj
+ recent_users: Lastatempaj uzantoj
+ search: Tutteksta serĉado
+ single_user_mode: Unuuzanta reĝimo
+ software: Programo
+ space: Memorspaca uzado
+ title: Kontrolpanelo
+ total_users: uzantoj sume
+ trends: Furoroj
+ week_interactions: interagoj tiusemajne
+ week_users_active: aktivaj tiusemajne
+ week_users_new: uzantoj tiusemajne
domain_blocks:
add_new: Aldoni novan
created_msg: Domajna blokado en traktado
@@ -251,6 +282,7 @@ eo:
search: Serĉi
title: Konataj nodoj
invites:
+ deactivate_all: Malaktivigi ĉion
filter:
all: Ĉio
available: Disponebla
@@ -343,11 +375,14 @@ eo:
desc_html: Montri teaman insignon en paĝo de uzanto
title: Montri teaman insignon
site_description:
- desc_html: Enkonduka alineo en la ĉefpaĝo kaj en informaj etikedoj. Vi povas uzi HTML-etikedojn, kiel <a>
kaj <em>
.
+ desc_html: Enkonduka alineo en la ĉefpaĝo. Priskribu la unikaĵojn de ĉi tiu nodo de Mastodon, kaj ĉiujn aliajn gravaĵojn. Vi povas uzi HTML-etikedojn, kiel <a>
kaj <em>
.
title: Priskribo de la nodo
site_description_extended:
desc_html: Bona loko por viaj sintenaj reguloj, aliaj reguloj, gvidlinioj kaj aliaj aferoj, kiuj apartigas vian nodon. Vi povas uzi HTML-etikedojn
title: Propraj detalaj informoj
+ site_short_description:
+ desc_html: Afiŝita en la flankpanelo kaj metadatumaj etikedoj. Priskribu kio estas Mastodon, kaj kio specialas en ĉi tiu nodo, per unu alineo. Se malplena, la priskribo de la nodo estos uzata.
+ title: Mallonga priskribo de la nodo
site_terms:
desc_html: Vi povas skribi vian propran privatecan politikon, viajn uzkondiĉojn aŭ aliajn leĝaĵojn. Vi povas uzi HTML-etikedojn
title: Propraj uzkondiĉoj
@@ -369,6 +404,7 @@ eo:
media:
title: Aŭdovidaĵoj
no_media: Neniu aŭdovidaĵo
+ no_status_selected: Neniu mesaĝo estis ŝanĝita ĉar neniu estis elektita
title: Mesaĝoj de la konto
with_media: Kun aŭdovidaĵoj
subscriptions:
@@ -511,6 +547,10 @@ eo:
true_privacy_html: Bonvolu atenti, ke vera privateco povas esti atingita nur per ĉifrado de komenco al fino .
unlocked_warning_html: Iu ajn povas eksekvi vin por tuj vidi viajn privatajn mesaĝojn. %{lock_link} por povi akcepti kaj rifuzi petojn de sekvado.
unlocked_warning_title: Via konto ne estas ŝlosita
+ footer:
+ developers: Programistoj
+ more: Pli…
+ resources: Rimedoj
generic:
changes_saved_msg: Ŝanĝoj sukcese konservitaj!
save_changes: Konservi ŝanĝojn
@@ -619,11 +659,14 @@ eo:
publishing: Publikado
web: Reto
remote_follow:
- acct: Enmetu vian uzantnomo@domajno de kie vi volas sekvi
+ acct: Enmetu vian uzantnomo@domajno de kie vi volas agi
missing_resource: La URL de plusendado ne estis trovita
no_account_html: Ĉu vi ne havas konton? Vi povas registriĝi tie
proceed: Daŭrigi por eksekvi
prompt: 'Vi eksekvos:'
+ remote_interaction:
+ proceed: Efektivigi la interagon
+ prompt: 'Vi volas interagi kun ĉi tiu mesaĝo:'
remote_unfollow:
error: Eraro
title: Titolo
@@ -707,6 +750,7 @@ eo:
private: Mesaĝo nepublika ne povas esti alpinglita
reblog: Diskonigo ne povas esti alpinglita
show_more: Montri pli
+ sign_in_to_participate: Ensaluti por partopreni en la konversacio
title: '%{name}: "%{quote}"'
visibilities:
private: Montri nur al sekvantoj
diff --git a/config/locales/eu.yml b/config/locales/eu.yml
index 46975f016..1cacad345 100644
--- a/config/locales/eu.yml
+++ b/config/locales/eu.yml
@@ -36,6 +36,7 @@ eu:
user_count_before: Hemen
what_is_mastodon: Zer da Mastodon?
accounts:
+ choices_html: "%{name}(r)en aukerak:"
follow: Jarraitu
followers: Jarraitzaile
following: Jarraitzen
@@ -46,6 +47,8 @@ eu:
nothing_here: Ez dago ezer hemen!
people_followed_by: "%{name}(e)k jarraitzen dituenak"
people_who_follow: "%{name} jarraitzen dutenak"
+ pin_errors:
+ following: Onetsi nahi duzun pertsona aurretik jarraitu behar duzu
posts: Toot-ak
posts_with_replies: Toot eta erantzunak
reserved_username: Erabiltzaile-izena erreserbatuta dago
@@ -340,6 +343,9 @@ eu:
peers_api_enabled:
desc_html: Instantzia honek fedibertsuan aurkitutako domeinu-izenak
title: Argitaratu aurkitutako instantzien zerrenda
+ preview_sensitive_media:
+ desc_html: Beste webguneetako esteken aurrebistak iruditxoa izango du multimedia hunkigarri gisa markatzen bada ere
+ title: Erakutsi multimedia hunkigarria OpenGraph aurrebistetan
registrations:
closed_message:
desc_html: Azaleko orrian bistaratua izen ematea ixten denean. HTML etiketak erabili ditzakezu
@@ -360,11 +366,13 @@ eu:
desc_html: Erakutsi langile banda erabiltzailearen orrian
title: Erakutsi langile banda
site_description:
- desc_html: Azaleko orrian eta meta etiketetan agertuko den sarrera paragrafoa. HTML etiketak erabili ditzakezu, zehazki <a>
eta <em>
.
+ desc_html: Azaleko orrian agertuko den sarrera paragrafoa. Azaldu zerk egiten duen berezi Mastodon zerbitzari hau eta garrantzizko beste edozer. HTML etiketak erabili ditzakezu, zehazki <a>
eta <em>
.
title: Instantziaren deskripzioa
site_description_extended:
desc_html: Zure jokabide-koderako toki on bat, arauak, gidalerroak eta zure instantzia desberdin egiten duten bestelakoak. HTML etiketak erabili ditzakezu
title: Informazio hedatu pertsonalizatua
+ site_short_description:
+ title: Instantziaren deskripzio laburra
site_terms:
desc_html: Zure pribatutasun politika, erabilera baldintzak eta bestelako testu legalak idatzi ditzakezu. HTML etiketak erabili ditzakezu
title: Erabilera baldintza pertsonalizatuak
@@ -498,6 +506,22 @@ eu:
follows: Zuk jarraitutakoak
mutes: Zuk mututukoak
storage: Multimedia biltegiratzea
+ filters:
+ contexts:
+ home: Hasierako denbora-lerroa
+ notifications: Jakinarazpenak
+ public: Denbora-lerro publikoak
+ thread: Elkarrizketak
+ edit:
+ title: Editatu iragazkia
+ errors:
+ invalid_context: Testuinguru baliogabe edo hutsa eman da
+ invalid_irreversible: Behin betiko iragazketa hasiera edo jakinarazpenen testuinguruan besterik ez dabil
+ index:
+ delete: Ezabatu
+ title: Iragazkiak
+ new:
+ title: Gehitu iragazki berria
followers:
domain: Domeinua
explanation_html: Zure mezuen pribatutasuna bermatu nahi baduzu, nork jarraitzen zaituen jakin behar duzu. Zure mezu pribatuak zure jarraitzaileak dituzten instantzia guztietara bidaltzen dira . Instantzia bateko langileek edo softwareak zure pribatutasunari dagokion begirunea ez dutela izango uste baduzu, berrikusi eta kendu jarraitzaileak.
@@ -510,6 +534,10 @@ eu:
true_privacy_html: Kontuan izan egiazko pribatutasuna lortzeko muturretik muturrerako zifratzea ezinbestekoa dela .
unlocked_warning_html: Edonork jarraitu zaitzake eta berehala zure mezu pribatuak ikusi. %{lock_link} jarraitzaileak berrikusi eta ukatu ahal izateko.
unlocked_warning_title: Zure kontua ez dago giltzapetuta
+ footer:
+ developers: Garatzaileak
+ more: Gehiago…
+ resources: Baliabideak
generic:
changes_saved_msg: Aldaketak ongi gorde dira!
save_changes: Gorde aldaketak
@@ -620,6 +648,7 @@ eu:
remote_follow:
acct: Sartu jarraitzeko erabili nahi duzun erabiltzaile@domeinua
missing_resource: Ezin izan da zure konturako behar den birbideratze URL-a
+ no_account_html: Ez duzu konturik? Izena eman dezakezu
proceed: Ekin jarraitzeari
prompt: 'Hau jarraituko duzu:'
remote_unfollow:
diff --git a/config/locales/fa.yml b/config/locales/fa.yml
index 25d1e81ab..f9ed10fd5 100644
--- a/config/locales/fa.yml
+++ b/config/locales/fa.yml
@@ -5,10 +5,12 @@ fa:
about_mastodon_html: ماستدون (Mastodon) یک شبکهٔ اجتماعی است که بر اساس پروتکلهای آزاد وب و نرمافزارهای آزاد و کدباز ساخته شده است. این شبکه مانند ایمیل غیرمتمرکز است.
about_this: درباره
administered_by: 'با مدیریت:'
+ api: رابط برنامهنویسی کاربردی
closed_registrations: ثبتنام روی این سرور هماینک فعال نیست. اما شما میتوانید سرور دیگری بیابید و با حسابی که آنجا میسازید دقیقاً به همین شبکه دسترسی داشته باشید.
contact: تماس
contact_missing: تعیین نشده
contact_unavailable: موجود نیست
+ documentation: مستندات
extended_description_html: |
جای خوبی برای قانونها
توضیحات تکمیلی نوشته نشده است.
@@ -25,22 +27,28 @@ fa:
hosted_on: ماستدون، میزبانیشده روی %{domain}
learn_more: بیشتر بدانید
other_instances: فهرست سرورها
+ privacy_policy: سیاست رازداری
source_code: کدهای منبع
status_count_after: چیز نوشتهاند
status_count_before: که جمعاً
+ terms: شرایط کاربری
user_count_after: کاربر
user_count_before: دارای
what_is_mastodon: ماستدون چیست؟
accounts:
+ choices_html: 'انتخابهای %{name}:'
follow: پی بگیرید
followers: پیگیران
following: پی میگیرد
+ joined: کاربر از %{date}
media: عکس و ویدیو
moved_html: "%{name} حساب خود را به %{new_profile_link} منتقل کرده است:"
network_hidden: این اطلاعات در دسترس نیست
nothing_here: اینجا چیزی نیست!
people_followed_by: کسانی که %{name} پی میگیرد
people_who_follow: کسانی که %{name} را پی میگیرند
+ pin_errors:
+ following: شما باید پیگیر کاربری باشید که میخواهید ثابت کنید
posts: نوشتهها
posts_with_replies: نوشتهها و پاسخها
reserved_username: این نام کاربری در دسترس نیست
@@ -176,6 +184,7 @@ fa:
unsuspend_account: "%{name} حساب کاربر %{target} را از تعلیق خارج کرد"
update_custom_emoji: "%{name} شکلک %{target} را بهروز کرد"
update_status: "%{name} نوشتهٔ %{target} را بهروز کرد"
+ deleted_status: "(بوق پاکشده)"
title: سیاههٔ بازرسی
custom_emojis:
by_domain: دامین
@@ -364,11 +373,14 @@ fa:
desc_html: نمایش علامت همکار روی صفحهٔ کاربر
title: نمایش علامت همکار
site_description:
- desc_html: معرفی کوتاهی که روی صفحهٔ اصلی و همچنین به عنوان فرادادهٔ صفحهها نمایش مییابد. میتوانید HTML بنویسید, بهویژه <a>
و <em>
.
+ desc_html: معرفی کوتاهی که روی صفحهٔ اصلی نمایش مییابد. دربارهٔ این که چه چیزی دربارهٔ این سرور ماستدون ویژه است یا هر چیز مهم دیگری بنویسید. میتوانید HTML بنویسید، بهویژه <a>
و <em>
.
title: دربارهٔ سایت
site_description_extended:
desc_html: جای خوبی برای نوشتن سیاستهای کاربری، قانونها، راهنماها، و هر چیزی که ویژهٔ این سرور است. تگهای HTML هم مجاز است
title: اطلاعات تکمیلی سفارشی
+ site_short_description:
+ desc_html: روی نوار کناری و همچنین به عنوان فرادادهٔ صفحهها نمایش مییابد. در یک بند توضیح دهید که ماستدون چیست و چرا این سرور با بقیه فرق دارد. اگر خالی بگذارید، به جایش «دربارهٔ سایت» نمایش مییابد.
+ title: توضیح کوتاه دربارهٔ سایت
site_terms:
desc_html: میتوانید سیاست رازداری، شرایط استفاده، یا سایر مسائل قانونی را به دلخواه خود بنویسید. تگهای HTML هم مجاز است
title: شرایط استفادهٔ سفارشی
@@ -390,6 +402,7 @@ fa:
media:
title: رسانه
no_media: بدون عکس یا ویدیو
+ no_status_selected: هیچ بوقی تغییری نکرد زیرا هیچکدام از آنها انتخاب نشده بودند
title: نوشتههای حساب
with_media: دارای عکس یا ویدیو
subscriptions:
@@ -530,6 +543,10 @@ fa:
true_privacy_html: لطفاً بدانید که داشتن حریم خصوصی واقعی تنها با رمزگذاری سرتاسر (end-to-end encryption) ممکن است .
unlocked_warning_html: هر کسی میتواند پیگیر شما شود تا بلافاصله نوشتههای خصوصی شما را ببیند. اگر %{lock_link} خواهید توانست درخواستهای پیگیری را بررسی کرده و نپذیرید.
unlocked_warning_title: حساب شما خصوصی نیست
+ footer:
+ developers: برنامهنویسان
+ more: بیشتر…
+ resources: منابع
generic:
changes_saved_msg: تغییرات با موفقیت ذخیره شدند!
save_changes: ذخیرهٔ تغییرات
@@ -747,6 +764,7 @@ fa:
time:
formats:
default: "%d %b %Y, %H:%M"
+ month: "%b %Y"
two_factor_authentication:
code_hint: برای تأیید، کدی را که برنامهٔ تأییدکننده ساخته است وارد کنید
description_html: اگر ورود دومرحلهای را فعال کنید، برای ورود به سیستم به تلفن خود نیاز خواهید داشت تا برایتان یک کد موقتی بسازد.
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index c6884fd4a..b563405bd 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -6,6 +6,7 @@ fr:
about_this: À propos
administered_by: 'Administré par :'
api: API
+ apps: Applications mobiles
closed_registrations: Les inscriptions sont actuellement fermées sur cette instance. Cependant, vous pouvez trouver une autre instance sur laquelle vous créer un compte et à partir de laquelle vous pourrez accéder au même réseau.
contact: Contact
contact_missing: Manquant
@@ -27,13 +28,16 @@ fr:
hosted_on: Instance Mastodon hébergée par %{domain}
learn_more: En savoir plus
other_instances: Liste des instances
+ privacy_policy: Politique de vie privée
source_code: Code source
status_count_after: statuts
status_count_before: Ayant publié
+ terms: Conditions d'utilisation
user_count_after: utilisateur⋅ice⋅s
user_count_before: Abrite
what_is_mastodon: Qu’est-ce que Mastodon ?
accounts:
+ choices_html: 'Sélection de %{name} :'
follow: Suivre
followers: Abonné⋅e⋅s
following: Abonnements
@@ -207,6 +211,7 @@ fr:
dashboard:
config: Configuration
feature_invites: Liens d'invitation
+ feature_registrations: Inscriptions
feature_relay: Relais de fédération
features: Fonctionnalités
hidden_service: Fédération avec des services cachés
@@ -270,6 +275,7 @@ fr:
search: Rechercher
title: Instances connues
invites:
+ deactivate_all: Tout désactiver
filter:
all: Tout
available: Disponible
diff --git a/config/locales/gl.yml b/config/locales/gl.yml
index 2550e04e0..a414990d2 100644
--- a/config/locales/gl.yml
+++ b/config/locales/gl.yml
@@ -6,6 +6,7 @@ gl:
about_this: Sobre
administered_by: 'Administrada por:'
api: API
+ apps: Apps móbiles
closed_registrations: O rexistro en esta instancia está pechado en este intre. Porén! Pode atopar unha instancia diferente para obter unha conta e ter acceso exactamente a misma rede desde alí.
contact: Contacto
contact_missing: Non establecido
@@ -36,6 +37,7 @@ gl:
user_count_before: Fogar de
what_is_mastodon: Qué é Mastodon?
accounts:
+ choices_html: 'Eleccións de %{name}:'
follow: Seguir
followers: Seguidoras
following: Seguindo
@@ -46,6 +48,8 @@ gl:
nothing_here: Nada por aquí!
people_followed_by: Personas que segue %{name}
people_who_follow: Personas que seguen a %{name}
+ pin_errors:
+ following: Debe seguir a persoa que intenta recomendar
posts: Mensaxes
posts_with_replies: Toots e respostas
reserved_username: O nome de usuaria está reservado
@@ -181,6 +185,7 @@ gl:
unsuspend_account: "%{name} activou a conta de %{target}"
update_custom_emoji: "%{name} actualizou emoji %{target}"
update_status: "%{name} actualizou un estado de %{target}"
+ deleted_status: "(estado eliminado)"
title: Rexistro de auditoría
custom_emojis:
by_domain: Dominio
@@ -208,6 +213,7 @@ gl:
updated_msg: Actualizouse correctamente o emoji!
upload: Subir
dashboard:
+ backlog: backlogged jobs
config: Axustes
feature_deletions: Borrado de contas
feature_invites: Ligazóns de convite
@@ -276,6 +282,7 @@ gl:
search: Buscar
title: Instancias coñecidas
invites:
+ deactivate_all: Desactivar todo
filter:
all: Todo
available: Dispoñible
@@ -368,11 +375,14 @@ gl:
desc_html: Mostrar unha insignia de membresía nunha páxina de usuaria
title: Mostrar insigna de membresía
site_description:
- desc_html: Parágrafo de presentación na páxina principal e nas meta etiquetas. Pode utilizar etiquetas HTML, en particular <a>
e <em>
.
+ desc_html: Parágrafo de presentación na páxina principal. Describe o que fai especial a este servidor Mastodon e calquera outra ouca importante. Pode utilizar etiquetas HTML, en particular <a>
e <em>
.
title: Descrición da instancia
site_description_extended:
desc_html: Un bo lugar para o seu código de conducta, regras, guías e outras cousas que distingan a súa instancia. Pode utilizar etiquetas HTML
title: Información extendida da personalización
+ site_short_description:
+ desc_html: Mostrado na barra lateral e nas etiquetas meta. Describe o que é Mastodon e que fai especial a este servidor nun só parágrafo. Si está baldeiro, mostrará a descrición da instancia.
+ title: Descrición curta da instancia
site_terms:
desc_html: Pode escribir a súa propia política de intimidade, termos de servizo ou aclaracións legais. Pode utilizar etiquetas HTML
title: Termos de servizo personalizados
@@ -394,6 +404,7 @@ gl:
media:
title: Medios
no_media: Sen medios
+ no_status_selected: Non se cambiou ningún estado xa que ningún foi seleccionado
title: Estados da conta
with_media: con medios
subscriptions:
@@ -646,11 +657,14 @@ gl:
publishing: Publicando
web: Web
remote_follow:
- acct: Introduza o seu nomedeusuaria@dominio desde onde quere facer seguimento
+ acct: Introduza o seu usuaria@servidor desde onde quere interactuar
missing_resource: Non se puido atopar o URL de redirecionamento requerido para a súa conta
no_account_html: Non ten unha conta? Pode rexistrarse aquí
proceed: Proceda para seguir
prompt: 'Vostede vai seguir:'
+ remote_interaction:
+ proceed: Proceda para interactuar
+ prompt: 'Vostede quere interactuar con este toot:'
remote_unfollow:
error: Fallo
title: Título
@@ -734,6 +748,7 @@ gl:
private: As mensaxes non-públicas non poden ser fixadas
reblog: Non se poden fixar as mensaxes promovidas
show_more: Mostrar máis
+ sign_in_to_participate: Conéctese para participar na conversa
title: '%{name}: "%{quote}"'
visibilities:
private: Só seguidoras
diff --git a/config/locales/he.yml b/config/locales/he.yml
index e3bb64364..ccf53e14a 100644
--- a/config/locales/he.yml
+++ b/config/locales/he.yml
@@ -4,10 +4,13 @@ he:
about_hashtag_html: אלו סטטוסים פומביים המתוייגים בתור#%{hashtag} . ניתן להגיב, להדהד או לחבב אותם אם יש לך חשבון בכל מקום בפדרציה.
about_mastodon_html: מסטודון היא רשת חברתית חופשית, מבוססת תוכנה חופשית ("קוד פתוח") . כאלטרנטיבה בלתי ריכוזית לפלטפרומות המסחריות, מסטודון מאפשרת להמנע מהסיכונים הנלווים להפקדת התקשורת שלך בידי חברה יחידה. שמת את מבטחך בשרת אחד — לא משנה במי בחרת, תמיד אפשר לדבר עם כל שאר המשתמשים. לכל מי שרוצה יש את האפשרות להקים שרת מסטודון עצמאי, ולהשתתף ברשת החברתית באופן חלק.
about_this: אודות שרת זה
+ api: API
+ apps: יישומונים לנייד
closed_registrations: הרשמות סגורות לשרת זה לעת עתה.
- contact: צור קשר
- contact_missing: אין
+ contact: יצירת קשר
+ contact_missing: ללא הגדרה
contact_unavailable: לא רלוונטי/חסר
+ documentation: תיעוד
extended_description_html: |
מקום טוב לכללים
התיאור המורחב טרם הוגדר.
diff --git a/config/locales/it.yml b/config/locales/it.yml
index 0f25dd231..c947e3107 100644
--- a/config/locales/it.yml
+++ b/config/locales/it.yml
@@ -5,45 +5,54 @@ it:
about_mastodon_html: Mastodon è un social network gratuito e open-source . Un'alternativa decentralizzata alle piattaforme commerciali che evita che una singola compagnia monopolizzi il tuo modo di comunicare. Scegli un server di cui ti fidi — qualunque sia la tua scelta, potrai interagire con chiunque altro. Chiunque può sviluppare un suo server Mastodon e partecipare alla vita del social network .
about_this: A proposito di questo server
administered_by: 'Amministrato da:'
- closed_registrations: Al momento le iscrizioni a questo server sono chiuse. Tuttavia! Puoi provare a cercare un istanza diversa su cui creare un account ed avere accesso alla stessa identica rete di questa.
+ api: API
+ apps: Applicazioni Mobile
+ closed_registrations: Al momento le iscrizioni a questo server sono chiuse. Tuttavia! Puoi provare a cercare un istanza diversa su cui creare un account ed avere accesso alla stessa identica rete.
contact: Contatti
contact_missing: Non impostato
contact_unavailable: N/D
+ documentation: Documentazione
extended_description_html: |
Un buon posto per le regole
La descrizione estesa non è ancora stata preparata.
features:
- humane_approach_body: Imparando dai fallimenti degli altri networks, Mastodon mira a fare scelte di design etico per combattere l'abuso dei social media.
+ humane_approach_body: Imparando dai fallimenti degli altri networks, Mastodon mira a fare scelte etiche di design per combattere l'abuso dei social media.
humane_approach_title: Un approccio più umano
- not_a_product_body: Mastodon non è una rete commerciale. Niente pubblicità, niente data mining, nessun giardino murato. Non c'è nessuna autorità centrale.
+ not_a_product_body: Mastodon non è una rete commerciale. Niente pubblicità, niente data mining, nessun recinto dorato. Non c'è nessuna autorità centrale.
not_a_product_title: Tu sei una persona, non un prodotto
real_conversation_body: Con 500 caratteri a disposizione, un supporto per i contenuti granulari ed avvisi sui media potrai esprimerti nel modo desiderato.
real_conversation_title: Creato per conversazioni reali
- within_reach_body: Apps per iOS, Android ed altre piattaforme, realizzate grazie ad un ecosistema di API adatto agli sviluppatori, ti consentono di poter stare ovunque al passo con i tuoi amici.
+ within_reach_body: Apps per iOS, Android ed altre piattaforme, realizzate grazie ad un ecosistema di API adatto agli sviluppatori, ti consentono di poter stare in contatto con i tuoi amici ovunque ti trovi.
within_reach_title: Sempre a portata di mano
generic_description: "%{domain} è un server nella rete"
hosted_on: Mastodon ospitato su %{domain}
learn_more: Scopri altro
other_instances: Elenco istanze
+ privacy_policy: Policy su la Privacy
source_code: Codice sorgente
status_count_after: stati
status_count_before: Che hanno pubblicato
+ terms: Termini di Servizio
user_count_after: utenti
user_count_before: Home di
what_is_mastodon: Che cos'è Mastodon?
accounts:
+ choices_html: 'Suggerimenti da %{name}:'
follow: Segui
followers: Seguaci
following: Segui
+ joined: Dal %{date}
media: Media
moved_html: "%{name} è stato spostato su %{new_profile_link}:"
network_hidden: Questa informazione non e' disponibile
nothing_here: Qui non c'è nulla!
people_followed_by: Persone seguite da %{name}
people_who_follow: Persone che seguono %{name}
+ pin_errors:
+ following: Devi gia seguire la persona che vuoi promuovere
posts: Posts
posts_with_replies: Toot e risposte
- reserved_username: Il nome utente è riservato
+ reserved_username: Il nome utente è gia stato preso
roles:
admin: Amministratore
bot: Bot
@@ -171,9 +180,13 @@ it:
resolve_report: "%{name} ha risolto il rapporto %{target}"
silence_account: "%{name} ha silenziato l'account di %{target}"
suspend_account: "%{name} ha sospeso l'account di %{target}"
+ unassigned_report: "%{name} report non assegnato %{target}"
unsilence_account: "%{name} ha de-silenziato l'account di %{target}"
unsuspend_account: "%{name} ha annullato la sospensione dell'account di %{target}"
update_custom_emoji: "%{name} ha aggiornato l'emoji %{target}"
+ update_status: "%{name} stato aggiornato da %{target}"
+ deleted_status: "(stato cancellato)"
+ title: Audit log
custom_emojis:
by_domain: Dominio
copied_msg: Creata con successo una copia locale dell'emoji
@@ -199,6 +212,25 @@ it:
update_failed_msg: Impossibile aggiornare questa emojii
updated_msg: Emoji aggiornata con successo!
upload: Carica
+ dashboard:
+ backlog: backlogged jobs
+ config: Configurazione
+ feature_invites: Link di invito
+ feature_registrations: Registrazioni
+ features: Funzionalità
+ hidden_service: Federazione con servizi nascosti
+ open_reports: apri report
+ recent_users: Utenti Recenti
+ search: Ricerca testo intero
+ single_user_mode: Modalita utente singolo
+ software: Software
+ space: Utilizzo dello spazio
+ title: Dashboard
+ total_users: utenti totali
+ trends: Trends
+ week_interactions: interazioni per questa settimana
+ week_users_active: attivi questa settimana
+ week_users_new: utenti questa settimana
domain_blocks:
add_new: Aggiungi nuovo
created_msg: Il blocco del dominio sta venendo processato
@@ -206,11 +238,14 @@ it:
domain: Dominio
new:
create: Crea blocco
+ hint: Il blocco dominio non previene la creazione di utenti nel database, ma applicherà automaticamente e retroattivamente metodi di moderazione specifici su quegli account.
severity:
noop: Nessuno
silence: Silenzia
suspend: Sospendi
title: Nuovo blocco dominio
+ reject_media: Rifiuta file media
+ reject_media_hint: Rimuovi i file media salvati in locale e blocca i download futuri. Irrilevante per le sospensioni
severities:
noop: Nessuno
silence: Silenzia
@@ -243,12 +278,15 @@ it:
search: Cerca
title: Istanze conosciute
invites:
+ deactivate_all: Disattiva tutto
filter:
all: Tutto
available: Disponibile
expired: Scaduto
title: Filtro
title: Inviti
+ relays:
+ inbox_url: Url Relay
reports:
account:
note: note
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index 5fe784aae..486180a2e 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -6,6 +6,7 @@ ja:
about_this: 詳細情報
administered_by: '管理者:'
api: API
+ apps: アプリ
closed_registrations: 現在このインスタンスでの新規登録は受け付けていません。しかし、他のインスタンスにアカウントを作成しても全く同じネットワークに参加することができます。
contact: 連絡先
contact_missing: 未設定
@@ -36,6 +37,7 @@ ja:
user_count_before: ユーザー数
what_is_mastodon: Mastodon とは?
accounts:
+ choices_html: "%{name} によるおすすめ:"
follow: フォロー
followers: フォロワー
following: フォロー中
@@ -46,6 +48,8 @@ ja:
nothing_here: 何もありません!
people_followed_by: "%{name} さんがフォロー中のアカウント"
people_who_follow: "%{name} さんをフォロー中のアカウント"
+ pin_errors:
+ following: 推薦したい人はあなたが既にフォローしている必要があります
posts: トゥート
posts_with_replies: トゥートと返信
reserved_username: このユーザー名は予約されています
@@ -181,6 +185,7 @@ ja:
unsuspend_account: "%{name} さんが %{target} さんの停止を解除しました"
update_custom_emoji: "%{name} さんがカスタム絵文字 %{target} を更新しました"
update_status: "%{name} さんが %{target} さんの投稿を更新しました"
+ deleted_status: "(削除されました)"
title: 操作履歴
custom_emojis:
by_domain: ドメイン
@@ -277,6 +282,7 @@ ja:
search: 検索
title: 既知のインスタンス
invites:
+ deactivate_all: すべて無効化
filter:
all: すべて
available: 使用可能
@@ -398,6 +404,7 @@ ja:
media:
title: メディア
no_media: メディアなし
+ no_status_selected: 何も選択されていないため、変更されていません
title: トゥート一覧
with_media: メディアあり
subscriptions:
@@ -655,6 +662,9 @@ ja:
no_account_html: アカウントをお持ちではないですか?こちら からサインアップできます
proceed: フォローする
prompt: 'フォローしようとしています:'
+ remote_interaction:
+ proceed: 進む
+ prompt: 'このトゥートに返信しようとしています:'
remote_unfollow:
error: エラー
title: タイトル
@@ -738,6 +748,7 @@ ja:
private: 非公開のトゥートを固定することはできません
reblog: ブーストされたトゥートを固定することはできません
show_more: もっと見る
+ sign_in_to_participate: ログインして会話に参加
title: '%{name}: "%{quote}"'
visibilities:
private: フォロワー限定
diff --git a/config/locales/nl.yml b/config/locales/nl.yml
index f11717208..94537243f 100644
--- a/config/locales/nl.yml
+++ b/config/locales/nl.yml
@@ -6,6 +6,7 @@ nl:
about_this: Over deze server
administered_by: 'Beheerd door:'
api: API
+ apps: Mobiele apps
closed_registrations: Registreren op deze server is momenteel niet mogelijk. Je kunt echter een andere server vinden om zo toegang te krijgen tot het netwerk.
contact: Contact
contact_missing: Niet ingesteld
@@ -36,6 +37,7 @@ nl:
user_count_before: Thuisbasis van
what_is_mastodon: Wat is Mastodon?
accounts:
+ choices_html: 'Aanbevelingen van %{name}:'
follow: Volgen
followers: Volgers
following: Volgend
@@ -46,6 +48,8 @@ nl:
nothing_here: Hier is niets!
people_followed_by: Mensen die %{name} volgen
people_who_follow: Mensen die %{name} volgen
+ pin_errors:
+ following: Je moet dit account wel al volgen, alvorens je het kan aanbevelen
posts: Toots
posts_with_replies: Toots en reacties
reserved_username: Deze gebruikersnaam is gereserveerd
@@ -181,6 +185,7 @@ nl:
unsuspend_account: Opschorten van account %{target} is door %{name} opgeheven
update_custom_emoji: Emoji %{target} is door %{name} bijgewerkt
update_status: De toots van %{target} zijn door %{name} bijgewerkt
+ deleted_status: "(verwijderde toot}"
title: Auditlog
custom_emojis:
by_domain: Domein
@@ -277,6 +282,7 @@ nl:
search: Zoeken
title: Bekende servers
invites:
+ deactivate_all: Alles deactiveren
filter:
all: Alles
available: Beschikbaar
@@ -398,6 +404,7 @@ nl:
media:
title: Media
no_media: Geen media
+ no_status_selected: Er werden geen toots gewijzigd, omdat er geen enkele werd geselecteerd
title: Toots van account
with_media: Met media
subscriptions:
@@ -650,11 +657,14 @@ nl:
publishing: Publiceren
web: Webapp
remote_follow:
- acct: Geef jouw account@domein.tld op waarvandaan je wilt volgen
+ acct: Geef jouw account@domein op die je wilt gebruiken
missing_resource: Kon vereiste doorverwijzings-URL voor jouw account niet vinden
no_account_html: Heb je geen account? Je kunt er hier een registreren
proceed: Ga door om te volgen
prompt: 'Jij gaat volgen:'
+ remote_interaction:
+ proceed: Ga de interactie aan
+ prompt: 'Jij wilt de interactie aangaan met deze toot:'
remote_unfollow:
error: Fout
title: Titel
@@ -738,6 +748,7 @@ nl:
private: Alleen openbare toots kunnen worden vastgezet
reblog: Een boost kan niet worden vastgezet
show_more: Meer tonen
+ sign_in_to_participate: Meld je aan om aan dit gesprek mee te doen
title: '%{name}: "%{quote}"'
visibilities:
private: Alleen volgers
diff --git a/config/locales/oc.yml b/config/locales/oc.yml
index 08a824c93..5edfd2ded 100644
--- a/config/locales/oc.yml
+++ b/config/locales/oc.yml
@@ -6,6 +6,7 @@ oc:
about_this: A prepaus d’aquesta instància
administered_by: 'Gerida per :'
api: API
+ apps: Aplicacions per mobil
closed_registrations: Las inscripcions son clavadas pel moment sus aquesta instància.
contact: Contacte
contact_missing: Pas parametrat
@@ -36,6 +37,7 @@ oc:
user_count_before: Ostal de
what_is_mastodon: Qu’es Mastodon ?
accounts:
+ choices_html: 'Recomandacion de %{name} :'
follow: Sègre
followers: Seguidors
following: Abonaments
@@ -46,6 +48,8 @@ oc:
nothing_here: I a pas res aquí !
people_followed_by: Lo monde que %{name} sèc
people_who_follow: Lo monde que sègon %{name}
+ pin_errors:
+ following: Vos cal d’en primièr sègre las personas que volètz promòure
posts: Tuts
posts_with_replies: Tuts e responsas
reserved_username: Aqueste nom d’utilizaire es reservat
@@ -182,6 +186,7 @@ oc:
unsuspend_account: "%{name} restabliguèt lo compte a %{target}"
update_custom_emoji: "%{name} metèt a jorn l’emoji %{target}"
update_status: "%{name} metèt a jorn l’estatut a %{target}"
+ deleted_status: "(estatut suprimit)"
title: Audit dels jornals
custom_emojis:
by_domain: Domeni
@@ -278,6 +283,7 @@ oc:
search: Cercar
title: Instàncias conegudas
invites:
+ deactivate_all: O desactivar tot
filter:
all: Totes
available: Disponibles
@@ -399,6 +405,7 @@ oc:
media:
title: Mèdia
no_media: Cap de mèdia
+ no_status_selected: Cap d’estatut pas cambiat estant que cap èra pas seleccionat
title: Estatuts del compte
with_media: Amb mèdia
subscriptions:
@@ -712,6 +719,8 @@ oc:
no_account_html: Avètz pas cap de compte ? Podètz vos marcar aquí
proceed: Clicatz per sègre
prompt: 'Sètz per sègre :'
+ remote_interaction:
+ prompt: 'Volètz interagir amb aqueste tut :'
remote_unfollow:
error: Error
title: Títol
@@ -795,6 +804,7 @@ oc:
private: Se pòt pas penjar los tuts pas publics
reblog: Se pòt pas penjar un tut partejat
show_more: Ne veire mai
+ sign_in_to_participate: Inscrivètz-vos per participar a la conversacion
title: '%{name} : "%{quote}"'
visibilities:
private: Seguidors solament
@@ -854,6 +864,7 @@ oc:
time:
formats:
default: Lo %d %b de %Y a %Ho%M
+ month: "%b %Y"
two_factor_authentication:
code_hint: Picatz lo còdi generat per vòstra aplicacion d’autentificacion per confirmar
description_html: S’activatz l’autentificacion two-factor , vos caldrà vòstre mobil per vos connectar perque generarà un geton per vos daissar dintrar.
diff --git a/config/locales/pl.yml b/config/locales/pl.yml
index 168975363..7047efd1d 100644
--- a/config/locales/pl.yml
+++ b/config/locales/pl.yml
@@ -880,7 +880,7 @@ pl:
wrong_code: Wprowadzony kod jest niepoprawny! Czy czas serwera i urządzenia jest poprawny?
user_mailer:
backup_ready:
- explanation: Zażądałeś pełnej kopii zapasowej konta na Mastodonie. Jest ono dostępne do pobrania
+ explanation: Zażądałeś pełnej kopii zapasowej konta na Mastodonie. Jest ona dostępna do pobrania!
subject: Twoje archiwum jest gotowe do pobrania
title: Odbiór archiwum
welcome:
diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml
index 1e9a2d0ab..842548278 100644
--- a/config/locales/pt-BR.yml
+++ b/config/locales/pt-BR.yml
@@ -6,6 +6,7 @@ pt-BR:
about_this: Sobre
administered_by: 'Administrado por:'
api: API
+ apps: Apps
closed_registrations: Os cadastros estão atualmente fechados nesta instância. No entanto, você pode procurar uma instância diferente na qual possa criar uma conta e acessar a mesma rede por lá.
contact: Contato
contact_missing: Não definido
@@ -31,11 +32,12 @@ pt-BR:
source_code: Código-fonte
status_count_after: publicações
status_count_before: Autores de
- terms: Termos de Serviço
+ terms: Termos de serviço
user_count_after: usuários
user_count_before: Casa de
what_is_mastodon: O que é Mastodon?
accounts:
+ choices_html: 'Escolhas de %{name}:'
follow: Seguir
followers: Seguidores
following: Seguindo
@@ -46,6 +48,8 @@ pt-BR:
nothing_here: Não há nada aqui!
people_followed_by: Pessoas que %{name} segue
people_who_follow: Pessoas que seguem %{name}
+ pin_errors:
+ following: Você tem que estar seguindo a pessoa que você quer sugerir
posts: Toots
posts_with_replies: Toots e respostas
reserved_username: Este usuário está reservado
@@ -181,6 +185,7 @@ pt-BR:
unsuspend_account: "%{name} desativou a suspensão de %{target}"
update_custom_emoji: "%{name} atualizou o emoji %{target}"
update_status: "%{name} atualizou o estado de %{target}"
+ deleted_status: "(status deletado)"
title: Auditar relatório
custom_emojis:
by_domain: Domínio
@@ -277,6 +282,7 @@ pt-BR:
search: Buscar
title: Instâncias conhecidas
invites:
+ deactivate_all: Desativar todos
filter:
all: Todos
available: Disponíveis
@@ -398,6 +404,7 @@ pt-BR:
media:
title: Mídia
no_media: Não há mídia
+ no_status_selected: Nenhum status foi modificado porque nenhum estava selecionado
title: Postagens da conta
with_media: Com mídia
subscriptions:
@@ -650,11 +657,14 @@ pt-BR:
publishing: Publicação
web: Web
remote_follow:
- acct: Insira o seu usuário@domínio do qual você quer seguir
+ acct: Insira o seu usuário@domínio a partir do qual você deseja agir
missing_resource: Não foi possível encontrar a URL de direcionamento para a sua conta
no_account_html: Não tem uma conta? Você pode cadastrar-se aqui
proceed: Prosseguir para seguir
prompt: 'Você irá seguir:'
+ remote_interaction:
+ proceed: Continue para interagir
+ prompt: 'Você quer interagir com este toot:'
remote_unfollow:
error: Erro
title: Título
@@ -738,6 +748,7 @@ pt-BR:
private: Toot não-público não pode ser fixado
reblog: Um compartilhamento não pode ser fixado
show_more: Mostrar mais
+ sign_in_to_participate: Entre para participar dessa conversa
title: '%{name}: "%{quote}"'
visibilities:
private: Apenas seguidores
diff --git a/config/locales/simple_form.ar.yml b/config/locales/simple_form.ar.yml
index d7cb88a6f..3ee4a92a4 100644
--- a/config/locales/simple_form.ar.yml
+++ b/config/locales/simple_form.ar.yml
@@ -16,6 +16,7 @@ ar:
locale: لغة واجهة المستخدم و الرسائل الإلكترونية و الإشعارات
locked: يتطلب منك الموافقة يدويا على طلبات المتابعة
note: %{count} حرف باق
+ phrase: سوف يتم العثور عليه مهما كان نوع النص أو حتى و إن كان داخل الويب فيه تحذير عن المحتوى
scopes: ما هي المجالات المسموح بها في التطبيق ؟ إن قمت باختيار أعلى المجالات فيمكنك الإستغناء عن الخَيار اليدوي.
setting_default_language: يمكن الكشف التلقائي للّغة اللتي استخدمتها في تحرير تبويقاتك ، غيرَ أنّ العملية ليست دائما دقيقة
setting_hide_network: الحسابات التي تُتابعها و التي تُتابِعك على حد سواء لن تُعرَض على صفحتك الشخصية
@@ -47,6 +48,7 @@ ar:
expires_in: تنتهي مدة صلاحيته بعد
fields: واصفات بيانات الملف الشخصي
header: الرأسية
+ inbox_url: عنوان رابط صندوق المُرَحِّل
irreversible: إسقاط بدلا من إخفائها
locale: لغة الواجهة
locked: تجميد الحساب
diff --git a/config/locales/simple_form.da.yml b/config/locales/simple_form.da.yml
index fc3258993..a5697220e 100644
--- a/config/locales/simple_form.da.yml
+++ b/config/locales/simple_form.da.yml
@@ -14,25 +14,25 @@ da:
fields: Du kan have op til 4 ting vist som en tabel på din profil
header: PNG, GIF eller JPG. Højest %{size}. Vil blive skaleret ned til %{dimensions}px
inbox_url: Kopiere linket fra forsiden af den relay som du ønsker at bruge
- irreversible: Filtrerede toots vil forsvinde fulstændigt, selv hvis filteret senere skulle blive fjernet
+ irreversible: Filtrerede trut vil forsvinde fulstændigt, selv hvis filteret senere skulle blive fjernet
locale: Sproget på interfacet, emails og push beskeder
locked: Kræver, at du godkender følgere manuelt
note:
one: 1 tegn tilbage
other: %{count} tegn tilbage
- phrase: Vil blive parret uanset om der er store eller små bogstaver i teksten eller om der er en advarsel om en toot
+ phrase: Vil blive parret uanset om der er store eller små bogstaver i teksten eller om der er en advarsel om et trut
scopes: Hvilke APIs applikationen vil få adgang til. Hvis du vælger et højtlevel omfang, behøver du ikke vælge enkeltstående.
- setting_default_language: Sproget for dine toots kan blive fundet automatisk, men det er ikke altid præcist
+ setting_default_language: Sproget for dine trut kan blive fundet automatisk, men det er ikke altid præcist
setting_hide_network: Hvem du følger og hvem der følger dig vil ikke blive vist på din profil
setting_noindex: Påvirker din offentlige profil og status sider
- setting_theme: Påvirker hvordan Mastodon ser ud nåt du er logget ind via en hvilken som helst enhed.
- whole_word: Når nøgle ordet eller udtrykket kun er alfabetisk, vil det kun blive brugt hvis det passer hele ordet
+ setting_theme: Påvirker hvordan Mastodon ser ud når du er logget ind via en hvilken som helst enhed.
+ whole_word: Når nøgle ordet eller udtrykket kun er alfanumerisk, vil det kun blive brugt hvis det passer hele ordet
imports:
data: CSV fil eksporteret fra en anden Mastodon instans
sessions:
- otp: 'Indtast to-faktor koden der generes af appen på din fon eller brug en af din genoprettelses koder:'
+ otp: 'Indtast to-faktor koden der generes af appen af appen på din telefon eller brug en af din genoprettelses koder:'
user:
- chosen_languages: Når markeret, vil kun toots i de valgte sprog blive vist på offentlige tidslinjer
+ chosen_languages: Når markeret, vil kun trut i de valgte sprog blive vist på offentlige tidslinjer
labels:
account:
fields:
@@ -41,12 +41,12 @@ da:
defaults:
autofollow: Inviter til at følge din konto
avatar: Profilbillede
- bot: Dette er en bot konto
+ bot: Dette er en robot konto
chosen_languages: Filtrer sprog
- confirm_new_password: Bekræft dit nye kodeord
- confirm_password: Bekræft kodeord
+ confirm_new_password: Bekræft din nye adgangskode
+ confirm_password: Bekræft adgangskode
context: Filtrer sammenhænge
- current_password: Nuværende kodeord
+ current_password: Nuværende adgangskode
data: Data
display_name: Visningsnavn
email: E-mail adresse
@@ -58,17 +58,17 @@ da:
locale: Sprog på interface
locked: Lås konto
max_uses: Højeste antal benyttelser
- new_password: Nyt kodeord
+ new_password: Ny adgangskode
note: Biografi
otp_attempt: To-faktor kode
- password: Kodeord
+ password: Adgangskode
phrase: Nøgleord eller sætning
setting_auto_play_gif: Afspil automatisk animerede GIFs
setting_boost_modal: Vis bekræftelses dialog før du fremhæver
setting_default_language: Sprog for opslag
setting_default_privacy: Privatliv
setting_default_sensitive: Marker altid multimedia som værende følsomt
- setting_delete_modal: Vis bekræftelses dialog før du sletter et toot
+ setting_delete_modal: Vis bekræftelses dialog før du sletter et trut
setting_display_sensitive_media: Vis altid multimedier markeret som værende følsomt
setting_hide_network: Skjul dit netværk
setting_noindex: Frameld dig søgemaskiners indeksering
diff --git a/config/locales/simple_form.eu.yml b/config/locales/simple_form.eu.yml
index 649d18484..09a338200 100644
--- a/config/locales/simple_form.eu.yml
+++ b/config/locales/simple_form.eu.yml
@@ -20,10 +20,12 @@ eu:
one: Karaktere1 geratzen da
other: %{count} karaktere geratzen dira
phrase: Bat egingo du Maiuskula/minuskula kontuan hartu gabe eta edukiaren abisua kontuan hartu gabe
+ scopes: Zeintzuk API atzitu ditzakeen aplikazioak. Goi mailako arloa aukeratzen baduzu, ez dituzu azpikoak aukeratu behar.
setting_default_language: Zure toot-en hizkuntza automatikoki antzeman daiteke, baina ez da beti zehatza
setting_hide_network: Nor jarraitzen duzun eta nork jarraitzen zaituen ez da bistaratuko zure profilean
setting_noindex: Zure profil publiko eta toot orrietan eragina du
setting_theme: Edozein gailutik konektatzean Mastodon-en itxuran eragiten du.
+ whole_word: Hitz eta esaldi gakoa alfanumerikoa denean, hitz osoarekin bat datorrenean besterik ez da aplikatuko
imports:
data: Beste Mastodon instantzia batetik esportatutako CSV fitxategia
sessions:
@@ -42,6 +44,7 @@ eu:
chosen_languages: Iragazi hizkuntzak
confirm_new_password: Berretsi pasahitz berria
confirm_password: Berretsi pasahitza
+ context: Iragazkiaren testuinguruak
current_password: Oraingo pasahitza
data: Datuak
display_name: Pantaila-izena
@@ -49,6 +52,7 @@ eu:
expires_in: Iraungitzea
fields: Profilaren metadatuak
header: Goiburua
+ irreversible: Baztertu ezkutatu ordez
locale: Interfazearen hizkuntza
locked: Giltzapetu kontua
max_uses: Gehieneko erabiltzaile kopurua
@@ -56,6 +60,7 @@ eu:
note: Biografia
otp_attempt: Bi faktoreetako kodea
password: Pasahitza
+ phrase: Hitz edo esaldi gakoa
setting_auto_play_gif: Erreproduzitu GIF animatuak automatikoki
setting_boost_modal: Erakutsi baieztapen elkarrizketa-koadroa bultzada eman aurretik
setting_default_language: Argitalpenen hizkuntza
@@ -73,6 +78,7 @@ eu:
type: Inportazio mota
username: Erabiltzaile-izena
username_or_email: Erabiltzaile-izena edo e-mail helbidea
+ whole_word: Hitz osoa
interactions:
must_be_follower: Blokeatu jarraitzaile ez direnen jakinarazpenak
must_be_following: Blokeatu zuk jarraitzen ez dituzunen jakinarazpenak
diff --git a/config/locales/simple_form.fa.yml b/config/locales/simple_form.fa.yml
index f4266e167..c24037d41 100644
--- a/config/locales/simple_form.fa.yml
+++ b/config/locales/simple_form.fa.yml
@@ -4,7 +4,7 @@ fa:
hints:
defaults:
autofollow: کسانی که از راه دعوتنامه عضو میشوند به طور خودکار پیگیر شما خواهند شد
- avatar: یکی از قالبهای PNG یا GIF یا JPG. بیشترین اندازه ۲ مگابایت. تصویر به اندازهٔ ۴۰۰×۴۰۰ پیکسل تبدیل خواهد شد
+ avatar: یکی از قالبهای PNG یا GIF یا JPG. بیشترین اندازه %{size}. تصویر به اندازهٔ %{dimensions} پیکسل تبدیل خواهد شد
bot: این حساب بیشتر به طور خودکار فعالیت میکند و نظارت پیوستهای روی آن وجود ندارد
context: یک یا چند زمینه که فیلتر باید در آنها اعمال شود
digest: تنها وقتی فرستاده میشود که مدتی طولانی فعالیتی نداشته باشید و در این مدت برای شما پیغام خصوصیای نوشته شده باشد
@@ -12,7 +12,7 @@ fa:
one: 1 حرف باقی مانده
other: %{count} حرف باقی مانده
fields: شما میتوانید تا چهار مورد را در یک جدول در نمایهٔ خود نمایش دهید
- header: یکی از قالبهای PNG یا GIF یا JPG. بیشترین اندازه ۲ مگابایت. تصویر به اندازهٔ ۳۳۵×۷۰۰ پیکسل تبدیل خواهد شد
+ header: یکی از قالبهای PNG یا GIF یا JPG. بیشترین اندازه %{size}. تصویر به اندازهٔ %{dimensions} پیکسل تبدیل خواهد شد
inbox_url: نشانی صفحهٔ اصلی رلهای را که میخواهید به کار ببرید کپی کنید
irreversible: بوقهای فیلترشده به طور برگشتناپذیری ناپدید میشوند، حتی اگر فیلتر را بعداً بردارید
locale: زبان محیط کاربری، ایمیلها، و اعلانها
diff --git a/config/locales/simple_form.uk.yml b/config/locales/simple_form.uk.yml
index b4d2d6a80..834631fdf 100644
--- a/config/locales/simple_form.uk.yml
+++ b/config/locales/simple_form.uk.yml
@@ -4,6 +4,7 @@ uk:
hints:
defaults:
avatar: PNG, GIF, або JPG. Максимум - 2МБ. Буде зменшено до %{dimensions}px
+ bot: Цей аккаунт в основному виконує автоматичні дії та може не відстежуватіся
display_name: 'Залишилося символів: %{count} '
header: PNG, GIF, або JPG. Максимум - 2МБ. Буде зменшено до %{dimensions}px
locked: Буде вимагати від Вас самостійного підтверждення підписників, змінить приватність постів за замовчуванням на "тільки для підписників"
diff --git a/config/locales/uk.yml b/config/locales/uk.yml
index 5a37c0c36..6783495bb 100644
--- a/config/locales/uk.yml
+++ b/config/locales/uk.yml
@@ -19,6 +19,7 @@ uk:
humane_approach_title: Більш людський підхід
not_a_product_body: Mastodon - це некомерційна мережа. Ніякої реклами, збору даних і залізних стін. Тут немає центральної влади.
not_a_product_title: Ви - особистість, а не продукт
+ real_conversation_body: Висловлюйте свої думки себе у будь-який спосіб маючи в розпорядженні 500 символів з підтримкою гранульованого контенту та попереджень медіа.
real_conversation_title: Побудований для справжньої розмови
within_reach_body: Велика кількість застосунків для iOS, Android та інших платформ, завдяки дружній до розробника екосистемі дозволяє бути на звязку з друзями звідусіль.
within_reach_title: Завжди на звязку
From 025a06d3228fc518c91a98e617652655bb778e5f Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Tue, 21 Aug 2018 20:11:34 +0200
Subject: [PATCH 137/196] Add missing indices for ON DELETE CASCADE constraints
(#8332)
Fix #8327
---
.../20180820232245_add_foreign_key_indices.rb | 16 ++++++++++++++++
db/schema.rb | 10 +++++++++-
2 files changed, 25 insertions(+), 1 deletion(-)
create mode 100644 db/migrate/20180820232245_add_foreign_key_indices.rb
diff --git a/db/migrate/20180820232245_add_foreign_key_indices.rb b/db/migrate/20180820232245_add_foreign_key_indices.rb
new file mode 100644
index 000000000..e346c1f5b
--- /dev/null
+++ b/db/migrate/20180820232245_add_foreign_key_indices.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+class AddForeignKeyIndices < ActiveRecord::Migration[5.2]
+ disable_ddl_transaction!
+
+ def change
+ add_index :follows, :target_account_id, algorithm: :concurrently
+ add_index :blocks, :target_account_id, algorithm: :concurrently
+ add_index :mutes, :target_account_id, algorithm: :concurrently
+ add_index :notifications, :from_account_id, algorithm: :concurrently
+ add_index :accounts, :moved_to_account_id, algorithm: :concurrently
+ add_index :statuses, :in_reply_to_account_id, algorithm: :concurrently
+ add_index :session_activations, :access_token_id, algorithm: :concurrently
+ add_index :oauth_access_grants, :resource_owner_id, algorithm: :concurrently
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 8e9242973..f3b06f7c0 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 2018_08_14_171349) do
+ActiveRecord::Schema.define(version: 2018_08_20_232245) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -88,6 +88,7 @@ ActiveRecord::Schema.define(version: 2018_08_14_171349) do
t.string "actor_type"
t.index "(((setweight(to_tsvector('simple'::regconfig, (display_name)::text), 'A'::\"char\") || setweight(to_tsvector('simple'::regconfig, (username)::text), 'B'::\"char\")) || setweight(to_tsvector('simple'::regconfig, (COALESCE(domain, ''::character varying))::text), 'C'::\"char\")))", name: "search_index", using: :gin
t.index "lower((username)::text), lower((domain)::text)", name: "index_accounts_on_username_and_domain_lower", unique: true
+ t.index ["moved_to_account_id"], name: "index_accounts_on_moved_to_account_id"
t.index ["uri"], name: "index_accounts_on_uri"
t.index ["url"], name: "index_accounts_on_url"
end
@@ -122,6 +123,7 @@ ActiveRecord::Schema.define(version: 2018_08_14_171349) do
t.bigint "target_account_id", null: false
t.string "uri"
t.index ["account_id", "target_account_id"], name: "index_blocks_on_account_id_and_target_account_id", unique: true
+ t.index ["target_account_id"], name: "index_blocks_on_target_account_id"
end
create_table "conversation_mutes", force: :cascade do |t|
@@ -209,6 +211,7 @@ ActiveRecord::Schema.define(version: 2018_08_14_171349) do
t.boolean "show_reblogs", default: true, null: false
t.string "uri"
t.index ["account_id", "target_account_id"], name: "index_follows_on_account_id_and_target_account_id", unique: true
+ t.index ["target_account_id"], name: "index_follows_on_target_account_id"
end
create_table "identities", id: :serial, force: :cascade do |t|
@@ -297,6 +300,7 @@ ActiveRecord::Schema.define(version: 2018_08_14_171349) do
t.bigint "target_account_id", null: false
t.boolean "hide_notifications", default: true, null: false
t.index ["account_id", "target_account_id"], name: "index_mutes_on_account_id_and_target_account_id", unique: true
+ t.index ["target_account_id"], name: "index_mutes_on_target_account_id"
end
create_table "notifications", force: :cascade do |t|
@@ -309,6 +313,7 @@ ActiveRecord::Schema.define(version: 2018_08_14_171349) do
t.index ["account_id", "activity_id", "activity_type"], name: "account_activity", unique: true
t.index ["account_id", "id"], name: "index_notifications_on_account_id_and_id", order: { id: :desc }
t.index ["activity_id", "activity_type"], name: "index_notifications_on_activity_id_and_activity_type"
+ t.index ["from_account_id"], name: "index_notifications_on_from_account_id"
end
create_table "oauth_access_grants", force: :cascade do |t|
@@ -320,6 +325,7 @@ ActiveRecord::Schema.define(version: 2018_08_14_171349) do
t.string "scopes"
t.bigint "application_id", null: false
t.bigint "resource_owner_id", null: false
+ t.index ["resource_owner_id"], name: "index_oauth_access_grants_on_resource_owner_id"
t.index ["token"], name: "index_oauth_access_grants_on_token", unique: true
end
@@ -423,6 +429,7 @@ ActiveRecord::Schema.define(version: 2018_08_14_171349) do
t.bigint "access_token_id"
t.bigint "user_id", null: false
t.bigint "web_push_subscription_id"
+ t.index ["access_token_id"], name: "index_session_activations_on_access_token_id"
t.index ["session_id"], name: "index_session_activations_on_session_id", unique: true
t.index ["user_id"], name: "index_session_activations_on_user_id"
end
@@ -486,6 +493,7 @@ ActiveRecord::Schema.define(version: 2018_08_14_171349) do
t.bigint "application_id"
t.bigint "in_reply_to_account_id"
t.index ["account_id", "id", "visibility", "updated_at"], name: "index_statuses_20180106", order: { id: :desc }
+ t.index ["in_reply_to_account_id"], name: "index_statuses_on_in_reply_to_account_id"
t.index ["in_reply_to_id"], name: "index_statuses_on_in_reply_to_id"
t.index ["reblog_of_id", "account_id"], name: "index_statuses_on_reblog_of_id_and_account_id"
t.index ["uri"], name: "index_statuses_on_uri", unique: true
From 28de046b8bca87dab9d316c59a5afa3a0b24c5a6 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Wed, 22 Aug 2018 02:44:56 +0200
Subject: [PATCH 138/196] Get rid of Chewy order/limit warning (#8355)
---
app/chewy/statuses_index.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/chewy/statuses_index.rb b/app/chewy/statuses_index.rb
index 8bf5b4af7..d3104172c 100644
--- a/app/chewy/statuses_index.rb
+++ b/app/chewy/statuses_index.rb
@@ -31,7 +31,7 @@ class StatusesIndex < Chewy::Index
},
}
- define_type ::Status.without_reblogs do
+ define_type ::Status.unscoped.without_reblogs do
crutch :mentions do |collection|
data = ::Mention.where(status_id: collection.map(&:id)).pluck(:status_id, :account_id)
data.each.with_object({}) { |(id, name), result| (result[id] ||= []).push(name) }
From 2374a00c1062a70e9092d88579e1351e4c8128f9 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Wed, 22 Aug 2018 11:53:41 +0200
Subject: [PATCH 139/196] Add confirmation step to account suspensions (#8353)
* Add confirmation page for suspensions
* Suspension confirmation closes reports, linked from report UI
* Fix tests
---
app/controllers/admin/reports_controller.rb | 8 +---
.../admin/suspensions_controller.rb | 39 +++++++++++++++++--
app/javascript/styles/mastodon/forms.scss | 6 +++
app/models/account.rb | 7 ++++
.../form/admin_suspension_confirmation.rb | 7 ++++
app/views/admin/accounts/show.html.haml | 2 +-
app/views/admin/reports/show.html.haml | 2 +-
app/views/admin/suspensions/new.html.haml | 25 ++++++++++++
config/locales/en.yml | 6 +++
config/routes.rb | 2 +-
.../admin/reports_controller_spec.rb | 15 -------
.../admin/suspensions_controller_spec.rb | 2 +-
12 files changed, 92 insertions(+), 29 deletions(-)
create mode 100644 app/models/form/admin_suspension_confirmation.rb
create mode 100644 app/views/admin/suspensions/new.html.haml
diff --git a/app/controllers/admin/reports_controller.rb b/app/controllers/admin/reports_controller.rb
index d00b3d222..5d7f43e00 100644
--- a/app/controllers/admin/reports_controller.rb
+++ b/app/controllers/admin/reports_controller.rb
@@ -44,14 +44,8 @@ module Admin
when 'resolve'
@report.resolve!(current_account)
log_action :resolve, @report
- when 'suspend'
- Admin::SuspensionWorker.perform_async(@report.target_account.id)
-
- log_action :resolve, @report
- log_action :suspend, @report.target_account
-
- resolve_all_target_account_reports
when 'silence'
+ @report.resolve!(current_account)
@report.target_account.update!(silenced: true)
log_action :resolve, @report
diff --git a/app/controllers/admin/suspensions_controller.rb b/app/controllers/admin/suspensions_controller.rb
index 5f222e125..0c7bdad9e 100644
--- a/app/controllers/admin/suspensions_controller.rb
+++ b/app/controllers/admin/suspensions_controller.rb
@@ -4,11 +4,24 @@ module Admin
class SuspensionsController < BaseController
before_action :set_account
+ def new
+ @suspension = Form::AdminSuspensionConfirmation.new(report_id: params[:report_id])
+ end
+
def create
authorize @account, :suspend?
- Admin::SuspensionWorker.perform_async(@account.id)
- log_action :suspend, @account
- redirect_to admin_accounts_path
+
+ @suspension = Form::AdminSuspensionConfirmation.new(suspension_params)
+
+ if suspension_params[:acct] == @account.acct
+ resolve_report! if suspension_params[:report_id]
+ perform_suspend!
+ mark_reports_resolved!
+ redirect_to admin_accounts_path
+ else
+ flash.now[:alert] = I18n.t('admin.suspensions.bad_acct_msg')
+ render :new
+ end
end
def destroy
@@ -23,5 +36,25 @@ module Admin
def set_account
@account = Account.find(params[:account_id])
end
+
+ def suspension_params
+ params.require(:form_admin_suspension_confirmation).permit(:acct, :report_id)
+ end
+
+ def resolve_report!
+ report = Report.find(suspension_params[:report_id])
+ report.resolve!(current_account)
+ log_action :resolve, report
+ end
+
+ def perform_suspend!
+ @account.suspend!
+ Admin::SuspensionWorker.perform_async(@account.id)
+ log_action :suspend, @account
+ end
+
+ def mark_reports_resolved!
+ Report.where(target_account: @account).unresolved.update_all(action_taken: true, action_taken_by_account_id: current_account.id)
+ end
end
end
diff --git a/app/javascript/styles/mastodon/forms.scss b/app/javascript/styles/mastodon/forms.scss
index 22dbfa8cf..020be5ad2 100644
--- a/app/javascript/styles/mastodon/forms.scss
+++ b/app/javascript/styles/mastodon/forms.scss
@@ -50,6 +50,12 @@ code {
color: $highlight-text-color;
}
}
+
+ code {
+ border-radius: 3px;
+ padding: 0.2em 0.4em;
+ background: darken($ui-base-color, 12%);
+ }
}
.card {
diff --git a/app/models/account.rb b/app/models/account.rb
index c33ec4bd5..440a731e3 100644
--- a/app/models/account.rb
+++ b/app/models/account.rb
@@ -193,6 +193,13 @@ class Account < ApplicationRecord
ResolveAccountService.new.call(acct)
end
+ def suspend!
+ transaction do
+ user&.disable! if local?
+ update!(suspended: true)
+ end
+ end
+
def unsuspend!
transaction do
user&.enable! if local?
diff --git a/app/models/form/admin_suspension_confirmation.rb b/app/models/form/admin_suspension_confirmation.rb
new file mode 100644
index 000000000..c34b5b30e
--- /dev/null
+++ b/app/models/form/admin_suspension_confirmation.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+class Form::AdminSuspensionConfirmation
+ include ActiveModel::Model
+
+ attr_accessor :acct, :report_id
+end
diff --git a/app/views/admin/accounts/show.html.haml b/app/views/admin/accounts/show.html.haml
index ed8190af5..f2c53e3fe 100644
--- a/app/views/admin/accounts/show.html.haml
+++ b/app/views/admin/accounts/show.html.haml
@@ -123,7 +123,7 @@
- if @account.suspended?
= link_to t('admin.accounts.undo_suspension'), admin_account_suspension_path(@account.id), method: :delete, class: 'button' if can?(:unsuspend, @account)
- else
- = link_to t('admin.accounts.perform_full_suspension'), admin_account_suspension_path(@account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button' if can?(:suspend, @account)
+ = link_to t('admin.accounts.perform_full_suspension'), new_admin_account_suspension_path(@account.id), class: 'button' if can?(:suspend, @account)
- if !@account.local? && @account.hub_url.present?
%hr.spacer/
diff --git a/app/views/admin/reports/show.html.haml b/app/views/admin/reports/show.html.haml
index b13bb5303..ef0e4aa41 100644
--- a/app/views/admin/reports/show.html.haml
+++ b/app/views/admin/reports/show.html.haml
@@ -8,7 +8,7 @@
- if @report.unresolved?
%div{ style: 'float: right' }
= link_to t('admin.reports.silence_account'), admin_report_path(@report, outcome: 'silence'), method: :put, class: 'button'
- = link_to t('admin.reports.suspend_account'), admin_report_path(@report, outcome: 'suspend'), method: :put, class: 'button'
+ = link_to t('admin.reports.suspend_account'), new_admin_account_suspension_path(@report.target_account_id, report_id: @report.id), class: 'button'
%div{ style: 'float: left' }
= link_to t('admin.reports.mark_as_resolved'), admin_report_path(@report, outcome: 'resolve'), method: :put, class: 'button'
- else
diff --git a/app/views/admin/suspensions/new.html.haml b/app/views/admin/suspensions/new.html.haml
new file mode 100644
index 000000000..5ffbbbe46
--- /dev/null
+++ b/app/views/admin/suspensions/new.html.haml
@@ -0,0 +1,25 @@
+- content_for :page_title do
+ = t('admin.suspensions.title', acct: @account.acct)
+
+= simple_form_for @suspension, url: admin_account_suspension_path(@account.id), method: :post do |f|
+ %p.hint= t('admin.suspensions.warning_html')
+
+ .fields-group
+ %ul
+ %li.negative-hint
+ = number_to_human @account.statuses_count, strip_insignificant_zeros: true
+ = t('accounts.posts')
+ %li.negative-hint
+ = number_to_human @account.following_count, strip_insignificant_zeros: true
+ = t('accounts.following')
+ %li.negative-hint
+ = number_to_human @account.followers_count, strip_insignificant_zeros: true
+ = t('accounts.followers')
+
+ %p.hint= t('admin.suspensions.hint_html', value: content_tag(:code, @account.acct))
+
+ = f.input :acct
+ = f.input_field :report_id, as: :hidden
+
+ .actions
+ = f.button :button, t('admin.suspensions.proceed'), type: :submit, class: 'negative'
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 7809b8e68..45b321312 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -414,6 +414,12 @@ en:
last_delivery: Last delivery
title: WebSub
topic: Topic
+ suspensions:
+ bad_acct_msg: The confirmation value didn't match up. Are you suspending the right account?
+ hint_html: 'To confirm the suspension of the account, please enter %{value} into the field below:'
+ proceed: Proceed
+ title: Suspend %{acct}
+ warning_html: 'Suspending this account will irreversibly delete data from this account, which includes:'
title: Administration
admin_mailer:
new_report:
diff --git a/config/routes.rb b/config/routes.rb
index da7cb8061..80a8b7b4c 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -174,7 +174,7 @@ Rails.application.routes.draw do
resource :change_email, only: [:show, :update]
resource :reset, only: [:create]
resource :silence, only: [:create, :destroy]
- resource :suspension, only: [:create, :destroy]
+ resource :suspension, only: [:new, :create, :destroy]
resources :statuses, only: [:index, :create, :update, :destroy]
resource :confirmation, only: [:create] do
diff --git a/spec/controllers/admin/reports_controller_spec.rb b/spec/controllers/admin/reports_controller_spec.rb
index e50c02a72..bcc789c57 100644
--- a/spec/controllers/admin/reports_controller_spec.rb
+++ b/spec/controllers/admin/reports_controller_spec.rb
@@ -68,21 +68,6 @@ describe Admin::ReportsController do
end
end
- describe 'with an outcome of `suspend`' do
- it 'suspends the reported account' do
- report = Fabricate(:report)
- allow(Admin::SuspensionWorker).to receive(:perform_async)
-
- put :update, params: { id: report, outcome: 'suspend' }
- expect(response).to redirect_to(admin_reports_path)
- report.reload
- expect(report.action_taken_by_account).to eq user.account
- expect(report.action_taken).to eq true
- expect(Admin::SuspensionWorker).
- to have_received(:perform_async).with(report.target_account_id)
- end
- end
-
describe 'with an outsome of `silence`' do
it 'silences the reported account' do
report = Fabricate(:report)
diff --git a/spec/controllers/admin/suspensions_controller_spec.rb b/spec/controllers/admin/suspensions_controller_spec.rb
index ddfc938d1..babb1ed96 100644
--- a/spec/controllers/admin/suspensions_controller_spec.rb
+++ b/spec/controllers/admin/suspensions_controller_spec.rb
@@ -12,7 +12,7 @@ describe Admin::SuspensionsController do
account = Fabricate(:account, suspended: false)
expect(Admin::SuspensionWorker).to receive(:perform_async).with(account.id)
- post :create, params: { account_id: account.id }
+ post :create, params: { account_id: account.id, form_admin_suspension_confirmation: { acct: account.acct } }
expect(response).to redirect_to(admin_accounts_path)
end
From 4bdab203ac5ca06d757d08af8a2bc184c86e3bbe Mon Sep 17 00:00:00 2001
From: masarakki
Date: Wed, 22 Aug 2018 20:20:50 +0900
Subject: [PATCH 140/196] exclude-other-silenced-accounts (#7528)
---
app/models/status.rb | 3 ++-
spec/models/status_spec.rb | 11 -----------
2 files changed, 2 insertions(+), 12 deletions(-)
diff --git a/app/models/status.rb b/app/models/status.rb
index 6ba7b7a50..35655bff2 100644
--- a/app/models/status.rb
+++ b/app/models/status.rb
@@ -384,7 +384,8 @@ class Status < ApplicationRecord
def account_silencing_filter(account)
if account.silenced?
- including_silenced_accounts
+ including_myself = left_outer_joins(:account).where(account_id: account.id).references(:accounts)
+ excluding_silenced_accounts.or(including_myself)
else
excluding_silenced_accounts
end
diff --git a/spec/models/status_spec.rb b/spec/models/status_spec.rb
index d03005107..9d8670129 100644
--- a/spec/models/status_spec.rb
+++ b/spec/models/status_spec.rb
@@ -573,17 +573,6 @@ RSpec.describe Status, type: :model do
expect(results).to include(es_status)
end
end
-
- context 'where that account is silenced' do
- it 'includes statuses from other accounts that are silenced' do
- @account.update(silenced: true)
- other_silenced_account = Fabricate(:account, silenced: true)
- other_status = Fabricate(:status, account: other_silenced_account)
-
- results = Status.as_public_timeline(@account)
- expect(results).to include(other_status)
- end
- end
end
end
From 1b282299df67b0b9681e8d396fbe98f687ff9bba Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Wed, 22 Aug 2018 19:33:10 +0200
Subject: [PATCH 141/196] Add favourites to archive takeout (#8351)
Remove experimental key export
---
app/services/backup_service.rb | 24 +++++++++++++++++++++---
1 file changed, 21 insertions(+), 3 deletions(-)
diff --git a/app/services/backup_service.rb b/app/services/backup_service.rb
index da7db6462..4cfa22ab8 100644
--- a/app/services/backup_service.rb
+++ b/app/services/backup_service.rb
@@ -44,6 +44,7 @@ class BackupService < BaseService
Gem::Package::TarWriter.new(gz) do |tar|
dump_media_attachments!(tar)
dump_outbox!(tar)
+ dump_likes!(tar)
dump_actor!(tar)
end
end
@@ -82,6 +83,8 @@ class BackupService < BaseService
actor[:icon][:url] = 'avatar' + File.extname(actor[:icon][:url]) if actor[:icon]
actor[:image][:url] = 'header' + File.extname(actor[:image][:url]) if actor[:image]
+ actor[:outbox] = 'outbox.json'
+ actor[:likes] = 'likes.json'
download_to_tar(tar, account.avatar, 'avatar' + File.extname(account.avatar.path)) if account.avatar.exists?
download_to_tar(tar, account.header, 'header' + File.extname(account.header.path)) if account.header.exists?
@@ -91,15 +94,30 @@ class BackupService < BaseService
tar.add_file_simple('actor.json', 0o444, json.bytesize) do |io|
io.write(json)
end
+ end
- tar.add_file_simple('key.pem', 0o444, account.private_key.bytesize) do |io|
- io.write(account.private_key)
+ def dump_likes!(tar)
+ collection = serialize(ActivityPub::CollectionPresenter.new(id: 'likes.json', type: :ordered, size: 0, items: []), ActivityPub::CollectionSerializer)
+
+ Status.reorder(nil).joins(:favourites).includes(:account).merge(account.favourites).find_in_batches do |statuses|
+ statuses.each do |status|
+ collection[:totalItems] += 1
+ collection[:orderedItems] << ActivityPub::TagManager.instance.uri_for(status)
+ end
+
+ GC.start
+ end
+
+ json = Oj.dump(collection)
+
+ tar.add_file_simple('likes.json', 0o444, json.bytesize) do |io|
+ io.write(json)
end
end
def collection_presenter
ActivityPub::CollectionPresenter.new(
- id: account_outbox_url(account),
+ id: 'outbox.json',
type: :ordered,
size: account.statuses_count,
items: []
From ad41806e53e6b024aaca01d1d59fcc82d1c4b804 Mon Sep 17 00:00:00 2001
From: M Somerville
Date: Wed, 22 Aug 2018 18:42:47 +0100
Subject: [PATCH 142/196] Allow use of plurals on about page stats. (#8363)
---
app/views/about/more.html.haml | 4 ++--
app/views/about/show.html.haml | 8 ++++----
config/locales/en.yml | 8 ++++++--
3 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/app/views/about/more.html.haml b/app/views/about/more.html.haml
index 8411cd276..20d5a262b 100644
--- a/app/views/about/more.html.haml
+++ b/app/views/about/more.html.haml
@@ -18,11 +18,11 @@
.information-board__section
%span= t 'about.user_count_before'
%strong= number_with_delimiter @instance_presenter.user_count
- %span= t 'about.user_count_after'
+ %span= t 'about.user_count_after', count: @instance_presenter.user_count
.information-board__section
%span= t 'about.status_count_before'
%strong= number_with_delimiter @instance_presenter.status_count
- %span= t 'about.status_count_after'
+ %span= t 'about.status_count_after', count: @instance_presenter.status_count
.row__mascot
.landing-page__mascot
= image_tag asset_pack_path('elephant_ui_plane.svg')
diff --git a/app/views/about/show.html.haml b/app/views/about/show.html.haml
index 8a40b97cc..229b0f55b 100644
--- a/app/views/about/show.html.haml
+++ b/app/views/about/show.html.haml
@@ -56,11 +56,11 @@
.information-board__section
%span= t 'about.user_count_before'
%strong= number_with_delimiter @instance_presenter.user_count
- %span= t 'about.user_count_after'
+ %span= t 'about.user_count_after', count: @instance_presenter.user_count
.information-board__section
%span= t 'about.status_count_before'
%strong= number_with_delimiter @instance_presenter.status_count
- %span= t 'about.status_count_after'
+ %span= t 'about.status_count_after', count: @instance_presenter.status_count
.row__mascot
.landing-page__mascot
= image_tag asset_pack_path('elephant_ui_plane.svg')
@@ -88,11 +88,11 @@
.information-board__section
%span= t 'about.user_count_before'
%strong= number_with_delimiter @instance_presenter.user_count
- %span= t 'about.user_count_after'
+ %span= t 'about.user_count_after', count: @instance_presenter.user_count
.information-board__section
%span= t 'about.status_count_before'
%strong= number_with_delimiter @instance_presenter.status_count
- %span= t 'about.status_count_after'
+ %span= t 'about.status_count_after', count: @instance_presenter.status_count
.row__mascot
.landing-page__mascot
= image_tag asset_pack_path('elephant_ui_plane.svg')
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 45b321312..5e127dc71 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -30,10 +30,14 @@ en:
other_instances: Instance list
privacy_policy: Privacy policy
source_code: Source code
- status_count_after: statuses
+ status_count_after:
+ one: status
+ other: statuses
status_count_before: Who authored
terms: Terms of service
- user_count_after: users
+ user_count_after:
+ one: user
+ other: users
user_count_before: Home to
what_is_mastodon: What is Mastodon?
accounts:
From 802cf6a4c53175c7da17ded39cf75679fa352385 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Wed, 22 Aug 2018 20:55:14 +0200
Subject: [PATCH 143/196] Improve federated ID validation (#8372)
* Fix URI not being sufficiently validated with prefetched JSON
* Add additional id validation to OStatus documents, when possible
---
app/helpers/jsonld_helper.rb | 6 ++-
app/lib/ostatus/activity/creation.rb | 11 +++-
.../fetch_remote_account_service.rb | 2 +-
.../activitypub/fetch_remote_key_service.rb | 2 +-
.../fetch_remote_status_service.rb | 2 +-
app/services/fetch_remote_account_service.rb | 7 ++-
.../fetch_remote_account_service_spec.rb | 7 ++-
.../fetch_remote_status_service_spec.rb | 22 ++++++++
.../fetch_remote_account_service_spec.rb | 20 ++++++-
.../fetch_remote_status_service_spec.rb | 52 +++++++++++++++++++
10 files changed, 122 insertions(+), 9 deletions(-)
diff --git a/app/helpers/jsonld_helper.rb b/app/helpers/jsonld_helper.rb
index 9d2b6cf00..532397272 100644
--- a/app/helpers/jsonld_helper.rb
+++ b/app/helpers/jsonld_helper.rb
@@ -73,8 +73,10 @@ module JsonLdHelper
end
end
- def body_to_json(body)
- body.is_a?(String) ? Oj.load(body, mode: :strict) : body
+ def body_to_json(body, compare_id: nil)
+ json = body.is_a?(String) ? Oj.load(body, mode: :strict) : body
+ return if compare_id.present? && json['id'] != compare_id
+ json
rescue Oj::ParseError
nil
end
diff --git a/app/lib/ostatus/activity/creation.rb b/app/lib/ostatus/activity/creation.rb
index d3a303a0c..8f8c70052 100644
--- a/app/lib/ostatus/activity/creation.rb
+++ b/app/lib/ostatus/activity/creation.rb
@@ -7,7 +7,7 @@ class OStatus::Activity::Creation < OStatus::Activity::Base
return [nil, false]
end
- return [nil, false] if @account.suspended?
+ return [nil, false] if @account.suspended? || invalid_origin?
RedisLock.acquire(lock_options) do |lock|
if lock.acquired?
@@ -204,6 +204,15 @@ class OStatus::Activity::Creation < OStatus::Activity::Base
end
end
+ def invalid_origin?
+ return false unless id.start_with?('http') # Legacy IDs cannot be checked
+
+ needle = Addressable::URI.parse(id).normalized_host
+
+ !(needle.casecmp(@account.domain).zero? ||
+ needle.casecmp(Addressable::URI.parse(@account.remote_url.presence || @account.uri).normalized_host).zero?)
+ end
+
def lock_options
{ redis: Redis.current, key: "create:#{id}" }
end
diff --git a/app/services/activitypub/fetch_remote_account_service.rb b/app/services/activitypub/fetch_remote_account_service.rb
index 41fec9170..1ec9ee5dd 100644
--- a/app/services/activitypub/fetch_remote_account_service.rb
+++ b/app/services/activitypub/fetch_remote_account_service.rb
@@ -11,7 +11,7 @@ class ActivityPub::FetchRemoteAccountService < BaseService
@json = if prefetched_body.nil?
fetch_resource(uri, id)
else
- body_to_json(prefetched_body)
+ body_to_json(prefetched_body, compare_id: id ? uri : nil)
end
return if !supported_context? || !expected_type? || (break_on_redirect && @json['movedTo'].present?)
diff --git a/app/services/activitypub/fetch_remote_key_service.rb b/app/services/activitypub/fetch_remote_key_service.rb
index 505baccd4..df17d9079 100644
--- a/app/services/activitypub/fetch_remote_key_service.rb
+++ b/app/services/activitypub/fetch_remote_key_service.rb
@@ -17,7 +17,7 @@ class ActivityPub::FetchRemoteKeyService < BaseService
@json = fetch_resource(uri, id)
end
else
- @json = body_to_json(prefetched_body)
+ @json = body_to_json(prefetched_body, compare_id: id ? uri : nil)
end
return unless supported_context?(@json) && expected_type?
diff --git a/app/services/activitypub/fetch_remote_status_service.rb b/app/services/activitypub/fetch_remote_status_service.rb
index 2b447abb3..469821032 100644
--- a/app/services/activitypub/fetch_remote_status_service.rb
+++ b/app/services/activitypub/fetch_remote_status_service.rb
@@ -8,7 +8,7 @@ class ActivityPub::FetchRemoteStatusService < BaseService
@json = if prefetched_body.nil?
fetch_resource(uri, id, on_behalf_of)
else
- body_to_json(prefetched_body)
+ body_to_json(prefetched_body, compare_id: id ? uri : nil)
end
return unless supported_context? && expected_type?
diff --git a/app/services/fetch_remote_account_service.rb b/app/services/fetch_remote_account_service.rb
index a0f031a44..cfc560022 100644
--- a/app/services/fetch_remote_account_service.rb
+++ b/app/services/fetch_remote_account_service.rb
@@ -27,7 +27,7 @@ class FetchRemoteAccountService < BaseService
account = author_from_xml(xml.at_xpath('/xmlns:feed', xmlns: OStatus::TagManager::XMLNS), false)
- UpdateRemoteProfileService.new.call(xml, account) unless account.nil?
+ UpdateRemoteProfileService.new.call(xml, account) if account.present? && trusted_domain?(url, account)
account
rescue TypeError
@@ -37,4 +37,9 @@ class FetchRemoteAccountService < BaseService
Rails.logger.debug 'Invalid XML or missing namespace'
nil
end
+
+ def trusted_domain?(url, account)
+ domain = Addressable::URI.parse(url).normalized_host
+ domain.casecmp(account.domain).zero? || domain.casecmp(Addressable::URI.parse(account.remote_url.presence || account.uri).normalized_host).zero?
+ end
end
diff --git a/spec/services/activitypub/fetch_remote_account_service_spec.rb b/spec/services/activitypub/fetch_remote_account_service_spec.rb
index dba55c034..aa13f0a9b 100644
--- a/spec/services/activitypub/fetch_remote_account_service_spec.rb
+++ b/spec/services/activitypub/fetch_remote_account_service_spec.rb
@@ -59,7 +59,6 @@ RSpec.describe ActivityPub::FetchRemoteAccountService, type: :service do
it 'returns nil' do
expect(account).to be_nil
end
-
end
context 'when URI and WebFinger share the same host' do
@@ -119,5 +118,11 @@ RSpec.describe ActivityPub::FetchRemoteAccountService, type: :service do
include_examples 'sets profile data'
end
+
+ context 'with wrong id' do
+ it 'does not create account' do
+ expect(subject.call('https://fake.address/@foo', prefetched_body: Oj.dump(actor))).to be_nil
+ end
+ end
end
end
diff --git a/spec/services/activitypub/fetch_remote_status_service_spec.rb b/spec/services/activitypub/fetch_remote_status_service_spec.rb
index 549eb80fa..9ae409996 100644
--- a/spec/services/activitypub/fetch_remote_status_service_spec.rb
+++ b/spec/services/activitypub/fetch_remote_status_service_spec.rb
@@ -70,5 +70,27 @@ RSpec.describe ActivityPub::FetchRemoteStatusService, type: :service do
expect(strip_tags(status.text)).to eq "Nyan Cat 10 hours remix https://#{valid_domain}/watch?v=12345"
end
end
+
+ context 'with wrong id' do
+ let(:note) do
+ {
+ '@context': 'https://www.w3.org/ns/activitystreams',
+ id: "https://real.address/@foo/1234",
+ type: 'Note',
+ content: 'Lorem ipsum',
+ attributedTo: ActivityPub::TagManager.instance.uri_for(sender),
+ }
+ end
+
+ let(:object) do
+ temp = note.dup
+ temp[:id] = 'https://fake.address/@foo/5678'
+ temp
+ end
+
+ it 'does not create status' do
+ expect(sender.statuses.first).to be_nil
+ end
+ end
end
end
diff --git a/spec/services/fetch_remote_account_service_spec.rb b/spec/services/fetch_remote_account_service_spec.rb
index 1c3abe8f3..20dd505d0 100644
--- a/spec/services/fetch_remote_account_service_spec.rb
+++ b/spec/services/fetch_remote_account_service_spec.rb
@@ -1,7 +1,7 @@
require 'rails_helper'
RSpec.describe FetchRemoteAccountService, type: :service do
- let(:url) { 'https://example.com' }
+ let(:url) { 'https://example.com/alice' }
let(:prefetched_body) { nil }
let(:protocol) { :ostatus }
subject { FetchRemoteAccountService.new.call(url, prefetched_body, protocol) }
@@ -46,6 +46,24 @@ RSpec.describe FetchRemoteAccountService, type: :service do
end
include_examples 'return Account'
+
+ it 'does not update account information if XML comes from an unverified domain' do
+ feed_xml = <<-XML.squish
+
+
+
+ http://activitystrea.ms/schema/1.0/person
+ http://kickass.zone/users/localhost
+ localhost
+ localhost
+ Villain!!!
+
+
+ XML
+
+ returned_account = described_class.new.call('https://real-fake-domains.com/alice', feed_xml, :ostatus)
+ expect(returned_account.display_name).to_not eq 'Villain!!!'
+ end
end
context 'when prefetched_body is nil' do
diff --git a/spec/services/fetch_remote_status_service_spec.rb b/spec/services/fetch_remote_status_service_spec.rb
index 0df9c329a..f9db024b9 100644
--- a/spec/services/fetch_remote_status_service_spec.rb
+++ b/spec/services/fetch_remote_status_service_spec.rb
@@ -32,4 +32,56 @@ RSpec.describe FetchRemoteStatusService, type: :service do
expect(status.text).to eq 'Lorem ipsum'
end
end
+
+ context 'protocol is :ostatus' do
+ subject { described_class.new }
+
+ before do
+ Fabricate(:account, username: 'tracer', domain: 'real.domain', remote_url: 'https://real.domain/users/tracer')
+ end
+
+ it 'does not create status with author at different domain' do
+ status_body = <<-XML.squish
+
+
+ tag:real.domain,2017-04-27:objectId=4487555:objectType=Status
+ 2017-04-27T13:49:25Z
+ 2017-04-27T13:49:25Z
+ http://activitystrea.ms/schema/1.0/note
+ http://activitystrea.ms/schema/1.0/post
+
+ https://real.domain/users/tracer
+ http://activitystrea.ms/schema/1.0/person
+ https://real.domain/users/tracer
+ tracer
+
+ Overwatch rocks
+
+ XML
+
+ expect(subject.call('https://fake.domain/foo', status_body, :ostatus)).to be_nil
+ end
+
+ it 'does not create status with wrong id when id uses http format' do
+ status_body = <<-XML.squish
+
+
+ https://other-real.domain/statuses/123
+ 2017-04-27T13:49:25Z
+ 2017-04-27T13:49:25Z
+ http://activitystrea.ms/schema/1.0/note
+ http://activitystrea.ms/schema/1.0/post
+
+ https://real.domain/users/tracer
+ http://activitystrea.ms/schema/1.0/person
+ https://real.domain/users/tracer
+ tracer
+
+ Overwatch rocks
+
+ XML
+
+ expect(subject.call('https://real.domain/statuses/456', status_body, :ostatus)).to be_nil
+ end
+ end
end
From 56f882aed6fc81bbe4fb8821f11ba196795c99a8 Mon Sep 17 00:00:00 2001
From: ThibG
Date: Wed, 22 Aug 2018 20:55:50 +0200
Subject: [PATCH 144/196] Avoid deleted attributes when building a Status from
action log (fixes #8371) (#8373)
---
app/helpers/admin/action_logs_helper.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/helpers/admin/action_logs_helper.rb b/app/helpers/admin/action_logs_helper.rb
index 85bd30304..c28f0be6b 100644
--- a/app/helpers/admin/action_logs_helper.rb
+++ b/app/helpers/admin/action_logs_helper.rb
@@ -33,7 +33,7 @@ module Admin::ActionLogsHelper
when 'DomainBlock', 'EmailDomainBlock'
link_to attributes['domain'], "https://#{attributes['domain']}"
when 'Status'
- tmp_status = Status.new(attributes)
+ tmp_status = Status.new(attributes.except('reblogs_count', 'favourites_count'))
if tmp_status.account
link_to tmp_status.account&.acct || "##{tmp_status.account_id}", admin_account_path(tmp_status.account_id)
else
From 42573b76f1ed4ec64a961441b14631c341b752b4 Mon Sep 17 00:00:00 2001
From: ThibG
Date: Thu, 23 Aug 2018 00:27:58 +0200
Subject: [PATCH 145/196] Do not crash if remote custom emoji does not define
updated date (fixes #8376) (#8377)
---
app/lib/activitypub/activity/create.rb | 2 +-
app/services/activitypub/process_account_service.rb | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb
index 00479fd9a..79efc95d3 100644
--- a/app/lib/activitypub/activity/create.rb
+++ b/app/lib/activitypub/activity/create.rb
@@ -107,7 +107,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
updated = tag['updated']
emoji = CustomEmoji.find_by(shortcode: shortcode, domain: @account.domain)
- return unless emoji.nil? || emoji.updated_at >= updated
+ return unless emoji.nil? || image_url != emoji.image_remote_url || (updated && emoji.updated_at >= updated)
emoji ||= CustomEmoji.new(domain: @account.domain, shortcode: shortcode, uri: uri)
emoji.image_remote_url = image_url
diff --git a/app/services/activitypub/process_account_service.rb b/app/services/activitypub/process_account_service.rb
index 7f95678b0..ac19bf933 100644
--- a/app/services/activitypub/process_account_service.rb
+++ b/app/services/activitypub/process_account_service.rb
@@ -226,7 +226,7 @@ class ActivityPub::ProcessAccountService < BaseService
updated = tag['updated']
emoji = CustomEmoji.find_by(shortcode: shortcode, domain: @account.domain)
- return unless emoji.nil? || emoji.updated_at >= updated
+ return unless emoji.nil? || image_url != emoji.image_remote_url || (updated && emoji.updated_at >= updated)
emoji ||= CustomEmoji.new(domain: @account.domain, shortcode: shortcode, uri: uri)
emoji.image_remote_url = image_url
From 3cf0cc74351f406bc179ec9f4f325ce7952def53 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marcin=20Miko=C5=82ajczak?=
Date: Thu, 23 Aug 2018 00:28:23 +0200
Subject: [PATCH 146/196] i18n: Update Polish translation (#8378)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Marcin Mikołajczak
---
config/locales/pl.yml | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/config/locales/pl.yml b/config/locales/pl.yml
index 7047efd1d..e844df699 100644
--- a/config/locales/pl.yml
+++ b/config/locales/pl.yml
@@ -30,10 +30,14 @@ pl:
other_instances: Lista instancji
privacy_policy: Polityka prywatności
source_code: Kod źródłowy
- status_count_after: wpisów
+ status_count_after:
+ one: wpisu
+ other: wpisów
status_count_before: Są autorami
terms: Zasady użytkowania
- user_count_after: użytkowników
+ user_count_after:
+ one: użytkownik
+ other: użytkowników
user_count_before: Z serwera korzysta
what_is_mastodon: Czym jest Mastodon?
accounts:
@@ -413,6 +417,12 @@ pl:
last_delivery: Ostatnio doręczono
title: WebSub
topic: Temat
+ suspensions:
+ bad_acct_msg: Zawartość potwierdzenia nie zgadza się. Czy próbujesz zawiesić właściwe konto?
+ hint_html: 'Aby potwierdzić zawieszenie konta, wprowadź %{value} w poniższe pole:'
+ proceed: Przejdź
+ title: Zawieś %{acct}
+ warning_html: 'Zawieszenie konta będzie skutkowało nieodwracalnym usunięciem danych z tego konta, wliczając:'
title: Administracja
admin_mailer:
new_report:
From b48e67fe1d6a5b651a4fae961f9323b4feca72e6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marcin=20Miko=C5=82ajczak?=
Date: Thu, 23 Aug 2018 12:06:02 +0200
Subject: [PATCH 147/196] i18n: fix Polish translation (#8380)
---
config/locales/pl.yml | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/config/locales/pl.yml b/config/locales/pl.yml
index e844df699..236b9d897 100644
--- a/config/locales/pl.yml
+++ b/config/locales/pl.yml
@@ -31,13 +31,15 @@ pl:
privacy_policy: Polityka prywatności
source_code: Kod źródłowy
status_count_after:
+ few: wpisów
+ many: wpisów
one: wpisu
- other: wpisów
status_count_before: Są autorami
terms: Zasady użytkowania
user_count_after:
+ few: użytkowników
+ many: użytkowników
one: użytkownik
- other: użytkowników
user_count_before: Z serwera korzysta
what_is_mastodon: Czym jest Mastodon?
accounts:
From d1c2c917d9685879d9c5cd203e416a8ef796f1e1 Mon Sep 17 00:00:00 2001
From: Sylvhem
Date: Thu, 23 Aug 2018 12:43:03 +0200
Subject: [PATCH 148/196] Major update for the French translation (#8348)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* Corrige la traduction des filtres
Corrige les erreurs de traduction présentes sur l’écran de contrôle des filtres.
Fix the translation mistakes made on the filters' control screen.
* Remplace « malvoyants » par « malvoyant·e·s »
Harmonise la traduction en remplaçant « malvoyants » par sa forme épicène.
Harmonize the translation by replacing "malvoyants" (visually impaired) by its epicene form.
* Remplace « interface-utilisateur » par « interface utilisateur·ice »
Corrige une erreur d’orthographe et harmonise la traduction en utilisant la forme épicène.
Fix a spelling mistake and harmonize the translation by using the epicen form.
* Traduction de chaînes manquantes
Traduits des chaînes manquantes.
Translate missing strings.
* Diverses corrections
Diverses corrections concernant l’orthographe, les formulations employées et les conventions utilisées.
Various fix regarding spelling, used wordings and used conventions.
* Remplace « ' » par « ’ »
Retire de la traduction les apostrophes droites « ' » (U+0027) au profit des apostrophes typographiques « ’ » (U+2019).
En typographie française, les apostrophes typographiques sont utilisées à la place des apostrophes droites. La traduction était jusqu’ici incohérente et utilisait les deux.
Remove from the translation all the vertical apostrophes (U+0027) in favor of the curly ones (U+2019).
In French typography, typographic apostrophes are used instead of vertical ones. The translation was incoherent and used both.
* Remplace « ... » par « … »
Remplace les séries de trois points par le caractère dédié « … » (U+2026).
Replace all the series of three dots by the dedicated character "…" (U+2026).
* Ajout d’espaces insécables
Ajoute des espaces insécables suivant les régles nécessaires en typographie française.
Add non-breaking spaces following rules of French typography.
* Traduction de la nouvelle politique de confidentialité
Traduction de la nouvelle politique de confidentalité.
Translation of the new privacy policy.
* Modifications basées sur les retours
Modifie la traduction en se basant sur les premiers retours. Diverses corrections orthographiques et typographiques.
Fix the translation based on feedback. Various modifications both on spelling and typography.
* Change « non-listé » en « non listé »
Renome le niveau de confidentialité en « non listé ».
Rename the confidentiality level to "non listé".
* Modifications basées sur les retours
Modifie la traduction en se basant sur les premiers retours. Diverses corrections orthographiques et typographiques.
Fix the translation based on feedback. Various modifications both on spelling and typography.
* i18n-tasks normalize
---
app/javascript/mastodon/locales/fr.json | 48 ++--
config/locales/devise.fr.yml | 22 +-
config/locales/doorkeeper.fr.yml | 12 +-
config/locales/fr.yml | 293 ++++++++++++++++--------
config/locales/simple_form.fr.yml | 26 +--
5 files changed, 252 insertions(+), 149 deletions(-)
diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json
index 79ce01c05..835b1af65 100644
--- a/app/javascript/mastodon/locales/fr.json
+++ b/app/javascript/mastodon/locales/fr.json
@@ -22,7 +22,7 @@
"account.posts": "Pouets",
"account.posts_with_replies": "Pouets et réponses",
"account.report": "Signaler",
- "account.requested": "En attente d'approbation. Cliquez pour annuler la requête",
+ "account.requested": "En attente d’approbation. Cliquez pour annuler la requête",
"account.share": "Partager le profil de @{name}",
"account.show_reblogs": "Afficher les partages de @{name}",
"account.unblock": "Débloquer",
@@ -32,7 +32,7 @@
"account.unmute": "Ne plus masquer",
"account.unmute_notifications": "Réactiver les notifications de @{name}",
"account.view_full_profile": "Afficher le profil complet",
- "alert.unexpected.message": "Une erreur non-attendue s'est produite.",
+ "alert.unexpected.message": "Une erreur non attendue s’est produite.",
"alert.unexpected.title": "Oups !",
"boost_modal.combo": "Vous pouvez appuyer sur {combo} pour pouvoir passer ceci, la prochaine fois",
"bundle_column_error.body": "Une erreur s’est produite lors du chargement de ce composant.",
@@ -62,9 +62,9 @@
"column_header.unpin": "Retirer",
"column_subheading.settings": "Paramètres",
"community.column_settings.media_only": "Média uniquement",
- "compose_form.direct_message_warning": "Ce pouet sera uniquement envoyé qu'aux personnes mentionnées. Cependant, l'administration de votre instance et des instances réceptrices pourront inspecter ce message.",
+ "compose_form.direct_message_warning": "Ce pouet sera uniquement envoyé aux personnes mentionnées. Cependant, l’administration de votre instance et des instances réceptrices pourront inspecter ce message.",
"compose_form.direct_message_warning_learn_more": "En savoir plus",
- "compose_form.hashtag_warning": "Ce pouet ne sera pas listé dans les recherches par hashtag car sa visibilité est réglée sur \"non-listé\". Seuls les pouets avec une visibilité \"publique\" peuvent être recherchés par hashtag.",
+ "compose_form.hashtag_warning": "Ce pouet ne sera pas listé dans les recherches par hashtag car sa visibilité est réglée sur \"non listé\". Seuls les pouets avec une visibilité \"publique\" peuvent être recherchés par hashtag.",
"compose_form.lock_disclaimer": "Votre compte n’est pas {locked}. Tout le monde peut vous suivre et voir vos pouets privés.",
"compose_form.lock_disclaimer.lock": "verrouillé",
"compose_form.placeholder": "Qu’avez-vous en tête ?",
@@ -73,7 +73,7 @@
"compose_form.sensitive.marked": "Média marqué comme sensible",
"compose_form.sensitive.unmarked": "Média non marqué comme sensible",
"compose_form.spoiler.marked": "Le texte est caché derrière un avertissement",
- "compose_form.spoiler.unmarked": "Le texte n'est pas caché",
+ "compose_form.spoiler.unmarked": "Le texte n’est pas caché",
"compose_form.spoiler_placeholder": "Écrivez ici votre avertissement",
"confirmation_modal.cancel": "Annuler",
"confirmations.block.confirm": "Bloquer",
@@ -83,11 +83,11 @@
"confirmations.delete_list.confirm": "Supprimer",
"confirmations.delete_list.message": "Êtes-vous sûr de vouloir supprimer définitivement cette liste ?",
"confirmations.domain_block.confirm": "Masquer le domaine entier",
- "confirmations.domain_block.message": "Êtes-vous vraiment, vraiment sûr⋅e de vouloir bloquer {domain} en entier ? Dans la plupart des cas, quelques blocages ou masquages ciblés sont suffisants et préférables. Vous ne verrez plus de contenu provenant de ce domaine ni dans vos lignes de temps publiques, ni dans vos notifications. Vos suiveurs utilisant ce domaine seront retirés.",
+ "confirmations.domain_block.message": "Êtes-vous vraiment, vraiment sûr⋅e de vouloir bloquer {domain} en entier ? Dans la plupart des cas, quelques blocages ou masquages ciblés sont suffisants et préférables. Vous ne verrez plus de contenu provenant de ce domaine, ni dans fils publics, ni dans vos notifications. Vos abonné·e·s utilisant ce domaine seront retiré·e·s.",
"confirmations.mute.confirm": "Masquer",
"confirmations.mute.message": "Confirmez-vous le masquage de {name} ?",
"confirmations.redraft.confirm": "Effacer et ré-écrire",
- "confirmations.redraft.message": "Êtes vous sûr de vouloir effacer ce statut pour le ré-écrire ? Vous perdrez toutes ses réponses, ses repartages et ses mises en favori.",
+ "confirmations.redraft.message": "Êtes-vous sûr·e de vouloir effacer ce statut pour le ré-écrire ? Vous perdrez toutes ses réponses, ses repartages et ses mises en favori.",
"confirmations.unfollow.confirm": "Ne plus suivre",
"confirmations.unfollow.message": "Voulez-vous arrêter de suivre {name} ?",
"embed.instructions": "Intégrez ce statut à votre site en copiant le code ci-dessous.",
@@ -98,7 +98,7 @@
"emoji_button.food": "Nourriture & Boisson",
"emoji_button.label": "Insérer un émoji",
"emoji_button.nature": "Nature",
- "emoji_button.not_found": "Pas d'emojis !! (╯°□°)╯︵ ┻━┻",
+ "emoji_button.not_found": "Pas d’émoji !! (╯°□°)╯︵ ┻━┻",
"emoji_button.objects": "Objets",
"emoji_button.people": "Personnages",
"emoji_button.recent": "Fréquemment utilisés",
@@ -107,11 +107,11 @@
"emoji_button.symbols": "Symboles",
"emoji_button.travel": "Lieux & Voyages",
"empty_column.community": "Le fil public local est vide. Écrivez donc quelque chose pour le remplir !",
- "empty_column.direct": "Vous n'avez pas encore de messages directs. Lorsque vous en enverrez ou recevrez un, il s'affichera ici.",
+ "empty_column.direct": "Vous n’avez pas encore de messages directs. Lorsque vous en enverrez ou recevrez un, il s’affichera ici.",
"empty_column.hashtag": "Il n’y a encore aucun contenu associé à ce hashtag.",
"empty_column.home": "Vous ne suivez personne. Visitez {public} ou utilisez la recherche pour trouver d’autres personnes à suivre.",
"empty_column.home.public_timeline": "le fil public",
- "empty_column.list": "Il n'y a rien dans cette liste pour l'instant. Dès que des personnes de cette liste publierons de nouveaux statuts, ils apparaîtront ici.",
+ "empty_column.list": "Il n’y a rien dans cette liste pour l’instant. Dès que des personnes de cette liste publieront de nouveaux statuts, ils apparaîtront ici.",
"empty_column.notifications": "Vous n’avez pas encore de notification. Interagissez avec d’autres personnes pour débuter la conversation.",
"empty_column.public": "Il n’y a rien ici ! Écrivez quelque chose publiquement, ou bien suivez manuellement des personnes d’autres instances pour remplir le fil public",
"follow_request.authorize": "Accepter",
@@ -129,7 +129,7 @@
"home.column_settings.show_replies": "Afficher les réponses",
"keyboard_shortcuts.back": "revenir en arrière",
"keyboard_shortcuts.boost": "partager",
- "keyboard_shortcuts.column": "focaliser un statut dans l'une des colonnes",
+ "keyboard_shortcuts.column": "focaliser un statut dans l’une des colonnes",
"keyboard_shortcuts.compose": "pour centrer la zone de rédaction",
"keyboard_shortcuts.description": "Description",
"keyboard_shortcuts.down": "pour descendre dans la liste",
@@ -138,8 +138,8 @@
"keyboard_shortcuts.heading": "Raccourcis clavier",
"keyboard_shortcuts.hotkey": "Raccourci",
"keyboard_shortcuts.legend": "pour afficher cette légende",
- "keyboard_shortcuts.mention": "pour mentionner l'auteur",
- "keyboard_shortcuts.profile": "pour ouvrir le profil de l'auteur",
+ "keyboard_shortcuts.mention": "pour mentionner l’auteur·rice",
+ "keyboard_shortcuts.profile": "pour ouvrir le profil de l’auteur·rice",
"keyboard_shortcuts.reply": "pour répondre",
"keyboard_shortcuts.search": "pour cibler la recherche",
"keyboard_shortcuts.toggle_hidden": "pour afficher/cacher un texte derrière CW",
@@ -202,12 +202,12 @@
"onboarding.next": "Suivant",
"onboarding.page_five.public_timelines": "Le fil public global affiche les messages de toutes les personnes suivies par les membres de {domain}. Le fil public local est identique, mais se limite aux membres de {domain}.",
"onboarding.page_four.home": "L’accueil affiche les messages des personnes que vous suivez.",
- "onboarding.page_four.notifications": "La colonne de notification vous avertit lors d'une interaction avec vous.",
+ "onboarding.page_four.notifications": "La colonne de notification vous avertit lors d’une interaction avec vous.",
"onboarding.page_one.federation": "Mastodon est un réseau de serveurs indépendants qui se joignent pour former un réseau social plus vaste. Nous appelons ces serveurs des instances.",
"onboarding.page_one.full_handle": "Votre identifiant complet",
- "onboarding.page_one.handle_hint": "C'est ce que vos amis devront rechercher.",
+ "onboarding.page_one.handle_hint": "C’est ce que vos ami·e·s devront rechercher.",
"onboarding.page_one.welcome": "Bienvenue sur Mastodon !",
- "onboarding.page_six.admin": "L’administrateur⋅ice de votre instance est {admin}.",
+ "onboarding.page_six.admin": "Votre instance est administrée par {admin}.",
"onboarding.page_six.almost_done": "Nous y sommes presque…",
"onboarding.page_six.appetoot": "Bon appouétit !",
"onboarding.page_six.apps_available": "De nombreuses {apps} sont disponibles pour iOS, Android et autres.",
@@ -220,14 +220,14 @@
"onboarding.page_two.compose": "Écrivez depuis la colonne de composition. Vous pouvez ajouter des images, changer les réglages de confidentialité, et ajouter des avertissements de contenu (Content Warning) grâce aux icônes en dessous.",
"onboarding.skip": "Passer",
"privacy.change": "Ajuster la confidentialité du message",
- "privacy.direct.long": "N'envoyer qu'aux personnes mentionnées",
+ "privacy.direct.long": "N’envoyer qu’aux personnes mentionnées",
"privacy.direct.short": "Direct",
"privacy.private.long": "Seul⋅e⋅s vos abonné⋅e⋅s verront vos statuts",
"privacy.private.short": "Abonné⋅e⋅s uniquement",
"privacy.public.long": "Afficher dans les fils publics",
"privacy.public.short": "Public",
"privacy.unlisted.long": "Ne pas afficher dans les fils publics",
- "privacy.unlisted.short": "Non-listé",
+ "privacy.unlisted.short": "Non listé",
"regeneration_indicator.label": "Chargement…",
"regeneration_indicator.sublabel": "Le flux de votre page principale est en cours de préparation !",
"relative_time.days": "{number} j",
@@ -237,8 +237,8 @@
"relative_time.seconds": "{number} s",
"reply_indicator.cancel": "Annuler",
"report.forward": "Transférer à {target}",
- "report.forward_hint": "Le compte provient d'un autre serveur. Envoyez également une copie anonyme du rapport ?",
- "report.hint": "Le rapport sera envoyé aux modérateurs de votre instance. Vous pouvez expliquer pourquoi vous signalez le compte ci-dessous :",
+ "report.forward_hint": "Le compte provient d’un autre serveur. Envoyez également une copie anonyme du rapport ?",
+ "report.hint": "Le rapport sera envoyé aux modérateur·rice·s de votre instance. Vous pouvez expliquer pourquoi vous signalez le compte ci-dessous :",
"report.placeholder": "Commentaires additionnels",
"report.submit": "Envoyer",
"report.target": "Signalement",
@@ -272,7 +272,7 @@
"status.pin": "Épingler sur le profil",
"status.pinned": "Pouet épinglé",
"status.reblog": "Partager",
- "status.reblog_private": "Booster vers l'audience originale",
+ "status.reblog_private": "Booster vers l’audience originale",
"status.reblogged_by": "{name} a partagé :",
"status.redraft": "Effacer et ré-écrire",
"status.reply": "Répondre",
@@ -292,16 +292,16 @@
"tabs_bar.local_timeline": "Fil public local",
"tabs_bar.notifications": "Notifications",
"tabs_bar.search": "Chercher",
- "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} discutent",
+ "trends.count_by_accounts": "{count} {rawCount, plural, one {personne} other {personnes}} discutent",
"ui.beforeunload": "Votre brouillon sera perdu si vous quittez Mastodon.",
"upload_area.title": "Glissez et déposez pour envoyer",
"upload_button.label": "Joindre un média",
- "upload_form.description": "Décrire pour les malvoyants",
+ "upload_form.description": "Décrire pour les malvoyant·e·s",
"upload_form.focus": "Recadrer",
"upload_form.undo": "Supprimer",
"upload_progress.label": "Envoi en cours…",
"video.close": "Fermer la vidéo",
- "video.exit_fullscreen": "Quitter plein écran",
+ "video.exit_fullscreen": "Quitter le plein écran",
"video.expand": "Agrandir la vidéo",
"video.fullscreen": "Plein écran",
"video.hide": "Masquer la vidéo",
diff --git a/config/locales/devise.fr.yml b/config/locales/devise.fr.yml
index 7e10f83b4..e9c98a63f 100644
--- a/config/locales/devise.fr.yml
+++ b/config/locales/devise.fr.yml
@@ -17,30 +17,30 @@ fr:
unconfirmed: Vous devez valider votre compte pour continuer.
mailer:
confirmation_instructions:
- action: Vérifier l'adresse courriel
- explanation: Vous avez créé un compte sur %{host} avec cette adresse courriel. Vous êtes à un clic de l'activer. Si ce n'était pas vous, veuillez ignorer ce courriel.
- extra_html: S'il vous plaît, consultez également 1les règles de l'instance 2 et 3nos termes de service 4.
+ action: Vérifier l’adresse courriel
+ explanation: Vous avez créé un compte sur %{host} avec cette adresse courriel. Vous êtes à un clic de l’activer. Si ce n’était pas vous, veuillez ignorer ce courriel.
+ extra_html: Merci de consultez également les règles de l’instance et nos conditions d’utilisation .
subject: Merci de confirmer votre inscription sur %{instance}
- title: Vérifier l'adresse courriel
+ title: Vérifier l’adresse courriel
email_changed:
- explanation: 'L''adresse courriel de votre compte est en cours de modification pour devenir :'
- extra: Si vous n'avez pas changé votre adresse courriel, il est probable que quelqu'un ait eu accès à votre compte. Veuillez changer votre mot de passe immédiatement ou contacter l'administrateur de l'instance si vous êtes bloqué hors de votre compte.
+ explanation: 'L’adresse courriel de votre compte est en cours de modification pour devenir :'
+ extra: Si vous n’avez pas changé votre adresse courriel, il est probable que quelqu’un ait eu accès à votre compte. Veuillez changer votre mot de passe immédiatement ou contacter l’administrateur·rice de l’instance si vous êtes bloqué·e hors de votre compte.
subject: 'Mastodon : Courriel modifié'
title: Nouvelle adresse courriel
password_change:
explanation: Le mot de passe de votre compte a été changé.
- extra: Si vous n'avez pas changé votre mot de passe, il est probable que quelqu'un ait eu accès à votre compte. Veuillez changer votre mot de passe immédiatement ou contacter l'administrateur de l'instance si vous êtes bloqué hors de votre compte.
+ extra: Si vous n’avez pas changé votre mot de passe, il est probable que quelqu’un ait eu accès à votre compte. Veuillez changer votre mot de passe immédiatement ou contacter l’administrateur·rice de l’instance si vous êtes bloqué·e hors de votre compte.
subject: Votre mot de passe a été modifié avec succès
title: Mot de passe modifié
reconfirmation_instructions:
explanation: Confirmez la nouvelle adresse pour changer votre courriel.
- extra: Si ce changement n' a pas été initié par vous, veuillez ignorer ce courriel. L'adresse courriel du compte Mastodon ne changera pas tant que vous n'aurez pas cliqué sur le lien ci-dessus.
- subject: 'Mastodon : Confirmez l''email pour %{instance}'
- title: Vérifier l'adresse courriel
+ extra: Si ce changement n’a pas été initié par vous, veuillez ignorer ce courriel. L’adresse courriel du compte Mastodon ne changera pas tant que vous n’aurez pas cliqué sur le lien ci-dessus.
+ subject: 'Mastodon : Confirmez l’adresse pour %{instance}'
+ title: Vérifier l’adresse courriel
reset_password_instructions:
action: Modifier le mot de passe
explanation: Vous avez demandé un nouveau mot de passe pour votre compte.
- extra: Si vous ne l'avez pas demandé, veuillez ignorer ce courriel. Votre mot de passe ne changera pas tant que vous n'aurez pas cliqué sur le lien ci-dessus et que vous n'en aurez pas créé un nouveau.
+ extra: Si vous ne l’avez pas demandé, veuillez ignorer ce courriel. Votre mot de passe ne changera pas tant que vous n’aurez pas cliqué sur le lien ci-dessus et que vous n’en aurez pas créé un nouveau.
subject: Instructions pour changer votre mot de passe
title: Réinitialisation du mot de passe
unlock_instructions:
diff --git a/config/locales/doorkeeper.fr.yml b/config/locales/doorkeeper.fr.yml
index e8668ba82..eae691659 100644
--- a/config/locales/doorkeeper.fr.yml
+++ b/config/locales/doorkeeper.fr.yml
@@ -7,7 +7,7 @@ fr:
redirect_uri: L’URL de redirection
scope: Portée
scopes: Étendues
- website: Site web de l'application
+ website: Site web de l’application
errors:
models:
doorkeeper/application:
@@ -64,7 +64,7 @@ fr:
prompt: Autoriser %{client_name} à utiliser votre compte ?
title: Autorisation requise
show:
- title: Copiez ce code d'autorisation et collez-le dans l'application.
+ title: Copiez ce code d’autorisation et collez-le dans l’application.
authorized_applications:
buttons:
revoke: Annuler
@@ -119,12 +119,12 @@ fr:
push: recevoir vos notifications
read: lire toutes les données de votre compte
read:accounts: voir les informations du compte
- read:blocks: voir vos bloqués
+ read:blocks: voir vos bloquages
read:favourites: voir vos favoris
read:filters: voir vos filtres
read:follows: voir vos suivis
read:lists: voir vos listes
- read:mutes: voir vos silenciés
+ read:mutes: voir vos masquages
read:notifications: voir vos notifications
read:reports: voir vos rapports
read:search: rechercher en votre nom
@@ -137,7 +137,7 @@ fr:
write:follows: suivre les gens
write:lists: créer des listes
write:media: téléverser des fichiers-média
- write:mutes: silencier des gens et des conversations
+ write:mutes: masquer des gens et des conversations
write:notifications: nettoyer vos notifications
- write:reports: rapporter d'autres personnes
+ write:reports: rapporter d’autres personnes
write:statuses: publier des statuts
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index b563405bd..cf8ceb247 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -4,7 +4,7 @@ fr:
about_hashtag_html: Figurent ci-dessous les pouets tagués avec #%{hashtag} . Vous pouvez interagir avec eux si vous avez un compte n’importe où dans le Fediverse.
about_mastodon_html: Mastodon est un réseau social utilisant des formats ouverts et des logiciels libres. Comme le courriel, il est décentralisé.
about_this: À propos
- administered_by: 'Administré par :'
+ administered_by: 'Administrée par :'
api: API
apps: Applications mobiles
closed_registrations: Les inscriptions sont actuellement fermées sur cette instance. Cependant, vous pouvez trouver une autre instance sur laquelle vous créer un compte et à partir de laquelle vous pourrez accéder au même réseau.
@@ -20,7 +20,7 @@ fr:
humane_approach_title: Une approche plus humaine
not_a_product_body: Mastodon n’est pas un réseau commercial. Ici, pas de publicités, pas de prospection de données et pas d’environnements fermés. Il n’y existe aucune autorité centrale.
not_a_product_title: Vous êtes une personne, pas un produit
- real_conversation_body: Avec 500 caractères à votre disposition, une grande granularité en termes de diffusion et la possibilité de masquer vos messages derrières des avertissements, vous êtes libre de vous exprimer de la manière qui vous plaît.
+ real_conversation_body: Avec 500 caractères à votre disposition, une grande granularité en termes de diffusion et la possibilité de masquer vos messages derrière des avertissements, vous êtes libre de vous exprimer de la manière qui vous plaît.
real_conversation_title: Construit pour de vraies conversations
within_reach_body: Grâce à l’existence d’un environnement API accueillant pour les développeur·se·s, de multiples applications pour iOS, Android et d’autres plateformes vous permettent de rester en contact avec vos ami·e·s où que vous soyez.
within_reach_title: Toujours à portée de main
@@ -37,16 +37,19 @@ fr:
user_count_before: Abrite
what_is_mastodon: Qu’est-ce que Mastodon ?
accounts:
- choices_html: 'Sélection de %{name} :'
+ choices_html: "%{name} recommande :"
follow: Suivre
followers: Abonné⋅e⋅s
following: Abonnements
+ joined: Inscrit·e en %{date}
media: Médias
- moved_html: "%{name} a changé de compte pour %{new_profile_link} :"
+ moved_html: "%{name} a changé de compte pour %{new_profile_link} :"
network_hidden: Cette information n’est pas disponible
nothing_here: Rien à voir ici !
people_followed_by: Personnes suivies par %{name}
people_who_follow: Personnes qui suivent %{name}
+ pin_errors:
+ following: Vous devez être déjà abonné·e à la personne que vous désirez recommander
posts: Statuts
posts_with_replies: Statuts & réponses
reserved_username: Ce nom d’utilisateur⋅ice est réservé
@@ -66,7 +69,7 @@ fr:
avatar: Avatar
by_domain: Domaine
change_email:
- changed_msg: Courriel du compte modifié avec succès !
+ changed_msg: Courriel du compte modifié avec succès !
current_email: Courriel actuel
label: Modifier le courriel
new_email: Nouveau courriel
@@ -121,11 +124,11 @@ fr:
public: Publique
push_subscription_expires: Expiration de l’abonnement PuSH
redownload: Rafraîchir les avatars
- remove_avatar: Supprimer l'avatar
+ remove_avatar: Supprimer l’avatar
resend_confirmation:
- already_confirmed: Cet utilisateur est déjà confirmé
+ already_confirmed: Cet·te utilisateur·ice est déjà confirmé·e
send: Renvoyer un courriel de confirmation
- success: Email de confirmation envoyé avec succès !
+ success: Courriel de confirmation envoyé avec succès !
reset: Réinitialiser
reset_password: Réinitialiser le mot de passe
resubscribe: Se réabonner
@@ -154,35 +157,36 @@ fr:
web: Web
action_logs:
actions:
- assigned_to_self_report: "%{name} s'est assigné le signalement de %{target} à eux-même"
- change_email_user: "%{name} a modifié l'adresse de courriel de l'utilisateur %{target}"
- confirm_user: "%{name} adresse courriel confirmée de l'utilisateur %{target}"
- create_custom_emoji: "%{name} a importé de nouveaux emoji %{target}"
+ assigned_to_self_report: "%{name} s’est assigné·e le signalement de %{target}"
+ change_email_user: "%{name} a modifié l’adresse de courriel de l’utilisateur·rice %{target}"
+ confirm_user: "%{name} adresse courriel confirmée de l’utilisateur·ice %{target}"
+ create_custom_emoji: "%{name} a importé de nouveaux émojis %{target}"
create_domain_block: "%{name} a bloqué le domaine %{target}"
create_email_domain_block: "%{name} a mis le domaine du courriel %{target} sur liste noire"
- demote_user: "%{name} a rétrogradé l'utilisateur %{target}"
+ demote_user: "%{name} a rétrogradé l’utilisateur·ice %{target}"
destroy_domain_block: "%{name} a débloqué le domaine %{target}"
destroy_email_domain_block: "%{name} a mis le domaine du courriel %{target} sur liste blanche"
destroy_status: "%{name} a enlevé le statut de %{target}"
- disable_2fa_user: "%{name} a désactivé l'authentification à deux facteurs pour l'utilisateur %{target}"
- disable_custom_emoji: "%{name} a désactivé l'emoji %{target}"
- disable_user: "%{name} a désactivé le login pour l'utilisateur %{target}"
- enable_custom_emoji: "%{name} a activé l'emoji %{target}"
- enable_user: "%{name} a activé le login pour l'utilisateur %{target}"
+ disable_2fa_user: "%{name} a désactivé l’authentification à deux facteurs pour l’utilisateur·ice %{target}"
+ disable_custom_emoji: "%{name} a désactivé l’émoji %{target}"
+ disable_user: "%{name} a désactivé le login pour l’utilisateur·ice %{target}"
+ enable_custom_emoji: "%{name} a activé l’émoji %{target}"
+ enable_user: "%{name} a activé le login pour l’utilisateur·ice %{target}"
memorialize_account: "%{name} a transformé le compte de %{target} en une page de mémorial"
- promote_user: "%{name} a promu l'utilisateur %{target}"
- remove_avatar_user: "%{name} a supprimé l'avatar de %{target}'s"
- reopen_report: "%{name} a ré-ouvert le signalement %{target}"
+ promote_user: "%{name} a promu l’utilisateur·ice %{target}"
+ remove_avatar_user: "%{name} a supprimé l’avatar de %{target}"
+ reopen_report: "%{name} a rouvert le signalement %{target}"
reset_password_user: "%{name} a réinitialisé le mot de passe de %{target}"
resolve_report: "%{name} a résolu la dénonciation de %{target}"
silence_account: "%{name} a mis le compte %{target} en mode silence"
suspend_account: "%{name} a suspendu le compte %{target}"
- unassigned_report: "%{name} a dés-assigné le signalement %{target}"
+ unassigned_report: "%{name} a désassigné le signalement %{target}"
unsilence_account: "%{name} a mis fin au mode silence de %{target}"
unsuspend_account: "%{name} a réactivé le compte de %{target}"
- update_custom_emoji: "%{name} a mis à jour l'emoji %{target}"
+ update_custom_emoji: "%{name} a mis à jour l’émoji %{target}"
update_status: "%{name} a mis à jour le statut de %{target}"
- title: Journal d'audit
+ deleted_status: "(statut supprimé)"
+ title: Journal d’audit
custom_emojis:
by_domain: Domaine
copied_msg: Copie locale de l’émoji créée avec succès !
@@ -203,29 +207,32 @@ fr:
overwrite: Réécrire
shortcode: Raccourci
shortcode_hint: Au moins deux caractères, seulement des caractères alphanumériques ou des tirets bas
- title: Émoji personnalisés
+ title: Émojis personnalisés
unlisted: Délisté
- update_failed_msg: N'a pas pu mettre à jour cet emoji
- updated_msg: Emoji mis à jour avec succès !
+ update_failed_msg: N’a pas pu mettre à jour cet émoji
+ updated_msg: Émoji mis à jour avec succès !
upload: Téléverser
dashboard:
+ backlog: tâches en attente
config: Configuration
- feature_invites: Liens d'invitation
+ feature_deletions: Suppressions de comptes
+ feature_invites: Liens d’invitation
feature_registrations: Inscriptions
feature_relay: Relais de fédération
features: Fonctionnalités
hidden_service: Fédération avec des services cachés
- recent_users: Utilisateurs récents
- search: Recherche texte-plein
- single_user_mode: Mode utilisateur unique
+ open_reports: signalements non résolus
+ recent_users: Utilisateur·rice·s récent·e·s
+ search: Recherche plein texte
+ single_user_mode: Mode utilisateur·ice unique
software: Logiciel
- space: Utilisation d'espace
+ space: Espace utilisé
title: Tableau de bord
- total_users: utilisateurs au total
+ total_users: utilisateur·rice·s au total
trends: Tendances
week_interactions: interactions cette semaine
- week_users_active: actif cette semaine
- week_users_new: utilisateurs cette semaine
+ week_users_active: actif·ve·s cette semaine
+ week_users_new: utilisateur·rice·s cette semaine
domain_blocks:
add_new: Ajouter
created_msg: Le blocage de domaine est désormais activé
@@ -284,20 +291,22 @@ fr:
title: Invitations
relays:
add_new: Ajouter un nouveau relais
+ description_html: Un relai de fédération est un serveur intermédiaire qui échange de grandes quantités de pouets entre les serveurs qui publient dessus et ceux qui y sont abonnés. Il peut aider les petites et moyennes instances à découvrir du contenu sur le fediverse , ce qui normalement nécessiterait que les membres locaux suivent des gens inscrits sur des serveurs distants.
+ enable_hint: Une fois activé, votre serveur souscrira à tous les pouets publics présents sur ce relais et y enverra ses propres pouets publics.
inbox_url: URL de relais
setup: Paramétrer une connexion de relais
status: Statut
title: Relais
report_notes:
- created_msg: Note de signalement créée avec succès !
- destroyed_msg: Note de signalement effacée avec succès !
+ created_msg: Note de signalement créée avec succès !
+ destroyed_msg: Note de signalement effacée avec succès !
reports:
account:
note: note
report: signaler
action_taken_by: Intervention de
are_you_sure: Êtes vous certain⋅e ?
- assign_to_self: Me l'assigner
+ assign_to_self: Me l’assigner
assigned: Modérateur assigné
comment:
none: Aucun
@@ -317,7 +326,7 @@ fr:
reported_account: Compte signalé
reported_by: Signalé par
resolved: Résolus
- resolved_msg: Signalement résolu avec succès !
+ resolved_msg: Signalement résolu avec succès !
silence_account: Masquer le compte
status: Statut
suspend_account: Suspendre le compte
@@ -329,20 +338,23 @@ fr:
view: Voir
settings:
activity_api_enabled:
- desc_html: Nombre de statuts affichés localement, d'utilisateurs actifs et de nouveaux enregistrements dans les registres hebdomadaires
- title: Publier des statistiques agrégées sur l'activité des utilisateurs
+ desc_html: Nombre de statuts affichés localement, d’utilisateur·ice·s actif·ve·s et de nouveaux enregistrements dans les registres hebdomadaires
+ title: Publier des statistiques agrégées sur l’activité des utilisateur·ice·s
bootstrap_timeline_accounts:
- desc_html: Séparez les noms d’utilisateur·ice par des virgules. Ne fonctionne qu’avec des comptes locaux et non-verrouillés. Si laissé vide, tous les administrateur⋅ice⋅s locaux sont sélectionné⋅e⋅s.
+ desc_html: Séparez les noms d’utilisateur·ice par des virgules. Ne fonctionne qu’avec des comptes locaux et non verrouillés. Si laissé vide, tous les administrateur⋅ice⋅s locaux sont sélectionné⋅e⋅s.
title: Abonnements par défaut pour les nouveaux·elles utilisateur·ice·s
contact_information:
email: Entrez une adresse courriel publique
username: Entrez un nom d’utilisateur⋅ice
hero:
- desc_html: Affichée sur la page d'accueil. Au moins 600x100px recommandé. Lorsqu'elle n'est pas définie, se rabat sur la vignette de l'instance
- title: Image d'en-tête
+ desc_html: Affichée sur la page d’accueil. Au moins 600x100px recommandé. Lorsqu’elle n’est pas définie, se rabat sur la vignette de l’instance
+ title: Image d’en-tête
peers_api_enabled:
desc_html: Noms des domaines que cette instance a découvert dans le fediverse
title: Publier la liste des instances découvertes
+ preview_sensitive_media:
+ desc_html: Les liens de prévisualisation sur les autres sites web afficheront une vignette même si le média est sensible
+ title: Afficher les médias sensibles dans les prévisualisations OpenGraph
registrations:
closed_message:
desc_html: Affiché sur la page d’accueil lorsque les inscriptions sont fermées Vous pouvez utiliser des balises HTML
@@ -357,19 +369,20 @@ fr:
desc_html: Autoriser tout le monde à créer un compte
title: Ouvrir les inscriptions
show_known_fediverse_at_about_page:
- desc_html: Lorsque l'option est activée, les pouets provenant de toutes les instances connues sont affichés dans la prévisualisation. Si non, seuls les pouets locaux sont affichés.
+ desc_html: Lorsque l’option est activée, les pouets provenant de toutes les instances connues sont affichés dans la prévisualisation. Sinon, seuls les pouets locaux sont affichés.
title: Afficher le fediverse connu dans la prévisualisation du fil
show_staff_badge:
- desc_html: Montrer un badge de responsable sur une page utilisateur
+ desc_html: Montrer un badge de responsable sur une page utilisateur·ice
title: Montrer un badge de responsable
site_description:
- desc_html: Paragraphe introductif sur la page d'accueil. Décrivez ce qui rend spécifique ce serveur Mastodon et toute autre chose importante. Vous pouvez utiliser des balises HTML, en particulier <a>
et <em>
.
+ desc_html: Paragraphe introductif sur la page d’accueil. Décrivez ce qui rend spécifique ce serveur Mastodon et toute autre chose importante. Vous pouvez utiliser des balises HTML, en particulier <a>
et <em>
.
title: Description du site
site_description_extended:
desc_html: Affichée sur la page d’informations complémentaires du site Vous pouvez utiliser des balises HTML
title: Description étendue du site
site_short_description:
- title: Description courte de l'instance
+ desc_html: Affichée dans la barre latérale et dans les méta-tags. Décrivez ce qui rend spécifique ce serveur Mastodon en un seul paragraphe. Si laissée vide, la description de l’instance sera affiché par défaut.
+ title: Description courte de l’instance
site_terms:
desc_html: Affichée sur la page des conditions d’utilisation du site Vous pouvez utiliser des balises HTML
title: Politique de confidentialité
@@ -391,6 +404,7 @@ fr:
media:
title: Médias
no_media: Aucun média
+ no_status_selected: Aucun statut n’a été modifié car aucun n’a été sélectionné
title: État du compte
with_media: avec médias
subscriptions:
@@ -404,13 +418,13 @@ fr:
admin_mailer:
new_report:
body: "%{reporter} a signalé %{target}"
- body_remote: Quelqu'un de %{domain} a signalé %{target}
+ body_remote: Quelqu’un de %{domain} a signalé %{target}
subject: Nouveau signalement sur %{instance} (#%{id})
application_mailer:
notification_preferences: Modifier les préférences de courriel
salutation: "%{name},"
settings: 'Changer les préférences courriel : %{link}'
- view: 'Voir :'
+ view: 'Voir :'
view_profile: Voir le profil
view_status: Afficher le statut
applications:
@@ -440,7 +454,7 @@ fr:
cas: CAS
saml: SAML
register: S’inscrire
- register_elsewhere: S'inscrire sur un autre serveur
+ register_elsewhere: S’inscrire sur un autre serveur
resend_confirmation: Envoyer à nouveau les consignes de confirmation
reset_password: Réinitialiser le mot de passe
security: Sécurité
@@ -449,8 +463,8 @@ fr:
already_following: Vous suivez déjà ce compte
error: Malheureusement, il y a eu une erreur en cherchant les détails du compte distant
follow: Suivre
- follow_request: 'Vous avez demandé à suivre :'
- following: 'Youpi ! Vous suivez :'
+ follow_request: 'Vous avez demandé à suivre :'
+ following: 'Youpi ! Vous suivez :'
post_follow:
close: Ou bien, vous pouvez fermer cette fenêtre.
return: Afficher le profil de l’utilisateur⋅ice
@@ -476,7 +490,7 @@ fr:
description_html: Cela va supprimer votre compte et le désactiver de manière permanente et irréversible . Votre nom d’utilisateur⋅ice restera réservé afin d’éviter la confusion.
proceed: Supprimer compte
success_msg: Votre compte a été supprimé avec succès
- warning_html: Seule la suppression du contenu depuis cette instance est garantie. Le contenu qui a été partagé est susceptible de laisser des traces. Les serveurs hors-lignes ainsi que ceux n’étant plus abonnés à vos publications ne mettront pas leur base de données à jour.
+ warning_html: Seule la suppression du contenu depuis cette instance est garantie. Le contenu qui a été partagé est susceptible de laisser des traces. Les serveurs hors-ligne ainsi que ceux n’étant plus abonnés à vos publications ne mettront pas leur base de données à jour.
warning_title: Disponibilité du contenu disséminé
errors:
'403': Vous n’avez pas accès à cette page.
@@ -489,13 +503,13 @@ fr:
'500':
content: Nous sommes désolé·e·s, mais quelque chose s’est mal passé de notre côté.
title: Cette page n’est pas correcte
- noscript_html: Pour utiliser Mastodon, veuillez activer JavaScript. Sinon, essayez l'une des applications natives pour Mastodon pour votre plate-forme.
+ noscript_html: Pour utiliser Mastodon, veuillez activer JavaScript. Sinon, essayez l’une des applications natives pour Mastodon pour votre plate-forme.
exports:
archive_takeout:
date: Date
download: Télécharger votre archive
hint_html: Vous pouvez demander une archive de vos pouets et médias téléversés . Les données exportées seront au format ActivityPub, lisible par tout logiciel compatible. Vous pouvez demander une archive tous les 7 jours.
- in_progress: Élaboration de votre archive....
+ in_progress: Création de votre archive…
request: Demandez vos archives
size: Taille
blocks: Vous bloquez
@@ -505,12 +519,15 @@ fr:
storage: Médias stockés
filters:
contexts:
- home: Ligne de temps personnelle
+ home: Accueil
notifications: Notifications
- public: Lignes de temps public
+ public: Fils publics
thread: Conversations
edit:
- title: Filtre d'édition
+ title: Éditer le filtre
+ errors:
+ invalid_context: Contexte invalide ou insuffisant
+ invalid_irreversible: Le filtrage irréversible ne fonctionne que pour l’accueil et les notifications
index:
delete: Effacer
title: Filtres
@@ -559,7 +576,7 @@ fr:
'86400': 1 jour
expires_in_prompt: Jamais
generate: Générer
- invited_by: 'Vous avez été invité par :'
+ invited_by: 'Vous avez été invité·e par :'
max_uses:
one: 1 usage
other: "%{count} usages"
@@ -577,26 +594,26 @@ fr:
images_and_video: Impossible de joindre une vidéo à un statut contenant déjà des images
too_many: Impossible de joindre plus de 4 fichiers
migrations:
- acct: utilisateur@domaine du nouveau compte
- currently_redirecting: 'Votre profile va être redirigé vers :'
+ acct: profil@domaine du nouveau compte
+ currently_redirecting: 'Votre profile va être redirigé vers :'
proceed: Enregistrer
- updated_msg: Les paramètres de votre migration de compte ont été mis à jour avec succès !
+ updated_msg: Les paramètres de votre migration de compte ont été mis à jour avec succès !
moderation:
title: Modération
notification_mailer:
digest:
action: Voir toutes les notifications
- body: 'Voici ce que vous avez raté sur ${instance} depuis votre dernière visite le %{since} :'
- mention: "%{name} vous a mentionné⋅e dans :"
+ body: 'Voici ce que vous avez raté sur ${instance} depuis votre dernière visite le %{since} :'
+ mention: "%{name} vous a mentionné⋅e dans :"
new_followers_summary:
one: Vous avez un⋅e nouvel⋅le abonné⋅e ! Youpi !
other: Vous avez %{count} nouveaux⋅elles abonné⋅e·s ! Incroyable !
subject:
one: "Une nouvelle notification depuis votre dernière visite \U0001F418"
other: "%{count} nouvelles notifications depuis votre dernière visite \U0001F418"
- title: Pendant votre absence...
+ title: Pendant votre absence…
favourite:
- body: "%{name} a ajouté votre post à ses favoris :"
+ body: "%{name} a ajouté votre post à ses favoris :"
subject: "%{name} a ajouté votre post à ses favoris"
title: Nouveau favori
follow:
@@ -604,17 +621,17 @@ fr:
subject: "%{name} vous suit"
title: Nouvel·le abonné·e
follow_request:
- action: Gérer les demandes d'abonnement
+ action: Gérer les demandes d’abonnement
body: "%{name} a demandé à vous suivre"
subject: 'Abonné⋅es en attente : %{name}'
- title: Nouvelle demande d'abonnement
+ title: Nouvelle demande d’abonnement
mention:
action: Répondre
- body: "%{name} vous a mentionné⋅e dans :"
+ body: "%{name} vous a mentionné⋅e dans :"
subject: "%{name} vous a mentionné·e"
title: Nouvelle mention
reblog:
- body: "%{name} a partagé votre statut :"
+ body: "%{name} a partagé votre statut :"
subject: "%{name} a partagé votre statut"
title: Nouveau partage
number:
@@ -640,10 +657,14 @@ fr:
publishing: Publication
web: Web
remote_follow:
- acct: Entrez votre pseudo@instance depuis lequel vous voulez suivre cet·te utilisateur⋅ice
+ acct: Entrez l’adresse profil@instance depuis laquelle vous voulez vous abonner
missing_resource: L’URL de redirection n’a pas pu être trouvée
- proceed: Continuez pour suivre
- prompt: 'Vous allez suivre :'
+ no_account_html: Vous n’avez pas de compte ? Vous pouvez vous inscrire ici
+ proceed: Confirmer l’abonnement
+ prompt: 'Vous allez suivre :'
+ remote_interaction:
+ proceed: Confirmer l’interaction
+ prompt: 'Vous désirez interagir avec ce pouet :'
remote_unfollow:
error: Erreur
title: Titre
@@ -706,7 +727,7 @@ fr:
your_apps: Vos applications
statuses:
attached:
- description: 'Attaché : %{attached}'
+ description: 'Attaché : %{attached}'
image:
one: "%{count} image"
other: "%{count} images"
@@ -714,10 +735,10 @@ fr:
one: "%{count} vidéo"
other: "%{count} vidéos"
boosted_from_html: Repartagé depuis %{acct_link}
- content_warning: 'Attention au contenu : %{warning}'
+ content_warning: 'Avertissement sur le contenu : %{warning}'
disallowed_hashtags:
- one: 'contient un hashtag désactivé : %{tags}'
- other: 'contient les hashtag désactivés : %{tags}'
+ one: 'contient un hashtag désactivé : %{tags}'
+ other: 'contient les hashtags désactivés : %{tags}'
language_detection: Détecter automatiquement la langue
open_in_web: Ouvrir sur le web
over_character_limit: limite de caractères dépassée de %{max} caractères
@@ -727,6 +748,7 @@ fr:
private: Les statuts non-publics ne peuvent pas être épinglés
reblog: Un partage ne peut pas être épinglé
show_more: Afficher plus
+ sign_in_to_participate: Inscrivez-vous pour prendre part à la conversation
title: '%{name} : "%{quote}"'
visibilities:
private: Abonné⋅e⋅s uniquement
@@ -740,7 +762,88 @@ fr:
reblogged: a partagé
sensitive_content: Contenu sensible
terms:
- title: "%{instance} Conditions d’utilisations et politique de confidentialité"
+ body_html: |
+ Politique de confidentialité
+ Quelles informations collectons-nous ?
+
+
+ Informations de base sur votre compte : Si vous vous inscrivez sur ce serveur, il vous sera demandé de rentrer un identifiant, une adresse électronique et un mot de passe. Vous pourrez également ajouter des informations additionnelles sur votre profil, telles qu’un nom public et une biographie, ainsi que téléverser une image de profil et une image d’en-tête. Vos identifiant, nom public, biographie, image de profil et image d’en-tête seront toujours affichés publiquement.
+ Posts, liste d’abonnements et autres informations publiques : La liste de vos abonnements ainsi que la liste de vos abonné·e·s sont publiques. Quand vous postez un message, la date et l’heure d’envoi ainsi que le nom de l’application utilisée pour sa transmission sont enregistré·e·s. Des médias, tels que des images ou des vidéos, peuvent être joints aux messages. Les posts publics et non listés sont affichés publiquement. Quand vous mettez en avant un post sur votre profil, ce post est également affiché publiquement. Vos messages sont délivrés à vos abonné·e·s, ce qui, dans certains cas, signifie qu’ils sont délivrés à des serveurs tiers et que ces derniers en stockent une copie. Quand vous supprimer un post, il est probable que vos abonné·e·s en soient informé·e·s. Partager un message ou le marquer comme favori est toujours une action publique.
+ Posts directs et abonné·e·s uniquement : Tous les posts sont stockés et traités par le serveur. Les messages abonné·e·s uniquement ne sont transmis qu’à vos abonné·e·s et aux personnes mentionnées dans le corps du message, tandis que les messages directs ne sont transmis qu’aux personnes mentionnées. Dans certains cas, cela signifie qu’ils sont délivrés à des serveurs tiers et que ces derniers en stockent une copie. Nous faisons un effort de bonne fois pour en limiter l’accès uniquement aux personnes autorisées, mais ce n’est pas nécessairement le cas des autres serveurs. Il est donc très important que vous vérifiiez les serveurs auxquels appartiennent vos abonné·e·s. Il vous est possible d’activer une option dans les paramètres afin d’approuver et de rejeter manuellement les nouveaux·lles abonné·e·s. Gardez s’il-vous-plaît en mémoire que les opérateur·rice·s du serveur ainsi que celles et ceux de n’importe quel serveur récepteur peuvent voir ces messages et qu’il est possible pour les destinataires de faire des captures d’écran, de copier et plus généralement de repartager ces messages. Ne partager aucune information sensible à l’aide de Mastodon.
+ IP et autres métadonnées : Quand vous vous connectez, nous enregistrons votre adresse IP ainsi que le nom de votre navigateur web. Toutes les sessions enregistrées peuvent être consultées dans les paramètres, afin que vous puissiez les surveiller et éventuellement les révoquer. La dernière adresse IP utilisée est conservée pour une durée de 12 mois. Nous sommes également susceptibles de conserver les journaux du serveur, ce qui inclut l’adresse IP de chaque requête reçue.
+
+
+
+
+ Que faisons-nous des informations que nous collectons ?
+
+ Toutes les informations que nous collectons sur vous peuvent être utilisées d’une des manières suivantes :
+
+
+ Pour vous fournir les fonctionnalités de base de Mastodon. Vous ne pouvez interagir avec le contenu des autres et poster votre propre contenu que lorsque vous êtes connecté·e. Par exemple, vous pouvez vous abonner à plusieurs autres comptes pour voir l’ensemble de leurs posts dans votre fil d’accueil personnalisé.
+ Pour aider à la modération de la communauté, par exemple, comparer votre adresse IP à d’autres afin de déterminer si un bannissement a été contourné ou si une autre violation aux règles a été commise.
+ L’adresse électronique que vous nous avez fournie peut être utilisée pour vous envoyez des informations, des notifications lorsque d’autres personnes interagissent avec votre contenu ou vous envoient des messages, pour répondre à des demandes de votre part ainsi que pour tout autres requêtes ou questions.
+
+
+
+
+ Comment protégeons-nous vos informations ?
+
+ Nous mettons en œuvre une variété de mesures de sécurité afin de garantir la sécurité de vos informations personnelles quand vous les saisissez, les soumettez et les consultez. Entre autres choses, votre session de navigation ainsi que le trafic entre votre application et l’API sont sécurisés à l’aide de TLS tandis que votre mot de passe est haché en utilisant un puissant algorithme à sens unique. Vous pouvez également activer l’authentification à deux facteurs pour sécuriser encore plus l’accès à votre compte.
+
+
+
+ Quelle est notre politique de conservation des données ?
+
+ Nous ferons un effort de bonne foi :
+
+
+ Pour ne pas conserver plus de 90 jours les journaux systèmes contenant les adresses IP de toutes les requêtes reçues par ce serveur.
+ Pour ne pas conserver plus de 12 mois les adresses IP associées aux utilisateur·ice·s enregistré·e·s.
+
+
+ Vous pouvez demander une archive de votre contenu, incluant vos posts, vos médias joints, votre image de profil et votre image d’en-tête.
+
+ Vous pouvez, à n’importe quel moment, supprimer votre compte de manière définitive.
+
+
+
+ Utilisons-nous des témoins de connexion ?
+
+ Oui. Les témoins de connexion sont de petits fichiers qu’un site ou un service transféres sur le disque dur de votre ordinateur via votre navigateur web (si vous l’avez autorisé). Ces témoins permettent au site de reconnaître votre navigateur et de, dans le cas où vous possédez un compte, de vous associer avec ce dernier.
+
+ Nous utilisons les témoins de connexion comme un moyen de comprendre et de nous souvenir de vos préférences pour vos prochaines visites.
+
+
+
+ Divulguons-nous des informations à des tierces parties ?
+
+ Nous ne vendons, n’échangeons ou ne transférons d’une quelque manière que soit des informations permettant de vous identifier personnellement. Cela n’inclut pas les tierces parties de confiance qui nous aident à opérer ce site, à conduire nos activités commerciales ou à vous servir, tant qu’elles acceptent de garder ces informations confidentielles. Nous sommes également susceptibles de partager vos informations quand nous pensons que c’est nécessaire pour nous conformer à la loi, pour appliquer les politiques de notre site ainsi que pour défendre nos droits, notre propriété, notre sécurité et celles et ceux d’autres personnes.
+
+ Votre contenu public peut être téléchargé par d’autres serveurs du réseau. Dans le cas où vos abonné·e·s et vos destinataires résideraient sur des serveurs différents du vôtre, vos posts publics et abonné·e·s uniquement peuvent être délivrés vers les serveurs de vos abonné·e·s tandis que vos messages directs sont délivrés aux serveurs de vos destinataires.
+
+ Quand vous autorisez une application à utiliser votre compte, en fonction de l’étendue des permissions que vous approuvez, il est possible qu’elle puisse accéder aux informations publiques de votre profil, votre liste d’abonnements, votre liste d’abonné·e·s, vos listes, tout vos posts et vos favoris. Les applications ne peuvent en aucun cas accéder à votre adresse électronique et à votre mot de passe.
+
+
+
+ Utilisation de ce site par les enfants
+
+ Si ce serveur est situé dans dans l’UE ou l’EEE : Notre site, produits et services sont tous destinés à des personnes âgées de 16 ans ou plus. Si vous avez moins de 16 ans, en application du RGPD (Règlement Général sur la Protection des Données ), merci de ne pas utiliser ce site.
+
+ Si ce serveur est situé dans aux États-Unis d’Amérique : Notre site, produits et services sont tous destinés à des personnes âgées de 13 ans ou plus. Si vous avez moins de 13 ans, en application du COPPA (Children's Online Privacy Protection Act ), merci de ne pas utiliser ce site.
+
+ Les exigences légales peuvent être différentes si ce serveur se trouve dans une autre juridiction.
+
+
+
+ Modifications de notre politique de confidentialité
+
+ Dans le cas où nous déciderions de changer notre politique de confidentialité, nous posterons les modifications sur cette page.
+
+ Ce document est publié sous lincence CC-BY-SA. Il a été mis à jours pour la dernière fois le 7 mars 2018.
+
+ Originellement adapté de la politique de confidentialité de Discourse .
+ title: "%{instance} Conditions d’utilisation et politique de confidentialité"
themes:
contrast: Contraste élevé
default: Mastodon
@@ -758,8 +861,8 @@ fr:
enabled_success: Identification à deux facteurs activée avec succès
generate_recovery_codes: Générer les codes de récupération
instructions_html: "Scannez ce QR code grâce à Google Authenticator, Authy ou une application similaire sur votre téléphone . Désormais, cette application génèrera des jetons que vous devrez saisir à chaque connexion."
- lost_recovery_codes: Les codes de récupération vous permettent de retrouver les accès à votre comptre si vous perdez votre téléphone. Si vous perdez vos codes de récupération, vous pouvez les générer à nouveau ici. Vos anciens codes de récupération seront invalidés.
- manual_instructions: 'Si vous ne pouvez pas scanner ce QR code et devez l’entrer manuellement, voici le secret en clair :'
+ lost_recovery_codes: Les codes de récupération vous permettent de retrouver les accès à votre compte si vous perdez votre téléphone. Si vous perdez vos codes de récupération, vous pouvez les générer à nouveau ici. Vos anciens codes de récupération seront invalidés.
+ manual_instructions: 'Si vous ne pouvez pas scanner ce QR code et devez l’entrer manuellement, voici le secret en clair :'
recovery_codes: Codes de récupération
recovery_codes_regenerated: Codes de récupération régénérés avec succès
recovery_instructions_html: Si vous perdez l’accès à votre téléphone, vous pouvez utiliser un des codes de récupération ci-dessous pour retrouver l’accès à votre compte. Conservez les codes de récupération en sécurité . Par exemple, en les imprimant et en les stockant avec vos autres documents importants.
@@ -767,30 +870,30 @@ fr:
wrong_code: Les codes entrés sont incorrects ! L’heure du serveur et celle de votre appareil sont-elles correctes ?
user_mailer:
backup_ready:
- explanation: Vous avez demandé une sauvegarde complète de votre compte Mastodon. Elle est maintenant prête à être téléchargée !
+ explanation: Vous avez demandé une sauvegarde complète de votre compte Mastodon. Elle est maintenant prête à être téléchargée !
subject: Votre archive est prête à être téléchargée
- title: Retrait de l'archive
+ title: Récupération de l’archive
welcome:
edit_profile_action: Configuration du profil
- edit_profile_step: Vous pouvez personnaliser votre profil en téléchargeant un avatar, une image d'en-tête, en changeant votre pseudo et plus encore. Si vous souhaitez examiner les nouveaux abonnés avant qu'ils ne soient autorisés à vous suivre, vous pouvez verrouiller votre compte.
+ edit_profile_step: Vous pouvez personnaliser votre profil en téléchargeant un avatar, une image d’en-tête, en changeant votre pseudo et plus encore. Si vous souhaitez examiner les nouveaux·lles abonné·e·s avant qu’il·elle·s ne soient autorisé·e·s à vous suivre, vous pouvez verrouiller votre compte.
explanation: Voici quelques conseils pour vous aider à démarrer
final_action: Commencer à publier
- final_step: 'Commencez à poster ! Même sans abonné·es, vos messages publics peuvent être vus par d''autres, par exemple sur la chronologie locale et dans les hashtags. Vous pouvez vous présenter sur le hashtag #introductions.'
- full_handle: Votre pleine maîtrise
- full_handle_hint: C'est ce que vous diriez à vos amis pour qu'ils puissent vous envoyer un message ou vous suivre à partir d'une autre instance.
+ final_step: 'Commencez à poster ! Même sans abonné·e·s, vos messages publics peuvent être vus par d’autres, par exemple sur le fil public local et dans les hashtags. Vous pouvez vous présenter sur le hashtag #introductions.'
+ full_handle: Votre identifiant complet
+ full_handle_hint: C’est ce que vous diriez à vos ami·e·s pour qu’il·elle·s puissent vous envoyer un message ou vous suivre à partir d’une autre instance.
review_preferences_action: Modifier les préférences
- review_preferences_step: Assurez-vous de définir vos préférences, telles que les courriels que vous aimeriez recevoir ou le niveau de confidentialité auquel vous aimeriez que vos messages soient soumis par défaut. Si vous n'avez pas le mal des transports, vous pouvez choisir d'activer la lecture automatique GIF.
+ review_preferences_step: Assurez-vous de définir vos préférences, telles que les courriels que vous aimeriez recevoir ou le niveau de confidentialité auquel vous aimeriez que vos messages soient soumis par défaut. Si vous n’avez pas le mal des transports, vous pouvez choisir d’activer la lecture automatique des GIF.
subject: Bienvenue sur Mastodon
- tip_bridge_html: Si vous venez de Twitter, vous pouvez retrouver vos amis sur Mastodon en utilisant le bridge app . Cela ne fonctionne que s'ils ont aussi utilisé cette application !
- tip_federated_timeline: La chronologie fédérée est une vue en direct du réseau Mastodon. Mais elle n'inclut que les personnes auxquelles vos voisin·es sont abonné·es, donc elle n'est pas complète.
- tip_following: Vous suivez les administrateurs et administratrices de votre serveur par défaut. Pour trouver d'autres personnes intéressantes, consultez les chronologies locales et fédérées.
- tip_local_timeline: La chronologie locale est une vue des personnes sur %{instance}. Ce sont vos voisines et voisins immédiats !
- tip_mobile_webapp: Si votre navigateur mobile vous propose d'ajouter Mastodon à votre écran d'accueil, vous pouvez recevoir des notifications. Il agit comme une application native de bien des façons !
+ tip_bridge_html: Si vous venez de Twitter, vous pouvez retrouver vos ami·e·s sur Mastodon en utilisant l’application de mise en relation . Cela ne fonctionne que s’il·elle·s ont aussi utilisé cette application !
+ tip_federated_timeline: La fil public global est une vue en direct du réseau Mastodon. Mais elle n’inclut que les personnes auxquelles vos voisin·es sont abonné·e·s, donc elle n’est pas complète.
+ tip_following: Vous suivez les administrateur·rice·s de votre serveur par défaut. Pour trouver d’autres personnes intéressantes, consultez les fils publics local et global.
+ tip_local_timeline: Le fil public local est une vue des personnes sur %{instance}. Ce sont vos voisines et voisins immédiats !
+ tip_mobile_webapp: Si votre navigateur mobile vous propose d’ajouter Mastodon à votre écran d’accueil, vous pouvez recevoir des notifications. Il agit comme une application native de bien des façons !
tips: Astuces
- title: Bienvenue à bord, %{name} !
+ title: Bienvenue à bord, %{name} !
users:
invalid_email: L’adresse courriel est invalide
invalid_otp_token: Le code d’authentification à deux facteurs est invalide
otp_lost_help_html: Si vous perdez accès aux deux, vous pouvez contacter %{email}
seamless_external_login: Vous êtes connecté via un service externe, donc les paramètres concernant le mot de passe et le courriel ne sont pas disponibles.
- signed_in_as: 'Connecté·e en tant que :'
+ signed_in_as: 'Connecté·e en tant que :'
diff --git a/config/locales/simple_form.fr.yml b/config/locales/simple_form.fr.yml
index a023faf92..b08f4aa9b 100644
--- a/config/locales/simple_form.fr.yml
+++ b/config/locales/simple_form.fr.yml
@@ -3,34 +3,34 @@ fr:
simple_form:
hints:
defaults:
- autofollow: Les personnes qui s'inscrivent grâce à l'invitation vous suivront automatiquement
+ autofollow: Les personnes qui s’inscrivent grâce à l’invitation vous suivront automatiquement
avatar: Au format PNG, GIF ou JPG. 2 Mo maximum. Sera réduit à %{dimensions}px
bot: Ce compte exécute principalement des actions automatisées et pourrait ne pas être surveillé
- context: Un ou plusieurs contextes où le filtre devrait s'appliquer
+ context: Un ou plusieurs contextes où le filtre devrait s’appliquer
digest: Uniquement envoyé après une longue période d’inactivité et uniquement si vous avez reçu des messages personnels pendant votre absence
display_name:
one: 1 caractère restant
other: %{count} caractères restants
- fields: Vous pouvez avoir jusqu'à 4 éléments affichés en tant que tableau sur votre profil
+ fields: Vous pouvez avoir jusqu’à 4 éléments affichés en tant que tableau sur votre profil
header: Au format PNG, GIF ou JPG. 2 Mo maximum. Sera réduit à %{dimensions}px
- inbox_url: Copiez l'URL depuis la page d'accueil du relais que vous souhaitez utiliser
+ inbox_url: Copiez l’URL depuis la page d’accueil du relais que vous souhaitez utiliser
irreversible: Les pouets filtrés disparaîtront irrémédiablement, même si le filtre est supprimé plus tard
- locale: La langue de l'interface-utilisateur, des courriels, et des notifications
+ locale: La langue de l’interface, des courriels et des notifications
locked: Vous devrez approuver chaque abonné⋅e et vos statuts ne s’afficheront qu’à vos abonné⋅es
note:
one: 1 caractère restant
other: %{count} caractères restants
- phrase: Sera trouvé sans que la case ou l'avertissement de contenu du pouet soit pris en compte
- scopes: À quelles APIs l'application sera autorisée à accéder. Si vous sélectionnez un périmètre de haut-niveau, vous n'avez pas besoin de sélectionner les individuels.
- setting_default_language: La langue de vos pouets peut être détectée automatiquement, mais ça n'est pas toujours pertinent
+ phrase: Sera trouvé sans que la case ou l’avertissement de contenu du pouet soit pris en compte
+ scopes: À quelles APIs l’application sera autorisée à accéder. Si vous sélectionnez un périmètre de haut-niveau, vous n’avez pas besoin de sélectionner les individuels.
+ setting_default_language: La langue de vos pouets peut être détectée automatiquement, mais ça n’est pas toujours pertinent
setting_hide_network: Ceux que vous suivez et ceux qui vous suivent ne seront pas affichés sur votre profil
setting_noindex: Affecte votre profil public ainsi que vos statuts
setting_theme: Affecte l’apparence de Mastodon quand vous êtes connecté·e depuis n’importe quel appareil.
- whole_word: Lorsque le mot-clef ou la phrase-clef est uniquement alphanumérique, ça sera uniquement appliqué s'il correspond au mot entier
+ whole_word: Lorsque le mot-clef ou la phrase-clef est uniquement alphanumérique, ça sera uniquement appliqué s’il correspond au mot entier
imports:
data: Un fichier CSV généré par une autre instance de Mastodon
sessions:
- otp: 'Entrez le code d’authentification à deux facteurs généré par votre téléphone ou utilisez un de vos codes de récupération :'
+ otp: 'Entrez le code d’authentification à deux facteurs généré par votre téléphone ou utilisez un de vos codes de récupération :'
user:
chosen_languages: Lorsque coché, seuls les pouets dans les langues sélectionnées seront affichés sur les fils publics
labels:
@@ -55,9 +55,9 @@ fr:
header: Image d’en-tête
inbox_url: URL de la boîte de relais
irreversible: Supprimer plutôt que de cacher
- locale: Langue de l'interface
+ locale: Langue de l’interface
locked: Verrouiller le compte
- max_uses: Nombre maximum d'utilisations
+ max_uses: Nombre maximum d’utilisations
new_password: Nouveau mot de passe
note: Présentation
otp_attempt: Code d’identification à deux facteurs
@@ -79,7 +79,7 @@ fr:
severity: Sévérité
type: Type d’import
username: Identifiant
- username_or_email: Nom d'utilisateur ou courriel
+ username_or_email: Nom d’utilisateur·ice ou courriel
whole_word: Mot entier
interactions:
must_be_follower: Masquer les notifications des personnes qui ne vous suivent pas
From 6cb3514d64ec24b164484f4eb84363b96746d5d6 Mon Sep 17 00:00:00 2001
From: Jakub Mendyk
Date: Thu, 23 Aug 2018 14:17:35 +0200
Subject: [PATCH 149/196] Add ability to change an instance default theme from
the administration panel (#7092) (#8381)
* Add default_settings class method to ScopedSettings
ScopedSettings was extended to use value of unscoped setting instead of
only using defaults set in config/settings.yml for selected settings.
This adds possibility for admins to set default values of users' settings,
for example default theme (as requested in #7092).
* Add ability to change an instance default theme
Closes #7092
---
app/controllers/admin/settings_controller.rb | 1 +
app/controllers/application_controller.rb | 2 +-
app/lib/settings/scoped_settings.rb | 15 +++++++--
app/models/form/admin_settings.rb | 2 ++
app/views/admin/settings/edit.html.haml | 1 +
.../application_controller_spec.rb | 33 +++++++++++++++++++
6 files changed, 51 insertions(+), 3 deletions(-)
diff --git a/app/controllers/admin/settings_controller.rb b/app/controllers/admin/settings_controller.rb
index 3234b194f..23e0444d0 100644
--- a/app/controllers/admin/settings_controller.rb
+++ b/app/controllers/admin/settings_controller.rb
@@ -16,6 +16,7 @@ module Admin
timeline_preview
show_staff_badge
bootstrap_timeline_accounts
+ theme
thumbnail
hero
min_invite_role
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index eafe27047..7ddd26ec0 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -95,7 +95,7 @@ class ApplicationController < ActionController::Base
end
def current_theme
- return Setting.default_settings['theme'] unless Themes.instance.names.include? current_user&.setting_theme
+ return Setting.theme unless Themes.instance.names.include? current_user&.setting_theme
current_user.setting_theme
end
diff --git a/app/lib/settings/scoped_settings.rb b/app/lib/settings/scoped_settings.rb
index de4af3009..5ee30825d 100644
--- a/app/lib/settings/scoped_settings.rb
+++ b/app/lib/settings/scoped_settings.rb
@@ -2,6 +2,10 @@
module Settings
class ScopedSettings
+ DEFAULTING_TO_UNSCOPED = %w(
+ theme
+ ).freeze
+
def initialize(object)
@object = object
end
@@ -50,15 +54,22 @@ module Settings
Rails.cache.fetch(Setting.cache_key(key, @object)) do
db_val = thing_scoped.find_by(var: key.to_s)
if db_val
- default_value = Setting.default_settings[key]
+ default_value = ScopedSettings.default_settings[key]
return default_value.with_indifferent_access.merge!(db_val.value) if default_value.is_a?(Hash)
db_val.value
else
- Setting.default_settings[key]
+ ScopedSettings.default_settings[key]
end
end
end
+ class << self
+ def default_settings
+ defaulting = DEFAULTING_TO_UNSCOPED.map { |k| [k, Setting[k]] }.to_h
+ Setting.default_settings.merge!(defaulting)
+ end
+ end
+
protected
def thing_scoped
diff --git a/app/models/form/admin_settings.rb b/app/models/form/admin_settings.rb
index 010cf7fc3..db46cda7b 100644
--- a/app/models/form/admin_settings.rb
+++ b/app/models/form/admin_settings.rb
@@ -30,6 +30,8 @@ class Form::AdminSettings
:show_staff_badge=,
:bootstrap_timeline_accounts,
:bootstrap_timeline_accounts=,
+ :theme,
+ :theme=,
:min_invite_role,
:min_invite_role=,
:activity_api_enabled,
diff --git a/app/views/admin/settings/edit.html.haml b/app/views/admin/settings/edit.html.haml
index fda6b00f4..b5aa176a2 100644
--- a/app/views/admin/settings/edit.html.haml
+++ b/app/views/admin/settings/edit.html.haml
@@ -15,6 +15,7 @@
%hr/
.fields-group
+ = f.input :theme, collection: Themes.instance.names, label_method: lambda { |theme| I18n.t("themes.#{theme}", default: theme) }, wrapper: :with_label, include_blank: false
= f.input :thumbnail, as: :file, wrapper: :with_block_label, label: t('admin.settings.thumbnail.title'), hint: t('admin.settings.thumbnail.desc_html')
= f.input :hero, as: :file, wrapper: :with_block_label, label: t('admin.settings.hero.title'), hint: t('admin.settings.hero.desc_html')
diff --git a/spec/controllers/application_controller_spec.rb b/spec/controllers/application_controller_spec.rb
index c6c78d3f7..d158625e6 100644
--- a/spec/controllers/application_controller_spec.rb
+++ b/spec/controllers/application_controller_spec.rb
@@ -92,6 +92,39 @@ describe ApplicationController, type: :controller do
end
end
+ describe 'helper_method :current_theme' do
+ it 'returns "default" when theme wasn\'t changed in admin settings' do
+ allow(Setting).to receive(:default_settings).and_return({'theme' => 'default'})
+
+ expect(controller.view_context.current_theme).to eq 'default'
+ end
+
+ it 'returns instances\'s theme when user is not signed in' do
+ allow(Setting).to receive(:[]).with('theme').and_return 'contrast'
+
+ expect(controller.view_context.current_theme).to eq 'contrast'
+ end
+
+ it 'returns instances\'s default theme when user didn\'t set theme' do
+ current_user = Fabricate(:user)
+ sign_in current_user
+
+ allow(Setting).to receive(:[]).with('theme').and_return 'contrast'
+
+ expect(controller.view_context.current_theme).to eq 'contrast'
+ end
+
+ it 'returns user\'s theme when it is set' do
+ current_user = Fabricate(:user)
+ current_user.settings['theme'] = 'mastodon-light'
+ sign_in current_user
+
+ allow(Setting).to receive(:[]).with('theme').and_return 'contrast'
+
+ expect(controller.view_context.current_theme).to eq 'mastodon-light'
+ end
+ end
+
context 'ActionController::RoutingError' do
subject do
routes.draw { get 'routing_error' => 'anonymous#routing_error' }
From 63484ee17a857ad0c4c33f196bfa8d825621c509 Mon Sep 17 00:00:00 2001
From: ThibG
Date: Thu, 23 Aug 2018 16:39:22 +0200
Subject: [PATCH 150/196] Do not check for file existence when serializing
ActivityPub actor (#8386)
When serializing an ActivityPub actor, Mastodon checks for the existence
of the avatar/header files. This is not necessary, only check if avatar/header
is set.
https://github.com/thoughtbot/paperclip/blob/fd8bf49d3895de2904b43f95d11af0736fbd0f5b/README.md#checking-a-file-exists
---
app/serializers/activitypub/actor_serializer.rb | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/serializers/activitypub/actor_serializer.rb b/app/serializers/activitypub/actor_serializer.rb
index 41c9aa44e..5054bd683 100644
--- a/app/serializers/activitypub/actor_serializer.rb
+++ b/app/serializers/activitypub/actor_serializer.rb
@@ -93,11 +93,11 @@ class ActivityPub::ActorSerializer < ActiveModel::Serializer
end
def avatar_exists?
- object.avatar.exists?
+ object.avatar?
end
def header_exists?
- object.header.exists?
+ object.header?
end
def manually_approves_followers
From 66dbb59aa16981643e3bfa3f94d441bc3166eab3 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Thu, 23 Aug 2018 17:26:21 +0200
Subject: [PATCH 151/196] Add aria-label to column regions (#8390)
Fix #4485
---
app/javascript/mastodon/components/column.js | 5 +-
.../features/community_timeline/index.js | 2 +-
.../mastodon/features/compose/index.js | 3 +-
.../features/direct_timeline/index.js | 2 +-
.../features/favourited_statuses/index.js | 2 +-
.../features/getting_started/index.js | 3 +-
.../features/hashtag_timeline/index.js | 2 +-
.../mastodon/features/home_timeline/index.js | 2 +-
.../mastodon/features/list_timeline/index.js | 2 +-
.../mastodon/features/notifications/index.js | 2 +-
.../features/public_timeline/index.js | 2 +-
.../standalone/community_timeline/index.js | 2 +-
.../standalone/public_timeline/index.js | 2 +-
.../mastodon/features/status/index.js | 3 +-
.../mastodon/features/trends/index.js | 66 -------------------
15 files changed, 19 insertions(+), 81 deletions(-)
delete mode 100644 app/javascript/mastodon/features/trends/index.js
diff --git a/app/javascript/mastodon/components/column.js b/app/javascript/mastodon/components/column.js
index e81236d26..d45387463 100644
--- a/app/javascript/mastodon/components/column.js
+++ b/app/javascript/mastodon/components/column.js
@@ -7,6 +7,7 @@ export default class Column extends React.PureComponent {
static propTypes = {
children: PropTypes.node,
+ label: PropTypes.string,
};
scrollTop () {
@@ -40,10 +41,10 @@ export default class Column extends React.PureComponent {
}
render () {
- const { children } = this.props;
+ const { label, children } = this.props;
return (
-
+
{children}
);
diff --git a/app/javascript/mastodon/features/community_timeline/index.js b/app/javascript/mastodon/features/community_timeline/index.js
index 1cd5cf157..48d2b3f68 100644
--- a/app/javascript/mastodon/features/community_timeline/index.js
+++ b/app/javascript/mastodon/features/community_timeline/index.js
@@ -105,7 +105,7 @@ export default class CommunityTimeline extends React.PureComponent {
const pinned = !!columnId;
return (
-
+
({
@@ -95,7 +96,7 @@ export default class Compose extends React.PureComponent {
}
return (
-
+
{header}
{(multiColumn || isSearchPage) &&
}
diff --git a/app/javascript/mastodon/features/direct_timeline/index.js b/app/javascript/mastodon/features/direct_timeline/index.js
index 2181c75b6..dd289ce56 100644
--- a/app/javascript/mastodon/features/direct_timeline/index.js
+++ b/app/javascript/mastodon/features/direct_timeline/index.js
@@ -76,7 +76,7 @@ export default class DirectTimeline extends React.PureComponent {
const pinned = !!columnId;
return (
-
+
+
({
@@ -115,7 +116,7 @@ export default class GettingStarted extends ImmutablePureComponent {
}
return (
-
+
{multiColumn &&
diff --git a/app/javascript/mastodon/features/hashtag_timeline/index.js b/app/javascript/mastodon/features/hashtag_timeline/index.js
index 15fca9ab4..b67486f07 100644
--- a/app/javascript/mastodon/features/hashtag_timeline/index.js
+++ b/app/javascript/mastodon/features/hashtag_timeline/index.js
@@ -89,7 +89,7 @@ export default class HashtagTimeline extends React.PureComponent {
const pinned = !!columnId;
return (
-
+
+
+
+
+
+
+
{
@@ -404,7 +405,7 @@ export default class Status extends ImmutablePureComponent {
};
return (
-
+
({
- trends: state.getIn(['trends', 'items']),
- loading: state.getIn(['trends', 'isLoading']),
-});
-
-const mapDispatchToProps = dispatch => ({
- fetchTrends: () => dispatch(fetchTrends()),
-});
-
-@connect(mapStateToProps, mapDispatchToProps)
-@injectIntl
-export default class Trends extends ImmutablePureComponent {
-
- static propTypes = {
- intl: PropTypes.object.isRequired,
- trends: ImmutablePropTypes.list,
- fetchTrends: PropTypes.func.isRequired,
- loading: PropTypes.bool,
- };
-
- componentDidMount () {
- this.props.fetchTrends();
- }
-
- handleRefresh = () => {
- this.props.fetchTrends();
- }
-
- render () {
- const { trends, loading, intl } = this.props;
-
- return (
-
-
- )}
- />
-
-
- {trends && trends.map(hashtag => )}
-
-
- );
- }
-
-}
From 885711afb97b772f7c970ed16e17de799a74c923 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Thu, 23 Aug 2018 18:28:59 +0200
Subject: [PATCH 152/196] Fix off-by-one error in aria-posinset (#8388)
Fix #8191
---
.../mastodon/components/intersection_observer_article.js | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/javascript/mastodon/components/intersection_observer_article.js b/app/javascript/mastodon/components/intersection_observer_article.js
index e2ce9ec96..de2203a4b 100644
--- a/app/javascript/mastodon/components/intersection_observer_article.js
+++ b/app/javascript/mastodon/components/intersection_observer_article.js
@@ -109,7 +109,7 @@ export default class IntersectionObserverArticle extends React.Component {
return (
+
{children && React.cloneElement(children, { hidden: false })}
);
From 69ba8f063c43139f811a747a3c17feadd29d423a Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Thu, 23 Aug 2018 19:11:41 +0200
Subject: [PATCH 153/196] When registrations closed, link "Sign up" to
joinmastodon.org (#8395)
Fix #8393
---
app/views/auth/shared/_links.html.haml | 2 +-
app/views/layouts/public.html.haml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/views/auth/shared/_links.html.haml b/app/views/auth/shared/_links.html.haml
index 08b385092..516c625a6 100644
--- a/app/views/auth/shared/_links.html.haml
+++ b/app/views/auth/shared/_links.html.haml
@@ -3,7 +3,7 @@
%li= link_to t('auth.login'), new_session_path(resource_name)
- if devise_mapping.registerable? && controller_name != 'registrations'
- %li= link_to t('auth.register'), new_registration_path(resource_name)
+ %li= link_to t('auth.register'), open_registrations? ? new_registration_path(resource_name) : 'https://joinmastodon.org/#getting-started'
- if devise_mapping.recoverable? && controller_name != 'passwords' && controller_name != 'registrations'
%li= link_to t('auth.forgot_password'), new_password_path(resource_name)
diff --git a/app/views/layouts/public.html.haml b/app/views/layouts/public.html.haml
index ca9dac8bb..6bf7efb23 100644
--- a/app/views/layouts/public.html.haml
+++ b/app/views/layouts/public.html.haml
@@ -14,7 +14,7 @@
= link_to t('settings.back'), root_url, class: 'nav-link nav-button webapp-btn'
- else
= link_to t('auth.login'), new_user_session_path, class: 'webapp-btn nav-link nav-button'
- = link_to t('auth.register'), new_user_registration_path, class: 'webapp-btn nav-link nav-button'
+ = link_to t('auth.register'), open_registrations? ? new_user_registration_path : 'https://joinmastodon.org/#getting-started', class: 'webapp-btn nav-link nav-button'
.container= yield
From 5b5ae018241441192f2a83284856133299f57388 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Thu, 23 Aug 2018 19:20:49 +0200
Subject: [PATCH 154/196] Update light theme (#8392)
Fix #8209
Fix #7566
---
.../styles/mastodon-light/diff.scss | 88 +++++++++++++++++++
1 file changed, 88 insertions(+)
diff --git a/app/javascript/styles/mastodon-light/diff.scss b/app/javascript/styles/mastodon-light/diff.scss
index 84ccd326e..ac161a004 100644
--- a/app/javascript/styles/mastodon-light/diff.scss
+++ b/app/javascript/styles/mastodon-light/diff.scss
@@ -169,6 +169,10 @@
color: $white;
}
+.dropdown-menu__separator {
+ border-bottom-color: lighten($ui-base-color, 12%);
+}
+
// Change the background colors of modals
.actions-modal,
.boost-modal,
@@ -281,3 +285,87 @@
}
}
}
+
+.flash-message {
+ box-shadow: none;
+
+ &.notice {
+ background: rgba($success-green, 0.5);
+ color: lighten($success-green, 12%);
+ }
+
+ &.alert {
+ background: rgba($error-red, 0.5);
+ color: lighten($error-red, 12%);
+ }
+}
+
+.simple_form,
+.table-form {
+ .warning {
+ box-shadow: none;
+ background: rgba($error-red, 0.5);
+ text-shadow: none;
+ }
+}
+
+.status__content,
+.reply-indicator__content {
+ a {
+ color: $highlight-text-color;
+ }
+}
+
+.button.logo-button {
+ color: $white;
+
+ svg path:first-child {
+ fill: $white;
+ }
+}
+
+.public-layout {
+ .header,
+ .public-account-header,
+ .public-account-bio {
+ box-shadow: none;
+ }
+
+ .header {
+ background: lighten($ui-base-color, 12%);
+ }
+
+ .public-account-header {
+ &__image {
+ background: lighten($ui-base-color, 12%);
+
+ &::after {
+ box-shadow: none;
+ }
+ }
+
+ &__tabs {
+ &__name {
+ h1,
+ h1 small {
+ color: $white;
+ }
+ }
+ }
+ }
+}
+
+.account__section-headline a.active::after {
+ border-color: transparent transparent $white;
+}
+
+.hero-widget,
+.box-widget,
+.contact-widget,
+.landing-page__information.contact-widget,
+.moved-account-widget,
+.memoriam-widget,
+.activity-stream,
+.nothing-here {
+ box-shadow: none;
+}
From 43b8df3228291a879170be4da84db63eeacdf144 Mon Sep 17 00:00:00 2001
From: ThibG
Date: Thu, 23 Aug 2018 20:43:27 +0200
Subject: [PATCH 155/196] Update state when opened dropdown is unmounted (fixes
#8397) (#8398)
---
app/javascript/mastodon/components/dropdown_menu.js | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/app/javascript/mastodon/components/dropdown_menu.js b/app/javascript/mastodon/components/dropdown_menu.js
index e83f724e9..a5cf6479b 100644
--- a/app/javascript/mastodon/components/dropdown_menu.js
+++ b/app/javascript/mastodon/components/dropdown_menu.js
@@ -226,6 +226,12 @@ export default class Dropdown extends React.PureComponent {
return this.target;
}
+ componentWillUnmount = () => {
+ if (this.state.id === this.props.openDropdownId) {
+ this.handleClose();
+ }
+ }
+
render () {
const { icon, items, size, title, disabled, dropdownPlacement, openDropdownId } = this.props;
const open = this.state.id === openDropdownId;
From 248df68c36a2f1ffd9c214afe7d1b0c62b4a5f27 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Thu, 23 Aug 2018 20:56:57 +0200
Subject: [PATCH 156/196] Give focused status a sensible aria-label for screen
readers (#8387)
* Give focused status a sensible aria-label for screen readers
Fix #8192
* Use content warning in aria-label unless expanded
---
app/javascript/mastodon/components/status.js | 28 ++++++++++++++++---
.../mastodon/features/status/index.js | 3 +-
2 files changed, 26 insertions(+), 5 deletions(-)
diff --git a/app/javascript/mastodon/components/status.js b/app/javascript/mastodon/components/status.js
index e653906f1..9a3fd3576 100644
--- a/app/javascript/mastodon/components/status.js
+++ b/app/javascript/mastodon/components/status.js
@@ -8,7 +8,7 @@ import DisplayName from './display_name';
import StatusContent from './status_content';
import StatusActionBar from './status_action_bar';
import AttachmentList from './attachment_list';
-import { FormattedMessage } from 'react-intl';
+import { injectIntl, FormattedMessage } from 'react-intl';
import ImmutablePureComponent from 'react-immutable-pure-component';
import { MediaGallery, Video } from '../features/ui/util/async-components';
import { HotKeys } from 'react-hotkeys';
@@ -18,6 +18,24 @@ import classNames from 'classnames';
// to use the progress bar to show download progress
import Bundle from '../features/ui/components/bundle';
+export const textForScreenReader = (intl, status, rebloggedByText = false, expanded = false) => {
+ const displayName = status.getIn(['account', 'display_name']);
+
+ const values = [
+ displayName.length === 0 ? status.getIn(['account', 'acct']).split('@')[0] : displayName,
+ status.get('spoiler_text') && !expanded ? status.get('spoiler_text') : status.get('search_index').slice(status.get('spoiler_text').length),
+ intl.formatDate(status.get('created_at'), { hour: '2-digit', minute: '2-digit', month: 'short', day: 'numeric' }),
+ status.getIn(['account', 'acct']),
+ ];
+
+ if (rebloggedByText) {
+ values.push(rebloggedByText);
+ }
+
+ return values.join(', ');
+};
+
+@injectIntl
export default class Status extends ImmutablePureComponent {
static contextTypes = {
@@ -138,9 +156,9 @@ export default class Status extends ImmutablePureComponent {
render () {
let media = null;
- let statusAvatar, prepend;
+ let statusAvatar, prepend, rebloggedByText;
- const { hidden, featured } = this.props;
+ const { intl, hidden, featured } = this.props;
let { status, account, ...other } = this.props;
@@ -189,6 +207,8 @@ export default class Status extends ImmutablePureComponent {
);
+ rebloggedByText = intl.formatMessage({ id: 'status.reblogged_by', defaultMessage: '{name} boosted' }, { name: status.getIn(['account', 'acct']) });
+
account = status.get('account');
status = status.get('reblog');
}
@@ -248,7 +268,7 @@ export default class Status extends ImmutablePureComponent {
return (
-
+
{prepend}
diff --git a/app/javascript/mastodon/features/status/index.js b/app/javascript/mastodon/features/status/index.js
index 98b321dbd..45e36e3eb 100644
--- a/app/javascript/mastodon/features/status/index.js
+++ b/app/javascript/mastodon/features/status/index.js
@@ -43,6 +43,7 @@ import ImmutablePureComponent from 'react-immutable-pure-component';
import { HotKeys } from 'react-hotkeys';
import { boostModal, deleteModal } from '../../initial_state';
import { attachFullscreenListener, detachFullscreenListener, isFullscreen } from '../ui/util/fullscreen';
+import { textForScreenReader } from '../../components/status';
const messages = defineMessages({
deleteConfirm: { id: 'confirmations.delete.confirm', defaultMessage: 'Delete' },
@@ -418,7 +419,7 @@ export default class Status extends ImmutablePureComponent {
{ancestors}
-
+
Date: Thu, 23 Aug 2018 21:21:15 +0200
Subject: [PATCH 157/196] Preserve hashtag casing in web UI hashtag history
(#8394)
Fix #8241
---
app/javascript/mastodon/actions/compose.js | 8 ++++----
app/javascript/mastodon/reducers/compose.js | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/app/javascript/mastodon/actions/compose.js b/app/javascript/mastodon/actions/compose.js
index fe3e831d5..6d975cd1e 100644
--- a/app/javascript/mastodon/actions/compose.js
+++ b/app/javascript/mastodon/actions/compose.js
@@ -130,7 +130,7 @@ export function submitCompose() {
'Idempotency-Key': getState().getIn(['compose', 'idempotencyKey']),
},
}).then(function (response) {
- dispatch(insertIntoTagHistory(response.data.tags));
+ dispatch(insertIntoTagHistory(response.data.tags, status));
dispatch(submitComposeSuccess({ ...response.data }));
// To make the app more responsive, immediately get the status into the columns
@@ -390,13 +390,13 @@ export function hydrateCompose() {
};
}
-function insertIntoTagHistory(tags) {
+function insertIntoTagHistory(recognizedTags, text) {
return (dispatch, getState) => {
const state = getState();
const oldHistory = state.getIn(['compose', 'tagHistory']);
const me = state.getIn(['meta', 'me']);
- const names = tags.map(({ name }) => name);
- const intersectedOldHistory = oldHistory.filter(name => !names.includes(name));
+ const names = recognizedTags.map(tag => text.match(new RegExp(`#${tag.name}`, 'i'))[0].slice(1));
+ const intersectedOldHistory = oldHistory.filter(name => names.findIndex(newName => newName.toLowerCase() === name.toLowerCase()) === -1);
names.push(...intersectedOldHistory.toJS());
diff --git a/app/javascript/mastodon/reducers/compose.js b/app/javascript/mastodon/reducers/compose.js
index 552f659c9..67d55f66f 100644
--- a/app/javascript/mastodon/reducers/compose.js
+++ b/app/javascript/mastodon/reducers/compose.js
@@ -131,7 +131,7 @@ const updateSuggestionTags = (state, token) => {
return state.merge({
suggestions: state.get('tagHistory')
- .filter(tag => tag.startsWith(prefix))
+ .filter(tag => tag.toLowerCase().startsWith(prefix.toLowerCase()))
.slice(0, 4)
.map(tag => '#' + tag),
suggestion_token: token,
From 7786e1357bbe456243679c91f88679cdd260fa8f Mon Sep 17 00:00:00 2001
From: ThibG
Date: Thu, 23 Aug 2018 21:44:27 +0200
Subject: [PATCH 158/196] Only display web push notifications after API call
(fixes #7902) (#8396)
* Only display web push notifications after API call (fixes #7902)
* Decode then truncate instead of truncating then decoding in webpush serializer
---
.../service_worker/web_push_notifications.js | 20 ++++++++++---------
.../web/notification_serializer.rb | 4 ++--
2 files changed, 13 insertions(+), 11 deletions(-)
diff --git a/app/javascript/mastodon/service_worker/web_push_notifications.js b/app/javascript/mastodon/service_worker/web_push_notifications.js
index 3318bbadc..d61d916b1 100644
--- a/app/javascript/mastodon/service_worker/web_push_notifications.js
+++ b/app/javascript/mastodon/service_worker/web_push_notifications.js
@@ -80,15 +80,7 @@ const handlePush = (event) => {
// Placeholder until more information can be loaded
event.waitUntil(
- notify({
- title,
- body,
- icon,
- tag: notification_id,
- timestamp: new Date(),
- badge: '/badge.png',
- data: { access_token, preferred_locale, url: '/web/notifications' },
- }).then(() => fetchFromApi(`/api/v1/notifications/${notification_id}`, 'get', access_token)).then(notification => {
+ fetchFromApi(`/api/v1/notifications/${notification_id}`, 'get', access_token).then(notification => {
const options = {};
options.title = formatMessage(`notification.${notification.type}`, preferred_locale, { name: notification.account.display_name.length > 0 ? notification.account.display_name : notification.account.username });
@@ -112,6 +104,16 @@ const handlePush = (event) => {
}
return notify(options);
+ }).catch(() => {
+ return notify({
+ title,
+ body,
+ icon,
+ tag: notification_id,
+ timestamp: new Date(),
+ badge: '/badge.png',
+ data: { access_token, preferred_locale, url: '/web/notifications' },
+ });
})
);
};
diff --git a/app/serializers/web/notification_serializer.rb b/app/serializers/web/notification_serializer.rb
index 43ba4d92a..ee83ec8b2 100644
--- a/app/serializers/web/notification_serializer.rb
+++ b/app/serializers/web/notification_serializer.rb
@@ -33,7 +33,7 @@ class Web::NotificationSerializer < ActiveModel::Serializer
end
def body
- str = truncate(strip_tags(object.target_status&.spoiler_text&.presence || object.target_status&.text || object.from_account.note), length: 140)
- HTMLEntities.new.decode(str.to_str) # Do not encode entities, since this value will not be used in HTML
+ str = strip_tags(object.target_status&.spoiler_text&.presence || object.target_status&.text || object.from_account.note)
+ truncate(HTMLEntities.new.decode(str.to_str), length: 140) # Do not encode entities, since this value will not be used in HTML
end
end
From 9d58daac6c860b599f8c266b8bb10c6170220dd3 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Thu, 23 Aug 2018 21:51:56 +0200
Subject: [PATCH 159/196] Fix regression when suspending not from report
(#8400)
Regression from #8353
---
app/controllers/admin/suspensions_controller.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/controllers/admin/suspensions_controller.rb b/app/controllers/admin/suspensions_controller.rb
index 0c7bdad9e..f9bbf36fb 100644
--- a/app/controllers/admin/suspensions_controller.rb
+++ b/app/controllers/admin/suspensions_controller.rb
@@ -14,7 +14,7 @@ module Admin
@suspension = Form::AdminSuspensionConfirmation.new(suspension_params)
if suspension_params[:acct] == @account.acct
- resolve_report! if suspension_params[:report_id]
+ resolve_report! if suspension_params[:report_id].present?
perform_suspend!
mark_reports_resolved!
redirect_to admin_accounts_path
From 2f34b747b3f765a37d7b23e70de42005c0b62f58 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Thu, 23 Aug 2018 23:26:29 +0200
Subject: [PATCH 160/196] Allow mods to disable login, improve message when
login disabled (#8329)
* Allow moderators to disable/enable login
* Instead of rejecting login, show forbidden error when login disabled
Avoid confusion because when login is rejected, the message is that
the account is not activated, which is wrong.
* Fix tests
---
app/controllers/api/base_controller.rb | 2 ++
app/controllers/application_controller.rb | 6 +++---
app/controllers/auth/sessions_controller.rb | 2 +-
app/models/user.rb | 4 ----
app/policies/user_policy.rb | 4 ++--
spec/models/user_spec.rb | 2 +-
6 files changed, 9 insertions(+), 11 deletions(-)
diff --git a/app/controllers/api/base_controller.rb b/app/controllers/api/base_controller.rb
index 770a69921..0b3735087 100644
--- a/app/controllers/api/base_controller.rb
+++ b/app/controllers/api/base_controller.rb
@@ -7,6 +7,8 @@ class Api::BaseController < ApplicationController
include RateLimitHeaders
skip_before_action :store_current_location
+ skip_before_action :check_user_permissions
+
protect_from_forgery with: :null_session
rescue_from ActiveRecord::RecordInvalid, Mastodon::ValidationError do |e|
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 7ddd26ec0..d266fa1bd 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -24,7 +24,7 @@ class ApplicationController < ActionController::Base
rescue_from Mastodon::NotPermittedError, with: :forbidden
before_action :store_current_location, except: :raise_not_found, unless: :devise_controller?
- before_action :check_suspension, if: :user_signed_in?
+ before_action :check_user_permissions, if: :user_signed_in?
def raise_not_found
raise ActionController::RoutingError, "No route matches #{params[:unmatched_route]}"
@@ -48,8 +48,8 @@ class ApplicationController < ActionController::Base
forbidden unless current_user&.staff?
end
- def check_suspension
- forbidden if current_user.account.suspended?
+ def check_user_permissions
+ forbidden if current_user.disabled? || current_user.account.suspended?
end
def after_sign_out_path_for(_resource_or_scope)
diff --git a/app/controllers/auth/sessions_controller.rb b/app/controllers/auth/sessions_controller.rb
index 2e721160b..62b4a6377 100644
--- a/app/controllers/auth/sessions_controller.rb
+++ b/app/controllers/auth/sessions_controller.rb
@@ -6,7 +6,7 @@ class Auth::SessionsController < Devise::SessionsController
layout 'auth'
skip_before_action :require_no_authentication, only: [:create]
- skip_before_action :check_suspension, only: [:destroy]
+ skip_before_action :check_user_permissions, only: [:destroy]
prepend_before_action :authenticate_with_two_factor, if: :two_factor_enabled?, only: [:create]
before_action :set_instance_presenter, only: [:new]
before_action :set_body_classes
diff --git a/app/models/user.rb b/app/models/user.rb
index a2cf2565f..75b7e9e7c 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -216,10 +216,6 @@ class User < ApplicationRecord
save!
end
- def active_for_authentication?
- super && !disabled?
- end
-
def setting_default_privacy
settings.default_privacy || (account.locked? ? 'private' : 'public')
end
diff --git a/app/policies/user_policy.rb b/app/policies/user_policy.rb
index dabdf707a..57af5c61c 100644
--- a/app/policies/user_policy.rb
+++ b/app/policies/user_policy.rb
@@ -18,11 +18,11 @@ class UserPolicy < ApplicationPolicy
end
def enable?
- admin?
+ staff?
end
def disable?
- admin? && !record.admin?
+ staff? && !record.admin?
end
def promote?
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index 93a6c26fb..015e90edc 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -512,7 +512,7 @@ RSpec.describe User, type: :model do
context 'when user is confirmed' do
let(:confirmed_at) { Time.zone.now }
- it { is_expected.to be false }
+ it { is_expected.to be true }
end
context 'when user is not confirmed' do
From 23752639b20abd26eefb199172da9fc3ceae172e Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Thu, 23 Aug 2018 23:30:57 +0200
Subject: [PATCH 161/196] Bump version to 2.5.0rc1 (#8356)
---
lib/mastodon/version.rb | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb
index 093485111..a490478cd 100644
--- a/lib/mastodon/version.rb
+++ b/lib/mastodon/version.rb
@@ -9,11 +9,11 @@ module Mastodon
end
def minor
- 4
+ 5
end
def patch
- 3
+ 0
end
def pre
@@ -21,7 +21,7 @@ module Mastodon
end
def flags
- ''
+ 'rc1'
end
def to_a
From a2cabf3f4af9271d8bfdb13c1ae2b7a8b4e6fb88 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Fri, 24 Aug 2018 04:33:27 +0200
Subject: [PATCH 162/196] Add admin custom CSS setting (#8399)
Fix #3894
---
app/controllers/admin/settings_controller.rb | 1 +
app/controllers/custom_css_controller.rb | 10 ++++++++++
app/javascript/styles/mastodon/forms.scss | 11 +++++++++++
app/models/form/admin_settings.rb | 2 ++
app/presenters/instance_presenter.rb | 2 +-
app/views/admin/settings/edit.html.haml | 2 +-
app/views/layouts/application.html.haml | 3 +++
config/routes.rb | 1 +
8 files changed, 30 insertions(+), 2 deletions(-)
create mode 100644 app/controllers/custom_css_controller.rb
diff --git a/app/controllers/admin/settings_controller.rb b/app/controllers/admin/settings_controller.rb
index 23e0444d0..7d38f76ae 100644
--- a/app/controllers/admin/settings_controller.rb
+++ b/app/controllers/admin/settings_controller.rb
@@ -24,6 +24,7 @@ module Admin
peers_api_enabled
show_known_fediverse_at_about_page
preview_sensitive_media
+ custom_css
).freeze
BOOLEAN_SETTINGS = %w(
diff --git a/app/controllers/custom_css_controller.rb b/app/controllers/custom_css_controller.rb
new file mode 100644
index 000000000..31e501609
--- /dev/null
+++ b/app/controllers/custom_css_controller.rb
@@ -0,0 +1,10 @@
+# frozen_string_literal: true
+
+class CustomCssController < ApplicationController
+ before_action :set_cache_headers
+
+ def show
+ skip_session!
+ render plain: Setting.custom_css || '', content_type: 'text/css'
+ end
+end
diff --git a/app/javascript/styles/mastodon/forms.scss b/app/javascript/styles/mastodon/forms.scss
index 020be5ad2..144b4a519 100644
--- a/app/javascript/styles/mastodon/forms.scss
+++ b/app/javascript/styles/mastodon/forms.scss
@@ -621,3 +621,14 @@ code {
.scope-danger {
color: $warning-red;
}
+
+.form_admin_settings_site_short_description,
+.form_admin_settings_site_description,
+.form_admin_settings_site_extended_description,
+.form_admin_settings_site_terms,
+.form_admin_settings_custom_css,
+.form_admin_settings_closed_registrations_message {
+ textarea {
+ font-family: 'mastodon-font-monospace', monospace;
+ }
+}
diff --git a/app/models/form/admin_settings.rb b/app/models/form/admin_settings.rb
index db46cda7b..9fef7da97 100644
--- a/app/models/form/admin_settings.rb
+++ b/app/models/form/admin_settings.rb
@@ -42,6 +42,8 @@ class Form::AdminSettings
:show_known_fediverse_at_about_page=,
:preview_sensitive_media,
:preview_sensitive_media=,
+ :custom_css,
+ :custom_css=,
to: Setting
)
end
diff --git a/app/presenters/instance_presenter.rb b/app/presenters/instance_presenter.rb
index 31365b646..a4e4af889 100644
--- a/app/presenters/instance_presenter.rb
+++ b/app/presenters/instance_presenter.rb
@@ -14,7 +14,7 @@ class InstancePresenter
)
def contact_account
- Account.find_local(Setting.site_contact_username)
+ Account.find_local(Setting.site_contact_username.gsub(/\A@/, ''))
end
def user_count
diff --git a/app/views/admin/settings/edit.html.haml b/app/views/admin/settings/edit.html.haml
index b5aa176a2..f40edc35a 100644
--- a/app/views/admin/settings/edit.html.haml
+++ b/app/views/admin/settings/edit.html.haml
@@ -49,7 +49,7 @@
.fields-group
= f.input :site_extended_description, wrapper: :with_block_label, as: :text, label: t('admin.settings.site_description_extended.title'), hint: t('admin.settings.site_description_extended.desc_html'), input_html: { rows: 8 }
= f.input :site_terms, wrapper: :with_block_label, as: :text, label: t('admin.settings.site_terms.title'), hint: t('admin.settings.site_terms.desc_html'), input_html: { rows: 8 }
-
+ = f.input :custom_css, wrapper: :with_block_label, as: :text, input_html: { rows: 8 }, label: t('admin.settings.custom_css.title'), hint: t('admin.settings.custom_css.desc_html')
%hr/
.fields-group
diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml
index df898d5a2..68a903197 100755
--- a/app/views/layouts/application.html.haml
+++ b/app/views/layouts/application.html.haml
@@ -19,6 +19,9 @@
= javascript_pack_tag "locale_#{I18n.locale}", integrity: true, crossorigin: 'anonymous'
= csrf_meta_tags
+ - if Setting.custom_css.present?
+ = stylesheet_link_tag custom_css_path, media: 'all'
+
= yield :header_tags
- body_classes ||= @body_classes || ''
diff --git a/config/routes.rb b/config/routes.rb
index 80a8b7b4c..0e54157dc 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -23,6 +23,7 @@ Rails.application.routes.draw do
get '.well-known/webfinger', to: 'well_known/webfinger#show', as: :webfinger
get 'manifest', to: 'manifests#show', defaults: { format: 'json' }
get 'intent', to: 'intents#show'
+ get 'custom.css', to: 'custom_css#show', as: :custom_css
devise_scope :user do
get '/invite/:invite_code', to: 'auth/registrations#new', as: :public_invite
From a083604d1d9d8f53c1d69003591e1cab69c620a3 Mon Sep 17 00:00:00 2001
From: MIYAGI Hikaru
Date: Sat, 25 Aug 2018 01:16:53 +0900
Subject: [PATCH 163/196] Support UNIX domain socket for streaming service
without using PORT (#8217)
* Support UNIX domain socket for streaming service without using PORT
The use of UNIX domain socket for streaming service was not officially supported,
but it was made unofficial to use by setting a path to PORT.
From now on, SOCKET will be used just like setting for puma.
* Hundle relative path
---
streaming/index.js | 17 ++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)
diff --git a/streaming/index.js b/streaming/index.js
index d7bfa6542..b5f6dbd87 100644
--- a/streaming/index.js
+++ b/streaming/index.js
@@ -9,6 +9,7 @@ const log = require('npmlog');
const url = require('url');
const WebSocket = require('uws');
const uuid = require('uuid');
+const fs = require('fs');
const env = process.env.NODE_ENV || 'development';
@@ -70,6 +71,9 @@ const redisUrlToClient = (defaultConfig, redisUrl) => {
const numWorkers = +process.env.STREAMING_CLUSTER_NUM || (env === 'development' ? 1 : Math.max(os.cpus().length - 1, 1));
const startMaster = () => {
+ if (!process.env.SOCKET && process.env.PORT && isNaN(+process.env.PORT)) {
+ log.warn('UNIX domain socket is now supported by using SOCKET. Please migrate from PORT hack.');
+ }
log.info(`Starting streaming API server master with ${numWorkers} workers`);
};
@@ -574,9 +578,16 @@ const startWorker = (workerId) => {
});
}, 30000);
- server.listen(process.env.PORT || 4000, process.env.BIND || '0.0.0.0', () => {
- log.info(`Worker ${workerId} now listening on ${server.address().address}:${server.address().port}`);
- });
+ if (process.env.SOCKET || process.env.PORT && isNaN(+process.env.PORT)) {
+ server.listen(process.env.SOCKET || process.env.PORT, () => {
+ fs.chmodSync(server.address(), 0o666);
+ log.info(`Worker ${workerId} now listening on ${server.address()}`);
+ });
+ } else {
+ server.listen(+process.env.PORT || 4000, process.env.BIND || '0.0.0.0', () => {
+ log.info(`Worker ${workerId} now listening on ${server.address().address}:${server.address().port}`);
+ });
+ }
const onExit = () => {
log.info(`Worker ${workerId} exiting, bye bye`);
From b37ae645788e1951e3b1737519f32803e5e1b6ad Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Fri, 24 Aug 2018 18:17:11 +0200
Subject: [PATCH 164/196] Upgrade Doorkeeper to 5.0.0 (#8409)
See doorkeeper-gem/doorkeeper#1137
---
Gemfile | 2 +-
Gemfile.lock | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/Gemfile b/Gemfile
index 516d397a2..d7275017f 100644
--- a/Gemfile
+++ b/Gemfile
@@ -41,7 +41,7 @@ gem 'omniauth-cas', '~> 1.1'
gem 'omniauth-saml', '~> 1.10'
gem 'omniauth', '~> 1.2'
-gem 'doorkeeper', '~> 4.4'
+gem 'doorkeeper', '~> 5.0'
gem 'fast_blank', '~> 1.0'
gem 'fastimage'
gem 'goldfinger', '~> 2.1'
diff --git a/Gemfile.lock b/Gemfile.lock
index ea0e3f0cd..a11a715c4 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -181,7 +181,7 @@ GEM
docile (1.3.0)
domain_name (0.5.20180417)
unf (>= 0.0.5, < 1.0.0)
- doorkeeper (4.4.2)
+ doorkeeper (5.0.0)
railties (>= 4.2)
dotenv (2.2.2)
dotenv-rails (2.2.2)
@@ -670,7 +670,7 @@ DEPENDENCIES
devise (~> 4.4)
devise-two-factor (~> 3.0)
devise_pam_authenticatable2 (~> 9.1)
- doorkeeper (~> 4.4)
+ doorkeeper (~> 5.0)
dotenv-rails (~> 2.2, < 2.3)
fabrication (~> 2.20)
faker (~> 1.8)
From 869a3af3c0a5b441c09ddd028247cc8f2c4fa4df Mon Sep 17 00:00:00 2001
From: Sylvhem
Date: Fri, 24 Aug 2018 21:46:59 +0200
Subject: [PATCH 165/196] Reword the "Delete and rewrite" warning (#8415)
* Change "Delete and rewrite" warning
Reword the "Delete and rewrite" warning to make it clear that replies are not deleted.
* Update the French translation
Update the French translation to reflect the changes made to the "Delete and rewrite" warning.
---
app/javascript/mastodon/locales/en.json | 2 +-
app/javascript/mastodon/locales/fr.json | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json
index e00ae84f9..348b36812 100644
--- a/app/javascript/mastodon/locales/en.json
+++ b/app/javascript/mastodon/locales/en.json
@@ -87,7 +87,7 @@
"confirmations.mute.confirm": "Mute",
"confirmations.mute.message": "Are you sure you want to mute {name}?",
"confirmations.redraft.confirm": "Delete & redraft",
- "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
+ "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.",
"confirmations.unfollow.confirm": "Unfollow",
"confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
"embed.instructions": "Embed this status on your website by copying the code below.",
diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json
index 835b1af65..d3fca584d 100644
--- a/app/javascript/mastodon/locales/fr.json
+++ b/app/javascript/mastodon/locales/fr.json
@@ -87,7 +87,7 @@
"confirmations.mute.confirm": "Masquer",
"confirmations.mute.message": "Confirmez-vous le masquage de {name} ?",
"confirmations.redraft.confirm": "Effacer et ré-écrire",
- "confirmations.redraft.message": "Êtes-vous sûr·e de vouloir effacer ce statut pour le ré-écrire ? Vous perdrez toutes ses réponses, ses repartages et ses mises en favori.",
+ "confirmations.redraft.message": "Êtes-vous sûr·e de vouloir effacer ce statut pour le ré-écrire ? Ses partages ainsi que ses mises en favori seront perdu·e·s et ses réponses seront orphelines.",
"confirmations.unfollow.confirm": "Ne plus suivre",
"confirmations.unfollow.message": "Voulez-vous arrêter de suivre {name} ?",
"embed.instructions": "Intégrez ce statut à votre site en copiant le code ci-dessous.",
From ac092d03e7a781d27aff9cb9ea4637be9c5f2a2a Mon Sep 17 00:00:00 2001
From: M Somerville
Date: Fri, 24 Aug 2018 22:55:41 +0100
Subject: [PATCH 166/196] Add missing video descriptions (#8416)
* Pass through video description as necessary.
* Add title to video, matching aria-label.
---
app/javascript/mastodon/components/extended_video_player.js | 1 +
app/javascript/mastodon/components/media_gallery.js | 1 +
app/javascript/mastodon/components/status.js | 1 +
.../mastodon/features/report/components/status_check_box.js | 1 +
.../mastodon/features/status/components/detailed_status.js | 1 +
app/javascript/mastodon/features/video/index.js | 1 +
app/views/admin/reports/_status.html.haml | 2 +-
app/views/stream_entries/_detailed_status.html.haml | 2 +-
app/views/stream_entries/_simple_status.html.haml | 2 +-
9 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/app/javascript/mastodon/components/extended_video_player.js b/app/javascript/mastodon/components/extended_video_player.js
index 9e2f6835a..009c0d559 100644
--- a/app/javascript/mastodon/components/extended_video_player.js
+++ b/app/javascript/mastodon/components/extended_video_player.js
@@ -50,6 +50,7 @@ export default class ExtendedVideoPlayer extends React.PureComponent {
role='button'
tabIndex='0'
aria-label={alt}
+ title={alt}
muted={muted}
controls={controls}
loop={!controls}
diff --git a/app/javascript/mastodon/components/media_gallery.js b/app/javascript/mastodon/components/media_gallery.js
index 63bc4a59b..6e1310cd6 100644
--- a/app/javascript/mastodon/components/media_gallery.js
+++ b/app/javascript/mastodon/components/media_gallery.js
@@ -154,6 +154,7 @@ class Item extends React.PureComponent {
Date: Sat, 25 Aug 2018 10:03:35 +0900
Subject: [PATCH 167/196] Revice Japanese translation of `deleted_status`
(#8419)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
レポート関連の翻訳にある`deleted_status`は、ステータスが削除された残骸を示すものなので、
動作ではなく名詞として翻訳する方がより適切です。
---
config/locales/ja.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index 486180a2e..9662da527 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -185,7 +185,7 @@ ja:
unsuspend_account: "%{name} さんが %{target} さんの停止を解除しました"
update_custom_emoji: "%{name} さんがカスタム絵文字 %{target} を更新しました"
update_status: "%{name} さんが %{target} さんの投稿を更新しました"
- deleted_status: "(削除されました)"
+ deleted_status: "(削除済)"
title: 操作履歴
custom_emojis:
by_domain: ドメイン
From 793eea29823a44fd4950f87898ecf0ff3b49351d Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Sat, 25 Aug 2018 13:25:39 +0200
Subject: [PATCH 168/196] Add improved CLI interface for removing remote media
(#8411)
./bin/tootctl media remove --days 7 --background
Make the old rake task point to it
---
.../maintenance/destroy_media_worker.rb | 2 +-
.../redownload_account_media_worker.rb | 2 +-
.../maintenance/uncache_media_worker.rb | 2 +-
bin/tootctl | 4 ++
lib/cli.rb | 11 +++++
lib/mastodon/media_cli.rb | 47 +++++++++++++++++++
lib/tasks/mastodon.rake | 11 ++---
7 files changed, 68 insertions(+), 11 deletions(-)
create mode 100755 bin/tootctl
create mode 100644 lib/cli.rb
create mode 100644 lib/mastodon/media_cli.rb
diff --git a/app/workers/maintenance/destroy_media_worker.rb b/app/workers/maintenance/destroy_media_worker.rb
index 5f052983b..cde33d6d7 100644
--- a/app/workers/maintenance/destroy_media_worker.rb
+++ b/app/workers/maintenance/destroy_media_worker.rb
@@ -6,7 +6,7 @@ class Maintenance::DestroyMediaWorker
sidekiq_options queue: 'pull'
def perform(media_attachment_id)
- media = MediaAttachment.find(media_attachment_id)
+ media = media_attachment_id.is_a?(MediaAttachment) ? media_attachment_id : MediaAttachment.find(media_attachment_id)
media.destroy
rescue ActiveRecord::RecordNotFound
true
diff --git a/app/workers/maintenance/redownload_account_media_worker.rb b/app/workers/maintenance/redownload_account_media_worker.rb
index fc26815f2..6afbe6e19 100644
--- a/app/workers/maintenance/redownload_account_media_worker.rb
+++ b/app/workers/maintenance/redownload_account_media_worker.rb
@@ -6,7 +6,7 @@ class Maintenance::RedownloadAccountMediaWorker
sidekiq_options queue: 'pull', retry: false
def perform(account_id)
- account = Account.find(account_id)
+ account = account_id.is_a?(Account) ? account_id : Account.find(account_id)
account.reset_avatar!
account.reset_header!
account.save
diff --git a/app/workers/maintenance/uncache_media_worker.rb b/app/workers/maintenance/uncache_media_worker.rb
index 2d1a670a7..4bc62ef75 100644
--- a/app/workers/maintenance/uncache_media_worker.rb
+++ b/app/workers/maintenance/uncache_media_worker.rb
@@ -6,7 +6,7 @@ class Maintenance::UncacheMediaWorker
sidekiq_options queue: 'pull'
def perform(media_attachment_id)
- media = MediaAttachment.find(media_attachment_id)
+ media = media_attachment_id.is_a?(MediaAttachment) ? media_attachment_id : MediaAttachment.find(media_attachment_id)
return if media.file.blank?
diff --git a/bin/tootctl b/bin/tootctl
new file mode 100755
index 000000000..2fe02523a
--- /dev/null
+++ b/bin/tootctl
@@ -0,0 +1,4 @@
+#!/usr/bin/env ruby
+APP_PATH = File.expand_path('../config/application', __dir__)
+require_relative '../lib/cli'
+Mastodon::CLI.start(ARGV)
diff --git a/lib/cli.rb b/lib/cli.rb
new file mode 100644
index 000000000..7e82806b6
--- /dev/null
+++ b/lib/cli.rb
@@ -0,0 +1,11 @@
+# frozen_string_literal: true
+
+require 'thor'
+require_relative 'mastodon/media_cli'
+
+module Mastodon
+ class CLI < Thor
+ desc 'media SUBCOMMAND ...ARGS', 'manage media files'
+ subcommand 'media', Mastodon::MediaCLI
+ end
+end
diff --git a/lib/mastodon/media_cli.rb b/lib/mastodon/media_cli.rb
new file mode 100644
index 000000000..cc6ad07d9
--- /dev/null
+++ b/lib/mastodon/media_cli.rb
@@ -0,0 +1,47 @@
+# frozen_string_literal: true
+
+require_relative '../../config/boot'
+require_relative '../../config/environment'
+
+# rubocop:disable Rails/Output
+
+module Mastodon
+ class MediaCLI < Thor
+ option :days, type: :numeric, default: 7
+ option :background, type: :boolean, default: false
+ desc 'remove', 'remove remote media files'
+ long_desc <<-DESC
+ Removes locally cached copies of media attachments from other servers.
+
+ The --days option specifies how old media attachments have to be before
+ they are removed. It defaults to 7 days.
+
+ With the --background option, instead of deleting the files sequentially,
+ they will be queued into Sidekiq and the command will exit as soon as
+ possible. In Sidekiq they will be processed with higher concurrency, but
+ it may impact other operations of the Mastodon server, and it may overload
+ the underlying file storage.
+ DESC
+ def remove
+ time_ago = options[:days].days.ago
+ queued = 0
+
+ MediaAttachment.where.not(remote_url: '').where.not(file_file_name: nil).where('created_at < ?', time_ago).select(:id).reorder(nil).find_in_batches do |media_attachments|
+ if options[:background]
+ queued += media_attachments.size
+ Maintenance::UncacheMediaWorker.push_bulk(media_attachments.map(&:id))
+ else
+ media_attachments.each do |m|
+ Maintenance::UncacheMediaWorker.new.perform(m)
+ print '.'
+ end
+ end
+ end
+
+ puts
+ puts "Scheduled the deletion of #{queued} media attachments" if options[:background]
+ end
+ end
+end
+
+# rubocop:enable Rails/Output
diff --git a/lib/tasks/mastodon.rake b/lib/tasks/mastodon.rake
index 191ce634c..9ce39335d 100644
--- a/lib/tasks/mastodon.rake
+++ b/lib/tasks/mastodon.rake
@@ -512,14 +512,9 @@ namespace :mastodon do
desc 'Remove cached remote media attachments that are older than NUM_DAYS. By default 7 (week)'
task remove_remote: :environment do
- time_ago = ENV.fetch('NUM_DAYS') { 7 }.to_i.days.ago
- nb_media_attachments = 0
-
- MediaAttachment.where.not(remote_url: '').where.not(file_file_name: nil).where('created_at < ?', time_ago).select(:id).reorder(nil).find_in_batches do |media_attachments|
- nb_media_attachments += media_attachments.length
- Maintenance::UncacheMediaWorker.push_bulk(media_attachments.map(&:id))
- end
- puts "Scheduled the deletion of #{nb_media_attachments} media attachments"
+ require_relative '../mastodon/media_cli'
+ cli = Mastodon::MediaCLI.new([], days: ENV['NUM_DAYS'] || 7)
+ cli.invoke(:remove)
end
desc 'Set unknown attachment type for remote-only attachments'
From 29da56cf75c1381b31a8b26738a94eff482f8099 Mon Sep 17 00:00:00 2001
From: M Somerville
Date: Sat, 25 Aug 2018 12:26:17 +0100
Subject: [PATCH 169/196] Hide reject media checkbox when not relevant. (#8426)
---
app/javascript/packs/admin.js | 7 +++++++
app/views/admin/domain_blocks/new.html.haml | 3 +++
2 files changed, 10 insertions(+)
diff --git a/app/javascript/packs/admin.js b/app/javascript/packs/admin.js
index 5dbcc03d3..ce5f70ee7 100644
--- a/app/javascript/packs/admin.js
+++ b/app/javascript/packs/admin.js
@@ -39,3 +39,10 @@ delegate(document, '.media-spoiler-hide-button', 'click', () => {
element.click();
});
});
+
+delegate(document, '#domain_block_severity', 'change', ({ target }) => {
+ const rejectMediaDiv = document.querySelector('.input.with_label.domain_block_reject_media');
+ if (rejectMediaDiv) {
+ rejectMediaDiv.style.display = (target.value === 'suspend') ? 'none' : 'block';
+ }
+});
diff --git a/app/views/admin/domain_blocks/new.html.haml b/app/views/admin/domain_blocks/new.html.haml
index 38fa90169..2b8b24e23 100644
--- a/app/views/admin/domain_blocks/new.html.haml
+++ b/app/views/admin/domain_blocks/new.html.haml
@@ -1,3 +1,6 @@
+- content_for :header_tags do
+ = javascript_pack_tag 'admin', integrity: true, async: true, crossorigin: 'anonymous'
+
- content_for :page_title do
= t('.title')
From 2bba6e582d4e8dcf119177e36f1e7fcf3873aeb6 Mon Sep 17 00:00:00 2001
From: M Somerville
Date: Sat, 25 Aug 2018 12:27:08 +0100
Subject: [PATCH 170/196] Rename S3_CLOUDFRONT_HOST to S3_ALIAS_HOST. (#8423)
Still check for S3_CLOUDFRONT_HOST for existing installs.
---
.env.nanobox | 4 ++--
.env.production.sample | 4 ++--
config/initializers/paperclip.rb | 4 ++--
config/webpack/production.js | 4 ++--
lib/tasks/mastodon.rake | 2 +-
5 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/.env.nanobox b/.env.nanobox
index 8e0af6a8a..b60b6ee68 100644
--- a/.env.nanobox
+++ b/.env.nanobox
@@ -136,8 +136,8 @@ SMTP_FROM_ADDRESS=notifications@${APP_NAME}.nanoapp.io
# Defaults to 60 seconds. Set to 0 to disable
# SWIFT_CACHE_TTL=
-# Optional alias for S3 if you want to use Cloudfront or Cloudflare in front
-# S3_CLOUDFRONT_HOST=
+# Optional alias for S3 (e.g. to serve files on a custom domain, possibly using Cloudfront or Cloudflare)
+# S3_ALIAS_HOST=
# Streaming API integration
# STREAMING_API_BASE_URL=
diff --git a/.env.production.sample b/.env.production.sample
index 349daedd8..d1164efdc 100644
--- a/.env.production.sample
+++ b/.env.production.sample
@@ -134,8 +134,8 @@ SMTP_FROM_ADDRESS=notifications@example.com
# Defaults to 60 seconds. Set to 0 to disable
# SWIFT_CACHE_TTL=
-# Optional alias for S3 if you want to use Cloudfront or Cloudflare in front
-# S3_CLOUDFRONT_HOST=
+# Optional alias for S3 (e.g. to serve files on a custom domain, possibly using Cloudfront or Cloudflare)
+# S3_ALIAS_HOST=
# Streaming API integration
# STREAMING_API_BASE_URL=
diff --git a/config/initializers/paperclip.rb b/config/initializers/paperclip.rb
index 59ab9b9a1..df0205879 100644
--- a/config/initializers/paperclip.rb
+++ b/config/initializers/paperclip.rb
@@ -47,10 +47,10 @@ if ENV['S3_ENABLED'] == 'true'
Paperclip::Attachment.default_options[:url] = ':s3_path_url'
end
- if ENV.has_key?('S3_CLOUDFRONT_HOST')
+ if ENV.has_key?('S3_ALIAS_HOST') || ENV.has_key?('S3_CLOUDFRONT_HOST')
Paperclip::Attachment.default_options.merge!(
url: ':s3_alias_url',
- s3_host_alias: ENV['S3_CLOUDFRONT_HOST']
+ s3_host_alias: ENV['S3_ALIAS_HOST'] || ENV['S3_CLOUDFRONT_HOST']
)
end
elsif ENV['SWIFT_ENABLED'] == 'true'
diff --git a/config/webpack/production.js b/config/webpack/production.js
index 4966807a1..27a78108b 100644
--- a/config/webpack/production.js
+++ b/config/webpack/production.js
@@ -23,8 +23,8 @@ try {
let attachmentHost;
if (process.env.S3_ENABLED === 'true') {
- if (process.env.S3_CLOUDFRONT_HOST) {
- attachmentHost = process.env.S3_CLOUDFRONT_HOST;
+ if (process.env.S3_ALIAS_HOST || process.env.S3_CLOUDFRONT_HOST) {
+ attachmentHost = process.env.S3_ALIAS_HOST || process.env.S3_CLOUDFRONT_HOST;
} else {
attachmentHost = process.env.S3_HOSTNAME || `s3-${process.env.S3_REGION || 'us-east-1'}.amazonaws.com`;
}
diff --git a/lib/tasks/mastodon.rake b/lib/tasks/mastodon.rake
index 9ce39335d..519c21785 100644
--- a/lib/tasks/mastodon.rake
+++ b/lib/tasks/mastodon.rake
@@ -222,7 +222,7 @@ namespace :mastodon do
end
if prompt.yes?('Do you want to access the uploaded files from your own domain?')
- env['S3_CLOUDFRONT_HOST'] = prompt.ask('Domain for uploaded files:') do |q|
+ env['S3_ALIAS_HOST'] = prompt.ask('Domain for uploaded files:') do |q|
q.required true
q.default "files.#{env['LOCAL_DOMAIN']}"
q.modify :strip
From 95bd0d4528cae7d8b01c82cfaf3b74bef4864c11 Mon Sep 17 00:00:00 2001
From: M Somerville
Date: Sat, 25 Aug 2018 12:27:34 +0100
Subject: [PATCH 171/196] =?UTF-8?q?Support=20ActivityStreams=E2=80=99=20su?=
=?UTF-8?q?mmaryMap.=20(#8422)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
In the same way as contentMap and nameMap.
---
app/lib/activitypub/activity/create.rb | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb
index 79efc95d3..f40e1fa3e 100644
--- a/app/lib/activitypub/activity/create.rb
+++ b/app/lib/activitypub/activity/create.rb
@@ -48,7 +48,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
account: @account,
text: text_from_content || '',
language: detected_language,
- spoiler_text: @object['summary'] || '',
+ spoiler_text: text_from_summary || '',
created_at: @object['published'],
override_timestamps: @options[:override_timestamps],
reply: @object['inReplyTo'].present?,
@@ -193,6 +193,14 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
end
end
+ def text_from_summary
+ if @object['summary'].present?
+ @object['summary']
+ elsif summary_language_map?
+ @object['summaryMap'].values.first
+ end
+ end
+
def text_from_name
if @object['name'].present?
@object['name']
@@ -206,6 +214,8 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
@object['contentMap'].keys.first
elsif name_language_map?
@object['nameMap'].keys.first
+ elsif summary_language_map?
+ @object['summaryMap'].keys.first
elsif supported_object_type?
LanguageDetector.instance.detect(text_from_content, @account)
end
@@ -223,6 +233,10 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
end
end
+ def summary_language_map?
+ @object['summaryMap'].is_a?(Hash) && !@object['summaryMap'].empty?
+ end
+
def content_language_map?
@object['contentMap'].is_a?(Hash) && !@object['contentMap'].empty?
end
From 800325f452200902995602ff441e2f84f684e90a Mon Sep 17 00:00:00 2001
From: Yamagishi Kazutoshi
Date: Sat, 25 Aug 2018 20:27:56 +0900
Subject: [PATCH 172/196] Weblate translations (2018-08-25) (#8420)
* Translated using Weblate (Georgian)
Currently translated at 99.8% (674 of 675 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ka/
* Translated using Weblate (Korean)
Currently translated at 100.0% (310 of 310 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/ko/
* Translated using Weblate (Korean)
Currently translated at 96.8% (654 of 675 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ko/
* Translated using Weblate (Japanese)
Currently translated at 100.0% (310 of 310 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/ja/
* Translated using Weblate (Danish)
Currently translated at 100.0% (98 of 98 strings)
Translation: Mastodon/Doorkeeper
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/da/
* Translated using Weblate (Danish)
Currently translated at 100.0% (310 of 310 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/da/
* Translated using Weblate (Danish)
Currently translated at 87.2% (589 of 675 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/da/
* Translated using Weblate (Galician)
Currently translated at 100.0% (680 of 680 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/gl/
* Translated using Weblate (Czech)
Currently translated at 100.0% (310 of 310 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/cs/
* Translated using Weblate (Czech)
Currently translated at 99.4% (676 of 680 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/cs/
* Translated using Weblate (Danish)
Currently translated at 88.0% (599 of 680 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/da/
* Translated using Weblate (Arabic)
Currently translated at 97.6% (664 of 680 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ar/
* Translated using Weblate (Japanese)
Currently translated at 99.7% (678 of 680 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Occitan)
Currently translated at 99.5% (677 of 680 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/oc/
* Translated using Weblate (Arabic)
Currently translated at 97.9% (668 of 682 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ar/
* Translated using Weblate (Persian)
Currently translated at 99.7% (680 of 682 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/fa/
* Translated using Weblate (Dutch)
Currently translated at 99.8% (681 of 682 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/nl/
* Translated using Weblate (Occitan)
Currently translated at 99.8% (681 of 682 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/oc/
* Translated using Weblate (Japanese)
Currently translated at 0.0% (0 of 682 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Japanese)
Currently translated at 0.1% (1 of 682 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Japanese)
Currently translated at 0.1% (676 of 682 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Japanese)
Currently translated at 99.8% (681 of 682 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Galician)
Currently translated at 100.0% (682 of 682 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/gl/
* Translated using Weblate (Greek)
Currently translated at 99.8% (681 of 682 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/el/
* Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (310 of 310 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/pt_BR/
* Translated using Weblate (Portuguese (Brazil))
Currently translated at 98.8% (674 of 682 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/pt_BR/
* Translated using Weblate (Danish)
Currently translated at 89.2% (609 of 682 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/da/
* Translated using Weblate (French)
Currently translated at 100.0% (82 of 82 strings)
Translation: Mastodon/Preferences
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/fr/
* Translated using Weblate (French)
Currently translated at 100.0% (310 of 310 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/fr/
* Translated using Weblate (French)
Currently translated at 99.8% (681 of 682 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/fr/
* Translated using Weblate (Japanese)
Currently translated at 99.8% (681 of 682 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Japanese)
Currently translated at 99.8% (681 of 682 strings)
Translation: Mastodon/Backend
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/
* Translated using Weblate (Korean)
Currently translated at 100.0% (310 of 310 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/ko/
* Translated using Weblate (Occitan)
Currently translated at 100.0% (310 of 310 strings)
Translation: Mastodon/React
Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/oc/
* yarn manage:translations
* i18n-tasks normalize && i18n-tasks remove-unused
* revert
* Add defaultMessage
---
.../mastodon/containers/status_container.js | 2 +-
.../mastodon/features/status/index.js | 2 +-
app/javascript/mastodon/locales/ar.json | 2 ++
app/javascript/mastodon/locales/ast.json | 2 ++
app/javascript/mastodon/locales/bg.json | 2 ++
app/javascript/mastodon/locales/ca.json | 2 ++
app/javascript/mastodon/locales/co.json | 2 ++
app/javascript/mastodon/locales/cs.json | 4 +++-
app/javascript/mastodon/locales/da.json | 16 +++++++++-------
app/javascript/mastodon/locales/de.json | 2 ++
.../mastodon/locales/defaultMessages.json | 12 ++++++++++--
app/javascript/mastodon/locales/el.json | 2 ++
app/javascript/mastodon/locales/en.json | 2 ++
app/javascript/mastodon/locales/eo.json | 2 ++
app/javascript/mastodon/locales/es.json | 2 ++
app/javascript/mastodon/locales/eu.json | 2 ++
app/javascript/mastodon/locales/fa.json | 2 ++
app/javascript/mastodon/locales/fi.json | 2 ++
app/javascript/mastodon/locales/fr.json | 4 +++-
app/javascript/mastodon/locales/gl.json | 2 ++
app/javascript/mastodon/locales/he.json | 2 ++
app/javascript/mastodon/locales/hr.json | 2 ++
app/javascript/mastodon/locales/hu.json | 2 ++
app/javascript/mastodon/locales/hy.json | 2 ++
app/javascript/mastodon/locales/id.json | 2 ++
app/javascript/mastodon/locales/io.json | 2 ++
app/javascript/mastodon/locales/it.json | 2 ++
app/javascript/mastodon/locales/ja.json | 4 +++-
app/javascript/mastodon/locales/ka.json | 2 ++
app/javascript/mastodon/locales/ko.json | 8 +++++---
app/javascript/mastodon/locales/nl.json | 2 ++
app/javascript/mastodon/locales/no.json | 2 ++
app/javascript/mastodon/locales/oc.json | 10 ++++++----
app/javascript/mastodon/locales/pl.json | 2 ++
app/javascript/mastodon/locales/pt-BR.json | 8 +++++---
app/javascript/mastodon/locales/pt.json | 2 ++
app/javascript/mastodon/locales/ru.json | 2 ++
app/javascript/mastodon/locales/sk.json | 2 ++
app/javascript/mastodon/locales/sl.json | 2 ++
app/javascript/mastodon/locales/sr-Latn.json | 2 ++
app/javascript/mastodon/locales/sr.json | 2 ++
app/javascript/mastodon/locales/sv.json | 2 ++
app/javascript/mastodon/locales/te.json | 2 ++
app/javascript/mastodon/locales/th.json | 2 ++
app/javascript/mastodon/locales/tr.json | 2 ++
app/javascript/mastodon/locales/uk.json | 2 ++
app/javascript/mastodon/locales/zh-CN.json | 2 ++
app/javascript/mastodon/locales/zh-HK.json | 2 ++
app/javascript/mastodon/locales/zh-TW.json | 2 ++
config/locales/cs.yml | 3 +++
config/locales/doorkeeper.da.yml | 2 ++
config/locales/ja.yml | 19 ++++++++++++++-----
config/locales/ka.yml | 6 ++++++
config/locales/ko.yml | 2 +-
config/locales/simple_form.fr.yml | 2 +-
55 files changed, 151 insertions(+), 31 deletions(-)
diff --git a/app/javascript/mastodon/containers/status_container.js b/app/javascript/mastodon/containers/status_container.js
index ed375c3e5..bbc0d5e96 100644
--- a/app/javascript/mastodon/containers/status_container.js
+++ b/app/javascript/mastodon/containers/status_container.js
@@ -34,7 +34,7 @@ const messages = defineMessages({
deleteConfirm: { id: 'confirmations.delete.confirm', defaultMessage: 'Delete' },
deleteMessage: { id: 'confirmations.delete.message', defaultMessage: 'Are you sure you want to delete this status?' },
redraftConfirm: { id: 'confirmations.redraft.confirm', defaultMessage: 'Delete & redraft' },
- redraftMessage: { id: 'confirmations.redraft.message', defaultMessage: 'Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.' },
+ redraftMessage: { id: 'confirmations.redraft.message', defaultMessage: 'Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.' },
blockConfirm: { id: 'confirmations.block.confirm', defaultMessage: 'Block' },
});
diff --git a/app/javascript/mastodon/features/status/index.js b/app/javascript/mastodon/features/status/index.js
index 45e36e3eb..48931b2d6 100644
--- a/app/javascript/mastodon/features/status/index.js
+++ b/app/javascript/mastodon/features/status/index.js
@@ -49,7 +49,7 @@ const messages = defineMessages({
deleteConfirm: { id: 'confirmations.delete.confirm', defaultMessage: 'Delete' },
deleteMessage: { id: 'confirmations.delete.message', defaultMessage: 'Are you sure you want to delete this status?' },
redraftConfirm: { id: 'confirmations.redraft.confirm', defaultMessage: 'Delete & redraft' },
- redraftMessage: { id: 'confirmations.redraft.message', defaultMessage: 'Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.' },
+ redraftMessage: { id: 'confirmations.redraft.message', defaultMessage: 'Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.' },
blockConfirm: { id: 'confirmations.block.confirm', defaultMessage: 'Block' },
revealAll: { id: 'status.show_more_all', defaultMessage: 'Show more for all' },
hideAll: { id: 'status.show_less_all', defaultMessage: 'Show less for all' },
diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json
index b38dbcf73..bf0701094 100644
--- a/app/javascript/mastodon/locales/ar.json
+++ b/app/javascript/mastodon/locales/ar.json
@@ -165,6 +165,7 @@
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "الحسابات المحجوبة",
"navigation_bar.community_timeline": "الخيط العام المحلي",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "الرسائل المباشِرة",
"navigation_bar.discover": "إكتشف",
"navigation_bar.domain_blocks": "النطاقات المخفية",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "إلغاء الترقية",
"status.cannot_reblog": "تعذرت ترقية هذا المنشور",
"status.delete": "إحذف",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "رسالة خاصة إلى @{name}",
"status.embed": "إدماج",
"status.favourite": "أضف إلى المفضلة",
diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json
index 96e3a14d9..a6d951626 100644
--- a/app/javascript/mastodon/locales/ast.json
+++ b/app/javascript/mastodon/locales/ast.json
@@ -165,6 +165,7 @@
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Blocked users",
"navigation_bar.community_timeline": "Local timeline",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Direct messages",
"navigation_bar.discover": "Discover",
"navigation_bar.domain_blocks": "Hidden domains",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "Unboost",
"status.cannot_reblog": "This post cannot be boosted",
"status.delete": "Delete",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "Direct message @{name}",
"status.embed": "Embed",
"status.favourite": "Favourite",
diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json
index b41045fb8..ae8222db5 100644
--- a/app/javascript/mastodon/locales/bg.json
+++ b/app/javascript/mastodon/locales/bg.json
@@ -165,6 +165,7 @@
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Blocked users",
"navigation_bar.community_timeline": "Local timeline",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Direct messages",
"navigation_bar.discover": "Discover",
"navigation_bar.domain_blocks": "Hidden domains",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "Unboost",
"status.cannot_reblog": "This post cannot be boosted",
"status.delete": "Изтриване",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "Direct message @{name}",
"status.embed": "Embed",
"status.favourite": "Предпочитани",
diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json
index 7378b703b..216e5d0f2 100644
--- a/app/javascript/mastodon/locales/ca.json
+++ b/app/javascript/mastodon/locales/ca.json
@@ -165,6 +165,7 @@
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Usuaris bloquejats",
"navigation_bar.community_timeline": "Línia de temps Local",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Missatges directes",
"navigation_bar.discover": "Descobreix",
"navigation_bar.domain_blocks": "Dominis ocults",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "Desfer l'impuls",
"status.cannot_reblog": "Aquesta publicació no pot ser retootejada",
"status.delete": "Esborrar",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "Missatge directe @{name}",
"status.embed": "Incrustar",
"status.favourite": "Favorit",
diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json
index 717397d41..91cdb541c 100644
--- a/app/javascript/mastodon/locales/co.json
+++ b/app/javascript/mastodon/locales/co.json
@@ -165,6 +165,7 @@
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Utilizatori bluccati",
"navigation_bar.community_timeline": "Linea pubblica lucale",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Missaghji diretti",
"navigation_bar.discover": "Scopre",
"navigation_bar.domain_blocks": "Duminii piattati",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "Ùn sparte più",
"status.cannot_reblog": "Stu statutu ùn pò micca esse spartutu",
"status.delete": "Toglie",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "Mandà un missaghju @{name}",
"status.embed": "Integrà",
"status.favourite": "Aghjunghje à i favuriti",
diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json
index b71179ca0..2b19628a5 100644
--- a/app/javascript/mastodon/locales/cs.json
+++ b/app/javascript/mastodon/locales/cs.json
@@ -162,9 +162,10 @@
"missing_indicator.label": "Nenalezeno",
"missing_indicator.sublabel": "Tento zdroj se nepodařilo najít",
"mute_modal.hide_notifications": "Skrýt oznámení před tímto uživatelem?",
- "navigation_bar.apps": "Mobile apps",
+ "navigation_bar.apps": "Mobilní aplikace",
"navigation_bar.blocks": "Blokovaní uživatelé",
"navigation_bar.community_timeline": "Místní časová osa",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Přímé zprávy",
"navigation_bar.discover": "Objevujte",
"navigation_bar.domain_blocks": "Skryté domény",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "Zrušit boost",
"status.cannot_reblog": "Tento příspěvek nemůže být boostnutý",
"status.delete": "Delete",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "Poslat přímou zprávu uživateli @{name}",
"status.embed": "Vložit",
"status.favourite": "Oblíbit",
diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json
index 4c38b8eb2..92a09602c 100644
--- a/app/javascript/mastodon/locales/da.json
+++ b/app/javascript/mastodon/locales/da.json
@@ -20,7 +20,7 @@
"account.mute_notifications": "Dæmp notifikationer fra @{name}",
"account.muted": "Dæmpet",
"account.posts": "Trut",
- "account.posts_with_replies": "Trut samt svar",
+ "account.posts_with_replies": "Trut og svar",
"account.report": "Rapporter @{name}",
"account.requested": "Afventer godkendelse. Tryk for at annullere følgeanmodning",
"account.share": "Del @{name}s profil",
@@ -51,7 +51,7 @@
"column.lists": "Lister",
"column.mutes": "Dæmpede brugere",
"column.notifications": "Notifikationer",
- "column.pins": "Fastgjorte toots",
+ "column.pins": "Fastgjorte trut",
"column.public": "Fælles tidslinje",
"column_back_button.label": "Tilbage",
"column_header.hide_settings": "Skjul indstillinger",
@@ -61,7 +61,7 @@
"column_header.show_settings": "Vis indstillinger",
"column_header.unpin": "Fastgør ikke længere",
"column_subheading.settings": "Indstillinger",
- "community.column_settings.media_only": "Kun multimedier",
+ "community.column_settings.media_only": "Kun medie",
"compose_form.direct_message_warning": "Dette trut vil kun blive sendt til de nævnte brugere.",
"compose_form.direct_message_warning_learn_more": "Lær mere",
"compose_form.hashtag_warning": "Dette trut vil ikke blive vist under noget hashtag da det ikke er listet. Kun offentlige trut kan blive vist under søgninger med hashtags.",
@@ -70,8 +70,8 @@
"compose_form.placeholder": "Hvad har du på hjertet?",
"compose_form.publish": "Trut",
"compose_form.publish_loud": "{publish}!",
- "compose_form.sensitive.marked": "Multimedie er markeret som værende følsomt",
- "compose_form.sensitive.unmarked": "Multimediet er ikke markeret som værende følsomt",
+ "compose_form.sensitive.marked": "Medie er markeret som værende følsomt",
+ "compose_form.sensitive.unmarked": "Mediet er ikke markeret som værende følsomt",
"compose_form.spoiler.marked": "Teksten er skjult bag en advarsel",
"compose_form.spoiler.unmarked": "Teksten er ikke skjult",
"compose_form.spoiler_placeholder": "Skriv din advarsel her",
@@ -162,9 +162,10 @@
"missing_indicator.label": "Ikke fundet",
"missing_indicator.sublabel": "Denne ressource kunne ikke blive fundet",
"mute_modal.hide_notifications": "Skjul notifikationer fra denne bruger?",
- "navigation_bar.apps": "Mobile apps",
+ "navigation_bar.apps": "Mobil apps",
"navigation_bar.blocks": "Blokerede brugere",
"navigation_bar.community_timeline": "Lokal tidslinje",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Direkte beskeder",
"navigation_bar.discover": "Opdag",
"navigation_bar.domain_blocks": "Skjulte domæner",
@@ -258,12 +259,13 @@
"status.cancel_reblog_private": "Fremhæv ikke længere",
"status.cannot_reblog": "Denne post kan ikke fremhæves",
"status.delete": "Slet",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "Send direkte besked til @{name}",
"status.embed": "Indlejre",
"status.favourite": "Favorit",
"status.filtered": "Filtreret",
"status.load_more": "Indlæs mere",
- "status.media_hidden": "Multimedia skjult",
+ "status.media_hidden": "Medie skjult",
"status.mention": "Nævn @{name}",
"status.more": "Mere",
"status.mute": "Dæmp @{name}",
diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json
index 3427b322b..e6139b218 100644
--- a/app/javascript/mastodon/locales/de.json
+++ b/app/javascript/mastodon/locales/de.json
@@ -165,6 +165,7 @@
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Blockierte Profile",
"navigation_bar.community_timeline": "Lokale Zeitleiste",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Direktnachrichten",
"navigation_bar.discover": "Entdecken",
"navigation_bar.domain_blocks": "Versteckte Domains",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "Nicht mehr teilen",
"status.cannot_reblog": "Dieser Beitrag kann nicht geteilt werden",
"status.delete": "Löschen",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "Direktnachricht @{name}",
"status.embed": "Einbetten",
"status.favourite": "Favorisieren",
diff --git a/app/javascript/mastodon/locales/defaultMessages.json b/app/javascript/mastodon/locales/defaultMessages.json
index 0079e192a..13c7904f7 100644
--- a/app/javascript/mastodon/locales/defaultMessages.json
+++ b/app/javascript/mastodon/locales/defaultMessages.json
@@ -390,7 +390,7 @@
"id": "confirmations.redraft.confirm"
},
{
- "defaultMessage": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
+ "defaultMessage": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.",
"id": "confirmations.redraft.message"
},
{
@@ -1019,6 +1019,10 @@
{
"defaultMessage": "Logout",
"id": "navigation_bar.logout"
+ },
+ {
+ "defaultMessage": "Compose new toot",
+ "id": "navigation_bar.compose"
}
],
"path": "app/javascript/mastodon/features/compose/index.json"
@@ -1636,7 +1640,7 @@
"id": "confirmations.redraft.confirm"
},
{
- "defaultMessage": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
+ "defaultMessage": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.",
"id": "confirmations.redraft.message"
},
{
@@ -1651,6 +1655,10 @@
"defaultMessage": "Show less for all",
"id": "status.show_less_all"
},
+ {
+ "defaultMessage": "Detailed conversation view",
+ "id": "status.detailed_status"
+ },
{
"defaultMessage": "Are you sure you want to block {name}?",
"id": "confirmations.block.message"
diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json
index 76a003f65..fad0aa9bc 100644
--- a/app/javascript/mastodon/locales/el.json
+++ b/app/javascript/mastodon/locales/el.json
@@ -165,6 +165,7 @@
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Αποκλεισμένοι χρήστες",
"navigation_bar.community_timeline": "Τοπική ροή",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Προσωπικά μηνύματα",
"navigation_bar.discover": "Ανακάλυψη",
"navigation_bar.domain_blocks": "Κρυμμένοι τομείς",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "Ακύρωσε την προώθηση",
"status.cannot_reblog": "Αυτή η δημοσίευση δεν μπορεί να προωθηθεί",
"status.delete": "Διαγραφή",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "Προσωπικό μήνυμα προς @{name}",
"status.embed": "Ενσωμάτωσε",
"status.favourite": "Σημείωσε ως αγαπημένο",
diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json
index 348b36812..432c4f0b0 100644
--- a/app/javascript/mastodon/locales/en.json
+++ b/app/javascript/mastodon/locales/en.json
@@ -165,6 +165,7 @@
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Blocked users",
"navigation_bar.community_timeline": "Local timeline",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Direct messages",
"navigation_bar.discover": "Discover",
"navigation_bar.domain_blocks": "Hidden domains",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "Unboost",
"status.cannot_reblog": "This post cannot be boosted",
"status.delete": "Delete",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "Direct message @{name}",
"status.embed": "Embed",
"status.favourite": "Favourite",
diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json
index f4c316441..cfeef55bb 100644
--- a/app/javascript/mastodon/locales/eo.json
+++ b/app/javascript/mastodon/locales/eo.json
@@ -165,6 +165,7 @@
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Blokitaj uzantoj",
"navigation_bar.community_timeline": "Loka tempolinio",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Rektaj mesaĝoj",
"navigation_bar.discover": "Esplori",
"navigation_bar.domain_blocks": "Kaŝitaj domajnoj",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "Eksdiskonigi",
"status.cannot_reblog": "Ĉi tiu mesaĝo ne diskonigeblas",
"status.delete": "Forigi",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "Rekte mesaĝi @{name}",
"status.embed": "Enkorpigi",
"status.favourite": "Stelumi",
diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json
index b17e1411e..7e835cd65 100644
--- a/app/javascript/mastodon/locales/es.json
+++ b/app/javascript/mastodon/locales/es.json
@@ -165,6 +165,7 @@
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Usuarios bloqueados",
"navigation_bar.community_timeline": "Historia local",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Direct messages",
"navigation_bar.discover": "Discover",
"navigation_bar.domain_blocks": "Hidden domains",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "Unboost",
"status.cannot_reblog": "Este toot no puede retootearse",
"status.delete": "Borrar",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "Direct message @{name}",
"status.embed": "Incrustado",
"status.favourite": "Favorito",
diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json
index ec27fe425..c5cf627e8 100644
--- a/app/javascript/mastodon/locales/eu.json
+++ b/app/javascript/mastodon/locales/eu.json
@@ -165,6 +165,7 @@
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Blokeatutako erabiltzaileak",
"navigation_bar.community_timeline": "Denbora-lerro lokala",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Mezu zuzenak",
"navigation_bar.discover": "Aurkitu",
"navigation_bar.domain_blocks": "Ezkutatutako domeinuak",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "Kendu bultzada",
"status.cannot_reblog": "Mezu honi ezin zaio bultzada eman",
"status.delete": "Ezabatu",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "Mezu zuzena @{name}(r)i",
"status.embed": "Txertatu",
"status.favourite": "Gogokoa",
diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json
index 03c6bb7ce..55615baa3 100644
--- a/app/javascript/mastodon/locales/fa.json
+++ b/app/javascript/mastodon/locales/fa.json
@@ -165,6 +165,7 @@
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "کاربران مسدودشده",
"navigation_bar.community_timeline": "نوشتههای محلی",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "پیغامهای خصوصی",
"navigation_bar.discover": "گشت و گذار",
"navigation_bar.domain_blocks": "دامینهای پنهانشده",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "حذف بازبوق",
"status.cannot_reblog": "این نوشته را نمیشود بازبوقید",
"status.delete": "پاککردن",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "پیغام مستقیم به @{name}",
"status.embed": "جاگذاری",
"status.favourite": "پسندیدن",
diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json
index 0861c42fc..fcf08a9b9 100644
--- a/app/javascript/mastodon/locales/fi.json
+++ b/app/javascript/mastodon/locales/fi.json
@@ -165,6 +165,7 @@
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Estetyt käyttäjät",
"navigation_bar.community_timeline": "Paikallinen aikajana",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Viestit",
"navigation_bar.discover": "Discover",
"navigation_bar.domain_blocks": "Piilotetut verkkotunnukset",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "Peru buustaus",
"status.cannot_reblog": "Tätä julkaisua ei voi buustata",
"status.delete": "Poista",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "Viesti käyttäjälle @{name}",
"status.embed": "Upota",
"status.favourite": "Tykkää",
diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json
index d3fca584d..79d318d1b 100644
--- a/app/javascript/mastodon/locales/fr.json
+++ b/app/javascript/mastodon/locales/fr.json
@@ -162,9 +162,10 @@
"missing_indicator.label": "Non trouvé",
"missing_indicator.sublabel": "Ressource introuvable",
"mute_modal.hide_notifications": "Masquer les notifications de cette personne ?",
- "navigation_bar.apps": "Mobile apps",
+ "navigation_bar.apps": "Applications mobiles",
"navigation_bar.blocks": "Comptes bloqués",
"navigation_bar.community_timeline": "Fil public local",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Messages directs",
"navigation_bar.discover": "Découvrir",
"navigation_bar.domain_blocks": "Domaines cachés",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "Dé-booster",
"status.cannot_reblog": "Cette publication ne peut être boostée",
"status.delete": "Effacer",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "Envoyer un message direct à @{name}",
"status.embed": "Intégrer",
"status.favourite": "Ajouter aux favoris",
diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json
index d83b11d74..e8b598263 100644
--- a/app/javascript/mastodon/locales/gl.json
+++ b/app/javascript/mastodon/locales/gl.json
@@ -165,6 +165,7 @@
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Usuarias bloqueadas",
"navigation_bar.community_timeline": "Liña temporal local",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Mensaxes directas",
"navigation_bar.discover": "Discover",
"navigation_bar.domain_blocks": "Dominios agochados",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "Non promover",
"status.cannot_reblog": "Esta mensaxe non pode ser promovida",
"status.delete": "Eliminar",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "Mensaxe directa @{name}",
"status.embed": "Incrustar",
"status.favourite": "Favorita",
diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json
index d20adce11..5f5e396b4 100644
--- a/app/javascript/mastodon/locales/he.json
+++ b/app/javascript/mastodon/locales/he.json
@@ -165,6 +165,7 @@
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "חסימות",
"navigation_bar.community_timeline": "ציר זמן מקומי",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Direct messages",
"navigation_bar.discover": "Discover",
"navigation_bar.domain_blocks": "Hidden domains",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "Unboost",
"status.cannot_reblog": "לא ניתן להדהד הודעה זו",
"status.delete": "מחיקה",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "Direct message @{name}",
"status.embed": "הטמעה",
"status.favourite": "חיבוב",
diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json
index e6ce3359d..d0bea84d6 100644
--- a/app/javascript/mastodon/locales/hr.json
+++ b/app/javascript/mastodon/locales/hr.json
@@ -165,6 +165,7 @@
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Blokirani korisnici",
"navigation_bar.community_timeline": "Lokalni timeline",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Direct messages",
"navigation_bar.discover": "Discover",
"navigation_bar.domain_blocks": "Hidden domains",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "Unboost",
"status.cannot_reblog": "Ovaj post ne može biti boostan",
"status.delete": "Obriši",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "Direct message @{name}",
"status.embed": "Embed",
"status.favourite": "Označi omiljenim",
diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json
index 80c3a1de8..4dae46bb1 100644
--- a/app/javascript/mastodon/locales/hu.json
+++ b/app/javascript/mastodon/locales/hu.json
@@ -165,6 +165,7 @@
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Tiltott felhasználók",
"navigation_bar.community_timeline": "Helyi idővonal",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Direct messages",
"navigation_bar.discover": "Discover",
"navigation_bar.domain_blocks": "Hidden domains",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "Unboost",
"status.cannot_reblog": "Ezen státusz nem rebloggolható",
"status.delete": "Törlés",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "Direct message @{name}",
"status.embed": "Beágyaz",
"status.favourite": "Kedvenc",
diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json
index e5ad93fd8..e9f60b727 100644
--- a/app/javascript/mastodon/locales/hy.json
+++ b/app/javascript/mastodon/locales/hy.json
@@ -165,6 +165,7 @@
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Արգելափակված օգտատերեր",
"navigation_bar.community_timeline": "Տեղական հոսք",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Direct messages",
"navigation_bar.discover": "Discover",
"navigation_bar.domain_blocks": "Hidden domains",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "Unboost",
"status.cannot_reblog": "Այս թութը չի կարող տարածվել",
"status.delete": "Ջնջել",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "Direct message @{name}",
"status.embed": "Ներդնել",
"status.favourite": "Հավանել",
diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json
index 010d35b73..1dd30f2f7 100644
--- a/app/javascript/mastodon/locales/id.json
+++ b/app/javascript/mastodon/locales/id.json
@@ -165,6 +165,7 @@
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Pengguna diblokir",
"navigation_bar.community_timeline": "Linimasa lokal",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Direct messages",
"navigation_bar.discover": "Discover",
"navigation_bar.domain_blocks": "Hidden domains",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "Unboost",
"status.cannot_reblog": "This post cannot be boosted",
"status.delete": "Hapus",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "Direct message @{name}",
"status.embed": "Embed",
"status.favourite": "Difavoritkan",
diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json
index 06e6b02d7..385313df3 100644
--- a/app/javascript/mastodon/locales/io.json
+++ b/app/javascript/mastodon/locales/io.json
@@ -165,6 +165,7 @@
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Blokusita uzeri",
"navigation_bar.community_timeline": "Lokala tempolineo",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Direct messages",
"navigation_bar.discover": "Discover",
"navigation_bar.domain_blocks": "Hidden domains",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "Unboost",
"status.cannot_reblog": "This post cannot be boosted",
"status.delete": "Efacar",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "Direct message @{name}",
"status.embed": "Embed",
"status.favourite": "Favorizar",
diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json
index c9ac57c74..0f460b3f6 100644
--- a/app/javascript/mastodon/locales/it.json
+++ b/app/javascript/mastodon/locales/it.json
@@ -165,6 +165,7 @@
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Utenti bloccati",
"navigation_bar.community_timeline": "Timeline locale",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Messaggi diretti",
"navigation_bar.discover": "Scopri",
"navigation_bar.domain_blocks": "Domini nascosti",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "Annulla condivisione",
"status.cannot_reblog": "Questo post non può essere condiviso",
"status.delete": "Elimina",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "Messaggio diretto @{name}",
"status.embed": "Incorpora",
"status.favourite": "Apprezzato",
diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json
index 40f1a2fcc..d17f124b9 100644
--- a/app/javascript/mastodon/locales/ja.json
+++ b/app/javascript/mastodon/locales/ja.json
@@ -162,9 +162,10 @@
"missing_indicator.label": "見つかりません",
"missing_indicator.sublabel": "見つかりませんでした",
"mute_modal.hide_notifications": "このユーザーからの通知を隠しますか?",
- "navigation_bar.apps": "Mobile apps",
+ "navigation_bar.apps": "アプリ",
"navigation_bar.blocks": "ブロックしたユーザー",
"navigation_bar.community_timeline": "ローカルタイムライン",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "ダイレクトメッセージ",
"navigation_bar.discover": "見つける",
"navigation_bar.domain_blocks": "非表示にしたドメイン",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "ブースト解除",
"status.cannot_reblog": "この投稿はブーストできません",
"status.delete": "削除",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "@{name}さんにダイレクトメッセージ",
"status.embed": "埋め込み",
"status.favourite": "お気に入り",
diff --git a/app/javascript/mastodon/locales/ka.json b/app/javascript/mastodon/locales/ka.json
index d2a915c60..1ded84143 100644
--- a/app/javascript/mastodon/locales/ka.json
+++ b/app/javascript/mastodon/locales/ka.json
@@ -165,6 +165,7 @@
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "დაბლოკილი მომხმარებლები",
"navigation_bar.community_timeline": "ლოკალური თაიმლაინი",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "პირდაპირი წერილები",
"navigation_bar.discover": "აღმოაჩინე",
"navigation_bar.domain_blocks": "დამალული დომენები",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "ბუსტის მოშორება",
"status.cannot_reblog": "ეს პოსტი ვერ დაიბუსტება",
"status.delete": "წაშლა",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "პირდაპირი წერილი @{name}-ს",
"status.embed": "ჩართვა",
"status.favourite": "ფავორიტი",
diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json
index 18150d17c..dd9079878 100644
--- a/app/javascript/mastodon/locales/ko.json
+++ b/app/javascript/mastodon/locales/ko.json
@@ -7,7 +7,7 @@
"account.disclaimer_full": "여기 있는 정보는 유저의 프로파일을 정확히 반영하지 못 할 수도 있습니다.",
"account.domain_blocked": "도메인 숨겨짐",
"account.edit_profile": "프로필 편집",
- "account.endorse": "Feature on profile",
+ "account.endorse": "프로필에 나타내기",
"account.follow": "팔로우",
"account.followers": "팔로워",
"account.follows": "팔로우",
@@ -27,7 +27,7 @@
"account.show_reblogs": "@{name}의 부스트 보기",
"account.unblock": "차단 해제",
"account.unblock_domain": "{domain} 숨김 해제",
- "account.unendorse": "Don't feature on profile",
+ "account.unendorse": "프로필에 나타내지 않기",
"account.unfollow": "팔로우 해제",
"account.unmute": "뮤트 해제",
"account.unmute_notifications": "@{name}의 알림 뮤트 해제",
@@ -162,9 +162,10 @@
"missing_indicator.label": "찾을 수 없습니다",
"missing_indicator.sublabel": "이 리소스를 찾을 수 없었습니다",
"mute_modal.hide_notifications": "이 사용자로부터의 알림을 뮤트하시겠습니까?",
- "navigation_bar.apps": "Mobile apps",
+ "navigation_bar.apps": "모바일 앱",
"navigation_bar.blocks": "차단한 사용자",
"navigation_bar.community_timeline": "로컬 타임라인",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "다이렉트 메시지",
"navigation_bar.discover": "발견하기",
"navigation_bar.domain_blocks": "숨겨진 도메인",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "부스트 취소",
"status.cannot_reblog": "이 포스트는 부스트 할 수 없습니다",
"status.delete": "삭제",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "@{name}에게 다이렉트 메시지",
"status.embed": "공유하기",
"status.favourite": "즐겨찾기",
diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json
index 72ffbdc6e..7259ba49a 100644
--- a/app/javascript/mastodon/locales/nl.json
+++ b/app/javascript/mastodon/locales/nl.json
@@ -165,6 +165,7 @@
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Geblokkeerde gebruikers",
"navigation_bar.community_timeline": "Lokale tijdlijn",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Directe berichten",
"navigation_bar.discover": "Ontdekken",
"navigation_bar.domain_blocks": "Verborgen domeinen",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "Niet langer boosten",
"status.cannot_reblog": "Deze toot kan niet geboost worden",
"status.delete": "Verwijderen",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "Directe toot @{name}",
"status.embed": "Embed",
"status.favourite": "Favoriet",
diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json
index 3e9612edb..520c9ec25 100644
--- a/app/javascript/mastodon/locales/no.json
+++ b/app/javascript/mastodon/locales/no.json
@@ -165,6 +165,7 @@
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Blokkerte brukere",
"navigation_bar.community_timeline": "Lokal tidslinje",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Direct messages",
"navigation_bar.discover": "Discover",
"navigation_bar.domain_blocks": "Hidden domains",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "Unboost",
"status.cannot_reblog": "Denne posten kan ikke fremheves",
"status.delete": "Slett",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "Direct message @{name}",
"status.embed": "Bygge inn",
"status.favourite": "Lik",
diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json
index 6aaf4cc63..a198a0d93 100644
--- a/app/javascript/mastodon/locales/oc.json
+++ b/app/javascript/mastodon/locales/oc.json
@@ -7,7 +7,7 @@
"account.disclaimer_full": "Aquelas informacions de perfil pòdon èsser incomplètas.",
"account.domain_blocked": "Domeni amagat",
"account.edit_profile": "Modificar lo perfil",
- "account.endorse": "Feature on profile",
+ "account.endorse": "Mostrar pel perfil",
"account.follow": "Sègre",
"account.followers": "Seguidors",
"account.follows": "Abonaments",
@@ -27,7 +27,7 @@
"account.show_reblogs": "Mostrar los partatges de @{name}",
"account.unblock": "Desblocar @{name}",
"account.unblock_domain": "Desblocar {domain}",
- "account.unendorse": "Don't feature on profile",
+ "account.unendorse": "Mostrar pas pel perfil",
"account.unfollow": "Quitar de sègre",
"account.unmute": "Quitar de rescondre @{name}",
"account.unmute_notifications": "Mostrar las notificacions de @{name}",
@@ -139,7 +139,7 @@
"keyboard_shortcuts.hotkey": "Acorchis",
"keyboard_shortcuts.legend": "mostrar aquesta legenda",
"keyboard_shortcuts.mention": "mencionar l’autor",
- "keyboard_shortcuts.profile": "to open author's profile",
+ "keyboard_shortcuts.profile": "per dobrir lo perfil de l’autor",
"keyboard_shortcuts.reply": "respondre",
"keyboard_shortcuts.search": "anar a la recèrca",
"keyboard_shortcuts.toggle_hidden": "mostrar/amagar lo tèxte dels avertiments",
@@ -162,9 +162,10 @@
"missing_indicator.label": "Pas trobat",
"missing_indicator.sublabel": "Aquesta ressorsa es pas estada trobada",
"mute_modal.hide_notifications": "Rescondre las notificacions d’aquesta persona ?",
- "navigation_bar.apps": "Mobile apps",
+ "navigation_bar.apps": "Aplicacions mobil",
"navigation_bar.blocks": "Personas blocadas",
"navigation_bar.community_timeline": "Flux public local",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Messatges dirèctes",
"navigation_bar.discover": "Trobar",
"navigation_bar.domain_blocks": "Domenis resconduts",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "Quitar de partejar",
"status.cannot_reblog": "Aqueste estatut pòt pas èsser partejat",
"status.delete": "Escafar",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "Messatge per @{name}",
"status.embed": "Embarcar",
"status.favourite": "Apondre als favorits",
diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json
index 758e207f2..90cb52a15 100644
--- a/app/javascript/mastodon/locales/pl.json
+++ b/app/javascript/mastodon/locales/pl.json
@@ -165,6 +165,7 @@
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Zablokowani użytkownicy",
"navigation_bar.community_timeline": "Lokalna oś czasu",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Wiadomości bezpośrednie",
"navigation_bar.discover": "Odkrywaj",
"navigation_bar.domain_blocks": "Ukryte domeny",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "Cofnij podbicie",
"status.cannot_reblog": "Ten wpis nie może zostać podbity",
"status.delete": "Usuń",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "Wyślij wiadomość bezpośrednią do @{name}",
"status.embed": "Osadź",
"status.favourite": "Dodaj do ulubionych",
diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json
index bdfdd46e5..d40e6d6a2 100644
--- a/app/javascript/mastodon/locales/pt-BR.json
+++ b/app/javascript/mastodon/locales/pt-BR.json
@@ -7,7 +7,7 @@
"account.disclaimer_full": "As informações abaixo podem refletir o perfil do usuário de maneira incompleta.",
"account.domain_blocked": "Domínio escondido",
"account.edit_profile": "Editar perfil",
- "account.endorse": "Feature on profile",
+ "account.endorse": "Destacar no perfil",
"account.follow": "Seguir",
"account.followers": "Seguidores",
"account.follows": "Segue",
@@ -27,7 +27,7 @@
"account.show_reblogs": "Mostra compartilhamentos de @{name}",
"account.unblock": "Desbloquear @{name}",
"account.unblock_domain": "Desbloquear {domain}",
- "account.unendorse": "Don't feature on profile",
+ "account.unendorse": "Não destacar no perfil",
"account.unfollow": "Deixar de seguir",
"account.unmute": "Não silenciar @{name}",
"account.unmute_notifications": "Retirar silêncio das notificações vindas de @{name}",
@@ -162,9 +162,10 @@
"missing_indicator.label": "Não encontrado",
"missing_indicator.sublabel": "Esse recurso não pôde ser encontrado",
"mute_modal.hide_notifications": "Esconder notificações deste usuário?",
- "navigation_bar.apps": "Mobile apps",
+ "navigation_bar.apps": "Apps",
"navigation_bar.blocks": "Usuários bloqueados",
"navigation_bar.community_timeline": "Local",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Mensagens diretas",
"navigation_bar.discover": "Descobrir",
"navigation_bar.domain_blocks": "Domínios escondidos",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "Desfazer compartilhamento",
"status.cannot_reblog": "Esta postagem não pode ser compartilhada",
"status.delete": "Excluir",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "Enviar mensagem direta a @{name}",
"status.embed": "Incorporar",
"status.favourite": "Adicionar aos favoritos",
diff --git a/app/javascript/mastodon/locales/pt.json b/app/javascript/mastodon/locales/pt.json
index b3c4c3ad9..92c7343cc 100644
--- a/app/javascript/mastodon/locales/pt.json
+++ b/app/javascript/mastodon/locales/pt.json
@@ -165,6 +165,7 @@
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Utilizadores bloqueados",
"navigation_bar.community_timeline": "Local",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Direct messages",
"navigation_bar.discover": "Discover",
"navigation_bar.domain_blocks": "Hidden domains",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "Unboost",
"status.cannot_reblog": "Este post não pode ser partilhado",
"status.delete": "Eliminar",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "Direct message @{name}",
"status.embed": "Incorporar",
"status.favourite": "Adicionar aos favoritos",
diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json
index 8ba26a3c8..7d964859b 100644
--- a/app/javascript/mastodon/locales/ru.json
+++ b/app/javascript/mastodon/locales/ru.json
@@ -165,6 +165,7 @@
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Список блокировки",
"navigation_bar.community_timeline": "Локальная лента",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Личные сообщения",
"navigation_bar.discover": "Изучайте",
"navigation_bar.domain_blocks": "Скрытые домены",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "Не продвигать",
"status.cannot_reblog": "Этот статус не может быть продвинут",
"status.delete": "Удалить",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "Написать @{name}",
"status.embed": "Встроить",
"status.favourite": "Нравится",
diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json
index 8c36f866d..e51bb1d48 100644
--- a/app/javascript/mastodon/locales/sk.json
+++ b/app/javascript/mastodon/locales/sk.json
@@ -165,6 +165,7 @@
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Blokovaní užívatelia",
"navigation_bar.community_timeline": "Lokálna časová os",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Súkromné správy",
"navigation_bar.discover": "Objavuj",
"navigation_bar.domain_blocks": "Skryté domény",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "Nezdieľaj",
"status.cannot_reblog": "Tento príspevok nemôže byť re-tootnutý",
"status.delete": "Zmazať",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "Súkromná správa @{name}",
"status.embed": "Vložiť",
"status.favourite": "Páči sa mi",
diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json
index 01617f790..ca0f7a53f 100644
--- a/app/javascript/mastodon/locales/sl.json
+++ b/app/javascript/mastodon/locales/sl.json
@@ -165,6 +165,7 @@
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Blocked users",
"navigation_bar.community_timeline": "Local timeline",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Direct messages",
"navigation_bar.discover": "Discover",
"navigation_bar.domain_blocks": "Hidden domains",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "Unboost",
"status.cannot_reblog": "This post cannot be boosted",
"status.delete": "Delete",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "Direct message @{name}",
"status.embed": "Embed",
"status.favourite": "Favourite",
diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json
index 96b46077a..b76710419 100644
--- a/app/javascript/mastodon/locales/sr-Latn.json
+++ b/app/javascript/mastodon/locales/sr-Latn.json
@@ -165,6 +165,7 @@
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Blokirani korisnici",
"navigation_bar.community_timeline": "Lokalna lajna",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Direct messages",
"navigation_bar.discover": "Discover",
"navigation_bar.domain_blocks": "Hidden domains",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "Unboost",
"status.cannot_reblog": "Ovaj status ne može da se podrži",
"status.delete": "Obriši",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "Direct message @{name}",
"status.embed": "Ugradi na sajt",
"status.favourite": "Omiljeno",
diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json
index 681337947..e31618f66 100644
--- a/app/javascript/mastodon/locales/sr.json
+++ b/app/javascript/mastodon/locales/sr.json
@@ -165,6 +165,7 @@
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Блокирани корисници",
"navigation_bar.community_timeline": "Локална лајна",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Direct messages",
"navigation_bar.discover": "Discover",
"navigation_bar.domain_blocks": "Hidden domains",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "Unboost",
"status.cannot_reblog": "Овај статус не може да се подржи",
"status.delete": "Обриши",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "Direct message @{name}",
"status.embed": "Угради на сајт",
"status.favourite": "Омиљено",
diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json
index 5c11e72d9..813bf45df 100644
--- a/app/javascript/mastodon/locales/sv.json
+++ b/app/javascript/mastodon/locales/sv.json
@@ -165,6 +165,7 @@
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Blockerade användare",
"navigation_bar.community_timeline": "Lokal tidslinje",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Direktmeddelanden",
"navigation_bar.discover": "Upptäck",
"navigation_bar.domain_blocks": "Dolda domäner",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "Ta bort knuff",
"status.cannot_reblog": "Detta inlägg kan inte knuffas",
"status.delete": "Ta bort",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "Direktmeddela @{name}",
"status.embed": "Bädda in",
"status.favourite": "Favorit",
diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json
index 8aeebd048..2556b0ecb 100644
--- a/app/javascript/mastodon/locales/te.json
+++ b/app/javascript/mastodon/locales/te.json
@@ -165,6 +165,7 @@
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "బ్లాక్ చేయబడిన వినియోగదారులు",
"navigation_bar.community_timeline": "స్థానిక కాలక్రమం",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "ప్రత్యక్ష సందేశాలు",
"navigation_bar.discover": "కనుగొను",
"navigation_bar.domain_blocks": "దాచిన డొమైన్లు",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "బూస్ట్ను తొలగించు",
"status.cannot_reblog": "ఈ పోస్ట్ను బూస్ట్ చేయడం సాధ్యం కాదు",
"status.delete": "తొలగించు",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "@{name}కు నేరుగా సందేశం పంపు",
"status.embed": "ఎంబెడ్",
"status.favourite": "ఇష్టపడు",
diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json
index 5e4995b71..c02d40d97 100644
--- a/app/javascript/mastodon/locales/th.json
+++ b/app/javascript/mastodon/locales/th.json
@@ -165,6 +165,7 @@
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Blocked users",
"navigation_bar.community_timeline": "Local timeline",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Direct messages",
"navigation_bar.discover": "Discover",
"navigation_bar.domain_blocks": "Hidden domains",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "Unboost",
"status.cannot_reblog": "This post cannot be boosted",
"status.delete": "Delete",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "Direct message @{name}",
"status.embed": "Embed",
"status.favourite": "Favourite",
diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json
index be7ad47e4..e3193c99f 100644
--- a/app/javascript/mastodon/locales/tr.json
+++ b/app/javascript/mastodon/locales/tr.json
@@ -165,6 +165,7 @@
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Engellenen kullanıcılar",
"navigation_bar.community_timeline": "Yerel zaman tüneli",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Direct messages",
"navigation_bar.discover": "Discover",
"navigation_bar.domain_blocks": "Hidden domains",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "Unboost",
"status.cannot_reblog": "Bu gönderi boost edilemez",
"status.delete": "Sil",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "Direct message @{name}",
"status.embed": "Embed",
"status.favourite": "Favorilere ekle",
diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json
index 5f7e5c266..c1a47b307 100644
--- a/app/javascript/mastodon/locales/uk.json
+++ b/app/javascript/mastodon/locales/uk.json
@@ -165,6 +165,7 @@
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Заблоковані користувачі",
"navigation_bar.community_timeline": "Локальна стрічка",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Прямі повідомлення",
"navigation_bar.discover": "Знайти",
"navigation_bar.domain_blocks": "Приховані домени",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "Unboost",
"status.cannot_reblog": "Цей допис не може бути передмухнутий",
"status.delete": "Видалити",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "Direct message @{name}",
"status.embed": "Embed",
"status.favourite": "Подобається",
diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json
index 378a1a45b..329a95084 100644
--- a/app/javascript/mastodon/locales/zh-CN.json
+++ b/app/javascript/mastodon/locales/zh-CN.json
@@ -165,6 +165,7 @@
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "已屏蔽的用户",
"navigation_bar.community_timeline": "本站时间轴",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "私信",
"navigation_bar.discover": "发现",
"navigation_bar.domain_blocks": "已屏蔽的网站",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "取消转嘟",
"status.cannot_reblog": "无法转嘟这条嘟文",
"status.delete": "删除",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "发送私信给 @{name}",
"status.embed": "嵌入",
"status.favourite": "收藏",
diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json
index f0718468a..df32369e7 100644
--- a/app/javascript/mastodon/locales/zh-HK.json
+++ b/app/javascript/mastodon/locales/zh-HK.json
@@ -165,6 +165,7 @@
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "被你封鎖的用戶",
"navigation_bar.community_timeline": "本站時間軸",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "個人訊息",
"navigation_bar.discover": "探索",
"navigation_bar.domain_blocks": "隱藏的服務站",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "取消轉推",
"status.cannot_reblog": "這篇文章無法被轉推",
"status.delete": "刪除",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "私訊 @{name}",
"status.embed": "鑲嵌",
"status.favourite": "收藏",
diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json
index ca5919e30..dd7c84b32 100644
--- a/app/javascript/mastodon/locales/zh-TW.json
+++ b/app/javascript/mastodon/locales/zh-TW.json
@@ -165,6 +165,7 @@
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "封鎖的使用者",
"navigation_bar.community_timeline": "本地時間軸",
+ "navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "私訊",
"navigation_bar.discover": "探索",
"navigation_bar.domain_blocks": "隱藏的站點",
@@ -258,6 +259,7 @@
"status.cancel_reblog_private": "取消轉嘟",
"status.cannot_reblog": "這篇嘟文無法被轉嘟",
"status.delete": "刪除",
+ "status.detailed_status": "Detailed conversation view",
"status.direct": "發送私訊給 @{name}",
"status.embed": "嵌入",
"status.favourite": "最愛",
diff --git a/config/locales/cs.yml b/config/locales/cs.yml
index 9ae9c259c..5f1f415ec 100644
--- a/config/locales/cs.yml
+++ b/config/locales/cs.yml
@@ -414,6 +414,9 @@ cs:
last_delivery: Poslední doručení
title: WebSub
topic: Téma
+ suspensions:
+ proceed: Pokračovat
+ title: Suspendovat účet %{acct}
title: Administrace
admin_mailer:
new_report:
diff --git a/config/locales/doorkeeper.da.yml b/config/locales/doorkeeper.da.yml
index dd45a5078..df964e4b1 100644
--- a/config/locales/doorkeeper.da.yml
+++ b/config/locales/doorkeeper.da.yml
@@ -91,7 +91,9 @@ da:
unknown: Adgangs-beviset er ugyldigt
resource_owner_authenticator_not_configured: Ressource ejeren kunne ikke blive fundet grundet Doorkeeper.configure.resource_owner_authenticator ikke er konfigureret.
server_error: Autoriserings serveren blev mødt med en uventet betingelse der forhindrede den i at færdiggøre anmodningen.
+ temporarily_unavailable: Autoriserings serveren er på nuværende tidspunkt ikke i stand til at håndtere anmodningen grundet midlertidig overlast eller serveren er ved at blive opdateret.
unauthorized_client: Klienten er ikke godkendt til at udføre denne anmodning ved at bruge denne metode.
+ unsupported_grant_type: Autoriserings typen understøttes ikke af autoriserings serveren.
unsupported_response_type: Godkendelses serveren understøtter ikke denne type respons.
flash:
applications:
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index 9662da527..ae00edee6 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -30,10 +30,14 @@ ja:
other_instances: 他のインスタンス
privacy_policy: プライバシーポリシー
source_code: ソースコード
- status_count_after: トゥート
+ status_count_after:
+ one: トゥート
+ other: トゥート
status_count_before: トゥート数
terms: 利用規約
- user_count_after: 人
+ user_count_after:
+ one: 人
+ other: 人
user_count_before: ユーザー数
what_is_mastodon: Mastodon とは?
accounts:
@@ -49,7 +53,7 @@ ja:
people_followed_by: "%{name} さんがフォロー中のアカウント"
people_who_follow: "%{name} さんをフォロー中のアカウント"
pin_errors:
- following: 推薦したい人はあなたが既にフォローしている必要があります
+ following: おすすめしたい人はあなたが既にフォローしている必要があります
posts: トゥート
posts_with_replies: トゥートと返信
reserved_username: このユーザー名は予約されています
@@ -414,6 +418,12 @@ ja:
last_delivery: 最終配送
title: WebSub
topic: トピック
+ suspensions:
+ bad_acct_msg: 値が一致しませんでした。停止しようとしているアカウントに間違いはありませんか?
+ hint_html: 'アカウントの停止を確認するには、以下のフィールドに %{value} と入力してください:'
+ proceed: 完全に活動停止させる
+ title: "%{acct} を停止"
+ warning_html: 'このアカウントを停止すると、このアカウントから次のようなデータが不可逆的に 削除されます:'
title: 管理
admin_mailer:
new_report:
@@ -644,7 +654,6 @@ ja:
quadrillion: Q
thousand: K
trillion: T
- unit: ''
pagination:
newer: 新しいトゥート
next: 次
@@ -867,7 +876,7 @@ ja:
recovery_codes_regenerated: リカバリーコードが再生成されました
recovery_instructions_html: 携帯電話を紛失した場合、以下の内どれかのリカバリーコードを使用してアカウントへアクセスすることができます。リカバリーコードは大切に保全してください。 たとえば印刷してほかの重要な書類と一緒に保管することができます。
setup: 初期設定
- wrong_code: コードが間違っています。サーバー上の時間とデバイス上の時間が一致していることを確認してください。
+ wrong_code: コードが間違っています。サーバー上の時間とデバイス上の時間が一致していますか?
user_mailer:
backup_ready:
explanation: Mastodonアカウントのアーカイブを受け付けました。今すぐダウンロードできます!
diff --git a/config/locales/ka.yml b/config/locales/ka.yml
index 86d982665..c1105b017 100644
--- a/config/locales/ka.yml
+++ b/config/locales/ka.yml
@@ -6,6 +6,7 @@ ka:
about_this: შესახებ
administered_by: 'ადმინისტრატორი:'
api: აპი
+ apps: მობილური აპლიკაციები
closed_registrations: რეგისტრაციები ამჟამად ინსტანციაზე დახურულია. თუმცა! ანგარიშის შესაქმნელად შეგიძლიათ იპოვოთ სხვა ინსტანცია და იმავე ქსელზე იქონიოთ წვდომა იქიდან.
contact: კონტაქტი
contact_missing: არაა დაყენებული
@@ -281,6 +282,7 @@ ka:
search: ძებნა
title: ცნობილი ინსტანციები
invites:
+ deactivate_all: ყველას დეაქტივაცია
filter:
all: ყველა
available: ხელმისაწვდომი
@@ -660,6 +662,9 @@ ka:
no_account_html: არ გაქვთ ანგარიში? შეგიძლიათ დარეგისტრირდეთ აქ
proceed: გააგრძელეთ გასაყოლად
prompt: 'თქვენ გაჰყვებით:'
+ remote_interaction:
+ proceed: გააგრძელეთ ურთიერთქმედება
+ prompt: 'თქვენ გსურთ ურთიერთქმედება ამ ტუტთან:'
remote_unfollow:
error: შეცდომა
title: სათაური
@@ -743,6 +748,7 @@ ka:
private: არა-საჯარო ტუტი ვერ აიპინება
reblog: ბუსტი ვერ აიპინება
show_more: მეტის ჩვენება
+ sign_in_to_participate: საუბარში მონაწილეობისთვის გაიარეთ ავტორიზაცია
title: '%{name}: "%{quote}"'
visibilities:
private: მხოლოდ-მიმდევრები
diff --git a/config/locales/ko.yml b/config/locales/ko.yml
index b5da99049..1ae825443 100644
--- a/config/locales/ko.yml
+++ b/config/locales/ko.yml
@@ -640,7 +640,7 @@ ko:
publishing: 퍼블리싱
web: 웹
remote_follow:
- acct: 아이디@도메인을 입력해 주십시오
+ acct: 당신이 사용하는 아이디@도메인을 입력해 주십시오
missing_resource: 리디렉션 대상을 찾을 수 없습니다
no_account_html: 계정이 없나요? 여기에서 가입 할 수 있습니다
proceed: 팔로우 하기
diff --git a/config/locales/simple_form.fr.yml b/config/locales/simple_form.fr.yml
index b08f4aa9b..c13cfa50d 100644
--- a/config/locales/simple_form.fr.yml
+++ b/config/locales/simple_form.fr.yml
@@ -30,7 +30,7 @@ fr:
imports:
data: Un fichier CSV généré par une autre instance de Mastodon
sessions:
- otp: 'Entrez le code d’authentification à deux facteurs généré par votre téléphone ou utilisez un de vos codes de récupération :'
+ otp: 'Entrez le code d’authentification à deux facteurs généré par l''application de votre téléphone ou utilisez un de vos codes de récupération :'
user:
chosen_languages: Lorsque coché, seuls les pouets dans les langues sélectionnées seront affichés sur les fils publics
labels:
From 93537c55605eea78aac5ceeec7ca080b3c3befca Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Sat, 25 Aug 2018 13:28:07 +0200
Subject: [PATCH 173/196] Disable retries on all scheduled tasks (#8413)
---
app/workers/scheduler/backup_cleanup_scheduler.rb | 2 +-
app/workers/scheduler/doorkeeper_cleanup_scheduler.rb | 2 +-
app/workers/scheduler/email_scheduler.rb | 2 +-
app/workers/scheduler/feed_cleanup_scheduler.rb | 2 +-
app/workers/scheduler/ip_cleanup_scheduler.rb | 2 +-
app/workers/scheduler/media_cleanup_scheduler.rb | 2 +-
app/workers/scheduler/subscriptions_cleanup_scheduler.rb | 2 +-
app/workers/scheduler/subscriptions_scheduler.rb | 2 +-
app/workers/scheduler/user_cleanup_scheduler.rb | 2 +-
9 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/app/workers/scheduler/backup_cleanup_scheduler.rb b/app/workers/scheduler/backup_cleanup_scheduler.rb
index 023a77307..d43660699 100644
--- a/app/workers/scheduler/backup_cleanup_scheduler.rb
+++ b/app/workers/scheduler/backup_cleanup_scheduler.rb
@@ -3,7 +3,7 @@
class Scheduler::BackupCleanupScheduler
include Sidekiq::Worker
- sidekiq_options unique: :until_executed
+ sidekiq_options unique: :until_executed, retry: 0
def perform
old_backups.reorder(nil).find_each(&:destroy!)
diff --git a/app/workers/scheduler/doorkeeper_cleanup_scheduler.rb b/app/workers/scheduler/doorkeeper_cleanup_scheduler.rb
index fec08c6bc..e5e5f6bc4 100644
--- a/app/workers/scheduler/doorkeeper_cleanup_scheduler.rb
+++ b/app/workers/scheduler/doorkeeper_cleanup_scheduler.rb
@@ -3,7 +3,7 @@
class Scheduler::DoorkeeperCleanupScheduler
include Sidekiq::Worker
- sidekiq_options unique: :until_executed
+ sidekiq_options unique: :until_executed, retry: 0
def perform
Doorkeeper::AccessToken.where('revoked_at IS NOT NULL').where('revoked_at < NOW()').delete_all
diff --git a/app/workers/scheduler/email_scheduler.rb b/app/workers/scheduler/email_scheduler.rb
index 24117e424..24ec89b29 100644
--- a/app/workers/scheduler/email_scheduler.rb
+++ b/app/workers/scheduler/email_scheduler.rb
@@ -3,7 +3,7 @@
class Scheduler::EmailScheduler
include Sidekiq::Worker
- sidekiq_options unique: :until_executed
+ sidekiq_options unique: :until_executed, retry: 0
def perform
eligible_users.reorder(nil).find_each do |user|
diff --git a/app/workers/scheduler/feed_cleanup_scheduler.rb b/app/workers/scheduler/feed_cleanup_scheduler.rb
index b02bac883..cd2273418 100644
--- a/app/workers/scheduler/feed_cleanup_scheduler.rb
+++ b/app/workers/scheduler/feed_cleanup_scheduler.rb
@@ -3,7 +3,7 @@
class Scheduler::FeedCleanupScheduler
include Sidekiq::Worker
- sidekiq_options unique: :until_executed
+ sidekiq_options unique: :until_executed, retry: 0
def perform
clean_home_feeds!
diff --git a/app/workers/scheduler/ip_cleanup_scheduler.rb b/app/workers/scheduler/ip_cleanup_scheduler.rb
index 6bb93df7d..42620332e 100644
--- a/app/workers/scheduler/ip_cleanup_scheduler.rb
+++ b/app/workers/scheduler/ip_cleanup_scheduler.rb
@@ -5,7 +5,7 @@ class Scheduler::IpCleanupScheduler
RETENTION_PERIOD = 1.year
- sidekiq_options unique: :until_executed
+ sidekiq_options unique: :until_executed, retry: 0
def perform
time_ago = RETENTION_PERIOD.ago
diff --git a/app/workers/scheduler/media_cleanup_scheduler.rb b/app/workers/scheduler/media_cleanup_scheduler.rb
index a27e02953..fb01aa70c 100644
--- a/app/workers/scheduler/media_cleanup_scheduler.rb
+++ b/app/workers/scheduler/media_cleanup_scheduler.rb
@@ -3,7 +3,7 @@
class Scheduler::MediaCleanupScheduler
include Sidekiq::Worker
- sidekiq_options unique: :until_executed
+ sidekiq_options unique: :until_executed, retry: 0
def perform
unattached_media.find_each(&:destroy)
diff --git a/app/workers/scheduler/subscriptions_cleanup_scheduler.rb b/app/workers/scheduler/subscriptions_cleanup_scheduler.rb
index 06ba66205..5fba120f6 100644
--- a/app/workers/scheduler/subscriptions_cleanup_scheduler.rb
+++ b/app/workers/scheduler/subscriptions_cleanup_scheduler.rb
@@ -3,7 +3,7 @@
class Scheduler::SubscriptionsCleanupScheduler
include Sidekiq::Worker
- sidekiq_options unique: :until_executed
+ sidekiq_options unique: :until_executed, retry: 0
def perform
Subscription.expired.in_batches.delete_all
diff --git a/app/workers/scheduler/subscriptions_scheduler.rb b/app/workers/scheduler/subscriptions_scheduler.rb
index 4b0959af2..d5873bccb 100644
--- a/app/workers/scheduler/subscriptions_scheduler.rb
+++ b/app/workers/scheduler/subscriptions_scheduler.rb
@@ -3,7 +3,7 @@
class Scheduler::SubscriptionsScheduler
include Sidekiq::Worker
- sidekiq_options unique: :until_executed
+ sidekiq_options unique: :until_executed, retry: 0
def perform
Pubsubhubbub::SubscribeWorker.push_bulk(expiring_accounts.pluck(:id))
diff --git a/app/workers/scheduler/user_cleanup_scheduler.rb b/app/workers/scheduler/user_cleanup_scheduler.rb
index 626fb1652..881b911be 100644
--- a/app/workers/scheduler/user_cleanup_scheduler.rb
+++ b/app/workers/scheduler/user_cleanup_scheduler.rb
@@ -3,7 +3,7 @@
class Scheduler::UserCleanupScheduler
include Sidekiq::Worker
- sidekiq_options unique: :until_executed
+ sidekiq_options unique: :until_executed, retry: 0
def perform
User.where('confirmed_at is NULL AND confirmation_sent_at <= ?', 2.days.ago).reorder(nil).find_in_batches do |batch|
From 2a59c6a5e7ea1794232a12a3d0b46b24d8a9c858 Mon Sep 17 00:00:00 2001
From: M Somerville
Date: Sat, 25 Aug 2018 20:24:20 +0100
Subject: [PATCH 174/196] Default puma to running on localhost only. (#8429)
---
config/puma.rb | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/config/puma.rb b/config/puma.rb
index 0397b8920..d31ae40c8 100644
--- a/config/puma.rb
+++ b/config/puma.rb
@@ -4,7 +4,8 @@ threads threads_count, threads_count
if ENV['SOCKET'] then
bind 'unix://' + ENV['SOCKET']
else
- port ENV.fetch('PORT') { 3000 }
+ port_num = ENV.fetch('PORT') { 3000 }
+ bind "tcp://127.0.0.1:#{port_num}"
end
environment ENV.fetch('RAILS_ENV') { 'development' }
From cfe3cd58d6964b098a792ec476a14c41dbcada9f Mon Sep 17 00:00:00 2001
From: Alexander
Date: Sat, 25 Aug 2018 22:35:29 +0200
Subject: [PATCH 175/196] fix pam authentication for certain hostnames (#8412)
---
Gemfile.lock | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Gemfile.lock b/Gemfile.lock
index a11a715c4..b5129cea4 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -174,7 +174,7 @@ GEM
devise (~> 4.0)
railties (< 5.3)
rotp (~> 2.0)
- devise_pam_authenticatable2 (9.1.0)
+ devise_pam_authenticatable2 (9.1.1)
devise (>= 4.0.0)
rpam2 (~> 4.0)
diff-lcs (1.3)
From cd049454be9cb8bf5fb6bc5316539432316033aa Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Sat, 25 Aug 2018 22:46:59 +0200
Subject: [PATCH 176/196] Wait until relationship is loaded before showing
follow button (#8440)
Fix #8410
---
app/javascript/mastodon/features/account/components/header.js | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/app/javascript/mastodon/features/account/components/header.js b/app/javascript/mastodon/features/account/components/header.js
index dd2cd406b..eb9236aeb 100644
--- a/app/javascript/mastodon/features/account/components/header.js
+++ b/app/javascript/mastodon/features/account/components/header.js
@@ -104,7 +104,9 @@ export default class Header extends ImmutablePureComponent {
}
if (me !== account.get('id')) {
- if (account.getIn(['relationship', 'requested'])) {
+ if (!account.get('relationship')) { // Wait until the relationship is loaded
+ actionBtn = '';
+ } else if (account.getIn(['relationship', 'requested'])) {
actionBtn = (
From 22e46ebad84111f2a0eeb935ec05ba44a99ab2ba Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Sat, 25 Aug 2018 22:55:25 +0200
Subject: [PATCH 177/196] Add theme identifier to body classes for easier
custom CSS styling (#8439)
Add forgotten custom CSS admin setting strings
---
app/helpers/application_helper.rb | 14 +++++++++-----
app/views/layouts/application.html.haml | 6 +-----
config/locales/en.yml | 3 +++
spec/helpers/application_helper_spec.rb | 10 +++++-----
4 files changed, 18 insertions(+), 15 deletions(-)
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 327901e4e..9eb042938 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -27,11 +27,6 @@ module ApplicationHelper
Setting.open_deletion
end
- def add_rtl_body_class(other_classes)
- other_classes = "#{other_classes} rtl" if locale_direction == 'rtl'
- other_classes
- end
-
def locale_direction
if [:ar, :fa, :he].include?(I18n.locale)
'rtl'
@@ -77,4 +72,13 @@ module ApplicationHelper
def react_component(name, props = {})
content_tag(:div, nil, data: { component: name.to_s.camelcase, props: Oj.dump(props) })
end
+
+ def body_classes
+ output = (@body_classes || '').split(' ')
+ output << "theme-#{current_theme.parameterize}"
+ output << 'system-font' if current_account&.user&.setting_system_font_ui
+ output << current_account&.user&.setting_reduce_motion ? 'reduce-motion' : 'no-reduce-motion'
+ output << 'rtl' if locale_direction == 'rtl'
+ output.reject(&:blank?).join(' ')
+ end
end
diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml
index 68a903197..436864237 100755
--- a/app/views/layouts/application.html.haml
+++ b/app/views/layouts/application.html.haml
@@ -24,9 +24,5 @@
= yield :header_tags
- - body_classes ||= @body_classes || ''
- - body_classes += ' system-font' if current_account&.user&.setting_system_font_ui
- - body_classes += current_account&.user&.setting_reduce_motion ? ' reduce-motion' : ' no-reduce-motion'
-
- %body{ class: add_rtl_body_class(body_classes) }
+ %body{ class: body_classes }
= content_for?(:content) ? yield(:content) : yield
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 5e127dc71..d8a1086e4 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -350,6 +350,9 @@ en:
contact_information:
email: Business e-mail
username: Contact username
+ custom_css:
+ desc_html: Modify the look with CSS loaded on every page
+ title: Custom CSS
hero:
desc_html: Displayed on the frontpage. At least 600x100px recommended. When not set, falls back to instance thumbnail
title: Hero image
diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb
index ac54f1f70..3ccd96f44 100644
--- a/spec/helpers/application_helper_spec.rb
+++ b/spec/helpers/application_helper_spec.rb
@@ -17,7 +17,7 @@ describe ApplicationHelper do
end
end
- describe 'add_rtl_body_class' do
+ describe 'locale_direction' do
around do |example|
current_locale = I18n.locale
example.run
@@ -26,22 +26,22 @@ describe ApplicationHelper do
it 'adds rtl body class if locale is Arabic' do
I18n.locale = :ar
- expect(helper.add_rtl_body_class('other classes')).to eq 'other classes rtl'
+ expect(helper.locale_direction).to eq 'rtl'
end
it 'adds rtl body class if locale is Farsi' do
I18n.locale = :fa
- expect(helper.add_rtl_body_class('other classes')).to eq 'other classes rtl'
+ expect(helper.locale_direction).to eq 'rtl'
end
it 'adds rtl if locale is Hebrew' do
I18n.locale = :he
- expect(helper.add_rtl_body_class('other classes')).to eq 'other classes rtl'
+ expect(helper.locale_direction).to eq 'rtl'
end
it 'does not add rtl if locale is Thai' do
I18n.locale = :th
- expect(helper.add_rtl_body_class('other classes')).to eq 'other classes'
+ expect(helper.locale_direction).to_not eq 'rtl'
end
end
From 33054840280186789aa286fbfdf3aa76f09bdb36 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Sun, 26 Aug 2018 00:13:22 +0200
Subject: [PATCH 178/196] Revert "Default puma to running on localhost only."
(#8444)
* Revert "Default puma to running on localhost only. (#8429)"
This reverts commit 2a59c6a5e7ea1794232a12a3d0b46b24d8a9c858.
---
config/puma.rb | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/config/puma.rb b/config/puma.rb
index d31ae40c8..0397b8920 100644
--- a/config/puma.rb
+++ b/config/puma.rb
@@ -4,8 +4,7 @@ threads threads_count, threads_count
if ENV['SOCKET'] then
bind 'unix://' + ENV['SOCKET']
else
- port_num = ENV.fetch('PORT') { 3000 }
- bind "tcp://127.0.0.1:#{port_num}"
+ port ENV.fetch('PORT') { 3000 }
end
environment ENV.fetch('RAILS_ENV') { 'development' }
From df06f53f9b3cf75744dc776b755e223d4c3631df Mon Sep 17 00:00:00 2001
From: M Somerville
Date: Sat, 25 Aug 2018 23:18:40 +0100
Subject: [PATCH 179/196] Specify allowed media in upload button tooltip.
(#8443)
---
.../mastodon/features/compose/components/upload_button.js | 2 +-
app/javascript/mastodon/locales/en.json | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/javascript/mastodon/features/compose/components/upload_button.js b/app/javascript/mastodon/features/compose/components/upload_button.js
index 70b28a2ba..2f38f5148 100644
--- a/app/javascript/mastodon/features/compose/components/upload_button.js
+++ b/app/javascript/mastodon/features/compose/components/upload_button.js
@@ -7,7 +7,7 @@ import ImmutablePureComponent from 'react-immutable-pure-component';
import ImmutablePropTypes from 'react-immutable-proptypes';
const messages = defineMessages({
- upload: { id: 'upload_button.label', defaultMessage: 'Add media' },
+ upload: { id: 'upload_button.label', defaultMessage: 'Add media (JPEG, PNG, GIF, WebM, MP4)' },
});
const makeMapStateToProps = () => {
diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json
index 432c4f0b0..3d8fdc0d7 100644
--- a/app/javascript/mastodon/locales/en.json
+++ b/app/javascript/mastodon/locales/en.json
@@ -297,7 +297,7 @@
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"upload_area.title": "Drag & drop to upload",
- "upload_button.label": "Add media",
+ "upload_button.label": "Add media (JPEG, PNG, GIF, WebM, MP4)",
"upload_form.description": "Describe for the visually impaired",
"upload_form.focus": "Crop",
"upload_form.undo": "Delete",
From b4ba4b1b5da8d3c7a63ee41c2a440767e1e23104 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Sun, 26 Aug 2018 00:33:57 +0200
Subject: [PATCH 180/196] Spread out crawling randomly to avoid DDoSing the
link (#8445)
* Spread out crawling randomly to avoid DDoSing the link
Fix #4486
* Remove trailing whitespace
---
app/lib/activitypub/activity.rb | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/app/lib/activitypub/activity.rb b/app/lib/activitypub/activity.rb
index 03476920b..3a39b723e 100644
--- a/app/lib/activitypub/activity.rb
+++ b/app/lib/activitypub/activity.rb
@@ -104,7 +104,9 @@ class ActivityPub::Activity
def crawl_links(status)
return if status.spoiler_text?
- LinkCrawlWorker.perform_async(status.id)
+
+ # Spread out crawling randomly to avoid DDoSing the link
+ LinkCrawlWorker.perform_in(rand(1..59).seconds, status.id)
end
def distribute_to_followers(status)
From 5c42e8b51bec4bed32326989037fd519ba58dbe6 Mon Sep 17 00:00:00 2001
From: PatrickRWells <32802366+PatrickRWells@users.noreply.github.com>
Date: Sat, 25 Aug 2018 16:19:13 -0700
Subject: [PATCH 181/196] Fix CW issues in static view on Safari (Fixes #8354)
(#8446)
* Fix CW issues in static view on Safari (8354)
* Fixed formatting issues
* Trailing space
---
app/javascript/packs/public.js | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/app/javascript/packs/public.js b/app/javascript/packs/public.js
index dc18da853..c83e2889a 100644
--- a/app/javascript/packs/public.js
+++ b/app/javascript/packs/public.js
@@ -79,7 +79,10 @@ function main() {
.catch(error => console.error(error));
}
- new Rellax('.parallax', { speed: -1 });
+ const parallaxComponents = document.querySelectorAll('.parallax');
+ if (parallaxComponents.length > 0 ) {
+ new Rellax('.parallax', { speed: -1 });
+ }
const history = createHistory();
const detailedStatuses = document.querySelectorAll('.public-layout .detailed-status');
From f37fafe30b5f6ff85ebf87fb622293a855877ee1 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Sun, 26 Aug 2018 11:54:25 +0200
Subject: [PATCH 182/196] Add health endpoint to streaming API (#8441)
GET /api/v1/streaming/health
Answers with OK. Fix #8337
---
streaming/index.js | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/streaming/index.js b/streaming/index.js
index b5f6dbd87..1c6004b77 100644
--- a/streaming/index.js
+++ b/streaming/index.js
@@ -452,6 +452,12 @@ const startWorker = (workerId) => {
app.use(setRequestId);
app.use(setRemoteAddress);
app.use(allowCrossDomain);
+
+ app.get('/api/v1/streaming/health', (req, res) => {
+ res.writeHead(200, { 'Content-Type': 'text/plain' });
+ res.end('OK');
+ });
+
app.use(authenticationMiddleware);
app.use(errorMiddleware);
From 6c9be61f572f79cfe6ceb0599a05c1dcdf8d490c Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Sun, 26 Aug 2018 14:29:58 +0200
Subject: [PATCH 183/196] Fix regression from #8439 (#8455)
Missing no-reduce-motion/reduce-motion body class
---
app/helpers/application_helper.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 9eb042938..758f864d7 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -77,7 +77,7 @@ module ApplicationHelper
output = (@body_classes || '').split(' ')
output << "theme-#{current_theme.parameterize}"
output << 'system-font' if current_account&.user&.setting_system_font_ui
- output << current_account&.user&.setting_reduce_motion ? 'reduce-motion' : 'no-reduce-motion'
+ output << (current_account&.user&.setting_reduce_motion ? 'reduce-motion' : 'no-reduce-motion')
output << 'rtl' if locale_direction == 'rtl'
output.reject(&:blank?).join(' ')
end
From 104d089df16214855cf3860671f022f7d2520a51 Mon Sep 17 00:00:00 2001
From: Tad Thorley
Date: Sun, 26 Aug 2018 06:33:59 -0600
Subject: [PATCH 184/196] Update _bio.html.haml (#8449)
On my local instance (https://ruby.social) we have a custom emoji for octocat (:octocat:). I would love to be able to use the emoji in the metadata for my profile. Instead of:
| github | https://github.com/phaedryx
It could be:
| :octocat: | https://github.com/phaedryx
(using a single emoji makes it easier to read the urls)
---
app/views/accounts/_bio.html.haml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/views/accounts/_bio.html.haml b/app/views/accounts/_bio.html.haml
index c9a4d8f1b..4e674beff 100644
--- a/app/views/accounts/_bio.html.haml
+++ b/app/views/accounts/_bio.html.haml
@@ -3,7 +3,7 @@
.account__header__fields
- account.fields.each do |field|
%dl
- %dt.emojify{ title: field.name }= field.name
+ %dt.emojify{ title: field.name }= Formatter.instance.format_field(account, field.name, custom_emojify: true)
%dd.emojify{ title: field.value }= Formatter.instance.format_field(account, field.value, custom_emojify: true)
= account_badge(account)
From 5129f6f2aa56afb21708aec552a798d062ccaff9 Mon Sep 17 00:00:00 2001
From: Jakub Mendyk
Date: Sun, 26 Aug 2018 16:39:37 +0200
Subject: [PATCH 185/196] Add messages informing that collections are empty
(fixes #4115) (#8418)
* Add messages informing that collections are empty
Adds empty messages to blocked users, domain blocks, favourited statuses, users
that favourited toot, follow requests, followers of given user, user's being
followed by given user, lists, muted users, toots' boosts.
Switched from using ScrollContainer to ScrollableList and/or added empty
message's text.
Fixes #4115
* Update localization files with strings for #4115
* Fix whitespace issues pointed out by codeclimate
---
.../mastodon/features/blocks/index.js | 34 ++++++-----
.../mastodon/features/domain_blocks/index.js | 11 +++-
.../features/favourited_statuses/index.js | 5 +-
.../mastodon/features/favourites/index.js | 19 ++++--
.../features/follow_requests/index.js | 35 +++++------
.../mastodon/features/followers/index.js | 46 ++++++--------
.../mastodon/features/following/index.js | 46 ++++++--------
.../mastodon/features/lists/index.js | 18 ++++--
.../mastodon/features/mutes/index.js | 34 ++++++-----
.../mastodon/features/reblogs/index.js | 19 ++++--
app/javascript/mastodon/features/ui/index.js | 2 +-
app/javascript/mastodon/locales/ar.json | 10 ++++
app/javascript/mastodon/locales/ast.json | 10 ++++
app/javascript/mastodon/locales/bg.json | 10 ++++
app/javascript/mastodon/locales/ca.json | 10 ++++
app/javascript/mastodon/locales/co.json | 10 ++++
app/javascript/mastodon/locales/cs.json | 10 ++++
app/javascript/mastodon/locales/da.json | 10 ++++
app/javascript/mastodon/locales/de.json | 10 ++++
.../mastodon/locales/defaultMessages.json | 60 +++++++++++++++++++
app/javascript/mastodon/locales/el.json | 10 ++++
app/javascript/mastodon/locales/en.json | 10 ++++
app/javascript/mastodon/locales/eo.json | 10 ++++
app/javascript/mastodon/locales/es.json | 10 ++++
app/javascript/mastodon/locales/eu.json | 10 ++++
app/javascript/mastodon/locales/fa.json | 10 ++++
app/javascript/mastodon/locales/fi.json | 10 ++++
app/javascript/mastodon/locales/fr.json | 10 ++++
app/javascript/mastodon/locales/gl.json | 10 ++++
app/javascript/mastodon/locales/he.json | 10 ++++
app/javascript/mastodon/locales/hr.json | 10 ++++
app/javascript/mastodon/locales/hu.json | 10 ++++
app/javascript/mastodon/locales/hy.json | 10 ++++
app/javascript/mastodon/locales/id.json | 10 ++++
app/javascript/mastodon/locales/io.json | 10 ++++
app/javascript/mastodon/locales/it.json | 10 ++++
app/javascript/mastodon/locales/ja.json | 10 ++++
app/javascript/mastodon/locales/ka.json | 10 ++++
app/javascript/mastodon/locales/ko.json | 10 ++++
app/javascript/mastodon/locales/nl.json | 10 ++++
app/javascript/mastodon/locales/no.json | 10 ++++
app/javascript/mastodon/locales/oc.json | 10 ++++
app/javascript/mastodon/locales/pl.json | 10 ++++
app/javascript/mastodon/locales/pt-BR.json | 10 ++++
app/javascript/mastodon/locales/pt.json | 10 ++++
app/javascript/mastodon/locales/ru.json | 10 ++++
app/javascript/mastodon/locales/sk.json | 10 ++++
app/javascript/mastodon/locales/sl.json | 10 ++++
app/javascript/mastodon/locales/sr-Latn.json | 10 ++++
app/javascript/mastodon/locales/sr.json | 10 ++++
app/javascript/mastodon/locales/sv.json | 10 ++++
app/javascript/mastodon/locales/te.json | 10 ++++
app/javascript/mastodon/locales/th.json | 10 ++++
app/javascript/mastodon/locales/tr.json | 10 ++++
app/javascript/mastodon/locales/uk.json | 10 ++++
app/javascript/mastodon/locales/zh-CN.json | 10 ++++
app/javascript/mastodon/locales/zh-HK.json | 10 ++++
app/javascript/mastodon/locales/zh-TW.json | 10 ++++
58 files changed, 664 insertions(+), 125 deletions(-)
diff --git a/app/javascript/mastodon/features/blocks/index.js b/app/javascript/mastodon/features/blocks/index.js
index 0b88e50ae..68661a37c 100644
--- a/app/javascript/mastodon/features/blocks/index.js
+++ b/app/javascript/mastodon/features/blocks/index.js
@@ -1,15 +1,16 @@
import React from 'react';
import { connect } from 'react-redux';
-import { defineMessages, injectIntl } from 'react-intl';
+import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
import ImmutablePureComponent from 'react-immutable-pure-component';
import ImmutablePropTypes from 'react-immutable-proptypes';
+import { debounce } from 'lodash';
import PropTypes from 'prop-types';
import LoadingIndicator from '../../components/loading_indicator';
-import { ScrollContainer } from 'react-router-scroll-4';
import Column from '../ui/components/column';
import ColumnBackButtonSlim from '../../components/column_back_button_slim';
import AccountContainer from '../../containers/account_container';
import { fetchBlocks, expandBlocks } from '../../actions/blocks';
+import ScrollableList from '../../components/scrollable_list';
const messages = defineMessages({
heading: { id: 'column.blocks', defaultMessage: 'Blocked users' },
@@ -35,13 +36,9 @@ export default class Blocks extends ImmutablePureComponent {
this.props.dispatch(fetchBlocks());
}
- handleScroll = (e) => {
- const { scrollTop, scrollHeight, clientHeight } = e.target;
-
- if (scrollTop === scrollHeight - clientHeight) {
- this.props.dispatch(expandBlocks());
- }
- }
+ handleLoadMore = debounce(() => {
+ this.props.dispatch(expandBlocks());
+ }, 300, { leading: true });
render () {
const { intl, accountIds, shouldUpdateScroll } = this.props;
@@ -54,16 +51,21 @@ export default class Blocks extends ImmutablePureComponent {
);
}
+ const emptyMessage = ;
+
return (
-
-
- {accountIds.map(id =>
-
- )}
-
-
+
+ {accountIds.map(id =>
+
+ )}
+
);
}
diff --git a/app/javascript/mastodon/features/domain_blocks/index.js b/app/javascript/mastodon/features/domain_blocks/index.js
index e4e2b5239..2c40bf72d 100644
--- a/app/javascript/mastodon/features/domain_blocks/index.js
+++ b/app/javascript/mastodon/features/domain_blocks/index.js
@@ -1,6 +1,6 @@
import React from 'react';
import { connect } from 'react-redux';
-import { defineMessages, injectIntl } from 'react-intl';
+import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
import ImmutablePureComponent from 'react-immutable-pure-component';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
@@ -52,10 +52,17 @@ export default class Blocks extends ImmutablePureComponent {
);
}
+ const emptyMessage = ;
+
return (
-
+
{domains.map(domain =>
)}
diff --git a/app/javascript/mastodon/features/favourited_statuses/index.js b/app/javascript/mastodon/features/favourited_statuses/index.js
index 55fee88e6..499530cd9 100644
--- a/app/javascript/mastodon/features/favourited_statuses/index.js
+++ b/app/javascript/mastodon/features/favourited_statuses/index.js
@@ -7,7 +7,7 @@ import Column from '../ui/components/column';
import ColumnHeader from '../../components/column_header';
import { addColumn, removeColumn, moveColumn } from '../../actions/columns';
import StatusList from '../../components/status_list';
-import { defineMessages, injectIntl } from 'react-intl';
+import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
import ImmutablePureComponent from 'react-immutable-pure-component';
import { debounce } from 'lodash';
@@ -71,6 +71,8 @@ export default class Favourites extends ImmutablePureComponent {
const { intl, shouldUpdateScroll, statusIds, columnId, multiColumn, hasMore, isLoading } = this.props;
const pinned = !!columnId;
+ const emptyMessage = ;
+
return (
);
diff --git a/app/javascript/mastodon/features/favourites/index.js b/app/javascript/mastodon/features/favourites/index.js
index 40fe6c9a8..74a683ccc 100644
--- a/app/javascript/mastodon/features/favourites/index.js
+++ b/app/javascript/mastodon/features/favourites/index.js
@@ -5,10 +5,11 @@ import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
import LoadingIndicator from '../../components/loading_indicator';
import { fetchFavourites } from '../../actions/interactions';
-import { ScrollContainer } from 'react-router-scroll-4';
+import { FormattedMessage } from 'react-intl';
import AccountContainer from '../../containers/account_container';
import Column from '../ui/components/column';
import ColumnBackButton from '../../components/column_back_button';
+import ScrollableList from '../../components/scrollable_list';
const mapStateToProps = (state, props) => ({
accountIds: state.getIn(['user_lists', 'favourited_by', props.params.statusId]),
@@ -45,15 +46,21 @@ export default class Favourites extends ImmutablePureComponent {
);
}
+ const emptyMessage = ;
+
return (
-
-
- {accountIds.map(id =>
)}
-
-
+
+ {accountIds.map(id =>
+
+ )}
+
);
}
diff --git a/app/javascript/mastodon/features/follow_requests/index.js b/app/javascript/mastodon/features/follow_requests/index.js
index 53a394cbc..cb574e08d 100644
--- a/app/javascript/mastodon/features/follow_requests/index.js
+++ b/app/javascript/mastodon/features/follow_requests/index.js
@@ -1,15 +1,16 @@
import React from 'react';
import { connect } from 'react-redux';
-import { defineMessages, injectIntl } from 'react-intl';
+import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
import ImmutablePureComponent from 'react-immutable-pure-component';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
+import { debounce } from 'lodash';
import LoadingIndicator from '../../components/loading_indicator';
-import { ScrollContainer } from 'react-router-scroll-4';
import Column from '../ui/components/column';
import ColumnBackButtonSlim from '../../components/column_back_button_slim';
import AccountAuthorizeContainer from './containers/account_authorize_container';
import { fetchFollowRequests, expandFollowRequests } from '../../actions/accounts';
+import ScrollableList from '../../components/scrollable_list';
const messages = defineMessages({
heading: { id: 'column.follow_requests', defaultMessage: 'Follow requests' },
@@ -35,13 +36,9 @@ export default class FollowRequests extends ImmutablePureComponent {
this.props.dispatch(fetchFollowRequests());
}
- handleScroll = (e) => {
- const { scrollTop, scrollHeight, clientHeight } = e.target;
-
- if (scrollTop === scrollHeight - clientHeight) {
- this.props.dispatch(expandFollowRequests());
- }
- }
+ handleLoadMore = debounce(() => {
+ this.props.dispatch(expandFollowRequests());
+ }, 300, { leading: true });
render () {
const { intl, shouldUpdateScroll, accountIds } = this.props;
@@ -54,17 +51,21 @@ export default class FollowRequests extends ImmutablePureComponent {
);
}
+ const emptyMessage = ;
+
return (
-
-
-
- {accountIds.map(id =>
-
- )}
-
-
+
+ {accountIds.map(id =>
+
+ )}
+
);
}
diff --git a/app/javascript/mastodon/features/followers/index.js b/app/javascript/mastodon/features/followers/index.js
index 5bb8fdd6a..5eb05367e 100644
--- a/app/javascript/mastodon/features/followers/index.js
+++ b/app/javascript/mastodon/features/followers/index.js
@@ -3,18 +3,19 @@ import { connect } from 'react-redux';
import ImmutablePureComponent from 'react-immutable-pure-component';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
+import { debounce } from 'lodash';
import LoadingIndicator from '../../components/loading_indicator';
import {
fetchAccount,
fetchFollowers,
expandFollowers,
} from '../../actions/accounts';
-import { ScrollContainer } from 'react-router-scroll-4';
+import { FormattedMessage } from 'react-intl';
import AccountContainer from '../../containers/account_container';
import Column from '../ui/components/column';
import HeaderContainer from '../account_timeline/containers/header_container';
-import LoadMore from '../../components/load_more';
import ColumnBackButton from '../../components/column_back_button';
+import ScrollableList from '../../components/scrollable_list';
const mapStateToProps = (state, props) => ({
accountIds: state.getIn(['user_lists', 'followers', props.params.accountId, 'items']),
@@ -44,24 +45,13 @@ export default class Followers extends ImmutablePureComponent {
}
}
- handleScroll = (e) => {
- const { scrollTop, scrollHeight, clientHeight } = e.target;
-
- if (scrollTop === scrollHeight - clientHeight && this.props.hasMore) {
- this.props.dispatch(expandFollowers(this.props.params.accountId));
- }
- }
-
- handleLoadMore = (e) => {
- e.preventDefault();
+ handleLoadMore = debounce(() => {
this.props.dispatch(expandFollowers(this.props.params.accountId));
- }
+ }, 300, { leading: true });
render () {
const { shouldUpdateScroll, accountIds, hasMore } = this.props;
- let loadMore = null;
-
if (!accountIds) {
return (
@@ -70,23 +60,25 @@ export default class Followers extends ImmutablePureComponent {
);
}
- if (hasMore) {
- loadMore = ;
- }
+ const emptyMessage = ;
return (
-
-
-
-
- {accountIds.map(id =>
)}
- {loadMore}
-
-
-
+
+
+
+ {accountIds.map(id =>
+
+ )}
+
);
}
diff --git a/app/javascript/mastodon/features/following/index.js b/app/javascript/mastodon/features/following/index.js
index 97b0a8964..95e786882 100644
--- a/app/javascript/mastodon/features/following/index.js
+++ b/app/javascript/mastodon/features/following/index.js
@@ -3,18 +3,19 @@ import { connect } from 'react-redux';
import ImmutablePureComponent from 'react-immutable-pure-component';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
+import { debounce } from 'lodash';
import LoadingIndicator from '../../components/loading_indicator';
import {
fetchAccount,
fetchFollowing,
expandFollowing,
} from '../../actions/accounts';
-import { ScrollContainer } from 'react-router-scroll-4';
+import { FormattedMessage } from 'react-intl';
import AccountContainer from '../../containers/account_container';
import Column from '../ui/components/column';
import HeaderContainer from '../account_timeline/containers/header_container';
-import LoadMore from '../../components/load_more';
import ColumnBackButton from '../../components/column_back_button';
+import ScrollableList from '../../components/scrollable_list';
const mapStateToProps = (state, props) => ({
accountIds: state.getIn(['user_lists', 'following', props.params.accountId, 'items']),
@@ -44,24 +45,13 @@ export default class Following extends ImmutablePureComponent {
}
}
- handleScroll = (e) => {
- const { scrollTop, scrollHeight, clientHeight } = e.target;
-
- if (scrollTop === scrollHeight - clientHeight && this.props.hasMore) {
- this.props.dispatch(expandFollowing(this.props.params.accountId));
- }
- }
-
- handleLoadMore = (e) => {
- e.preventDefault();
+ handleLoadMore = debounce(() => {
this.props.dispatch(expandFollowing(this.props.params.accountId));
- }
+ }, 300, { leading: true });
render () {
const { shouldUpdateScroll, accountIds, hasMore } = this.props;
- let loadMore = null;
-
if (!accountIds) {
return (
@@ -70,23 +60,25 @@ export default class Following extends ImmutablePureComponent {
);
}
- if (hasMore) {
- loadMore = ;
- }
+ const emptyMessage = ;
return (
-
-
-
-
- {accountIds.map(id =>
)}
- {loadMore}
-
-
-
+
+
+
+ {accountIds.map(id =>
+
+ )}
+
);
}
diff --git a/app/javascript/mastodon/features/lists/index.js b/app/javascript/mastodon/features/lists/index.js
index 018e5a9e3..127347730 100644
--- a/app/javascript/mastodon/features/lists/index.js
+++ b/app/javascript/mastodon/features/lists/index.js
@@ -6,12 +6,13 @@ import LoadingIndicator from '../../components/loading_indicator';
import Column from '../ui/components/column';
import ColumnBackButtonSlim from '../../components/column_back_button_slim';
import { fetchLists } from '../../actions/lists';
-import { defineMessages, injectIntl } from 'react-intl';
+import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
import ImmutablePureComponent from 'react-immutable-pure-component';
import ColumnLink from '../ui/components/column_link';
import ColumnSubheading from '../ui/components/column_subheading';
import NewListForm from './components/new_list_form';
import { createSelector } from 'reselect';
+import ScrollableList from '../../components/scrollable_list';
const messages = defineMessages({
heading: { id: 'column.lists', defaultMessage: 'Lists' },
@@ -46,7 +47,7 @@ export default class Lists extends ImmutablePureComponent {
}
render () {
- const { intl, lists } = this.props;
+ const { intl, shouldUpdateScroll, lists } = this.props;
if (!lists) {
return (
@@ -56,19 +57,24 @@ export default class Lists extends ImmutablePureComponent {
);
}
+ const emptyMessage = ;
+
return (
-
-
-
+
+
{lists.map(list =>
)}
-
+
);
}
diff --git a/app/javascript/mastodon/features/mutes/index.js b/app/javascript/mastodon/features/mutes/index.js
index 66fd3796d..7bf9c1464 100644
--- a/app/javascript/mastodon/features/mutes/index.js
+++ b/app/javascript/mastodon/features/mutes/index.js
@@ -1,15 +1,16 @@
import React from 'react';
import { connect } from 'react-redux';
-import { defineMessages, injectIntl } from 'react-intl';
+import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
import ImmutablePureComponent from 'react-immutable-pure-component';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
+import { debounce } from 'lodash';
import LoadingIndicator from '../../components/loading_indicator';
-import { ScrollContainer } from 'react-router-scroll-4';
import Column from '../ui/components/column';
import ColumnBackButtonSlim from '../../components/column_back_button_slim';
import AccountContainer from '../../containers/account_container';
import { fetchMutes, expandMutes } from '../../actions/mutes';
+import ScrollableList from '../../components/scrollable_list';
const messages = defineMessages({
heading: { id: 'column.mutes', defaultMessage: 'Muted users' },
@@ -35,13 +36,9 @@ export default class Mutes extends ImmutablePureComponent {
this.props.dispatch(fetchMutes());
}
- handleScroll = (e) => {
- const { scrollTop, scrollHeight, clientHeight } = e.target;
-
- if (scrollTop === scrollHeight - clientHeight) {
- this.props.dispatch(expandMutes());
- }
- }
+ handleLoadMore = debounce(() => {
+ this.props.dispatch(expandMutes());
+ }, 300, { leading: true });
render () {
const { intl, shouldUpdateScroll, accountIds } = this.props;
@@ -54,16 +51,21 @@ export default class Mutes extends ImmutablePureComponent {
);
}
+ const emptyMessage = ;
+
return (
-
-
- {accountIds.map(id =>
-
- )}
-
-
+
+ {accountIds.map(id =>
+
+ )}
+
);
}
diff --git a/app/javascript/mastodon/features/reblogs/index.js b/app/javascript/mastodon/features/reblogs/index.js
index 367739636..acb9b40f9 100644
--- a/app/javascript/mastodon/features/reblogs/index.js
+++ b/app/javascript/mastodon/features/reblogs/index.js
@@ -5,10 +5,11 @@ import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
import LoadingIndicator from '../../components/loading_indicator';
import { fetchReblogs } from '../../actions/interactions';
-import { ScrollContainer } from 'react-router-scroll-4';
+import { FormattedMessage } from 'react-intl';
import AccountContainer from '../../containers/account_container';
import Column from '../ui/components/column';
import ColumnBackButton from '../../components/column_back_button';
+import ScrollableList from '../../components/scrollable_list';
const mapStateToProps = (state, props) => ({
accountIds: state.getIn(['user_lists', 'reblogged_by', props.params.statusId]),
@@ -45,15 +46,21 @@ export default class Reblogs extends ImmutablePureComponent {
);
}
+ const emptyMessage = ;
+
return (
-
-
- {accountIds.map(id =>
)}
-
-
+
+ {accountIds.map(id =>
+
+ )}
+
);
}
diff --git a/app/javascript/mastodon/features/ui/index.js b/app/javascript/mastodon/features/ui/index.js
index 34d52a7d2..91eb37900 100644
--- a/app/javascript/mastodon/features/ui/index.js
+++ b/app/javascript/mastodon/features/ui/index.js
@@ -177,7 +177,7 @@ class SwitchingColumnsArea extends React.PureComponent {
-
+
diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json
index bf0701094..163897e33 100644
--- a/app/javascript/mastodon/locales/ar.json
+++ b/app/javascript/mastodon/locales/ar.json
@@ -10,7 +10,9 @@
"account.endorse": "إبرازه على الملف الشخصي",
"account.follow": "تابِع",
"account.followers": "المتابعون",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "يتبع",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "يتابعك",
"account.hide_reblogs": "إخفاء ترقيات @{name}",
"account.media": "وسائط",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "نتائج البحث",
"emoji_button.symbols": "رموز",
"emoji_button.travel": "أماكن و أسفار",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "الخط الزمني المحلي فارغ. أكتب شيئا ما للعامة كبداية !",
"empty_column.direct": "لم تتلق أية رسالة خاصة مباشِرة بعد. سوف يتم عرض الرسائل المباشرة هنا إن قمت بإرسال واحدة أو تلقيت البعض منها.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "ليس هناك بعدُ أي محتوى ذو علاقة بهذا الوسم.",
"empty_column.home": "إنّ الخيط الزمني لصفحتك الرئيسية فارغ. قم بزيارة {public} أو استخدم حقل البحث لكي تكتشف مستخدمين آخرين.",
"empty_column.home.public_timeline": "الخيط العام",
"empty_column.list": "هذه القائمة فارغة مؤقتا و لكن سوف تمتلئ تدريجيا عندما يبدأ الأعضاء المُنتَمين إليها بنشر تبويقات.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "لم تتلق أي إشعار بعدُ. تفاعل مع المستخدمين الآخرين لإنشاء محادثة.",
"empty_column.public": "لا يوجد أي شيء هنا ! قم بنشر شيء ما للعامة، أو إتبع مستخدمين آخرين في الخوادم المثيلة الأخرى لملء خيط المحادثات العام",
"follow_request.authorize": "ترخيص",
@@ -276,6 +285,7 @@
"status.reblog": "رَقِّي",
"status.reblog_private": "القيام بالترقية إلى الجمهور الأصلي",
"status.reblogged_by": "رقّاه {name}",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "إزالة و إعادة الصياغة",
"status.reply": "ردّ",
"status.replyAll": "رُد على الخيط",
diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json
index a6d951626..8226eb7b2 100644
--- a/app/javascript/mastodon/locales/ast.json
+++ b/app/javascript/mastodon/locales/ast.json
@@ -10,7 +10,9 @@
"account.endorse": "Feature on profile",
"account.follow": "Follow",
"account.followers": "Followers",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "Follows",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "Follows you",
"account.hide_reblogs": "Hide boosts from @{name}",
"account.media": "Media",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "Search results",
"emoji_button.symbols": "Symbols",
"emoji_button.travel": "Travel & Places",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!",
"empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "There is nothing in this hashtag yet.",
"empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
"empty_column.home.public_timeline": "the public timeline",
"empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
"empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up",
"follow_request.authorize": "Authorize",
@@ -276,6 +285,7 @@
"status.reblog": "Boost",
"status.reblog_private": "Boost to original audience",
"status.reblogged_by": "{name} boosted",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Delete & re-draft",
"status.reply": "Reply",
"status.replyAll": "Reply to thread",
diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json
index ae8222db5..da1d72a2d 100644
--- a/app/javascript/mastodon/locales/bg.json
+++ b/app/javascript/mastodon/locales/bg.json
@@ -10,7 +10,9 @@
"account.endorse": "Feature on profile",
"account.follow": "Последвай",
"account.followers": "Последователи",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "Следвам",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "Твой последовател",
"account.hide_reblogs": "Hide boosts from @{name}",
"account.media": "Media",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "Search results",
"emoji_button.symbols": "Symbols",
"emoji_button.travel": "Travel & Places",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!",
"empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "There is nothing in this hashtag yet.",
"empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
"empty_column.home.public_timeline": "the public timeline",
"empty_column.list": "There is nothing in this list yet.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
"empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up",
"follow_request.authorize": "Authorize",
@@ -276,6 +285,7 @@
"status.reblog": "Споделяне",
"status.reblog_private": "Boost to original audience",
"status.reblogged_by": "{name} сподели",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Delete & re-draft",
"status.reply": "Отговор",
"status.replyAll": "Reply to thread",
diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json
index 216e5d0f2..5e8200b10 100644
--- a/app/javascript/mastodon/locales/ca.json
+++ b/app/javascript/mastodon/locales/ca.json
@@ -10,7 +10,9 @@
"account.endorse": "Feature on profile",
"account.follow": "Segueix",
"account.followers": "Seguidors",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "Seguint",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "Et segueix",
"account.hide_reblogs": "Amaga els impulsos de @{name}",
"account.media": "Media",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "Resultats de la cerca",
"emoji_button.symbols": "Símbols",
"emoji_button.travel": "Viatges i Llocs",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "La línia de temps local és buida. Escriu alguna cosa públicament per fer rodar la pilota!",
"empty_column.direct": "Encara no tens missatges directes. Quan enviïs o rebis un, es mostrarà aquí.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "Encara no hi ha res amb aquesta etiqueta.",
"empty_column.home": "Encara no segueixes ningú. Visita {public} o fes cerca per començar i conèixer altres usuaris.",
"empty_column.home.public_timeline": "la línia de temps pública",
"empty_column.list": "Encara no hi ha res en aquesta llista. Quan els membres d'aquesta llista publiquin nous estats, apareixeran aquí.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "Encara no tens notificacions. Interactua amb altres per iniciar la conversa.",
"empty_column.public": "No hi ha res aquí! Escriu alguna cosa públicament o segueix manualment usuaris d'altres instàncies per omplir-ho",
"follow_request.authorize": "Autoritzar",
@@ -276,6 +285,7 @@
"status.reblog": "Impuls",
"status.reblog_private": "Impulsar a l'audiència original",
"status.reblogged_by": "{name} ha retootejat",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Esborrar i reescriure",
"status.reply": "Respondre",
"status.replyAll": "Respondre al tema",
diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json
index 91cdb541c..dfbaf54fe 100644
--- a/app/javascript/mastodon/locales/co.json
+++ b/app/javascript/mastodon/locales/co.json
@@ -10,7 +10,9 @@
"account.endorse": "Feature on profile",
"account.follow": "Siguità",
"account.followers": "Abbunati",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "Abbunamenti",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "Vi seguita",
"account.hide_reblogs": "Piattà spartere da @{name}",
"account.media": "Media",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "Risultati di a cerca",
"emoji_button.symbols": "Simbuli",
"emoji_button.travel": "Lochi è Viaghju",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "Ùn c'hè nunda indè a linea lucale. Scrivete puru qualcosa!",
"empty_column.direct": "Ùn avete ancu nisun missaghju direttu. S'è voi mandate o ricevete unu, u vidarete quì.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "Ùn c'hè ancu nunda quì.",
"empty_column.home": "A vostr'accolta hè viota! Pudete andà nant'à {public} o pruvà a ricerca per truvà parsone da siguità.",
"empty_column.home.public_timeline": "a linea pubblica",
"empty_column.list": "Ùn c'hè ancu nunda quì. Quandu membri di sta lista manderanu novi statuti, i vidarete quì.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "Ùn avete ancu nisuna nutificazione. Interact with others to start the conversation.",
"empty_column.public": "Ùn c'hè nunda quì! Scrivete qualcosa in pubblicu o seguitate utilizatori d'altre istanze per empie a linea pubblica",
"follow_request.authorize": "Auturizà",
@@ -276,6 +285,7 @@
"status.reblog": "Sparte",
"status.reblog_private": "Sparte à l'audienza uriginale",
"status.reblogged_by": "{name} hà spartutu",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Sguassà è riscrive",
"status.reply": "Risponde",
"status.replyAll": "Risponde à tutti",
diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json
index 2b19628a5..daad3c5e8 100644
--- a/app/javascript/mastodon/locales/cs.json
+++ b/app/javascript/mastodon/locales/cs.json
@@ -10,7 +10,9 @@
"account.endorse": "Představit na profilu",
"account.follow": "Sleduj",
"account.followers": "Sledovatelé",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "Sleduje",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "Sleduje vás",
"account.hide_reblogs": "Skrýt boosty od uživatele @{name}",
"account.media": "Média",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "Výsledky hledání",
"emoji_button.symbols": "Symboly",
"emoji_button.travel": "Cestování a místa",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "Místní časová osa je prázdná. Napište něco veřejně a rozhýbejte to tu!",
"empty_column.direct": "Ještě nemáte žádné přímé zprávy. Pokud nějakou pošlete nebo dostanete, zobrazí se zde.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "Pod tímto hashtagem ještě nic není.",
"empty_column.home": "Vaše domovská časová osa je prázdná! Začněte navštívením {public} nebo použijte hledání a seznamte se s dalšími uživateli.",
"empty_column.home.public_timeline": "veřejné časové osy",
"empty_column.list": "V tomto seznamu ještě nic není. Pokud budou členové tohoto seznamu psát nové příspěvky, objeví se zde.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "Ještě nemáte žádná oznámení. Začněte konverzaci komunikováním s ostatními.",
"empty_column.public": "Tady nic není! Napište něco veřejně, nebo manuálně začněte sledovat uživatele z jiných instancí, aby tu něco přibylo",
"follow_request.authorize": "Autorizovat",
@@ -276,6 +285,7 @@
"status.reblog": "Boostnout",
"status.reblog_private": "Boostnout původnímu publiku",
"status.reblogged_by": "{name} boostnul/a",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Vymazat a přepsat",
"status.reply": "Odpovědět",
"status.replyAll": "Odpovědět na vlákno",
diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json
index 92a09602c..ffe0821f3 100644
--- a/app/javascript/mastodon/locales/da.json
+++ b/app/javascript/mastodon/locales/da.json
@@ -10,7 +10,9 @@
"account.endorse": "Fremhæv på profil",
"account.follow": "Følg",
"account.followers": "Følgere",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "Følger",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "Følger dig",
"account.hide_reblogs": "Skjul fremhævelserne fra @{name}",
"account.media": "Medie",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "Søgeresultater",
"emoji_button.symbols": "Symboler",
"emoji_button.travel": "Rejser & steder",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "Den lokale tidslinje er tom. Skriv noget offentligt for at starte lavinen!",
"empty_column.direct": "Du har endnu ingen direkte beskeder. Når du sender eller modtager en, vil den vises her.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "Dette hashtag indeholder endnu ikke noget.",
"empty_column.home": "Din hjemme tidslinje er tom! Besøg {public} eller brug søgningen for at komme igang og møde andre brugere.",
"empty_column.home.public_timeline": "den offentlige tidslinje",
"empty_column.list": "Der er endnu intet i denne liste. Når medlemmer af denne liste poster nye statusser, vil de vises her.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "Du har endnu ingen notifikationer. Tag ud og bland dig med folkemængden for at starte samtalen.",
"empty_column.public": "Der er ikke noget at se her! Skriv noget offentligt eller start ud med manuelt at følge brugere fra andre instanser for st udfylde tomrummet",
"follow_request.authorize": "Godkend",
@@ -276,6 +285,7 @@
"status.reblog": "Fremhæv",
"status.reblog_private": "Fremhæv til oprindeligt publikum",
"status.reblogged_by": "{name} fremhævede",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Slet og omskriv",
"status.reply": "Svar",
"status.replyAll": "Svar samtale",
diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json
index e6139b218..00e1a0e6a 100644
--- a/app/javascript/mastodon/locales/de.json
+++ b/app/javascript/mastodon/locales/de.json
@@ -10,7 +10,9 @@
"account.endorse": "Feature on profile",
"account.follow": "Folgen",
"account.followers": "Folgende",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "Folgt",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "Folgt dir",
"account.hide_reblogs": "Geteilte Beiträge von @{name} verbergen",
"account.media": "Medien",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "Suchergebnisse",
"emoji_button.symbols": "Symbole",
"emoji_button.travel": "Reisen und Orte",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "Die lokale Zeitleiste ist leer. Schreibe einen öffentlichen Beitrag, um den Ball ins Rollen zu bringen!",
"empty_column.direct": "Du hast noch keine Direktnachrichten erhalten. Wenn du eine sendest oder empfängst, wird sie hier zu sehen sein.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "Unter diesem Hashtag gibt es noch nichts.",
"empty_column.home": "Deine Startseite ist leer! Besuche {public} oder nutze die Suche, um loszulegen und andere Leute zu finden.",
"empty_column.home.public_timeline": "die öffentliche Zeitleiste",
"empty_column.list": "Diese Liste ist derzeit leer. Wenn Wesen auf dieser Liste neue Beiträge veröffentlichen werden sie hier erscheinen.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "Du hast noch keine Mitteilungen. Interagiere mit anderen, um ins Gespräch zu kommen.",
"empty_column.public": "Hier ist nichts zu sehen! Schreibe etwas öffentlich oder folge Profilen von anderen Instanzen, um die Zeitleiste aufzufüllen",
"follow_request.authorize": "Erlauben",
@@ -276,6 +285,7 @@
"status.reblog": "Teilen",
"status.reblog_private": "An das eigentliche Publikum teilen",
"status.reblogged_by": "{name} teilte",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Löschen und neu erstellen",
"status.reply": "Antworten",
"status.replyAll": "Auf Thread antworten",
diff --git a/app/javascript/mastodon/locales/defaultMessages.json b/app/javascript/mastodon/locales/defaultMessages.json
index 13c7904f7..1aaa4508e 100644
--- a/app/javascript/mastodon/locales/defaultMessages.json
+++ b/app/javascript/mastodon/locales/defaultMessages.json
@@ -638,6 +638,10 @@
{
"defaultMessage": "Blocked users",
"id": "column.blocks"
+ },
+ {
+ "defaultMessage": "You haven't blocked any users yet.",
+ "id": "empty_column.blocks"
}
],
"path": "app/javascript/mastodon/features/blocks/index.json"
@@ -1049,6 +1053,10 @@
{
"defaultMessage": "Unhide {domain}",
"id": "account.unblock_domain"
+ },
+ {
+ "defaultMessage": "There are no hidden domains yet.",
+ "id": "empty_column.domain_blocks"
}
],
"path": "app/javascript/mastodon/features/domain_blocks/index.json"
@@ -1058,10 +1066,23 @@
{
"defaultMessage": "Favourites",
"id": "column.favourites"
+ },
+ {
+ "defaultMessage": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "id": "empty_column.favourited_statuses"
}
],
"path": "app/javascript/mastodon/features/favourited_statuses/index.json"
},
+ {
+ "descriptors": [
+ {
+ "defaultMessage": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "id": "empty_column.favourites"
+ }
+ ],
+ "path": "app/javascript/mastodon/features/favourites/index.json"
+ },
{
"descriptors": [
{
@@ -1080,10 +1101,32 @@
{
"defaultMessage": "Follow requests",
"id": "column.follow_requests"
+ },
+ {
+ "defaultMessage": "You don't have any follow requests yet. When you receive one, it will show up here.",
+ "id": "empty_column.follow_requests"
}
],
"path": "app/javascript/mastodon/features/follow_requests/index.json"
},
+ {
+ "descriptors": [
+ {
+ "defaultMessage": "No one follows this user yet.",
+ "id": "account.followers.empty"
+ }
+ ],
+ "path": "app/javascript/mastodon/features/followers/index.json"
+ },
+ {
+ "descriptors": [
+ {
+ "defaultMessage": "This user doesn't follow anyone yet.",
+ "id": "account.follows.empty"
+ }
+ ],
+ "path": "app/javascript/mastodon/features/following/index.json"
+ },
{
"descriptors": [
{
@@ -1398,6 +1441,10 @@
{
"defaultMessage": "Your lists",
"id": "lists.subheading"
+ },
+ {
+ "defaultMessage": "You don't have any lists yet. When you create one, it will show up here.",
+ "id": "empty_column.lists"
}
],
"path": "app/javascript/mastodon/features/lists/index.json"
@@ -1407,6 +1454,10 @@
{
"defaultMessage": "Muted users",
"id": "column.mutes"
+ },
+ {
+ "defaultMessage": "You haven't muted any users yet.",
+ "id": "empty_column.mutes"
}
],
"path": "app/javascript/mastodon/features/mutes/index.json"
@@ -1526,6 +1577,15 @@
],
"path": "app/javascript/mastodon/features/public_timeline/index.json"
},
+ {
+ "descriptors": [
+ {
+ "defaultMessage": "No one has boosted this toot yet. When someone does, they will show up here.",
+ "id": "status.reblogs.empty"
+ }
+ ],
+ "path": "app/javascript/mastodon/features/reblogs/index.json"
+ },
{
"descriptors": [
{
diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json
index fad0aa9bc..647aac5e7 100644
--- a/app/javascript/mastodon/locales/el.json
+++ b/app/javascript/mastodon/locales/el.json
@@ -10,7 +10,9 @@
"account.endorse": "Feature on profile",
"account.follow": "Ακολούθησε",
"account.followers": "Ακόλουθοι",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "Ακολουθεί",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "Σε ακολουθεί",
"account.hide_reblogs": "Απόκρυψη προωθήσεων από @{name}",
"account.media": "Πολυμέσα",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "Αποτελέσματα αναζήτησης",
"emoji_button.symbols": "Σύμβολα",
"emoji_button.travel": "Ταξίδια & Τοποθεσίες",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "Η τοπική ροή είναι κενή. Γράψε κάτι δημόσιο παραμύθι ν' αρχινίσει!",
"empty_column.direct": "Δεν έχεις προσωπικά μηνύματα ακόμα. Όταν στείλεις ή λάβεις κανένα, θα εμφανιστεί εδώ.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "Δεν υπάρχει ακόμα κάτι για αυτή την ταμπέλα.",
"empty_column.home": "Η τοπική σου ροή είναι κενή! Πήγαινε στο {public} ή κάνε αναζήτηση για να ξεκινήσεις και να γνωρίσεις άλλους χρήστες.",
"empty_column.home.public_timeline": "η δημόσια ροή",
"empty_column.list": "Δεν υπάρχει τίποτα σε αυτή τη λίστα ακόμα. Όταν τα μέλη της δημοσιεύσουν νέες καταστάσεις, θα εμφανιστούν εδώ.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "Δεν έχεις ειδοποιήσεις ακόμα. Αλληλεπίδρασε με άλλους χρήστες για να ξεκινήσεις την κουβέντα.",
"empty_column.public": "Δεν υπάρχει τίποτα εδώ! Γράψε κάτι δημόσιο, ή ακολούθησε χειροκίνητα χρήστες από άλλα instances για να τη γεμίσεις",
"follow_request.authorize": "Ενέκρινε",
@@ -276,6 +285,7 @@
"status.reblog": "Προώθησε",
"status.reblog_private": "Προώθησε στους αρχικούς παραλήπτες",
"status.reblogged_by": "{name} προώθησε",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Σβήσε & ξαναγράψε",
"status.reply": "Απάντησε",
"status.replyAll": "Απάντησε στην συζήτηση",
diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json
index 3d8fdc0d7..283f84b02 100644
--- a/app/javascript/mastodon/locales/en.json
+++ b/app/javascript/mastodon/locales/en.json
@@ -10,7 +10,9 @@
"account.endorse": "Feature on profile",
"account.follow": "Follow",
"account.followers": "Followers",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "Follows",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "Follows you",
"account.hide_reblogs": "Hide boosts from @{name}",
"account.media": "Media",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "Search results",
"emoji_button.symbols": "Symbols",
"emoji_button.travel": "Travel & Places",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!",
"empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "There is nothing in this hashtag yet.",
"empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
"empty_column.home.public_timeline": "the public timeline",
"empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
"empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up",
"follow_request.authorize": "Authorize",
@@ -276,6 +285,7 @@
"status.reblog": "Boost",
"status.reblog_private": "Boost to original audience",
"status.reblogged_by": "{name} boosted",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Delete & re-draft",
"status.reply": "Reply",
"status.replyAll": "Reply to thread",
diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json
index cfeef55bb..d339349c8 100644
--- a/app/javascript/mastodon/locales/eo.json
+++ b/app/javascript/mastodon/locales/eo.json
@@ -10,7 +10,9 @@
"account.endorse": "Montri en profilo",
"account.follow": "Sekvi",
"account.followers": "Sekvantoj",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "Sekvatoj",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "Sekvas vin",
"account.hide_reblogs": "Kaŝi diskonigojn de @{name}",
"account.media": "Aŭdovidaĵoj",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "Serĉaj rezultoj",
"emoji_button.symbols": "Simboloj",
"emoji_button.travel": "Vojaĝoj kaj lokoj",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "La loka tempolinio estas malplena. Skribu ion por plenigi ĝin!",
"empty_column.direct": "Vi ankoraŭ ne havas rektan mesaĝon. Kiam vi sendos aŭ ricevos iun, ĝi aperos ĉi tie.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "Ankoraŭ estas nenio per ĉi tiu kradvorto.",
"empty_column.home": "Via hejma tempolinio estas malplena! Vizitu {public} aŭ uzu la serĉilon por renkonti aliajn uzantojn.",
"empty_column.home.public_timeline": "la publikan tempolinion",
"empty_column.list": "Ankoraŭ estas nenio en ĉi tiu listo. Kiam membroj de ĉi tiu listo afiŝos novajn mesaĝojn, ili aperos ĉi tie.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "Vi ankoraŭ ne havas sciigojn. Interagu kun aliaj por komenci konversacion.",
"empty_column.public": "Estas nenio ĉi tie! Publike skribu ion, aŭ mane sekvu uzantojn de aliaj nodoj por plenigi la publikan tempolinion",
"follow_request.authorize": "Rajtigi",
@@ -276,6 +285,7 @@
"status.reblog": "Diskonigi",
"status.reblog_private": "Diskonigi al la originala atentaro",
"status.reblogged_by": "{name} diskonigis",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Forigi kaj reskribi",
"status.reply": "Respondi",
"status.replyAll": "Respondi al la fadeno",
diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json
index 7e835cd65..6f421d907 100644
--- a/app/javascript/mastodon/locales/es.json
+++ b/app/javascript/mastodon/locales/es.json
@@ -10,7 +10,9 @@
"account.endorse": "Feature on profile",
"account.follow": "Seguir",
"account.followers": "Seguidores",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "Sigue",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "Te sigue",
"account.hide_reblogs": "Ocultar retoots de @{name}",
"account.media": "Media",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "Resultados de búsqueda",
"emoji_button.symbols": "Símbolos",
"emoji_button.travel": "Viajes y lugares",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "La línea de tiempo local está vacía. ¡Escribe algo para empezar la fiesta!",
"empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "No hay nada en este hashtag aún.",
"empty_column.home": "No estás siguiendo a nadie aún. Visita {public} o haz búsquedas para empezar y conocer gente nueva.",
"empty_column.home.public_timeline": "la línea de tiempo pública",
"empty_column.list": "No hay nada en esta lista aún. Cuando miembros de esta lista publiquen nuevos estatus, estos aparecerán qui.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "No tienes ninguna notificación aún. Interactúa con otros para empezar una conversación.",
"empty_column.public": "¡No hay nada aquí! Escribe algo públicamente, o sigue usuarios de otras instancias manualmente para llenarlo",
"follow_request.authorize": "Autorizar",
@@ -276,6 +285,7 @@
"status.reblog": "Retootear",
"status.reblog_private": "Boost to original audience",
"status.reblogged_by": "Retooteado por {name}",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Delete & re-draft",
"status.reply": "Responder",
"status.replyAll": "Responder al hilo",
diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json
index c5cf627e8..e72eea0bd 100644
--- a/app/javascript/mastodon/locales/eu.json
+++ b/app/javascript/mastodon/locales/eu.json
@@ -10,7 +10,9 @@
"account.endorse": "Nabarmendu profilean",
"account.follow": "Jarraitu",
"account.followers": "Jarraitzaileak",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "Jarraitzen",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "Jarraitzen zaitu",
"account.hide_reblogs": "Ezkutatu @{name}(r)en bultzadak",
"account.media": "Media",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "Bilaketaren emaitzak",
"emoji_button.symbols": "Sinboloak",
"emoji_button.travel": "Bidaiak eta tokiak",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "Denbora-lerro lokala hutsik dago. Idatzi zerbait publikoki pilota biraka jartzeko!",
"empty_column.direct": "Ez duzu mezu zuzenik oraindik. Baten bat bidali edo jasotzen duzunean, hemen agertuko da.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "Ez dago ezer traola honetan oraindik.",
"empty_column.home": "Zure hasierako denbora-lerroa hutsik dago! Ikusi {public} edo erabili bilaketa lehen urratsak eman eta beste batzuk aurkitzeko.",
"empty_column.home.public_timeline": "denbora-lerro publikoa",
"empty_column.list": "Ez dago ezer zerrenda honetan. Zerrenda honetako kideek mezu berriak argitaratzean, hemen agertuko dira.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "Ez duzu jakinarazpenik oraindik. Jarri besteekin harremanetan elkarrizketa abiatzeko.",
"empty_column.public": "Ez dago ezer hemen! Idatzi zerbait publikoki edo jarraitu eskuz beste instantzia batzuetako erabiltzailean hau betetzeko",
"follow_request.authorize": "Baimendu",
@@ -276,6 +285,7 @@
"status.reblog": "Bultzada",
"status.reblog_private": "Bultzada jatorrizko hartzaileei",
"status.reblogged_by": "{name}(r)en bultzada",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Ezabatu eta berridatzi",
"status.reply": "Erantzun",
"status.replyAll": "Erantzun harian",
diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json
index 55615baa3..2ca522315 100644
--- a/app/javascript/mastodon/locales/fa.json
+++ b/app/javascript/mastodon/locales/fa.json
@@ -10,7 +10,9 @@
"account.endorse": "نمایش در نمایه",
"account.follow": "پی بگیرید",
"account.followers": "پیگیران",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "پی میگیرد",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "پیگیر شماست",
"account.hide_reblogs": "پنهان کردن بازبوقهای @{name}",
"account.media": "عکس و ویدیو",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "نتایج جستجو",
"emoji_button.symbols": "نمادها",
"emoji_button.travel": "سفر و مکان",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "فهرست نوشتههای محلی خالی است. چیزی بنویسید تا چرخش بچرخد!",
"empty_column.direct": "شما هیچ پیغام مستقیمی ندارید. اگر چنین پیغامی بگیرید یا بفرستید اینجا نمایش خواهد یافت.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "هنوز هیچ چیزی با این هشتگ نیست.",
"empty_column.home": "شما هنوز پیگیر کسی نیستید. {public} را ببینید یا چیزی را جستجو کنید تا کاربران دیگر را ببینید.",
"empty_column.home.public_timeline": "فهرست نوشتههای همهجا",
"empty_column.list": "در این فهرست هنوز چیزی نیست. وقتی اعضای این فهرست چیزی بنویسند، اینجا ظاهر خواهد شد.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "هنوز هیچ اعلانی ندارید. به نوشتههای دیگران واکنش نشان دهید تا گفتگو آغاز شود.",
"empty_column.public": "اینجا هنوز چیزی نیست! خودتان چیزی بنویسید یا کاربران دیگر را پی بگیرید تا اینجا پر شود",
"follow_request.authorize": "اجازه دهید",
@@ -276,6 +285,7 @@
"status.reblog": "بازبوقیدن",
"status.reblog_private": "بازبوق به مخاطبان اولیه",
"status.reblogged_by": "{name} بازبوقید",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "پاککردن و بازنویسی",
"status.reply": "پاسخ",
"status.replyAll": "به نوشته پاسخ دهید",
diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json
index fcf08a9b9..8fb1167b0 100644
--- a/app/javascript/mastodon/locales/fi.json
+++ b/app/javascript/mastodon/locales/fi.json
@@ -10,7 +10,9 @@
"account.endorse": "Feature on profile",
"account.follow": "Seuraa",
"account.followers": "Seuraajia",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "Seuraa",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "Seuraa sinua",
"account.hide_reblogs": "Piilota buustaukset käyttäjältä @{name}",
"account.media": "Media",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "Hakutulokset",
"emoji_button.symbols": "Symbolit",
"emoji_button.travel": "Matkailu",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "Paikallinen aikajana on tyhjä. Homma lähtee käyntiin, kun kirjoitat jotain julkista!",
"empty_column.direct": "Sinulla ei ole vielä yhtään viestiä yksittäiselle käyttäjälle. Kun lähetät tai vastaanotat sellaisen, se näkyy täällä.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "Tällä hashtagilla ei ole vielä mitään.",
"empty_column.home": "Kotiaikajanasi on tyhjä! {public} ja hakutoiminto auttavat alkuun ja kohtaamaan muita käyttäjiä.",
"empty_column.home.public_timeline": "yleinen aikajana",
"empty_column.list": "Lista on vielä tyhjä. Listan jäsenten julkaisemat tilapäivitykset tulevat tähän näkyviin.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "Sinulle ei ole vielä ilmoituksia. Aloita keskustelu juttelemalla muille.",
"empty_column.public": "Täällä ei ole mitään! Saat sisältöä, kun kirjoitat jotain julkisesti tai käyt manuaalisesti seuraamassa muiden instanssien käyttäjiä",
"follow_request.authorize": "Valtuuta",
@@ -276,6 +285,7 @@
"status.reblog": "Buustaa",
"status.reblog_private": "Buustaa alkuperäiselle yleisölle",
"status.reblogged_by": "{name} buustasi",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Delete & re-draft",
"status.reply": "Vastaa",
"status.replyAll": "Vastaa ketjuun",
diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json
index 79d318d1b..041e1fc58 100644
--- a/app/javascript/mastodon/locales/fr.json
+++ b/app/javascript/mastodon/locales/fr.json
@@ -10,7 +10,9 @@
"account.endorse": "Figure sur le profil",
"account.follow": "Suivre",
"account.followers": "Abonné⋅e⋅s",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "Abonnements",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "Vous suit",
"account.hide_reblogs": "Masquer les partages de @{name}",
"account.media": "Média",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "Résultats de la recherche",
"emoji_button.symbols": "Symboles",
"emoji_button.travel": "Lieux & Voyages",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "Le fil public local est vide. Écrivez donc quelque chose pour le remplir !",
"empty_column.direct": "Vous n’avez pas encore de messages directs. Lorsque vous en enverrez ou recevrez un, il s’affichera ici.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "Il n’y a encore aucun contenu associé à ce hashtag.",
"empty_column.home": "Vous ne suivez personne. Visitez {public} ou utilisez la recherche pour trouver d’autres personnes à suivre.",
"empty_column.home.public_timeline": "le fil public",
"empty_column.list": "Il n’y a rien dans cette liste pour l’instant. Dès que des personnes de cette liste publieront de nouveaux statuts, ils apparaîtront ici.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "Vous n’avez pas encore de notification. Interagissez avec d’autres personnes pour débuter la conversation.",
"empty_column.public": "Il n’y a rien ici ! Écrivez quelque chose publiquement, ou bien suivez manuellement des personnes d’autres instances pour remplir le fil public",
"follow_request.authorize": "Accepter",
@@ -276,6 +285,7 @@
"status.reblog": "Partager",
"status.reblog_private": "Booster vers l’audience originale",
"status.reblogged_by": "{name} a partagé :",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Effacer et ré-écrire",
"status.reply": "Répondre",
"status.replyAll": "Répondre au fil",
diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json
index e8b598263..12f289914 100644
--- a/app/javascript/mastodon/locales/gl.json
+++ b/app/javascript/mastodon/locales/gl.json
@@ -10,7 +10,9 @@
"account.endorse": "Feature on profile",
"account.follow": "Seguir",
"account.followers": "Seguidoras",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "Seguindo",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "Séguena",
"account.hide_reblogs": "Ocultar repeticións de @{name}",
"account.media": "Medios",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "Resultados da busca",
"emoji_button.symbols": "Símbolos",
"emoji_button.travel": "Viaxes e Lugares",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "A liña temporal local está baldeira. Escriba algo de xeito público para que rule!",
"empty_column.direct": "Aínda non ten mensaxes directas. Cando envíe ou reciba unha, aparecerá aquí.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "Aínda non hai nada con esta etiqueta.",
"empty_column.home": "A súa liña temporal de inicio está baldeira! Visite {public} ou utilice a busca para atopar outras usuarias.",
"empty_column.home.public_timeline": "a liña temporal pública",
"empty_column.list": "Aínda non hai nada en esta lista. Cando as usuarias incluídas na lista publiquen mensaxes, aparecerán aquí.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "Aínda non ten notificacións. Interactúe con outras para iniciar unha conversa.",
"empty_column.public": "Nada por aquí! Escriba algo de xeito público, ou siga manualmente usuarias de outras instancias para ir enchéndoa",
"follow_request.authorize": "Autorizar",
@@ -276,6 +285,7 @@
"status.reblog": "Promover",
"status.reblog_private": "Promover a audiencia orixinal",
"status.reblogged_by": "{name} promoveu",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Delete & re-draft",
"status.reply": "Resposta",
"status.replyAll": "Resposta a conversa",
diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json
index 5f5e396b4..62ff8dff8 100644
--- a/app/javascript/mastodon/locales/he.json
+++ b/app/javascript/mastodon/locales/he.json
@@ -10,7 +10,9 @@
"account.endorse": "Feature on profile",
"account.follow": "מעקב",
"account.followers": "עוקבים",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "נעקבים",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "במעקב אחריך",
"account.hide_reblogs": "להסתיר הידהודים מאת @{name}",
"account.media": "מדיה",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "תוצאות חיפוש",
"emoji_button.symbols": "סמלים",
"emoji_button.travel": "טיולים ואתרים",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "טור הסביבה ריק. יש לפרסם משהו כדי שדברים יתרחילו להתגלגל!",
"empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "אין כלום בהאשתג הזה עדיין.",
"empty_column.home": "אף אחד לא במעקב עדיין. אפשר לבקר ב{public} או להשתמש בחיפוש כדי להתחיל ולהכיר חצוצרנים אחרים.",
"empty_column.home.public_timeline": "ציר זמן בין-קהילתי",
"empty_column.list": "אין עדיין מאום ברשימה.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "אין התראות עדיין. יאללה, הגיע הזמן להתחיל להתערבב.",
"empty_column.public": "אין פה כלום! כדי למלא את הטור הזה אפשר לכתוב משהו, או להתחיל לעקוב אחרי אנשים מקהילות אחרות",
"follow_request.authorize": "קבלה",
@@ -276,6 +285,7 @@
"status.reblog": "הדהוד",
"status.reblog_private": "Boost to original audience",
"status.reblogged_by": "הודהד על ידי {name}",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Delete & re-draft",
"status.reply": "תגובה",
"status.replyAll": "תגובה לכולם",
diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json
index d0bea84d6..36c373000 100644
--- a/app/javascript/mastodon/locales/hr.json
+++ b/app/javascript/mastodon/locales/hr.json
@@ -10,7 +10,9 @@
"account.endorse": "Feature on profile",
"account.follow": "Slijedi",
"account.followers": "Sljedbenici",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "Slijedi",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "te slijedi",
"account.hide_reblogs": "Hide boosts from @{name}",
"account.media": "Media",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "Search results",
"emoji_button.symbols": "Simboli",
"emoji_button.travel": "Putovanja & Mjesta",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "Lokalni timeline je prazan. Napiši nešto javno kako bi pokrenuo stvari!",
"empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "Još ne postoji ništa s ovim hashtagom.",
"empty_column.home": "Još ne slijediš nikoga. Posjeti {public} ili koristi tražilicu kako bi počeo i upoznao druge korisnike.",
"empty_column.home.public_timeline": "javni timeline",
"empty_column.list": "There is nothing in this list yet.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "Još nemaš notifikacija. Komuniciraj sa drugima kako bi započeo razgovor.",
"empty_column.public": "Ovdje nema ništa! Napiši nešto javno, ili ručno slijedi korisnike sa drugih instanci kako bi popunio",
"follow_request.authorize": "Autoriziraj",
@@ -276,6 +285,7 @@
"status.reblog": "Podigni",
"status.reblog_private": "Boost to original audience",
"status.reblogged_by": "{name} je podigao",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Delete & re-draft",
"status.reply": "Odgovori",
"status.replyAll": "Odgovori na temu",
diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json
index 4dae46bb1..5e2241721 100644
--- a/app/javascript/mastodon/locales/hu.json
+++ b/app/javascript/mastodon/locales/hu.json
@@ -10,7 +10,9 @@
"account.endorse": "Feature on profile",
"account.follow": "Követés",
"account.followers": "Követők",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "Követve",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "Követnek téged",
"account.hide_reblogs": "Rejtsd el a tülkölést @{name}-tól/től",
"account.media": "Média",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "Keresési találatok",
"emoji_button.symbols": "Szimbólumok",
"emoji_button.travel": "Utazás és Helyek",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "A helyi idővonal üres. Írj egy publikus stástuszt, hogy elindítsd a labdát!",
"empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "Jelenleg nem található semmi ezen hashtaggel.",
"empty_column.home": "A hazai idővonala üres! Látogasd meg a {public} vagy használd a keresőt, hogy ismerj meg más felhasználókat.",
"empty_column.home.public_timeline": "publikus idővonal",
"empty_column.list": "A lista jelenleg üres. Mikor a listatagok új státuszt posztolnak itt meg fognak jelenni.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "Jelenleg nincsenek értesítései. Lépj kapcsolatba másokkal, hogy indítsd el a beszélgetést.",
"empty_column.public": "Jelenleg semmi nincs itt! Írj valamit publikusan vagy kövess más szervereken levő felhasználókat, hogy megtöltsd",
"follow_request.authorize": "Engedélyez",
@@ -276,6 +285,7 @@
"status.reblog": "Reblog",
"status.reblog_private": "Boost to original audience",
"status.reblogged_by": "{name} reblogolta",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Delete & re-draft",
"status.reply": "Válasz",
"status.replyAll": "Válaszolj a beszélgetésre",
diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json
index e9f60b727..b1b02a658 100644
--- a/app/javascript/mastodon/locales/hy.json
+++ b/app/javascript/mastodon/locales/hy.json
@@ -10,7 +10,9 @@
"account.endorse": "Feature on profile",
"account.follow": "Հետեւել",
"account.followers": "Հետեւվողներ",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "Հետեւում է",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "Հետեւում է քեզ",
"account.hide_reblogs": "Թաքցնել @{name}֊ի տարածածները",
"account.media": "Մեդիա",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "Որոնման արդյունքներ",
"emoji_button.symbols": "Նշաններ",
"emoji_button.travel": "Ուղեւորություն եւ տեղանքներ",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "Տեղական հոսքը դատա՛րկ է։ Հրապարակային մի բան գրիր շարժիչը խոդ տալու համար։",
"empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "Այս պիտակով դեռ ոչինչ չկա։",
"empty_column.home": "Քո հիմնական հոսքը դատա՛րկ է։ Այցելի՛ր {public}ը կամ օգտվիր որոնումից՝ այլ մարդկանց հանդիպելու համար։",
"empty_column.home.public_timeline": "հրապարակային հոսք",
"empty_column.list": "Այս ցանկում դեռ ոչինչ չկա։ Երբ ցանկի անդամներից որեւէ մեկը նոր թութ գրի, այն կհայտնվի այստեղ։",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "Ոչ մի ծանուցում դեռ չունես։ Բզիր մյուսներին՝ խոսակցությունը սկսելու համար։",
"empty_column.public": "Այստեղ բան չկա՛։ Հրապարակային մի բան գրիր կամ հետեւիր այլ հանգույցներից էակների՝ այն լցնելու համար։",
"follow_request.authorize": "Վավերացնել",
@@ -276,6 +285,7 @@
"status.reblog": "Տարածել",
"status.reblog_private": "Boost to original audience",
"status.reblogged_by": "{name} տարածել է",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Delete & re-draft",
"status.reply": "Պատասխանել",
"status.replyAll": "Պատասխանել թելին",
diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json
index 1dd30f2f7..53f6ef4e4 100644
--- a/app/javascript/mastodon/locales/id.json
+++ b/app/javascript/mastodon/locales/id.json
@@ -10,7 +10,9 @@
"account.endorse": "Feature on profile",
"account.follow": "Ikuti",
"account.followers": "Pengikut",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "Mengikuti",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "Mengikuti anda",
"account.hide_reblogs": "Sembunyikan boosts dari @{name}",
"account.media": "Media",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "Hasil pencarian",
"emoji_button.symbols": "Simbol",
"emoji_button.travel": "Tempat Wisata",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "Linimasa lokal masih kosong. Tulis sesuatu secara publik dan buat roda berputar!",
"empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "Tidak ada apapun dalam hashtag ini.",
"empty_column.home": "Linimasa anda kosong! Kunjungi {public} atau gunakan pencarian untuk memulai dan bertemu pengguna lain.",
"empty_column.home.public_timeline": "linimasa publik",
"empty_column.list": "Tidak ada postingan di list ini. Ketika anggota dari list ini memposting status baru, status tersebut akan tampil disini.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "Anda tidak memiliki notifikasi apapun. Berinteraksi dengan orang lain untuk memulai percakapan.",
"empty_column.public": "Tidak ada apapun disini! Tulis sesuatu, atau ikuti pengguna lain dari server lain untuk mengisi ini",
"follow_request.authorize": "Izinkan",
@@ -276,6 +285,7 @@
"status.reblog": "Boost",
"status.reblog_private": "Boost to original audience",
"status.reblogged_by": "di-boost {name}",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Delete & re-draft",
"status.reply": "Balas",
"status.replyAll": "Balas ke semua",
diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json
index 385313df3..f846ff4f8 100644
--- a/app/javascript/mastodon/locales/io.json
+++ b/app/javascript/mastodon/locales/io.json
@@ -10,7 +10,9 @@
"account.endorse": "Feature on profile",
"account.follow": "Sequar",
"account.followers": "Sequanti",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "Sequas",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "Sequas tu",
"account.hide_reblogs": "Hide boosts from @{name}",
"account.media": "Media",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "Search results",
"emoji_button.symbols": "Symbols",
"emoji_button.travel": "Travel & Places",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "La lokala tempolineo esas vakua. Skribez ulo publike por iniciar la agiveso!",
"empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "Esas ankore nulo en ta gretovorto.",
"empty_column.home": "Tu sequas ankore nulu. Vizitez {public} od uzez la serchilo por komencar e renkontrar altra uzeri.",
"empty_column.home.public_timeline": "la publika tempolineo",
"empty_column.list": "There is nothing in this list yet.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "Tu havas ankore nula savigo. Komunikez kun altri por debutar la konverso.",
"empty_column.public": "Esas nulo hike! Skribez ulo publike, o manuale sequez uzeri de altra instaluri por plenigar ol.",
"follow_request.authorize": "Yurizar",
@@ -276,6 +285,7 @@
"status.reblog": "Repetar",
"status.reblog_private": "Boost to original audience",
"status.reblogged_by": "{name} repetita",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Delete & re-draft",
"status.reply": "Respondar",
"status.replyAll": "Respondar a filo",
diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json
index 0f460b3f6..2b6332305 100644
--- a/app/javascript/mastodon/locales/it.json
+++ b/app/javascript/mastodon/locales/it.json
@@ -10,7 +10,9 @@
"account.endorse": "Feature on profile",
"account.follow": "Segui",
"account.followers": "Seguaci",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "Segue",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "Ti segue",
"account.hide_reblogs": "Nascondi condivisioni da @{name}",
"account.media": "Media",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "Risultati della ricerca",
"emoji_button.symbols": "Simboli",
"emoji_button.travel": "Viaggi e luoghi",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "La timeline locale è vuota. Condividi qualcosa pubblicamente per dare inizio alla festa!",
"empty_column.direct": "Non hai ancora nessun messaggio diretto. Quando ne manderai o riceverai qualcuno, apparirà qui.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "Non c'è ancora nessun post con questo hashtag.",
"empty_column.home": "Non stai ancora seguendo nessuno. Visita {public} o usa la ricerca per incontrare nuove persone.",
"empty_column.home.public_timeline": "la timeline pubblica",
"empty_column.list": "Non c'è niente in questo elenco ancora. Quando i membri di questo elenco postano nuovi stati, questi appariranno qui.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "Non hai ancora nessuna notifica. Interagisci con altri per iniziare conversazioni.",
"empty_column.public": "Qui non c'è nulla! Scrivi qualcosa pubblicamente, o aggiungi utenti da altri server per riempire questo spazio",
"follow_request.authorize": "Autorizza",
@@ -276,6 +285,7 @@
"status.reblog": "Condividi",
"status.reblog_private": "Condividi con i destinatari iniziali",
"status.reblogged_by": "{name} ha condiviso",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Cancella e riscrivi",
"status.reply": "Rispondi",
"status.replyAll": "Rispondi alla conversazione",
diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json
index d17f124b9..5db2a9ce9 100644
--- a/app/javascript/mastodon/locales/ja.json
+++ b/app/javascript/mastodon/locales/ja.json
@@ -10,7 +10,9 @@
"account.endorse": "プロフィールで紹介する",
"account.follow": "フォロー",
"account.followers": "フォロワー",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "フォロー",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "フォローされています",
"account.hide_reblogs": "@{name}さんからのブーストを非表示",
"account.media": "メディア",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "検索結果",
"emoji_button.symbols": "記号",
"emoji_button.travel": "旅行と場所",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "ローカルタイムラインはまだ使われていません。何か書いてみましょう!",
"empty_column.direct": "ダイレクトメッセージはまだありません。ダイレクトメッセージをやりとりすると、ここに表示されます。",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "このハッシュタグはまだ使われていません。",
"empty_column.home": "まだ誰もフォローしていません。{public}を見に行くか、検索を使って他のユーザーを見つけましょう。",
"empty_column.home.public_timeline": "連合タイムライン",
"empty_column.list": "このリストにはまだなにもありません。このリストのメンバーが新しいトゥートをするとここに表示されます。",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "まだ通知がありません。他の人とふれ合って会話を始めましょう。",
"empty_column.public": "ここにはまだ何もありません! 公開で何かを投稿したり、他のインスタンスのユーザーをフォローしたりしていっぱいにしましょう",
"follow_request.authorize": "許可",
@@ -276,6 +285,7 @@
"status.reblog": "ブースト",
"status.reblog_private": "ブースト",
"status.reblogged_by": "{name}さんがブースト",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "削除して下書きに戻す",
"status.reply": "返信",
"status.replyAll": "全員に返信",
diff --git a/app/javascript/mastodon/locales/ka.json b/app/javascript/mastodon/locales/ka.json
index 1ded84143..23b3bf1f0 100644
--- a/app/javascript/mastodon/locales/ka.json
+++ b/app/javascript/mastodon/locales/ka.json
@@ -10,7 +10,9 @@
"account.endorse": "გამორჩევა პროფილზე",
"account.follow": "გაყოლა",
"account.followers": "მიმდევრები",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "მიდევნებები",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "მოგყვებათ",
"account.hide_reblogs": "დაიმალოს ბუსტები @{name}-სგან",
"account.media": "მედია",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "ძებნის შედეგები",
"emoji_button.symbols": "სიმბოლოები",
"emoji_button.travel": "მოგზაურობა და ადგილები",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "ლოკალური თაიმლაინი ცარიელია. დაწერეთ რაიმე ღიად ან ქენით რაიმე სხვა!",
"empty_column.direct": "ჯერ პირდაპირი წერილები არ გაქვთ. როდესაც მიიღებთ ან გააგზავნით, გამოჩნდება აქ.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "ამ ჰეშტეგში ჯერ არაფერია.",
"empty_column.home": "თქვენი სახლის თაიმლაინი ცარიელია! ესტუმრეთ {public}-ს ან დასაწყისისთვის გამოიყენეთ ძებნა, რომ შეხვდეთ სხვა მომხმარებლებს.",
"empty_column.home.public_timeline": "ღია თაიმლაინი",
"empty_column.list": "ამ სიაში ჯერ არაფერია. როდესაც სიის წევრები დაპოსტავენ ახალ სტატუსებს, ისინი გამოჩნდებიან აქ.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "ჯერ შეტყობინებები არ გაქვთ. საუბრის დასაწყებად იურთიერთქმედეთ სხვებთან.",
"empty_column.public": "აქ არაფერია! შესავსებად, დაწერეთ რაიმე ღიად ან ხელით გაჰყევით მომხმარებლებს სხვა ინსტანციებისგან",
"follow_request.authorize": "ავტორიზაცია",
@@ -276,6 +285,7 @@
"status.reblog": "ბუსტი",
"status.reblog_private": "დაიბუსტოს საწყის აუდიტორიაზე",
"status.reblogged_by": "{name} დაიბუსტა",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "გაუქმდეს და გადანაწილდეს",
"status.reply": "პასუხი",
"status.replyAll": "უპასუხე თემას",
diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json
index dd9079878..1cea4811a 100644
--- a/app/javascript/mastodon/locales/ko.json
+++ b/app/javascript/mastodon/locales/ko.json
@@ -10,7 +10,9 @@
"account.endorse": "프로필에 나타내기",
"account.follow": "팔로우",
"account.followers": "팔로워",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "팔로우",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "날 팔로우합니다",
"account.hide_reblogs": "@{name}의 부스트를 숨기기",
"account.media": "미디어",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "검색 결과",
"emoji_button.symbols": "기호",
"emoji_button.travel": "여행과 장소",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "로컬 타임라인에 아무 것도 없습니다. 아무거나 적어 보세요!",
"empty_column.direct": "아직 다이렉트 메시지가 없습니다. 다이렉트 메시지를 보내거나 받은 경우, 여기에 표시 됩니다.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "이 해시태그는 아직 사용되지 않았습니다.",
"empty_column.home": "아직 아무도 팔로우 하고 있지 않습니다. {public}를 보러 가거나, 검색하여 다른 사용자를 찾아 보세요.",
"empty_column.home.public_timeline": "연합 타임라인",
"empty_column.list": "리스트에 아직 아무 것도 없습니다.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "아직 알림이 없습니다. 다른 사람과 대화를 시작해 보세요.",
"empty_column.public": "여기엔 아직 아무 것도 없습니다! 공개적으로 무언가 포스팅하거나, 다른 인스턴스의 유저를 팔로우 해서 채워보세요",
"follow_request.authorize": "허가",
@@ -276,6 +285,7 @@
"status.reblog": "부스트",
"status.reblog_private": "원래의 수신자들에게 부스트",
"status.reblogged_by": "{name}님이 부스트 했습니다",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "지우고 다시 쓰기",
"status.reply": "답장",
"status.replyAll": "전원에게 답장",
diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json
index 7259ba49a..2d16f37b0 100644
--- a/app/javascript/mastodon/locales/nl.json
+++ b/app/javascript/mastodon/locales/nl.json
@@ -10,7 +10,9 @@
"account.endorse": "Op profiel weergeven",
"account.follow": "Volgen",
"account.followers": "Volgers",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "Volgt",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "Volgt jou",
"account.hide_reblogs": "Verberg boosts van @{name}",
"account.media": "Media",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "Zoekresultaten",
"emoji_button.symbols": "Symbolen",
"emoji_button.travel": "Reizen en plekken",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "De lokale tijdlijn is nog leeg. Toot iets in het openbaar om de bal aan het rollen te krijgen!",
"empty_column.direct": "Je hebt nog geen directe berichten. Wanneer je er een verzend of ontvangt, zijn deze hier te zien.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "Er is nog niks te vinden onder deze hashtag.",
"empty_column.home": "Jij volgt nog niemand. Bezoek {public} of gebruik het zoekvenster om andere mensen te ontmoeten.",
"empty_column.home.public_timeline": "de globale tijdlijn",
"empty_column.list": "Er is nog niks in deze lijst. Wanneer lijstleden nieuwe toots publiceren, zijn deze hier te zien.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "Je hebt nog geen meldingen. Begin met iemand een gesprek.",
"empty_column.public": "Er is hier helemaal niks! Toot iets in het openbaar of volg mensen van andere servers om het te vullen",
"follow_request.authorize": "Goedkeuren",
@@ -276,6 +285,7 @@
"status.reblog": "Boost",
"status.reblog_private": "Boost naar oorspronkelijke ontvangers",
"status.reblogged_by": "{name} boostte",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Verwijderen en herschrijven",
"status.reply": "Reageren",
"status.replyAll": "Reageer op iedereen",
diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json
index 520c9ec25..1e4aed8a5 100644
--- a/app/javascript/mastodon/locales/no.json
+++ b/app/javascript/mastodon/locales/no.json
@@ -10,7 +10,9 @@
"account.endorse": "Feature on profile",
"account.follow": "Følg",
"account.followers": "Følgere",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "Følger",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "Følger deg",
"account.hide_reblogs": "Skjul fremhevinger fra @{name}",
"account.media": "Media",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "Søkeresultat",
"emoji_button.symbols": "Symboler",
"emoji_button.travel": "Reise & steder",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "Den lokale tidslinjen er tom. Skriv noe offentlig for å få snøballen til å rulle!",
"empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "Det er ingenting i denne hashtagen ennå.",
"empty_column.home": "Du har ikke fulgt noen ennå. Besøk {publlic} eller bruk søk for å komme i gang og møte andre brukere.",
"empty_column.home.public_timeline": "en offentlig tidslinje",
"empty_column.list": "Det er ingenting i denne listen ennå. Når medlemmene av denne listen legger ut nye statuser vil de dukke opp her.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "Du har ingen varsler ennå. Kommuniser med andre for å begynne samtalen.",
"empty_column.public": "Det er ingenting her! Skriv noe offentlig, eller følg brukere manuelt fra andre instanser for å fylle den opp",
"follow_request.authorize": "Autorisér",
@@ -276,6 +285,7 @@
"status.reblog": "Fremhev",
"status.reblog_private": "Boost to original audience",
"status.reblogged_by": "Fremhevd av {name}",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Delete & re-draft",
"status.reply": "Svar",
"status.replyAll": "Svar til samtale",
diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json
index a198a0d93..ce666d762 100644
--- a/app/javascript/mastodon/locales/oc.json
+++ b/app/javascript/mastodon/locales/oc.json
@@ -10,7 +10,9 @@
"account.endorse": "Mostrar pel perfil",
"account.follow": "Sègre",
"account.followers": "Seguidors",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "Abonaments",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "Vos sèc",
"account.hide_reblogs": "Rescondre los partatges de @{name}",
"account.media": "Mèdias",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "Resultats de recèrca",
"emoji_button.symbols": "Simbòls",
"emoji_button.travel": "Viatges & lòcs",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "Lo flux public local es void. Escrivètz quicòm per lo garnir !",
"empty_column.direct": "Avètz pas encara cap de messatges. Quand ne mandatz un o que ne recebètz un, serà mostrat aquí.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "I a pas encara de contengut ligat a aquesta etiqueta.",
"empty_column.home": "Vòstre flux d’acuèlh es void. Visitatz {public} o utilizatz la recèrca per vos connectar a d’autras personas.",
"empty_column.home.public_timeline": "lo flux public",
"empty_column.list": "I a pas res dins la lista pel moment. Quand de membres d’aquesta lista publiquen de novèls estatuts los veiretz aquí.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "Avètz pas encara de notificacions. Respondètz a qualqu’un per començar una conversacion.",
"empty_column.public": "I a pas res aquí ! Escrivètz quicòm de public, o seguètz de personas d’autras instàncias per garnir lo flux public",
"follow_request.authorize": "Acceptar",
@@ -276,6 +285,7 @@
"status.reblog": "Partejar",
"status.reblog_private": "Partejar a l’audiéncia d’origina",
"status.reblogged_by": "{name} a partejat",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Escafar e tornar formular",
"status.reply": "Respondre",
"status.replyAll": "Respondre a la conversacion",
diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json
index 90cb52a15..36d8f2512 100644
--- a/app/javascript/mastodon/locales/pl.json
+++ b/app/javascript/mastodon/locales/pl.json
@@ -10,7 +10,9 @@
"account.endorse": "Polecaj na profilu",
"account.follow": "Śledź",
"account.followers": "Śledzący",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "Śledzeni",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "Śledzi Cię",
"account.hide_reblogs": "Ukryj podbicia od @{name}",
"account.media": "Zawartość multimedialna",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "Wyniki wyszukiwania",
"emoji_button.symbols": "Symbole",
"emoji_button.travel": "Podróże i miejsca",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "Lokalna oś czasu jest pusta. Napisz coś publicznie, aby zagaić!",
"empty_column.direct": "Nie masz żadnych wiadomości bezpośrednich. Kiedy dostaniesz lub wyślesz jakąś, pojawi się ona tutaj.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "Nie ma wpisów oznaczonych tym hashtagiem. Możesz napisać pierwszy(-a)!",
"empty_column.home": "Nie śledzisz nikogo. Odwiedź globalną oś czasu lub użyj wyszukiwarki, aby znaleźć interesujące Cię profile.",
"empty_column.home.public_timeline": "globalna oś czasu",
"empty_column.list": "Nie ma nic na tej liście. Kiedy członkowie listy dodadzą nowe wpisy, pojawia się one tutaj.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "Nie masz żadnych powiadomień. Rozpocznij interakcje z innymi użytkownikami.",
"empty_column.public": "Tu nic nie ma! Napisz coś publicznie, lub dodaj ludzi z innych instancji, aby to wyświetlić",
"follow_request.authorize": "Autoryzuj",
@@ -276,6 +285,7 @@
"status.reblog": "Podbij",
"status.reblog_private": "Podbij dla odbiorców oryginalnego wpisu",
"status.reblogged_by": "{name} podbił(a)",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Usuń i przeredaguj",
"status.reply": "Odpowiedz",
"status.replyAll": "Odpowiedz na wątek",
diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json
index d40e6d6a2..86da60a97 100644
--- a/app/javascript/mastodon/locales/pt-BR.json
+++ b/app/javascript/mastodon/locales/pt-BR.json
@@ -10,7 +10,9 @@
"account.endorse": "Destacar no perfil",
"account.follow": "Seguir",
"account.followers": "Seguidores",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "Segue",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "Segue você",
"account.hide_reblogs": "Esconder compartilhamentos de @{name}",
"account.media": "Mídia",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "Resultados da busca",
"emoji_button.symbols": "Símbolos",
"emoji_button.travel": "Viagens & Lugares",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "A timeline local está vazia. Escreva algo publicamente para começar!",
"empty_column.direct": "Você não tem nenhuma mensagem direta ainda. Quando você enviar ou receber uma, as mensagens aparecerão por aqui.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "Ainda não há qualquer conteúdo com essa hashtag.",
"empty_column.home": "Você ainda não segue usuário algum. Visite a timeline {public} ou use o buscador para procurar e conhecer outros usuários.",
"empty_column.home.public_timeline": "global",
"empty_column.list": "Ainda não há nada nesta lista. Quando membros dessa lista fizerem novas postagens, elas aparecerão aqui.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "Você ainda não possui notificações. Interaja com outros usuários para começar a conversar.",
"empty_column.public": "Não há nada aqui! Escreva algo publicamente ou siga manualmente usuários de outras instâncias",
"follow_request.authorize": "Autorizar",
@@ -276,6 +285,7 @@
"status.reblog": "Compartilhar",
"status.reblog_private": "Compartilhar com a audiência original",
"status.reblogged_by": "{name} compartilhou",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Apagar & usar como rascunho",
"status.reply": "Responder",
"status.replyAll": "Responder à sequência",
diff --git a/app/javascript/mastodon/locales/pt.json b/app/javascript/mastodon/locales/pt.json
index 92c7343cc..5d79b26d7 100644
--- a/app/javascript/mastodon/locales/pt.json
+++ b/app/javascript/mastodon/locales/pt.json
@@ -10,7 +10,9 @@
"account.endorse": "Feature on profile",
"account.follow": "Seguir",
"account.followers": "Seguidores",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "Segue",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "É teu seguidor",
"account.hide_reblogs": "Esconder partilhas de @{name}",
"account.media": "Media",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "Resultados da pesquisa",
"emoji_button.symbols": "Símbolos",
"emoji_button.travel": "Viagens & Lugares",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "Ainda não existe conteúdo local para mostrar!",
"empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "Não foram encontradas publicações com essa hashtag.",
"empty_column.home": "Ainda não segues qualquer utilizador. Visita {public} ou utiliza a pesquisa para procurar outros utilizadores.",
"empty_column.home.public_timeline": "global",
"empty_column.list": "Ainda não existem publicações nesta lista. Quando membros desta lista fizerem novas publicações, elas aparecerão aqui.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "Não tens notificações. Interage com outros utilizadores para iniciar uma conversa.",
"empty_column.public": "Não há nada aqui! Escreve algo publicamente ou segue outros utilizadores para ver aqui os conteúdos públicos",
"follow_request.authorize": "Autorizar",
@@ -276,6 +285,7 @@
"status.reblog": "Partilhar",
"status.reblog_private": "Boost to original audience",
"status.reblogged_by": "{name} partilhou",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Delete & re-draft",
"status.reply": "Responder",
"status.replyAll": "Responder à conversa",
diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json
index 7d964859b..3dc10d780 100644
--- a/app/javascript/mastodon/locales/ru.json
+++ b/app/javascript/mastodon/locales/ru.json
@@ -10,7 +10,9 @@
"account.endorse": "Рекомендовать в профиле",
"account.follow": "Подписаться",
"account.followers": "Подписаны",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "Подписки",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "Подписан(а) на Вас",
"account.hide_reblogs": "Скрыть продвижения от @{name}",
"account.media": "Медиа",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "Результаты поиска",
"emoji_button.symbols": "Символы",
"emoji_button.travel": "Путешествия",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "Локальная лента пуста. Напишите что-нибудь, чтобы разогреть народ!",
"empty_column.direct": "У Вас пока нет личных сообщений. Когда Вы начнёте их отправлять или получать, они появятся здесь.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "Статусов с таким хэштегом еще не существует.",
"empty_column.home": "Пока Вы ни на кого не подписаны. Полистайте {public} или используйте поиск, чтобы освоиться и завести новые знакомства.",
"empty_column.home.public_timeline": "публичные ленты",
"empty_column.list": "В этом списке пока ничего нет.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "У Вас еще нет уведомлений. Заведите знакомство с другими пользователями, чтобы начать разговор.",
"empty_column.public": "Здесь ничего нет! Опубликуйте что-нибудь или подпишитесь на пользователей с других узлов, чтобы заполнить ленту.",
"follow_request.authorize": "Авторизовать",
@@ -276,6 +285,7 @@
"status.reblog": "Продвинуть",
"status.reblog_private": "Продвинуть для своей аудитории",
"status.reblogged_by": "{name} продвинул(а)",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Удалить и исправить",
"status.reply": "Ответить",
"status.replyAll": "Ответить на тред",
diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json
index e51bb1d48..fabddf58c 100644
--- a/app/javascript/mastodon/locales/sk.json
+++ b/app/javascript/mastodon/locales/sk.json
@@ -10,7 +10,9 @@
"account.endorse": "Feature on profile",
"account.follow": "Následuj",
"account.followers": "Sledujúci",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "Následuje",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "Následuje ťa",
"account.hide_reblogs": "Skryť povýšenia od @{name}",
"account.media": "Médiá",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "Nájdené",
"emoji_button.symbols": "Symboly",
"emoji_button.travel": "Cestovanie a miesta",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "Lokálna časová os je prázdna. Napíšte niečo, aby sa to tu začalo hýbať!",
"empty_column.direct": "Ešte nemáš žiadne súkromné správy. Keď nejakú pošleš, alebo dostaneš, ukáže sa tu.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "Pod týmto hashtagom sa ešte nič nenachádza.",
"empty_column.home": "Tvoja lokálna osa je zatiaľ prázdna! Pre začiatok navštív {public}, alebo použi vyhľadávanie a nájdi tak aj iných užívateľov.",
"empty_column.home.public_timeline": "verejná časová os",
"empty_column.list": "Tento zoznam je ešte prázdny. Keď ale členovia tohoto zoznamu napíšu nové správy, tak tie sa objavia priamo tu.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "Nemáš ešte žiadne oznámenia. Zapoj sa s niekym do debaty a komunikuj s ostatnými aby diskusia mohla začať.",
"empty_column.public": "Ešte tu nič nie je. Napíš niečo verejne alebo začnite sledovať užívateľov z iných Mastodon serverov, aby tu tak niečo pribudlo",
"follow_request.authorize": "Povoľ prístup",
@@ -276,6 +285,7 @@
"status.reblog": "Povýšiť",
"status.reblog_private": "Povýš k pôvodnému publiku",
"status.reblogged_by": "{name} povýšil/a",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Vymaž a prepíš",
"status.reply": "Odpovedať",
"status.replyAll": "Odpovedať na diskusiu",
diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json
index ca0f7a53f..fc3e4a7c3 100644
--- a/app/javascript/mastodon/locales/sl.json
+++ b/app/javascript/mastodon/locales/sl.json
@@ -10,7 +10,9 @@
"account.endorse": "Feature on profile",
"account.follow": "Sledi",
"account.followers": "Sledilci",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "Sledi",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "Ti sledi",
"account.hide_reblogs": "Skrij napuhke od @{name}",
"account.media": "Mediji",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "Rezultati iskanja",
"emoji_button.symbols": "Simboli",
"emoji_button.travel": "Potovanja in Kraji",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "Lokalna časovnica je prazna. Napišite nekaj javnega, da se bo žoga zakotalila!",
"empty_column.direct": "Nimate še nobenih neposrednih sporočil. Ko ga pošljete ali prejmete, se prikaže tukaj.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "V tem hashtagu še ni nič.",
"empty_column.home": "Vaša domača časovnica je prazna! Obiščite {public} ali uporabite iskanje, da se boste srečali druge uporabnike.",
"empty_column.home.public_timeline": "javna časovnica",
"empty_column.list": "Na tem seznamu ni ničesar. Ko bodo člani tega seznama objavili nove statuse, se bodo pojavili tukaj.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "Nimate še nobenih obvestil. Poveži se z drugimi, da začnete pogovor.",
"empty_column.public": "Tukaj ni ničesar! Da ga napolnite, napišite nekaj javnega ali pa ročno sledite uporabnikom iz drugih vozlišč",
"follow_request.authorize": "Odobri",
@@ -276,6 +285,7 @@
"status.reblog": "Suni",
"status.reblog_private": "Suni v prvotno občinstvo",
"status.reblogged_by": "{name} sunjen",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Delete & re-draft",
"status.reply": "Odgovori",
"status.replyAll": "Odgovori na objavo",
diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json
index b76710419..a04d9adb6 100644
--- a/app/javascript/mastodon/locales/sr-Latn.json
+++ b/app/javascript/mastodon/locales/sr-Latn.json
@@ -10,7 +10,9 @@
"account.endorse": "Feature on profile",
"account.follow": "Zaprati",
"account.followers": "Pratioca",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "Prati",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "Prati Vas",
"account.hide_reblogs": "Sakrij podrške koje daje korisnika @{name}",
"account.media": "Mediji",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "Rezultati pretrage",
"emoji_button.symbols": "Simboli",
"emoji_button.travel": "Putovanja & mesta",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "Lokalna lajna je prazna. Napišite nešto javno da lajna produva!",
"empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "Trenutno nema ništa na ovom heštegu.",
"empty_column.home": "Vaša lajna je prazna! Posetite {public} ili koristite pretragu da počnete i upoznajete nove ljude.",
"empty_column.home.public_timeline": "javna lajna",
"empty_column.list": "U ovoj listi još nema ničega. Kada članovi liste objave nove statuse, oni će se pojavljivati ovde.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "Trenutno nemate obaveštenja. Družite se malo da započnete razgovore.",
"empty_column.public": "Ovde nema ničega! Napišite nešto javno, ili nađite korisnike sa drugih instanci koje ćete zapratiti da popunite ovu prazninu",
"follow_request.authorize": "Odobri",
@@ -276,6 +285,7 @@
"status.reblog": "Podrži",
"status.reblog_private": "Boost to original audience",
"status.reblogged_by": "{name} podržao(la)",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Delete & re-draft",
"status.reply": "Odgovori",
"status.replyAll": "Odgovori na diskusiju",
diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json
index e31618f66..0bd84cf21 100644
--- a/app/javascript/mastodon/locales/sr.json
+++ b/app/javascript/mastodon/locales/sr.json
@@ -10,7 +10,9 @@
"account.endorse": "Feature on profile",
"account.follow": "Запрати",
"account.followers": "Пратиоца",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "Прати",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "Прати Вас",
"account.hide_reblogs": "Сакриј подршке које даје корисника @{name}",
"account.media": "Медији",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "Резултати претраге",
"emoji_button.symbols": "Симболи",
"emoji_button.travel": "Путовања & места",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "Локална лајна је празна. Напишите нешто јавно да лајна продува!",
"empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "Тренутно нема ништа на овом хештегу.",
"empty_column.home": "Ваша лајна је празна! Посетите {public} или користите претрагу да почнете и упознајете нове људе.",
"empty_column.home.public_timeline": "јавна лајна",
"empty_column.list": "У овој листи још нема ничега. Када чланови листе објаве нове статусе, они ће се појављивати овде.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "Тренутно немате обавештења. Дружите се мало да започнете разговоре.",
"empty_column.public": "Овде нема ничега! Напишите нешто јавно, или нађите кориснике са других инстанци које ћете запратити да попуните ову празнину",
"follow_request.authorize": "Одобри",
@@ -276,6 +285,7 @@
"status.reblog": "Подржи",
"status.reblog_private": "Boost to original audience",
"status.reblogged_by": "{name} подржао(ла)",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Delete & re-draft",
"status.reply": "Одговори",
"status.replyAll": "Одговори на дискусију",
diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json
index 813bf45df..8eb1ca5ed 100644
--- a/app/javascript/mastodon/locales/sv.json
+++ b/app/javascript/mastodon/locales/sv.json
@@ -10,7 +10,9 @@
"account.endorse": "Feature on profile",
"account.follow": "Följ",
"account.followers": "Följare",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "Följer",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "Följer dig",
"account.hide_reblogs": "Dölj knuffar från @{name}",
"account.media": "Media",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "Sökresultat",
"emoji_button.symbols": "Symboler",
"emoji_button.travel": "Resor & Platser",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "Den lokala tidslinjen är tom. Skriv något offentligt för att få bollen att rulla!",
"empty_column.direct": "Du har inga direktmeddelanden än. När du skickar eller tar emot kommer den att dyka upp här.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "Det finns inget i denna hashtag ännu.",
"empty_column.home": "Din hemma-tidslinje är tom! Besök {public} eller använd sökning för att komma igång och träffa andra användare.",
"empty_column.home.public_timeline": "den publika tidslinjen",
"empty_column.list": "Det finns inget i denna lista än. När medlemmar i denna lista lägger till nya statusar kommer de att visas här.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "Du har inga meddelanden än. Interagera med andra för att starta konversationen.",
"empty_column.public": "Det finns inget här! Skriv något offentligt, eller följ manuellt användarna från andra instanser för att fylla på det",
"follow_request.authorize": "Godkänn",
@@ -276,6 +285,7 @@
"status.reblog": "Knuff",
"status.reblog_private": "Knuffa till de ursprungliga åhörarna",
"status.reblogged_by": "{name} knuffade",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Radera & gör om",
"status.reply": "Svara",
"status.replyAll": "Svara på tråden",
diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json
index 2556b0ecb..139e03a72 100644
--- a/app/javascript/mastodon/locales/te.json
+++ b/app/javascript/mastodon/locales/te.json
@@ -10,7 +10,9 @@
"account.endorse": "Feature on profile",
"account.follow": "అనుసరించు",
"account.followers": "అనుచరులు",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "అనుసరిస్తున్నవి",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "మిమ్మల్ని అనుసరిస్తున్నారు",
"account.hide_reblogs": "@{name} నుంచి బూస్ట్ లను దాచిపెట్టు",
"account.media": "మీడియా",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "శోధన ఫలితాలు",
"emoji_button.symbols": "చిహ్నాలు",
"emoji_button.travel": "ప్రయాణం & ప్రదేశాలు",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "స్థానిక కాలక్రమం ఖాళీగా ఉంది. మొదలుపెట్టడానికి బహిరంగంగా ఏదో ఒకటి వ్రాయండి!",
"empty_column.direct": "మీకు ఇంకా ఏ ప్రత్యక్ష సందేశాలు లేవు. మీరు ఒకదాన్ని పంపినప్పుడు లేదా స్వీకరించినప్పుడు, అది ఇక్కడ చూపబడుతుంది.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "ఇంకా హాష్ ట్యాగ్లో ఏమీ లేదు.",
"empty_column.home": "మీ హోమ్ కాలక్రమం ఖాళీగా ఉంది! {Public} ను సందర్శించండి లేదా ఇతర వినియోగదారులను కలుసుకోవడానికి మరియు అన్వేషణ కోసం శోధనను ఉపయోగించండి.",
"empty_column.home.public_timeline": "ప్రజా కాలక్రమం",
"empty_column.list": "ఇంకా ఈ జాబితాలో ఏదీ లేదు. ఈ జాబితాలోని సభ్యులు కొత్త స్టేటస్ లను పోస్ట్ చేసినప్పుడు, అవి ఇక్కడ కనిపిస్తాయి.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "మీకు ఇంకా ఏ నోటిఫికేషన్లు లేవు. సంభాషణను ప్రారంభించడానికి ఇతరులతో ప్రతిస్పందించండి.",
"empty_column.public": "ఇక్కడ ఏమీ లేదు! దీన్ని నింపడానికి బహిరంగంగా ఏదైనా వ్రాయండి, లేదా ఇతర దృష్టాంతాల్లోని వినియోగదారులను అనుసరించండి",
"follow_request.authorize": "అనుమతించు",
@@ -276,6 +285,7 @@
"status.reblog": "బూస్ట్",
"status.reblog_private": "అసలు ప్రేక్షకులకు బూస్ట్ చేయి",
"status.reblogged_by": "{name} బూస్ట్ చేసారు",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "తొలగించు & తిరగరాయు",
"status.reply": "ప్రత్యుత్తరం",
"status.replyAll": "సంభాషణకు ప్రత్యుత్తరం ఇవ్వండి",
diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json
index c02d40d97..dbc595c28 100644
--- a/app/javascript/mastodon/locales/th.json
+++ b/app/javascript/mastodon/locales/th.json
@@ -10,7 +10,9 @@
"account.endorse": "Feature on profile",
"account.follow": "Follow",
"account.followers": "Followers",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "Follows",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "Follows you",
"account.hide_reblogs": "Hide boosts from @{name}",
"account.media": "Media",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "Search results",
"emoji_button.symbols": "Symbols",
"emoji_button.travel": "Travel & Places",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!",
"empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "There is nothing in this hashtag yet.",
"empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
"empty_column.home.public_timeline": "the public timeline",
"empty_column.list": "There is nothing in this list yet.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
"empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up",
"follow_request.authorize": "Authorize",
@@ -276,6 +285,7 @@
"status.reblog": "Boost",
"status.reblog_private": "Boost to original audience",
"status.reblogged_by": "{name} boosted",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Delete & re-draft",
"status.reply": "Reply",
"status.replyAll": "Reply to thread",
diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json
index e3193c99f..4ad934a73 100644
--- a/app/javascript/mastodon/locales/tr.json
+++ b/app/javascript/mastodon/locales/tr.json
@@ -10,7 +10,9 @@
"account.endorse": "Feature on profile",
"account.follow": "Takip et",
"account.followers": "Takipçiler",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "Takip ettikleri",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "Seni takip ediyor",
"account.hide_reblogs": "Hide boosts from @{name}",
"account.media": "Media",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "Search results",
"emoji_button.symbols": "Semboller",
"emoji_button.travel": "Seyahat ve Yerler",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "Yerel zaman tüneliniz boş. Daha fazla eğlence için herkese açık bir gönderi paylaşın.",
"empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "Henüz bu hashtag’e sahip hiçbir gönderi yok.",
"empty_column.home": "Henüz kimseyi takip etmiyorsunuz. {public} ziyaret edebilir veya arama kısmını kullanarak diğer kullanıcılarla iletişime geçebilirsiniz.",
"empty_column.home.public_timeline": "herkese açık zaman tüneli",
"empty_column.list": "There is nothing in this list yet.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "Henüz hiçbir bildiriminiz yok. Diğer insanlarla sobhet edebilmek için etkileşime geçebilirsiniz.",
"empty_column.public": "Burada hiçbir gönderi yok! Herkese açık bir şeyler yazın, veya diğer sunucudaki insanları takip ederek bu alanın dolmasını sağlayın",
"follow_request.authorize": "Yetkilendir",
@@ -276,6 +285,7 @@
"status.reblog": "Boost'la",
"status.reblog_private": "Boost to original audience",
"status.reblogged_by": "{name} boost etti",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Delete & re-draft",
"status.reply": "Cevapla",
"status.replyAll": "Konuşmayı cevapla",
diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json
index c1a47b307..11b2be292 100644
--- a/app/javascript/mastodon/locales/uk.json
+++ b/app/javascript/mastodon/locales/uk.json
@@ -10,7 +10,9 @@
"account.endorse": "Feature on profile",
"account.follow": "Підписатися",
"account.followers": "Підписники",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "Підписки",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "Підписаний(-а) на Вас",
"account.hide_reblogs": "Сховати передмухи від @{name}",
"account.media": "Медіа",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "Результати пошуку",
"emoji_button.symbols": "Символи",
"emoji_button.travel": "Подорожі",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "Локальна стрічка пуста. Напишіть щось, щоб розігріти народ!",
"empty_column.direct": "У вас ще немає прямих повідомлень. Коли ви відправите чи отримаєте якесь, воно з'явиться тут.",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "Дописів з цим хештегом поки не існує.",
"empty_column.home": "Ви поки ні на кого не підписані. Погортайте {public}, або скористуйтесь пошуком, щоб освоїтися та познайомитися з іншими користувачами.",
"empty_column.home.public_timeline": "публічні стрічки",
"empty_column.list": "Немає нічого в цьому списку. Коли його учасники дмухнуть нові статуси, вони з'являться тут.",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "У вас ще немає сповіщень. Переписуйтесь з іншими користувачами, щоб почати розмову.",
"empty_column.public": "Тут поки нічого немає! Опублікуйте щось, або вручну підпишіться на користувачів інших інстанцій, щоб заповнити стрічку",
"follow_request.authorize": "Авторизувати",
@@ -276,6 +285,7 @@
"status.reblog": "Передмухнути",
"status.reblog_private": "Boost to original audience",
"status.reblogged_by": "{name} передмухнув(-ла)",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Delete & re-draft",
"status.reply": "Відповісти",
"status.replyAll": "Відповісти на тред",
diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json
index 329a95084..541041923 100644
--- a/app/javascript/mastodon/locales/zh-CN.json
+++ b/app/javascript/mastodon/locales/zh-CN.json
@@ -10,7 +10,9 @@
"account.endorse": "Feature on profile",
"account.follow": "关注",
"account.followers": "关注者",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "正在关注",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "关注了你",
"account.hide_reblogs": "隐藏来自 @{name} 的转嘟",
"account.media": "媒体",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "搜索结果",
"emoji_button.symbols": "符号",
"emoji_button.travel": "旅行和地点",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "本站时间轴暂时没有内容,快嘟几个来抢头香啊!",
"empty_column.direct": "你还没有使用过私信。当你发出或者收到私信时,它会在这里显示。",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "这个话题标签下暂时没有内容。",
"empty_column.home": "你还没有关注任何用户。快看看{public},向其他用户搭讪吧。",
"empty_column.home.public_timeline": "公共时间轴",
"empty_column.list": "这个列表中暂时没有内容。列表中用户所发送的的新嘟文将会在这里显示。",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "你还没有收到过任何通知,快向其他用户搭讪吧。",
"empty_column.public": "这里神马都没有!写一些公开的嘟文,或者关注其他实例的用户后,这里就会有嘟文出现了哦!",
"follow_request.authorize": "同意",
@@ -276,6 +285,7 @@
"status.reblog": "转嘟",
"status.reblog_private": "转嘟给原有关注者",
"status.reblogged_by": "{name} 转嘟了",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "删除并重新编辑",
"status.reply": "回复",
"status.replyAll": "回复所有人",
diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json
index df32369e7..f52c20e9a 100644
--- a/app/javascript/mastodon/locales/zh-HK.json
+++ b/app/javascript/mastodon/locales/zh-HK.json
@@ -10,7 +10,9 @@
"account.endorse": "Feature on profile",
"account.follow": "關注",
"account.followers": "關注的人",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "正關注",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "關注你",
"account.hide_reblogs": "隱藏 @{name} 的轉推",
"account.media": "媒體",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "搜尋結果",
"emoji_button.symbols": "符號",
"emoji_button.travel": "旅遊景物",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "本站時間軸暫時未有內容,快寫一點東西來搶頭香啊!",
"empty_column.direct": "你沒有個人訊息。當你發出或接收個人訊息,就會在這裡出現。",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "這個標籤暫時未有內容。",
"empty_column.home": "你還沒有關注任何用戶。快看看{public},向其他用戶搭訕吧。",
"empty_column.home.public_timeline": "公共時間軸",
"empty_column.list": "這個列表暫時未有內容。",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "你沒有任何通知紀錄,快向其他用戶搭訕吧。",
"empty_column.public": "跨站時間軸暫時沒有內容!快寫一些公共的文章,或者關注另一些服務站的用戶吧!你和本站、友站的交流,將決定這裏出現的內容。",
"follow_request.authorize": "批准",
@@ -276,6 +285,7 @@
"status.reblog": "轉推",
"status.reblog_private": "轉推到原讀者",
"status.reblogged_by": "{name} 轉推",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "刪除並編輯",
"status.reply": "回應",
"status.replyAll": "回應所有人",
diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json
index dd7c84b32..365ffa1ea 100644
--- a/app/javascript/mastodon/locales/zh-TW.json
+++ b/app/javascript/mastodon/locales/zh-TW.json
@@ -10,7 +10,9 @@
"account.endorse": "Feature on profile",
"account.follow": "關注",
"account.followers": "關注者",
+ "account.followers.empty": "No one follows this user yet.",
"account.follows": "正在關注",
+ "account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "關注你",
"account.hide_reblogs": "隱藏來自 @{name} 的轉推",
"account.media": "媒體",
@@ -106,12 +108,19 @@
"emoji_button.search_results": "搜尋結果",
"emoji_button.symbols": "符號",
"emoji_button.travel": "旅遊與地點",
+ "empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "本地時間軸是空的。公開寫點什麼吧!",
"empty_column.direct": "你還沒有使用過私訊。當你發出或著收到私訊時,它會在這裡顯示。",
+ "empty_column.domain_blocks": "There are no hidden domains yet.",
+ "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
+ "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
+ "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "這個主題標籤下什麼都沒有。",
"empty_column.home": "你還沒關注任何人。造訪{public}或利用搜尋功能找到其他用者。",
"empty_column.home.public_timeline": "公開時間軸",
"empty_column.list": "此份清單尚未有東西。當此清單的成員貼出了新的狀態時,它們就會出現在這裡。",
+ "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
+ "empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "還沒有任何通知。和別的使用者互動來開始對話。",
"empty_column.public": "這裡什麼都沒有! 寫一些公開的嘟文,或著關注其他站點的使用者後,這裡就會有嘟文出現了",
"follow_request.authorize": "授權",
@@ -276,6 +285,7 @@
"status.reblog": "轉嘟",
"status.reblog_private": "轉嘟給原有關注者",
"status.reblogged_by": "{name} 轉嘟了",
+ "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "刪除 & 編輯",
"status.reply": "回覆",
"status.replyAll": "回覆所有人",
From b378b4c5c7e99de2c14e39e2733a745689de8ad1 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Sun, 26 Aug 2018 16:53:06 +0200
Subject: [PATCH 186/196] Add CLI interface for importing custom emoji (#8437)
bin/tootctl emoji import PATH_TO_TAR
Fix #8435
---
lib/cli.rb | 4 ++
lib/mastodon/cli_helper.rb | 8 ++++
lib/mastodon/emoji_cli.rb | 81 ++++++++++++++++++++++++++++++++++++++
lib/mastodon/media_cli.rb | 18 ++++++---
4 files changed, 106 insertions(+), 5 deletions(-)
create mode 100644 lib/mastodon/cli_helper.rb
create mode 100644 lib/mastodon/emoji_cli.rb
diff --git a/lib/cli.rb b/lib/cli.rb
index 7e82806b6..c7dae0276 100644
--- a/lib/cli.rb
+++ b/lib/cli.rb
@@ -2,10 +2,14 @@
require 'thor'
require_relative 'mastodon/media_cli'
+require_relative 'mastodon/emoji_cli'
module Mastodon
class CLI < Thor
desc 'media SUBCOMMAND ...ARGS', 'manage media files'
subcommand 'media', Mastodon::MediaCLI
+
+ desc 'emoji SUBCOMMAND ...ARGS', 'manage custom emoji'
+ subcommand 'emoji', Mastodon::EmojiCLI
end
end
diff --git a/lib/mastodon/cli_helper.rb b/lib/mastodon/cli_helper.rb
new file mode 100644
index 000000000..8c4d9731c
--- /dev/null
+++ b/lib/mastodon/cli_helper.rb
@@ -0,0 +1,8 @@
+# frozen_string_literal: true
+
+dev_null = Logger.new('/dev/null')
+
+Rails.logger = dev_null
+ActiveRecord::Base.logger = dev_null
+HttpLog.configuration.logger = dev_null
+Paperclip.options[:log] = false
diff --git a/lib/mastodon/emoji_cli.rb b/lib/mastodon/emoji_cli.rb
new file mode 100644
index 000000000..71f8b2cc7
--- /dev/null
+++ b/lib/mastodon/emoji_cli.rb
@@ -0,0 +1,81 @@
+# frozen_string_literal: true
+
+require 'rubygems/package'
+require_relative '../../config/boot'
+require_relative '../../config/environment'
+require_relative 'cli_helper'
+
+# rubocop:disable Rails/Output
+
+module Mastodon
+ class EmojiCLI < Thor
+ option :prefix
+ option :suffix
+ option :overwrite, type: :boolean
+ option :unlisted, type: :boolean
+ desc 'import PATH', 'import emoji from a TAR archive at PATH'
+ long_desc <<-LONG_DESC
+ Imports custom emoji from a TAR archive specified by PATH.
+
+ Existing emoji will be skipped unless the --overwrite option
+ is provided, in which case they will be overwritten.
+
+ With the --prefix option, a prefix can be added to all
+ generated shortcodes. Likewise, the --suffix option controls
+ the suffix of all shortcodes.
+
+ With the --unlisted option, the processed emoji will not be
+ visible in the emoji picker (but still usable via other means)
+ LONG_DESC
+ def import(path)
+ imported = 0
+ skipped = 0
+ failed = 0
+
+ Gem::Package::TarReader.new(Zlib::GzipReader.open(path)) do |tar|
+ tar.each do |entry|
+ next unless entry.file? && entry.full_name.end_with?('.png')
+
+ shortcode = [options[:prefix], File.basename(entry.full_name, '.*'), options[:suffix]].compact.join
+ custom_emoji = CustomEmoji.local.find_by(shortcode: shortcode)
+
+ if custom_emoji && !options[:overwrite]
+ skipped += 1
+ next
+ end
+
+ custom_emoji ||= CustomEmoji.new(shortcode: shortcode, domain: nil)
+ custom_emoji.image = StringIO.new(entry.read)
+ custom_emoji.image_file_name = File.basename(entry.full_name)
+ custom_emoji.visible_in_picker = !options[:unlisted]
+
+ if custom_emoji.save
+ imported += 1
+ else
+ failed += 1
+ say('Failure/Error: ', :red)
+ say(entry.full_name)
+ say(' ' + custom_emoji.errors[:image].join(', '), :red)
+ end
+ end
+ end
+
+ puts
+ say("Imported #{imported}, skipped #{skipped}, failed to import #{failed}", color(imported, skipped, failed))
+ end
+
+ private
+
+ def color(green, _yellow, red)
+ if !green.zero? && red.zero?
+ :green
+ elsif red.zero?
+ :yellow
+ else
+ :red
+ end
+ end
+ end
+end
+
+# rubocop:enable Rails/Output
diff --git a/lib/mastodon/media_cli.rb b/lib/mastodon/media_cli.rb
index cc6ad07d9..00bd662f4 100644
--- a/lib/mastodon/media_cli.rb
+++ b/lib/mastodon/media_cli.rb
@@ -2,6 +2,7 @@
require_relative '../../config/boot'
require_relative '../../config/environment'
+require_relative 'cli_helper'
# rubocop:disable Rails/Output
@@ -23,8 +24,9 @@ module Mastodon
the underlying file storage.
DESC
def remove
- time_ago = options[:days].days.ago
- queued = 0
+ time_ago = options[:days].days.ago
+ queued = 0
+ processed = 0
MediaAttachment.where.not(remote_url: '').where.not(file_file_name: nil).where('created_at < ?', time_ago).select(:id).reorder(nil).find_in_batches do |media_attachments|
if options[:background]
@@ -33,13 +35,19 @@ module Mastodon
else
media_attachments.each do |m|
Maintenance::UncacheMediaWorker.new.perform(m)
- print '.'
+ say('.', :green, false)
+ processed += 1
end
end
end
- puts
- puts "Scheduled the deletion of #{queued} media attachments" if options[:background]
+ say
+
+ if options[:background]
+ say("Scheduled the deletion of #{queued} media attachments", :green)
+ else
+ say("Removed #{processed} media attachments", :green)
+ end
end
end
end
From 55c856c522821b641f569eed0c33a9040a599f03 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Sun, 26 Aug 2018 16:53:19 +0200
Subject: [PATCH 187/196] Delay e-mail notifications by 2 minutes (#8438)
Fix #8430
---
app/services/notify_service.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/services/notify_service.rb b/app/services/notify_service.rb
index 6490d2735..7d0dcc7ad 100644
--- a/app/services/notify_service.rb
+++ b/app/services/notify_service.rb
@@ -123,7 +123,7 @@ class NotifyService < BaseService
def send_email
return if @notification.activity.nil?
- NotificationMailer.public_send(@notification.type, @recipient, @notification).deliver_later
+ NotificationMailer.public_send(@notification.type, @recipient, @notification).deliver_later(wait: 2.minutes)
end
def email_enabled?
From b9c378848544b8691f9bc12ce718b818ad89dfaf Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Sun, 26 Aug 2018 17:19:47 +0200
Subject: [PATCH 188/196] Fix NUM_DAYS in rake mastodon:media:remove_remote and
print warning (#8462)
Remove old deprecated rake tasks
---
lib/tasks/mastodon.rake | 41 ++---------------------------------------
1 file changed, 2 insertions(+), 39 deletions(-)
diff --git a/lib/tasks/mastodon.rake b/lib/tasks/mastodon.rake
index 519c21785..7455478b6 100644
--- a/lib/tasks/mastodon.rake
+++ b/lib/tasks/mastodon.rake
@@ -394,12 +394,6 @@ namespace :mastodon do
end
end
- desc 'Execute daily tasks (deprecated)'
- task :daily do
- # No-op
- # All of these tasks are now executed via sidekiq-scheduler
- end
-
desc 'Turn a user into an admin, identified by the USERNAME environment variable'
task make_admin: :environment do
include RoutingHelper
@@ -494,12 +488,6 @@ namespace :mastodon do
end
namespace :media do
- desc 'Removes media attachments that have not been assigned to any status for longer than a day (deprecated)'
- task clear: :environment do
- # No-op
- # This task is now executed via sidekiq-scheduler
- end
-
desc 'Remove media attachments attributed to silenced accounts'
task remove_silenced: :environment do
nb_media_attachments = 0
@@ -512,8 +500,9 @@ namespace :mastodon do
desc 'Remove cached remote media attachments that are older than NUM_DAYS. By default 7 (week)'
task remove_remote: :environment do
+ puts 'Please use `./bin/tootctl media remove --help` directly'.colorize(:yellow)
require_relative '../mastodon/media_cli'
- cli = Mastodon::MediaCLI.new([], days: ENV['NUM_DAYS'] || 7)
+ cli = Mastodon::MediaCLI.new([], days: (ENV['NUM_DAYS'] || 7).to_i)
cli.invoke(:remove)
end
@@ -543,21 +532,9 @@ namespace :mastodon do
task clear: :environment do
Pubsubhubbub::UnsubscribeWorker.push_bulk(Account.remote.without_followers.where.not(subscription_expires_at: nil).pluck(:id))
end
-
- desc 'Re-subscribes to soon expiring PuSH subscriptions (deprecated)'
- task refresh: :environment do
- # No-op
- # This task is now executed via sidekiq-scheduler
- end
end
namespace :feeds do
- desc 'Clear timelines of inactive users (deprecated)'
- task clear: :environment do
- # No-op
- # This task is now executed via sidekiq-scheduler
- end
-
desc 'Clear all timelines without regenerating them'
task clear_all: :environment do
Redis.current.keys('feed:*').each { |key| Redis.current.del(key) }
@@ -571,21 +548,7 @@ namespace :mastodon do
end
end
- namespace :emails do
- desc 'Send out digest e-mails (deprecated)'
- task digest: :environment do
- # No-op
- # This task is now executed via sidekiq-scheduler
- end
- end
-
namespace :users do
- desc 'Clear out unconfirmed users (deprecated)'
- task clear: :environment do
- # No-op
- # This task is now executed via sidekiq-scheduler
- end
-
desc 'List e-mails of all admin users'
task admins: :environment do
puts 'Admin user emails:'
From a791bac153cf979adeaf3024d65917dbd699b5d9 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Sun, 26 Aug 2018 17:53:26 +0200
Subject: [PATCH 189/196] Add aria-label to notifications (#8460)
Fix #8192
---
app/javascript/mastodon/components/status.js | 4 +--
.../notifications/components/notification.js | 28 +++++++++++++++----
.../mastodon/reducers/notifications.js | 1 +
3 files changed, 25 insertions(+), 8 deletions(-)
diff --git a/app/javascript/mastodon/components/status.js b/app/javascript/mastodon/components/status.js
index 9809a9a32..7090c12d0 100644
--- a/app/javascript/mastodon/components/status.js
+++ b/app/javascript/mastodon/components/status.js
@@ -18,12 +18,12 @@ import classNames from 'classnames';
// to use the progress bar to show download progress
import Bundle from '../features/ui/components/bundle';
-export const textForScreenReader = (intl, status, rebloggedByText = false, expanded = false) => {
+export const textForScreenReader = (intl, status, rebloggedByText = false) => {
const displayName = status.getIn(['account', 'display_name']);
const values = [
displayName.length === 0 ? status.getIn(['account', 'acct']).split('@')[0] : displayName,
- status.get('spoiler_text') && !expanded ? status.get('spoiler_text') : status.get('search_index').slice(status.get('spoiler_text').length),
+ status.get('spoiler_text') && status.get('hidden') ? status.get('spoiler_text') : status.get('search_index').slice(status.get('spoiler_text').length),
intl.formatDate(status.get('created_at'), { hour: '2-digit', minute: '2-digit', month: 'short', day: 'numeric' }),
status.getIn(['account', 'acct']),
];
diff --git a/app/javascript/mastodon/features/notifications/components/notification.js b/app/javascript/mastodon/features/notifications/components/notification.js
index f58224a8b..07fec84b2 100644
--- a/app/javascript/mastodon/features/notifications/components/notification.js
+++ b/app/javascript/mastodon/features/notifications/components/notification.js
@@ -3,11 +3,20 @@ import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
import StatusContainer from '../../../containers/status_container';
import AccountContainer from '../../../containers/account_container';
-import { FormattedMessage } from 'react-intl';
+import { injectIntl, FormattedMessage } from 'react-intl';
import Permalink from '../../../components/permalink';
import ImmutablePureComponent from 'react-immutable-pure-component';
import { HotKeys } from 'react-hotkeys';
+const notificationForScreenReader = (intl, message, timestamp) => {
+ const output = [message];
+
+ output.push(intl.formatDate(timestamp, { hour: '2-digit', minute: '2-digit', month: 'short', day: 'numeric' }));
+
+ return output.join(', ');
+};
+
+@injectIntl
export default class Notification extends ImmutablePureComponent {
static contextTypes = {
@@ -20,6 +29,7 @@ export default class Notification extends ImmutablePureComponent {
onMoveUp: PropTypes.func.isRequired,
onMoveDown: PropTypes.func.isRequired,
onMention: PropTypes.func.isRequired,
+ intl: PropTypes.object.isRequired,
};
handleMoveUp = () => {
@@ -65,10 +75,12 @@ export default class Notification extends ImmutablePureComponent {
};
}
- renderFollow (account, link) {
+ renderFollow (notification, account, link) {
+ const { intl } = this.props;
+
return (
-
+
@@ -97,9 +109,11 @@ export default class Notification extends ImmutablePureComponent {
}
renderFavourite (notification, link) {
+ const { intl } = this.props;
+
return (
-
+
@@ -114,9 +128,11 @@ export default class Notification extends ImmutablePureComponent {
}
renderReblog (notification, link) {
+ const { intl } = this.props;
+
return (
-
+