Merge tag 'v2.2.0' into kosmos
@ -27,6 +27,7 @@ plugins:
 | 
			
		||||
    enabled: true
 | 
			
		||||
  eslint:
 | 
			
		||||
    enabled: true
 | 
			
		||||
    channel: eslint-4
 | 
			
		||||
  rubocop:
 | 
			
		||||
    enabled: true
 | 
			
		||||
  scss-lint:
 | 
			
		||||
 | 
			
		||||
@ -17,11 +17,9 @@ plugins:
 | 
			
		||||
parserOptions:
 | 
			
		||||
  sourceType: module
 | 
			
		||||
  ecmaFeatures:
 | 
			
		||||
    arrowFunctions: true
 | 
			
		||||
    experimentalObjectRestSpread: true
 | 
			
		||||
    jsx: true
 | 
			
		||||
    destructuring: true
 | 
			
		||||
    modules: true
 | 
			
		||||
    spread: true
 | 
			
		||||
  ecmaVersion: 2018
 | 
			
		||||
 | 
			
		||||
settings:
 | 
			
		||||
  import/extensions:
 | 
			
		||||
@ -109,6 +107,7 @@ rules:
 | 
			
		||||
  react/self-closing-comp: error
 | 
			
		||||
 | 
			
		||||
  jsx-a11y/accessible-emoji: warn
 | 
			
		||||
  jsx-a11y/alt-text: warn
 | 
			
		||||
  jsx-a11y/anchor-has-content: warn
 | 
			
		||||
  jsx-a11y/aria-activedescendant-has-tabindex: warn
 | 
			
		||||
  jsx-a11y/aria-props: warn
 | 
			
		||||
@ -119,16 +118,22 @@ rules:
 | 
			
		||||
  jsx-a11y/href-no-hash: warn
 | 
			
		||||
  jsx-a11y/html-has-lang: warn
 | 
			
		||||
  jsx-a11y/iframe-has-title: warn
 | 
			
		||||
  jsx-a11y/img-has-alt: warn
 | 
			
		||||
  jsx-a11y/img-redundant-alt: warn
 | 
			
		||||
  jsx-a11y/interactive-supports-focus: warn
 | 
			
		||||
  jsx-a11y/label-has-for: off
 | 
			
		||||
  jsx-a11y/mouse-events-have-key-events: warn
 | 
			
		||||
  jsx-a11y/no-access-key: warn
 | 
			
		||||
  jsx-a11y/no-distracting-elements: warn
 | 
			
		||||
  jsx-a11y/no-noninteractive-element-interactions:
 | 
			
		||||
  - warn
 | 
			
		||||
  - handlers:
 | 
			
		||||
    - onClick
 | 
			
		||||
  jsx-a11y/no-onchange: warn
 | 
			
		||||
  jsx-a11y/no-redundant-roles: warn
 | 
			
		||||
  jsx-a11y/onclick-has-focus: warn
 | 
			
		||||
  jsx-a11y/onclick-has-role: warn
 | 
			
		||||
  jsx-a11y/no-static-element-interactions:
 | 
			
		||||
  - warn
 | 
			
		||||
  - handlers:
 | 
			
		||||
    - onClick
 | 
			
		||||
  jsx-a11y/role-has-required-aria-props: warn
 | 
			
		||||
  jsx-a11y/role-supports-aria-props: off
 | 
			
		||||
  jsx-a11y/scope: warn
 | 
			
		||||
 | 
			
		||||
@ -1 +1 @@
 | 
			
		||||
2.4.2
 | 
			
		||||
2.5.0
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										10
									
								
								.travis.yml
									
									
									
									
									
								
							
							
						
						@ -8,7 +8,10 @@ cache:
 | 
			
		||||
  - public/packs-test
 | 
			
		||||
  - tmp/cache/babel-loader
 | 
			
		||||
dist: trusty
 | 
			
		||||
sudo: required
 | 
			
		||||
sudo: false
 | 
			
		||||
branches:
 | 
			
		||||
  only:
 | 
			
		||||
  - master
 | 
			
		||||
 | 
			
		||||
notifications:
 | 
			
		||||
  email: false
 | 
			
		||||
@ -37,8 +40,8 @@ addons:
 | 
			
		||||
    - yarn
 | 
			
		||||
 | 
			
		||||
rvm:
 | 
			
		||||
  - 2.3.4
 | 
			
		||||
  - 2.4.2
 | 
			
		||||
  - 2.5.0
 | 
			
		||||
 | 
			
		||||
services:
 | 
			
		||||
  - redis-server
 | 
			
		||||
@ -49,8 +52,7 @@ install:
 | 
			
		||||
  - yarn install
 | 
			
		||||
 | 
			
		||||
before_script:
 | 
			
		||||
  - bundle exec rake parallel:create parallel:load_schema parallel:prepare
 | 
			
		||||
  - bundle exec rails assets:precompile
 | 
			
		||||
  - ./bin/rails parallel:create parallel:load_schema parallel:prepare assets:precompile
 | 
			
		||||
  - ln -s /usr/bin/x86_64-linux-gnu-g++-6 "$HOME/g++"
 | 
			
		||||
 | 
			
		||||
script:
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
FROM ruby:2.4.2-alpine3.6
 | 
			
		||||
FROM ruby:2.5.0-alpine3.7
 | 
			
		||||
 | 
			
		||||
LABEL maintainer="https://github.com/tootsuite/mastodon" \
 | 
			
		||||
      description="A GNU Social-compatible microblogging server"
 | 
			
		||||
@ -40,6 +40,7 @@ RUN apk -U upgrade \
 | 
			
		||||
    protobuf \
 | 
			
		||||
    su-exec \
 | 
			
		||||
    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" \
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										9
									
								
								Gemfile
									
									
									
									
									
								
							
							
						
						@ -1,7 +1,7 @@
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
source 'https://rubygems.org'
 | 
			
		||||
ruby '>= 2.3.0', '< 2.5.0'
 | 
			
		||||
ruby '>= 2.3.0', '< 2.6.0'
 | 
			
		||||
 | 
			
		||||
gem 'pkg-config', '~> 1.2'
 | 
			
		||||
 | 
			
		||||
@ -28,15 +28,15 @@ gem 'browser'
 | 
			
		||||
gem 'charlock_holmes', '~> 0.7.5'
 | 
			
		||||
gem 'iso-639'
 | 
			
		||||
gem 'cld3', '~> 3.2.0'
 | 
			
		||||
gem 'devise', '~> 4.3'
 | 
			
		||||
gem 'devise', '~> 4.4'
 | 
			
		||||
gem 'devise-two-factor', '~> 3.0'
 | 
			
		||||
gem 'doorkeeper', '~> 4.2'
 | 
			
		||||
gem 'fast_blank', '~> 1.0'
 | 
			
		||||
gem 'goldfinger', '~> 2.0'
 | 
			
		||||
gem 'goldfinger', '~> 2.1'
 | 
			
		||||
gem 'hiredis', '~> 0.6'
 | 
			
		||||
gem 'redis-namespace', '~> 1.5'
 | 
			
		||||
gem 'htmlentities', '~> 4.3'
 | 
			
		||||
gem 'http', '~> 2.2'
 | 
			
		||||
gem 'http', '~> 3.0'
 | 
			
		||||
gem 'http_accept_language', '~> 2.1'
 | 
			
		||||
gem 'httplog', '~> 0.99'
 | 
			
		||||
gem 'idn-ruby', require: 'idn'
 | 
			
		||||
@ -49,6 +49,7 @@ gem 'oj', '~> 3.3'
 | 
			
		||||
gem 'ostatus2', '~> 2.0'
 | 
			
		||||
gem 'ox', '~> 2.8'
 | 
			
		||||
gem 'pundit', '~> 1.1'
 | 
			
		||||
gem 'premailer-rails'
 | 
			
		||||
gem 'rack-attack', '~> 5.0'
 | 
			
		||||
gem 'rack-cors', '~> 0.4', require: 'rack/cors'
 | 
			
		||||
gem 'rack-timeout', '~> 0.4'
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										44
									
								
								Gemfile.lock
									
									
									
									
									
								
							
							
						
						@ -70,7 +70,7 @@ GEM
 | 
			
		||||
      coderay (>= 1.0.0)
 | 
			
		||||
      erubi (>= 1.0.0)
 | 
			
		||||
      rack (>= 0.9.0)
 | 
			
		||||
    binding_of_caller (0.7.3)
 | 
			
		||||
    binding_of_caller (0.8.0)
 | 
			
		||||
      debug_inspector (>= 0.0.1)
 | 
			
		||||
    bootsnap (1.1.5)
 | 
			
		||||
      msgpack (~> 1.0)
 | 
			
		||||
@ -110,7 +110,7 @@ GEM
 | 
			
		||||
      activesupport
 | 
			
		||||
    charlock_holmes (0.7.5)
 | 
			
		||||
    chunky_png (1.3.8)
 | 
			
		||||
    cld3 (3.2.1)
 | 
			
		||||
    cld3 (3.2.2)
 | 
			
		||||
      ffi (>= 1.1.0, < 1.10.0)
 | 
			
		||||
    climate_control (0.2.0)
 | 
			
		||||
    cocaine (0.5.8)
 | 
			
		||||
@ -122,8 +122,10 @@ GEM
 | 
			
		||||
    crack (0.4.3)
 | 
			
		||||
      safe_yaml (~> 1.0.0)
 | 
			
		||||
    crass (1.0.3)
 | 
			
		||||
    css_parser (1.6.0)
 | 
			
		||||
      addressable
 | 
			
		||||
    debug_inspector (0.0.3)
 | 
			
		||||
    devise (4.3.0)
 | 
			
		||||
    devise (4.4.0)
 | 
			
		||||
      bcrypt (~> 3.0)
 | 
			
		||||
      orm_adapter (~> 0.1)
 | 
			
		||||
      railties (>= 4.1.0, < 5.2)
 | 
			
		||||
@ -179,9 +181,9 @@ GEM
 | 
			
		||||
      ruby-progressbar (~> 1.4)
 | 
			
		||||
    globalid (0.4.1)
 | 
			
		||||
      activesupport (>= 4.2.0)
 | 
			
		||||
    goldfinger (2.0.1)
 | 
			
		||||
    goldfinger (2.1.0)
 | 
			
		||||
      addressable (~> 2.5)
 | 
			
		||||
      http (~> 2.2)
 | 
			
		||||
      http (~> 3.0)
 | 
			
		||||
      nokogiri (~> 1.8)
 | 
			
		||||
      oj (~> 3.0)
 | 
			
		||||
    hamlit (2.8.5)
 | 
			
		||||
@ -200,14 +202,14 @@ GEM
 | 
			
		||||
    hiredis (0.6.1)
 | 
			
		||||
    hkdf (0.3.0)
 | 
			
		||||
    htmlentities (4.3.4)
 | 
			
		||||
    http (2.2.2)
 | 
			
		||||
    http (3.0.0)
 | 
			
		||||
      addressable (~> 2.3)
 | 
			
		||||
      http-cookie (~> 1.0)
 | 
			
		||||
      http-form_data (~> 1.0.1)
 | 
			
		||||
      http-form_data (>= 2.0.0.pre.pre2, < 3)
 | 
			
		||||
      http_parser.rb (~> 0.6.0)
 | 
			
		||||
    http-cookie (1.0.3)
 | 
			
		||||
      domain_name (~> 0.5)
 | 
			
		||||
    http-form_data (1.0.3)
 | 
			
		||||
    http-form_data (2.0.0)
 | 
			
		||||
    http_accept_language (2.1.1)
 | 
			
		||||
    http_parser.rb (0.6.0)
 | 
			
		||||
    httplog (0.99.7)
 | 
			
		||||
@ -298,12 +300,12 @@ GEM
 | 
			
		||||
      concurrent-ruby (~> 1.0.0)
 | 
			
		||||
      sidekiq (>= 3.5.0)
 | 
			
		||||
      statsd-ruby (~> 1.2.0)
 | 
			
		||||
    oj (3.3.9)
 | 
			
		||||
    oj (3.3.10)
 | 
			
		||||
    orm_adapter (0.5.0)
 | 
			
		||||
    ostatus2 (2.0.2)
 | 
			
		||||
      addressable (~> 2.4)
 | 
			
		||||
      http (~> 2.0)
 | 
			
		||||
      nokogiri (~> 1.6)
 | 
			
		||||
    ostatus2 (2.0.3)
 | 
			
		||||
      addressable (~> 2.5)
 | 
			
		||||
      http (~> 3.0)
 | 
			
		||||
      nokogiri (~> 1.8)
 | 
			
		||||
    ox (2.8.2)
 | 
			
		||||
    paperclip (5.1.0)
 | 
			
		||||
      activemodel (>= 4.2.0)
 | 
			
		||||
@ -324,6 +326,13 @@ GEM
 | 
			
		||||
      activerecord
 | 
			
		||||
    pkg-config (1.2.8)
 | 
			
		||||
    powerpack (0.1.1)
 | 
			
		||||
    premailer (1.11.1)
 | 
			
		||||
      addressable
 | 
			
		||||
      css_parser (>= 1.6.0)
 | 
			
		||||
      htmlentities (>= 4.0.0)
 | 
			
		||||
    premailer-rails (1.10.1)
 | 
			
		||||
      actionmailer (>= 3, < 6)
 | 
			
		||||
      premailer (~> 1.7, >= 1.7.9)
 | 
			
		||||
    pry (0.11.3)
 | 
			
		||||
      coderay (~> 1.1.0)
 | 
			
		||||
      method_source (~> 0.9.0)
 | 
			
		||||
@ -559,7 +568,7 @@ DEPENDENCIES
 | 
			
		||||
  charlock_holmes (~> 0.7.5)
 | 
			
		||||
  cld3 (~> 3.2.0)
 | 
			
		||||
  climate_control (~> 0.2)
 | 
			
		||||
  devise (~> 4.3)
 | 
			
		||||
  devise (~> 4.4)
 | 
			
		||||
  devise-two-factor (~> 3.0)
 | 
			
		||||
  doorkeeper (~> 4.2)
 | 
			
		||||
  dotenv-rails (~> 2.2)
 | 
			
		||||
@ -570,11 +579,11 @@ DEPENDENCIES
 | 
			
		||||
  fog-local (~> 0.4)
 | 
			
		||||
  fog-openstack (~> 0.1)
 | 
			
		||||
  fuubar (~> 2.2)
 | 
			
		||||
  goldfinger (~> 2.0)
 | 
			
		||||
  goldfinger (~> 2.1)
 | 
			
		||||
  hamlit-rails (~> 0.2)
 | 
			
		||||
  hiredis (~> 0.6)
 | 
			
		||||
  htmlentities (~> 4.3)
 | 
			
		||||
  http (~> 2.2)
 | 
			
		||||
  http (~> 3.0)
 | 
			
		||||
  http_accept_language (~> 2.1)
 | 
			
		||||
  httplog (~> 0.99)
 | 
			
		||||
  i18n-tasks (~> 0.9)
 | 
			
		||||
@ -600,6 +609,7 @@ DEPENDENCIES
 | 
			
		||||
  pg (~> 0.20)
 | 
			
		||||
  pghero (~> 1.7)
 | 
			
		||||
  pkg-config (~> 1.2)
 | 
			
		||||
  premailer-rails
 | 
			
		||||
  pry-rails (~> 0.3)
 | 
			
		||||
  puma (~> 3.10)
 | 
			
		||||
  pundit (~> 1.1)
 | 
			
		||||
@ -639,7 +649,7 @@ DEPENDENCIES
 | 
			
		||||
  webpush
 | 
			
		||||
 | 
			
		||||
RUBY VERSION
 | 
			
		||||
   ruby 2.4.2p198
 | 
			
		||||
   ruby 2.5.0p0
 | 
			
		||||
 | 
			
		||||
BUNDLED WITH
 | 
			
		||||
   1.16.1
 | 
			
		||||
 | 
			
		||||
@ -28,7 +28,7 @@ class ActivityPub::InboxesController < Api::BaseController
 | 
			
		||||
  def upgrade_account
 | 
			
		||||
    if signed_request_account.ostatus?
 | 
			
		||||
      signed_request_account.update(last_webfingered_at: nil)
 | 
			
		||||
      ResolveRemoteAccountWorker.perform_async(signed_request_account.acct)
 | 
			
		||||
      ResolveAccountWorker.perform_async(signed_request_account.acct)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    Pubsubhubbub::UnsubscribeWorker.perform_async(signed_request_account.id) if signed_request_account.subscribed?
 | 
			
		||||
 | 
			
		||||
@ -9,7 +9,11 @@ class Api::V1::Timelines::HomeController < Api::BaseController
 | 
			
		||||
 | 
			
		||||
  def show
 | 
			
		||||
    @statuses = load_statuses
 | 
			
		||||
    render json: @statuses, each_serializer: REST::StatusSerializer, relationships: StatusRelationshipsPresenter.new(@statuses, current_user&.account_id)
 | 
			
		||||
 | 
			
		||||
    render json: @statuses,
 | 
			
		||||
           each_serializer: REST::StatusSerializer,
 | 
			
		||||
           relationships: StatusRelationshipsPresenter.new(@statuses, current_user&.account_id),
 | 
			
		||||
           status: regeneration_in_progress? ? 206 : 200
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  private
 | 
			
		||||
@ -57,4 +61,8 @@ class Api::V1::Timelines::HomeController < Api::BaseController
 | 
			
		||||
  def pagination_since_id
 | 
			
		||||
    @statuses.first.id
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def regeneration_in_progress?
 | 
			
		||||
    Redis.current.exists("account:#{current_account.id}:regeneration")
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
@ -4,6 +4,7 @@ class Api::Web::PushSubscriptionsController < Api::BaseController
 | 
			
		||||
  respond_to :json
 | 
			
		||||
 | 
			
		||||
  before_action :require_user!
 | 
			
		||||
  protect_from_forgery with: :exception
 | 
			
		||||
 | 
			
		||||
  def create
 | 
			
		||||
    params.require(:subscription).require(:endpoint)
 | 
			
		||||
 | 
			
		||||
@ -41,7 +41,7 @@ class AuthorizeFollowsController < ApplicationController
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def account_from_remote_follow
 | 
			
		||||
    ResolveRemoteAccountService.new.call(acct_without_prefix)
 | 
			
		||||
    ResolveAccountService.new.call(acct_without_prefix)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def acct_param_is_url?
 | 
			
		||||
 | 
			
		||||
@ -114,7 +114,7 @@ module SignatureVerification
 | 
			
		||||
 | 
			
		||||
  def account_from_key_id(key_id)
 | 
			
		||||
    if key_id.start_with?('acct:')
 | 
			
		||||
      ResolveRemoteAccountService.new.call(key_id.gsub(/\Aacct:/, ''))
 | 
			
		||||
      ResolveAccountService.new.call(key_id.gsub(/\Aacct:/, ''))
 | 
			
		||||
    elsif !ActivityPub::TagManager.instance.local_uri?(key_id)
 | 
			
		||||
      account   = ActivityPub::TagManager.instance.uri_to_resource(key_id, Account)
 | 
			
		||||
      account ||= ActivityPub::FetchRemoteKeyService.new.call(key_id, id: false)
 | 
			
		||||
 | 
			
		||||
@ -3,7 +3,6 @@
 | 
			
		||||
module UserTrackingConcern
 | 
			
		||||
  extend ActiveSupport::Concern
 | 
			
		||||
 | 
			
		||||
  REGENERATE_FEED_DAYS = 14
 | 
			
		||||
  UPDATE_SIGN_IN_HOURS = 24
 | 
			
		||||
 | 
			
		||||
  included do
 | 
			
		||||
@ -14,25 +13,10 @@ module UserTrackingConcern
 | 
			
		||||
 | 
			
		||||
  def set_user_activity
 | 
			
		||||
    return unless user_needs_sign_in_update?
 | 
			
		||||
 | 
			
		||||
    # Mark as signed-in today
 | 
			
		||||
    current_user.update_tracked_fields!(request)
 | 
			
		||||
    ActivityTracker.record('activity:logins', current_user.id)
 | 
			
		||||
 | 
			
		||||
    # Regenerate feed if needed
 | 
			
		||||
    regenerate_feed! if user_needs_feed_update?
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def user_needs_sign_in_update?
 | 
			
		||||
    user_signed_in? && (current_user.current_sign_in_at.nil? || current_user.current_sign_in_at < UPDATE_SIGN_IN_HOURS.hours.ago)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def user_needs_feed_update?
 | 
			
		||||
    current_user.last_sign_in_at < REGENERATE_FEED_DAYS.days.ago
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def regenerate_feed!
 | 
			
		||||
    Redis.current.setnx("account:#{current_user.account_id}:regeneration", true) == 1 && Redis.current.expire("account:#{current_user.account_id}:regeneration", 3_600 * 24)
 | 
			
		||||
    RegenerationWorker.perform_async(current_user.account_id)
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
@ -6,6 +6,7 @@ module Settings
 | 
			
		||||
      layout 'admin'
 | 
			
		||||
 | 
			
		||||
      before_action :authenticate_user!
 | 
			
		||||
      before_action :ensure_otp_secret
 | 
			
		||||
 | 
			
		||||
      def new
 | 
			
		||||
        prepare_two_factor_form
 | 
			
		||||
@ -38,6 +39,10 @@ module Settings
 | 
			
		||||
        @provision_url = current_user.otp_provisioning_uri(current_user.email, issuer: Rails.configuration.x.local_domain)
 | 
			
		||||
        @qrcode = RQRCode::QRCode.new(@provision_url)
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def ensure_otp_secret
 | 
			
		||||
        redirect_to settings_two_factor_authentication_path unless current_user.otp_secret
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
@ -14,13 +14,14 @@ class SharesController < ApplicationController
 | 
			
		||||
  private
 | 
			
		||||
 | 
			
		||||
  def initial_state_params
 | 
			
		||||
    text = [params[:title], params[:text], params[:url]].compact.join(' ')
 | 
			
		||||
    {
 | 
			
		||||
      settings: Web::Setting.find_by(user: current_user)&.data || {},
 | 
			
		||||
      push_subscription: current_account.user.web_push_subscription(current_session),
 | 
			
		||||
      current_account: current_account,
 | 
			
		||||
      token: current_session.token,
 | 
			
		||||
      admin: Account.find_local(Setting.site_contact_username),
 | 
			
		||||
      text: params[:text],
 | 
			
		||||
      text: text,
 | 
			
		||||
    }
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -22,10 +22,18 @@ module ApplicationHelper
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def add_rtl_body_class(other_classes)
 | 
			
		||||
    other_classes = "#{other_classes} rtl" if [:ar, :fa, :he].include?(I18n.locale)
 | 
			
		||||
    other_classes = "#{other_classes} rtl" if locale_direction == 'rtl'
 | 
			
		||||
    other_classes
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def locale_direction
 | 
			
		||||
    if [:ar, :fa, :he].include?(I18n.locale)
 | 
			
		||||
      'rtl'
 | 
			
		||||
    else
 | 
			
		||||
      'ltr'
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def favicon_path
 | 
			
		||||
    env_suffix = Rails.env.production? ? '' : '-dev'
 | 
			
		||||
    "/favicon#{env_suffix}.ico"
 | 
			
		||||
 | 
			
		||||
@ -6,6 +6,6 @@ module InstanceHelper
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def site_hostname
 | 
			
		||||
    Rails.configuration.x.local_domain
 | 
			
		||||
    @site_hostname ||= Addressable::URI.parse("//#{Rails.configuration.x.local_domain}").display_uri.host
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										4
									
								
								app/helpers/mailer_helper.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,4 @@
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
module MailerHelper
 | 
			
		||||
end
 | 
			
		||||
@ -16,6 +16,7 @@ module SettingsHelper
 | 
			
		||||
    he: 'עברית',
 | 
			
		||||
    hr: 'Hrvatski',
 | 
			
		||||
    hu: 'Magyar',
 | 
			
		||||
    hy: 'Հայերեն',
 | 
			
		||||
    id: 'Bahasa Indonesia',
 | 
			
		||||
    io: 'Ido',
 | 
			
		||||
    it: 'Italiano',
 | 
			
		||||
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 142 KiB  | 
| 
		 Before Width: | Height: | Size: 24 KiB  | 
							
								
								
									
										1
									
								
								app/javascript/images/elephant_ui_disappointed.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 11 KiB  | 
							
								
								
									
										1
									
								
								app/javascript/images/elephant_ui_greeting.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 17 KiB  | 
							
								
								
									
										1
									
								
								app/javascript/images/elephant_ui_plane.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 11 KiB  | 
							
								
								
									
										1
									
								
								app/javascript/images/elephant_ui_working.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 8.3 KiB  | 
							
								
								
									
										2
									
								
								app/javascript/images/icon_cached.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,2 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<svg width="2048" height="1792" viewBox="0 0 2048 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1344 1504q0 13-9.5 22.5t-22.5 9.5h-960q-8 0-13.5-2t-9-7-5.5-8-3-11.5-1-11.5v-600h-192q-26 0-45-19t-19-45q0-24 15-41l320-384q19-22 49-22t49 22l320 384q15 17 15 41 0 26-19 45t-45 19h-192v384h576q16 0 25 11l160 192q7 10 7 21zm640-416q0 24-15 41l-320 384q-20 23-49 23t-49-23l-320-384q-15-17-15-41 0-26 19-45t45-19h192v-384h-576q-16 0-25-12l-160-192q-7-9-7-20 0-13 9.5-22.5t22.5-9.5h960q8 0 13.5 2t9 7 5.5 8 3 11.5 1 11.5v600h192q26 0 45 19t19 45z" fill="#fff"/></svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 604 B  | 
							
								
								
									
										4
									
								
								app/javascript/images/icon_done.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,4 @@
 | 
			
		||||
<svg fill="#FFFFFF" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
 | 
			
		||||
    <path d="M0 0h24v24H0z" fill="none"/>
 | 
			
		||||
    <path d="M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z"/>
 | 
			
		||||
</svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 214 B  | 
							
								
								
									
										4
									
								
								app/javascript/images/icon_email.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,4 @@
 | 
			
		||||
<svg fill="#FFFFFF" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
 | 
			
		||||
    <path d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z"/>
 | 
			
		||||
    <path d="M0 0h24v24H0z" fill="none"/>
 | 
			
		||||
</svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 273 B  | 
							
								
								
									
										4
									
								
								app/javascript/images/icon_grade.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,4 @@
 | 
			
		||||
<svg fill="#FFFFFF" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
 | 
			
		||||
    <path d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"/>
 | 
			
		||||
    <path d="M0 0h24v24H0z" fill="none"/>
 | 
			
		||||
</svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 252 B  | 
							
								
								
									
										4
									
								
								app/javascript/images/icon_lock_open.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,4 @@
 | 
			
		||||
<svg fill="#FFFFFF" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
 | 
			
		||||
    <path d="M0 0h24v24H0z" fill="none"/>
 | 
			
		||||
    <path d="M12 17c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm6-9h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6h1.9c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm0 12H6V10h12v10z"/>
 | 
			
		||||
</svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 395 B  | 
							
								
								
									
										4
									
								
								app/javascript/images/icon_person_add.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,4 @@
 | 
			
		||||
<svg fill="#FFFFFF" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
 | 
			
		||||
    <path d="M0 0h24v24H0z" fill="none"/>
 | 
			
		||||
    <path d="M15 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm-9-2V7H4v3H1v2h3v3h2v-3h3v-2H6zm9 4c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"/>
 | 
			
		||||
</svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 305 B  | 
							
								
								
									
										4
									
								
								app/javascript/images/icon_reply.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,4 @@
 | 
			
		||||
<svg fill="#FFFFFF" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
 | 
			
		||||
    <path d="M10 9V5l-7 7 7 7v-4.1c5 0 8.5 1.6 11 5.1-1-5-4-10-11-11z"/>
 | 
			
		||||
    <path d="M0 0h24v24H0z" fill="none"/>
 | 
			
		||||
</svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 220 B  | 
							
								
								
									
										1
									
								
								app/javascript/images/logo_transparent.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1 @@
 | 
			
		||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 216.4144 232.00976"><path d="M107.86523 0C78.203984.2425 49.672422 3.4535937 33.044922 11.089844c0 0-32.97656262 14.752031-32.97656262 65.082031 0 11.525-.224375 25.306175.140625 39.919925 1.19750002 49.22 9.02375002 97.72843 54.53124962 109.77343 20.9825 5.55375 38.99711 6.71547 53.505856 5.91797 26.31125-1.45875 41.08203-9.38867 41.08203-9.38867l-.86914-19.08984s-18.80171 5.92758-39.91796 5.20508c-20.921254-.7175-43.006879-2.25516-46.390629-27.94141-.3125-2.25625-.46875-4.66938-.46875-7.20313 0 0 20.536953 5.0204 46.564449 6.21289 15.915.73001 30.8393-.93343 45.99805-2.74218 29.07-3.47125 54.38125-21.3818 57.5625-37.74805 5.0125-25.78125 4.59961-62.916015 4.59961-62.916015 0-50.33-32.97461-65.082031-32.97461-65.082031C166.80539 3.4535938 138.255.2425 108.59375 0h-.72852zM74.296875 39.326172c12.355 0 21.710234 4.749297 27.896485 14.248047l6.01367 10.080078 6.01563-10.080078c6.185-9.49875 15.54023-14.248047 27.89648-14.248047 10.6775 0 19.28156 3.753672 25.85156 11.076172 6.36875 7.3225 9.53907 17.218828 9.53907 29.673828v60.941408h-24.14454V81.869141c0-12.46875-5.24453-18.798829-15.73828-18.798829-11.6025 0-17.41797 7.508516-17.41797 22.353516v32.375002H96.207031V85.423828c0-14.845-5.815468-22.353515-17.417969-22.353516-10.49375 0-15.740234 6.330079-15.740234 18.798829v59.148439H38.904297V80.076172c0-12.455 3.171016-22.351328 9.541015-29.673828 6.568751-7.3225 15.172813-11.076172 25.851563-11.076172z" fill="#fff"/></svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 1.5 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								app/javascript/images/mailer/icon_cached.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 582 B  | 
							
								
								
									
										
											BIN
										
									
								
								app/javascript/images/mailer/icon_done.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 279 B  | 
							
								
								
									
										
											BIN
										
									
								
								app/javascript/images/mailer/icon_email.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 520 B  | 
							
								
								
									
										
											BIN
										
									
								
								app/javascript/images/mailer/icon_grade.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 541 B  | 
							
								
								
									
										
											BIN
										
									
								
								app/javascript/images/mailer/icon_lock_open.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 550 B  | 
							
								
								
									
										
											BIN
										
									
								
								app/javascript/images/mailer/icon_person_add.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 512 B  | 
							
								
								
									
										
											BIN
										
									
								
								app/javascript/images/mailer/icon_reply.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 391 B  | 
							
								
								
									
										
											BIN
										
									
								
								app/javascript/images/mailer/logo_full.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 3.0 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								app/javascript/images/mailer/logo_transparent.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 627 B  | 
| 
		 Before Width: | Height: | Size: 19 KiB  | 
| 
		 Before Width: | Height: | Size: 32 KiB  | 
| 
		 Before Width: | Height: | Size: 5.8 KiB  | 
| 
		 Before Width: | Height: | Size: 3.2 KiB  | 
| 
		 Before Width: | Height: | Size: 5.1 KiB  | 
@ -1,6 +1,7 @@
 | 
			
		||||
import api from '../../api';
 | 
			
		||||
import { pushNotificationsSetting } from '../../settings';
 | 
			
		||||
import { setBrowserSupport, setSubscription, clearSubscription } from './setter';
 | 
			
		||||
import { me } from '../../initial_state';
 | 
			
		||||
 | 
			
		||||
// Taken from https://www.npmjs.com/package/web-push
 | 
			
		||||
const urlBase64ToUint8Array = (base64String) => {
 | 
			
		||||
@ -35,7 +36,7 @@ const subscribe = (registration) =>
 | 
			
		||||
const unsubscribe = ({ registration, subscription }) =>
 | 
			
		||||
  subscription ? subscription.unsubscribe().then(() => registration) : registration;
 | 
			
		||||
 | 
			
		||||
const sendSubscriptionToBackend = (getState, subscription, me) => {
 | 
			
		||||
const sendSubscriptionToBackend = (getState, subscription) => {
 | 
			
		||||
  const params = { subscription };
 | 
			
		||||
 | 
			
		||||
  if (me) {
 | 
			
		||||
@ -54,7 +55,6 @@ const supportsPushNotifications = ('serviceWorker' in navigator && 'PushManager'
 | 
			
		||||
export function register () {
 | 
			
		||||
  return (dispatch, getState) => {
 | 
			
		||||
    dispatch(setBrowserSupport(supportsPushNotifications));
 | 
			
		||||
    const me = getState().getIn(['meta', 'me']);
 | 
			
		||||
 | 
			
		||||
    if (me && !pushNotificationsSetting.get(me)) {
 | 
			
		||||
      const alerts = getState().getIn(['push_notifications', 'alerts']);
 | 
			
		||||
@ -85,13 +85,13 @@ export function register () {
 | 
			
		||||
            } else {
 | 
			
		||||
              // Something went wrong, try to subscribe again
 | 
			
		||||
              return unsubscribe({ registration, subscription }).then(subscribe).then(
 | 
			
		||||
                subscription => sendSubscriptionToBackend(getState, subscription, me));
 | 
			
		||||
                subscription => sendSubscriptionToBackend(getState, subscription));
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          // No subscription, try to subscribe
 | 
			
		||||
          return subscribe(registration).then(
 | 
			
		||||
            subscription => sendSubscriptionToBackend(getState, subscription, me));
 | 
			
		||||
            subscription => sendSubscriptionToBackend(getState, subscription));
 | 
			
		||||
        })
 | 
			
		||||
        .then(subscription => {
 | 
			
		||||
          // If we got a PushSubscription (and not a subscription object from the backend)
 | 
			
		||||
@ -140,7 +140,6 @@ export function saveSettings() {
 | 
			
		||||
    api(getState).put(`/api/web/push_subscriptions/${subscription.get('id')}`, {
 | 
			
		||||
      data,
 | 
			
		||||
    }).then(() => {
 | 
			
		||||
      const me = getState().getIn(['meta', 'me']);
 | 
			
		||||
      if (me) {
 | 
			
		||||
        pushNotificationsSetting.set(me, data);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
@ -19,13 +19,14 @@ export const TIMELINE_DISCONNECT = 'TIMELINE_DISCONNECT';
 | 
			
		||||
 | 
			
		||||
export const TIMELINE_CONTEXT_UPDATE = 'CONTEXT_UPDATE';
 | 
			
		||||
 | 
			
		||||
export function refreshTimelineSuccess(timeline, statuses, skipLoading, next) {
 | 
			
		||||
export function refreshTimelineSuccess(timeline, statuses, skipLoading, next, partial) {
 | 
			
		||||
  return {
 | 
			
		||||
    type: TIMELINE_REFRESH_SUCCESS,
 | 
			
		||||
    timeline,
 | 
			
		||||
    statuses,
 | 
			
		||||
    skipLoading,
 | 
			
		||||
    next,
 | 
			
		||||
    partial,
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@ -88,7 +89,7 @@ export function refreshTimeline(timelineId, path, params = {}) {
 | 
			
		||||
  return function (dispatch, getState) {
 | 
			
		||||
    const timeline = getState().getIn(['timelines', timelineId], ImmutableMap());
 | 
			
		||||
 | 
			
		||||
    if (timeline.get('isLoading') || timeline.get('online')) {
 | 
			
		||||
    if (timeline.get('isLoading') || (timeline.get('online') && !timeline.get('isPartial'))) {
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -104,8 +105,12 @@ export function refreshTimeline(timelineId, path, params = {}) {
 | 
			
		||||
    dispatch(refreshTimelineRequest(timelineId, skipLoading));
 | 
			
		||||
 | 
			
		||||
    api(getState).get(path, { params }).then(response => {
 | 
			
		||||
      const next = getLinks(response).refs.find(link => link.rel === 'next');
 | 
			
		||||
      dispatch(refreshTimelineSuccess(timelineId, response.data, skipLoading, next ? next.uri : null));
 | 
			
		||||
      if (response.status === 206) {
 | 
			
		||||
        dispatch(refreshTimelineSuccess(timelineId, [], skipLoading, null, true));
 | 
			
		||||
      } else {
 | 
			
		||||
        const next = getLinks(response).refs.find(link => link.rel === 'next');
 | 
			
		||||
        dispatch(refreshTimelineSuccess(timelineId, response.data, skipLoading, next ? next.uri : null, false));
 | 
			
		||||
      }
 | 
			
		||||
    }).catch(error => {
 | 
			
		||||
      dispatch(refreshTimelineFail(timelineId, error, skipLoading));
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
@ -4,14 +4,16 @@ exports[`<DisplayName /> renders display name + account name 1`] = `
 | 
			
		||||
<span
 | 
			
		||||
  className="display-name"
 | 
			
		||||
>
 | 
			
		||||
  <strong
 | 
			
		||||
    className="display-name__html"
 | 
			
		||||
    dangerouslySetInnerHTML={
 | 
			
		||||
      Object {
 | 
			
		||||
        "__html": "<p>Foo</p>",
 | 
			
		||||
  <bdi>
 | 
			
		||||
    <strong
 | 
			
		||||
      className="display-name__html"
 | 
			
		||||
      dangerouslySetInnerHTML={
 | 
			
		||||
        Object {
 | 
			
		||||
          "__html": "<p>Foo</p>",
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  />
 | 
			
		||||
    />
 | 
			
		||||
  </bdi>
 | 
			
		||||
   
 | 
			
		||||
  <span
 | 
			
		||||
    className="display-name__account"
 | 
			
		||||
 | 
			
		||||
@ -93,7 +93,7 @@ export default class Account extends ImmutablePureComponent {
 | 
			
		||||
            {hidingNotificationsButton}
 | 
			
		||||
          </Fragment>
 | 
			
		||||
        );
 | 
			
		||||
      } else if (!account.get('moved')) {
 | 
			
		||||
      } else if (!account.get('moved') || following) {
 | 
			
		||||
        buttons = <IconButton icon={following ? 'user-times' : 'user-plus'} title={intl.formatMessage(following ? messages.unfollow : messages.follow)} onClick={this.handleFollow} active={following} />;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -20,11 +20,11 @@ export default class AttachmentList extends ImmutablePureComponent {
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
        <ul className='attachment-list__list'>
 | 
			
		||||
          {media.map(attachment =>
 | 
			
		||||
          {media.map(attachment => (
 | 
			
		||||
            <li key={attachment.get('id')}>
 | 
			
		||||
              <a href={attachment.get('remote_url')} target='_blank' rel='noopener'>{filename(attachment.get('remote_url'))}</a>
 | 
			
		||||
            </li>
 | 
			
		||||
          )}
 | 
			
		||||
          ))}
 | 
			
		||||
        </ul>
 | 
			
		||||
      </div>
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
@ -5,11 +5,11 @@ import PropTypes from 'prop-types';
 | 
			
		||||
 | 
			
		||||
const Collapsable = ({ fullHeight, isVisible, children }) => (
 | 
			
		||||
  <Motion defaultStyle={{ opacity: !isVisible ? 0 : 100, height: isVisible ? fullHeight : 0 }} style={{ opacity: spring(!isVisible ? 0 : 100), height: spring(!isVisible ? 0 : fullHeight) }}>
 | 
			
		||||
    {({ opacity, height }) =>
 | 
			
		||||
    {({ opacity, height }) => (
 | 
			
		||||
      <div style={{ height: `${height}px`, overflow: 'hidden', opacity: opacity / 100, display: Math.floor(opacity) === 0 ? 'none' : 'block' }}>
 | 
			
		||||
        {children}
 | 
			
		||||
      </div>
 | 
			
		||||
    }
 | 
			
		||||
    )}
 | 
			
		||||
  </Motion>
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -23,7 +23,6 @@ export default class ColumnHeader extends React.PureComponent {
 | 
			
		||||
    icon: PropTypes.string.isRequired,
 | 
			
		||||
    active: PropTypes.bool,
 | 
			
		||||
    multiColumn: PropTypes.bool,
 | 
			
		||||
    focusable: PropTypes.bool,
 | 
			
		||||
    showBackButton: PropTypes.bool,
 | 
			
		||||
    children: PropTypes.node,
 | 
			
		||||
    pinned: PropTypes.bool,
 | 
			
		||||
@ -32,10 +31,6 @@ export default class ColumnHeader extends React.PureComponent {
 | 
			
		||||
    onClick: PropTypes.func,
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  static defaultProps = {
 | 
			
		||||
    focusable: true,
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  state = {
 | 
			
		||||
    collapsed: true,
 | 
			
		||||
    animating: false,
 | 
			
		||||
@ -68,7 +63,7 @@ export default class ColumnHeader extends React.PureComponent {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  render () {
 | 
			
		||||
    const { title, icon, active, children, pinned, onPin, multiColumn, focusable, showBackButton, intl: { formatMessage } } = this.props;
 | 
			
		||||
    const { title, icon, active, children, pinned, onPin, multiColumn, showBackButton, intl: { formatMessage } } = this.props;
 | 
			
		||||
    const { collapsed, animating } = this.state;
 | 
			
		||||
 | 
			
		||||
    const wrapperClassName = classNames('column-header__wrapper', {
 | 
			
		||||
@ -135,11 +130,13 @@ export default class ColumnHeader extends React.PureComponent {
 | 
			
		||||
 | 
			
		||||
    return (
 | 
			
		||||
      <div className={wrapperClassName}>
 | 
			
		||||
        <h1 tabIndex={focusable ? 0 : null} role='button' className={buttonClassName} aria-label={title} onClick={this.handleTitleClick}>
 | 
			
		||||
          <i className={`fa fa-fw fa-${icon} column-header__icon`} />
 | 
			
		||||
          <span className='column-header__title'>
 | 
			
		||||
            {title}
 | 
			
		||||
          </span>
 | 
			
		||||
        <h1 className={buttonClassName}>
 | 
			
		||||
          <button onClick={this.handleTitleClick}>
 | 
			
		||||
            <i className={`fa fa-fw fa-${icon} column-header__icon`} />
 | 
			
		||||
            <span className='column-header__title'>
 | 
			
		||||
              {title}
 | 
			
		||||
            </span>
 | 
			
		||||
          </button>
 | 
			
		||||
 | 
			
		||||
          <div className='column-header__buttons'>
 | 
			
		||||
            {backButton}
 | 
			
		||||
 | 
			
		||||
@ -12,7 +12,7 @@ export default class DisplayName extends React.PureComponent {
 | 
			
		||||
 | 
			
		||||
    return (
 | 
			
		||||
      <span className='display-name'>
 | 
			
		||||
        <strong className='display-name__html' dangerouslySetInnerHTML={displayNameHtml} /> <span className='display-name__account'>@{this.props.account.get('acct')}</span>
 | 
			
		||||
        <bdi><strong className='display-name__html' dangerouslySetInnerHTML={displayNameHtml} /></bdi> <span className='display-name__account'>@{this.props.account.get('acct')}</span>
 | 
			
		||||
      </span>
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@ -93,7 +93,7 @@ export default class IconButton extends React.PureComponent {
 | 
			
		||||
 | 
			
		||||
    return (
 | 
			
		||||
      <Motion defaultStyle={{ rotate: active ? -360 : 0 }} style={{ rotate: animate ? spring(active ? -360 : 0, { stiffness: 120, damping: 7 }) : 0 }}>
 | 
			
		||||
        {({ rotate }) =>
 | 
			
		||||
        {({ rotate }) => (
 | 
			
		||||
          <button
 | 
			
		||||
            aria-label={title}
 | 
			
		||||
            aria-pressed={pressed}
 | 
			
		||||
@ -106,7 +106,7 @@ export default class IconButton extends React.PureComponent {
 | 
			
		||||
          >
 | 
			
		||||
            <i style={{ transform: `rotate(${rotate}deg)` }} className={`fa fa-fw fa-${icon}`} aria-hidden='true' />
 | 
			
		||||
          </button>
 | 
			
		||||
        }
 | 
			
		||||
        )}
 | 
			
		||||
      </Motion>
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@ -2,9 +2,14 @@ import React from 'react';
 | 
			
		||||
import { FormattedMessage } from 'react-intl';
 | 
			
		||||
 | 
			
		||||
const MissingIndicator = () => (
 | 
			
		||||
  <div className='missing-indicator'>
 | 
			
		||||
  <div className='regeneration-indicator missing-indicator'>
 | 
			
		||||
    <div>
 | 
			
		||||
      <FormattedMessage id='missing_indicator.label' defaultMessage='Not found' />
 | 
			
		||||
      <div className='regeneration-indicator__figure' />
 | 
			
		||||
 | 
			
		||||
      <div className='regeneration-indicator__label'>
 | 
			
		||||
        <FormattedMessage id='missing_indicator.label' tagName='strong' defaultMessage='Not found' />
 | 
			
		||||
        <FormattedMessage id='missing_indicator.sublabel' defaultMessage='This resource could not be found' />
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
@ -162,7 +162,7 @@ export default class Status extends ImmutablePureComponent {
 | 
			
		||||
      prepend = (
 | 
			
		||||
        <div className='status__prepend'>
 | 
			
		||||
          <div className='status__prepend-icon-wrapper'><i className='fa fa-fw fa-retweet status__prepend-icon' /></div>
 | 
			
		||||
          <FormattedMessage id='status.reblogged_by' defaultMessage='{name} boosted' values={{ name: <a onClick={this.handleAccountClick} data-id={status.getIn(['account', 'id'])} href={status.getIn(['account', 'url'])} className='status__display-name muted'><strong dangerouslySetInnerHTML={display_name_html} /></a> }} />
 | 
			
		||||
          <FormattedMessage id='status.reblogged_by' defaultMessage='{name} boosted' values={{ name: <a onClick={this.handleAccountClick} data-id={status.getIn(['account', 'id'])} href={status.getIn(['account', 'url'])} className='status__display-name muted'><bdi><strong dangerouslySetInnerHTML={display_name_html} /></bdi></a> }} />
 | 
			
		||||
        </div>
 | 
			
		||||
      );
 | 
			
		||||
 | 
			
		||||
@ -178,14 +178,16 @@ export default class Status extends ImmutablePureComponent {
 | 
			
		||||
 | 
			
		||||
        media = (
 | 
			
		||||
          <Bundle fetchComponent={Video} loading={this.renderLoadingVideoPlayer} >
 | 
			
		||||
            {Component => <Component
 | 
			
		||||
              preview={video.get('preview_url')}
 | 
			
		||||
              src={video.get('url')}
 | 
			
		||||
              width={239}
 | 
			
		||||
              height={110}
 | 
			
		||||
              sensitive={status.get('sensitive')}
 | 
			
		||||
              onOpenVideo={this.handleOpenVideo}
 | 
			
		||||
            />}
 | 
			
		||||
            {Component => (
 | 
			
		||||
              <Component
 | 
			
		||||
                preview={video.get('preview_url')}
 | 
			
		||||
                src={video.get('url')}
 | 
			
		||||
                width={239}
 | 
			
		||||
                height={110}
 | 
			
		||||
                sensitive={status.get('sensitive')}
 | 
			
		||||
                onOpenVideo={this.handleOpenVideo}
 | 
			
		||||
              />
 | 
			
		||||
            )}
 | 
			
		||||
          </Bundle>
 | 
			
		||||
        );
 | 
			
		||||
      } else {
 | 
			
		||||
 | 
			
		||||
@ -4,6 +4,7 @@ import PropTypes from 'prop-types';
 | 
			
		||||
import StatusContainer from '../containers/status_container';
 | 
			
		||||
import ImmutablePureComponent from 'react-immutable-pure-component';
 | 
			
		||||
import ScrollableList from './scrollable_list';
 | 
			
		||||
import { FormattedMessage } from 'react-intl';
 | 
			
		||||
 | 
			
		||||
export default class StatusList extends ImmutablePureComponent {
 | 
			
		||||
 | 
			
		||||
@ -16,6 +17,7 @@ export default class StatusList extends ImmutablePureComponent {
 | 
			
		||||
    trackScroll: PropTypes.bool,
 | 
			
		||||
    shouldUpdateScroll: PropTypes.func,
 | 
			
		||||
    isLoading: PropTypes.bool,
 | 
			
		||||
    isPartial: PropTypes.bool,
 | 
			
		||||
    hasMore: PropTypes.bool,
 | 
			
		||||
    prepend: PropTypes.node,
 | 
			
		||||
    emptyMessage: PropTypes.node,
 | 
			
		||||
@ -48,8 +50,23 @@ export default class StatusList extends ImmutablePureComponent {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  render () {
 | 
			
		||||
    const { statusIds, ...other } = this.props;
 | 
			
		||||
    const { isLoading } = other;
 | 
			
		||||
    const { statusIds, ...other }  = this.props;
 | 
			
		||||
    const { isLoading, isPartial } = other;
 | 
			
		||||
 | 
			
		||||
    if (isPartial) {
 | 
			
		||||
      return (
 | 
			
		||||
        <div className='regeneration-indicator'>
 | 
			
		||||
          <div>
 | 
			
		||||
            <div className='regeneration-indicator__figure' />
 | 
			
		||||
 | 
			
		||||
            <div className='regeneration-indicator__label'>
 | 
			
		||||
              <FormattedMessage id='regeneration_indicator.label' tagName='strong' defaultMessage='Loading…' />
 | 
			
		||||
              <FormattedMessage id='regeneration_indicator.sublabel' defaultMessage='Your home feed is being prepared!' />
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const scrollableContent = (isLoading || statusIds.size > 0) ? (
 | 
			
		||||
      statusIds.map((statusId) => (
 | 
			
		||||
 | 
			
		||||
@ -41,7 +41,7 @@ class Avatar extends ImmutablePureComponent {
 | 
			
		||||
 | 
			
		||||
    return (
 | 
			
		||||
      <Motion defaultStyle={{ radius: 90 }} style={{ radius: spring(isHovered ? 30 : 90, { stiffness: 180, damping: 12 }) }}>
 | 
			
		||||
        {({ radius }) =>
 | 
			
		||||
        {({ radius }) => (
 | 
			
		||||
          <a
 | 
			
		||||
            href={account.get('url')}
 | 
			
		||||
            className='account__header__avatar'
 | 
			
		||||
@ -56,7 +56,7 @@ class Avatar extends ImmutablePureComponent {
 | 
			
		||||
          >
 | 
			
		||||
            <span style={{ display: 'none' }}>{account.get('acct')}</span>
 | 
			
		||||
          </a>
 | 
			
		||||
        }
 | 
			
		||||
        )}
 | 
			
		||||
      </Motion>
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
@ -103,7 +103,7 @@ export default class Header extends ImmutablePureComponent {
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (account.get('moved')) {
 | 
			
		||||
    if (account.get('moved') && !account.getIn(['relationship', 'following'])) {
 | 
			
		||||
      actionBtn = '';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -94,12 +94,12 @@ export default class AccountGallery extends ImmutablePureComponent {
 | 
			
		||||
            </div>
 | 
			
		||||
 | 
			
		||||
            <div className='account-gallery__container'>
 | 
			
		||||
              {medias.map(media =>
 | 
			
		||||
              {medias.map(media => (
 | 
			
		||||
                <MediaItem
 | 
			
		||||
                  key={media.get('id')}
 | 
			
		||||
                  media={media}
 | 
			
		||||
                />
 | 
			
		||||
              )}
 | 
			
		||||
              ))}
 | 
			
		||||
              {loadMore}
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
 | 
			
		||||
@ -34,7 +34,7 @@ export default class MovedNote extends ImmutablePureComponent {
 | 
			
		||||
      <div className='account__moved-note'>
 | 
			
		||||
        <div className='account__moved-note__message'>
 | 
			
		||||
          <div className='account__moved-note__icon-wrapper'><i className='fa fa-fw fa-suitcase account__moved-note__icon' /></div>
 | 
			
		||||
          <FormattedMessage id='account.moved_to' defaultMessage='{name} has moved to:' values={{ name: <strong dangerouslySetInnerHTML={displayNameHtml} /> }} />
 | 
			
		||||
          <FormattedMessage id='account.moved_to' defaultMessage='{name} has moved to:' values={{ name: <bdi><strong dangerouslySetInnerHTML={displayNameHtml} /></bdi> }} />
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
        <a href={to.get('url')} onClick={this.handleAccountClick} className='detailed-status__display-name'>
 | 
			
		||||
 | 
			
		||||
@ -72,7 +72,7 @@ class PrivacyDropdownMenu extends React.PureComponent {
 | 
			
		||||
      <Motion defaultStyle={{ opacity: 0, scaleX: 0.85, scaleY: 0.75 }} style={{ opacity: spring(1, { damping: 35, stiffness: 400 }), scaleX: spring(1, { damping: 35, stiffness: 400 }), scaleY: spring(1, { damping: 35, stiffness: 400 }) }}>
 | 
			
		||||
        {({ opacity, scaleX, scaleY }) => (
 | 
			
		||||
          <div className='privacy-dropdown__dropdown' style={{ ...style, opacity: opacity, transform: `scale(${scaleX}, ${scaleY})` }} ref={this.setRef}>
 | 
			
		||||
            {items.map(item =>
 | 
			
		||||
            {items.map(item => (
 | 
			
		||||
              <div role='button' tabIndex='0' key={item.value} data-index={item.value} onKeyDown={this.handleClick} onClick={this.handleClick} className={classNames('privacy-dropdown__option', { active: item.value === value })}>
 | 
			
		||||
                <div className='privacy-dropdown__option__icon'>
 | 
			
		||||
                  <i className={`fa fa-fw fa-${item.icon}`} />
 | 
			
		||||
@ -83,7 +83,7 @@ class PrivacyDropdownMenu extends React.PureComponent {
 | 
			
		||||
                  {item.meta}
 | 
			
		||||
                </div>
 | 
			
		||||
              </div>
 | 
			
		||||
            )}
 | 
			
		||||
            ))}
 | 
			
		||||
          </div>
 | 
			
		||||
        )}
 | 
			
		||||
      </Motion>
 | 
			
		||||
 | 
			
		||||
@ -40,11 +40,11 @@ export default class SearchResults extends ImmutablePureComponent {
 | 
			
		||||
      count += results.get('hashtags').size;
 | 
			
		||||
      hashtags = (
 | 
			
		||||
        <div className='search-results__section'>
 | 
			
		||||
          {results.get('hashtags').map(hashtag =>
 | 
			
		||||
          {results.get('hashtags').map(hashtag => (
 | 
			
		||||
            <Link key={hashtag} className='search-results__hashtag' to={`/timelines/tag/${hashtag}`}>
 | 
			
		||||
              #{hashtag}
 | 
			
		||||
            </Link>
 | 
			
		||||
          )}
 | 
			
		||||
          ))}
 | 
			
		||||
        </div>
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -98,11 +98,11 @@ export default class Compose extends React.PureComponent {
 | 
			
		||||
          </div>
 | 
			
		||||
 | 
			
		||||
          <Motion defaultStyle={{ x: -100 }} style={{ x: spring(showSearch ? 0 : -100, { stiffness: 210, damping: 20 }) }}>
 | 
			
		||||
            {({ x }) =>
 | 
			
		||||
            {({ x }) => (
 | 
			
		||||
              <div className='drawer__inner darker' style={{ transform: `translateX(${x}%)`, visibility: x === -100 ? 'hidden' : 'visible' }}>
 | 
			
		||||
                <SearchResultsContainer />
 | 
			
		||||
              </div>
 | 
			
		||||
            }
 | 
			
		||||
            )}
 | 
			
		||||
          </Motion>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
@ -40,98 +40,98 @@ export const urlRegex = (function() {
 | 
			
		||||
  regexen.validSubdomain = regexSupplant(/(?:(?:#{validDomainChars}(?:[_-]|#{validDomainChars})*)?#{validDomainChars}\.)/);
 | 
			
		||||
  regexen.validDomainName = regexSupplant(/(?:(?:#{validDomainChars}(?:-|#{validDomainChars})*)?#{validDomainChars}\.)/);
 | 
			
		||||
  regexen.validGTLD = regexSupplant(RegExp(
 | 
			
		||||
  '(?:(?:' +
 | 
			
		||||
    '삼성|닷컴|닷넷|香格里拉|餐厅|食品|飞利浦|電訊盈科|集团|通販|购物|谷歌|诺基亚|联通|网络|网站|网店|网址|组织机构|移动|珠宝|点看|游戏|淡马锡|机构|書籍|时尚|新闻|政府|' +
 | 
			
		||||
    '政务|手表|手机|我爱你|慈善|微博|广东|工行|家電|娱乐|天主教|大拿|大众汽车|在线|嘉里大酒店|嘉里|商标|商店|商城|公益|公司|八卦|健康|信息|佛山|企业|中文网|中信|世界|' +
 | 
			
		||||
    'ポイント|ファッション|セール|ストア|コム|グーグル|クラウド|みんな|คอม|संगठन|नेट|कॉम|همراه|موقع|موبايلي|كوم|كاثوليك|عرب|شبكة|' +
 | 
			
		||||
    'بيتك|بازار|العليان|ارامكو|اتصالات|ابوظبي|קום|сайт|рус|орг|онлайн|москва|ком|католик|дети|' +
 | 
			
		||||
    'zuerich|zone|zippo|zip|zero|zara|zappos|yun|youtube|you|yokohama|yoga|yodobashi|yandex|yamaxun|' +
 | 
			
		||||
    'yahoo|yachts|xyz|xxx|xperia|xin|xihuan|xfinity|xerox|xbox|wtf|wtc|wow|world|works|work|woodside|' +
 | 
			
		||||
    'wolterskluwer|wme|winners|wine|windows|win|williamhill|wiki|wien|whoswho|weir|weibo|wedding|wed|' +
 | 
			
		||||
    'website|weber|webcam|weatherchannel|weather|watches|watch|warman|wanggou|wang|walter|walmart|' +
 | 
			
		||||
    'wales|vuelos|voyage|voto|voting|vote|volvo|volkswagen|vodka|vlaanderen|vivo|viva|vistaprint|' +
 | 
			
		||||
    'vista|vision|visa|virgin|vip|vin|villas|viking|vig|video|viajes|vet|versicherung|' +
 | 
			
		||||
    'vermögensberatung|vermögensberater|verisign|ventures|vegas|vanguard|vana|vacations|ups|uol|uno|' +
 | 
			
		||||
    'university|unicom|uconnect|ubs|ubank|tvs|tushu|tunes|tui|tube|trv|trust|travelersinsurance|' +
 | 
			
		||||
    'travelers|travelchannel|travel|training|trading|trade|toys|toyota|town|tours|total|toshiba|' +
 | 
			
		||||
    'toray|top|tools|tokyo|today|tmall|tkmaxx|tjx|tjmaxx|tirol|tires|tips|tiffany|tienda|tickets|' +
 | 
			
		||||
    'tiaa|theatre|theater|thd|teva|tennis|temasek|telefonica|telecity|tel|technology|tech|team|tdk|' +
 | 
			
		||||
    'tci|taxi|tax|tattoo|tatar|tatamotors|target|taobao|talk|taipei|tab|systems|symantec|sydney|' +
 | 
			
		||||
    'swiss|swiftcover|swatch|suzuki|surgery|surf|support|supply|supplies|sucks|style|study|studio|' +
 | 
			
		||||
    'stream|store|storage|stockholm|stcgroup|stc|statoil|statefarm|statebank|starhub|star|staples|' +
 | 
			
		||||
    'stada|srt|srl|spreadbetting|spot|spiegel|space|soy|sony|song|solutions|solar|sohu|software|' +
 | 
			
		||||
    'softbank|social|soccer|sncf|smile|smart|sling|skype|sky|skin|ski|site|singles|sina|silk|shriram|' +
 | 
			
		||||
    'showtime|show|shouji|shopping|shop|shoes|shiksha|shia|shell|shaw|sharp|shangrila|sfr|sexy|sex|' +
 | 
			
		||||
    'sew|seven|ses|services|sener|select|seek|security|secure|seat|search|scot|scor|scjohnson|' +
 | 
			
		||||
    'science|schwarz|schule|school|scholarships|schmidt|schaeffler|scb|sca|sbs|sbi|saxo|save|sas|' +
 | 
			
		||||
    'sarl|sapo|sap|sanofi|sandvikcoromant|sandvik|samsung|samsclub|salon|sale|sakura|safety|safe|' +
 | 
			
		||||
    'saarland|ryukyu|rwe|run|ruhr|rugby|rsvp|room|rogers|rodeo|rocks|rocher|rmit|rip|rio|ril|' +
 | 
			
		||||
    'rightathome|ricoh|richardli|rich|rexroth|reviews|review|restaurant|rest|republican|report|' +
 | 
			
		||||
    'repair|rentals|rent|ren|reliance|reit|reisen|reise|rehab|redumbrella|redstone|red|recipes|' +
 | 
			
		||||
    'realty|realtor|realestate|read|raid|radio|racing|qvc|quest|quebec|qpon|pwc|pub|prudential|pru|' +
 | 
			
		||||
    'protection|property|properties|promo|progressive|prof|productions|prod|pro|prime|press|praxi|' +
 | 
			
		||||
    'pramerica|post|porn|politie|poker|pohl|pnc|plus|plumbing|playstation|play|place|pizza|pioneer|' +
 | 
			
		||||
    'pink|ping|pin|pid|pictures|pictet|pics|piaget|physio|photos|photography|photo|phone|philips|phd|' +
 | 
			
		||||
    'pharmacy|pfizer|pet|pccw|pay|passagens|party|parts|partners|pars|paris|panerai|panasonic|' +
 | 
			
		||||
    'pamperedchef|page|ovh|ott|otsuka|osaka|origins|orientexpress|organic|org|orange|oracle|open|ooo|' +
 | 
			
		||||
    'onyourside|online|onl|ong|one|omega|ollo|oldnavy|olayangroup|olayan|okinawa|office|off|observer|' +
 | 
			
		||||
    'obi|nyc|ntt|nrw|nra|nowtv|nowruz|now|norton|northwesternmutual|nokia|nissay|nissan|ninja|nikon|' +
 | 
			
		||||
    'nike|nico|nhk|ngo|nfl|nexus|nextdirect|next|news|newholland|new|neustar|network|netflix|netbank|' +
 | 
			
		||||
    'net|nec|nba|navy|natura|nationwide|name|nagoya|nadex|nab|mutuelle|mutual|museum|mtr|mtpc|mtn|' +
 | 
			
		||||
    'msd|movistar|movie|mov|motorcycles|moto|moscow|mortgage|mormon|mopar|montblanc|monster|money|' +
 | 
			
		||||
    'monash|mom|moi|moe|moda|mobily|mobile|mobi|mma|mls|mlb|mitsubishi|mit|mint|mini|mil|microsoft|' +
 | 
			
		||||
    'miami|metlife|merckmsd|meo|menu|men|memorial|meme|melbourne|meet|media|med|mckinsey|mcdonalds|' +
 | 
			
		||||
    'mcd|mba|mattel|maserati|marshalls|marriott|markets|marketing|market|map|mango|management|man|' +
 | 
			
		||||
    'makeup|maison|maif|madrid|macys|luxury|luxe|lupin|lundbeck|ltda|ltd|lplfinancial|lpl|love|lotto|' +
 | 
			
		||||
    'lotte|london|lol|loft|locus|locker|loans|loan|lixil|living|live|lipsy|link|linde|lincoln|limo|' +
 | 
			
		||||
    'limited|lilly|like|lighting|lifestyle|lifeinsurance|life|lidl|liaison|lgbt|lexus|lego|legal|' +
 | 
			
		||||
    'lefrak|leclerc|lease|lds|lawyer|law|latrobe|latino|lat|lasalle|lanxess|landrover|land|lancome|' +
 | 
			
		||||
    'lancia|lancaster|lamer|lamborghini|ladbrokes|lacaixa|kyoto|kuokgroup|kred|krd|kpn|kpmg|kosher|' +
 | 
			
		||||
    'komatsu|koeln|kiwi|kitchen|kindle|kinder|kim|kia|kfh|kerryproperties|kerrylogistics|kerryhotels|' +
 | 
			
		||||
    'kddi|kaufen|juniper|juegos|jprs|jpmorgan|joy|jot|joburg|jobs|jnj|jmp|jll|jlc|jio|jewelry|jetzt|' +
 | 
			
		||||
    'jeep|jcp|jcb|java|jaguar|iwc|iveco|itv|itau|istanbul|ist|ismaili|iselect|irish|ipiranga|' +
 | 
			
		||||
    'investments|intuit|international|intel|int|insure|insurance|institute|ink|ing|info|infiniti|' +
 | 
			
		||||
    'industries|immobilien|immo|imdb|imamat|ikano|iinet|ifm|ieee|icu|ice|icbc|ibm|hyundai|hyatt|' +
 | 
			
		||||
    'hughes|htc|hsbc|how|house|hotmail|hotels|hoteles|hot|hosting|host|hospital|horse|honeywell|' +
 | 
			
		||||
    'honda|homesense|homes|homegoods|homedepot|holiday|holdings|hockey|hkt|hiv|hitachi|hisamitsu|' +
 | 
			
		||||
    'hiphop|hgtv|hermes|here|helsinki|help|healthcare|health|hdfcbank|hdfc|hbo|haus|hangout|hamburg|' +
 | 
			
		||||
    'hair|guru|guitars|guide|guge|gucci|guardian|group|grocery|gripe|green|gratis|graphics|grainger|' +
 | 
			
		||||
    'gov|got|gop|google|goog|goodyear|goodhands|goo|golf|goldpoint|gold|godaddy|gmx|gmo|gmbh|gmail|' +
 | 
			
		||||
    'globo|global|gle|glass|glade|giving|gives|gifts|gift|ggee|george|genting|gent|gea|gdn|gbiz|' +
 | 
			
		||||
    'garden|gap|games|game|gallup|gallo|gallery|gal|fyi|futbol|furniture|fund|fun|fujixerox|fujitsu|' +
 | 
			
		||||
    'ftr|frontier|frontdoor|frogans|frl|fresenius|free|fox|foundation|forum|forsale|forex|ford|' +
 | 
			
		||||
    'football|foodnetwork|food|foo|fly|flsmidth|flowers|florist|flir|flights|flickr|fitness|fit|' +
 | 
			
		||||
    'fishing|fish|firmdale|firestone|fire|financial|finance|final|film|fido|fidelity|fiat|ferrero|' +
 | 
			
		||||
    'ferrari|feedback|fedex|fast|fashion|farmers|farm|fans|fan|family|faith|fairwinds|fail|fage|' +
 | 
			
		||||
    'extraspace|express|exposed|expert|exchange|everbank|events|eus|eurovision|etisalat|esurance|' +
 | 
			
		||||
    'estate|esq|erni|ericsson|equipment|epson|epost|enterprises|engineering|engineer|energy|emerck|' +
 | 
			
		||||
    'email|education|edu|edeka|eco|eat|earth|dvr|dvag|durban|dupont|duns|dunlop|duck|dubai|dtv|drive|' +
 | 
			
		||||
    'download|dot|doosan|domains|doha|dog|dodge|doctor|docs|dnp|diy|dish|discover|discount|directory|' +
 | 
			
		||||
    'direct|digital|diet|diamonds|dhl|dev|design|desi|dentist|dental|democrat|delta|deloitte|dell|' +
 | 
			
		||||
    'delivery|degree|deals|dealer|deal|dds|dclk|day|datsun|dating|date|data|dance|dad|dabur|cyou|' +
 | 
			
		||||
    'cymru|cuisinella|csc|cruises|cruise|crs|crown|cricket|creditunion|creditcard|credit|courses|' +
 | 
			
		||||
    'coupons|coupon|country|corsica|coop|cool|cookingchannel|cooking|contractors|contact|consulting|' +
 | 
			
		||||
    'construction|condos|comsec|computer|compare|company|community|commbank|comcast|com|cologne|' +
 | 
			
		||||
    'college|coffee|codes|coach|clubmed|club|cloud|clothing|clinique|clinic|click|cleaning|claims|' +
 | 
			
		||||
    'cityeats|city|citic|citi|citadel|cisco|circle|cipriani|church|chrysler|chrome|christmas|chloe|' +
 | 
			
		||||
    'chintai|cheap|chat|chase|channel|chanel|cfd|cfa|cern|ceo|center|ceb|cbs|cbre|cbn|cba|catholic|' +
 | 
			
		||||
    'catering|cat|casino|cash|caseih|case|casa|cartier|cars|careers|career|care|cards|caravan|car|' +
 | 
			
		||||
    'capitalone|capital|capetown|canon|cancerresearch|camp|camera|cam|calvinklein|call|cal|cafe|cab|' +
 | 
			
		||||
    'bzh|buzz|buy|business|builders|build|bugatti|budapest|brussels|brother|broker|broadway|' +
 | 
			
		||||
    'bridgestone|bradesco|box|boutique|bot|boston|bostik|bosch|boots|booking|book|boo|bond|bom|bofa|' +
 | 
			
		||||
    'boehringer|boats|bnpparibas|bnl|bmw|bms|blue|bloomberg|blog|blockbuster|blanco|blackfriday|' +
 | 
			
		||||
    'black|biz|bio|bingo|bing|bike|bid|bible|bharti|bet|bestbuy|best|berlin|bentley|beer|beauty|' +
 | 
			
		||||
    'beats|bcn|bcg|bbva|bbt|bbc|bayern|bauhaus|basketball|baseball|bargains|barefoot|barclays|' +
 | 
			
		||||
    'barclaycard|barcelona|bar|bank|band|bananarepublic|banamex|baidu|baby|azure|axa|aws|avianca|' +
 | 
			
		||||
    'autos|auto|author|auspost|audio|audible|audi|auction|attorney|athleta|associates|asia|asda|arte|' +
 | 
			
		||||
    'art|arpa|army|archi|aramco|arab|aquarelle|apple|app|apartments|aol|anz|anquan|android|analytics|' +
 | 
			
		||||
    'amsterdam|amica|amfam|amex|americanfamily|americanexpress|alstom|alsace|ally|allstate|allfinanz|' +
 | 
			
		||||
    'alipay|alibaba|alfaromeo|akdn|airtel|airforce|airbus|aigo|aig|agency|agakhan|africa|afl|' +
 | 
			
		||||
    'afamilycompany|aetna|aero|aeg|adult|ads|adac|actor|active|aco|accountants|accountant|accenture|' +
 | 
			
		||||
    'academy|abudhabi|abogado|able|abc|abbvie|abbott|abb|abarth|aarp|aaa|onion' +
 | 
			
		||||
  ')(?=[^0-9a-zA-Z@]|$))'));
 | 
			
		||||
    '(?:(?:' +
 | 
			
		||||
      '삼성|닷컴|닷넷|香格里拉|餐厅|食品|飞利浦|電訊盈科|集团|通販|购物|谷歌|诺基亚|联通|网络|网站|网店|网址|组织机构|移动|珠宝|点看|游戏|淡马锡|机构|書籍|时尚|新闻|政府|' +
 | 
			
		||||
      '政务|手表|手机|我爱你|慈善|微博|广东|工行|家電|娱乐|天主教|大拿|大众汽车|在线|嘉里大酒店|嘉里|商标|商店|商城|公益|公司|八卦|健康|信息|佛山|企业|中文网|中信|世界|' +
 | 
			
		||||
      'ポイント|ファッション|セール|ストア|コム|グーグル|クラウド|みんな|คอม|संगठन|नेट|कॉम|همراه|موقع|موبايلي|كوم|كاثوليك|عرب|شبكة|' +
 | 
			
		||||
      'بيتك|بازار|العليان|ارامكو|اتصالات|ابوظبي|קום|сайт|рус|орг|онлайн|москва|ком|католик|дети|' +
 | 
			
		||||
      'zuerich|zone|zippo|zip|zero|zara|zappos|yun|youtube|you|yokohama|yoga|yodobashi|yandex|yamaxun|' +
 | 
			
		||||
      'yahoo|yachts|xyz|xxx|xperia|xin|xihuan|xfinity|xerox|xbox|wtf|wtc|wow|world|works|work|woodside|' +
 | 
			
		||||
      'wolterskluwer|wme|winners|wine|windows|win|williamhill|wiki|wien|whoswho|weir|weibo|wedding|wed|' +
 | 
			
		||||
      'website|weber|webcam|weatherchannel|weather|watches|watch|warman|wanggou|wang|walter|walmart|' +
 | 
			
		||||
      'wales|vuelos|voyage|voto|voting|vote|volvo|volkswagen|vodka|vlaanderen|vivo|viva|vistaprint|' +
 | 
			
		||||
      'vista|vision|visa|virgin|vip|vin|villas|viking|vig|video|viajes|vet|versicherung|' +
 | 
			
		||||
      'vermögensberatung|vermögensberater|verisign|ventures|vegas|vanguard|vana|vacations|ups|uol|uno|' +
 | 
			
		||||
      'university|unicom|uconnect|ubs|ubank|tvs|tushu|tunes|tui|tube|trv|trust|travelersinsurance|' +
 | 
			
		||||
      'travelers|travelchannel|travel|training|trading|trade|toys|toyota|town|tours|total|toshiba|' +
 | 
			
		||||
      'toray|top|tools|tokyo|today|tmall|tkmaxx|tjx|tjmaxx|tirol|tires|tips|tiffany|tienda|tickets|' +
 | 
			
		||||
      'tiaa|theatre|theater|thd|teva|tennis|temasek|telefonica|telecity|tel|technology|tech|team|tdk|' +
 | 
			
		||||
      'tci|taxi|tax|tattoo|tatar|tatamotors|target|taobao|talk|taipei|tab|systems|symantec|sydney|' +
 | 
			
		||||
      'swiss|swiftcover|swatch|suzuki|surgery|surf|support|supply|supplies|sucks|style|study|studio|' +
 | 
			
		||||
      'stream|store|storage|stockholm|stcgroup|stc|statoil|statefarm|statebank|starhub|star|staples|' +
 | 
			
		||||
      'stada|srt|srl|spreadbetting|spot|spiegel|space|soy|sony|song|solutions|solar|sohu|software|' +
 | 
			
		||||
      'softbank|social|soccer|sncf|smile|smart|sling|skype|sky|skin|ski|site|singles|sina|silk|shriram|' +
 | 
			
		||||
      'showtime|show|shouji|shopping|shop|shoes|shiksha|shia|shell|shaw|sharp|shangrila|sfr|sexy|sex|' +
 | 
			
		||||
      'sew|seven|ses|services|sener|select|seek|security|secure|seat|search|scot|scor|scjohnson|' +
 | 
			
		||||
      'science|schwarz|schule|school|scholarships|schmidt|schaeffler|scb|sca|sbs|sbi|saxo|save|sas|' +
 | 
			
		||||
      'sarl|sapo|sap|sanofi|sandvikcoromant|sandvik|samsung|samsclub|salon|sale|sakura|safety|safe|' +
 | 
			
		||||
      'saarland|ryukyu|rwe|run|ruhr|rugby|rsvp|room|rogers|rodeo|rocks|rocher|rmit|rip|rio|ril|' +
 | 
			
		||||
      'rightathome|ricoh|richardli|rich|rexroth|reviews|review|restaurant|rest|republican|report|' +
 | 
			
		||||
      'repair|rentals|rent|ren|reliance|reit|reisen|reise|rehab|redumbrella|redstone|red|recipes|' +
 | 
			
		||||
      'realty|realtor|realestate|read|raid|radio|racing|qvc|quest|quebec|qpon|pwc|pub|prudential|pru|' +
 | 
			
		||||
      'protection|property|properties|promo|progressive|prof|productions|prod|pro|prime|press|praxi|' +
 | 
			
		||||
      'pramerica|post|porn|politie|poker|pohl|pnc|plus|plumbing|playstation|play|place|pizza|pioneer|' +
 | 
			
		||||
      'pink|ping|pin|pid|pictures|pictet|pics|piaget|physio|photos|photography|photo|phone|philips|phd|' +
 | 
			
		||||
      'pharmacy|pfizer|pet|pccw|pay|passagens|party|parts|partners|pars|paris|panerai|panasonic|' +
 | 
			
		||||
      'pamperedchef|page|ovh|ott|otsuka|osaka|origins|orientexpress|organic|org|orange|oracle|open|ooo|' +
 | 
			
		||||
      'onyourside|online|onl|ong|one|omega|ollo|oldnavy|olayangroup|olayan|okinawa|office|off|observer|' +
 | 
			
		||||
      'obi|nyc|ntt|nrw|nra|nowtv|nowruz|now|norton|northwesternmutual|nokia|nissay|nissan|ninja|nikon|' +
 | 
			
		||||
      'nike|nico|nhk|ngo|nfl|nexus|nextdirect|next|news|newholland|new|neustar|network|netflix|netbank|' +
 | 
			
		||||
      'net|nec|nba|navy|natura|nationwide|name|nagoya|nadex|nab|mutuelle|mutual|museum|mtr|mtpc|mtn|' +
 | 
			
		||||
      'msd|movistar|movie|mov|motorcycles|moto|moscow|mortgage|mormon|mopar|montblanc|monster|money|' +
 | 
			
		||||
      'monash|mom|moi|moe|moda|mobily|mobile|mobi|mma|mls|mlb|mitsubishi|mit|mint|mini|mil|microsoft|' +
 | 
			
		||||
      'miami|metlife|merckmsd|meo|menu|men|memorial|meme|melbourne|meet|media|med|mckinsey|mcdonalds|' +
 | 
			
		||||
      'mcd|mba|mattel|maserati|marshalls|marriott|markets|marketing|market|map|mango|management|man|' +
 | 
			
		||||
      'makeup|maison|maif|madrid|macys|luxury|luxe|lupin|lundbeck|ltda|ltd|lplfinancial|lpl|love|lotto|' +
 | 
			
		||||
      'lotte|london|lol|loft|locus|locker|loans|loan|lixil|living|live|lipsy|link|linde|lincoln|limo|' +
 | 
			
		||||
      'limited|lilly|like|lighting|lifestyle|lifeinsurance|life|lidl|liaison|lgbt|lexus|lego|legal|' +
 | 
			
		||||
      'lefrak|leclerc|lease|lds|lawyer|law|latrobe|latino|lat|lasalle|lanxess|landrover|land|lancome|' +
 | 
			
		||||
      'lancia|lancaster|lamer|lamborghini|ladbrokes|lacaixa|kyoto|kuokgroup|kred|krd|kpn|kpmg|kosher|' +
 | 
			
		||||
      'komatsu|koeln|kiwi|kitchen|kindle|kinder|kim|kia|kfh|kerryproperties|kerrylogistics|kerryhotels|' +
 | 
			
		||||
      'kddi|kaufen|juniper|juegos|jprs|jpmorgan|joy|jot|joburg|jobs|jnj|jmp|jll|jlc|jio|jewelry|jetzt|' +
 | 
			
		||||
      'jeep|jcp|jcb|java|jaguar|iwc|iveco|itv|itau|istanbul|ist|ismaili|iselect|irish|ipiranga|' +
 | 
			
		||||
      'investments|intuit|international|intel|int|insure|insurance|institute|ink|ing|info|infiniti|' +
 | 
			
		||||
      'industries|immobilien|immo|imdb|imamat|ikano|iinet|ifm|ieee|icu|ice|icbc|ibm|hyundai|hyatt|' +
 | 
			
		||||
      'hughes|htc|hsbc|how|house|hotmail|hotels|hoteles|hot|hosting|host|hospital|horse|honeywell|' +
 | 
			
		||||
      'honda|homesense|homes|homegoods|homedepot|holiday|holdings|hockey|hkt|hiv|hitachi|hisamitsu|' +
 | 
			
		||||
      'hiphop|hgtv|hermes|here|helsinki|help|healthcare|health|hdfcbank|hdfc|hbo|haus|hangout|hamburg|' +
 | 
			
		||||
      'hair|guru|guitars|guide|guge|gucci|guardian|group|grocery|gripe|green|gratis|graphics|grainger|' +
 | 
			
		||||
      'gov|got|gop|google|goog|goodyear|goodhands|goo|golf|goldpoint|gold|godaddy|gmx|gmo|gmbh|gmail|' +
 | 
			
		||||
      'globo|global|gle|glass|glade|giving|gives|gifts|gift|ggee|george|genting|gent|gea|gdn|gbiz|' +
 | 
			
		||||
      'garden|gap|games|game|gallup|gallo|gallery|gal|fyi|futbol|furniture|fund|fun|fujixerox|fujitsu|' +
 | 
			
		||||
      'ftr|frontier|frontdoor|frogans|frl|fresenius|free|fox|foundation|forum|forsale|forex|ford|' +
 | 
			
		||||
      'football|foodnetwork|food|foo|fly|flsmidth|flowers|florist|flir|flights|flickr|fitness|fit|' +
 | 
			
		||||
      'fishing|fish|firmdale|firestone|fire|financial|finance|final|film|fido|fidelity|fiat|ferrero|' +
 | 
			
		||||
      'ferrari|feedback|fedex|fast|fashion|farmers|farm|fans|fan|family|faith|fairwinds|fail|fage|' +
 | 
			
		||||
      'extraspace|express|exposed|expert|exchange|everbank|events|eus|eurovision|etisalat|esurance|' +
 | 
			
		||||
      'estate|esq|erni|ericsson|equipment|epson|epost|enterprises|engineering|engineer|energy|emerck|' +
 | 
			
		||||
      'email|education|edu|edeka|eco|eat|earth|dvr|dvag|durban|dupont|duns|dunlop|duck|dubai|dtv|drive|' +
 | 
			
		||||
      'download|dot|doosan|domains|doha|dog|dodge|doctor|docs|dnp|diy|dish|discover|discount|directory|' +
 | 
			
		||||
      'direct|digital|diet|diamonds|dhl|dev|design|desi|dentist|dental|democrat|delta|deloitte|dell|' +
 | 
			
		||||
      'delivery|degree|deals|dealer|deal|dds|dclk|day|datsun|dating|date|data|dance|dad|dabur|cyou|' +
 | 
			
		||||
      'cymru|cuisinella|csc|cruises|cruise|crs|crown|cricket|creditunion|creditcard|credit|courses|' +
 | 
			
		||||
      'coupons|coupon|country|corsica|coop|cool|cookingchannel|cooking|contractors|contact|consulting|' +
 | 
			
		||||
      'construction|condos|comsec|computer|compare|company|community|commbank|comcast|com|cologne|' +
 | 
			
		||||
      'college|coffee|codes|coach|clubmed|club|cloud|clothing|clinique|clinic|click|cleaning|claims|' +
 | 
			
		||||
      'cityeats|city|citic|citi|citadel|cisco|circle|cipriani|church|chrysler|chrome|christmas|chloe|' +
 | 
			
		||||
      'chintai|cheap|chat|chase|channel|chanel|cfd|cfa|cern|ceo|center|ceb|cbs|cbre|cbn|cba|catholic|' +
 | 
			
		||||
      'catering|cat|casino|cash|caseih|case|casa|cartier|cars|careers|career|care|cards|caravan|car|' +
 | 
			
		||||
      'capitalone|capital|capetown|canon|cancerresearch|camp|camera|cam|calvinklein|call|cal|cafe|cab|' +
 | 
			
		||||
      'bzh|buzz|buy|business|builders|build|bugatti|budapest|brussels|brother|broker|broadway|' +
 | 
			
		||||
      'bridgestone|bradesco|box|boutique|bot|boston|bostik|bosch|boots|booking|book|boo|bond|bom|bofa|' +
 | 
			
		||||
      'boehringer|boats|bnpparibas|bnl|bmw|bms|blue|bloomberg|blog|blockbuster|blanco|blackfriday|' +
 | 
			
		||||
      'black|biz|bio|bingo|bing|bike|bid|bible|bharti|bet|bestbuy|best|berlin|bentley|beer|beauty|' +
 | 
			
		||||
      'beats|bcn|bcg|bbva|bbt|bbc|bayern|bauhaus|basketball|baseball|bargains|barefoot|barclays|' +
 | 
			
		||||
      'barclaycard|barcelona|bar|bank|band|bananarepublic|banamex|baidu|baby|azure|axa|aws|avianca|' +
 | 
			
		||||
      'autos|auto|author|auspost|audio|audible|audi|auction|attorney|athleta|associates|asia|asda|arte|' +
 | 
			
		||||
      'art|arpa|army|archi|aramco|arab|aquarelle|apple|app|apartments|aol|anz|anquan|android|analytics|' +
 | 
			
		||||
      'amsterdam|amica|amfam|amex|americanfamily|americanexpress|alstom|alsace|ally|allstate|allfinanz|' +
 | 
			
		||||
      'alipay|alibaba|alfaromeo|akdn|airtel|airforce|airbus|aigo|aig|agency|agakhan|africa|afl|' +
 | 
			
		||||
      'afamilycompany|aetna|aero|aeg|adult|ads|adac|actor|active|aco|accountants|accountant|accenture|' +
 | 
			
		||||
      'academy|abudhabi|abogado|able|abc|abbvie|abbott|abb|abarth|aarp|aaa|onion' +
 | 
			
		||||
    ')(?=[^0-9a-zA-Z@]|$))'));
 | 
			
		||||
  regexen.validCCTLD = regexSupplant(RegExp(
 | 
			
		||||
  '(?:(?:' +
 | 
			
		||||
    '(?:(?:' +
 | 
			
		||||
      '한국|香港|澳門|新加坡|台灣|台湾|中國|中国|გე|ไทย|ලංකා|ഭാരതം|ಭಾರತ|భారత్|சிங்கப்பூர்|இலங்கை|இந்தியா|ଭାରତ|ભારત|ਭਾਰਤ|' +
 | 
			
		||||
      'ভাৰত|ভারত|বাংলা|भारोत|भारतम्|भारत|ڀارت|پاکستان|مليسيا|مصر|قطر|فلسطين|عمان|عراق|سورية|سودان|تونس|' +
 | 
			
		||||
      'بھارت|بارت|ایران|امارات|المغرب|السعودية|الجزائر|الاردن|հայ|қаз|укр|срб|рф|мон|мкд|ею|бел|бг|ελ|' +
 | 
			
		||||
@ -143,7 +143,7 @@ export const urlRegex = (function() {
 | 
			
		||||
      'gu|gt|gs|gr|gq|gp|gn|gm|gl|gi|gh|gg|gf|ge|gd|gb|ga|fr|fo|fm|fk|fj|fi|eu|et|es|er|eh|eg|ee|ec|dz|' +
 | 
			
		||||
      'do|dm|dk|dj|de|cz|cy|cx|cw|cv|cu|cr|co|cn|cm|cl|ck|ci|ch|cg|cf|cd|cc|ca|bz|by|bw|bv|bt|bs|br|bq|' +
 | 
			
		||||
      'bo|bn|bm|bl|bj|bi|bh|bg|bf|be|bd|bb|ba|az|ax|aw|au|at|as|ar|aq|ao|an|am|al|ai|ag|af|ae|ad|ac' +
 | 
			
		||||
  ')(?=[^0-9a-zA-Z@]|$))'));
 | 
			
		||||
    ')(?=[^0-9a-zA-Z@]|$))'));
 | 
			
		||||
  regexen.validPunycode = /(?:xn--[0-9a-z]+)/;
 | 
			
		||||
  regexen.validSpecialCCTLD = /(?:(?:co|tv)(?=[^0-9a-zA-Z@]|$))/;
 | 
			
		||||
  regexen.validDomain = regexSupplant(/(?:#{validSubdomain}*#{validDomainName}(?:#{validGTLD}|#{validCCTLD}|#{validPunycode}))/);
 | 
			
		||||
@ -168,8 +168,8 @@ export const urlRegex = (function() {
 | 
			
		||||
          '#{validGeneralUrlPathChars}*'    +
 | 
			
		||||
        ')'                                 +
 | 
			
		||||
      ')'                                   +
 | 
			
		||||
    '\\)'
 | 
			
		||||
  , 'i');
 | 
			
		||||
    '\\)',
 | 
			
		||||
    'i');
 | 
			
		||||
  // Valid end-of-path chracters (so /foo. does not gobble the period).
 | 
			
		||||
  // 1. Allow =&# for empty URL parameters and other URL-join artifacts
 | 
			
		||||
  regexen.validUrlPathEndingChars = regexSupplant(/[^#{spaces_group}\(\)\?!\*';:=\,\.\$%\[\]#{pd}~&\|@]|(?:#{validUrlBalancedParens})/i);
 | 
			
		||||
@ -190,7 +190,7 @@ export const urlRegex = (function() {
 | 
			
		||||
      '(?::(#{validPortNumber}))?'                               + // $4 Port number (optional)
 | 
			
		||||
      '(\\/#{validUrlPath}*)?'                                   + // $5 URL Path
 | 
			
		||||
      '(\\?#{validUrlQueryChars}*#{validUrlQueryEndingChars})?'  + // $6 Query String
 | 
			
		||||
    ')'
 | 
			
		||||
  , 'gi');
 | 
			
		||||
    ')',
 | 
			
		||||
    'gi');
 | 
			
		||||
  return regexen.validUrl;
 | 
			
		||||
}());
 | 
			
		||||
 | 
			
		||||
@ -24,10 +24,10 @@ describe('emoji', () => {
 | 
			
		||||
      expect(emojify('\uD83D\uDC69\u200D\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66')).toEqual(
 | 
			
		||||
        '<img draggable="false" class="emojione" alt="👩👩👦👦" title=":woman-woman-boy-boy:" src="/emoji/1f469-200d-1f469-200d-1f466-200d-1f466.svg" />');
 | 
			
		||||
      expect(emojify('👨👩👧👧')).toEqual(
 | 
			
		||||
      '<img draggable="false" class="emojione" alt="👨👩👧👧" title=":man-woman-girl-girl:" src="/emoji/1f468-200d-1f469-200d-1f467-200d-1f467.svg" />');
 | 
			
		||||
        '<img draggable="false" class="emojione" alt="👨👩👧👧" title=":man-woman-girl-girl:" src="/emoji/1f468-200d-1f469-200d-1f467-200d-1f467.svg" />');
 | 
			
		||||
      expect(emojify('👩👩👦')).toEqual('<img draggable="false" class="emojione" alt="👩👩👦" title=":woman-woman-boy:" src="/emoji/1f469-200d-1f469-200d-1f466.svg" />');
 | 
			
		||||
      expect(emojify('\u2757')).toEqual(
 | 
			
		||||
      '<img draggable="false" class="emojione" alt="❗" title=":exclamation:" src="/emoji/2757.svg" />');
 | 
			
		||||
        '<img draggable="false" class="emojione" alt="❗" title=":exclamation:" src="/emoji/2757.svg" />');
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('does multiple unicode', () => {
 | 
			
		||||
 | 
			
		||||
@ -8,6 +8,8 @@ import PropTypes from 'prop-types';
 | 
			
		||||
import ImmutablePropTypes from 'react-immutable-proptypes';
 | 
			
		||||
import ImmutablePureComponent from 'react-immutable-pure-component';
 | 
			
		||||
import { me } from '../../initial_state';
 | 
			
		||||
import { fetchFollowRequests } from '../../actions/accounts';
 | 
			
		||||
import { List as ImmutableList } from 'immutable';
 | 
			
		||||
 | 
			
		||||
const messages = defineMessages({
 | 
			
		||||
  heading: { id: 'getting_started.heading', defaultMessage: 'Getting started' },
 | 
			
		||||
@ -32,9 +34,25 @@ const messages = defineMessages({
 | 
			
		||||
const mapStateToProps = state => ({
 | 
			
		||||
  myAccount: state.getIn(['accounts', me]),
 | 
			
		||||
  columns: state.getIn(['settings', 'columns']),
 | 
			
		||||
  unreadFollowRequests: state.getIn(['user_lists', 'follow_requests', 'items'], ImmutableList()).size,
 | 
			
		||||
  unreadNotifications: state.getIn(['notifications', 'unread']),
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
@connect(mapStateToProps)
 | 
			
		||||
const mapDispatchToProps = dispatch => ({
 | 
			
		||||
  fetchFollowRequests: () => dispatch(fetchFollowRequests()),
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
const badgeDisplay = (number, limit) => {
 | 
			
		||||
  if (number === 0) {
 | 
			
		||||
    return undefined;
 | 
			
		||||
  } else if (limit && number >= limit) {
 | 
			
		||||
    return `${limit}+`;
 | 
			
		||||
  } else {
 | 
			
		||||
    return number;
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@connect(mapStateToProps, mapDispatchToProps)
 | 
			
		||||
@injectIntl
 | 
			
		||||
export default class GettingStarted extends ImmutablePureComponent {
 | 
			
		||||
 | 
			
		||||
@ -43,10 +61,21 @@ export default class GettingStarted extends ImmutablePureComponent {
 | 
			
		||||
    myAccount: ImmutablePropTypes.map.isRequired,
 | 
			
		||||
    columns: ImmutablePropTypes.list,
 | 
			
		||||
    multiColumn: PropTypes.bool,
 | 
			
		||||
    fetchFollowRequests: PropTypes.func.isRequired,
 | 
			
		||||
    unreadFollowRequests: PropTypes.number,
 | 
			
		||||
    unreadNotifications: PropTypes.number,
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  componentDidMount () {
 | 
			
		||||
    const { myAccount, fetchFollowRequests } = this.props;
 | 
			
		||||
 | 
			
		||||
    if (myAccount.get('locked')) {
 | 
			
		||||
      fetchFollowRequests();
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  render () {
 | 
			
		||||
    const { intl, myAccount, columns, multiColumn } = this.props;
 | 
			
		||||
    const { intl, myAccount, columns, multiColumn, unreadFollowRequests, unreadNotifications } = this.props;
 | 
			
		||||
 | 
			
		||||
    const navItems = [];
 | 
			
		||||
 | 
			
		||||
@ -56,7 +85,7 @@ export default class GettingStarted extends ImmutablePureComponent {
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (!columns.find(item => item.get('id') === 'NOTIFICATIONS')) {
 | 
			
		||||
        navItems.push(<ColumnLink key='1' icon='bell' text={intl.formatMessage(messages.notifications)} to='/notifications' />);
 | 
			
		||||
        navItems.push(<ColumnLink key='1' icon='bell' text={intl.formatMessage(messages.notifications)} badge={badgeDisplay(unreadNotifications)} to='/notifications' />);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (!columns.find(item => item.get('id') === 'COMMUNITY')) {
 | 
			
		||||
@ -74,7 +103,7 @@ export default class GettingStarted extends ImmutablePureComponent {
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    if (myAccount.get('locked')) {
 | 
			
		||||
      navItems.push(<ColumnLink key='6' icon='users' text={intl.formatMessage(messages.follow_requests)} to='/follow_requests' />);
 | 
			
		||||
      navItems.push(<ColumnLink key='6' icon='users' text={intl.formatMessage(messages.follow_requests)} badge={badgeDisplay(unreadFollowRequests, 40)} to='/follow_requests' />);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (multiColumn) {
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
import React from 'react';
 | 
			
		||||
import { connect } from 'react-redux';
 | 
			
		||||
import { expandHomeTimeline } from '../../actions/timelines';
 | 
			
		||||
import { expandHomeTimeline, refreshHomeTimeline } from '../../actions/timelines';
 | 
			
		||||
import PropTypes from 'prop-types';
 | 
			
		||||
import StatusListContainer from '../ui/containers/status_list_container';
 | 
			
		||||
import Column from '../../components/column';
 | 
			
		||||
@ -16,6 +16,7 @@ const messages = defineMessages({
 | 
			
		||||
 | 
			
		||||
const mapStateToProps = state => ({
 | 
			
		||||
  hasUnread: state.getIn(['timelines', 'home', 'unread']) > 0,
 | 
			
		||||
  isPartial: state.getIn(['timelines', 'home', 'isPartial'], false),
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
@connect(mapStateToProps)
 | 
			
		||||
@ -26,6 +27,7 @@ export default class HomeTimeline extends React.PureComponent {
 | 
			
		||||
    dispatch: PropTypes.func.isRequired,
 | 
			
		||||
    intl: PropTypes.object.isRequired,
 | 
			
		||||
    hasUnread: PropTypes.bool,
 | 
			
		||||
    isPartial: PropTypes.bool,
 | 
			
		||||
    columnId: PropTypes.string,
 | 
			
		||||
    multiColumn: PropTypes.bool,
 | 
			
		||||
  };
 | 
			
		||||
@ -57,6 +59,39 @@ export default class HomeTimeline extends React.PureComponent {
 | 
			
		||||
    this.props.dispatch(expandHomeTimeline());
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  componentDidMount () {
 | 
			
		||||
    this._checkIfReloadNeeded(false, this.props.isPartial);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  componentDidUpdate (prevProps) {
 | 
			
		||||
    this._checkIfReloadNeeded(prevProps.isPartial, this.props.isPartial);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  componentWillUnmount () {
 | 
			
		||||
    this._stopPolling();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  _checkIfReloadNeeded (wasPartial, isPartial) {
 | 
			
		||||
    const { dispatch } = this.props;
 | 
			
		||||
 | 
			
		||||
    if (wasPartial === isPartial) {
 | 
			
		||||
      return;
 | 
			
		||||
    } else if (!wasPartial && isPartial) {
 | 
			
		||||
      this.polling = setInterval(() => {
 | 
			
		||||
        dispatch(refreshHomeTimeline());
 | 
			
		||||
      }, 3000);
 | 
			
		||||
    } else if (wasPartial && !isPartial) {
 | 
			
		||||
      this._stopPolling();
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  _stopPolling () {
 | 
			
		||||
    if (this.polling) {
 | 
			
		||||
      clearInterval(this.polling);
 | 
			
		||||
      this.polling = null;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  render () {
 | 
			
		||||
    const { intl, hasUnread, columnId, multiColumn } = this.props;
 | 
			
		||||
    const pinned = !!columnId;
 | 
			
		||||
 | 
			
		||||
@ -66,11 +66,11 @@ export default class ListEditor extends ImmutablePureComponent {
 | 
			
		||||
          {showSearch && <div role='button' tabIndex='-1' className='drawer__backdrop' onClick={onClear} />}
 | 
			
		||||
 | 
			
		||||
          <Motion defaultStyle={{ x: -100 }} style={{ x: spring(showSearch ? 0 : -100, { stiffness: 210, damping: 20 }) }}>
 | 
			
		||||
            {({ x }) =>
 | 
			
		||||
            {({ x }) => (
 | 
			
		||||
              <div className='drawer__inner backdrop' style={{ transform: x === 0 ? null : `translateX(${x}%)`, visibility: x === -100 ? 'hidden' : 'visible' }}>
 | 
			
		||||
                {searchAccountIds.map(accountId => <Account key={accountId} accountId={accountId} />)}
 | 
			
		||||
              </div>
 | 
			
		||||
            }
 | 
			
		||||
            )}
 | 
			
		||||
          </Motion>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
@ -120,13 +120,17 @@ export default class ListTimeline extends React.PureComponent {
 | 
			
		||||
    if (typeof list === 'undefined') {
 | 
			
		||||
      return (
 | 
			
		||||
        <Column>
 | 
			
		||||
          <LoadingIndicator />
 | 
			
		||||
          <div className='scrollable'>
 | 
			
		||||
            <LoadingIndicator />
 | 
			
		||||
          </div>
 | 
			
		||||
        </Column>
 | 
			
		||||
      );
 | 
			
		||||
    } else if (list === false) {
 | 
			
		||||
      return (
 | 
			
		||||
        <Column>
 | 
			
		||||
          <MissingIndicator />
 | 
			
		||||
          <div className='scrollable'>
 | 
			
		||||
            <MissingIndicator />
 | 
			
		||||
          </div>
 | 
			
		||||
        </Column>
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -133,7 +133,7 @@ export default class Notification extends ImmutablePureComponent {
 | 
			
		||||
    const { notification } = this.props;
 | 
			
		||||
    const account          = notification.get('account');
 | 
			
		||||
    const displayNameHtml  = { __html: account.get('display_name_html') };
 | 
			
		||||
    const link             = <Permalink className='notification__display-name' href={account.get('url')} title={account.get('acct')} to={`/accounts/${account.get('id')}`} dangerouslySetInnerHTML={displayNameHtml} />;
 | 
			
		||||
    const link             = <bdi><Permalink className='notification__display-name' href={account.get('url')} title={account.get('acct')} to={`/accounts/${account.get('id')}`} dangerouslySetInnerHTML={displayNameHtml} /></bdi>;
 | 
			
		||||
 | 
			
		||||
    switch(notification.get('type')) {
 | 
			
		||||
    case 'follow':
 | 
			
		||||
 | 
			
		||||
@ -21,13 +21,13 @@ describe('<Column />', () => {
 | 
			
		||||
          <div className='scrollable' />
 | 
			
		||||
        </Column>
 | 
			
		||||
      );
 | 
			
		||||
      wrapper.find(ColumnHeader).simulate('click');
 | 
			
		||||
      wrapper.find(ColumnHeader).find('button').simulate('click');
 | 
			
		||||
      expect(global.requestAnimationFrame.mock.calls.length).toEqual(1);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('does not try to scroll if there is no scrollable content', () => {
 | 
			
		||||
      const wrapper = mount(<Column heading='notifications' />);
 | 
			
		||||
      wrapper.find(ColumnHeader).simulate('click');
 | 
			
		||||
      wrapper.find(ColumnHeader).find('button').simulate('click');
 | 
			
		||||
      expect(global.requestAnimationFrame.mock.calls.length).toEqual(0);
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,6 @@
 | 
			
		||||
import React from 'react';
 | 
			
		||||
import PropTypes from 'prop-types';
 | 
			
		||||
import classNames from 'classnames';
 | 
			
		||||
 | 
			
		||||
export default class ColumnHeader extends React.PureComponent {
 | 
			
		||||
 | 
			
		||||
@ -16,19 +17,20 @@ export default class ColumnHeader extends React.PureComponent {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  render () {
 | 
			
		||||
    const { type, active, columnHeaderId } = this.props;
 | 
			
		||||
    const { icon, type, active, columnHeaderId } = this.props;
 | 
			
		||||
    let iconElement = '';
 | 
			
		||||
 | 
			
		||||
    let icon = '';
 | 
			
		||||
 | 
			
		||||
    if (this.props.icon) {
 | 
			
		||||
      icon = <i className={`fa fa-fw fa-${this.props.icon} column-header__icon`} />;
 | 
			
		||||
    if (icon) {
 | 
			
		||||
      iconElement = <i className={`fa fa-fw fa-${icon} column-header__icon`} />;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return (
 | 
			
		||||
      <div role='heading' tabIndex='0' className={`column-header ${active ? 'active' : ''}`} onClick={this.handleClick} id={columnHeaderId || null}>
 | 
			
		||||
        {icon}
 | 
			
		||||
        {type}
 | 
			
		||||
      </div>
 | 
			
		||||
      <h1 className={classNames('column-header', { active })} id={columnHeaderId || null}>
 | 
			
		||||
        <button onClick={this.handleClick}>
 | 
			
		||||
          {iconElement}
 | 
			
		||||
          {type}
 | 
			
		||||
        </button>
 | 
			
		||||
      </h1>
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -2,12 +2,15 @@ import React from 'react';
 | 
			
		||||
import PropTypes from 'prop-types';
 | 
			
		||||
import { Link } from 'react-router-dom';
 | 
			
		||||
 | 
			
		||||
const ColumnLink = ({ icon, text, to, href, method }) => {
 | 
			
		||||
const ColumnLink = ({ icon, text, to, href, method, badge }) => {
 | 
			
		||||
  const badgeElement = typeof badge !== 'undefined' ? <span className='column-link__badge'>{badge}</span> : null;
 | 
			
		||||
 | 
			
		||||
  if (href) {
 | 
			
		||||
    return (
 | 
			
		||||
      <a href={href} className='column-link' data-method={method}>
 | 
			
		||||
        <i className={`fa fa-fw fa-${icon} column-link__icon`} />
 | 
			
		||||
        {text}
 | 
			
		||||
        {badgeElement}
 | 
			
		||||
      </a>
 | 
			
		||||
    );
 | 
			
		||||
  } else {
 | 
			
		||||
@ -15,6 +18,7 @@ const ColumnLink = ({ icon, text, to, href, method }) => {
 | 
			
		||||
      <Link to={to} className='column-link'>
 | 
			
		||||
        <i className={`fa fa-fw fa-${icon} column-link__icon`} />
 | 
			
		||||
        {text}
 | 
			
		||||
        {badgeElement}
 | 
			
		||||
      </Link>
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
@ -26,6 +30,7 @@ ColumnLink.propTypes = {
 | 
			
		||||
  to: PropTypes.string,
 | 
			
		||||
  href: PropTypes.string,
 | 
			
		||||
  method: PropTypes.string,
 | 
			
		||||
  badge: PropTypes.node,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export default ColumnLink;
 | 
			
		||||
 | 
			
		||||
@ -37,6 +37,7 @@ export default class ColumnsArea extends ImmutablePureComponent {
 | 
			
		||||
  static propTypes = {
 | 
			
		||||
    intl: PropTypes.object.isRequired,
 | 
			
		||||
    columns: ImmutablePropTypes.list.isRequired,
 | 
			
		||||
    isModalOpen: PropTypes.bool.isRequired,
 | 
			
		||||
    singleColumn: PropTypes.bool,
 | 
			
		||||
    children: PropTypes.node,
 | 
			
		||||
  };
 | 
			
		||||
@ -144,7 +145,7 @@ export default class ColumnsArea extends ImmutablePureComponent {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  render () {
 | 
			
		||||
    const { columns, children, singleColumn } = this.props;
 | 
			
		||||
    const { columns, children, singleColumn, isModalOpen } = this.props;
 | 
			
		||||
    const { shouldAnimate } = this.state;
 | 
			
		||||
 | 
			
		||||
    const columnIndex = getIndex(this.context.router.history.location.pathname);
 | 
			
		||||
@ -159,7 +160,7 @@ export default class ColumnsArea extends ImmutablePureComponent {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return (
 | 
			
		||||
      <div className='columns-area' ref={this.setRef}>
 | 
			
		||||
      <div className={`columns-area ${ isModalOpen ? 'unscrollable' : '' }`} ref={this.setRef}>
 | 
			
		||||
        {columns.map(column => {
 | 
			
		||||
          const params = column.get('params', null) === null ? null : column.get('params').toJS();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -113,13 +113,11 @@ export default class ModalRoot extends React.PureComponent {
 | 
			
		||||
        <div style={{ pointerEvents: visible ? 'auto' : 'none' }}>
 | 
			
		||||
          <div role='presentation' className='modal-root__overlay' onClick={onClose} />
 | 
			
		||||
          <div role='dialog' className='modal-root__container'>
 | 
			
		||||
            {
 | 
			
		||||
              visible ?
 | 
			
		||||
                (<BundleContainer fetchComponent={MODAL_COMPONENTS[type]} loading={this.renderLoading(type)} error={this.renderError} renderDelay={200}>
 | 
			
		||||
                  {(SpecificComponent) => <SpecificComponent {...props} onClose={onClose} />}
 | 
			
		||||
                </BundleContainer>) :
 | 
			
		||||
              null
 | 
			
		||||
            }
 | 
			
		||||
            {visible && (
 | 
			
		||||
              <BundleContainer fetchComponent={MODAL_COMPONENTS[type]} loading={this.renderLoading(type)} error={this.renderError} renderDelay={200}>
 | 
			
		||||
                {(SpecificComponent) => <SpecificComponent {...props} onClose={onClose} />}
 | 
			
		||||
              </BundleContainer>
 | 
			
		||||
            )}
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
@ -24,14 +24,23 @@ const messages = defineMessages({
 | 
			
		||||
 | 
			
		||||
const PageOne = ({ acct, domain }) => (
 | 
			
		||||
  <div className='onboarding-modal__page onboarding-modal__page-one'>
 | 
			
		||||
    <div style={{ flex: '0 0 auto' }}>
 | 
			
		||||
      <div className='onboarding-modal__page-one__elephant-friend' />
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <div>
 | 
			
		||||
    <div className='onboarding-modal__page-one__lead'>
 | 
			
		||||
      <h1><FormattedMessage id='onboarding.page_one.welcome' defaultMessage='Welcome to Mastodon!' /></h1>
 | 
			
		||||
      <p><FormattedMessage id='onboarding.page_one.federation' defaultMessage='Mastodon is a network of independent servers joining up to make one larger social network. We call these servers instances.' /></p>
 | 
			
		||||
      <p><FormattedMessage id='onboarding.page_one.handle' defaultMessage='You are on {domain}, so your full handle is {handle}' values={{ domain, handle: <strong>@{acct}@{domain}</strong> }} /></p>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <div className='onboarding-modal__page-one__extra'>
 | 
			
		||||
      <div className='display-case'>
 | 
			
		||||
        <div className='display-case__label'>
 | 
			
		||||
          <FormattedMessage id='onboarding.page_one.full_handle' defaultMessage='Your full handle' />
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
        <div className='display-case__case'>
 | 
			
		||||
          @{acct}@{domain}
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
      <p><FormattedMessage id='onboarding.page_one.handle_hint' defaultMessage='This is what you would tell your friends to search for.' /></p>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
);
 | 
			
		||||
@ -46,22 +55,23 @@ const PageTwo = ({ myAccount }) => (
 | 
			
		||||
    <div className='figure non-interactive'>
 | 
			
		||||
      <div className='pseudo-drawer'>
 | 
			
		||||
        <NavigationBar account={myAccount} />
 | 
			
		||||
 | 
			
		||||
        <ComposeForm
 | 
			
		||||
          text='Awoo! #introductions'
 | 
			
		||||
          suggestions={ImmutableList()}
 | 
			
		||||
          mentionedDomains={[]}
 | 
			
		||||
          spoiler={false}
 | 
			
		||||
          onChange={noop}
 | 
			
		||||
          onSubmit={noop}
 | 
			
		||||
          onPaste={noop}
 | 
			
		||||
          onPickEmoji={noop}
 | 
			
		||||
          onChangeSpoilerText={noop}
 | 
			
		||||
          onClearSuggestions={noop}
 | 
			
		||||
          onFetchSuggestions={noop}
 | 
			
		||||
          onSuggestionSelected={noop}
 | 
			
		||||
          showSearch
 | 
			
		||||
        />
 | 
			
		||||
      </div>
 | 
			
		||||
      <ComposeForm
 | 
			
		||||
        text='Awoo! #introductions'
 | 
			
		||||
        suggestions={ImmutableList()}
 | 
			
		||||
        mentionedDomains={[]}
 | 
			
		||||
        spoiler={false}
 | 
			
		||||
        onChange={noop}
 | 
			
		||||
        onSubmit={noop}
 | 
			
		||||
        onPaste={noop}
 | 
			
		||||
        onPickEmoji={noop}
 | 
			
		||||
        onChangeSpoilerText={noop}
 | 
			
		||||
        onClearSuggestions={noop}
 | 
			
		||||
        onFetchSuggestions={noop}
 | 
			
		||||
        onSuggestionSelected={noop}
 | 
			
		||||
        showSearch
 | 
			
		||||
      />
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <p><FormattedMessage id='onboarding.page_two.compose' defaultMessage='Write posts from the compose column. You can upload images, change privacy settings, and add content warnings with the icons below.' /></p>
 | 
			
		||||
@ -251,18 +261,12 @@ export default class OnboardingModal extends React.PureComponent {
 | 
			
		||||
    const hasMore = currentIndex < pages.length - 1;
 | 
			
		||||
 | 
			
		||||
    const nextOrDoneBtn = hasMore ? (
 | 
			
		||||
      <button
 | 
			
		||||
        onClick={this.handleNext}
 | 
			
		||||
        className='onboarding-modal__nav onboarding-modal__next'
 | 
			
		||||
      >
 | 
			
		||||
        <FormattedMessage id='onboarding.next' defaultMessage='Next' />
 | 
			
		||||
      <button onClick={this.handleNext} className='onboarding-modal__nav onboarding-modal__next shake-bottom'>
 | 
			
		||||
        <FormattedMessage id='onboarding.next' defaultMessage='Next' /> <i className='fa fa-fw fa-chevron-right' />
 | 
			
		||||
      </button>
 | 
			
		||||
    ) : (
 | 
			
		||||
      <button
 | 
			
		||||
        onClick={this.handleClose}
 | 
			
		||||
        className='onboarding-modal__nav onboarding-modal__done'
 | 
			
		||||
      >
 | 
			
		||||
        <FormattedMessage id='onboarding.done' defaultMessage='Done' />
 | 
			
		||||
      <button onClick={this.handleClose} className='onboarding-modal__nav onboarding-modal__done shake-bottom'>
 | 
			
		||||
        <FormattedMessage id='onboarding.done' defaultMessage='Done' /> <i className='fa fa-fw fa-check' />
 | 
			
		||||
      </button>
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
@ -270,9 +274,10 @@ export default class OnboardingModal extends React.PureComponent {
 | 
			
		||||
      <div className='modal-root__modal onboarding-modal'>
 | 
			
		||||
        <ReactSwipeableViews index={currentIndex} onChangeIndex={this.handleSwipe} className='onboarding-modal__pager'>
 | 
			
		||||
          {pages.map((page, i) => {
 | 
			
		||||
            const className = classNames('onboarding-modal__page__wrapper', {
 | 
			
		||||
            const className = classNames('onboarding-modal__page__wrapper', `onboarding-modal__page__wrapper-${i}`, {
 | 
			
		||||
              'onboarding-modal__page__wrapper--active': i === currentIndex,
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            return (
 | 
			
		||||
              <div key={i} className={className}>{page}</div>
 | 
			
		||||
            );
 | 
			
		||||
@ -294,6 +299,7 @@ export default class OnboardingModal extends React.PureComponent {
 | 
			
		||||
              const className = classNames('onboarding-modal__dot', {
 | 
			
		||||
                active: i === currentIndex,
 | 
			
		||||
              });
 | 
			
		||||
 | 
			
		||||
              return (
 | 
			
		||||
                <div
 | 
			
		||||
                  key={`dot-${i}`}
 | 
			
		||||
 | 
			
		||||
@ -37,14 +37,14 @@ export default class UploadArea extends React.PureComponent {
 | 
			
		||||
 | 
			
		||||
    return (
 | 
			
		||||
      <Motion defaultStyle={{ backgroundOpacity: 0, backgroundScale: 0.95 }} style={{ backgroundOpacity: spring(active ? 1 : 0, { stiffness: 150, damping: 15 }), backgroundScale: spring(active ? 1 : 0.95, { stiffness: 200, damping: 3 }) }}>
 | 
			
		||||
        {({ backgroundOpacity, backgroundScale }) =>
 | 
			
		||||
        {({ backgroundOpacity, backgroundScale }) => (
 | 
			
		||||
          <div className='upload-area' style={{ visibility: active ? 'visible' : 'hidden', opacity: backgroundOpacity }}>
 | 
			
		||||
            <div className='upload-area__drop'>
 | 
			
		||||
              <div className='upload-area__background' style={{ transform: `scale(${backgroundScale})` }} />
 | 
			
		||||
              <div className='upload-area__content'><FormattedMessage id='upload_area.title' defaultMessage='Drag & drop to upload' /></div>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        }
 | 
			
		||||
        )}
 | 
			
		||||
      </Motion>
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@ -3,6 +3,7 @@ import ColumnsArea from '../components/columns_area';
 | 
			
		||||
 | 
			
		||||
const mapStateToProps = state => ({
 | 
			
		||||
  columns: state.getIn(['settings', 'columns']),
 | 
			
		||||
  isModalOpen: !!state.get('modal').modalType,
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
export default connect(mapStateToProps, null, null, { withRef: true })(ColumnsArea);
 | 
			
		||||
 | 
			
		||||
@ -47,6 +47,7 @@ const makeMapStateToProps = () => {
 | 
			
		||||
  const mapStateToProps = (state, { timelineId }) => ({
 | 
			
		||||
    statusIds: getStatusIds(state, { type: timelineId }),
 | 
			
		||||
    isLoading: state.getIn(['timelines', timelineId, 'isLoading'], true),
 | 
			
		||||
    isPartial: state.getIn(['timelines', timelineId, 'isPartial'], false),
 | 
			
		||||
    hasMore: !!state.getIn(['timelines', timelineId, 'next']),
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -139,6 +139,7 @@
 | 
			
		||||
  "loading_indicator.label": "تحميل ...",
 | 
			
		||||
  "media_gallery.toggle_visible": "عرض / إخفاء",
 | 
			
		||||
  "missing_indicator.label": "تعذر العثور عليه",
 | 
			
		||||
  "missing_indicator.sublabel": "تعذر العثور على هذا المورد",
 | 
			
		||||
  "mute_modal.hide_notifications": "هل تود إخفاء الإخطارات القادمة من هذا المستخدم ؟",
 | 
			
		||||
  "navigation_bar.blocks": "الحسابات المحجوبة",
 | 
			
		||||
  "navigation_bar.community_timeline": "الخيط العام المحلي",
 | 
			
		||||
@ -174,7 +175,8 @@
 | 
			
		||||
  "onboarding.page_four.home": "تعرض الصفحة الرئيسية منشورات جميع الأشخاص الذين تتابعهم.",
 | 
			
		||||
  "onboarding.page_four.notifications": "فعندما يتفاعل شخص ما معك، عمود الإخطارات يخبرك.",
 | 
			
		||||
  "onboarding.page_one.federation": "ماستدون شبكة من خوادم مستقلة متلاحمة تهدف إلى إنشاء أكبر شبكة اجتماعية موحدة. تسمى هذه السرفيرات بمثيلات خوادم.",
 | 
			
		||||
  "onboarding.page_one.handle": "أنت الآن على {domain}، واحد من مجموع مثيلات الخوادم المستقلة. اسم المستخدم الكامل الخاص بك هو {handle}",
 | 
			
		||||
  "onboarding.page_one.full_handle": "عنوانك الكامل",
 | 
			
		||||
  "onboarding.page_one.handle_hint": "هذا هو ما يجب عليك توصيله لأصدقائك للبحث عنه.",
 | 
			
		||||
  "onboarding.page_one.welcome": "مرحبا بك في ماستدون !",
 | 
			
		||||
  "onboarding.page_six.admin": "مدير(ة) مثيل الخادم هذا {admin}.",
 | 
			
		||||
  "onboarding.page_six.almost_done": "أنهيت تقريبا ...",
 | 
			
		||||
@ -197,6 +199,8 @@
 | 
			
		||||
  "privacy.public.short": "للعامة",
 | 
			
		||||
  "privacy.unlisted.long": "لا تقم بإدراجه على الخيوط العامة",
 | 
			
		||||
  "privacy.unlisted.short": "غير مدرج",
 | 
			
		||||
  "regeneration_indicator.label": "جارٍ التحميل …",
 | 
			
		||||
  "regeneration_indicator.sublabel": "جارٍ تجهيز تغذية صفحتك الرئيسية !",
 | 
			
		||||
  "relative_time.days": "{number}d",
 | 
			
		||||
  "relative_time.hours": "{number}h",
 | 
			
		||||
  "relative_time.just_now": "الآن",
 | 
			
		||||
@ -223,7 +227,7 @@
 | 
			
		||||
  "status.media_hidden": "الصورة مستترة",
 | 
			
		||||
  "status.mention": "أذكُر @{name}",
 | 
			
		||||
  "status.more": "المزيد",
 | 
			
		||||
  "status.mute": "Mute @{name}",
 | 
			
		||||
  "status.mute": "أكتم @{name}",
 | 
			
		||||
  "status.mute_conversation": "كتم المحادثة",
 | 
			
		||||
  "status.open": "وسع هذه المشاركة",
 | 
			
		||||
  "status.pin": "تدبيس على الملف الشخصي",
 | 
			
		||||
 | 
			
		||||
@ -139,6 +139,7 @@
 | 
			
		||||
  "loading_indicator.label": "Зареждане...",
 | 
			
		||||
  "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",
 | 
			
		||||
@ -174,7 +175,8 @@
 | 
			
		||||
  "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.handle": "You are on {domain}, so your full handle is {handle}",
 | 
			
		||||
  "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...",
 | 
			
		||||
@ -197,6 +199,8 @@
 | 
			
		||||
  "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",
 | 
			
		||||
 | 
			
		||||
@ -50,7 +50,7 @@
 | 
			
		||||
  "column_header.unpin": "Deslligar",
 | 
			
		||||
  "column_subheading.navigation": "Navegació",
 | 
			
		||||
  "column_subheading.settings": "Configuració",
 | 
			
		||||
  "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.hashtag_warning": "Aquest toot no es mostrarà en cap etiqueta ja que no està llistat. Només els toots públics poden ser cercats per etiqueta.",
 | 
			
		||||
  "compose_form.lock_disclaimer": "El teu compte no està bloquejat {locked}. Tothom pot seguir-te i veure els teus missatges a seguidors.",
 | 
			
		||||
  "compose_form.lock_disclaimer.lock": "bloquejat",
 | 
			
		||||
  "compose_form.placeholder": "En què estàs pensant?",
 | 
			
		||||
@ -100,7 +100,7 @@
 | 
			
		||||
  "getting_started.appsshort": "Aplicacions",
 | 
			
		||||
  "getting_started.faq": "PMF",
 | 
			
		||||
  "getting_started.heading": "Començant",
 | 
			
		||||
  "getting_started.open_source_notice": "Mastodon és un programari de codi obert. Pots contribuir o informar de problemes a GitHub de {github}.",
 | 
			
		||||
  "getting_started.open_source_notice": "Mastodon és un programari de codi obert. Pots contribuir o informar de problemes a GitHub a {github}.",
 | 
			
		||||
  "getting_started.userguide": "Guia de l'usuari",
 | 
			
		||||
  "home.column_settings.advanced": "Avançat",
 | 
			
		||||
  "home.column_settings.basic": "Bàsic",
 | 
			
		||||
@ -114,7 +114,7 @@
 | 
			
		||||
  "keyboard_shortcuts.compose": "per centrar l'area de composició de text",
 | 
			
		||||
  "keyboard_shortcuts.description": "Description",
 | 
			
		||||
  "keyboard_shortcuts.down": "per baixar en la llista",
 | 
			
		||||
  "keyboard_shortcuts.enter": "to open status",
 | 
			
		||||
  "keyboard_shortcuts.enter": "ampliar estat",
 | 
			
		||||
  "keyboard_shortcuts.favourite": "afavorir",
 | 
			
		||||
  "keyboard_shortcuts.heading": "Keyboard Shortcuts",
 | 
			
		||||
  "keyboard_shortcuts.hotkey": "Tecla d'accés directe",
 | 
			
		||||
@ -133,12 +133,13 @@
 | 
			
		||||
  "lists.delete": "Delete list",
 | 
			
		||||
  "lists.edit": "Editar llista",
 | 
			
		||||
  "lists.new.create": "Afegir llista",
 | 
			
		||||
  "lists.new.title_placeholder": "Nou títol de llista",
 | 
			
		||||
  "lists.new.title_placeholder": "Nova llista",
 | 
			
		||||
  "lists.search": "Cercar entre les persones que segueixes",
 | 
			
		||||
  "lists.subheading": "Les teves llistes",
 | 
			
		||||
  "loading_indicator.label": "Carregant...",
 | 
			
		||||
  "media_gallery.toggle_visible": "Alternar visibilitat",
 | 
			
		||||
  "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.blocks": "Usuaris bloquejats",
 | 
			
		||||
  "navigation_bar.community_timeline": "Línia de temps Local",
 | 
			
		||||
@ -174,7 +175,8 @@
 | 
			
		||||
  "onboarding.page_four.home": "La línia de temps d'Inici mostra missatges de les persones que segueixes.",
 | 
			
		||||
  "onboarding.page_four.notifications": "La columna Notificacions mostra quan algú interactua amb tu.",
 | 
			
		||||
  "onboarding.page_one.federation": "Mastodon és una xarxa de servidors independents que s'uneixen per fer una més gran xarxa social. A aquests servidors els hi diem instàncies.",
 | 
			
		||||
  "onboarding.page_one.handle": "Ets a {domain}, per tant el teu usuari complert és {handle}",
 | 
			
		||||
  "onboarding.page_one.full_handle": "El teu usuari complet",
 | 
			
		||||
  "onboarding.page_one.handle_hint": "Això és el que els hi diries als teus amics que cerquin.",
 | 
			
		||||
  "onboarding.page_one.welcome": "Benvingut a Mastodon!",
 | 
			
		||||
  "onboarding.page_six.admin": "L'administrador de la teva instància és {admin}.",
 | 
			
		||||
  "onboarding.page_six.almost_done": "Quasi fet...",
 | 
			
		||||
@ -197,6 +199,8 @@
 | 
			
		||||
  "privacy.public.short": "Públic",
 | 
			
		||||
  "privacy.unlisted.long": "No publicar en línies de temps públiques",
 | 
			
		||||
  "privacy.unlisted.short": "No llistat",
 | 
			
		||||
  "regeneration_indicator.label": "Carregant…",
 | 
			
		||||
  "regeneration_indicator.sublabel": "S'està preparant la línia de temps Inici!",
 | 
			
		||||
  "relative_time.days": "fa {number} dies",
 | 
			
		||||
  "relative_time.hours": "fa {number} hores",
 | 
			
		||||
  "relative_time.just_now": "ara",
 | 
			
		||||
@ -223,7 +227,7 @@
 | 
			
		||||
  "status.media_hidden": "Multimèdia amagat",
 | 
			
		||||
  "status.mention": "Esmentar @{name}",
 | 
			
		||||
  "status.more": "Més",
 | 
			
		||||
  "status.mute": "Mute @{name}",
 | 
			
		||||
  "status.mute": "Silenciar @{name}",
 | 
			
		||||
  "status.mute_conversation": "Silenciar conversació",
 | 
			
		||||
  "status.open": "Ampliar aquest estat",
 | 
			
		||||
  "status.pin": "Fixat en el perfil",
 | 
			
		||||
 | 
			
		||||
@ -92,7 +92,7 @@
 | 
			
		||||
  "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.",
 | 
			
		||||
  "empty_column.list": "Diese Liste ist derzeit leer. Wenn Wesen auf dieser Liste neue Beiträge veröffentlichen werden sie hier erscheinen.",
 | 
			
		||||
  "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",
 | 
			
		||||
@ -139,6 +139,7 @@
 | 
			
		||||
  "loading_indicator.label": "Wird geladen …",
 | 
			
		||||
  "media_gallery.toggle_visible": "Sichtbarkeit umschalten",
 | 
			
		||||
  "missing_indicator.label": "Nicht gefunden",
 | 
			
		||||
  "missing_indicator.sublabel": "This resource could not be found",
 | 
			
		||||
  "mute_modal.hide_notifications": "Benachrichtigungen von diesem Account verbergen?",
 | 
			
		||||
  "navigation_bar.blocks": "Blockierte Profile",
 | 
			
		||||
  "navigation_bar.community_timeline": "Lokale Zeitleiste",
 | 
			
		||||
@ -174,7 +175,8 @@
 | 
			
		||||
  "onboarding.page_four.home": "Die Startseite zeigt dir Beiträge von Leuten, denen du folgst.",
 | 
			
		||||
  "onboarding.page_four.notifications": "Wenn jemand mit dir interagiert, bekommst du eine Mitteilung.",
 | 
			
		||||
  "onboarding.page_one.federation": "Mastodon ist ein soziales Netzwerk, das aus unabhängigen Servern besteht. Diese Server nennen wir auch Instanzen.",
 | 
			
		||||
  "onboarding.page_one.handle": "Du bist auf der Instanz {domain}, also ist dein vollständiger Profilname im Netzwerk {handle}",
 | 
			
		||||
  "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": "Willkommen bei Mastodon!",
 | 
			
		||||
  "onboarding.page_six.admin": "Für deine Instanz ist {admin} zuständig.",
 | 
			
		||||
  "onboarding.page_six.almost_done": "Fast fertig …",
 | 
			
		||||
@ -197,6 +199,8 @@
 | 
			
		||||
  "privacy.public.short": "Öffentlich",
 | 
			
		||||
  "privacy.unlisted.long": "Nicht in öffentlichen Zeitleisten anzeigen",
 | 
			
		||||
  "privacy.unlisted.short": "Nicht gelistet",
 | 
			
		||||
  "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",
 | 
			
		||||
 | 
			
		||||
@ -136,6 +136,10 @@
 | 
			
		||||
      {
 | 
			
		||||
        "defaultMessage": "Not found",
 | 
			
		||||
        "id": "missing_indicator.label"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "defaultMessage": "This resource could not be found",
 | 
			
		||||
        "id": "missing_indicator.sublabel"
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "path": "app/javascript/mastodon/components/missing_indicator.json"
 | 
			
		||||
@ -255,6 +259,19 @@
 | 
			
		||||
    ],
 | 
			
		||||
    "path": "app/javascript/mastodon/components/status_content.json"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "descriptors": [
 | 
			
		||||
      {
 | 
			
		||||
        "defaultMessage": "Loading…",
 | 
			
		||||
        "id": "regeneration_indicator.label"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "defaultMessage": "Your home feed is being prepared!",
 | 
			
		||||
        "id": "regeneration_indicator.sublabel"
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "path": "app/javascript/mastodon/components/status_list.json"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "descriptors": [
 | 
			
		||||
      {
 | 
			
		||||
@ -1446,8 +1463,12 @@
 | 
			
		||||
        "id": "onboarding.page_one.federation"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "defaultMessage": "You are on {domain}, so your full handle is {handle}",
 | 
			
		||||
        "id": "onboarding.page_one.handle"
 | 
			
		||||
        "defaultMessage": "Your full handle",
 | 
			
		||||
        "id": "onboarding.page_one.full_handle"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "defaultMessage": "This is what you would tell your friends to search for.",
 | 
			
		||||
        "id": "onboarding.page_one.handle_hint"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "defaultMessage": "Write posts from the compose column. You can upload images, change privacy settings, and add content warnings with the icons below.",
 | 
			
		||||
 | 
			
		||||
@ -139,6 +139,7 @@
 | 
			
		||||
  "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",
 | 
			
		||||
@ -174,7 +175,8 @@
 | 
			
		||||
  "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.handle": "You are on {domain}, so your full handle is {handle}",
 | 
			
		||||
  "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...",
 | 
			
		||||
@ -197,6 +199,8 @@
 | 
			
		||||
  "privacy.public.short": "Public",
 | 
			
		||||
  "privacy.unlisted.long": "Do not post to 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",
 | 
			
		||||
 | 
			
		||||
@ -7,22 +7,22 @@
 | 
			
		||||
  "account.followers": "Sekvantoj",
 | 
			
		||||
  "account.follows": "Sekvatoj",
 | 
			
		||||
  "account.follows_you": "Sekvas vin",
 | 
			
		||||
  "account.hide_reblogs": "Hide boosts from @{name}",
 | 
			
		||||
  "account.hide_reblogs": "Maski diskonigitaĵojn de @{name}",
 | 
			
		||||
  "account.media": "Sonbildaĵoj",
 | 
			
		||||
  "account.mention": "Mencii @{name}",
 | 
			
		||||
  "account.moved_to": "{name} has moved to:",
 | 
			
		||||
  "account.moved_to": "{name} movis al:",
 | 
			
		||||
  "account.mute": "Silentigi @{name}",
 | 
			
		||||
  "account.mute_notifications": "Mute notifications from @{name}",
 | 
			
		||||
  "account.mute_notifications": "Silentigi sciigojn el @{name}",
 | 
			
		||||
  "account.posts": "Mesaĝoj",
 | 
			
		||||
  "account.report": "Signali @{name}",
 | 
			
		||||
  "account.requested": "Atendas aprobon",
 | 
			
		||||
  "account.share": "Diskonigi la profilon de @{name}",
 | 
			
		||||
  "account.show_reblogs": "Show boosts from @{name}",
 | 
			
		||||
  "account.show_reblogs": "Montri diskonigaĵojn de @{name}",
 | 
			
		||||
  "account.unblock": "Malbloki @{name}",
 | 
			
		||||
  "account.unblock_domain": "Malkaŝi {domain}",
 | 
			
		||||
  "account.unfollow": "Ne plus sekvi",
 | 
			
		||||
  "account.unmute": "Malsilentigi @{name}",
 | 
			
		||||
  "account.unmute_notifications": "Unmute notifications from @{name}",
 | 
			
		||||
  "account.unmute_notifications": "Malsilentigi sciigojn de @{name}",
 | 
			
		||||
  "account.view_full_profile": "Vidi plenan profilon",
 | 
			
		||||
  "boost_modal.combo": "La proksiman fojon, premu {combo} por pasigi",
 | 
			
		||||
  "bundle_column_error.body": "Io malfunkciis ŝargante tiun ĉi komponanton.",
 | 
			
		||||
@ -36,7 +36,7 @@
 | 
			
		||||
  "column.favourites": "Favoritoj",
 | 
			
		||||
  "column.follow_requests": "Abonpetoj",
 | 
			
		||||
  "column.home": "Hejmo",
 | 
			
		||||
  "column.lists": "Lists",
 | 
			
		||||
  "column.lists": "Listoj",
 | 
			
		||||
  "column.mutes": "Silentigitaj uzantoj",
 | 
			
		||||
  "column.notifications": "Sciigoj",
 | 
			
		||||
  "column.pins": "Alpinglitaj pepoj",
 | 
			
		||||
@ -50,7 +50,7 @@
 | 
			
		||||
  "column_header.unpin": "Depingli",
 | 
			
		||||
  "column_subheading.navigation": "Navigado",
 | 
			
		||||
  "column_subheading.settings": "Agordoj",
 | 
			
		||||
  "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.hashtag_warning": "Ĉi tiu pepo ne estos listigita en iu ajn kradvorta listo pro ĝia videbleco estas “eksterlista”. Nur publikaj pepoj povas esti kradvorte trovitaj.",
 | 
			
		||||
  "compose_form.lock_disclaimer": "Via konta ne estas ŝlosita. Iu ajn povas sekvi vin por vidi viajn privatajn pepojn.",
 | 
			
		||||
  "compose_form.lock_disclaimer.lock": "ŝlosita",
 | 
			
		||||
  "compose_form.placeholder": "Pri kio vi pensas?",
 | 
			
		||||
@ -65,7 +65,7 @@
 | 
			
		||||
  "confirmations.delete.confirm": "Malaperigi",
 | 
			
		||||
  "confirmations.delete.message": "Ĉu vi konfirmas la malaperigon de tiun pepon?",
 | 
			
		||||
  "confirmations.delete_list.confirm": "Delete",
 | 
			
		||||
  "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?",
 | 
			
		||||
  "confirmations.delete_list.message": "Ĉu vi certas forviŝi ĉi tiun liston por ĉiam?",
 | 
			
		||||
  "confirmations.domain_block.confirm": "Kaŝi la tutan reton",
 | 
			
		||||
  "confirmations.domain_block.message": "Ĉu vi vere, vere certas, ke vi volas bloki {domain} tute? Plej ofte, kelkaj celitaj blokadoj aŭ silentigoj estas sufiĉaj kaj preferindaj.",
 | 
			
		||||
  "confirmations.mute.confirm": "Silentigi",
 | 
			
		||||
@ -92,9 +92,9 @@
 | 
			
		||||
  "empty_column.hashtag": "Ĝise, neniu enhavo estas asociita kun 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 publika tempolinio",
 | 
			
		||||
  "empty_column.list": "There is nothing in this list yet.",
 | 
			
		||||
  "empty_column.list": "Estas ankoraŭ nenio en ĉi tiu listo. Tuj kiam anoj de ĉi tiu listo publikigos, ties pepoj aperos ĉi tie.",
 | 
			
		||||
  "empty_column.notifications": "Vi dume ne havas sciigojn. Interagi kun aliajn uzantojn por komenci la konversacion.",
 | 
			
		||||
  "empty_column.public": "Estas nenio ĉi tie! Publike skribu ion, aŭ mane sekvu uzantojn de aliaj instancoj por plenigi la publikan tempolinion.",
 | 
			
		||||
  "empty_column.public": "Estas nenio ĉi tie! Publike skribu ion, aŭ mane sekvu uzantojn de aliaj instancoj por plenigi la publikan tempolinion",
 | 
			
		||||
  "follow_request.authorize": "Akcepti",
 | 
			
		||||
  "follow_request.reject": "Rifuzi",
 | 
			
		||||
  "getting_started.appsshort": "Aplikaĵoj",
 | 
			
		||||
@ -108,46 +108,47 @@
 | 
			
		||||
  "home.column_settings.show_reblogs": "Montri diskonigojn",
 | 
			
		||||
  "home.column_settings.show_replies": "Montri respondojn",
 | 
			
		||||
  "home.settings": "Agordoj de la kolumno",
 | 
			
		||||
  "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.back": "reeniri",
 | 
			
		||||
  "keyboard_shortcuts.boost": "diskonigi",
 | 
			
		||||
  "keyboard_shortcuts.column": "fokusigi statuson en unu el la columnoj",
 | 
			
		||||
  "keyboard_shortcuts.compose": "por fokusigi la redaktujon",
 | 
			
		||||
  "keyboard_shortcuts.description": "Description",
 | 
			
		||||
  "keyboard_shortcuts.down": "to move down in the list",
 | 
			
		||||
  "keyboard_shortcuts.down": "subenmovi en la listo",
 | 
			
		||||
  "keyboard_shortcuts.enter": "to open status",
 | 
			
		||||
  "keyboard_shortcuts.favourite": "to favourite",
 | 
			
		||||
  "keyboard_shortcuts.favourite": "ŝatitaren",
 | 
			
		||||
  "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.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.hotkey": "Rapidklavo",
 | 
			
		||||
  "keyboard_shortcuts.legend": "por montri ĉi tiun legendon",
 | 
			
		||||
  "keyboard_shortcuts.mention": "por sciigi ties aŭtoron",
 | 
			
		||||
  "keyboard_shortcuts.reply": "por respondi",
 | 
			
		||||
  "keyboard_shortcuts.search": "por fokusigi la serĉadon",
 | 
			
		||||
  "keyboard_shortcuts.toot": "por ekredakti tute novan pepon",
 | 
			
		||||
  "keyboard_shortcuts.unfocus": "por malfokusigi la redaktujon aŭ la serĉilon",
 | 
			
		||||
  "keyboard_shortcuts.up": "por suprenmovi en la listo",
 | 
			
		||||
  "lightbox.close": "Fermi",
 | 
			
		||||
  "lightbox.next": "Malantaŭa",
 | 
			
		||||
  "lightbox.previous": "Antaŭa",
 | 
			
		||||
  "lists.account.add": "Add to list",
 | 
			
		||||
  "lists.account.remove": "Remove from list",
 | 
			
		||||
  "lists.account.add": "Aldoni al la listo",
 | 
			
		||||
  "lists.account.remove": "Forviŝi de la listo",
 | 
			
		||||
  "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",
 | 
			
		||||
  "lists.edit": "Redakti la liston",
 | 
			
		||||
  "lists.new.create": "Aldoni liston",
 | 
			
		||||
  "lists.new.title_placeholder": "Titulo de la nova listo",
 | 
			
		||||
  "lists.search": "Serĉi el la homoj kiujn vi sekvas",
 | 
			
		||||
  "lists.subheading": "Viaj listoj",
 | 
			
		||||
  "loading_indicator.label": "Ŝarganta…",
 | 
			
		||||
  "media_gallery.toggle_visible": "Baskuli videblecon",
 | 
			
		||||
  "missing_indicator.label": "Ne trovita",
 | 
			
		||||
  "mute_modal.hide_notifications": "Hide notifications from this user?",
 | 
			
		||||
  "missing_indicator.sublabel": "Ĉi tiu rimedo ne troviĝis",
 | 
			
		||||
  "mute_modal.hide_notifications": "Ĉu kaŝi sciigojn el tiu ĉi uzanto?",
 | 
			
		||||
  "navigation_bar.blocks": "Blokitaj uzantoj",
 | 
			
		||||
  "navigation_bar.community_timeline": "Loka tempolinio",
 | 
			
		||||
  "navigation_bar.edit_profile": "Redakti la profilon",
 | 
			
		||||
  "navigation_bar.favourites": "Favoritaj",
 | 
			
		||||
  "navigation_bar.follow_requests": "Abonpetoj",
 | 
			
		||||
  "navigation_bar.info": "Plia informo",
 | 
			
		||||
  "navigation_bar.keyboard_shortcuts": "Keyboard shortcuts",
 | 
			
		||||
  "navigation_bar.lists": "Lists",
 | 
			
		||||
  "navigation_bar.keyboard_shortcuts": "Klavmallongigo",
 | 
			
		||||
  "navigation_bar.lists": "Listoj",
 | 
			
		||||
  "navigation_bar.logout": "Elsaluti",
 | 
			
		||||
  "navigation_bar.mutes": "Silentigitaj uzantoj",
 | 
			
		||||
  "navigation_bar.pins": "Alpinglitaj pepoj",
 | 
			
		||||
@ -174,12 +175,13 @@
 | 
			
		||||
  "onboarding.page_four.home": "La hejma tempolinio enhavas la mesaĝojn de ĉiuj uzantoj, kiuj vi sekvas.",
 | 
			
		||||
  "onboarding.page_four.notifications": "La sciiga kolumno informas vin kiam iu interagas kun vi.",
 | 
			
		||||
  "onboarding.page_one.federation": "Mastodono estas reto de nedependaj serviloj, unuiĝintaj por krei pligrandan socian retejon. Ni nomas tiujn servilojn instancoj.",
 | 
			
		||||
  "onboarding.page_one.handle": "Vi estas ĉe {domain}, unu el la multaj instancoj de Mastodono. Via kompleta uznomo do estas {handle}",
 | 
			
		||||
  "onboarding.page_one.full_handle": "Via tuta uzantnomo",
 | 
			
		||||
  "onboarding.page_one.handle_hint": "Jen kion vi dirintus al viaj amikoj por serĉi.",
 | 
			
		||||
  "onboarding.page_one.welcome": "Bonvenon al Mastodono!",
 | 
			
		||||
  "onboarding.page_six.admin": "Via instancestro estas {admin}.",
 | 
			
		||||
  "onboarding.page_six.almost_done": "Estas preskaŭ finita…",
 | 
			
		||||
  "onboarding.page_six.appetoot": "Bonan a‘pepi’ton!",
 | 
			
		||||
  "onboarding.page_six.apps_available": "{apps} estas elŝuteblaj por iOS, Androido kaj alioj. Kaj nun… bonan a‘pepi’ton!",
 | 
			
		||||
  "onboarding.page_six.apps_available": "{apps} estas elŝuteblaj por iOS, Androido kaj alioj.",
 | 
			
		||||
  "onboarding.page_six.github": "Mastodono estas libera, senpaga kaj malfermkoda programaro. Vi povas signali cimojn, proponi funkciojn aŭ kontribui al gîa kreskado ĉe {github}.",
 | 
			
		||||
  "onboarding.page_six.guidelines": "komunreguloj",
 | 
			
		||||
  "onboarding.page_six.read_guidelines": "Ni petas vin: ne forgesu legi la {guidelines}n de {domain}!",
 | 
			
		||||
@ -197,6 +199,8 @@
 | 
			
		||||
  "privacy.public.short": "Publika",
 | 
			
		||||
  "privacy.unlisted.long": "Ne vidigi en publikaj tempolinioj",
 | 
			
		||||
  "privacy.unlisted.short": "Nelistigita",
 | 
			
		||||
  "regeneration_indicator.label": "Elŝultanta…",
 | 
			
		||||
  "regeneration_indicator.sublabel": "Via ĉefpaĝo estas preparanta!",
 | 
			
		||||
  "relative_time.days": "{number}t",
 | 
			
		||||
  "relative_time.hours": "{number}h",
 | 
			
		||||
  "relative_time.just_now": "nun",
 | 
			
		||||
@ -210,7 +214,7 @@
 | 
			
		||||
  "search_popout.search_format": "Detala serĉo",
 | 
			
		||||
  "search_popout.tips.hashtag": "kradvorto",
 | 
			
		||||
  "search_popout.tips.status": "statkonigo",
 | 
			
		||||
  "search_popout.tips.text": "Simpla teksto eligas la kongruajn afiŝnomojn, uznomojn kaj kradvortojn.",
 | 
			
		||||
  "search_popout.tips.text": "Simpla teksto eligas la kongruajn afiŝnomojn, uznomojn kaj kradvortojn",
 | 
			
		||||
  "search_popout.tips.user": "uzanto",
 | 
			
		||||
  "search_results.total": "{count, number} {count, plural, one {rezultato} other {rezultatoj}}",
 | 
			
		||||
  "standalone.public_title": "Rigardeti…",
 | 
			
		||||
@ -223,7 +227,7 @@
 | 
			
		||||
  "status.media_hidden": "Sonbildaĵo kaŝita",
 | 
			
		||||
  "status.mention": "Mencii @{name}",
 | 
			
		||||
  "status.more": "Pli",
 | 
			
		||||
  "status.mute": "Mute @{name}",
 | 
			
		||||
  "status.mute": "Silentigi @{name}",
 | 
			
		||||
  "status.mute_conversation": "Silentigi konversacion",
 | 
			
		||||
  "status.open": "Disfaldi statkonigon",
 | 
			
		||||
  "status.pin": "Pingli al la profilo",
 | 
			
		||||
@ -244,7 +248,7 @@
 | 
			
		||||
  "tabs_bar.home": "Hejmo",
 | 
			
		||||
  "tabs_bar.local_timeline": "Loka tempolinio",
 | 
			
		||||
  "tabs_bar.notifications": "Sciigoj",
 | 
			
		||||
  "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
 | 
			
		||||
  "ui.beforeunload": "Via malneto perdiĝos se vi eliras de Mastodon.",
 | 
			
		||||
  "upload_area.title": "Algliti por alŝuti",
 | 
			
		||||
  "upload_button.label": "Aldoni sonbildaĵon",
 | 
			
		||||
  "upload_form.description": "Priskribi por la misvidantaj",
 | 
			
		||||
 | 
			
		||||
@ -36,7 +36,7 @@
 | 
			
		||||
  "column.favourites": "Favoritos",
 | 
			
		||||
  "column.follow_requests": "Solicitudes de seguimiento",
 | 
			
		||||
  "column.home": "Inicio",
 | 
			
		||||
  "column.lists": "Lists",
 | 
			
		||||
  "column.lists": "Listas",
 | 
			
		||||
  "column.mutes": "Usuarios silenciados",
 | 
			
		||||
  "column.notifications": "Notificaciones",
 | 
			
		||||
  "column.pins": "Toot fijado",
 | 
			
		||||
@ -92,7 +92,7 @@
 | 
			
		||||
  "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.",
 | 
			
		||||
  "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.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",
 | 
			
		||||
@ -139,6 +139,7 @@
 | 
			
		||||
  "loading_indicator.label": "Cargando…",
 | 
			
		||||
  "media_gallery.toggle_visible": "Cambiar visibilidad",
 | 
			
		||||
  "missing_indicator.label": "No encontrado",
 | 
			
		||||
  "missing_indicator.sublabel": "This resource could not be found",
 | 
			
		||||
  "mute_modal.hide_notifications": "Ocultar notificaciones de este usuario?",
 | 
			
		||||
  "navigation_bar.blocks": "Usuarios bloqueados",
 | 
			
		||||
  "navigation_bar.community_timeline": "Historia local",
 | 
			
		||||
@ -174,7 +175,8 @@
 | 
			
		||||
  "onboarding.page_four.home": "La línea de tiempo principal muestra toots de gente que sigues.",
 | 
			
		||||
  "onboarding.page_four.notifications": "Las notificaciones se muestran cuando alguien interactúa contigo.",
 | 
			
		||||
  "onboarding.page_one.federation": "Mastodon es una red de servidores federados que conforman una red social aún más grande. Llamamos a estos servidores instancias.",
 | 
			
		||||
  "onboarding.page_one.handle": "Estás en {domain}, así que tu nombre de usuario completo es {handle}",
 | 
			
		||||
  "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": "¡Bienvenido a Mastodon!",
 | 
			
		||||
  "onboarding.page_six.admin": "El administrador de tu instancia es {admin}.",
 | 
			
		||||
  "onboarding.page_six.almost_done": "Ya casi…",
 | 
			
		||||
@ -197,6 +199,8 @@
 | 
			
		||||
  "privacy.public.short": "Público",
 | 
			
		||||
  "privacy.unlisted.long": "No mostrar en la historia federada",
 | 
			
		||||
  "privacy.unlisted.short": "Sin federar",
 | 
			
		||||
  "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": "ahora",
 | 
			
		||||
 | 
			
		||||
@ -139,6 +139,7 @@
 | 
			
		||||
  "loading_indicator.label": "بارگیری...",
 | 
			
		||||
  "media_gallery.toggle_visible": "تغییر پیدایی",
 | 
			
		||||
  "missing_indicator.label": "پیدا نشد",
 | 
			
		||||
  "missing_indicator.sublabel": "This resource could not be found",
 | 
			
		||||
  "mute_modal.hide_notifications": "اعلانهای این کاربر پنهان شود؟",
 | 
			
		||||
  "navigation_bar.blocks": "کاربران مسدودشده",
 | 
			
		||||
  "navigation_bar.community_timeline": "نوشتههای محلی",
 | 
			
		||||
@ -174,7 +175,8 @@
 | 
			
		||||
  "onboarding.page_four.home": "ستون «خانه» نوشتههای کسانی را نشان میدهد که شما پی میگیرید.",
 | 
			
		||||
  "onboarding.page_four.notifications": "ستون «اعلانها» ارتباطهای شما با دیگران را نشان میدهد.",
 | 
			
		||||
  "onboarding.page_one.federation": "ماستدون شبکهای از سرورهای مستقل است که با پیوستن به یکدیگر یک شبکهٔ اجتماعی بزرگ را تشکیل میدهند.",
 | 
			
		||||
  "onboarding.page_one.handle": "شما روی سرور {domain} هستید، بنابراین شناسهٔ کامل شما {handle} است",
 | 
			
		||||
  "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": "به ماستدون خوش آمدید!",
 | 
			
		||||
  "onboarding.page_six.admin": "نشانی مسئول سرور شما {admin} است.",
 | 
			
		||||
  "onboarding.page_six.almost_done": "الان تقریباً آمادهاید...",
 | 
			
		||||
@ -197,6 +199,8 @@
 | 
			
		||||
  "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": "الان",
 | 
			
		||||
 | 
			
		||||
@ -139,6 +139,7 @@
 | 
			
		||||
  "loading_indicator.label": "Ladataan...",
 | 
			
		||||
  "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": "Paikallinen aikajana",
 | 
			
		||||
@ -174,7 +175,8 @@
 | 
			
		||||
  "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.handle": "You are on {domain}, so your full handle is {handle}",
 | 
			
		||||
  "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...",
 | 
			
		||||
@ -197,6 +199,8 @@
 | 
			
		||||
  "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",
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
  "account.block": "Bloquer",
 | 
			
		||||
  "account.block_domain": "Tout masquer de {domain}",
 | 
			
		||||
  "account.block": "Bloquer @{name}",
 | 
			
		||||
  "account.block_domain": "Tout masquer venant de {domain}",
 | 
			
		||||
  "account.disclaimer_full": "Les données ci-dessous peuvent ne pas refléter ce profil dans sa totalité.",
 | 
			
		||||
  "account.edit_profile": "Modifier le profil",
 | 
			
		||||
  "account.follow": "Suivre",
 | 
			
		||||
@ -11,7 +11,7 @@
 | 
			
		||||
  "account.media": "Média",
 | 
			
		||||
  "account.mention": "Mentionner",
 | 
			
		||||
  "account.moved_to": "{name} a déménagé vers :",
 | 
			
		||||
  "account.mute": "Masquer",
 | 
			
		||||
  "account.mute": "Masquer @{name}",
 | 
			
		||||
  "account.mute_notifications": "Ignorer les notifications de @{name}",
 | 
			
		||||
  "account.posts": "Statuts",
 | 
			
		||||
  "account.report": "Signaler",
 | 
			
		||||
@ -36,7 +36,7 @@
 | 
			
		||||
  "column.favourites": "Favoris",
 | 
			
		||||
  "column.follow_requests": "Demandes de suivi",
 | 
			
		||||
  "column.home": "Accueil",
 | 
			
		||||
  "column.lists": "Lists",
 | 
			
		||||
  "column.lists": "Listes",
 | 
			
		||||
  "column.mutes": "Comptes masqués",
 | 
			
		||||
  "column.notifications": "Notifications",
 | 
			
		||||
  "column.pins": "Pouets épinglés",
 | 
			
		||||
@ -50,7 +50,7 @@
 | 
			
		||||
  "column_header.unpin": "Retirer",
 | 
			
		||||
  "column_subheading.navigation": "Navigation",
 | 
			
		||||
  "column_subheading.settings": "Paramètres",
 | 
			
		||||
  "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.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 @@
 | 
			
		||||
  "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.",
 | 
			
		||||
  "embed.preview": "Il apparaîtra comme cela :",
 | 
			
		||||
  "embed.preview": "Il apparaîtra comme cela :",
 | 
			
		||||
  "emoji_button.activity": "Activités",
 | 
			
		||||
  "emoji_button.custom": "Personnalisés",
 | 
			
		||||
  "emoji_button.flags": "Drapeaux",
 | 
			
		||||
@ -89,12 +89,12 @@
 | 
			
		||||
  "emoji_button.symbols": "Symboles",
 | 
			
		||||
  "emoji_button.travel": "Lieux et voyages",
 | 
			
		||||
  "empty_column.community": "Le fil public local est vide. Écrivez donc quelque chose pour le remplir !",
 | 
			
		||||
  "empty_column.hashtag": "Il n’y a encore aucun contenu associé à ce hashtag",
 | 
			
		||||
  "empty_column.hashtag": "Il n’y a encore aucun contenu associé à ce hashtag.",
 | 
			
		||||
  "empty_column.home": "Vous ne suivez encore personne. Visitez {public} ou bien utilisez la recherche pour vous connecter à d’autres utilisateur⋅ice⋅s.",
 | 
			
		||||
  "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.notifications": "Vous n’avez pas encore de notification. Interagissez avec d’autres utilisateur⋅ice⋅s pour débuter la conversation.",
 | 
			
		||||
  "empty_column.public": "Il n’y a rien ici ! Écrivez quelque chose publiquement, ou bien suivez manuellement des utilisateur⋅ice⋅s d’autres instances pour remplir le fil public.",
 | 
			
		||||
  "empty_column.public": "Il n’y a rien ici ! Écrivez quelque chose publiquement, ou bien suivez manuellement des utilisateur⋅ice·s d’autres instances pour remplir le fil public",
 | 
			
		||||
  "follow_request.authorize": "Accepter",
 | 
			
		||||
  "follow_request.reject": "Rejeter",
 | 
			
		||||
  "getting_started.appsshort": "Applications",
 | 
			
		||||
@ -121,10 +121,10 @@
 | 
			
		||||
  "keyboard_shortcuts.legend": "pour afficher cette légende",
 | 
			
		||||
  "keyboard_shortcuts.mention": "pour mentionner l'auteur",
 | 
			
		||||
  "keyboard_shortcuts.reply": "pour répondre",
 | 
			
		||||
  "keyboard_shortcuts.search": "to focus search",
 | 
			
		||||
  "keyboard_shortcuts.search": "pour cibler la recherche",
 | 
			
		||||
  "keyboard_shortcuts.toot": "pour démarrer un tout nouveau pouet",
 | 
			
		||||
  "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
 | 
			
		||||
  "keyboard_shortcuts.up": "to move up in the list",
 | 
			
		||||
  "keyboard_shortcuts.unfocus": "pour recentrer composer textarea/search",
 | 
			
		||||
  "keyboard_shortcuts.up": "pour remonter dans la liste",
 | 
			
		||||
  "lightbox.close": "Fermer",
 | 
			
		||||
  "lightbox.next": "Suivant",
 | 
			
		||||
  "lightbox.previous": "Précédent",
 | 
			
		||||
@ -139,6 +139,7 @@
 | 
			
		||||
  "loading_indicator.label": "Chargement…",
 | 
			
		||||
  "media_gallery.toggle_visible": "Modifier la visibilité",
 | 
			
		||||
  "missing_indicator.label": "Non trouvé",
 | 
			
		||||
  "missing_indicator.sublabel": "Ressource introuvable",
 | 
			
		||||
  "mute_modal.hide_notifications": "Masquer les notifications de cet utilisateur ?",
 | 
			
		||||
  "navigation_bar.blocks": "Comptes bloqués",
 | 
			
		||||
  "navigation_bar.community_timeline": "Fil public local",
 | 
			
		||||
@ -154,14 +155,14 @@
 | 
			
		||||
  "navigation_bar.preferences": "Préférences",
 | 
			
		||||
  "navigation_bar.public_timeline": "Fil public global",
 | 
			
		||||
  "notification.favourite": "{name} a ajouté à ses favoris :",
 | 
			
		||||
  "notification.follow": "{name} vous suit.",
 | 
			
		||||
  "notification.follow": "{name} vous suit",
 | 
			
		||||
  "notification.mention": "{name} vous a mentionné⋅e :",
 | 
			
		||||
  "notification.reblog": "{name} a partagé votre statut :",
 | 
			
		||||
  "notifications.clear": "Nettoyer",
 | 
			
		||||
  "notifications.clear_confirmation": "Voulez-vous vraiment supprimer toutes vos notifications ?",
 | 
			
		||||
  "notifications.column_settings.alert": "Notifications locales",
 | 
			
		||||
  "notifications.column_settings.favourite": "Favoris :",
 | 
			
		||||
  "notifications.column_settings.follow": "Nouveaux⋅elles abonné⋅e⋅s :",
 | 
			
		||||
  "notifications.column_settings.follow": "Nouveaux⋅elles abonné⋅e·s :",
 | 
			
		||||
  "notifications.column_settings.mention": "Mentions :",
 | 
			
		||||
  "notifications.column_settings.push": "Notifications push",
 | 
			
		||||
  "notifications.column_settings.push_meta": "Cet appareil",
 | 
			
		||||
@ -171,15 +172,16 @@
 | 
			
		||||
  "onboarding.done": "Effectué",
 | 
			
		||||
  "onboarding.next": "Suivant",
 | 
			
		||||
  "onboarding.page_five.public_timelines": "Le fil public global affiche les posts de tou⋅te⋅s les utilisateur⋅ice⋅s suivi⋅es par les membres de {domain}. Le fil public local est identique mais se limite aux utilisateur⋅ice⋅s de {domain}.",
 | 
			
		||||
  "onboarding.page_four.home": "L’Accueil affiche les posts de tou⋅te⋅s les utilisateur⋅ice⋅s que vous suivez",
 | 
			
		||||
  "onboarding.page_four.notifications": "Les Notifications vous informent lorsque quelqu’un interagit avec vous",
 | 
			
		||||
  "onboarding.page_four.home": "L’Accueil affiche les posts de tou⋅te·s les utilisateur⋅ice·s que vous suivez.",
 | 
			
		||||
  "onboarding.page_four.notifications": "Les Notifications vous informent lorsque quelqu’un interagit avec vous.",
 | 
			
		||||
  "onboarding.page_one.federation": "Mastodon est un réseau social qui appartient à tou⋅te⋅s.",
 | 
			
		||||
  "onboarding.page_one.handle": "Vous êtes sur {domain}, une des nombreuses instances indépendantes de Mastodon. Votre nom d’utilisateur⋅ice complet est {handle}",
 | 
			
		||||
  "onboarding.page_one.full_handle": "Votre pleine maîtrise",
 | 
			
		||||
  "onboarding.page_one.handle_hint": "C'est ce que vous diriez à vos amis de rechercher.",
 | 
			
		||||
  "onboarding.page_one.welcome": "Bienvenue sur Mastodon !",
 | 
			
		||||
  "onboarding.page_six.admin": "L’administrateur⋅ice de votre instance est {admin}",
 | 
			
		||||
  "onboarding.page_six.admin": "L’administrateur⋅ice de votre instance est {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. Et maintenant… Bon appouétit !",
 | 
			
		||||
  "onboarding.page_six.apps_available": "De nombreuses {apps} sont disponibles pour iOS, Android et autres.",
 | 
			
		||||
  "onboarding.page_six.github": "Mastodon est un logiciel libre, gratuit et open-source. Vous pouvez rapporter des bogues, suggérer des fonctionnalités, ou contribuer à son développement sur {github}.",
 | 
			
		||||
  "onboarding.page_six.guidelines": "règles de la communauté",
 | 
			
		||||
  "onboarding.page_six.read_guidelines": "S’il vous plaît, n’oubliez pas de lire les {guidelines} !",
 | 
			
		||||
@ -189,16 +191,18 @@
 | 
			
		||||
  "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’afficher que pour les personnes mentionnées",
 | 
			
		||||
  "privacy.direct.long": "N'envoyer qu'aux personnes mentionnées",
 | 
			
		||||
  "privacy.direct.short": "Direct",
 | 
			
		||||
  "privacy.private.long": "N’afficher que pour vos abonné⋅e⋅s",
 | 
			
		||||
  "privacy.private.long": "N'envoyer qu'à vos abonné⋅e⋅s",
 | 
			
		||||
  "privacy.private.short": "Privé",
 | 
			
		||||
  "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é",
 | 
			
		||||
  "relative_time.days": "{number} j",
 | 
			
		||||
  "relative_time.hours": "{number} h",
 | 
			
		||||
  "regeneration_indicator.label": "Chargement…",
 | 
			
		||||
  "regeneration_indicator.sublabel": "Votre page principale est en cours de préparation!",
 | 
			
		||||
  "relative_time.days": "{number} j",
 | 
			
		||||
  "relative_time.hours": "{number} h",
 | 
			
		||||
  "relative_time.just_now": "à l’instant",
 | 
			
		||||
  "relative_time.minutes": "{number} min",
 | 
			
		||||
  "relative_time.seconds": "{number} s",
 | 
			
		||||
@ -223,7 +227,7 @@
 | 
			
		||||
  "status.media_hidden": "Média caché",
 | 
			
		||||
  "status.mention": "Mentionner",
 | 
			
		||||
  "status.more": "Plus",
 | 
			
		||||
  "status.mute": "Mute @{name}",
 | 
			
		||||
  "status.mute": "Masquer @{name}",
 | 
			
		||||
  "status.mute_conversation": "Masquer la conversation",
 | 
			
		||||
  "status.open": "Déplier ce statut",
 | 
			
		||||
  "status.pin": "Épingler sur le profil",
 | 
			
		||||
 | 
			
		||||
@ -50,7 +50,7 @@
 | 
			
		||||
  "column_header.unpin": "Soltar",
 | 
			
		||||
  "column_subheading.navigation": "Navegación",
 | 
			
		||||
  "column_subheading.settings": "Axustes",
 | 
			
		||||
  "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.hashtag_warning": "Esta mensaxe non será listada baixo ningunha etiqueta xa que está marcada como non listada. Só os toots públicos poden buscarse por etiquetas.",
 | 
			
		||||
  "compose_form.lock_disclaimer": "A súa conta non está {locked}. Calquera pode seguila para ver as súas mensaxes só-para-seguidoras.",
 | 
			
		||||
  "compose_form.lock_disclaimer.lock": "bloqueado",
 | 
			
		||||
  "compose_form.placeholder": "A qué andas?",
 | 
			
		||||
@ -139,8 +139,9 @@
 | 
			
		||||
  "loading_indicator.label": "Cargando...",
 | 
			
		||||
  "media_gallery.toggle_visible": "Dar visibilidade",
 | 
			
		||||
  "missing_indicator.label": "Non atopado",
 | 
			
		||||
  "missing_indicator.sublabel": "This resource could not be found",
 | 
			
		||||
  "mute_modal.hide_notifications": "Esconder notificacións deste usuario?",
 | 
			
		||||
  "navigation_bar.blocks": "Usuarios bloqueados",
 | 
			
		||||
  "navigation_bar.blocks": "Usuarias bloqueadas",
 | 
			
		||||
  "navigation_bar.community_timeline": "Liña temporal local",
 | 
			
		||||
  "navigation_bar.edit_profile": "Editar perfil",
 | 
			
		||||
  "navigation_bar.favourites": "Favoritas",
 | 
			
		||||
@ -156,7 +157,7 @@
 | 
			
		||||
  "notification.favourite": "{name} marcou como favorito o seu estado",
 | 
			
		||||
  "notification.follow": "{name} está a seguila",
 | 
			
		||||
  "notification.mention": "{name} mencionoute",
 | 
			
		||||
  "notification.reblog": "{name} promocionou o seu estado",
 | 
			
		||||
  "notification.reblog": "{name} promoveu o seu estado",
 | 
			
		||||
  "notifications.clear": "Limpar notificacións",
 | 
			
		||||
  "notifications.clear_confirmation": "Estás seguro de que queres limpar permanentemente todas as túas notificacións?",
 | 
			
		||||
  "notifications.column_settings.alert": "Notificacións de escritorio",
 | 
			
		||||
@ -174,7 +175,8 @@
 | 
			
		||||
  "onboarding.page_four.home": "A liña de tempo local mostra as publicacións das persoas que segues.",
 | 
			
		||||
  "onboarding.page_four.notifications": "A columna de notificacións mostra cando alguén interactúa contigo.",
 | 
			
		||||
  "onboarding.page_one.federation": "Mastodon é unha rede de servidores independentes que se unen para facer unha rede social máis grande. Chamamos instancias a estes servidores.",
 | 
			
		||||
  "onboarding.page_one.handle": "Estás en {domain}, polo que o teu nome de usuario completo é {handle}",
 | 
			
		||||
  "onboarding.page_one.full_handle": "O seu alcume completo",
 | 
			
		||||
  "onboarding.page_one.handle_hint": "Esto é o que lle debe dicir a quen queira seguila.",
 | 
			
		||||
  "onboarding.page_one.welcome": "Benvido a Mastodon!",
 | 
			
		||||
  "onboarding.page_six.admin": "O administrador da túa instancia é {admin}.",
 | 
			
		||||
  "onboarding.page_six.almost_done": "Case feito...",
 | 
			
		||||
@ -197,6 +199,8 @@
 | 
			
		||||
  "privacy.public.short": "Pública",
 | 
			
		||||
  "privacy.unlisted.long": "Non publicar en liñas temporais públicas",
 | 
			
		||||
  "privacy.unlisted.short": "Non listada",
 | 
			
		||||
  "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": "agora",
 | 
			
		||||
@ -223,7 +227,7 @@
 | 
			
		||||
  "status.media_hidden": "Medios ocultos",
 | 
			
		||||
  "status.mention": "Mencionar @{name}",
 | 
			
		||||
  "status.more": "Máis",
 | 
			
		||||
  "status.mute": "Mute @{name}",
 | 
			
		||||
  "status.mute": "Acalar @{name}",
 | 
			
		||||
  "status.mute_conversation": "Acalar conversa",
 | 
			
		||||
  "status.open": "Expandir este estado",
 | 
			
		||||
  "status.pin": "Fixar no perfil",
 | 
			
		||||
 | 
			
		||||
@ -139,6 +139,7 @@
 | 
			
		||||
  "loading_indicator.label": "טוען...",
 | 
			
		||||
  "media_gallery.toggle_visible": "נראה\\בלתי נראה",
 | 
			
		||||
  "missing_indicator.label": "לא נמצא",
 | 
			
		||||
  "missing_indicator.sublabel": "This resource could not be found",
 | 
			
		||||
  "mute_modal.hide_notifications": "להסתיר הודעות מחשבון זה?",
 | 
			
		||||
  "navigation_bar.blocks": "חסימות",
 | 
			
		||||
  "navigation_bar.community_timeline": "ציר זמן מקומי",
 | 
			
		||||
@ -174,7 +175,8 @@
 | 
			
		||||
  "onboarding.page_four.home": "ציר זמן הבית מראה הודעות מהנעקבים שלך.",
 | 
			
		||||
  "onboarding.page_four.notifications": "טור ההתראות מראה כשמישהו מתייחס להודעות שלך.",
 | 
			
		||||
  "onboarding.page_one.federation": "מסטודון היא רשת של שרתים עצמאיים מצורפים ביחד לכדי רשת חברתית אחת גדולה. אנחנו מכנים את השרתים האלו קהילות.",
 | 
			
		||||
  "onboarding.page_one.handle": "אתם בקהילה {domain}, ולכן מזהה המשתמש המלא שלכם הוא {handle}",
 | 
			
		||||
  "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": "ברוכים הבאים למסטודון!",
 | 
			
		||||
  "onboarding.page_six.admin": "הקהילה מנוהלת בידי {admin}.",
 | 
			
		||||
  "onboarding.page_six.almost_done": "כמעט סיימנו...",
 | 
			
		||||
@ -197,6 +199,8 @@
 | 
			
		||||
  "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": "כרגע",
 | 
			
		||||
 | 
			
		||||
@ -139,6 +139,7 @@
 | 
			
		||||
  "loading_indicator.label": "Učitavam...",
 | 
			
		||||
  "media_gallery.toggle_visible": "Preklopi vidljivost",
 | 
			
		||||
  "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.blocks": "Blokirani korisnici",
 | 
			
		||||
  "navigation_bar.community_timeline": "Lokalni timeline",
 | 
			
		||||
@ -174,7 +175,8 @@
 | 
			
		||||
  "onboarding.page_four.home": "The home timeline prikazuje postove ljudi koje slijediš.",
 | 
			
		||||
  "onboarding.page_four.notifications": "Stupac za notifikacije pokazuje poruke drugih upućene tebi.",
 | 
			
		||||
  "onboarding.page_one.federation": "Mastodon čini mreža  neovisnih servera udruženih u jednu veću socialnu mrežu. Te servere nazivamo instancama.",
 | 
			
		||||
  "onboarding.page_one.handle": "Ti si na {domain}, i tvoja puna handle je {handle}",
 | 
			
		||||
  "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": "Dobro došli na Mastodon!",
 | 
			
		||||
  "onboarding.page_six.admin": "Administrator tvoje instance je {admin}.",
 | 
			
		||||
  "onboarding.page_six.almost_done": "Još malo pa gotovo...",
 | 
			
		||||
@ -197,6 +199,8 @@
 | 
			
		||||
  "privacy.public.short": "Javno",
 | 
			
		||||
  "privacy.unlisted.long": "Ne prikazuj u javnim timelineovima",
 | 
			
		||||
  "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",
 | 
			
		||||
 | 
			
		||||
@ -1,251 +1,255 @@
 | 
			
		||||
{
 | 
			
		||||
  "account.block": "Blokkolás",
 | 
			
		||||
  "account.block_domain": "Hide everything from {domain}",
 | 
			
		||||
  "account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
 | 
			
		||||
  "account.block": "@{name} letiltása",
 | 
			
		||||
  "account.block_domain": "Minden elrejtése innen: {domain}",
 | 
			
		||||
  "account.disclaimer_full": "Az alul található információk hiányosan mutathatják be a felhasználót.",
 | 
			
		||||
  "account.edit_profile": "Profil szerkesztése",
 | 
			
		||||
  "account.follow": "Követés",
 | 
			
		||||
  "account.followers": "Követők",
 | 
			
		||||
  "account.follows": "Követve",
 | 
			
		||||
  "account.follows_you": "Követnek téged",
 | 
			
		||||
  "account.hide_reblogs": "Hide boosts from @{name}",
 | 
			
		||||
  "account.media": "Media",
 | 
			
		||||
  "account.mention": "Említés",
 | 
			
		||||
  "account.moved_to": "{name} has moved to:",
 | 
			
		||||
  "account.mute": "Mute @{name}",
 | 
			
		||||
  "account.mute_notifications": "Mute notifications from @{name}",
 | 
			
		||||
  "account.posts": "Posts",
 | 
			
		||||
  "account.report": "Report @{name}",
 | 
			
		||||
  "account.requested": "Awaiting approval",
 | 
			
		||||
  "account.share": "Share @{name}'s profile",
 | 
			
		||||
  "account.show_reblogs": "Show boosts from @{name}",
 | 
			
		||||
  "account.unblock": "Blokkolás levétele",
 | 
			
		||||
  "account.unblock_domain": "Unhide {domain}",
 | 
			
		||||
  "account.hide_reblogs": "@{name} kedvenceinek elrejtése",
 | 
			
		||||
  "account.media": "Média",
 | 
			
		||||
  "account.mention": "@{name} említése",
 | 
			
		||||
  "account.moved_to": "{name} átköltözött:",
 | 
			
		||||
  "account.mute": "@{name} némítása",
 | 
			
		||||
  "account.mute_notifications": "@{name} értesítések némítása",
 | 
			
		||||
  "account.posts": "Státuszok",
 | 
			
		||||
  "account.report": "@{name} jelentése",
 | 
			
		||||
  "account.requested": "Engedélyre vár. Kattintson a követési kérés visszavonására",
 | 
			
		||||
  "account.share": "@{name} profiljának megosztása",
 | 
			
		||||
  "account.show_reblogs": "@{name} kedvenceinek mutatása",
 | 
			
		||||
  "account.unblock": "@{name} kiblokkolása",
 | 
			
		||||
  "account.unblock_domain": "{domain} mutatása",
 | 
			
		||||
  "account.unfollow": "Követés abbahagyása",
 | 
			
		||||
  "account.unmute": "Unmute @{name}",
 | 
			
		||||
  "account.unmute_notifications": "Unmute notifications from @{name}",
 | 
			
		||||
  "account.view_full_profile": "View full profile",
 | 
			
		||||
  "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.favourites": "Favourites",
 | 
			
		||||
  "column.follow_requests": "Follow requests",
 | 
			
		||||
  "account.unmute": "@{name} kinémítása",
 | 
			
		||||
  "account.unmute_notifications": "@{name} értesítéseinek kinémítása",
 | 
			
		||||
  "account.view_full_profile": "Teljes profil megtekintése",
 | 
			
		||||
  "boost_modal.combo": "Megnyomhatod {combo}, hogy átugord következő alkalommal",
 | 
			
		||||
  "bundle_column_error.body": "Hiba történt a komponens betöltése közben.",
 | 
			
		||||
  "bundle_column_error.retry": "Próbálja újra",
 | 
			
		||||
  "bundle_column_error.title": "Hálózati hiba",
 | 
			
		||||
  "bundle_modal_error.close": "Bezár",
 | 
			
		||||
  "bundle_modal_error.message": "Hiba történt a komponens betöltésekor.",
 | 
			
		||||
  "bundle_modal_error.retry": "Próbálja újra",
 | 
			
		||||
  "column.blocks": "Letiltott felhasználók",
 | 
			
		||||
  "column.community": "Helyi idővonal",
 | 
			
		||||
  "column.favourites": "Kedvencek",
 | 
			
		||||
  "column.follow_requests": "Követési kérések",
 | 
			
		||||
  "column.home": "Kezdőlap",
 | 
			
		||||
  "column.lists": "Lists",
 | 
			
		||||
  "column.mutes": "Muted users",
 | 
			
		||||
  "column.lists": "Listák",
 | 
			
		||||
  "column.mutes": "Némított felhasználók",
 | 
			
		||||
  "column.notifications": "Értesítések",
 | 
			
		||||
  "column.pins": "Pinned toot",
 | 
			
		||||
  "column.public": "Nyilvános",
 | 
			
		||||
  "column.pins": "Kitűzött tülkölések",
 | 
			
		||||
  "column.public": "Nyilvános idővonal",
 | 
			
		||||
  "column_back_button.label": "Vissza",
 | 
			
		||||
  "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.navigation": "Navigation",
 | 
			
		||||
  "column_subheading.settings": "Settings",
 | 
			
		||||
  "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",
 | 
			
		||||
  "column_header.hide_settings": "Beállítások elrejtése",
 | 
			
		||||
  "column_header.moveLeft_settings": "Oszlop elmozdítása balra",
 | 
			
		||||
  "column_header.moveRight_settings": "oszlop elmozdítása jobbra",
 | 
			
		||||
  "column_header.pin": "Kitűz",
 | 
			
		||||
  "column_header.show_settings": "Beállítások mutatása",
 | 
			
		||||
  "column_header.unpin": "Kitűzés eltávolítása",
 | 
			
		||||
  "column_subheading.navigation": "Navigáció",
 | 
			
		||||
  "column_subheading.settings": "Beállítások",
 | 
			
		||||
  "compose_form.hashtag_warning": "Ezen tülkölés nem fog megjelenni semmilyen hashtag alatt mivel listázatlan. Csak a publikus tülkölések kereshetőek hashtag-el.",
 | 
			
		||||
  "compose_form.lock_disclaimer": "Az ön fiókja nincs {locked}. Bárki követni tud, hogy megtekintse a kizárt követőknek szánt üzeneteid.",
 | 
			
		||||
  "compose_form.lock_disclaimer.lock": "lezárva",
 | 
			
		||||
  "compose_form.placeholder": "Mire gondolsz?",
 | 
			
		||||
  "compose_form.publish": "Tülk!",
 | 
			
		||||
  "compose_form.publish": "Tülk",
 | 
			
		||||
  "compose_form.publish_loud": "{publish}!",
 | 
			
		||||
  "compose_form.sensitive": "Tartalom érzékenynek jelölése",
 | 
			
		||||
  "compose_form.spoiler": "Hide text behind warning",
 | 
			
		||||
  "compose_form.spoiler_placeholder": "Content warning",
 | 
			
		||||
  "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.",
 | 
			
		||||
  "confirmations.mute.confirm": "Mute",
 | 
			
		||||
  "confirmations.mute.message": "Are you sure you want to mute {name}?",
 | 
			
		||||
  "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.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.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.appsshort": "Apps",
 | 
			
		||||
  "getting_started.faq": "FAQ",
 | 
			
		||||
  "compose_form.spoiler": "Szöveg figyelmeztetés mögé rejtése",
 | 
			
		||||
  "compose_form.spoiler_placeholder": "Figyelmeztetését írja ide",
 | 
			
		||||
  "confirmation_modal.cancel": "Bezár",
 | 
			
		||||
  "confirmations.block.confirm": "Letilt",
 | 
			
		||||
  "confirmations.block.message": "Biztos benne, hogy le szeretné tiltani {name}?",
 | 
			
		||||
  "confirmations.delete.confirm": "Töröl",
 | 
			
		||||
  "confirmations.delete.message": "Biztos benne, hogy törölni szeretné ezt a státuszt?",
 | 
			
		||||
  "confirmations.delete_list.confirm": "Töröl",
 | 
			
		||||
  "confirmations.delete_list.message": "Biztos benne, hogy véglegesen törölni szeretné ezt a listát?",
 | 
			
		||||
  "confirmations.domain_block.confirm": "Egész domain elrejtése",
 | 
			
		||||
  "confirmations.domain_block.message": "Nagyon biztos abban, hogy le szeretné tiltani az egész {domain}-t? A legtöbb esetben néhány célszerű tiltás vagy némítás elegendő és kívánatosabb megoldás.",
 | 
			
		||||
  "confirmations.mute.confirm": "Némít",
 | 
			
		||||
  "confirmations.mute.message": "Biztos benne, hogy némítani szeretné {name}?",
 | 
			
		||||
  "confirmations.unfollow.confirm": "Követés visszavonása",
 | 
			
		||||
  "confirmations.unfollow.message": "Biztos benne, hogy vissza szeretné vonni {name} követését?",
 | 
			
		||||
  "embed.instructions": "Ágyazza be ezen státuszt weboldalába az alábbi kód másolásával.",
 | 
			
		||||
  "embed.preview": "Így fog kinézni:",
 | 
			
		||||
  "emoji_button.activity": "Aktivitás",
 | 
			
		||||
  "emoji_button.custom": "Egyéni",
 | 
			
		||||
  "emoji_button.flags": "Zászlók",
 | 
			
		||||
  "emoji_button.food": "Étel és Ital",
 | 
			
		||||
  "emoji_button.label": "Emoji beszúrása",
 | 
			
		||||
  "emoji_button.nature": "Természet",
 | 
			
		||||
  "emoji_button.not_found": "Nincsenek emojok!! (╯°□°)╯︵ ┻━┻",
 | 
			
		||||
  "emoji_button.objects": "Tárgyak",
 | 
			
		||||
  "emoji_button.people": "Emberek",
 | 
			
		||||
  "emoji_button.recent": "Gyakran használt",
 | 
			
		||||
  "emoji_button.search": "Keresés...",
 | 
			
		||||
  "emoji_button.search_results": "Keresési találatok",
 | 
			
		||||
  "emoji_button.symbols": "Szimbólumok",
 | 
			
		||||
  "emoji_button.travel": "Utazás és Helyek",
 | 
			
		||||
  "empty_column.community": "A helyi idővonal üres. Írj egy publikus stástuszt, hogy elindítsd a labdát!",
 | 
			
		||||
  "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.notifications": "Jelenleg nincsenek értesítései. Lépj kapcsolatba másokkal, hogy indítsd el a beszélgetést.",
 | 
			
		||||
  "empty_column.public": "Jelenleg semmi nincs itt! Írj valamit publikusan vagy kövess más szervereken levő felhasználókat, hogy megtöltsd",
 | 
			
		||||
  "follow_request.authorize": "Engedélyez",
 | 
			
		||||
  "follow_request.reject": "Visszautasít",
 | 
			
		||||
  "getting_started.appsshort": "Applikációk",
 | 
			
		||||
  "getting_started.faq": "GYIK",
 | 
			
		||||
  "getting_started.heading": "Első lépések",
 | 
			
		||||
  "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.",
 | 
			
		||||
  "getting_started.userguide": "User Guide",
 | 
			
		||||
  "home.column_settings.advanced": "Advanced",
 | 
			
		||||
  "home.column_settings.basic": "Basic",
 | 
			
		||||
  "home.column_settings.filter_regex": "Filter out by regular expressions",
 | 
			
		||||
  "home.column_settings.show_reblogs": "Show boosts",
 | 
			
		||||
  "home.column_settings.show_replies": "Show replies",
 | 
			
		||||
  "home.settings": "Column settings",
 | 
			
		||||
  "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.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",
 | 
			
		||||
  "getting_started.open_source_notice": "Mastodon egy nyílt forráskódú szoftver. Hozzájárulás vagy problémák jelentése a GitHub-on {github}.",
 | 
			
		||||
  "getting_started.userguide": "Használati Útmutató",
 | 
			
		||||
  "home.column_settings.advanced": "Fejlett",
 | 
			
		||||
  "home.column_settings.basic": "Alap",
 | 
			
		||||
  "home.column_settings.filter_regex": "Szűrje ki reguláris kifejezésekkel",
 | 
			
		||||
  "home.column_settings.show_reblogs": "Ismétlések mutatása",
 | 
			
		||||
  "home.column_settings.show_replies": "Válaszok mutatása",
 | 
			
		||||
  "home.settings": "Oszlop beállításai",
 | 
			
		||||
  "keyboard_shortcuts.back": "vissza navigálás",
 | 
			
		||||
  "keyboard_shortcuts.boost": "ismétlés",
 | 
			
		||||
  "keyboard_shortcuts.column": "összpontosítson egy státuszra az egyik oszlopban",
 | 
			
		||||
  "keyboard_shortcuts.compose": "fókuszálja a szerkesztési szövegdobozt",
 | 
			
		||||
  "keyboard_shortcuts.description": "Leírás",
 | 
			
		||||
  "keyboard_shortcuts.down": "lefele navigálás a listában",
 | 
			
		||||
  "keyboard_shortcuts.enter": "státusz megnyitása",
 | 
			
		||||
  "keyboard_shortcuts.favourite": "kedvenccé tétel",
 | 
			
		||||
  "keyboard_shortcuts.heading": "Billentyű rövidítések",
 | 
			
		||||
  "keyboard_shortcuts.hotkey": "Gyorsbillentyű",
 | 
			
		||||
  "keyboard_shortcuts.legend": "jelmagyarázat megjelenítése",
 | 
			
		||||
  "keyboard_shortcuts.mention": "szerző megjelenítése",
 | 
			
		||||
  "keyboard_shortcuts.reply": "válaszolás",
 | 
			
		||||
  "keyboard_shortcuts.search": "kereső kiemelése",
 | 
			
		||||
  "keyboard_shortcuts.toot": "új tülk megkezdése",
 | 
			
		||||
  "keyboard_shortcuts.unfocus": "tülk szerkesztés/keresés fókuszpontból való kivétele",
 | 
			
		||||
  "keyboard_shortcuts.up": "fennebb helyezés a listában",
 | 
			
		||||
  "lightbox.close": "Bezárás",
 | 
			
		||||
  "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": "Következő",
 | 
			
		||||
  "lightbox.previous": "Előző",
 | 
			
		||||
  "lists.account.add": "Hozzáadás a listához",
 | 
			
		||||
  "lists.account.remove": "Eltávolít a listából",
 | 
			
		||||
  "lists.delete": "Lista törlése",
 | 
			
		||||
  "lists.edit": "Lista szerkesztése",
 | 
			
		||||
  "lists.new.create": "Lista hozzáadása",
 | 
			
		||||
  "lists.new.title_placeholder": "Új lista cím",
 | 
			
		||||
  "lists.search": "Keresés a követtett személyek között",
 | 
			
		||||
  "lists.subheading": "Listáid",
 | 
			
		||||
  "loading_indicator.label": "Betöltés...",
 | 
			
		||||
  "media_gallery.toggle_visible": "Toggle visibility",
 | 
			
		||||
  "missing_indicator.label": "Not found",
 | 
			
		||||
  "mute_modal.hide_notifications": "Hide notifications from this user?",
 | 
			
		||||
  "navigation_bar.blocks": "Blocked users",
 | 
			
		||||
  "navigation_bar.community_timeline": "Local timeline",
 | 
			
		||||
  "media_gallery.toggle_visible": "Láthatóság váltása",
 | 
			
		||||
  "missing_indicator.label": "Nincs találat",
 | 
			
		||||
  "missing_indicator.sublabel": "Ezen forrás nem található",
 | 
			
		||||
  "mute_modal.hide_notifications": "Értesítések elrejtése ezen felhasználótól?",
 | 
			
		||||
  "navigation_bar.blocks": "Tiltott felhasználók",
 | 
			
		||||
  "navigation_bar.community_timeline": "Helyi idővonal",
 | 
			
		||||
  "navigation_bar.edit_profile": "Profil szerkesztése",
 | 
			
		||||
  "navigation_bar.favourites": "Favourites",
 | 
			
		||||
  "navigation_bar.follow_requests": "Follow requests",
 | 
			
		||||
  "navigation_bar.info": "Extended information",
 | 
			
		||||
  "navigation_bar.keyboard_shortcuts": "Keyboard shortcuts",
 | 
			
		||||
  "navigation_bar.lists": "Lists",
 | 
			
		||||
  "navigation_bar.favourites": "Kedvencek",
 | 
			
		||||
  "navigation_bar.follow_requests": "Követési kérések",
 | 
			
		||||
  "navigation_bar.info": "Ezen szerverről",
 | 
			
		||||
  "navigation_bar.keyboard_shortcuts": "Gyorsbillentyűk",
 | 
			
		||||
  "navigation_bar.lists": "Listák",
 | 
			
		||||
  "navigation_bar.logout": "Kijelentkezés",
 | 
			
		||||
  "navigation_bar.mutes": "Muted users",
 | 
			
		||||
  "navigation_bar.pins": "Pinned toots",
 | 
			
		||||
  "navigation_bar.mutes": "Némított felhasználók",
 | 
			
		||||
  "navigation_bar.pins": "Kitűzött tülkök",
 | 
			
		||||
  "navigation_bar.preferences": "Beállítások",
 | 
			
		||||
  "navigation_bar.public_timeline": "Nyilvános időfolyam",
 | 
			
		||||
  "notification.favourite": "{name} kedvencnek jelölte az állapotod",
 | 
			
		||||
  "notification.follow": "{name} követ téged",
 | 
			
		||||
  "notification.mention": "{name} megemlített",
 | 
			
		||||
  "notification.reblog": "{name} reblogolta az állapotod",
 | 
			
		||||
  "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",
 | 
			
		||||
  "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.handle": "You are on {domain}, so your full handle is {handle}",
 | 
			
		||||
  "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.",
 | 
			
		||||
  "notification.reblog": "{name} rebloggolta az állapotod",
 | 
			
		||||
  "notifications.clear": "Értesítések törlése",
 | 
			
		||||
  "notifications.clear_confirmation": "Biztos benne, hogy véglegesen törölni akarja az összes értesítését?",
 | 
			
		||||
  "notifications.column_settings.alert": "Asztali gépi értesítések",
 | 
			
		||||
  "notifications.column_settings.favourite": "Kedvencek:",
 | 
			
		||||
  "notifications.column_settings.follow": "Új követők:",
 | 
			
		||||
  "notifications.column_settings.mention": "Megemítéseim:",
 | 
			
		||||
  "notifications.column_settings.push": "Push értesítések",
 | 
			
		||||
  "notifications.column_settings.push_meta": "Ezen eszköz",
 | 
			
		||||
  "notifications.column_settings.reblog": "Rebloggolások:",
 | 
			
		||||
  "notifications.column_settings.show": "Oszlopban mutatás",
 | 
			
		||||
  "notifications.column_settings.sound": "Hang lejátszása",
 | 
			
		||||
  "onboarding.done": "Befejezve",
 | 
			
		||||
  "onboarding.next": "Következő",
 | 
			
		||||
  "onboarding.page_five.public_timelines": "A helyi idővonal mindenkinek a publikus posztját mutatja a(z) {domain}-n. A federált idővonal mindenki publikus posztját mutatja akit {domain} felhasználói követnek. Ezek a publikus idővonalak, nagyszerű mód új emberek megismerésére.",
 | 
			
		||||
  "onboarding.page_four.home": "A hazai idővonal azon emberek posztjait mutatja akiket te követsz.",
 | 
			
		||||
  "onboarding.page_four.notifications": "Az értesítések oszlop más felhasználók interakcióját veled tükrözi.",
 | 
			
		||||
  "onboarding.page_one.federation": "Mastodon egy független szerverekből alkotott hálózat melyek együttműködése egy nagy szociális hálót képez. Ezeket a szervereket instanciáknak hívjuk.",
 | 
			
		||||
  "onboarding.page_one.full_handle": "Teljes elérhetőséged",
 | 
			
		||||
  "onboarding.page_one.handle_hint": "Ez az amit a barátaidnak mondasz ha meg akarnak keresni.",
 | 
			
		||||
  "onboarding.page_one.welcome": "Üdvözölünk a Mastodon-on!",
 | 
			
		||||
  "onboarding.page_six.admin": "Az instanciád adminisztrátora {admin}.",
 | 
			
		||||
  "onboarding.page_six.almost_done": "Majdnem megvan...",
 | 
			
		||||
  "onboarding.page_six.appetoot": "Bon Appetülk!",
 | 
			
		||||
  "onboarding.page_six.apps_available": "Vannak {apps} iOS-re, Androidra és más platformokra is.",
 | 
			
		||||
  "onboarding.page_six.github": "Mastodon egy szabad és nyílt-forráskódú szoftver. Jelentheted a bug-okat, kérhetsz új funkcionalitásokat vagy hozzájárulhatsz a kódhoz {github}-on.",
 | 
			
		||||
  "onboarding.page_six.guidelines": "közösségi útmutató",
 | 
			
		||||
  "onboarding.page_six.read_guidelines": "Kérjük olvassa el a(z) {domain}-nak a {guidelines}ját!",
 | 
			
		||||
  "onboarding.page_six.various_app": "alkalmazások",
 | 
			
		||||
  "onboarding.page_three.profile": "Módosítsa a profilját, hogy megváltoztassa az avatárt, bio-t vagy nevet. Ott megtalálja a többi beállítást is.",
 | 
			
		||||
  "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",
 | 
			
		||||
  "onboarding.skip": "Átugrás",
 | 
			
		||||
  "privacy.change": "Státusz láthatóságának módosítása",
 | 
			
		||||
  "privacy.direct.long": "Posztolás csak az említett felhasználóknak",
 | 
			
		||||
  "privacy.direct.short": "Egyenesen",
 | 
			
		||||
  "privacy.private.long": "Posztolás csak követőknek",
 | 
			
		||||
  "privacy.private.short": "Csak követőknek",
 | 
			
		||||
  "privacy.public.long": "Posztolás a publikus idővonalakra",
 | 
			
		||||
  "privacy.public.short": "Publikus",
 | 
			
		||||
  "privacy.unlisted.long": "Do not show in public timelines",
 | 
			
		||||
  "privacy.unlisted.short": "Unlisted",
 | 
			
		||||
  "privacy.unlisted.short": "Listázatlan",
 | 
			
		||||
  "regeneration_indicator.label": "Töltődik…",
 | 
			
		||||
  "regeneration_indicator.sublabel": "Your home feed is being prepared!",
 | 
			
		||||
  "relative_time.days": "{number}d",
 | 
			
		||||
  "relative_time.hours": "{number}h",
 | 
			
		||||
  "relative_time.just_now": "now",
 | 
			
		||||
  "relative_time.just_now": "most",
 | 
			
		||||
  "relative_time.minutes": "{number}m",
 | 
			
		||||
  "relative_time.seconds": "{number}s",
 | 
			
		||||
  "reply_indicator.cancel": "Mégsem",
 | 
			
		||||
  "report.placeholder": "Additional comments",
 | 
			
		||||
  "report.placeholder": "További kommentek",
 | 
			
		||||
  "report.submit": "Submit",
 | 
			
		||||
  "report.target": "Reporting",
 | 
			
		||||
  "search.placeholder": "Keresés",
 | 
			
		||||
  "search_popout.search_format": "Advanced search format",
 | 
			
		||||
  "search_popout.search_format": "Fejlett keresés",
 | 
			
		||||
  "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_popout.tips.user": "felhasználó",
 | 
			
		||||
  "search_results.total": "{count, number} {count, plural, one {result} other {results}}",
 | 
			
		||||
  "standalone.public_title": "A look inside...",
 | 
			
		||||
  "standalone.public_title": "Betekintés...",
 | 
			
		||||
  "status.block": "Block @{name}",
 | 
			
		||||
  "status.cannot_reblog": "This post cannot be boosted",
 | 
			
		||||
  "status.cannot_reblog": "Ezen státusz nem rebloggolható",
 | 
			
		||||
  "status.delete": "Törlés",
 | 
			
		||||
  "status.embed": "Embed",
 | 
			
		||||
  "status.embed": "Beágyaz",
 | 
			
		||||
  "status.favourite": "Kedvenc",
 | 
			
		||||
  "status.load_more": "Load more",
 | 
			
		||||
  "status.media_hidden": "Media hidden",
 | 
			
		||||
  "status.load_more": "Többet",
 | 
			
		||||
  "status.media_hidden": "Média elrejtve",
 | 
			
		||||
  "status.mention": "Említés",
 | 
			
		||||
  "status.more": "More",
 | 
			
		||||
  "status.mute": "Mute @{name}",
 | 
			
		||||
  "status.mute_conversation": "Mute conversation",
 | 
			
		||||
  "status.open": "Expand this status",
 | 
			
		||||
  "status.pin": "Pin on profile",
 | 
			
		||||
  "status.more": "Többet",
 | 
			
		||||
  "status.mute": "@{name} némítása",
 | 
			
		||||
  "status.mute_conversation": "Beszélgetés némítása",
 | 
			
		||||
  "status.open": "Státusz kinagyítása",
 | 
			
		||||
  "status.pin": "Kitűzés a profilra",
 | 
			
		||||
  "status.reblog": "Reblog",
 | 
			
		||||
  "status.reblogged_by": "{name} reblogolta",
 | 
			
		||||
  "status.reply": "Válasz",
 | 
			
		||||
  "status.replyAll": "Reply to thread",
 | 
			
		||||
  "status.replyAll": "Válaszolj a beszélgetésre",
 | 
			
		||||
  "status.report": "Report @{name}",
 | 
			
		||||
  "status.sensitive_toggle": "Katt a megtekintéshez",
 | 
			
		||||
  "status.sensitive_warning": "Érzékeny tartalom",
 | 
			
		||||
  "status.share": "Share",
 | 
			
		||||
  "status.show_less": "Show less",
 | 
			
		||||
  "status.show_more": "Show more",
 | 
			
		||||
  "status.unmute_conversation": "Unmute conversation",
 | 
			
		||||
  "status.unpin": "Unpin from profile",
 | 
			
		||||
  "status.share": "Megosztás",
 | 
			
		||||
  "status.show_less": "Kevesebb",
 | 
			
		||||
  "status.show_more": "Többet",
 | 
			
		||||
  "status.unmute_conversation": "Beszélgetés némításának elvonása",
 | 
			
		||||
  "status.unpin": "Kitűzés eltávolítása a profilról",
 | 
			
		||||
  "tabs_bar.compose": "Összeállítás",
 | 
			
		||||
  "tabs_bar.federated_timeline": "Federated",
 | 
			
		||||
  "tabs_bar.federated_timeline": "Federált",
 | 
			
		||||
  "tabs_bar.home": "Kezdőlap",
 | 
			
		||||
  "tabs_bar.local_timeline": "Local",
 | 
			
		||||
  "tabs_bar.notifications": "Notifications",
 | 
			
		||||
  "ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
 | 
			
		||||
  "upload_area.title": "Drag & drop to upload",
 | 
			
		||||
  "tabs_bar.notifications": "Értesítések",
 | 
			
		||||
  "ui.beforeunload": "A piszkozata el fog vesztődni ha elhagyja Mastodon-t.",
 | 
			
		||||
  "upload_area.title": "Húzza ide a feltöltéshez",
 | 
			
		||||
  "upload_button.label": "Média hozzáadása",
 | 
			
		||||
  "upload_form.description": "Describe for the visually impaired",
 | 
			
		||||
  "upload_form.undo": "Mégsem",
 | 
			
		||||
@ -256,7 +260,7 @@
 | 
			
		||||
  "video.fullscreen": "Full screen",
 | 
			
		||||
  "video.hide": "Hide video",
 | 
			
		||||
  "video.mute": "Mute sound",
 | 
			
		||||
  "video.pause": "Pause",
 | 
			
		||||
  "video.play": "Play",
 | 
			
		||||
  "video.unmute": "Unmute sound"
 | 
			
		||||
  "video.pause": "Szünet",
 | 
			
		||||
  "video.play": "Lejátszás",
 | 
			
		||||
  "video.unmute": "Hang kinémítása"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										266
									
								
								app/javascript/mastodon/locales/hy.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,266 @@
 | 
			
		||||
{
 | 
			
		||||
  "account.block": "Արգելափակել @{name}֊ին",
 | 
			
		||||
  "account.block_domain": "Թաքցնել ամենը հետեւյալ տիրույթից՝ {domain}",
 | 
			
		||||
  "account.disclaimer_full": "Ներքոհիշյալը կարող է ոչ ամբողջությամբ արտացոլել օգտատիրոջ էջի տվյալները։",
 | 
			
		||||
  "account.edit_profile": "Խմբագրել անձնական էջը",
 | 
			
		||||
  "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.posts": "Գրառումներ",
 | 
			
		||||
  "account.report": "Բողոքել @{name}֊ից",
 | 
			
		||||
  "account.requested": "Հաստատման կարիք ունի։ Սեղմիր՝ հետեւելու հայցը չեղարկելու համար։",
 | 
			
		||||
  "account.share": "Կիսվել @{name}֊ի էջով",
 | 
			
		||||
  "account.show_reblogs": "Ցուցադրել @{name}֊ի տարածածները",
 | 
			
		||||
  "account.unblock": "Ապաարգելափակել @{name}֊ին",
 | 
			
		||||
  "account.unblock_domain": "Ցուցադրել {domain} թաքցված տիրույթի գրառումները",
 | 
			
		||||
  "account.unfollow": "Չհետեւել",
 | 
			
		||||
  "account.unmute": "Ապալռեցնել @{name}֊ին",
 | 
			
		||||
  "account.unmute_notifications": "Միացնել ծանուցումները @{name}֊ից",
 | 
			
		||||
  "account.view_full_profile": "Դիտել ամբողջական տարբերակը։",
 | 
			
		||||
  "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.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.navigation": "Նավարկություն",
 | 
			
		||||
  "column_subheading.settings": "Կարգավորումներ",
 | 
			
		||||
  "compose_form.hashtag_warning": "Այս թութը չի հաշվառվի որեւէ պիտակի տակ, քանզի այն ծածուկ է։ Միայն հրապարակային թթերը հնարավոր է որոնել պիտակներով։",
 | 
			
		||||
  "compose_form.lock_disclaimer": "Քո հաշիվը {locked} չէ։ Յուրաքանչյուր ոք կարող է հետեւել քեզ եւ տեսնել միայն հետեւողների համար նախատեսված գրառումները։",
 | 
			
		||||
  "compose_form.lock_disclaimer.lock": "փակ",
 | 
			
		||||
  "compose_form.placeholder": "Ի՞նչ կա մտքիդ",
 | 
			
		||||
  "compose_form.publish": "Թթել",
 | 
			
		||||
  "compose_form.publish_loud": "Թթե՜լ",
 | 
			
		||||
  "compose_form.sensitive": "Նշել բովանդակությունը որպես կասկածելի",
 | 
			
		||||
  "compose_form.spoiler": "Թաքցնել տեքստը նախազգուշացման ետեւում",
 | 
			
		||||
  "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.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.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.appsshort": "Հավելվածներ",
 | 
			
		||||
  "getting_started.faq": "ՀՏՀ",
 | 
			
		||||
  "getting_started.heading": "Ինչպես սկսել",
 | 
			
		||||
  "getting_started.open_source_notice": "Մաստոդոնը բաց ելատեքստով ծրագրակազմ է։ Կարող ես ներդրում անել կամ վրեպներ զեկուցել ԳիթՀաբում՝ {github}։",
 | 
			
		||||
  "getting_started.userguide": "Ձեռնարկ",
 | 
			
		||||
  "home.column_settings.advanced": "Առաջադեմ",
 | 
			
		||||
  "home.column_settings.basic": "Հիմնական",
 | 
			
		||||
  "home.column_settings.filter_regex": "Զտել օրինաչափ արտահայտությամբ",
 | 
			
		||||
  "home.column_settings.show_reblogs": "Ցուցադրել տարածածները",
 | 
			
		||||
  "home.column_settings.show_replies": "Ցուցադրել պատասխանները",
 | 
			
		||||
  "home.settings": "Սյան կարգավորումներ",
 | 
			
		||||
  "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.reply": "պատասխանելու համար",
 | 
			
		||||
  "keyboard_shortcuts.search": "որոնման դաշտին սեւեռվելու համար",
 | 
			
		||||
  "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": "This resource could not be found",
 | 
			
		||||
  "mute_modal.hide_notifications": "Թաքցնե՞լ ցանուցումներն այս օգտատիրոջից։",
 | 
			
		||||
  "navigation_bar.blocks": "Արգելափակված օգտատերեր",
 | 
			
		||||
  "navigation_bar.community_timeline": "Տեղական հոսք",
 | 
			
		||||
  "navigation_bar.edit_profile": "Խմբագրել անձնական էջը",
 | 
			
		||||
  "navigation_bar.favourites": "Հավանածներ",
 | 
			
		||||
  "navigation_bar.follow_requests": "Հետեւելու հայցեր",
 | 
			
		||||
  "navigation_bar.info": "Այս հանգույցի մասին",
 | 
			
		||||
  "navigation_bar.keyboard_shortcuts": "Ստեղնաշարի կարճատներ",
 | 
			
		||||
  "navigation_bar.lists": "Ցանկեր",
 | 
			
		||||
  "navigation_bar.logout": "Դուրս գալ",
 | 
			
		||||
  "navigation_bar.mutes": "Լռեցրած օգտատերեր",
 | 
			
		||||
  "navigation_bar.pins": "Ամրացված թթեր",
 | 
			
		||||
  "navigation_bar.preferences": "Նախապատվություններ",
 | 
			
		||||
  "navigation_bar.public_timeline": "Դաշնային հոսք",
 | 
			
		||||
  "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": "Ձայն հանել",
 | 
			
		||||
  "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": "Loading…",
 | 
			
		||||
  "regeneration_indicator.sublabel": "Your home feed is being prepared!",
 | 
			
		||||
  "relative_time.days": "{number}օր",
 | 
			
		||||
  "relative_time.hours": "{number}ժ",
 | 
			
		||||
  "relative_time.just_now": "նոր",
 | 
			
		||||
  "relative_time.minutes": "{number}ր",
 | 
			
		||||
  "relative_time.seconds": "{number}վ",
 | 
			
		||||
  "reply_indicator.cancel": "Չեղարկել",
 | 
			
		||||
  "report.placeholder": "Լրացուցիչ մեկնաբանություններ",
 | 
			
		||||
  "report.submit": "Ուղարկել",
 | 
			
		||||
  "report.target": "Բողոքել {target}֊ի մասին",
 | 
			
		||||
  "search.placeholder": "Փնտրել",
 | 
			
		||||
  "search_popout.search_format": "Փնտրելու առաջադեմ ձեւ",
 | 
			
		||||
  "search_popout.tips.hashtag": "պիտակ",
 | 
			
		||||
  "search_popout.tips.status": "թութ",
 | 
			
		||||
  "search_popout.tips.text": "Հասարակ տեքստը կվերադարձնի համընկնող անուններ, օգտանուններ ու պիտակներ",
 | 
			
		||||
  "search_popout.tips.user": "օգտատեր",
 | 
			
		||||
  "search_results.total": "{count, number} {count, plural, one {result} other {results}}",
 | 
			
		||||
  "standalone.public_title": "Այս պահին…",
 | 
			
		||||
  "status.block": "Արգելափակել @{name}֊ին",
 | 
			
		||||
  "status.cannot_reblog": "Այս թութը չի կարող տարածվել",
 | 
			
		||||
  "status.delete": "Ջնջել",
 | 
			
		||||
  "status.embed": "Ներդնել",
 | 
			
		||||
  "status.favourite": "Հավանել",
 | 
			
		||||
  "status.load_more": "Բեռնել ավելին",
 | 
			
		||||
  "status.media_hidden": "մեդիաբովանդակությունը թաքցված է",
 | 
			
		||||
  "status.mention": "Նշել @{name}֊ին",
 | 
			
		||||
  "status.more": "Ավելին",
 | 
			
		||||
  "status.mute": "Լռեցնել @{name}֊ին",
 | 
			
		||||
  "status.mute_conversation": "Լռեցնել խոսակցությունը",
 | 
			
		||||
  "status.open": "Ընդարձակել այս թութը",
 | 
			
		||||
  "status.pin": "Ամրացնել անձնական էջում",
 | 
			
		||||
  "status.reblog": "Տարածել",
 | 
			
		||||
  "status.reblogged_by": "{name} տարածել է",
 | 
			
		||||
  "status.reply": "Պատասխանել",
 | 
			
		||||
  "status.replyAll": "Պատասխանել թելին",
 | 
			
		||||
  "status.report": "Բողոքել @{name}֊ից",
 | 
			
		||||
  "status.sensitive_toggle": "Կտացրու՝ դիտելու համար",
 | 
			
		||||
  "status.sensitive_warning": "Կասկածելի բովանդակություն",
 | 
			
		||||
  "status.share": "Կիսվել",
 | 
			
		||||
  "status.show_less": "Պակաս",
 | 
			
		||||
  "status.show_more": "Ավելին",
 | 
			
		||||
  "status.unmute_conversation": "Ապալռեցնել խոսակցությունը",
 | 
			
		||||
  "status.unpin": "Հանել անձնական էջից",
 | 
			
		||||
  "tabs_bar.compose": "Շարադրել",
 | 
			
		||||
  "tabs_bar.federated_timeline": "Դաշնային",
 | 
			
		||||
  "tabs_bar.home": "Հիմնական",
 | 
			
		||||
  "tabs_bar.local_timeline": "Տեղական",
 | 
			
		||||
  "tabs_bar.notifications": "Ծանուցումներ",
 | 
			
		||||
  "ui.beforeunload": "Քո սեւագիրը կկորի, եթե լքես Մաստոդոնը։",
 | 
			
		||||
  "upload_area.title": "Քաշիր ու նետիր՝ վերբեռնելու համար",
 | 
			
		||||
  "upload_button.label": "Ավելացնել մեդիա",
 | 
			
		||||
  "upload_form.description": "Նկարագրություն ավելացրու տեսողական խնդիրներ ունեցողների համար",
 | 
			
		||||
  "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": "Միացնել ձայնը"
 | 
			
		||||
}
 | 
			
		||||
@ -139,6 +139,7 @@
 | 
			
		||||
  "loading_indicator.label": "Tunggu sebentar...",
 | 
			
		||||
  "media_gallery.toggle_visible": "Tampil/Sembunyikan",
 | 
			
		||||
  "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.blocks": "Pengguna diblokir",
 | 
			
		||||
  "navigation_bar.community_timeline": "Linimasa lokal",
 | 
			
		||||
@ -174,7 +175,8 @@
 | 
			
		||||
  "onboarding.page_four.home": "Linimasa beranda menampilkan postingan dari orang-orang yang anda ikuti.",
 | 
			
		||||
  "onboarding.page_four.notifications": "Kolom notifikasi menampilkan ketika seseorang berinteraksi dengan anda.",
 | 
			
		||||
  "onboarding.page_one.federation": "Mastodon adalah jaringan dari beberapa server independen yang bergabung untuk membuat jejaring sosial yang besar.",
 | 
			
		||||
  "onboarding.page_one.handle": "Ada berada dalam {domain}, jadi nama user lengkap anda adalah {handle}",
 | 
			
		||||
  "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": "Selamat datang di Mastodon!",
 | 
			
		||||
  "onboarding.page_six.admin": "Admin serveer anda adalah {admin}.",
 | 
			
		||||
  "onboarding.page_six.almost_done": "Hampir selesei...",
 | 
			
		||||
@ -197,6 +199,8 @@
 | 
			
		||||
  "privacy.public.short": "Publik",
 | 
			
		||||
  "privacy.unlisted.long": "Tidak ditampilkan di linimasa publik",
 | 
			
		||||
  "privacy.unlisted.short": "Tak Terdaftar",
 | 
			
		||||
  "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",
 | 
			
		||||
 | 
			
		||||
@ -139,6 +139,7 @@
 | 
			
		||||
  "loading_indicator.label": "Kargante...",
 | 
			
		||||
  "media_gallery.toggle_visible": "Chanjar videbleso",
 | 
			
		||||
  "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.blocks": "Blokusita uzeri",
 | 
			
		||||
  "navigation_bar.community_timeline": "Lokala tempolineo",
 | 
			
		||||
@ -174,7 +175,8 @@
 | 
			
		||||
  "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.handle": "You are on {domain}, so your full handle is {handle}",
 | 
			
		||||
  "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...",
 | 
			
		||||
@ -197,6 +199,8 @@
 | 
			
		||||
  "privacy.public.short": "Publike",
 | 
			
		||||
  "privacy.unlisted.long": "Ne montrar en publika tempolinei",
 | 
			
		||||
  "privacy.unlisted.short": "Ne enlistigota",
 | 
			
		||||
  "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",
 | 
			
		||||
 | 
			
		||||
@ -139,6 +139,7 @@
 | 
			
		||||
  "loading_indicator.label": "Carico...",
 | 
			
		||||
  "media_gallery.toggle_visible": "Imposta visibilità",
 | 
			
		||||
  "missing_indicator.label": "Non trovato",
 | 
			
		||||
  "missing_indicator.sublabel": "This resource could not be found",
 | 
			
		||||
  "mute_modal.hide_notifications": "Hide notifications from this user?",
 | 
			
		||||
  "navigation_bar.blocks": "Utenti bloccati",
 | 
			
		||||
  "navigation_bar.community_timeline": "Timeline locale",
 | 
			
		||||
@ -174,7 +175,8 @@
 | 
			
		||||
  "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.handle": "You are on {domain}, so your full handle is {handle}",
 | 
			
		||||
  "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...",
 | 
			
		||||
@ -197,6 +199,8 @@
 | 
			
		||||
  "privacy.public.short": "Pubblico",
 | 
			
		||||
  "privacy.unlisted.long": "Non mostrare sulla timeline pubblica",
 | 
			
		||||
  "privacy.unlisted.short": "Non elencato",
 | 
			
		||||
  "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",
 | 
			
		||||
 | 
			
		||||