Merge pull request #794 from ThibG/glitch-soc/merge-upstream
Merge upstream changes
This commit is contained in:
		
						commit
						f945bbac81
					
				
					 146 changed files with 594 additions and 691 deletions
				
			
		|  | @ -13,8 +13,8 @@ aliases: | ||||||
|           ALLOW_NOPAM: true |           ALLOW_NOPAM: true | ||||||
|           CONTINUOUS_INTEGRATION: true |           CONTINUOUS_INTEGRATION: true | ||||||
|           DISABLE_SIMPLECOV: true |           DISABLE_SIMPLECOV: true | ||||||
|           PAM_ENABLED: true	 |           PAM_ENABLED: true | ||||||
|           PAM_DEFAULT_SERVICE: pam_test	 |           PAM_DEFAULT_SERVICE: pam_test | ||||||
|           PAM_CONTROLLED_SERVICE: pam_test_controlled |           PAM_CONTROLLED_SERVICE: pam_test_controlled | ||||||
|     working_directory: ~/projects/mastodon/ |     working_directory: ~/projects/mastodon/ | ||||||
| 
 | 
 | ||||||
|  | @ -178,6 +178,8 @@ jobs: | ||||||
|       - *attach_workspace |       - *attach_workspace | ||||||
|       - run: bundle exec i18n-tasks check-normalized |       - run: bundle exec i18n-tasks check-normalized | ||||||
|       - run: bundle exec i18n-tasks unused |       - run: bundle exec i18n-tasks unused | ||||||
|  |       - run: bundle exec i18n-tasks missing -t plural | ||||||
|  |       - run: bundle exec i18n-tasks check-consistent-interpolations | ||||||
| 
 | 
 | ||||||
| workflows: | workflows: | ||||||
|   version: 2 |   version: 2 | ||||||
|  |  | ||||||
|  | @ -43,6 +43,8 @@ All notable changes to this project will be documented in this file. | ||||||
| - Add `description` meta tag (#8941) | - Add `description` meta tag (#8941) | ||||||
| - Add `Content-Security-Policy` header (#8957) | - Add `Content-Security-Policy` header (#8957) | ||||||
| - Add cache for the instance info API (#8765) | - Add cache for the instance info API (#8765) | ||||||
|  | - Add suggested follows to search screen in mobile layout (#9010) | ||||||
|  | - Add CORS header to `/.well-known/*` routes (#9083) | ||||||
| 
 | 
 | ||||||
| ### Changed | ### Changed | ||||||
| 
 | 
 | ||||||
|  | @ -57,6 +59,7 @@ All notable changes to this project will be documented in this file. | ||||||
| - Change style of success and failure messages (#8973) | - Change style of success and failure messages (#8973) | ||||||
| - Change DM filtering to always allow DMs from staff (#8993) | - Change DM filtering to always allow DMs from staff (#8993) | ||||||
| - Change recommended Ruby version to 2.5.3 (#9003) | - Change recommended Ruby version to 2.5.3 (#9003) | ||||||
|  | - Change docker-compose default to persist volumes in current directory (#9055) | ||||||
| 
 | 
 | ||||||
| ### Deprecated | ### Deprecated | ||||||
| 
 | 
 | ||||||
|  | @ -85,6 +88,8 @@ All notable changes to this project will be documented in this file. | ||||||
| - Fix crash in streaming API when tag param missing (#8955) | - Fix crash in streaming API when tag param missing (#8955) | ||||||
| - Fix hotkeys not working when no element is focused (#8998) | - Fix hotkeys not working when no element is focused (#8998) | ||||||
| - Fix some hotkeys not working on detailed status view (#9006) | - Fix some hotkeys not working on detailed status view (#9006) | ||||||
|  | - Fix og:url on status pages (#9047) | ||||||
|  | - Fix upload option buttons only being visible on hover (#9074) | ||||||
| 
 | 
 | ||||||
| ## [2.5.2] - 2018-10-12 | ## [2.5.2] - 2018-10-12 | ||||||
| ### Security | ### Security | ||||||
|  |  | ||||||
							
								
								
									
										8
									
								
								Gemfile
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								Gemfile
									
									
									
									
									
								
							|  | @ -15,7 +15,7 @@ gem 'makara', '~> 0.4' | ||||||
| gem 'pghero', '~> 2.2' | gem 'pghero', '~> 2.2' | ||||||
| gem 'dotenv-rails', '~> 2.5' | gem 'dotenv-rails', '~> 2.5' | ||||||
| 
 | 
 | ||||||
| gem 'aws-sdk-s3', '~> 1.21', require: false | gem 'aws-sdk-s3', '~> 1.23', require: false | ||||||
| gem 'fog-core', '<= 2.1.0' | gem 'fog-core', '<= 2.1.0' | ||||||
| gem 'fog-openstack', '~> 0.3', require: false | gem 'fog-openstack', '~> 0.3', require: false | ||||||
| gem 'paperclip', '~> 6.0' | gem 'paperclip', '~> 6.0' | ||||||
|  | @ -96,7 +96,7 @@ gem 'rdf-normalize', '~> 0.3' | ||||||
| group :development, :test do | group :development, :test do | ||||||
|   gem 'fabrication', '~> 2.20' |   gem 'fabrication', '~> 2.20' | ||||||
|   gem 'fuubar', '~> 2.3' |   gem 'fuubar', '~> 2.3' | ||||||
|   gem 'i18n-tasks', '~> 0.9', require: false |   gem 'i18n-tasks', '~> 0.9', require: false, git: 'https://github.com/Gargron/i18n-tasks.git', ref: 'ab6e10878ccdb6243f934f30372276d260c14251' | ||||||
|   gem 'pry-byebug', '~> 3.6' |   gem 'pry-byebug', '~> 3.6' | ||||||
|   gem 'pry-rails', '~> 0.3' |   gem 'pry-rails', '~> 0.3' | ||||||
|   gem 'rspec-rails', '~> 3.8' |   gem 'rspec-rails', '~> 3.8' | ||||||
|  | @ -107,7 +107,7 @@ group :production, :test do | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
| group :test do | group :test do | ||||||
|   gem 'capybara', '~> 3.9' |   gem 'capybara', '~> 3.10' | ||||||
|   gem 'climate_control', '~> 0.2' |   gem 'climate_control', '~> 0.2' | ||||||
|   gem 'faker', '~> 1.9' |   gem 'faker', '~> 1.9' | ||||||
|   gem 'microformats', '~> 4.0' |   gem 'microformats', '~> 4.0' | ||||||
|  | @ -115,7 +115,7 @@ group :test do | ||||||
|   gem 'rspec-sidekiq', '~> 3.0' |   gem 'rspec-sidekiq', '~> 3.0' | ||||||
|   gem 'simplecov', '~> 0.16', require: false |   gem 'simplecov', '~> 0.16', require: false | ||||||
|   gem 'webmock', '~> 3.4' |   gem 'webmock', '~> 3.4' | ||||||
|   gem 'parallel_tests', '~> 2.24' |   gem 'parallel_tests', '~> 2.25' | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
| group :development do | group :development do | ||||||
|  |  | ||||||
							
								
								
									
										55
									
								
								Gemfile.lock
									
									
									
									
									
								
							
							
						
						
									
										55
									
								
								Gemfile.lock
									
									
									
									
									
								
							|  | @ -1,3 +1,19 @@ | ||||||
|  | GIT | ||||||
|  |   remote: https://github.com/Gargron/i18n-tasks.git | ||||||
|  |   revision: ab6e10878ccdb6243f934f30372276d260c14251 | ||||||
|  |   ref: ab6e10878ccdb6243f934f30372276d260c14251 | ||||||
|  |   specs: | ||||||
|  |     i18n-tasks (0.9.27) | ||||||
|  |       activesupport (>= 4.0.2) | ||||||
|  |       ast (>= 2.1.0) | ||||||
|  |       erubi | ||||||
|  |       highline (>= 2.0.0) | ||||||
|  |       i18n | ||||||
|  |       parser (>= 2.2.3.0) | ||||||
|  |       rails-i18n | ||||||
|  |       rainbow (>= 2.2.2, < 4.0) | ||||||
|  |       terminal-table (>= 1.5.1) | ||||||
|  | 
 | ||||||
| GIT | GIT | ||||||
|   remote: https://github.com/rtomayko/posix-spawn |   remote: https://github.com/rtomayko/posix-spawn | ||||||
|   revision: 58465d2e213991f8afb13b984854a49fcdcc980c |   revision: 58465d2e213991f8afb13b984854a49fcdcc980c | ||||||
|  | @ -76,16 +92,16 @@ GEM | ||||||
|     av (0.9.0) |     av (0.9.0) | ||||||
|       cocaine (~> 0.5.3) |       cocaine (~> 0.5.3) | ||||||
|     aws-eventstream (1.0.1) |     aws-eventstream (1.0.1) | ||||||
|     aws-partitions (1.105.0) |     aws-partitions (1.106.0) | ||||||
|     aws-sdk-core (3.30.0) |     aws-sdk-core (3.35.0) | ||||||
|       aws-eventstream (~> 1.0) |       aws-eventstream (~> 1.0) | ||||||
|       aws-partitions (~> 1.0) |       aws-partitions (~> 1.0) | ||||||
|       aws-sigv4 (~> 1.0) |       aws-sigv4 (~> 1.0) | ||||||
|       jmespath (~> 1.0) |       jmespath (~> 1.0) | ||||||
|     aws-sdk-kms (1.9.0) |     aws-sdk-kms (1.11.0) | ||||||
|       aws-sdk-core (~> 3, >= 3.26.0) |       aws-sdk-core (~> 3, >= 3.26.0) | ||||||
|       aws-sigv4 (~> 1.0) |       aws-sigv4 (~> 1.0) | ||||||
|     aws-sdk-s3 (1.21.0) |     aws-sdk-s3 (1.23.0) | ||||||
|       aws-sdk-core (~> 3, >= 3.26.0) |       aws-sdk-core (~> 3, >= 3.26.0) | ||||||
|       aws-sdk-kms (~> 1) |       aws-sdk-kms (~> 1) | ||||||
|       aws-sigv4 (~> 1.0) |       aws-sigv4 (~> 1.0) | ||||||
|  | @ -126,13 +142,14 @@ GEM | ||||||
|       sshkit (~> 1.3) |       sshkit (~> 1.3) | ||||||
|     capistrano-yarn (2.0.2) |     capistrano-yarn (2.0.2) | ||||||
|       capistrano (~> 3.0) |       capistrano (~> 3.0) | ||||||
|     capybara (3.9.0) |     capybara (3.10.0) | ||||||
|       addressable |       addressable | ||||||
|       mini_mime (>= 0.1.3) |       mini_mime (>= 0.1.3) | ||||||
|       nokogiri (~> 1.8) |       nokogiri (~> 1.8) | ||||||
|       rack (>= 1.6.0) |       rack (>= 1.6.0) | ||||||
|       rack-test (>= 0.6.3) |       rack-test (>= 0.6.3) | ||||||
|       xpath (~> 3.1) |       regexp_parser (~> 1.2) | ||||||
|  |       xpath (~> 3.2) | ||||||
|     case_transform (0.2) |     case_transform (0.2) | ||||||
|       activesupport |       activesupport | ||||||
|     charlock_holmes (0.7.6) |     charlock_holmes (0.7.6) | ||||||
|  | @ -273,15 +290,6 @@ GEM | ||||||
|       rainbow (>= 2.0.0) |       rainbow (>= 2.0.0) | ||||||
|     i18n (1.1.1) |     i18n (1.1.1) | ||||||
|       concurrent-ruby (~> 1.0) |       concurrent-ruby (~> 1.0) | ||||||
|     i18n-tasks (0.9.25) |  | ||||||
|       activesupport (>= 4.0.2) |  | ||||||
|       ast (>= 2.1.0) |  | ||||||
|       erubi |  | ||||||
|       highline (>= 2.0.0) |  | ||||||
|       i18n |  | ||||||
|       parser (>= 2.2.3.0) |  | ||||||
|       rainbow (>= 2.2.2, < 4.0) |  | ||||||
|       terminal-table (>= 1.5.1) |  | ||||||
|     idn-ruby (0.1.0) |     idn-ruby (0.1.0) | ||||||
|     ipaddress (0.8.3) |     ipaddress (0.8.3) | ||||||
|     iso-639 (0.2.8) |     iso-639 (0.2.8) | ||||||
|  | @ -387,7 +395,7 @@ GEM | ||||||
|       av (~> 0.9.0) |       av (~> 0.9.0) | ||||||
|       paperclip (>= 2.5.2) |       paperclip (>= 2.5.2) | ||||||
|     parallel (1.12.1) |     parallel (1.12.1) | ||||||
|     parallel_tests (2.24.0) |     parallel_tests (2.25.0) | ||||||
|       parallel |       parallel | ||||||
|     parser (2.5.1.2) |     parser (2.5.1.2) | ||||||
|       ast (~> 2.4.0) |       ast (~> 2.4.0) | ||||||
|  | @ -492,6 +500,7 @@ GEM | ||||||
|       redis-store (>= 1.2, < 2) |       redis-store (>= 1.2, < 2) | ||||||
|     redis-store (1.5.0) |     redis-store (1.5.0) | ||||||
|       redis (>= 2.2, < 5) |       redis (>= 2.2, < 5) | ||||||
|  |     regexp_parser (1.2.0) | ||||||
|     request_store (1.4.1) |     request_store (1.4.1) | ||||||
|       rack (>= 1.4) |       rack (>= 1.4) | ||||||
|     responders (2.4.0) |     responders (2.4.0) | ||||||
|  | @ -503,13 +512,13 @@ GEM | ||||||
|       chunky_png (~> 1.0) |       chunky_png (~> 1.0) | ||||||
|     rspec-core (3.8.0) |     rspec-core (3.8.0) | ||||||
|       rspec-support (~> 3.8.0) |       rspec-support (~> 3.8.0) | ||||||
|     rspec-expectations (3.8.1) |     rspec-expectations (3.8.2) | ||||||
|       diff-lcs (>= 1.2.0, < 2.0) |       diff-lcs (>= 1.2.0, < 2.0) | ||||||
|       rspec-support (~> 3.8.0) |       rspec-support (~> 3.8.0) | ||||||
|     rspec-mocks (3.8.0) |     rspec-mocks (3.8.0) | ||||||
|       diff-lcs (>= 1.2.0, < 2.0) |       diff-lcs (>= 1.2.0, < 2.0) | ||||||
|       rspec-support (~> 3.8.0) |       rspec-support (~> 3.8.0) | ||||||
|     rspec-rails (3.8.0) |     rspec-rails (3.8.1) | ||||||
|       actionpack (>= 3.0) |       actionpack (>= 3.0) | ||||||
|       activesupport (>= 3.0) |       activesupport (>= 3.0) | ||||||
|       railties (>= 3.0) |       railties (>= 3.0) | ||||||
|  | @ -642,7 +651,7 @@ GEM | ||||||
|       websocket-extensions (>= 0.1.0) |       websocket-extensions (>= 0.1.0) | ||||||
|     websocket-extensions (0.1.3) |     websocket-extensions (0.1.3) | ||||||
|     wisper (2.0.0) |     wisper (2.0.0) | ||||||
|     xpath (3.1.0) |     xpath (3.2.0) | ||||||
|       nokogiri (~> 1.8) |       nokogiri (~> 1.8) | ||||||
| 
 | 
 | ||||||
| PLATFORMS | PLATFORMS | ||||||
|  | @ -653,7 +662,7 @@ DEPENDENCIES | ||||||
|   active_record_query_trace (~> 1.5) |   active_record_query_trace (~> 1.5) | ||||||
|   addressable (~> 2.5) |   addressable (~> 2.5) | ||||||
|   annotate (~> 2.7) |   annotate (~> 2.7) | ||||||
|   aws-sdk-s3 (~> 1.21) |   aws-sdk-s3 (~> 1.23) | ||||||
|   better_errors (~> 2.5) |   better_errors (~> 2.5) | ||||||
|   binding_of_caller (~> 0.7) |   binding_of_caller (~> 0.7) | ||||||
|   bootsnap (~> 1.3) |   bootsnap (~> 1.3) | ||||||
|  | @ -665,7 +674,7 @@ DEPENDENCIES | ||||||
|   capistrano-rails (~> 1.4) |   capistrano-rails (~> 1.4) | ||||||
|   capistrano-rbenv (~> 2.1) |   capistrano-rbenv (~> 2.1) | ||||||
|   capistrano-yarn (~> 2.0) |   capistrano-yarn (~> 2.0) | ||||||
|   capybara (~> 3.9) |   capybara (~> 3.10) | ||||||
|   charlock_holmes (~> 0.7.6) |   charlock_holmes (~> 0.7.6) | ||||||
|   chewy (~> 5.0) |   chewy (~> 5.0) | ||||||
|   cld3 (~> 3.2.0) |   cld3 (~> 3.2.0) | ||||||
|  | @ -692,7 +701,7 @@ DEPENDENCIES | ||||||
|   http_accept_language (~> 2.1) |   http_accept_language (~> 2.1) | ||||||
|   http_parser.rb (~> 0.6)! |   http_parser.rb (~> 0.6)! | ||||||
|   httplog (~> 1.1) |   httplog (~> 1.1) | ||||||
|   i18n-tasks (~> 0.9) |   i18n-tasks (~> 0.9)! | ||||||
|   idn-ruby |   idn-ruby | ||||||
|   iso-639 |   iso-639 | ||||||
|   json-ld (~> 2.2) |   json-ld (~> 2.2) | ||||||
|  | @ -717,7 +726,7 @@ DEPENDENCIES | ||||||
|   ox (~> 2.10) |   ox (~> 2.10) | ||||||
|   paperclip (~> 6.0) |   paperclip (~> 6.0) | ||||||
|   paperclip-av-transcoder (~> 0.6) |   paperclip-av-transcoder (~> 0.6) | ||||||
|   parallel_tests (~> 2.24) |   parallel_tests (~> 2.25) | ||||||
|   pg (~> 1.1) |   pg (~> 1.1) | ||||||
|   pghero (~> 2.2) |   pghero (~> 2.2) | ||||||
|   pkg-config (~> 1.3) |   pkg-config (~> 1.3) | ||||||
|  |  | ||||||
|  | @ -36,6 +36,6 @@ class ActivityPub::InboxesController < Api::BaseController | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   def process_payload |   def process_payload | ||||||
|     ActivityPub::ProcessingWorker.perform_async(signed_request_account.id, body.force_encoding('UTF-8')) |     ActivityPub::ProcessingWorker.perform_async(signed_request_account.id, body.force_encoding('UTF-8'), @account&.id) | ||||||
|   end |   end | ||||||
| end | end | ||||||
|  |  | ||||||
|  | @ -9,6 +9,13 @@ module Admin | ||||||
| 
 | 
 | ||||||
|     before_action :require_staff! |     before_action :require_staff! | ||||||
|     before_action :set_pack |     before_action :set_pack | ||||||
|  |     before_action :set_body_classes | ||||||
|  | 
 | ||||||
|  |     private | ||||||
|  | 
 | ||||||
|  |     def set_body_classes | ||||||
|  |       @body_classes = 'admin' | ||||||
|  |     end | ||||||
| 
 | 
 | ||||||
|     def set_pack |     def set_pack | ||||||
|       use_pack 'admin' |       use_pack 'admin' | ||||||
|  |  | ||||||
|  | @ -201,6 +201,7 @@ class ApplicationController < ActionController::Base | ||||||
|   def respond_with_error(code) |   def respond_with_error(code) | ||||||
|     respond_to do |format| |     respond_to do |format| | ||||||
|       format.any  { head code } |       format.any  { head code } | ||||||
|  | 
 | ||||||
|       format.html do |       format.html do | ||||||
|         set_locale |         set_locale | ||||||
|         use_pack 'error' |         use_pack 'error' | ||||||
|  |  | ||||||
|  | @ -9,7 +9,7 @@ class Auth::RegistrationsController < Devise::RegistrationsController | ||||||
|   before_action :set_pack |   before_action :set_pack | ||||||
|   before_action :set_sessions, only: [:edit, :update] |   before_action :set_sessions, only: [:edit, :update] | ||||||
|   before_action :set_instance_presenter, only: [:new, :create, :update] |   before_action :set_instance_presenter, only: [:new, :create, :update] | ||||||
|   before_action :set_body_classes, only: [:new, :create] |   before_action :set_body_classes, only: [:new, :create, :edit, :update] | ||||||
| 
 | 
 | ||||||
|   def destroy |   def destroy | ||||||
|     not_found |     not_found | ||||||
|  | @ -86,7 +86,7 @@ class Auth::RegistrationsController < Devise::RegistrationsController | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   def set_body_classes |   def set_body_classes | ||||||
|     @body_classes = 'lighter' |     @body_classes = %w(edit update).include?(action_name) ? 'admin' : 'lighter' | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   def set_invite |   def set_invite | ||||||
|  |  | ||||||
|  | @ -8,6 +8,7 @@ class FiltersController < ApplicationController | ||||||
|   before_action :set_filters, only: :index |   before_action :set_filters, only: :index | ||||||
|   before_action :set_filter, only: [:edit, :update, :destroy] |   before_action :set_filter, only: [:edit, :update, :destroy] | ||||||
|   before_action :set_pack |   before_action :set_pack | ||||||
|  |   before_action :set_body_classes | ||||||
| 
 | 
 | ||||||
|   def index |   def index | ||||||
|     @filters = current_account.custom_filters |     @filters = current_account.custom_filters | ||||||
|  | @ -59,4 +60,8 @@ class FiltersController < ApplicationController | ||||||
|   def resource_params |   def resource_params | ||||||
|     params.require(:custom_filter).permit(:phrase, :expires_in, :irreversible, :whole_word, context: []) |     params.require(:custom_filter).permit(:phrase, :expires_in, :irreversible, :whole_word, context: []) | ||||||
|   end |   end | ||||||
|  | 
 | ||||||
|  |   def set_body_classes | ||||||
|  |     @body_classes = 'admin' | ||||||
|  |   end | ||||||
| end | end | ||||||
|  |  | ||||||
|  | @ -7,6 +7,7 @@ class InvitesController < ApplicationController | ||||||
| 
 | 
 | ||||||
|   before_action :authenticate_user! |   before_action :authenticate_user! | ||||||
|   before_action :set_pack |   before_action :set_pack | ||||||
|  |   before_action :set_body_classes | ||||||
| 
 | 
 | ||||||
|   def index |   def index | ||||||
|     authorize :invite, :create? |     authorize :invite, :create? | ||||||
|  | @ -49,4 +50,8 @@ class InvitesController < ApplicationController | ||||||
|   def resource_params |   def resource_params | ||||||
|     params.require(:invite).permit(:max_uses, :expires_in, :autofollow) |     params.require(:invite).permit(:max_uses, :expires_in, :autofollow) | ||||||
|   end |   end | ||||||
|  | 
 | ||||||
|  |   def set_body_classes | ||||||
|  |     @body_classes = 'admin' | ||||||
|  |   end | ||||||
| end | end | ||||||
|  |  | ||||||
|  | @ -5,8 +5,13 @@ class Settings::BaseController < ApplicationController | ||||||
| 
 | 
 | ||||||
|   before_action :authenticate_user! |   before_action :authenticate_user! | ||||||
|   before_action :set_pack |   before_action :set_pack | ||||||
|  |   before_action :set_body_classes | ||||||
| 
 | 
 | ||||||
|   def set_pack |   def set_pack | ||||||
|     use_pack 'settings' |     use_pack 'settings' | ||||||
|   end |   end | ||||||
|  | 
 | ||||||
|  |   def set_body_classes | ||||||
|  |     @body_classes = 'admin' | ||||||
|  |   end | ||||||
| end | end | ||||||
|  |  | ||||||
|  | @ -1,7 +1,5 @@ | ||||||
| # frozen_string_literal: true | # frozen_string_literal: true | ||||||
| 
 | 
 | ||||||
| require 'sidekiq-bulk' |  | ||||||
| 
 |  | ||||||
| class Settings::FollowerDomainsController < Settings::BaseController | class Settings::FollowerDomainsController < Settings::BaseController | ||||||
|   def show |   def show | ||||||
|     @account = current_account |     @account = current_account | ||||||
|  |  | ||||||
|  | @ -3,6 +3,7 @@ | ||||||
| #  Intentionally does not inherit from BaseController | #  Intentionally does not inherit from BaseController | ||||||
| class Settings::SessionsController < ApplicationController | class Settings::SessionsController < ApplicationController | ||||||
|   before_action :set_session, only: :destroy |   before_action :set_session, only: :destroy | ||||||
|  |   before_action :set_body_classes | ||||||
| 
 | 
 | ||||||
|   def destroy |   def destroy | ||||||
|     @session.destroy! |     @session.destroy! | ||||||
|  | @ -15,4 +16,8 @@ class Settings::SessionsController < ApplicationController | ||||||
|   def set_session |   def set_session | ||||||
|     @session = current_user.session_activations.find(params[:id]) |     @session = current_user.session_activations.find(params[:id]) | ||||||
|   end |   end | ||||||
|  | 
 | ||||||
|  |   def set_body_classes | ||||||
|  |     @body_classes = 'admin' | ||||||
|  |   end | ||||||
| end | end | ||||||
|  |  | ||||||
|  | @ -1,30 +1,16 @@ | ||||||
| //  This file will be loaded on settings pages, regardless of theme.
 | //  This file will be loaded on settings pages, regardless of theme.
 | ||||||
| 
 | 
 | ||||||
| const { length } = require('stringz'); |  | ||||||
| const { delegate } = require('rails-ujs'); | const { delegate } = require('rails-ujs'); | ||||||
| import emojify from '../mastodon/features/emoji/emoji'; | import emojify from '../mastodon/features/emoji/emoji'; | ||||||
| 
 | 
 | ||||||
| delegate(document, '#account_display_name', 'input', ({ target }) => { | delegate(document, '#account_display_name', 'input', ({ target }) => { | ||||||
|   const nameCounter = document.querySelector('.name-counter'); |   const name = document.querySelector('.card .display-name strong'); | ||||||
|   const name        = document.querySelector('.card .display-name strong'); |  | ||||||
| 
 |  | ||||||
|   if (nameCounter) { |  | ||||||
|     nameCounter.textContent = 30 - length(target.value); |  | ||||||
|   } |  | ||||||
| 
 | 
 | ||||||
|   if (name) { |   if (name) { | ||||||
|     name.innerHTML = emojify(target.value); |     name.innerHTML = emojify(target.value); | ||||||
|   } |   } | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| delegate(document, '#account_note', 'input', ({ target }) => { |  | ||||||
|   const noteCounter = document.querySelector('.note-counter'); |  | ||||||
| 
 |  | ||||||
|   if (noteCounter) { |  | ||||||
|     noteCounter.textContent = 500 - length(target.value); |  | ||||||
|   } |  | ||||||
| }); |  | ||||||
| 
 |  | ||||||
| delegate(document, '#account_avatar', 'change', ({ target }) => { | delegate(document, '#account_avatar', 'change', ({ target }) => { | ||||||
|   const avatar = document.querySelector('.card .avatar img'); |   const avatar = document.querySelector('.card .avatar img'); | ||||||
|   const [file] = target.files || []; |   const [file] = target.files || []; | ||||||
|  |  | ||||||
|  | @ -363,4 +363,22 @@ body.rtl { | ||||||
|     margin-right: 15px; |     margin-right: 15px; | ||||||
|     text-align: right; |     text-align: right; | ||||||
|   } |   } | ||||||
|  | 
 | ||||||
|  |   .fa-chevron-left::before { | ||||||
|  |     content: "\F054"; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   .fa-chevron-right::before { | ||||||
|  |     content: "\F053"; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   .column-back-button__icon { | ||||||
|  |     margin-right: 0; | ||||||
|  |     margin-left: 5px; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   .column-header__setting-arrows .column-header__setting-btn:last-child { | ||||||
|  |     padding-left: 0; | ||||||
|  |     padding-right: 10px; | ||||||
|  |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -142,7 +142,7 @@ export function submitCompose(routerHistory) { | ||||||
|         } |         } | ||||||
|       }; |       }; | ||||||
| 
 | 
 | ||||||
|       if (response.data.visibility === 'direct' && getState().getIn(['conversations', 'mounted']) <= 0) { |       if (response.data.visibility === 'direct' && getState().getIn(['conversations', 'mounted']) <= 0 && routerHistory) { | ||||||
|         routerHistory.push('/timelines/direct'); |         routerHistory.push('/timelines/direct'); | ||||||
|       } else if (response.data.visibility !== 'direct') { |       } else if (response.data.visibility !== 'direct') { | ||||||
|         insertIfOnline('home'); |         insertIfOnline('home'); | ||||||
|  |  | ||||||
|  | @ -9,6 +9,7 @@ import DisplayName from './display_name'; | ||||||
| import StatusContent from './status_content'; | import StatusContent from './status_content'; | ||||||
| import StatusActionBar from './status_action_bar'; | import StatusActionBar from './status_action_bar'; | ||||||
| import AttachmentList from './attachment_list'; | import AttachmentList from './attachment_list'; | ||||||
|  | import Card from '../features/status/components/card'; | ||||||
| import { injectIntl, FormattedMessage } from 'react-intl'; | import { injectIntl, FormattedMessage } from 'react-intl'; | ||||||
| import ImmutablePureComponent from 'react-immutable-pure-component'; | import ImmutablePureComponent from 'react-immutable-pure-component'; | ||||||
| import { MediaGallery, Video } from '../features/ui/util/async-components'; | import { MediaGallery, Video } from '../features/ui/util/async-components'; | ||||||
|  | @ -256,6 +257,14 @@ class Status extends ImmutablePureComponent { | ||||||
|           </Bundle> |           </Bundle> | ||||||
|         ); |         ); | ||||||
|       } |       } | ||||||
|  |     } else if (status.get('spoiler_text').length === 0 && status.get('card')) { | ||||||
|  |       media = ( | ||||||
|  |         <Card | ||||||
|  |           onOpenMedia={this.props.onOpenMedia} | ||||||
|  |           card={status.get('card')} | ||||||
|  |           compact | ||||||
|  |         /> | ||||||
|  |       ); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if (otherAccounts) { |     if (otherAccounts) { | ||||||
|  |  | ||||||
|  | @ -89,7 +89,7 @@ class ComposeForm extends ImmutablePureComponent { | ||||||
|       return; |       return; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     this.props.onSubmit(this.context.router.history); |     this.props.onSubmit(this.context.router ? this.context.router.history : null); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   onSuggestionsClearRequested = () => { |   onSuggestionsClearRequested = () => { | ||||||
|  |  | ||||||
|  | @ -44,11 +44,13 @@ class Upload extends ImmutablePureComponent { | ||||||
|     this.props.onSubmit(this.context.router.history); |     this.props.onSubmit(this.context.router.history); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   handleUndoClick = () => { |   handleUndoClick = e => { | ||||||
|  |     e.stopPropagation(); | ||||||
|     this.props.onUndo(this.props.media.get('id')); |     this.props.onUndo(this.props.media.get('id')); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   handleFocalPointClick = () => { |   handleFocalPointClick = e => { | ||||||
|  |     e.stopPropagation(); | ||||||
|     this.props.onOpenFocalPoint(this.props.media.get('id')); |     this.props.onOpenFocalPoint(this.props.media.get('id')); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  | @ -68,6 +70,10 @@ class Upload extends ImmutablePureComponent { | ||||||
|     this.setState({ focused: true }); |     this.setState({ focused: true }); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   handleClick = () => { | ||||||
|  |     this.setState({ focused: true }); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   handleInputBlur = () => { |   handleInputBlur = () => { | ||||||
|     const { dirtyDescription } = this.state; |     const { dirtyDescription } = this.state; | ||||||
| 
 | 
 | ||||||
|  | @ -88,7 +94,7 @@ class Upload extends ImmutablePureComponent { | ||||||
|     const y = ((focusY / -2) + .5) * 100; |     const y = ((focusY / -2) + .5) * 100; | ||||||
| 
 | 
 | ||||||
|     return ( |     return ( | ||||||
|       <div className='compose-form__upload' onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave}> |       <div className='compose-form__upload' tabIndex='0' onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave} onClick={this.handleClick} role='button'> | ||||||
|         <Motion defaultStyle={{ scale: 0.8 }} style={{ scale: spring(1, { stiffness: 180, damping: 12 }) }}> |         <Motion defaultStyle={{ scale: 0.8 }} style={{ scale: spring(1, { stiffness: 180, damping: 12 }) }}> | ||||||
|           {({ scale }) => ( |           {({ scale }) => ( | ||||||
|             <div className='compose-form__upload-thumbnail' style={{ transform: `scale(${scale})`, backgroundImage: `url(${media.get('preview_url')})`, backgroundPosition: `${x}% ${y}%` }}> |             <div className='compose-form__upload-thumbnail' style={{ transform: `scale(${scale})`, backgroundImage: `url(${media.get('preview_url')})`, backgroundPosition: `${x}% ${y}%` }}> | ||||||
|  |  | ||||||
|  | @ -56,6 +56,7 @@ export default class Conversation extends ImmutablePureComponent { | ||||||
|         otherAccounts={accounts} |         otherAccounts={accounts} | ||||||
|         onMoveUp={this.handleHotkeyMoveUp} |         onMoveUp={this.handleHotkeyMoveUp} | ||||||
|         onMoveDown={this.handleHotkeyMoveDown} |         onMoveDown={this.handleHotkeyMoveDown} | ||||||
|  |         onClick={this.handleClick} | ||||||
|       /> |       /> | ||||||
|     ); |     ); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  | @ -9,14 +9,14 @@ import { debounce } from 'lodash'; | ||||||
| export default class ConversationsList extends ImmutablePureComponent { | export default class ConversationsList extends ImmutablePureComponent { | ||||||
| 
 | 
 | ||||||
|   static propTypes = { |   static propTypes = { | ||||||
|     conversationIds: ImmutablePropTypes.list.isRequired, |     conversations: ImmutablePropTypes.list.isRequired, | ||||||
|     hasMore: PropTypes.bool, |     hasMore: PropTypes.bool, | ||||||
|     isLoading: PropTypes.bool, |     isLoading: PropTypes.bool, | ||||||
|     onLoadMore: PropTypes.func, |     onLoadMore: PropTypes.func, | ||||||
|     shouldUpdateScroll: PropTypes.func, |     shouldUpdateScroll: PropTypes.func, | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   getCurrentIndex = id => this.props.conversationIds.indexOf(id) |   getCurrentIndex = id => this.props.conversations.findIndex(x => x.get('id') === id) | ||||||
| 
 | 
 | ||||||
|   handleMoveUp = id => { |   handleMoveUp = id => { | ||||||
|     const elementIndex = this.getCurrentIndex(id) - 1; |     const elementIndex = this.getCurrentIndex(id) - 1; | ||||||
|  | @ -41,22 +41,22 @@ export default class ConversationsList extends ImmutablePureComponent { | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   handleLoadOlder = debounce(() => { |   handleLoadOlder = debounce(() => { | ||||||
|     const last = this.props.conversationIds.last(); |     const last = this.props.conversations.last(); | ||||||
| 
 | 
 | ||||||
|     if (last) { |     if (last && last.get('last_status')) { | ||||||
|       this.props.onLoadMore(last); |       this.props.onLoadMore(last.get('last_status')); | ||||||
|     } |     } | ||||||
|   }, 300, { leading: true }) |   }, 300, { leading: true }) | ||||||
| 
 | 
 | ||||||
|   render () { |   render () { | ||||||
|     const { conversationIds, onLoadMore, ...other } = this.props; |     const { conversations, onLoadMore, ...other } = this.props; | ||||||
| 
 | 
 | ||||||
|     return ( |     return ( | ||||||
|       <ScrollableList {...other} onLoadMore={onLoadMore && this.handleLoadOlder} scrollKey='direct' ref={this.setRef}> |       <ScrollableList {...other} onLoadMore={onLoadMore && this.handleLoadOlder} scrollKey='direct' ref={this.setRef}> | ||||||
|         {conversationIds.map(item => ( |         {conversations.map(item => ( | ||||||
|           <ConversationContainer |           <ConversationContainer | ||||||
|             key={item} |             key={item.get('id')} | ||||||
|             conversationId={item} |             conversationId={item.get('id')} | ||||||
|             onMoveUp={this.handleMoveUp} |             onMoveUp={this.handleMoveUp} | ||||||
|             onMoveDown={this.handleMoveDown} |             onMoveDown={this.handleMoveDown} | ||||||
|           /> |           /> | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ import ConversationsList from '../components/conversations_list'; | ||||||
| import { expandConversations } from '../../../actions/conversations'; | import { expandConversations } from '../../../actions/conversations'; | ||||||
| 
 | 
 | ||||||
| const mapStateToProps = state => ({ | const mapStateToProps = state => ({ | ||||||
|   conversationIds: state.getIn(['conversations', 'items']).map(x => x.get('id')), |   conversations: state.getIn(['conversations', 'items']), | ||||||
|   isLoading: state.getIn(['conversations', 'isLoading'], true), |   isLoading: state.getIn(['conversations', 'isLoading'], true), | ||||||
|   hasMore: state.getIn(['conversations', 'hasMore'], false), |   hasMore: state.getIn(['conversations', 'hasMore'], false), | ||||||
| }); | }); | ||||||
|  |  | ||||||
|  | @ -2,7 +2,7 @@ | ||||||
| // https://github.com/missive/emoji-mart/blob/5f2ffcc/src/utils/emoji-index.js
 | // https://github.com/missive/emoji-mart/blob/5f2ffcc/src/utils/emoji-index.js
 | ||||||
| 
 | 
 | ||||||
| import data from './emoji_mart_data_light'; | import data from './emoji_mart_data_light'; | ||||||
| import { getData, getSanitizedData, intersect } from './emoji_utils'; | import { getData, getSanitizedData, uniq, intersect } from './emoji_utils'; | ||||||
| 
 | 
 | ||||||
| let originalPool = {}; | let originalPool = {}; | ||||||
| let index = {}; | let index = {}; | ||||||
|  | @ -103,7 +103,7 @@ function search(value, { emojisToShowFilter, maxResults, include, exclude, custo | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     allResults = values.map((value) => { |     const searchValue = (value) => { | ||||||
|       let aPool = pool, |       let aPool = pool, | ||||||
|         aIndex = index, |         aIndex = index, | ||||||
|         length = 0; |         length = 0; | ||||||
|  | @ -150,15 +150,23 @@ function search(value, { emojisToShowFilter, maxResults, include, exclude, custo | ||||||
|       } |       } | ||||||
| 
 | 
 | ||||||
|       return aIndex.results; |       return aIndex.results; | ||||||
|     }).filter(a => a); |     }; | ||||||
| 
 | 
 | ||||||
|     if (allResults.length > 1) { |     if (values.length > 1) { | ||||||
|       results = intersect.apply(null, allResults); |       results = searchValue(value); | ||||||
|     } else if (allResults.length) { |  | ||||||
|       results = allResults[0]; |  | ||||||
|     } else { |     } else { | ||||||
|       results = []; |       results = []; | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     allResults = values.map(searchValue).filter(a => a); | ||||||
|  | 
 | ||||||
|  |     if (allResults.length > 1) { | ||||||
|  |       allResults = intersect.apply(null, allResults); | ||||||
|  |     } else if (allResults.length) { | ||||||
|  |       allResults = allResults[0]; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     results = uniq(results.concat(allResults)); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   if (results) { |   if (results) { | ||||||
|  |  | ||||||
|  | @ -59,10 +59,12 @@ export default class Card extends React.PureComponent { | ||||||
|     card: ImmutablePropTypes.map, |     card: ImmutablePropTypes.map, | ||||||
|     maxDescription: PropTypes.number, |     maxDescription: PropTypes.number, | ||||||
|     onOpenMedia: PropTypes.func.isRequired, |     onOpenMedia: PropTypes.func.isRequired, | ||||||
|  |     compact: PropTypes.boolean, | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   static defaultProps = { |   static defaultProps = { | ||||||
|     maxDescription: 50, |     maxDescription: 50, | ||||||
|  |     compact: false, | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   state = { |   state = { | ||||||
|  | @ -131,25 +133,25 @@ export default class Card extends React.PureComponent { | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   render () { |   render () { | ||||||
|     const { card, maxDescription } = this.props; |     const { card, maxDescription, compact } = this.props; | ||||||
|     const { width, embedded }      = this.state; |     const { width, embedded } = this.state; | ||||||
| 
 | 
 | ||||||
|     if (card === null) { |     if (card === null) { | ||||||
|       return null; |       return null; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     const provider    = card.get('provider_name').length === 0 ? decodeIDNA(getHostname(card.get('url'))) : card.get('provider_name'); |     const provider    = card.get('provider_name').length === 0 ? decodeIDNA(getHostname(card.get('url'))) : card.get('provider_name'); | ||||||
|     const horizontal  = card.get('width') > card.get('height') && (card.get('width') + 100 >= width) || card.get('type') !== 'link'; |     const horizontal  = (!compact && card.get('width') > card.get('height') && (card.get('width') + 100 >= width)) || card.get('type') !== 'link' || embedded; | ||||||
|     const className   = classnames('status-card', { horizontal }); |  | ||||||
|     const interactive = card.get('type') !== 'link'; |     const interactive = card.get('type') !== 'link'; | ||||||
|  |     const className   = classnames('status-card', { horizontal, compact, interactive }); | ||||||
|     const title       = interactive ? <a className='status-card__title' href={card.get('url')} title={card.get('title')} rel='noopener' target='_blank'><strong>{card.get('title')}</strong></a> : <strong className='status-card__title' title={card.get('title')}>{card.get('title')}</strong>; |     const title       = interactive ? <a className='status-card__title' href={card.get('url')} title={card.get('title')} rel='noopener' target='_blank'><strong>{card.get('title')}</strong></a> : <strong className='status-card__title' title={card.get('title')}>{card.get('title')}</strong>; | ||||||
|     const ratio       = card.get('width') / card.get('height'); |     const ratio       = compact ? 16 / 9 : card.get('width') / card.get('height'); | ||||||
|     const height      = card.get('width') > card.get('height') ? (width / ratio) : (width * ratio); |     const height      = card.get('width') > card.get('height') ? (width / ratio) : (width * ratio); | ||||||
| 
 | 
 | ||||||
|     const description = ( |     const description = ( | ||||||
|       <div className='status-card__content'> |       <div className='status-card__content'> | ||||||
|         {title} |         {title} | ||||||
|         {!horizontal && <p className='status-card__description'>{trim(card.get('description') || '', maxDescription)}</p>} |         {!(horizontal || compact) && <p className='status-card__description'>{trim(card.get('description') || '', maxDescription)}</p>} | ||||||
|         <span className='status-card__host'>{provider}</span> |         <span className='status-card__host'>{provider}</span> | ||||||
|       </div> |       </div> | ||||||
|     ); |     ); | ||||||
|  | @ -174,7 +176,7 @@ export default class Card extends React.PureComponent { | ||||||
|             <div className='status-card__actions'> |             <div className='status-card__actions'> | ||||||
|               <div> |               <div> | ||||||
|                 <button onClick={this.handleEmbedClick}><i className={`fa fa-${iconVariant}`} /></button> |                 <button onClick={this.handleEmbedClick}><i className={`fa fa-${iconVariant}`} /></button> | ||||||
|                 <a href={card.get('url')} target='_blank' rel='noopener'><i className='fa fa-external-link' /></a> |                 {horizontal && <a href={card.get('url')} target='_blank' rel='noopener'><i className='fa fa-external-link' /></a>} | ||||||
|               </div> |               </div> | ||||||
|             </div> |             </div> | ||||||
|           </div> |           </div> | ||||||
|  | @ -184,7 +186,7 @@ export default class Card extends React.PureComponent { | ||||||
|       return ( |       return ( | ||||||
|         <div className={className} ref={this.setRef}> |         <div className={className} ref={this.setRef}> | ||||||
|           {embed} |           {embed} | ||||||
|           {description} |           {!compact && description} | ||||||
|         </div> |         </div> | ||||||
|       ); |       ); | ||||||
|     } else if (card.get('image')) { |     } else if (card.get('image')) { | ||||||
|  |  | ||||||
|  | @ -2,7 +2,7 @@ import { connect } from 'react-redux'; | ||||||
| import Card from '../components/card'; | import Card from '../components/card'; | ||||||
| 
 | 
 | ||||||
| const mapStateToProps = (state, { statusId }) => ({ | const mapStateToProps = (state, { statusId }) => ({ | ||||||
|   card: state.getIn(['cards', statusId], null), |   card: state.getIn(['statuses', statusId, 'card'], null), | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| export default connect(mapStateToProps)(Card); | export default connect(mapStateToProps)(Card); | ||||||
|  |  | ||||||
|  | @ -14,7 +14,6 @@ import relationships from './relationships'; | ||||||
| import settings from './settings'; | import settings from './settings'; | ||||||
| import push_notifications from './push_notifications'; | import push_notifications from './push_notifications'; | ||||||
| import status_lists from './status_lists'; | import status_lists from './status_lists'; | ||||||
| import cards from './cards'; |  | ||||||
| import mutes from './mutes'; | import mutes from './mutes'; | ||||||
| import reports from './reports'; | import reports from './reports'; | ||||||
| import contexts from './contexts'; | import contexts from './contexts'; | ||||||
|  | @ -46,7 +45,6 @@ const reducers = { | ||||||
|   relationships, |   relationships, | ||||||
|   settings, |   settings, | ||||||
|   push_notifications, |   push_notifications, | ||||||
|   cards, |  | ||||||
|   mutes, |   mutes, | ||||||
|   reports, |   reports, | ||||||
|   contexts, |   contexts, | ||||||
|  |  | ||||||
|  | @ -10,6 +10,7 @@ import { | ||||||
|   STATUS_REVEAL, |   STATUS_REVEAL, | ||||||
|   STATUS_HIDE, |   STATUS_HIDE, | ||||||
| } from '../actions/statuses'; | } from '../actions/statuses'; | ||||||
|  | import { STATUS_CARD_FETCH_SUCCESS } from '../actions/cards'; | ||||||
| import { TIMELINE_DELETE } from '../actions/timelines'; | import { TIMELINE_DELETE } from '../actions/timelines'; | ||||||
| import { STATUS_IMPORT, STATUSES_IMPORT } from '../actions/importer'; | import { STATUS_IMPORT, STATUSES_IMPORT } from '../actions/importer'; | ||||||
| import { Map as ImmutableMap, fromJS } from 'immutable'; | import { Map as ImmutableMap, fromJS } from 'immutable'; | ||||||
|  | @ -65,6 +66,8 @@ export default function statuses(state = initialState, action) { | ||||||
|     }); |     }); | ||||||
|   case TIMELINE_DELETE: |   case TIMELINE_DELETE: | ||||||
|     return deleteStatus(state, action.id, action.references); |     return deleteStatus(state, action.id, action.references); | ||||||
|  |   case STATUS_CARD_FETCH_SUCCESS: | ||||||
|  |     return state.setIn([action.id, 'card'], fromJS(action.card)); | ||||||
|   default: |   default: | ||||||
|     return state; |     return state; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  | @ -5,7 +5,6 @@ import { start } from '../mastodon/common'; | ||||||
| start(); | start(); | ||||||
| 
 | 
 | ||||||
| function main() { | function main() { | ||||||
|   const { length } = require('stringz'); |  | ||||||
|   const IntlMessageFormat = require('intl-messageformat').default; |   const IntlMessageFormat = require('intl-messageformat').default; | ||||||
|   const { timeAgoString } = require('../mastodon/components/relative_timestamp'); |   const { timeAgoString } = require('../mastodon/components/relative_timestamp'); | ||||||
|   const { delegate } = require('rails-ujs'); |   const { delegate } = require('rails-ujs'); | ||||||
|  |  | ||||||
|  | @ -1669,6 +1669,7 @@ a.account__display-name { | ||||||
|   padding: 4px 0; |   padding: 4px 0; | ||||||
|   border-radius: 4px; |   border-radius: 4px; | ||||||
|   box-shadow: 2px 4px 15px rgba($base-shadow-color, 0.4); |   box-shadow: 2px 4px 15px rgba($base-shadow-color, 0.4); | ||||||
|  |   z-index: 9999; | ||||||
| 
 | 
 | ||||||
|   ul { |   ul { | ||||||
|     list-style: none; |     list-style: none; | ||||||
|  | @ -2560,6 +2561,9 @@ a.status-card { | ||||||
|   display: block; |   display: block; | ||||||
|   margin-top: 5px; |   margin-top: 5px; | ||||||
|   font-size: 13px; |   font-size: 13px; | ||||||
|  |   overflow: hidden; | ||||||
|  |   text-overflow: ellipsis; | ||||||
|  |   white-space: nowrap; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .status-card__image { | .status-card__image { | ||||||
|  | @ -2584,6 +2588,31 @@ a.status-card { | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | .status-card.compact { | ||||||
|  |   border-color: lighten($ui-base-color, 4%); | ||||||
|  | 
 | ||||||
|  |   &.interactive { | ||||||
|  |     border: 0; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   .status-card__content { | ||||||
|  |     padding: 8px; | ||||||
|  |     padding-top: 10px; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   .status-card__title { | ||||||
|  |     white-space: nowrap; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   .status-card__image { | ||||||
|  |     flex: 0 0 60px; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | a.status-card.compact:hover { | ||||||
|  |   background-color: lighten($ui-base-color, 4%); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| .status-card__image-image { | .status-card__image-image { | ||||||
|   border-radius: 4px 0 0 4px; |   border-radius: 4px 0 0 4px; | ||||||
|   display: block; |   display: block; | ||||||
|  |  | ||||||
|  | @ -130,17 +130,6 @@ body.rtl { | ||||||
|     float: left; |     float: left; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   .activity-stream .detailed-status.light .detailed-status__display-name > div { |  | ||||||
|     float: right; |  | ||||||
|     margin-right: 0; |  | ||||||
|     margin-left: 10px; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   .activity-stream .detailed-status.light .detailed-status__meta span > span { |  | ||||||
|     margin-left: 0; |  | ||||||
|     margin-right: 6px; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   .status__action-bar { |   .status__action-bar { | ||||||
| 
 | 
 | ||||||
|     &__counter { |     &__counter { | ||||||
|  | @ -174,6 +163,10 @@ body.rtl { | ||||||
|     margin-right: 0; |     margin-right: 0; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   .detailed-status__display-name .display-name { | ||||||
|  |     text-align: right; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   .detailed-status__display-avatar { |   .detailed-status__display-avatar { | ||||||
|     margin-right: 0; |     margin-right: 0; | ||||||
|     margin-left: 10px; |     margin-left: 10px; | ||||||
|  | @ -359,4 +352,22 @@ body.rtl { | ||||||
|     margin-right: 15px; |     margin-right: 15px; | ||||||
|     text-align: right; |     text-align: right; | ||||||
|   } |   } | ||||||
|  | 
 | ||||||
|  |   .fa-chevron-left::before { | ||||||
|  |     content: "\F054"; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   .fa-chevron-right::before { | ||||||
|  |     content: "\F053"; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   .column-back-button__icon { | ||||||
|  |     margin-right: 0; | ||||||
|  |     margin-left: 5px; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   .column-header__setting-arrows .column-header__setting-btn:last-child { | ||||||
|  |     padding-left: 0; | ||||||
|  |     padding-right: 10px; | ||||||
|  |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -81,11 +81,22 @@ class ActivityPub::Activity::Create < ActivityPub::Activity | ||||||
|       @mentions << Mention.new(account: account, silent: true) |       @mentions << Mention.new(account: account, silent: true) | ||||||
| 
 | 
 | ||||||
|       # If there is at least one silent mention, then the status can be considered |       # If there is at least one silent mention, then the status can be considered | ||||||
|       # as a limited-audience status, and not strictly a direct message |       # as a limited-audience status, and not strictly a direct message, but only | ||||||
|  |       # if we considered a direct message in the first place | ||||||
|       next unless @params[:visibility] == :direct |       next unless @params[:visibility] == :direct | ||||||
| 
 | 
 | ||||||
|       @params[:visibility] = :limited |       @params[:visibility] = :limited | ||||||
|     end |     end | ||||||
|  | 
 | ||||||
|  |     # If the payload was delivered to a specific inbox, the inbox owner must have | ||||||
|  |     # access to it, unless they already have access to it anyway | ||||||
|  |     return if @options[:delivered_to_account_id].nil? || @mentions.any? { |mention| mention.account_id == @options[:delivered_to_account_id] } | ||||||
|  | 
 | ||||||
|  |     @mentions << Mention.new(account_id: @options[:delivered_to_account_id], silent: true) | ||||||
|  | 
 | ||||||
|  |     return unless @params[:visibility] == :direct | ||||||
|  | 
 | ||||||
|  |     @params[:visibility] = :limited | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   def attach_tags(status) |   def attach_tags(status) | ||||||
|  | @ -118,7 +129,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity | ||||||
|     return if tag['name'].blank? |     return if tag['name'].blank? | ||||||
| 
 | 
 | ||||||
|     hashtag = tag['name'].gsub(/\A#/, '').mb_chars.downcase |     hashtag = tag['name'].gsub(/\A#/, '').mb_chars.downcase | ||||||
|     hashtag = Tag.where(name: hashtag).first_or_create(name: hashtag) |     hashtag = Tag.where(name: hashtag).first_or_create!(name: hashtag) | ||||||
| 
 | 
 | ||||||
|     return if @tags.include?(hashtag) |     return if @tags.include?(hashtag) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -58,6 +58,9 @@ class AccountConversation < ApplicationRecord | ||||||
| 
 | 
 | ||||||
|     def add_status(recipient, status) |     def add_status(recipient, status) | ||||||
|       conversation = find_or_initialize_by(account: recipient, conversation_id: status.conversation_id, participant_account_ids: participants_from_status(recipient, status)) |       conversation = find_or_initialize_by(account: recipient, conversation_id: status.conversation_id, participant_account_ids: participants_from_status(recipient, status)) | ||||||
|  | 
 | ||||||
|  |       return conversation if conversation.status_ids.include?(status.id) | ||||||
|  | 
 | ||||||
|       conversation.status_ids << status.id |       conversation.status_ids << status.id | ||||||
|       conversation.unread = status.account_id != recipient.id |       conversation.unread = status.account_id != recipient.id | ||||||
|       conversation.save |       conversation.save | ||||||
|  |  | ||||||
|  | @ -148,6 +148,7 @@ class MediaAttachment < ApplicationRecord | ||||||
|     "#{x},#{y}" |     "#{x},#{y}" | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|  |   after_commit :reset_parent_cache, on: :update | ||||||
|   before_create :prepare_description, unless: :local? |   before_create :prepare_description, unless: :local? | ||||||
|   before_create :set_shortcode |   before_create :set_shortcode | ||||||
|   before_post_process :set_type_and_extension |   before_post_process :set_type_and_extension | ||||||
|  | @ -252,4 +253,9 @@ class MediaAttachment < ApplicationRecord | ||||||
|       bitrate: movie.bitrate, |       bitrate: movie.bitrate, | ||||||
|     } |     } | ||||||
|   end |   end | ||||||
|  | 
 | ||||||
|  |   def reset_parent_cache | ||||||
|  |     return if status_id.nil? | ||||||
|  |     Rails.cache.delete("statuses/#{status_id}") | ||||||
|  |   end | ||||||
| end | end | ||||||
|  |  | ||||||
|  | @ -94,6 +94,7 @@ class Status < ApplicationRecord | ||||||
|                    :conversation, |                    :conversation, | ||||||
|                    :status_stat, |                    :status_stat, | ||||||
|                    :tags, |                    :tags, | ||||||
|  |                    :preview_cards, | ||||||
|                    :stream_entry, |                    :stream_entry, | ||||||
|                    active_mentions: :account, |                    active_mentions: :account, | ||||||
|                    reblog: [ |                    reblog: [ | ||||||
|  | @ -101,6 +102,7 @@ class Status < ApplicationRecord | ||||||
|                      :application, |                      :application, | ||||||
|                      :stream_entry, |                      :stream_entry, | ||||||
|                      :tags, |                      :tags, | ||||||
|  |                      :preview_cards, | ||||||
|                      :media_attachments, |                      :media_attachments, | ||||||
|                      :conversation, |                      :conversation, | ||||||
|                      :status_stat, |                      :status_stat, | ||||||
|  | @ -168,6 +170,10 @@ class Status < ApplicationRecord | ||||||
|     reblog |     reblog | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|  |   def preview_card | ||||||
|  |     preview_cards.first | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|   def title |   def title | ||||||
|     if destroyed? |     if destroyed? | ||||||
|       "#{account.acct} deleted status" |       "#{account.acct} deleted status" | ||||||
|  | @ -241,10 +247,6 @@ class Status < ApplicationRecord | ||||||
|   before_validation :set_local |   before_validation :set_local | ||||||
| 
 | 
 | ||||||
|   class << self |   class << self | ||||||
|     def cache_ids |  | ||||||
|       left_outer_joins(:status_stat).select('statuses.id, greatest(statuses.updated_at, status_stats.updated_at) AS updated_at') |  | ||||||
|     end |  | ||||||
| 
 |  | ||||||
|     def selectable_visibilities |     def selectable_visibilities | ||||||
|       visibilities.keys - %w(direct limited) |       visibilities.keys - %w(direct limited) | ||||||
|     end |     end | ||||||
|  |  | ||||||
|  | @ -14,4 +14,12 @@ | ||||||
| 
 | 
 | ||||||
| class StatusStat < ApplicationRecord | class StatusStat < ApplicationRecord | ||||||
|   belongs_to :status, inverse_of: :status_stat |   belongs_to :status, inverse_of: :status_stat | ||||||
|  | 
 | ||||||
|  |   after_commit :reset_parent_cache | ||||||
|  | 
 | ||||||
|  |   private | ||||||
|  | 
 | ||||||
|  |   def reset_parent_cache | ||||||
|  |     Rails.cache.delete("statuses/#{status_id}") | ||||||
|  |   end | ||||||
| end | end | ||||||
|  |  | ||||||
|  | @ -21,6 +21,8 @@ class REST::StatusSerializer < ActiveModel::Serializer | ||||||
|   has_many :tags |   has_many :tags | ||||||
|   has_many :emojis, serializer: REST::CustomEmojiSerializer |   has_many :emojis, serializer: REST::CustomEmojiSerializer | ||||||
| 
 | 
 | ||||||
|  |   has_one :preview_card, key: :card, serializer: REST::PreviewCardSerializer | ||||||
|  | 
 | ||||||
|   def id |   def id | ||||||
|     object.id.to_s |     object.id.to_s | ||||||
|   end |   end | ||||||
|  |  | ||||||
|  | @ -5,9 +5,10 @@ class ActivityPub::FetchRemoteAccountService < BaseService | ||||||
| 
 | 
 | ||||||
|   SUPPORTED_TYPES = %w(Application Group Organization Person Service).freeze |   SUPPORTED_TYPES = %w(Application Group Organization Person Service).freeze | ||||||
| 
 | 
 | ||||||
|   # Should be called when uri has already been checked for locality |  | ||||||
|   # Does a WebFinger roundtrip on each call |   # Does a WebFinger roundtrip on each call | ||||||
|   def call(uri, id: true, prefetched_body: nil, break_on_redirect: false) |   def call(uri, id: true, prefetched_body: nil, break_on_redirect: false) | ||||||
|  |     return ActivityPub::TagManager.instance.uri_to_resource(uri, Account) if ActivityPub::TagManager.instance.local_uri?(uri) | ||||||
|  | 
 | ||||||
|     @json = if prefetched_body.nil? |     @json = if prefetched_body.nil? | ||||||
|               fetch_resource(uri, id) |               fetch_resource(uri, id) | ||||||
|             else |             else | ||||||
|  |  | ||||||
|  | @ -17,7 +17,8 @@ class FetchLinkCardService < BaseService | ||||||
| 
 | 
 | ||||||
|     return if @url.nil? || @status.preview_cards.any? |     return if @url.nil? || @status.preview_cards.any? | ||||||
| 
 | 
 | ||||||
|     @url = @url.to_s |     @mentions = status.mentions | ||||||
|  |     @url      = @url.to_s | ||||||
| 
 | 
 | ||||||
|     RedisLock.acquire(lock_options) do |lock| |     RedisLock.acquire(lock_options) do |lock| | ||||||
|       if lock.acquired? |       if lock.acquired? | ||||||
|  | @ -62,6 +63,7 @@ class FetchLinkCardService < BaseService | ||||||
| 
 | 
 | ||||||
|   def attach_card |   def attach_card | ||||||
|     @status.preview_cards << @card |     @status.preview_cards << @card | ||||||
|  |     Rails.cache.delete(@status) | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   def parse_urls |   def parse_urls | ||||||
|  | @ -81,9 +83,16 @@ class FetchLinkCardService < BaseService | ||||||
|     uri.host.blank? || TagManager.instance.local_url?(uri.to_s) || !%w(http https).include?(uri.scheme) |     uri.host.blank? || TagManager.instance.local_url?(uri.to_s) || !%w(http https).include?(uri.scheme) | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|  |   def mention_link?(a) | ||||||
|  |     return false if @mentions.nil? | ||||||
|  |     @mentions.any? do |mention| | ||||||
|  |       a['href'] == TagManager.instance.url_for(mention.target) | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|   def skip_link?(a) |   def skip_link?(a) | ||||||
|     # Avoid links for hashtags and mentions (microformats) |     # Avoid links for hashtags and mentions (microformats) | ||||||
|     a['rel']&.include?('tag') || a['class']&.include?('u-url') |     a['rel']&.include?('tag') || a['class']&.include?('u-url') || mention_link?(a) | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   def attempt_oembed |   def attempt_oembed | ||||||
|  |  | ||||||
|  | @ -25,7 +25,7 @@ class VerifyLinkService < BaseService | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   def link_back_present? |   def link_back_present? | ||||||
|     return false if @body.empty? |     return false if @body.blank? | ||||||
| 
 | 
 | ||||||
|     links = Nokogiri::HTML(@body).xpath('//a[contains(concat(" ", normalize-space(@rel), " "), " me ")]|//link[contains(concat(" ", normalize-space(@rel), " "), " me ")]') |     links = Nokogiri::HTML(@body).xpath('//a[contains(concat(" ", normalize-space(@rel), " "), " me ")]|//link[contains(concat(" ", normalize-space(@rel), " "), " me ")]') | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -14,4 +14,4 @@ | ||||||
| 
 | 
 | ||||||
|         = yield |         = yield | ||||||
| 
 | 
 | ||||||
| = render template: 'layouts/application', locals: { body_classes: 'admin' } | = render template: 'layouts/application' | ||||||
|  |  | ||||||
|  | @ -6,8 +6,8 @@ | ||||||
| 
 | 
 | ||||||
|   .fields-row |   .fields-row | ||||||
|     .fields-row__column.fields-group.fields-row__column-6 |     .fields-row__column.fields-group.fields-row__column-6 | ||||||
|       = f.input :display_name, wrapper: :with_label, hint: t('simple_form.hints.defaults.display_name', count: 30 - @account.display_name.size).html_safe |       = f.input :display_name, wrapper: :with_label, input_html: { maxlength: 30 }, hint: false | ||||||
|       = f.input :note, wrapper: :with_label, hint: t('simple_form.hints.defaults.note', count: 500 - @account.note.size).html_safe |       = f.input :note, wrapper: :with_label, input_html: { maxlength: 500 }, hint: false | ||||||
| 
 | 
 | ||||||
|   .fields-row |   .fields-row | ||||||
|     .fields-row__column.fields-row__column-6 |     .fields-row__column.fields-row__column-6 | ||||||
|  | @ -36,8 +36,8 @@ | ||||||
| 
 | 
 | ||||||
|         = f.simple_fields_for :fields do |fields_f| |         = f.simple_fields_for :fields do |fields_f| | ||||||
|           .row |           .row | ||||||
|             = fields_f.input :name, placeholder: t('simple_form.labels.account.fields.name') |             = fields_f.input :name, placeholder: t('simple_form.labels.account.fields.name'), input_html: { maxlength: 255 } | ||||||
|             = fields_f.input :value, placeholder: t('simple_form.labels.account.fields.value') |             = fields_f.input :value, placeholder: t('simple_form.labels.account.fields.value'), input_html: { maxlength: 255 } | ||||||
| 
 | 
 | ||||||
|     .fields-row__column.fields-group.fields-row__column-6 |     .fields-row__column.fields-group.fields-row__column-6 | ||||||
|       %h6= t('verification.verification') |       %h6= t('verification.verification') | ||||||
|  |  | ||||||
|  | @ -15,6 +15,7 @@ | ||||||
|         %span.display-name |         %span.display-name | ||||||
|           %bdi |           %bdi | ||||||
|             %strong.display-name__html.p-name.emojify= display_name(status.account, custom_emojify: true, autoplay: autoplay) |             %strong.display-name__html.p-name.emojify= display_name(status.account, custom_emojify: true, autoplay: autoplay) | ||||||
|  |             | ||||||
|           %span.display-name__account |           %span.display-name__account | ||||||
|             = acct(status.account) |             = acct(status.account) | ||||||
|             = fa_icon('lock') if status.account.locked? |             = fa_icon('lock') if status.account.locked? | ||||||
|  |  | ||||||
|  | @ -5,7 +5,7 @@ class ActivityPub::ProcessingWorker | ||||||
| 
 | 
 | ||||||
|   sidekiq_options backtrace: true |   sidekiq_options backtrace: true | ||||||
| 
 | 
 | ||||||
|   def perform(account_id, body) |   def perform(account_id, body, delivered_to_account_id = nil) | ||||||
|     ActivityPub::ProcessCollectionService.new.call(body, Account.find(account_id), override_timestamps: true) |     ActivityPub::ProcessCollectionService.new.call(body, Account.find(account_id), override_timestamps: true, delivered_to_account_id: delivered_to_account_id) | ||||||
|   end |   end | ||||||
| end | end | ||||||
|  |  | ||||||
|  | @ -9,6 +9,10 @@ Rails.application.config.middleware.insert_before 0, Rack::Cors do | ||||||
|   allow do |   allow do | ||||||
|     origins '*' |     origins '*' | ||||||
| 
 | 
 | ||||||
|  |     resource '/.well-known/*', | ||||||
|  |       headers: :any, | ||||||
|  |       methods: [:get], | ||||||
|  |       credentials: false | ||||||
|     resource '/@:username', |     resource '/@:username', | ||||||
|       headers: :any, |       headers: :any, | ||||||
|       methods: [:get], |       methods: [:get], | ||||||
|  |  | ||||||
|  | @ -1 +1,2 @@ | ||||||
|  | --- | ||||||
| ast: {} | ast: {} | ||||||
|  |  | ||||||
|  | @ -30,22 +30,16 @@ ar: | ||||||
|     other_instances: خوادم أخرى |     other_instances: خوادم أخرى | ||||||
|     privacy_policy: سياسة الخصوصية |     privacy_policy: سياسة الخصوصية | ||||||
|     source_code: الشفرة المصدرية |     source_code: الشفرة المصدرية | ||||||
|     status_count_after: |     status_count_after: منشورات | ||||||
|       one: منشور |  | ||||||
|       other: منشورات |  | ||||||
|     status_count_before: نشروا |     status_count_before: نشروا | ||||||
|     terms: شروط الخدمة |     terms: شروط الخدمة | ||||||
|     user_count_after: |     user_count_after: مستخدِمين | ||||||
|       one: مستخدِم |  | ||||||
|       other: مستخدِمين |  | ||||||
|     user_count_before: يستضيف |     user_count_before: يستضيف | ||||||
|     what_is_mastodon: ما هو ماستدون ؟ |     what_is_mastodon: ما هو ماستدون ؟ | ||||||
|   accounts: |   accounts: | ||||||
|     choices_html: 'توصيات %{name} :' |     choices_html: 'توصيات %{name} :' | ||||||
|     follow: إتبع |     follow: إتبع | ||||||
|     followers: |     followers: مُتابِعون | ||||||
|       one: مُتابِع |  | ||||||
|       other: مُتابِعون |  | ||||||
|     following: مُتابَع |     following: مُتابَع | ||||||
|     joined: انضم·ت في %{date} |     joined: انضم·ت في %{date} | ||||||
|     link_verified_on: تم التحقق مِن مالك هذا الرابط بتاريخ %{date} |     link_verified_on: تم التحقق مِن مالك هذا الرابط بتاريخ %{date} | ||||||
|  | @ -57,9 +51,7 @@ ar: | ||||||
|     people_who_follow: الأشخاص الذين يتبعون %{name} |     people_who_follow: الأشخاص الذين يتبعون %{name} | ||||||
|     pin_errors: |     pin_errors: | ||||||
|       following: يجب أن تكون مِن متابعي حساب الشخص الذي تريد إبرازه |       following: يجب أن تكون مِن متابعي حساب الشخص الذي تريد إبرازه | ||||||
|     posts: |     posts: تبويقات | ||||||
|       one: تبويق |  | ||||||
|       other: تبويقات |  | ||||||
|     posts_tab_heading: تبويقات |     posts_tab_heading: تبويقات | ||||||
|     posts_with_replies: التبويقات و الردود |     posts_with_replies: التبويقات و الردود | ||||||
|     reserved_username: إسم المستخدم محجوز |     reserved_username: إسم المستخدم محجوز | ||||||
|  | @ -170,8 +162,8 @@ ar: | ||||||
|       web: الويب |       web: الويب | ||||||
|     action_logs: |     action_logs: | ||||||
|       actions: |       actions: | ||||||
|         assigned_to_self_report: قام {name} بتعيين التقرير٪ {target} لأنفسهم |         assigned_to_self_report: قام %{name} بتعيين التقرير %{target} لأنفسهم | ||||||
|         change_email_user: غيّر٪ {name} عنوان البريد الإلكتروني للمستخدم٪ {target} |         change_email_user: غيّر %{name} عنوان البريد الإلكتروني للمستخدم %{target} | ||||||
|         confirm_user: "%{name} قد قام بتأكيد عنوان البريد الإلكتروني لـ %{target}" |         confirm_user: "%{name} قد قام بتأكيد عنوان البريد الإلكتروني لـ %{target}" | ||||||
|         create_custom_emoji: "%{name} قام برفع إيموجي جديد %{target}" |         create_custom_emoji: "%{name} قام برفع إيموجي جديد %{target}" | ||||||
|         create_domain_block: "%{name} قام بحجب نطاق %{target}" |         create_domain_block: "%{name} قام بحجب نطاق %{target}" | ||||||
|  | @ -187,13 +179,13 @@ ar: | ||||||
|         enable_user: لقد قام %{name} بتنشيط تسجيل الدخول للمستخدِم %{target} |         enable_user: لقد قام %{name} بتنشيط تسجيل الدخول للمستخدِم %{target} | ||||||
|         memorialize_account: لقد قام %{name} بتحويل حساب %{target} إلى صفحة تذكارية |         memorialize_account: لقد قام %{name} بتحويل حساب %{target} إلى صفحة تذكارية | ||||||
|         promote_user: "%{name} قام بترقية المستخدم %{target}" |         promote_user: "%{name} قام بترقية المستخدم %{target}" | ||||||
|         remove_avatar_user: تمت إزالة٪ {name} الصورة الرمزية٪ {target} |         remove_avatar_user: تمت إزالة %{name} الصورة الرمزية %{target} | ||||||
|         reopen_report: تمت إعادة فتح التقرير {name}٪ {target} |         reopen_report: تمت إعادة فتح التقرير %{name} %{target} | ||||||
|         reset_password_user: "%{name} لقد قام بإعادة تعيين الكلمة السرية الخاصة بـ %{target}" |         reset_password_user: "%{name} لقد قام بإعادة تعيين الكلمة السرية الخاصة بـ %{target}" | ||||||
|         resolve_report: قام %{name} بحل التقرير %{target} |         resolve_report: قام %{name} بحل التقرير %{target} | ||||||
|         silence_account: لقد قام %{name} بكتم حساب %{target} |         silence_account: لقد قام %{name} بكتم حساب %{target} | ||||||
|         suspend_account: لقد قام %{name} بتعليق حساب %{target} |         suspend_account: لقد قام %{name} بتعليق حساب %{target} | ||||||
|         unassigned_report: "٪ {name} تقرير غير معتمد٪ {target}" |         unassigned_report: "%{name} تقرير غير معتمد %{target}" | ||||||
|         unsilence_account: لقد قام %{name} بإلغاء الكتم عن حساب %{target} |         unsilence_account: لقد قام %{name} بإلغاء الكتم عن حساب %{target} | ||||||
|         unsuspend_account: لقد قام %{name} بإلغاء التعليق المفروض على حساب %{target} |         unsuspend_account: لقد قام %{name} بإلغاء التعليق المفروض على حساب %{target} | ||||||
|         update_custom_emoji: "%{name} قام بتحديث الإيموجي %{target}" |         update_custom_emoji: "%{name} قام بتحديث الإيموجي %{target}" | ||||||
|  | @ -268,9 +260,7 @@ ar: | ||||||
|         suspend: تعليق |         suspend: تعليق | ||||||
|       severity: الشدة |       severity: الشدة | ||||||
|       show: |       show: | ||||||
|         affected_accounts: |         affected_accounts: "%{count} حسابات معنية في قاعدة البيانات" | ||||||
|           one: حساب واحد معني في قاعدة البيانات |  | ||||||
|           other: "%{count} حسابات معنية في قاعدة البيانات" |  | ||||||
|         retroactive: |         retroactive: | ||||||
|           silence: إلغاء الكتم عن كافة الحسابات المتواجدة على هذا النطاق |           silence: إلغاء الكتم عن كافة الحسابات المتواجدة على هذا النطاق | ||||||
|           suspend: إلغاء التعليق المفروض على كافة حسابات هذا النطاق |           suspend: إلغاء التعليق المفروض على كافة حسابات هذا النطاق | ||||||
|  | @ -441,7 +431,7 @@ ar: | ||||||
|   admin_mailer: |   admin_mailer: | ||||||
|     new_report: |     new_report: | ||||||
|       body: قام %{reporter} بالإبلاغ عن %{target} |       body: قام %{reporter} بالإبلاغ عن %{target} | ||||||
|       body_remote: أبلغ شخص ما من٪ {domain} عن٪ {target} |       body_remote: أبلغ شخص ما من %{domain} عن %{target} | ||||||
|       subject: تقرير جديد ل%{instance} (#%{id}) |       subject: تقرير جديد ل%{instance} (#%{id}) | ||||||
|   application_mailer: |   application_mailer: | ||||||
|     notification_preferences: تعديل خيارات البريد الإلكتروني |     notification_preferences: تعديل خيارات البريد الإلكتروني | ||||||
|  | @ -570,9 +560,7 @@ ar: | ||||||
|   generic: |   generic: | ||||||
|     changes_saved_msg: تم حفظ التعديلات بنجاح ! |     changes_saved_msg: تم حفظ التعديلات بنجاح ! | ||||||
|     save_changes: حفظ التغييرات |     save_changes: حفظ التغييرات | ||||||
|     validation_errors: |     validation_errors: هناك شيء ليس على ما يُرام! يُرجى معاينة الأخطاء الـ %{count} التالية | ||||||
|       one: هناك شيء ما لا يبدو أنه على ما يُرام بعدُ. يُرجى الإطلاع على الخطأ أدناه |  | ||||||
|       other: هناك شيء ليس على ما يُرام! يُرجى معاينة الأخطاء الـ %{count} التالية |  | ||||||
|   imports: |   imports: | ||||||
|     preface: بإمكانك استيراد بيانات قد قُمتَ بتصديرها مِن مثيل خادوم آخَر، كقوائم المستخدِمين الذين كنتَ تتابِعهم أو قُمتَ بحظرهم. |     preface: بإمكانك استيراد بيانات قد قُمتَ بتصديرها مِن مثيل خادوم آخَر، كقوائم المستخدِمين الذين كنتَ تتابِعهم أو قُمتَ بحظرهم. | ||||||
|     success: تم تحميل بياناتك بنجاح وسيتم معالجتها في الوقت المناسب |     success: تم تحميل بياناتك بنجاح وسيتم معالجتها في الوقت المناسب | ||||||
|  | @ -595,9 +583,7 @@ ar: | ||||||
|     expires_in_prompt: أبدا |     expires_in_prompt: أبدا | ||||||
|     generate: توليد |     generate: توليد | ||||||
|     invited_by: 'تمت دعوتك من طرف :' |     invited_by: 'تمت دعوتك من طرف :' | ||||||
|     max_uses: |     max_uses: "%{count} استخدامات" | ||||||
|       one: استعمال واحد |  | ||||||
|       other: "%{count} استخدامات" |  | ||||||
|     max_uses_prompt: بلا حدود |     max_uses_prompt: بلا حدود | ||||||
|     prompt: توليد و مشاركة روابط للسماح للآخَرين بالنفاذ إلى مثيل الخادوم هذا |     prompt: توليد و مشاركة روابط للسماح للآخَرين بالنفاذ إلى مثيل الخادوم هذا | ||||||
|     table: |     table: | ||||||
|  | @ -623,12 +609,8 @@ ar: | ||||||
|       action: معاينة كافة الإشعارات |       action: معاينة كافة الإشعارات | ||||||
|       body: هذا هو مُلَخَّص الرسائل التي فاتتك وذلك منذ آخر زيارة لك في  %{since} |       body: هذا هو مُلَخَّص الرسائل التي فاتتك وذلك منذ آخر زيارة لك في  %{since} | ||||||
|       mention: "%{name} أشار إليك في :" |       mention: "%{name} أشار إليك في :" | ||||||
|       new_followers_summary: |       new_followers_summary: رائع، لقد قام بمتابعتك %{count} مُتابِعون جُدد أثناء فترة غيابك عن ماستدون ! | ||||||
|         one: و لقد تحصّلت أيضا على متابِع جديد أثناء فترة غيابك! يا للروعة! |       subject: "%{count} إشعارات جديدة منذ آخر زيارة لك إلى \U0001F418" | ||||||
|         other: رائع، لقد قام بمتابعتك %{count} مُتابِعون جُدد أثناء فترة غيابك عن ماستدون ! |  | ||||||
|       subject: |  | ||||||
|         one: "إشعار جديد واحد منذ آخر زيارة لك لـ \U0001F418" |  | ||||||
|         other: "%{count} إشعارات جديدة منذ آخر زيارة لك إلى \U0001F418" |  | ||||||
|       title: أثناء فترة غيابك … |       title: أثناء فترة غيابك … | ||||||
|     favourite: |     favourite: | ||||||
|       body: 'أُعجب %{name} بمنشورك :' |       body: 'أُعجب %{name} بمنشورك :' | ||||||
|  | @ -746,17 +728,11 @@ ar: | ||||||
|   statuses: |   statuses: | ||||||
|     attached: |     attached: | ||||||
|       description: 'مُرفَق : %{attached}' |       description: 'مُرفَق : %{attached}' | ||||||
|       image: |       image: "%{count} صُوَر" | ||||||
|         one: "%{count} صورة" |       video: "%{count} فيديوهات" | ||||||
|         other: "%{count} صُوَر" |  | ||||||
|       video: |  | ||||||
|         one: "%{count} فيديو" |  | ||||||
|         other: "%{count} فيديوهات" |  | ||||||
|     boosted_from_html: تم إعادة ترقيته مِن %{acct_link} |     boosted_from_html: تم إعادة ترقيته مِن %{acct_link} | ||||||
|     content_warning: 'تحذير عن المحتوى : %{warning}' |     content_warning: 'تحذير عن المحتوى : %{warning}' | ||||||
|     disallowed_hashtags: |     disallowed_hashtags: 'يحتوي على أحد الوسوم الممنوعة: %{tags}' | ||||||
|       one: 'يحتوي على وسم ممنوع:  %{tags}' |  | ||||||
|       other: 'يحتوي على أحد الوسوم الممنوعة: %{tags}' |  | ||||||
|     language_detection: اكتشاف اللغة تلقائيا |     language_detection: اكتشاف اللغة تلقائيا | ||||||
|     open_in_web: إفتح في الويب |     open_in_web: إفتح في الويب | ||||||
|     over_character_limit: تم تجاوز حد الـ %{max} حرف المسموح بها |     over_character_limit: تم تجاوز حد الـ %{max} حرف المسموح بها | ||||||
|  |  | ||||||
|  | @ -21,8 +21,7 @@ ast: | ||||||
|     hosted_on: Mastodon ta agospiáu en %{domain} |     hosted_on: Mastodon ta agospiáu en %{domain} | ||||||
|     learn_more: Deprendi más |     learn_more: Deprendi más | ||||||
|     source_code: Códigu fonte |     source_code: Códigu fonte | ||||||
|     status_count_after: |     status_count_after: estaos | ||||||
|       other: estaos |  | ||||||
|     terms: Términos del serviciu |     terms: Términos del serviciu | ||||||
|     user_count_after: usuarios |     user_count_after: usuarios | ||||||
|     what_is_mastodon: "¿Qué ye Mastodon?" |     what_is_mastodon: "¿Qué ye Mastodon?" | ||||||
|  |  | ||||||
|  | @ -61,9 +61,7 @@ bg: | ||||||
|   generic: |   generic: | ||||||
|     changes_saved_msg: Успешно запазване на промените! |     changes_saved_msg: Успешно запазване на промените! | ||||||
|     save_changes: Запази промените |     save_changes: Запази промените | ||||||
|     validation_errors: |     validation_errors: Нещо все още не е наред! Моля, прегледай грешките по-долу | ||||||
|       one: Нещо все още не е наред! Моля, прегледай грешката по-долу |  | ||||||
|       other: Нещо все още не е наред! Моля, прегледай грешките по-долу |  | ||||||
|   imports: |   imports: | ||||||
|     preface: Можеш да импортираш някои данни, като например всички хора, които следваш или блокираш в акаунта си на тази инстанция, от файлове, създадени чрез експорт в друга инстанция. |     preface: Можеш да импортираш някои данни, като например всички хора, които следваш или блокираш в акаунта си на тази инстанция, от файлове, създадени чрез експорт в друга инстанция. | ||||||
|     success: Твоите данни бяха успешно качени и ще бъдат обработени впоследствие. |     success: Твоите данни бяха успешно качени и ще бъдат обработени впоследствие. | ||||||
|  | @ -77,7 +75,7 @@ bg: | ||||||
|       too_many: Не мога да прикача повече от 4 файла |       too_many: Не мога да прикача повече от 4 файла | ||||||
|   notification_mailer: |   notification_mailer: | ||||||
|     digest: |     digest: | ||||||
|       body: 'Ето кратко резюме на нещата, които се случиха от последното ти посещение в %{instance} на %{since}:' |       body: 'Ето кратко резюме на нещата, които се случиха от последното ти посещение на %{since}:' | ||||||
|       mention: "%{name} те спомена в:" |       mention: "%{name} те спомена в:" | ||||||
|       new_followers_summary: |       new_followers_summary: | ||||||
|         one: Имаш един нов последовател! Ура! |         one: Имаш един нов последовател! Ура! | ||||||
|  |  | ||||||
|  | @ -617,7 +617,7 @@ ca: | ||||||
|   notification_mailer: |   notification_mailer: | ||||||
|     digest: |     digest: | ||||||
|       action: Veure totes les notificacions |       action: Veure totes les notificacions | ||||||
|       body: Un resum del que et vas perdre en %{instance} desde la darrera visita el %{since} |       body: Un resum del que et vas perdre desde la darrera visita el %{since} | ||||||
|       mention: "%{name} t'ha mencionat en:" |       mention: "%{name} t'ha mencionat en:" | ||||||
|       new_followers_summary: |       new_followers_summary: | ||||||
|         one: A més, has adquirit un nou seguidor durant la teva absència! Visca! |         one: A més, has adquirit un nou seguidor durant la teva absència! Visca! | ||||||
|  |  | ||||||
|  | @ -30,22 +30,16 @@ cs: | ||||||
|     other_instances: Seznam instancí |     other_instances: Seznam instancí | ||||||
|     privacy_policy: Zásady soukromí |     privacy_policy: Zásady soukromí | ||||||
|     source_code: Zdrojový kód |     source_code: Zdrojový kód | ||||||
|     status_count_after: |     status_count_after: příspěvků | ||||||
|       one: příspěvek |  | ||||||
|       other: příspěvků |  | ||||||
|     status_count_before: Kteří napsali |     status_count_before: Kteří napsali | ||||||
|     terms: Podmínky používání |     terms: Podmínky používání | ||||||
|     user_count_after: |     user_count_after: uživatelů | ||||||
|       one: uživatele |  | ||||||
|       other: uživatelů |  | ||||||
|     user_count_before: Domov |     user_count_before: Domov | ||||||
|     what_is_mastodon: Co je Mastodon? |     what_is_mastodon: Co je Mastodon? | ||||||
|   accounts: |   accounts: | ||||||
|     choices_html: 'Volby uživatele %{name}:' |     choices_html: 'Volby uživatele %{name}:' | ||||||
|     follow: Sledovat |     follow: Sledovat | ||||||
|     followers: |     followers: Sledovatelé | ||||||
|       one: Sledovatel |  | ||||||
|       other: Sledovatelé |  | ||||||
|     following: Sledovaní |     following: Sledovaní | ||||||
|     joined: Připojil/a se v %{date} |     joined: Připojil/a se v %{date} | ||||||
|     link_verified_on: Vlastnictví tohoto odkazu bylo zkontrolováno %{date} |     link_verified_on: Vlastnictví tohoto odkazu bylo zkontrolováno %{date} | ||||||
|  | @ -57,9 +51,7 @@ cs: | ||||||
|     people_who_follow: Lidé, kteří sledují uživatele %{name} |     people_who_follow: Lidé, kteří sledují uživatele %{name} | ||||||
|     pin_errors: |     pin_errors: | ||||||
|       following: Musíte již sledovat osobu, kterou chcete podpořit |       following: Musíte již sledovat osobu, kterou chcete podpořit | ||||||
|     posts: |     posts: Tooty | ||||||
|       one: Toot |  | ||||||
|       other: Tooty |  | ||||||
|     posts_tab_heading: Tooty |     posts_tab_heading: Tooty | ||||||
|     posts_with_replies: Tooty a odpovědi |     posts_with_replies: Tooty a odpovědi | ||||||
|     reserved_username: Toto uživatelské jméno je rezervováno |     reserved_username: Toto uživatelské jméno je rezervováno | ||||||
|  | @ -268,9 +260,7 @@ cs: | ||||||
|         suspend: Suspendovat |         suspend: Suspendovat | ||||||
|       severity: Přísnost |       severity: Přísnost | ||||||
|       show: |       show: | ||||||
|         affected_accounts: |         affected_accounts: "%{count} účtů v databázi byl ovlivněn" | ||||||
|           one: Jeden účet v databázi byl ovlivněn |  | ||||||
|           other: "%{count} účtů v databázi byl ovlivněn" |  | ||||||
|         retroactive: |         retroactive: | ||||||
|           silence: Odtišit všechny existující účty z této domény |           silence: Odtišit všechny existující účty z této domény | ||||||
|           suspend: Zrušit suspenzaci všech existujících účtů z této domény |           suspend: Zrušit suspenzaci všech existujících účtů z této domény | ||||||
|  | @ -562,9 +552,7 @@ cs: | ||||||
|     followers_count: Počet sledovatelů |     followers_count: Počet sledovatelů | ||||||
|     lock_link: Zamkněte svůj účet |     lock_link: Zamkněte svůj účet | ||||||
|     purge: Odstranit ze sledovatelů |     purge: Odstranit ze sledovatelů | ||||||
|     success: |     success: V průběhu utišování sledovatelů z %{count} domén... | ||||||
|       one: V průběhu utišování sledovatelů z jedné domény... |  | ||||||
|       other: V průběhu utišování sledovatelů z %{count} domén... |  | ||||||
|     true_privacy_html: Berte prosím na vědomí, že <strong>skutečného soukromí se dá dosáhnout pouze za pomoci end-to-end šifrování</strong>. |     true_privacy_html: Berte prosím na vědomí, že <strong>skutečného soukromí se dá dosáhnout pouze za pomoci end-to-end šifrování</strong>. | ||||||
|     unlocked_warning_html: Kdokoliv vás může sledovat a okamžitě vidět vaše soukromé příspěvky. %{lock_link}, abyste mohl/a zkontrolovat a odmítnout sledovatele. |     unlocked_warning_html: Kdokoliv vás může sledovat a okamžitě vidět vaše soukromé příspěvky. %{lock_link}, abyste mohl/a zkontrolovat a odmítnout sledovatele. | ||||||
|     unlocked_warning_title: Váš účet není zamknutý |     unlocked_warning_title: Váš účet není zamknutý | ||||||
|  | @ -575,9 +563,7 @@ cs: | ||||||
|   generic: |   generic: | ||||||
|     changes_saved_msg: Změny byly úspěšně uloženy! |     changes_saved_msg: Změny byly úspěšně uloženy! | ||||||
|     save_changes: Uložit změny |     save_changes: Uložit změny | ||||||
|     validation_errors: |     validation_errors: Něco ještě není úplně v pořádku! Prosím zkontrolujte %{count} chyb níže | ||||||
|       one: Něco ještě není úplně v pořádku! Prosím zkontrolujte chybu níže |  | ||||||
|       other: Něco ještě není úplně v pořádku! Prosím zkontrolujte %{count} chyb níže |  | ||||||
|   imports: |   imports: | ||||||
|     preface: Můžete importovat data, která jste exportoval/a z jiné instance, jako například seznam lidí, které sledujete či blokujete. |     preface: Můžete importovat data, která jste exportoval/a z jiné instance, jako například seznam lidí, které sledujete či blokujete. | ||||||
|     success: Vaše data byla úspěšně nahrána a nyní budou zpracována v daný čas |     success: Vaše data byla úspěšně nahrána a nyní budou zpracována v daný čas | ||||||
|  | @ -600,9 +586,7 @@ cs: | ||||||
|     expires_in_prompt: Nikdy |     expires_in_prompt: Nikdy | ||||||
|     generate: Vygenerovat |     generate: Vygenerovat | ||||||
|     invited_by: 'Byl/a jste pozván/a uživatelem:' |     invited_by: 'Byl/a jste pozván/a uživatelem:' | ||||||
|     max_uses: |     max_uses: "%{count} použití" | ||||||
|       one: 1 použití |  | ||||||
|       other: "%{count} použití" |  | ||||||
|     max_uses_prompt: Bez limitu |     max_uses_prompt: Bez limitu | ||||||
|     prompt: Vygenerujte a sdílejte s ostatními odkazy a umožněte jim přístup na tuto instanci |     prompt: Vygenerujte a sdílejte s ostatními odkazy a umožněte jim přístup na tuto instanci | ||||||
|     table: |     table: | ||||||
|  | @ -628,12 +612,8 @@ cs: | ||||||
|       action: Zobrazit všechna oznámení |       action: Zobrazit všechna oznámení | ||||||
|       body: Zde najdete stručný souhrn zpráv, které jste zmeškal/a od vaší poslední návštěvy %{since} |       body: Zde najdete stručný souhrn zpráv, které jste zmeškal/a od vaší poslední návštěvy %{since} | ||||||
|       mention: "%{name} vás zmínil/a v:" |       mention: "%{name} vás zmínil/a v:" | ||||||
|       new_followers_summary: |       new_followers_summary: Navíc jste získal/a %{count} nových sledovatelů, zatímco jste byl/a pryč! Hurá! | ||||||
|         one: Navíc jste získal/a jednoho nového sledovatele, zatímco jste byl/a pryč! Hurá! |       subject: "%{count} nových oznámení od vaší poslední návštěvy \U0001F418" | ||||||
|         other: Navíc jste získal/a %{count} nových sledovatelů, zatímco jste byl/a pryč! Hurá! |  | ||||||
|       subject: |  | ||||||
|         one: "Jedno nové oznámení od vaší poslední návštěvy \U0001F418" |  | ||||||
|         other: "%{count} nových oznámení od vaší poslední návštěvy \U0001F418" |  | ||||||
|       title: Ve vaší absenci... |       title: Ve vaší absenci... | ||||||
|     favourite: |     favourite: | ||||||
|       body: 'Váš příspěvek si oblíbil/a %{name}:' |       body: 'Váš příspěvek si oblíbil/a %{name}:' | ||||||
|  | @ -750,17 +730,11 @@ cs: | ||||||
|   statuses: |   statuses: | ||||||
|     attached: |     attached: | ||||||
|       description: 'Přiloženo: %{attached}' |       description: 'Přiloženo: %{attached}' | ||||||
|       image: |       image: "%{count} obrázků" | ||||||
|         one: "%{count} obrázek" |       video: "%{count} videí" | ||||||
|         other: "%{count} obrázků" |  | ||||||
|       video: |  | ||||||
|         one: "%{count} video" |  | ||||||
|         other: "%{count} videí" |  | ||||||
|     boosted_from_html: Boostnuto z %{acct_link} |     boosted_from_html: Boostnuto z %{acct_link} | ||||||
|     content_warning: 'Varování o obsahu: %{warning}' |     content_warning: 'Varování o obsahu: %{warning}' | ||||||
|     disallowed_hashtags: |     disallowed_hashtags: 'obsahuje nepovolené hashtagy: %{tags}' | ||||||
|       one: 'obsahuje nepovolený hashtag: %{tags}' |  | ||||||
|       other: 'obsahuje nepovolené hashtagy: %{tags}' |  | ||||||
|     language_detection: Zjistit jazyk automaticky |     language_detection: Zjistit jazyk automaticky | ||||||
|     open_in_web: Otevřít na webu |     open_in_web: Otevřít na webu | ||||||
|     over_character_limit: limit %{max} znaků byl překročen |     over_character_limit: limit %{max} znaků byl překročen | ||||||
|  |  | ||||||
|  | @ -30,22 +30,16 @@ cy: | ||||||
|     other_instances: Rhestr achosion |     other_instances: Rhestr achosion | ||||||
|     privacy_policy: Polisi preifatrwydd |     privacy_policy: Polisi preifatrwydd | ||||||
|     source_code: Cod ffynhonnell |     source_code: Cod ffynhonnell | ||||||
|     status_count_after: |     status_count_after: statws | ||||||
|       one: statws |  | ||||||
|       other: statws |  | ||||||
|     status_count_before: Pwy ysgrifennodd |     status_count_before: Pwy ysgrifennodd | ||||||
|     terms: Telerau gwasanaeth |     terms: Telerau gwasanaeth | ||||||
|     user_count_after: |     user_count_after: defnyddwyr | ||||||
|       one: defnyddiwr |  | ||||||
|       other: defnyddwyr |  | ||||||
|     user_count_before: Cartref i |     user_count_before: Cartref i | ||||||
|     what_is_mastodon: Beth yw Mastodon? |     what_is_mastodon: Beth yw Mastodon? | ||||||
|   accounts: |   accounts: | ||||||
|     choices_html: 'Dewisiadau %{name}:' |     choices_html: 'Dewisiadau %{name}:' | ||||||
|     follow: Dilynwch |     follow: Dilynwch | ||||||
|     followers: |     followers: Dilynwyr | ||||||
|       one: Dilynwr |  | ||||||
|       other: Dilynwyr |  | ||||||
|     following: Yn dilyn |     following: Yn dilyn | ||||||
|     joined: Ymunodd %{date} |     joined: Ymunodd %{date} | ||||||
|     media: Cyfryngau |     media: Cyfryngau | ||||||
|  | @ -56,9 +50,7 @@ cy: | ||||||
|     people_who_follow: Pobl sy'n dilyn %{name} |     people_who_follow: Pobl sy'n dilyn %{name} | ||||||
|     pin_errors: |     pin_errors: | ||||||
|       following: Rhaid i ti fod yn dilyn y person yr ydych am ei gymeradwyo yn barod |       following: Rhaid i ti fod yn dilyn y person yr ydych am ei gymeradwyo yn barod | ||||||
|     posts: |     posts: Tŵtiau | ||||||
|       one: Tŵt |  | ||||||
|       other: Tŵtiau |  | ||||||
|     posts_tab_heading: Tŵtiau |     posts_tab_heading: Tŵtiau | ||||||
|     posts_with_replies: Tŵtiau ac atebion |     posts_with_replies: Tŵtiau ac atebion | ||||||
|     reserved_username: Mae'r enw defnyddior yn neilltuedig |     reserved_username: Mae'r enw defnyddior yn neilltuedig | ||||||
|  | @ -262,9 +254,7 @@ cy: | ||||||
|         suspend: Atal |         suspend: Atal | ||||||
|       severity: Difrifoldeb |       severity: Difrifoldeb | ||||||
|       show: |       show: | ||||||
|         affected_accounts: |         affected_accounts: "%{count} o gyfrifoedd yn y bas data wedi eu hefeithio" | ||||||
|           one: Mae un cyfri yn y bas data wedi ei effeithio |  | ||||||
|           other: "%{count} o gyfrifoedd yn y bas data wedi eu hefeithio" |  | ||||||
|         retroactive: |         retroactive: | ||||||
|           silence: Dad-dawelu pob cyfri presennol o'r parth hwn |           silence: Dad-dawelu pob cyfri presennol o'r parth hwn | ||||||
|           suspend: Dad-atal pob cyfrif o'r parth hwn sy'n bodoli |           suspend: Dad-atal pob cyfrif o'r parth hwn sy'n bodoli | ||||||
|  | @ -508,9 +498,7 @@ cy: | ||||||
|   generic: |   generic: | ||||||
|     changes_saved_msg: Llwyddwyd i gadw y newidiadau! |     changes_saved_msg: Llwyddwyd i gadw y newidiadau! | ||||||
|     save_changes: Cadw newidiadau |     save_changes: Cadw newidiadau | ||||||
|     validation_errors: |     validation_errors: Mae rhywbeth o'i le o hyd! Edrychwch ar y %{count} gwall isod os gwelwch yn dda | ||||||
|       one: Mae rhywbeth o'i le o hyd! Edrychwch ar y gwall isod os gwelwch yn dda |  | ||||||
|       other: Mae rhywbeth o'i le o hyd! Edrychwch ar y %{count} gwall isod os gwelwch yn dda |  | ||||||
|   imports: |   imports: | ||||||
|     preface: Mae modd mewnforio data yr ydych wedi allforio o achos arall, megis rhestr o bobl yr ydych yn ei ddilyn neu yn blocio. |     preface: Mae modd mewnforio data yr ydych wedi allforio o achos arall, megis rhestr o bobl yr ydych yn ei ddilyn neu yn blocio. | ||||||
|     success: Uwchlwyddwyd eich data yn llwyddiannus ac fe fydd yn cael ei brosesu mewn da bryd |     success: Uwchlwyddwyd eich data yn llwyddiannus ac fe fydd yn cael ei brosesu mewn da bryd | ||||||
|  |  | ||||||
|  | @ -77,6 +77,4 @@ ar: | ||||||
|       expired: إنتهت مدة صلاحيته، الرجاء طلب واحد جديد |       expired: إنتهت مدة صلاحيته، الرجاء طلب واحد جديد | ||||||
|       not_found: لا يوجد |       not_found: لا يوجد | ||||||
|       not_locked: ليس مقفلاً |       not_locked: ليس مقفلاً | ||||||
|       not_saved: |       not_saved: "%{count} أخطاء منعت %{resource} مِن القيام بالإحتفاظ :" | ||||||
|         one: 'خطأ واحد منَعَ %{resource} مِن القيام بالإحتفاظ :' |  | ||||||
|         other: "%{count} أخطاء منعت %{resource} مِن القيام بالإحتفاظ :" |  | ||||||
|  |  | ||||||
|  | @ -1 +1,2 @@ | ||||||
|  | --- | ||||||
| ast: {} | ast: {} | ||||||
|  |  | ||||||
|  | @ -8,16 +8,16 @@ bg: | ||||||
|     failure: |     failure: | ||||||
|       already_authenticated: Вече си вътре в профила си. |       already_authenticated: Вече си вътре в профила си. | ||||||
|       inactive: Профилът ти все още не е активиран. |       inactive: Профилът ти все още не е активиран. | ||||||
|       invalid: Невалиден имейл адрес или парола. |       invalid: Невалиден %{authentication_keys}. | ||||||
|       last_attempt: Разполагаш с още един опит преди профилът ти да бъде заключен. |       last_attempt: Разполагаш с още един опит преди профилът ти да бъде заключен. | ||||||
|       locked: Профилът ти е заключен. |       locked: Профилът ти е заключен. | ||||||
|       not_found_in_database: Невалидни стойности за %{authentication_keys} или парола. |       not_found_in_database: Невалиден %{authentication_keys}. | ||||||
|       timeout: Сесията ти изтече, моля влез отново, за да продължиш. |       timeout: Сесията ти изтече, моля влез отново, за да продължиш. | ||||||
|       unauthenticated: Преди да продължиш, трябва да влезеш в профила си или да се регистрираш. |       unauthenticated: Преди да продължиш, трябва да влезеш в профила си или да се регистрираш. | ||||||
|       unconfirmed: Преди да продължиш, трябва да потвърдиш регистрацията си. |       unconfirmed: Преди да продължиш, трябва да потвърдиш регистрацията си. | ||||||
|     mailer: |     mailer: | ||||||
|       confirmation_instructions: |       confirmation_instructions: | ||||||
|         subject: 'Mastodon: Инструкции за потвърждаване' |         subject: 'Mastodon: Инструкции за потвърждаване %{instance}' | ||||||
|       password_change: |       password_change: | ||||||
|         subject: 'Mastodon: Паролата е променена' |         subject: 'Mastodon: Паролата е променена' | ||||||
|       reset_password_instructions: |       reset_password_instructions: | ||||||
|  |  | ||||||
|  | @ -20,7 +20,7 @@ ca: | ||||||
|         action: Verifica l'adreça de correu |         action: Verifica l'adreça de correu | ||||||
|         explanation: Has creat un compte a %{host} amb aquesta adreça de correu electrònic. Estàs a un sol clic de l'activació. Si no fos així, ignora aquest correu electrònic. |         explanation: Has creat un compte a %{host} amb aquesta adreça de correu electrònic. Estàs a un sol clic de l'activació. Si no fos així, ignora aquest correu electrònic. | ||||||
|         extra_html: Si us plau consulta també <a href="%{terms_path}"> les regles de la instància</a> i <a href="%{policy_path}"> les nostres condicions de servei</a>. |         extra_html: Si us plau consulta també <a href="%{terms_path}"> les regles de la instància</a> i <a href="%{policy_path}"> les nostres condicions de servei</a>. | ||||||
|         subject: 'Mastodon: Instruccions de confirmació' |         subject: 'Mastodon: Instruccions de confirmació %{instance}' | ||||||
|         title: Verifica l'adreça de correu |         title: Verifica l'adreça de correu | ||||||
|       email_changed: |       email_changed: | ||||||
|         explanation: 'L''adreça de correu del teu compte s''està canviant a:' |         explanation: 'L''adreça de correu del teu compte s''està canviant a:' | ||||||
|  |  | ||||||
|  | @ -77,6 +77,4 @@ cs: | ||||||
|       expired: vypršel, prosím vyžádejte si nový |       expired: vypršel, prosím vyžádejte si nový | ||||||
|       not_found: nenalezen |       not_found: nenalezen | ||||||
|       not_locked: nebyl uzamčen |       not_locked: nebyl uzamčen | ||||||
|       not_saved: |       not_saved: "%{count} chyb zabránila uložení tohoto %{resource}:" | ||||||
|         one: '1 chyba zabránila uložení tohoto %{resource}:' |  | ||||||
|         other: "%{count} chyb zabránila uložení tohoto %{resource}:" |  | ||||||
|  |  | ||||||
|  | @ -77,6 +77,4 @@ cy: | ||||||
|       expired: wedi dod i ben, gwnewch gais am un newydd os gwelwch yn dda |       expired: wedi dod i ben, gwnewch gais am un newydd os gwelwch yn dda | ||||||
|       not_found: heb ei ganfod |       not_found: heb ei ganfod | ||||||
|       not_locked: heb ei gloi |       not_locked: heb ei gloi | ||||||
|       not_saved: |       not_saved: 'Gwaharddwyd yr %{resource} rhag cael ei arbed oherwydd %{count} gwall:' | ||||||
|         one: 'Gwaharddwyd yr %{resource} rhag cael ei arbed oherwydd 1 gwall:' |  | ||||||
|         other: 'Gwaharddwyd yr %{resource} rhag cael ei arbed oherwydd %{count} gwall:' |  | ||||||
|  |  | ||||||
|  | @ -8,10 +8,10 @@ fr: | ||||||
|     failure: |     failure: | ||||||
|       already_authenticated: Vous êtes déjà connecté⋅e. |       already_authenticated: Vous êtes déjà connecté⋅e. | ||||||
|       inactive: Votre compte n’est pas encore activé. |       inactive: Votre compte n’est pas encore activé. | ||||||
|       invalid: Courriel ou mot de passe incorrect. |       invalid: "%{authentication_keys} incorrect." | ||||||
|       last_attempt: Vous avez droit à une tentative avant que votre compte ne soit verrouillé. |       last_attempt: Vous avez droit à une tentative avant que votre compte ne soit verrouillé. | ||||||
|       locked: Votre compte est verrouillé. |       locked: Votre compte est verrouillé. | ||||||
|       not_found_in_database: Courriel ou mot de passe invalide. |       not_found_in_database: "%{authentication_keys} invalide." | ||||||
|       timeout: Votre session a expiré. Veuillez vous reconnecter pour continuer. |       timeout: Votre session a expiré. Veuillez vous reconnecter pour continuer. | ||||||
|       unauthenticated: Vous devez vous connecter ou vous inscrire pour continuer. |       unauthenticated: Vous devez vous connecter ou vous inscrire pour continuer. | ||||||
|       unconfirmed: Vous devez valider votre compte pour continuer. |       unconfirmed: Vous devez valider votre compte pour continuer. | ||||||
|  |  | ||||||
|  | @ -17,7 +17,7 @@ he: | ||||||
|       unconfirmed: יש לאמת את כתובת הדוא"ל על מנת להמשיך. |       unconfirmed: יש לאמת את כתובת הדוא"ל על מנת להמשיך. | ||||||
|     mailer: |     mailer: | ||||||
|       confirmation_instructions: |       confirmation_instructions: | ||||||
|         subject: 'מסטודון: הוראות אימות' |         subject: 'מסטודון: הוראות אימות %{instance}' | ||||||
|       password_change: |       password_change: | ||||||
|         subject: 'מסטודון: הסיסמא שונתה' |         subject: 'מסטודון: הסיסמא שונתה' | ||||||
|       reset_password_instructions: |       reset_password_instructions: | ||||||
|  |  | ||||||
|  | @ -16,7 +16,7 @@ hr: | ||||||
|       unconfirmed: Moraš potvrditi svoju email adresu prije no što nastaviš. |       unconfirmed: Moraš potvrditi svoju email adresu prije no što nastaviš. | ||||||
|     mailer: |     mailer: | ||||||
|       confirmation_instructions: |       confirmation_instructions: | ||||||
|         subject: 'Mastodon: Upute za potvrđivanje' |         subject: 'Mastodon: Upute za potvrđivanje %{instance}' | ||||||
|       email_changed: |       email_changed: | ||||||
|         subject: 'Mastodon: Email adresa je promijenjena' |         subject: 'Mastodon: Email adresa je promijenjena' | ||||||
|         title: Nova email adresa |         title: Nova email adresa | ||||||
|  | @ -58,6 +58,4 @@ hr: | ||||||
|       expired: je istekao, zatraži novu |       expired: je istekao, zatraži novu | ||||||
|       not_found: nije nađen |       not_found: nije nađen | ||||||
|       not_locked: nije zaključan |       not_locked: nije zaključan | ||||||
|       not_saved: |       not_saved: "%{count} greške su zabranile da ovaj %{resource} bude sačuvan:" | ||||||
|         one: '1 greška je zabranila da ovaj %{resource} bude sačuvan:' |  | ||||||
|         other: "%{count} greške su zabranile da ovaj %{resource} bude sačuvan:" |  | ||||||
|  |  | ||||||
|  | @ -20,7 +20,7 @@ hu: | ||||||
|         action: Erősítsd meg az e-mail címedet |         action: Erősítsd meg az e-mail címedet | ||||||
|         explanation: Ezzel az e-mail címmel kezdeményeztek regisztrációt a(z) %{host} oldalon. Csak egy kattintás, és a felhasználói fiókdat aktiváljuk. Ha a regisztrációt nem te kezdeményezted, kérjük tekintsd ezt az e-mailt tárgytalannak. |         explanation: Ezzel az e-mail címmel kezdeményeztek regisztrációt a(z) %{host} oldalon. Csak egy kattintás, és a felhasználói fiókdat aktiváljuk. Ha a regisztrációt nem te kezdeményezted, kérjük tekintsd ezt az e-mailt tárgytalannak. | ||||||
|         extra_html: Kérjük tekintsd át a <a href="%{terms_path}">az instancia szabályzatát</a> és <a href="%{policy_path}">a felhasználási feltételeket</a>. |         extra_html: Kérjük tekintsd át a <a href="%{terms_path}">az instancia szabályzatát</a> és <a href="%{policy_path}">a felhasználási feltételeket</a>. | ||||||
|         subject: 'Mastodon: Megerősítési lépések' |         subject: 'Mastodon: Megerősítési lépések %{instance}' | ||||||
|         title: E-mail cím megerősítése |         title: E-mail cím megerősítése | ||||||
|       email_changed: |       email_changed: | ||||||
|         explanation: 'A fiókodhoz tartozó e-mail címet az alábbira módosítod:' |         explanation: 'A fiókodhoz tartozó e-mail címet az alábbira módosítod:' | ||||||
|  |  | ||||||
|  | @ -8,16 +8,16 @@ io: | ||||||
|     failure: |     failure: | ||||||
|       already_authenticated: Tu ya esas enirinta. |       already_authenticated: Tu ya esas enirinta. | ||||||
|       inactive: Tua konto ankore ne konfirmesas. |       inactive: Tua konto ankore ne konfirmesas. | ||||||
|       invalid: Nejusta retpost-adreso o pasvorto. |       invalid: Nejusta %{authentication_keys}. | ||||||
|       last_attempt: Tu ankore povas probar unfoye ante ke tua konto esos extingita. |       last_attempt: Tu ankore povas probar unfoye ante ke tua konto esos extingita. | ||||||
|       locked: Tua konto esas extingita. |       locked: Tua konto esas extingita. | ||||||
|       not_found_in_database: Nejusta retpost-adreso o pasvorto. |       not_found_in_database: Nejusta %{authentication_keys}. | ||||||
|       timeout: Tua kunsido expiris. Voluntez rienirar por durar. |       timeout: Tua kunsido expiris. Voluntez rienirar por durar. | ||||||
|       unauthenticated: Tu devas enirar o membreskar por durar. |       unauthenticated: Tu devas enirar o membreskar por durar. | ||||||
|       unconfirmed: Tu devas konfirmar tua konto por durar. |       unconfirmed: Tu devas konfirmar tua konto por durar. | ||||||
|     mailer: |     mailer: | ||||||
|       confirmation_instructions: |       confirmation_instructions: | ||||||
|         subject: Instrucioni por konfirmar |         subject: Instrucioni por konfirmar %{instance} | ||||||
|       password_change: |       password_change: | ||||||
|         subject: Tua pasvorto chanjesis senprobleme. |         subject: Tua pasvorto chanjesis senprobleme. | ||||||
|       reset_password_instructions: |       reset_password_instructions: | ||||||
|  |  | ||||||
|  | @ -20,7 +20,7 @@ ja: | ||||||
|         action: メールアドレスの確認 |         action: メールアドレスの確認 | ||||||
|         explanation: このメールアドレスで%{host}にアカウントを作成しました。有効にするまであと一歩です。もし心当たりがない場合、申し訳ありませんがこのメールを無視してください。 |         explanation: このメールアドレスで%{host}にアカウントを作成しました。有効にするまであと一歩です。もし心当たりがない場合、申し訳ありませんがこのメールを無視してください。 | ||||||
|         extra_html: また <a href="%{terms_path}">インスタンスのルール</a> と <a href="%{policy_path}">利用規約</a> もお読みください。 |         extra_html: また <a href="%{terms_path}">インスタンスのルール</a> と <a href="%{policy_path}">利用規約</a> もお読みください。 | ||||||
|         subject: 'Mastodon: メールアドレスの確認' |         subject: 'Mastodon: メールアドレスの確認 %{instance}' | ||||||
|         title: メールアドレスの確認 |         title: メールアドレスの確認 | ||||||
|       email_changed: |       email_changed: | ||||||
|         explanation: 'アカウントのメールアドレスは以下のように変更されます:' |         explanation: 'アカウントのメールアドレスは以下のように変更されます:' | ||||||
|  |  | ||||||
|  | @ -8,11 +8,11 @@ nl: | ||||||
|     failure: |     failure: | ||||||
|       already_authenticated: Je bent al ingelogd. |       already_authenticated: Je bent al ingelogd. | ||||||
|       inactive: Jouw account is nog niet geactiveerd. |       inactive: Jouw account is nog niet geactiveerd. | ||||||
|       invalid: Ongeldig e-mailadres of wachtwoord. |       invalid: Ongeldig %{authentication_keys}. | ||||||
|       invalid_token: Ongeldige bevestigingscode. |       invalid_token: Ongeldige bevestigingscode. | ||||||
|       last_attempt: Je hebt nog één poging over voordat jouw account wordt opgeschort. |       last_attempt: Je hebt nog één poging over voordat jouw account wordt opgeschort. | ||||||
|       locked: Jouw account is opgeschort. |       locked: Jouw account is opgeschort. | ||||||
|       not_found_in_database: Ongeldig e-mailadres of wachtwoord. |       not_found_in_database: Ongeldig %{authentication_keys}. | ||||||
|       timeout: Jouw sessie is verlopen, log opnieuw in. |       timeout: Jouw sessie is verlopen, log opnieuw in. | ||||||
|       unauthenticated: Je dient in te loggen of te registreren. |       unauthenticated: Je dient in te loggen of te registreren. | ||||||
|       unconfirmed: Je dient eerst jouw account te bevestigen. |       unconfirmed: Je dient eerst jouw account te bevestigen. | ||||||
|  |  | ||||||
|  | @ -20,7 +20,7 @@ | ||||||
|         action: Bekreft e-postadresse |         action: Bekreft e-postadresse | ||||||
|         explanation: Du har laget en konto på %{host} med denne e-postadressen. Du er ett klikk unna å aktivere den. Hvis dette ikke var deg, vennligst se bort fra denne e-posten. |         explanation: Du har laget en konto på %{host} med denne e-postadressen. Du er ett klikk unna å aktivere den. Hvis dette ikke var deg, vennligst se bort fra denne e-posten. | ||||||
|         extra_html: Vennligst også sjekk ut <a href="%{terms_path}">instansens regler </a> og <a href="%{policy_path}">våre bruksvilkår</a>. |         extra_html: Vennligst også sjekk ut <a href="%{terms_path}">instansens regler </a> og <a href="%{policy_path}">våre bruksvilkår</a>. | ||||||
|         subject: 'Mastodon: Instruksjoner for å bekrefte e-postadresse' |         subject: 'Mastodon: Instruksjoner for å bekrefte e-postadresse %{instance}' | ||||||
|         title: Bekreft e-postadresse |         title: Bekreft e-postadresse | ||||||
|       email_changed: |       email_changed: | ||||||
|         explanation: 'E-postadressen til din konto endres til:' |         explanation: 'E-postadressen til din konto endres til:' | ||||||
|  |  | ||||||
|  | @ -8,10 +8,10 @@ oc: | ||||||
|     failure: |     failure: | ||||||
|       already_authenticated: Sètz ja connectat. |       already_authenticated: Sètz ja connectat. | ||||||
|       inactive: Vòstre compte es pas encara activat. |       inactive: Vòstre compte es pas encara activat. | ||||||
|       invalid: Corrièl o senhal invalid. |       invalid: "%{authentication_keys} invalid." | ||||||
|       last_attempt: Vos demòra un ensag abans que vòstre compte siasque blocat. |       last_attempt: Vos demòra un ensag abans que vòstre compte siasque blocat. | ||||||
|       locked: Vòstre compte es blocat. |       locked: Vòstre compte es blocat. | ||||||
|       not_found_in_database: Corrièl o senhal invalid. |       not_found_in_database: "%{authentication_keys} invalid." | ||||||
|       timeout: Vòstra session a expirat. Mercés de vos tornar connectar per contunhar. |       timeout: Vòstra session a expirat. Mercés de vos tornar connectar per contunhar. | ||||||
|       unauthenticated: Vos cal vos connectar o marcar abans de contunhar. |       unauthenticated: Vos cal vos connectar o marcar abans de contunhar. | ||||||
|       unconfirmed: Vos cal confirmar vòstra adreça de corrièl abans de contunhar. |       unconfirmed: Vos cal confirmar vòstra adreça de corrièl abans de contunhar. | ||||||
|  |  | ||||||
|  | @ -20,7 +20,7 @@ pl: | ||||||
|         action: Zweryfikuj adres e-mail |         action: Zweryfikuj adres e-mail | ||||||
|         explanation: Utworzyłeś(-aś) konto na %{host} podając ten adres e-mail. Jedno kliknięcie dzieli Cię od aktywacji tego konta. Jeżeli to nie Ty, zignoruj ten e-mail. |         explanation: Utworzyłeś(-aś) konto na %{host} podając ten adres e-mail. Jedno kliknięcie dzieli Cię od aktywacji tego konta. Jeżeli to nie Ty, zignoruj ten e-mail. | ||||||
|         extra_html: Przeczytaj też <a href="%{terms_path}">regulamin instancji</a> i <a href="%{policy_path}">nasze zasady użytkowania</a>. |         extra_html: Przeczytaj też <a href="%{terms_path}">regulamin instancji</a> i <a href="%{policy_path}">nasze zasady użytkowania</a>. | ||||||
|         subject: 'Mastodon: Instrukcje weryfikacji adresu e-mail' |         subject: 'Mastodon: Instrukcje weryfikacji adresu e-mail na %{instance}' | ||||||
|         title: Zweryfikuj adres e-mail |         title: Zweryfikuj adres e-mail | ||||||
|       email_changed: |       email_changed: | ||||||
|         explanation: 'Adres e-mail dla Twojego konta zostanie zmieniony na:' |         explanation: 'Adres e-mail dla Twojego konta zostanie zmieniony na:' | ||||||
|  | @ -35,7 +35,7 @@ pl: | ||||||
|       reconfirmation_instructions: |       reconfirmation_instructions: | ||||||
|         explanation: Potwierdź nowy adres aby zmienić e-mail. |         explanation: Potwierdź nowy adres aby zmienić e-mail. | ||||||
|         extra: Jeżeli nie próbowałeś(-aś) zmienić e-maila, zignoruj tą wiadomość. Adres e-mail przypisany do konta Mastodona nie ulegnie zmianie, jeżeli nie użyjesz powyższego odnośniku. |         extra: Jeżeli nie próbowałeś(-aś) zmienić e-maila, zignoruj tą wiadomość. Adres e-mail przypisany do konta Mastodona nie ulegnie zmianie, jeżeli nie użyjesz powyższego odnośniku. | ||||||
|         subject: 'Mastodon: Potwierdź adres e-mail na &{instance}' |         subject: 'Mastodon: Potwierdź adres e-mail na %{instance}' | ||||||
|         title: Zweryfikuj adres e-mail |         title: Zweryfikuj adres e-mail | ||||||
|       reset_password_instructions: |       reset_password_instructions: | ||||||
|         action: Zmień hasło |         action: Zmień hasło | ||||||
|  | @ -77,6 +77,4 @@ pl: | ||||||
|       expired: wygasło, poproś o nowe |       expired: wygasło, poproś o nowe | ||||||
|       not_found: nie znaleziono |       not_found: nie znaleziono | ||||||
|       not_locked: było zablokowane |       not_locked: było zablokowane | ||||||
|       not_saved: |       not_saved: 'Błędy (%{count}) uniemożliwiły zapisanie zasobu %{resource}:' | ||||||
|         one: '1 błąd uniemożliwił zapisanie zasobu %{resource}:' |  | ||||||
|         other: 'Błędy (%{count}) uniemożliwiły zapisanie zasobu %{resource}:' |  | ||||||
|  |  | ||||||
|  | @ -20,7 +20,7 @@ pt-BR: | ||||||
|         action: Verificar endereço de e-mail |         action: Verificar endereço de e-mail | ||||||
|         explanation: Você criou uma conta em %{host} com esse endereço de e-mail. Você está a um clique de ativá-la. Se não foi você, por favor ignore esse e-mail. |         explanation: Você criou uma conta em %{host} com esse endereço de e-mail. Você está a um clique de ativá-la. Se não foi você, por favor ignore esse e-mail. | ||||||
|         extra_html: Por favor confira também <a href="%{terms_path}">as regras da instância</a> e <a href="%{policy_path}">nossos termos de serviço</a>. |         extra_html: Por favor confira também <a href="%{terms_path}">as regras da instância</a> e <a href="%{policy_path}">nossos termos de serviço</a>. | ||||||
|         subject: 'Mastodon: Instruções de confirmação' |         subject: 'Mastodon: Instruções de confirmação para %{instance}' | ||||||
|         title: Verifique o endereço de e-mail |         title: Verifique o endereço de e-mail | ||||||
|       email_changed: |       email_changed: | ||||||
|         explanation: 'O e-mail associado à sua conta será mudado para:' |         explanation: 'O e-mail associado à sua conta será mudado para:' | ||||||
|  |  | ||||||
|  | @ -17,7 +17,7 @@ uk: | ||||||
|       unconfirmed: Для продовження Вам потрібно підтвердити Вашу поштову скриньку. |       unconfirmed: Для продовження Вам потрібно підтвердити Вашу поштову скриньку. | ||||||
|     mailer: |     mailer: | ||||||
|       confirmation_instructions: |       confirmation_instructions: | ||||||
|         subject: 'Mastodon: Інструкції для підтвердження' |         subject: 'Mastodon: Інструкції для підтвердження %{instance}' | ||||||
|       password_change: |       password_change: | ||||||
|         subject: 'Mastodon: Ваш пароль змінений' |         subject: 'Mastodon: Ваш пароль змінений' | ||||||
|       reset_password_instructions: |       reset_password_instructions: | ||||||
|  |  | ||||||
|  | @ -20,7 +20,7 @@ zh-HK: | ||||||
|         action: 驗證電子郵件地址 |         action: 驗證電子郵件地址 | ||||||
|         explanation: 你在 %{host} 上使用這個電子郵件地址建立了一個帳戶。只需點擊下面的連結,即可啟用帳戶。如果你並沒有建立過帳戶,請忽略此郵件。 |         explanation: 你在 %{host} 上使用這個電子郵件地址建立了一個帳戶。只需點擊下面的連結,即可啟用帳戶。如果你並沒有建立過帳戶,請忽略此郵件。 | ||||||
|         extra_html: 請記得閱讀本服務站的<a href="%{terms_path}">相關規定</a>和<a href="%{policy_path}">使用條款</a>。 |         extra_html: 請記得閱讀本服務站的<a href="%{terms_path}">相關規定</a>和<a href="%{policy_path}">使用條款</a>。 | ||||||
|         subject: 'Mastodon: 確認電郵地址' |         subject: 'Mastodon: 確認電郵地址 %{instance}' | ||||||
|         title: 驗證電子郵件地址 |         title: 驗證電子郵件地址 | ||||||
|       email_changed: |       email_changed: | ||||||
|         explanation: 你的帳戶的電子郵件地址即將變更為: |         explanation: 你的帳戶的電子郵件地址即將變更為: | ||||||
|  |  | ||||||
|  | @ -20,7 +20,7 @@ zh-TW: | ||||||
|         action: 驗證 E-mail 地址 |         action: 驗證 E-mail 地址 | ||||||
|         explanation: 您已經在 %{host} 上以此 E-mail 地址建立了一個帳號。您距離啟用它只剩一次點擊之遙了。如果這不是你,請忽略此 E-mail 。 |         explanation: 您已經在 %{host} 上以此 E-mail 地址建立了一個帳號。您距離啟用它只剩一次點擊之遙了。如果這不是你,請忽略此 E-mail 。 | ||||||
|         extra_html: 同時也請看看<a href="%{terms_path}">該站點的規則</a>與<a href="%{policy_path}">我們的服務條款</a>。 |         extra_html: 同時也請看看<a href="%{terms_path}">該站點的規則</a>與<a href="%{policy_path}">我們的服務條款</a>。 | ||||||
|         subject: 'Mastodon: 信箱驗證' |         subject: 'Mastodon: 信箱驗證 %{instance}' | ||||||
|         title: 驗證 E-mail 地址 |         title: 驗證 E-mail 地址 | ||||||
|       email_changed: |       email_changed: | ||||||
|         explanation: 您帳號的 E-mail 地址被變更為: |         explanation: 您帳號的 E-mail 地址被變更為: | ||||||
|  | @ -77,6 +77,4 @@ zh-TW: | ||||||
|       expired: 已經過期,請重新申請 |       expired: 已經過期,請重新申請 | ||||||
|       not_found: 找不到 |       not_found: 找不到 | ||||||
|       not_locked: 並未被鎖定 |       not_locked: 並未被鎖定 | ||||||
|       not_saved: |       not_saved: "%{count} 個錯誤使 %{resource} 無法被儲存︰" | ||||||
|         one: 1 個錯誤使 %{resource} 無法被儲存︰ |  | ||||||
|         other: "%{count} 個錯誤使 %{resource} 無法被儲存︰" |  | ||||||
|  |  | ||||||
|  | @ -1 +1,2 @@ | ||||||
|  | --- | ||||||
| ast: {} | ast: {} | ||||||
|  |  | ||||||
|  | @ -1 +1,2 @@ | ||||||
|  | --- | ||||||
| {} | {} | ||||||
|  |  | ||||||
|  | @ -297,7 +297,7 @@ he: | ||||||
|       too_many: לא ניתן להוסיף יותר מארבעה קבצים |       too_many: לא ניתן להוסיף יותר מארבעה קבצים | ||||||
|   notification_mailer: |   notification_mailer: | ||||||
|     digest: |     digest: | ||||||
|       body: 'להלן סיכום זריז של הדברים שקרו על %{instance} מאז ביקורך האחרון ב-%{since}:' |       body: 'להלן סיכום זריז של הדברים שקרו על מאז ביקורך האחרון ב-%{since}:' | ||||||
|       mention: "%{name} פנה אליך ב:" |       mention: "%{name} פנה אליך ב:" | ||||||
|       new_followers_summary: |       new_followers_summary: | ||||||
|         one: נוסף לך עוקב! סחתיין! |         one: נוסף לך עוקב! סחתיין! | ||||||
|  |  | ||||||
|  | @ -61,9 +61,7 @@ hr: | ||||||
|   generic: |   generic: | ||||||
|     changes_saved_msg: Izmjene su uspješno sačuvane! |     changes_saved_msg: Izmjene su uspješno sačuvane! | ||||||
|     save_changes: Sačuvaj izmjene |     save_changes: Sačuvaj izmjene | ||||||
|     validation_errors: |     validation_errors: Nešto još uvijek ne štima! Vidi %{count} greške ispod | ||||||
|       one: Nešto ne štima! Vidi grešku ispod |  | ||||||
|       other: Nešto još uvijek ne štima! Vidi %{count} greške ispod |  | ||||||
|   imports: |   imports: | ||||||
|     preface: Možeš uvesti određene podatke kao što su svi ljudi koje slijediš ili blokiraš u svoj račun na ovoj instanci, sa fajlova kreiranih izvozom sa druge instance. |     preface: Možeš uvesti određene podatke kao što su svi ljudi koje slijediš ili blokiraš u svoj račun na ovoj instanci, sa fajlova kreiranih izvozom sa druge instance. | ||||||
|     success: Tvoji podaci su uspješno uploadani i bit će obrađeni u dogledno vrijeme |     success: Tvoji podaci su uspješno uploadani i bit će obrađeni u dogledno vrijeme | ||||||
|  | @ -74,14 +72,10 @@ hr: | ||||||
|     upload: Upload |     upload: Upload | ||||||
|   notification_mailer: |   notification_mailer: | ||||||
|     digest: |     digest: | ||||||
|       body: 'Ovo je kratak sažetak propuštenog %{instance} od tvog prošlog posjeta %{since}:' |       body: 'Ovo je kratak sažetak propuštenog od tvog prošlog posjeta %{since}:' | ||||||
|       mention: "%{name} te je spomenuo:" |       mention: "%{name} te je spomenuo:" | ||||||
|       new_followers_summary: |       new_followers_summary: Imaš %{count} novih sljedbenika! Prekrašno! | ||||||
|         one: Imaš novog sljedbenika! Yay! |       subject: "%{count} novih notifikacija od tvog prošlog posjeta \U0001F418" | ||||||
|         other: Imaš %{count} novih sljedbenika! Prekrašno! |  | ||||||
|       subject: |  | ||||||
|         one: "1 nova notifikacija od tvog prošlog posjeta \U0001F418" |  | ||||||
|         other: "%{count} novih notifikacija od tvog prošlog posjeta \U0001F418" |  | ||||||
|     favourite: |     favourite: | ||||||
|       body: 'Tvoj status je %{name} označio kao omiljen:' |       body: 'Tvoj status je %{name} označio kao omiljen:' | ||||||
|       subject: "%{name} je označio kao omiljen tvoj status" |       subject: "%{name} je označio kao omiljen tvoj status" | ||||||
|  |  | ||||||
|  | @ -204,9 +204,7 @@ id: | ||||||
|   generic: |   generic: | ||||||
|     changes_saved_msg: Perubahan berhasil disimpan! |     changes_saved_msg: Perubahan berhasil disimpan! | ||||||
|     save_changes: Simpan perubahan |     save_changes: Simpan perubahan | ||||||
|     validation_errors: |     validation_errors: Ada yang tidak beres! Mohon tinjau error dibawah ini | ||||||
|       one: Ada yang tidak beres! Mohon tinjau error dibawah ini |  | ||||||
|       other: Ada yang tidak beres! Mohon tinjau error dibawah ini |  | ||||||
|   imports: |   imports: | ||||||
|     preface: Anda bisa mengimpor data tertentu seperti orang-orang yang anda ikuti atau anda blokir di server ini, dari file yang dibuat oleh fitur expor di server lain. |     preface: Anda bisa mengimpor data tertentu seperti orang-orang yang anda ikuti atau anda blokir di server ini, dari file yang dibuat oleh fitur expor di server lain. | ||||||
|     success: Data anda berhasil diupload dan akan diproses sesegera mungkin |     success: Data anda berhasil diupload dan akan diproses sesegera mungkin | ||||||
|  | @ -221,7 +219,7 @@ id: | ||||||
|       too_many: Tidak dapat melampirkan lebih dari 4 file |       too_many: Tidak dapat melampirkan lebih dari 4 file | ||||||
|   notification_mailer: |   notification_mailer: | ||||||
|     digest: |     digest: | ||||||
|       body: 'Ini adalah ringkasan singkat yang anda lewatkan pada %{instance} sejak kunjungan terakhir anda pada %{since}:' |       body: 'Ini adalah ringkasan singkat yang anda lewatkan pada sejak kunjungan terakhir anda pada %{since}:' | ||||||
|       mention: "%{name} menyebut anda di:" |       mention: "%{name} menyebut anda di:" | ||||||
|       new_followers_summary: |       new_followers_summary: | ||||||
|         one: Anda mendapatkan satu pengikut baru! Hore! |         one: Anda mendapatkan satu pengikut baru! Hore! | ||||||
|  |  | ||||||
|  | @ -201,7 +201,7 @@ io: | ||||||
|       too_many: Cannot attach more than 4 files |       too_many: Cannot attach more than 4 files | ||||||
|   notification_mailer: |   notification_mailer: | ||||||
|     digest: |     digest: | ||||||
|       body: 'Yen mikra rezumo di to, quo eventis en %{instance}, depos ke tu laste vizitis en %{since}:' |       body: 'Yen mikra rezumo di to, depos ke tu laste vizitis en %{since}:' | ||||||
|       mention: "%{name} mencionis tu en:" |       mention: "%{name} mencionis tu en:" | ||||||
|       new_followers_summary: |       new_followers_summary: | ||||||
|         one: Tu obtenis nova sequanto! Yey! |         one: Tu obtenis nova sequanto! Yey! | ||||||
|  |  | ||||||
|  | @ -136,7 +136,7 @@ pl: | ||||||
|         most_recent: Najnowsze |         most_recent: Najnowsze | ||||||
|         title: Kolejność |         title: Kolejność | ||||||
|       outbox_url: Adres skrzynki nadawczej |       outbox_url: Adres skrzynki nadawczej | ||||||
|       perform_full_suspension: Całkowicie zawieś |       perform_full_suspension: Zawieś | ||||||
|       profile_url: Adres profilu |       profile_url: Adres profilu | ||||||
|       promote: Podnieś uprawnienia |       promote: Podnieś uprawnienia | ||||||
|       protocol: Protokół |       protocol: Protokół | ||||||
|  | @ -185,6 +185,7 @@ pl: | ||||||
|         create_domain_block: "%{name} zablokował(a) domenę %{target}" |         create_domain_block: "%{name} zablokował(a) domenę %{target}" | ||||||
|         create_email_domain_block: "%{name} dodał(a) domenę e-mail %{target} na czarną listę" |         create_email_domain_block: "%{name} dodał(a) domenę e-mail %{target} na czarną listę" | ||||||
|         demote_user: "%{name} zdegradował(a) użytkownika %{target}" |         demote_user: "%{name} zdegradował(a) użytkownika %{target}" | ||||||
|  |         destroy_custom_emoji: "%{name} usunął(-ęła) emoji %{target}" | ||||||
|         destroy_domain_block: "%{name} odblokował(a) domenę %{target}" |         destroy_domain_block: "%{name} odblokował(a) domenę %{target}" | ||||||
|         destroy_email_domain_block: "%{name} usunął(-ęła) domenę e-mail %{target} z czarnej listy" |         destroy_email_domain_block: "%{name} usunął(-ęła) domenę e-mail %{target} z czarnej listy" | ||||||
|         destroy_status: "%{name} usunął(-ęła) wpis użytkownika %{target}" |         destroy_status: "%{name} usunął(-ęła) wpis użytkownika %{target}" | ||||||
|  | @ -270,16 +271,15 @@ pl: | ||||||
|         title: Nowa blokada domen |         title: Nowa blokada domen | ||||||
|       reject_media: Odrzucaj pliki multimedialne |       reject_media: Odrzucaj pliki multimedialne | ||||||
|       reject_media_hint: Usuwa przechowywane lokalnie pliki multimedialne i nie pozwala na ich pobieranie. Nieprzydatne przy zawieszeniu |       reject_media_hint: Usuwa przechowywane lokalnie pliki multimedialne i nie pozwala na ich pobieranie. Nieprzydatne przy zawieszeniu | ||||||
|  |       reject_reports: Odrzucaj zgłoszenia | ||||||
|  |       reject_reports_hint: Zgłoszenia z tej instancji będą ignorowane. Nieprzydatne przy zawieszeniu | ||||||
|       severities: |       severities: | ||||||
|         noop: Nic nie rób |         noop: Nic nie rób | ||||||
|         silence: Wycisz |         silence: Wycisz | ||||||
|         suspend: Zawieś |         suspend: Zawieś | ||||||
|       severity: Priorytet |       severity: Priorytet | ||||||
|       show: |       show: | ||||||
|         affected_accounts: |         affected_accounts: Dotyczy %{count} kont w bazie danych | ||||||
|           many: Dotyczy %{count} kont w bazie danych |  | ||||||
|           one: Dotyczy jednego konta w bazie danych |  | ||||||
|           other: Dotyczy %{count} kont w bazie danych |  | ||||||
|         retroactive: |         retroactive: | ||||||
|           silence: Odwołaj wyciszenie wszystkich kont w tej domenie |           silence: Odwołaj wyciszenie wszystkich kont w tej domenie | ||||||
|           suspend: Odwołaj zawieszenie wszystkich kont w tej domenie |           suspend: Odwołaj zawieszenie wszystkich kont w tej domenie | ||||||
|  | @ -375,6 +375,9 @@ pl: | ||||||
|       hero: |       hero: | ||||||
|         desc_html: Wyświetlany na stronie głównej. Zalecany jest rozmiar przynajmniej 600x100 pikseli. Jeżeli nie ustawiony, zostanie użyta miniatura instancji. |         desc_html: Wyświetlany na stronie głównej. Zalecany jest rozmiar przynajmniej 600x100 pikseli. Jeżeli nie ustawiony, zostanie użyta miniatura instancji. | ||||||
|         title: Obraz bohatera |         title: Obraz bohatera | ||||||
|  |       mascot: | ||||||
|  |         desc_html: Wyświetlany na wielu stronach. Zalecany jest rozmiar przynajmniej 293px × 205px. Jeżeli nie ustawiono, zostanie użyta domyślna. | ||||||
|  |         title: Obraz maskotki | ||||||
|       peers_api_enabled: |       peers_api_enabled: | ||||||
|         desc_html: Nazwy domen, z którymi ta instancja wchodziła w interakcje |         desc_html: Nazwy domen, z którymi ta instancja wchodziła w interakcje | ||||||
|         title: Publikuj listę znanych instancji |         title: Publikuj listę znanych instancji | ||||||
|  | @ -571,9 +574,7 @@ pl: | ||||||
|     followers_count: Liczba śledzących |     followers_count: Liczba śledzących | ||||||
|     lock_link: Zablokuj swoje konto |     lock_link: Zablokuj swoje konto | ||||||
|     purge: Przestań śledzić |     purge: Przestań śledzić | ||||||
|     success: |     success: W trakcie usuwania śledzących z %{count} domen… | ||||||
|       one: W trakcie usuwania śledzących z jednej domeny… |  | ||||||
|       other: W trakcie usuwania śledzących z %{count} domen… |  | ||||||
|     true_privacy_html: Pamiętaj, że <strong>rzeczywista prywatność może zostać uzyskana wyłącznie dzięki szyfrowaniu end-to-end</strong>. |     true_privacy_html: Pamiętaj, że <strong>rzeczywista prywatność może zostać uzyskana wyłącznie dzięki szyfrowaniu end-to-end</strong>. | ||||||
|     unlocked_warning_html: Każdy może Cię śledzić, dzięki czemu może zobaczyć Twoje niepubliczne wpisy. %{lock_link} aby móc kontrolować, kto Cię śledzi. |     unlocked_warning_html: Każdy może Cię śledzić, dzięki czemu może zobaczyć Twoje niepubliczne wpisy. %{lock_link} aby móc kontrolować, kto Cię śledzi. | ||||||
|     unlocked_warning_title: Twoje konto nie jest zablokowane |     unlocked_warning_title: Twoje konto nie jest zablokowane | ||||||
|  | @ -782,9 +783,7 @@ pl: | ||||||
|         other: "%{count} filmów" |         other: "%{count} filmów" | ||||||
|     boosted_from_html: Podbito przez %{acct_link} |     boosted_from_html: Podbito przez %{acct_link} | ||||||
|     content_warning: 'Ostrzeżenie o zawartości: %{warning}' |     content_warning: 'Ostrzeżenie o zawartości: %{warning}' | ||||||
|     disallowed_hashtags: |     disallowed_hashtags: 'zawiera niedozwolone hashtagi: %{tags}' | ||||||
|       one: 'zawiera niedozwolony hashtag: %{tags}' |  | ||||||
|       other: 'zawiera niedozwolone hashtagi: %{tags}' |  | ||||||
|     language_detection: Automatycznie wykrywaj język |     language_detection: Automatycznie wykrywaj język | ||||||
|     open_in_web: Otwórz w przeglądarce |     open_in_web: Otwórz w przeglądarce | ||||||
|     over_character_limit: limit %{max} znaków przekroczony |     over_character_limit: limit %{max} znaków przekroczony | ||||||
|  |  | ||||||
|  | @ -150,7 +150,7 @@ pt: | ||||||
|         enable_user: "%{name} ativou o acesso para o utilizador %{target}" |         enable_user: "%{name} ativou o acesso para o utilizador %{target}" | ||||||
|         memorialize_account: "%{name} transformou a conta de %{target} em um memorial" |         memorialize_account: "%{name} transformou a conta de %{target} em um memorial" | ||||||
|         promote_user: "%{name} promoveu o utilizador %{target}" |         promote_user: "%{name} promoveu o utilizador %{target}" | ||||||
|         reset_password_user: "%{name} restabeleceu a palavra-passe do utilizador %{target" |         reset_password_user: "%{name} restabeleceu a palavra-passe do utilizador %{target}" | ||||||
|         resolve_report: "%{name} recusou o relatório %{target}" |         resolve_report: "%{name} recusou o relatório %{target}" | ||||||
|         silence_account: "%{name} silenciou a conta de %{target}" |         silence_account: "%{name} silenciou a conta de %{target}" | ||||||
|         suspend_account: "%{name} suspendeu a conta de %{target}" |         suspend_account: "%{name} suspendeu a conta de %{target}" | ||||||
|  |  | ||||||
|  | @ -8,7 +8,6 @@ ar: | ||||||
|         bot: يُعلِم أنّ هذا الحساب لا يمثل شخصًا |         bot: يُعلِم أنّ هذا الحساب لا يمثل شخصًا | ||||||
|         context: واحد أو أكثر من السياقات التي يجب أن ينطبق عليها عامل التصفية |         context: واحد أو أكثر من السياقات التي يجب أن ينطبق عليها عامل التصفية | ||||||
|         digest: تُرسَل إليك بعد مُضيّ مدة مِن خمول نشاطك و فقط إذا ما تلقيت رسائل شخصية مباشِرة أثناء فترة غيابك مِن الشبكة |         digest: تُرسَل إليك بعد مُضيّ مدة مِن خمول نشاطك و فقط إذا ما تلقيت رسائل شخصية مباشِرة أثناء فترة غيابك مِن الشبكة | ||||||
|         display_name: <span class="name-counter">%{count}</span> حرف باق |  | ||||||
|         email: سوف تتلقى رسالة إلكترونية للتأكيد |         email: سوف تتلقى رسالة إلكترونية للتأكيد | ||||||
|         fields: يُمكنك عرض 4 عناصر على شكل جدول في ملفك الشخصي |         fields: يُمكنك عرض 4 عناصر على شكل جدول في ملفك الشخصي | ||||||
|         header: ملف PNG أو GIF أو JPG. حجمه على أقصى تصدير %{size}. سيتم تصغيره إلى %{dimensions}px |         header: ملف PNG أو GIF أو JPG. حجمه على أقصى تصدير %{size}. سيتم تصغيره إلى %{dimensions}px | ||||||
|  | @ -16,7 +15,6 @@ ar: | ||||||
|         irreversible: التبويقات التي تم تصفيتها ستختفي لا محالة حتى و إن تمت إزالة عامِل التصفية لاحقًا |         irreversible: التبويقات التي تم تصفيتها ستختفي لا محالة حتى و إن تمت إزالة عامِل التصفية لاحقًا | ||||||
|         locale: لغة واجهة المستخدم و الرسائل الإلكترونية و الإشعارات |         locale: لغة واجهة المستخدم و الرسائل الإلكترونية و الإشعارات | ||||||
|         locked: يتطلب منك الموافقة يدويا على طلبات المتابعة |         locked: يتطلب منك الموافقة يدويا على طلبات المتابعة | ||||||
|         note: <span class="note-counter">%{count}</span> حرف باق |  | ||||||
|         password: يُنصح باستخدام 8 أحرف على الأقل |         password: يُنصح باستخدام 8 أحرف على الأقل | ||||||
|         phrase: سوف يتم العثور عليه مهما كان نوع النص أو حتى و إن كان داخل الويب فيه تحذير عن المحتوى |         phrase: سوف يتم العثور عليه مهما كان نوع النص أو حتى و إن كان داخل الويب فيه تحذير عن المحتوى | ||||||
|         scopes: ما هي المجالات المسموح بها في التطبيق ؟ إن قمت باختيار أعلى المجالات فيمكنك الإستغناء عن الخَيار اليدوي. |         scopes: ما هي المجالات المسموح بها في التطبيق ؟ إن قمت باختيار أعلى المجالات فيمكنك الإستغناء عن الخَيار اليدوي. | ||||||
|  |  | ||||||
|  | @ -6,13 +6,7 @@ ast: | ||||||
|         autofollow: La xente que se rexistre pente la invitación va siguite automáticamente |         autofollow: La xente que se rexistre pente la invitación va siguite automáticamente | ||||||
|         bot: Esta cuenta fai principalmente aiciones automatizaes y podría nun supervisase |         bot: Esta cuenta fai principalmente aiciones automatizaes y podría nun supervisase | ||||||
|         digest: Namái s'unvia tres un periodu llargu d'inactividá y namái si recibiesti cualesquier mensaxe personal na to ausencia |         digest: Namái s'unvia tres un periodu llargu d'inactividá y namái si recibiesti cualesquier mensaxe personal na to ausencia | ||||||
|         display_name: |  | ||||||
|           one: Queda <span class="name-counter">1</span> caráuter |  | ||||||
|           other: Queden <span class="name-counter">%{count}</span> caráuteres |  | ||||||
|         irreversible: Los toots peñeraos van desapaecer de mou irreversible, magar que se desanicie la peñera dempués |         irreversible: Los toots peñeraos van desapaecer de mou irreversible, magar que se desanicie la peñera dempués | ||||||
|         note: |  | ||||||
|           one: Queda <span class="note-counter">1</span> caráuter |  | ||||||
|           other: Queden <span class="note-counter">%{count}</span> caráuteres |  | ||||||
|         setting_hide_network: La xente que sigas y teas siguiendo nun va amosase nel perfil |         setting_hide_network: La xente que sigas y teas siguiendo nun va amosase nel perfil | ||||||
|         setting_theme: Afeuta al aspeutu de Mastodon cuando anicies sesión dende cualesquier preséu. |         setting_theme: Afeuta al aspeutu de Mastodon cuando anicies sesión dende cualesquier preséu. | ||||||
|     labels: |     labels: | ||||||
|  |  | ||||||
|  | @ -4,10 +4,8 @@ bg: | ||||||
|     hints: |     hints: | ||||||
|       defaults: |       defaults: | ||||||
|         avatar: PNG, GIF или JPG. До %{size}. Ще бъде смалена до %{dimensions} пиксела |         avatar: PNG, GIF или JPG. До %{size}. Ще бъде смалена до %{dimensions} пиксела | ||||||
|         display_name: До 30 символа |  | ||||||
|         header: PNG, GIF или JPG. До %{size}. Ще бъде смалена до %{dimensions} пиксела |         header: PNG, GIF или JPG. До %{size}. Ще бъде смалена до %{dimensions} пиксела | ||||||
|         locked: Изисква ръчно одобрение на последователите. По подразбиране, публикациите са достъпни само до последователи. |         locked: Изисква ръчно одобрение на последователите. По подразбиране, публикациите са достъпни само до последователи. | ||||||
|         note: До 160 символа |  | ||||||
|       imports: |       imports: | ||||||
|         data: CSV файл, експортиран от друга инстанция на Mastodon |         data: CSV файл, експортиран от друга инстанция на Mastodon | ||||||
|     labels: |     labels: | ||||||
|  |  | ||||||
|  | @ -8,17 +8,11 @@ ca: | ||||||
|         bot: Aquest compte realitza principalment accions automatitzades i pot no estar controlat per cap persona |         bot: Aquest compte realitza principalment accions automatitzades i pot no estar controlat per cap persona | ||||||
|         context: Un o diversos contextos on s'ha d'aplicar el filtre |         context: Un o diversos contextos on s'ha d'aplicar el filtre | ||||||
|         digest: Només s'envia després d'un llarg període d'inactivitat amb un resum de les mencions que has rebut en la teva absència |         digest: Només s'envia després d'un llarg període d'inactivitat amb un resum de les mencions que has rebut en la teva absència | ||||||
|         display_name: |  | ||||||
|           one: <span class="name-counter">1</span> càracter restant |  | ||||||
|           other: <span class="name-counter">%{count}</span> càracters restans |  | ||||||
|         fields: Pots tenir fins a 4 elements que es mostren com a taula al teu perfil |         fields: Pots tenir fins a 4 elements que es mostren com a taula al teu perfil | ||||||
|         header: PNG, GIF o JPG. Màxim %{size}. S'escalarà a %{dimensions}px |         header: PNG, GIF o JPG. Màxim %{size}. S'escalarà a %{dimensions}px | ||||||
|         irreversible: Els nodes filtrats desapareixeran de manera irreversible, fins i tot si el filtre es retira més tard |         irreversible: Els nodes filtrats desapareixeran de manera irreversible, fins i tot si el filtre es retira més tard | ||||||
|         locale: El llenguatge de l’interfície d’usuari, els correus i les notificacions push |         locale: El llenguatge de l’interfície d’usuari, els correus i les notificacions push | ||||||
|         locked: Requereix que aprovis manualment els seguidors |         locked: Requereix que aprovis manualment els seguidors | ||||||
|         note: |  | ||||||
|           one: <span class="note-counter">1</span> càracter restant |  | ||||||
|           other: <span class="note-counter">%{count}</span> caràcters restants |  | ||||||
|         phrase: Es combinarà independentment del format en el text o l'avís de contingut d'un toot |         phrase: Es combinarà independentment del format en el text o l'avís de contingut d'un toot | ||||||
|         setting_default_language: La llengua dels teus toots pot ser detectada automàticament però no sempre acuradament |         setting_default_language: La llengua dels teus toots pot ser detectada automàticament però no sempre acuradament | ||||||
|         setting_hide_network: Qui tu segueixes i els que et segueixen a tu no es mostraran en el teu perfil |         setting_hide_network: Qui tu segueixes i els que et segueixen a tu no es mostraran en el teu perfil | ||||||
|  |  | ||||||
|  | @ -4,23 +4,17 @@ co: | ||||||
|     hints: |     hints: | ||||||
|       defaults: |       defaults: | ||||||
|         autofollow: Quelli·e chì s'arregistranu cù l'invitazione saranu autumaticamente abbunati·e à voi |         autofollow: Quelli·e chì s'arregistranu cù l'invitazione saranu autumaticamente abbunati·e à voi | ||||||
|         avatar: Furmatu PNG, GIF o JPG. 2Mo o menu. Sarà ridottu à %{dimensions}px |         avatar: Furmatu PNG, GIF o JPG. %{size} o menu. Sarà ridottu à %{dimensions}px | ||||||
|         bot: Stu contu hè autumatizatu è ùn hè forse micca survegliatu |         bot: Stu contu hè autumatizatu è ùn hè forse micca survegliatu | ||||||
|         context: Cuntestu·i induve u filtru deve esse applicatu |         context: Cuntestu·i induve u filtru deve esse applicatu | ||||||
|         digest: Solu mandatu dopu à una longa perioda d’inattività, è solu s’elli ci sò novi missaghji diretti |         digest: Solu mandatu dopu à una longa perioda d’inattività, è solu s’elli ci sò novi missaghji diretti | ||||||
|         display_name: |  | ||||||
|           one: Ci ferma <span class="name-counter">1</span> caratteru |  | ||||||
|           other: Ci fermanu <span class="name-counter">%{count}</span> caratteri |  | ||||||
|         email: Avete da riceve un'e-mail di cunfirmazione |         email: Avete da riceve un'e-mail di cunfirmazione | ||||||
|         fields: Pudete avè fin’à 4 elementi mustrati cum’un tavulone nant’à u vostru prufile |         fields: Pudete avè fin’à 4 elementi mustrati cum’un tavulone nant’à u vostru prufile | ||||||
|         header: Furmatu PNG, GIF o JPG. 2Mo o menu. Sarà ridottu à %{dimensions}px |         header: Furmatu PNG, GIF o JPG. %{size} o menu. Sarà ridottu à %{dimensions}px | ||||||
|         inbox_url: Cupiate l'URL di a pagina d'accolta di u ripetitore chì vulete utilizà |         inbox_url: Cupiate l'URL di a pagina d'accolta di u ripetitore chì vulete utilizà | ||||||
|         irreversible: I statuti filtrati saranu sguassati di manera irreversibile, ancu s'ellu hè toltu u filtru |         irreversible: I statuti filtrati saranu sguassati di manera irreversibile, ancu s'ellu hè toltu u filtru | ||||||
|         locale: A lingua di l'interfaccia utilizatore, di l'e-mail è di e nutificazione push |         locale: A lingua di l'interfaccia utilizatore, di l'e-mail è di e nutificazione push | ||||||
|         locked: Duvarete appruvà e dumande d’abbunamentu |         locked: Duvarete appruvà e dumande d’abbunamentu | ||||||
|         note: |  | ||||||
|           one: Ci ferma <span class="name-counter">1</span> caratteru |  | ||||||
|           other: Ci fermanu <span class="name-counter">%{count}</span> caratteri |  | ||||||
|         password: Ci volenu almenu 8 caratteri |         password: Ci volenu almenu 8 caratteri | ||||||
|         phrase: Sarà trovu senza primura di e maiuscule o di l'avertimenti |         phrase: Sarà trovu senza primura di e maiuscule o di l'avertimenti | ||||||
|         scopes: L'API à quelle l'applicazione averà accessu. S'è voi selezziunate un parametru d'altu livellu, un c'hè micca bisognu di selezziunà quell'individuali. |         scopes: L'API à quelle l'applicazione averà accessu. S'è voi selezziunate un parametru d'altu livellu, un c'hè micca bisognu di selezziunà quell'individuali. | ||||||
|  |  | ||||||
|  | @ -8,9 +8,6 @@ cs: | ||||||
|         bot: Tento účet provádí hlavně automatizované akce a nemusí být spravován |         bot: Tento účet provádí hlavně automatizované akce a nemusí být spravován | ||||||
|         context: Jedno či více kontextů, ve kterých má být filtr uplatněn |         context: Jedno či více kontextů, ve kterých má být filtr uplatněn | ||||||
|         digest: Odesíláno pouze po dlouhé době nečinnosti a pouze, pokud jste při své nepřítomnosti obdržel/a osobní zprávy |         digest: Odesíláno pouze po dlouhé době nečinnosti a pouze, pokud jste při své nepřítomnosti obdržel/a osobní zprávy | ||||||
|         display_name: |  | ||||||
|           one: Zbývá <span class="name-counter">1</span> znak |  | ||||||
|           other: Zbývá vám <span class="name-counter">%{count}</span> znaků |  | ||||||
|         email: Bude vám poslán potvrzovací e-mail |         email: Bude vám poslán potvrzovací e-mail | ||||||
|         fields: Na profilu můžete mít až 4 položky zobrazené jako tabulka |         fields: Na profilu můžete mít až 4 položky zobrazené jako tabulka | ||||||
|         header: PNG, GIF či JPG. Maximálně %{size}. Bude zmenšena na %{dimensions} px |         header: PNG, GIF či JPG. Maximálně %{size}. Bude zmenšena na %{dimensions} px | ||||||
|  | @ -18,9 +15,6 @@ cs: | ||||||
|         irreversible: Filtrované tooty nenávratně zmizí, i pokud bude filtr později odstraněn |         irreversible: Filtrované tooty nenávratně zmizí, i pokud bude filtr později odstraněn | ||||||
|         locale: Jazyk uživatelského rozhraní, e-mailů a oznámení push |         locale: Jazyk uživatelského rozhraní, e-mailů a oznámení push | ||||||
|         locked: Vyžaduje manuální schvalování sledovatelů |         locked: Vyžaduje manuální schvalování sledovatelů | ||||||
|         note: |  | ||||||
|           one: Zbývá <span class="note-counter">1</span>znak |  | ||||||
|           other: Zbývá <span class="note-counter">%{count}</span> znaků |  | ||||||
|         password: Použijte alespoň 8 znaků |         password: Použijte alespoň 8 znaků | ||||||
|         phrase: Shoda bude nalezena bez ohledu na velikost písmen v těle tootu či varování o obsahu |         phrase: Shoda bude nalezena bez ohledu na velikost písmen v těle tootu či varování o obsahu | ||||||
|         scopes: Které API bude aplikace povolena používat. Pokud vyberete rozsah nejvyššího stupně, nebudete je muset vybírat po jednom. |         scopes: Které API bude aplikace povolena používat. Pokud vyberete rozsah nejvyššího stupně, nebudete je muset vybírat po jednom. | ||||||
|  |  | ||||||
|  | @ -8,18 +8,12 @@ cy: | ||||||
|         bot: Mae'r cyfrif hwn yn perfformio gweithredoedd awtomataidd yn bennaf ac mae'n bosib nad yw'n cael ei fonitro |         bot: Mae'r cyfrif hwn yn perfformio gweithredoedd awtomataidd yn bennaf ac mae'n bosib nad yw'n cael ei fonitro | ||||||
|         context: Un neu fwy cyd-destun lle dylai'r hidlydd weithio |         context: Un neu fwy cyd-destun lle dylai'r hidlydd weithio | ||||||
|         digest: Dim ond yn cael eu hanfon ar ôl cyfnod hir o anweithgarwch ac ond os ydych wedi derbyn unrhyw negeseuon personol yn eich absenoldeb |         digest: Dim ond yn cael eu hanfon ar ôl cyfnod hir o anweithgarwch ac ond os ydych wedi derbyn unrhyw negeseuon personol yn eich absenoldeb | ||||||
|         display_name: |  | ||||||
|           one: <span class="name-counter">1</span> nodyn ar ôl |  | ||||||
|           other: <span class="name-counter">%{count}</span> nodyn ar ôl |  | ||||||
|         fields: Mae modd i chi arddangos hyd at 4 eitem fel tabl ar eich proffil |         fields: Mae modd i chi arddangos hyd at 4 eitem fel tabl ar eich proffil | ||||||
|         header: PNG, GIF neu JPG. %{size} ar y mwyaf. Ceith ei israddio i %{dimensions}px |         header: PNG, GIF neu JPG. %{size} ar y mwyaf. Ceith ei israddio i %{dimensions}px | ||||||
|         inbox_url: Copïwch yr URL o dudalen flaen y relái yr ydych am ei ddefnyddio |         inbox_url: Copïwch yr URL o dudalen flaen y relái yr ydych am ei ddefnyddio | ||||||
|         irreversible: Bydd tŵtiau wedi eu hidlo yn diflannu am byth, hyd yn oed os ceith yr hidlydd ei ddileu'n hwyrach |         irreversible: Bydd tŵtiau wedi eu hidlo yn diflannu am byth, hyd yn oed os ceith yr hidlydd ei ddileu'n hwyrach | ||||||
|         locale: Iaith y rhyngwyneb, e-byst a hysbysiadau push |         locale: Iaith y rhyngwyneb, e-byst a hysbysiadau push | ||||||
|         locked: Ei wneud yn ofynnol arnoch chi i ganiatau dilynwyr a llaw |         locked: Ei wneud yn ofynnol arnoch chi i ganiatau dilynwyr a llaw | ||||||
|         note: |  | ||||||
|           one: <span class="note-counter">1</span> cymeriad ar ôl |  | ||||||
|           other: <span class="note-counter">%{count}</span> o gymeriadau ar ôl |  | ||||||
|         scopes: Pa APIau y bydd gan y rhaglen ganiatad i gael mynediad iddynt. Os dewiswch maes lefel uchaf, yna nid oes angen dewis rhai unigol. |         scopes: Pa APIau y bydd gan y rhaglen ganiatad i gael mynediad iddynt. Os dewiswch maes lefel uchaf, yna nid oes angen dewis rhai unigol. | ||||||
|         setting_default_language: Mae modd adnabod iaith eich tŵtiau yn awtomatig, ond nid yw bob tro'n gywir |         setting_default_language: Mae modd adnabod iaith eich tŵtiau yn awtomatig, ond nid yw bob tro'n gywir | ||||||
|         setting_hide_network: Ni fydd pwy yr ydych yn ei ddilyn a phwy sy'n eich dilyn chi yn cael ei ddangos ar eich proffil |         setting_hide_network: Ni fydd pwy yr ydych yn ei ddilyn a phwy sy'n eich dilyn chi yn cael ei ddangos ar eich proffil | ||||||
|  |  | ||||||
|  | @ -8,18 +8,12 @@ da: | ||||||
|         bot: Denne konto udfører hovedsageligt automatiserede handlinger og bliver muligvis ikke overvåget |         bot: Denne konto udfører hovedsageligt automatiserede handlinger og bliver muligvis ikke overvåget | ||||||
|         context: En eller flere sammenhænge hvor filteret skal være gældende |         context: En eller flere sammenhænge hvor filteret skal være gældende | ||||||
|         digest: Sendes kun efter en lang periode med inaktivitet og kun hvis du har modtaget nogle personlige beskeder mens du er væk |         digest: Sendes kun efter en lang periode med inaktivitet og kun hvis du har modtaget nogle personlige beskeder mens du er væk | ||||||
|         display_name: |  | ||||||
|           one: <span class="name-counter">1</span> tegn tilbage |  | ||||||
|           other: <span class="name-counter">%{count}</span>tegn tilbage |  | ||||||
|         fields: Du kan have op til 4 ting vist som en tabel på din profil |         fields: Du kan have op til 4 ting vist som en tabel på din profil | ||||||
|         header: PNG, GIF eller JPG. Højest %{size}. Vil blive skaleret ned til %{dimensions}px |         header: PNG, GIF eller JPG. Højest %{size}. Vil blive skaleret ned til %{dimensions}px | ||||||
|         inbox_url: Kopiere linket fra forsiden af den relay som du ønsker at bruge |         inbox_url: Kopiere linket fra forsiden af den relay som du ønsker at bruge | ||||||
|         irreversible: Filtrerede trut vil forsvinde fulstændigt, selv hvis filteret senere skulle blive fjernet |         irreversible: Filtrerede trut vil forsvinde fulstændigt, selv hvis filteret senere skulle blive fjernet | ||||||
|         locale: Sproget på interfacet, emails og push beskeder |         locale: Sproget på interfacet, emails og push beskeder | ||||||
|         locked: Kræver, at du godkender følgere manuelt |         locked: Kræver, at du godkender følgere manuelt | ||||||
|         note: |  | ||||||
|           one: <span class="note-counter">1</span> tegn tilbage |  | ||||||
|           other: <span class="note-counter">%{count}</span> tegn tilbage |  | ||||||
|         phrase: Vil blive parret uanset om der er store eller små bogstaver i teksten eller om der er en advarsel om et trut |         phrase: Vil blive parret uanset om der er store eller små bogstaver i teksten eller om der er en advarsel om et trut | ||||||
|         scopes: Hvilke APIs applikationen vil få adgang til. Hvis du vælger et højtlevel omfang, behøver du ikke vælge enkeltstående. |         scopes: Hvilke APIs applikationen vil få adgang til. Hvis du vælger et højtlevel omfang, behøver du ikke vælge enkeltstående. | ||||||
|         setting_default_language: Sproget for dine trut kan blive fundet automatisk, men det er ikke altid præcist |         setting_default_language: Sproget for dine trut kan blive fundet automatisk, men det er ikke altid præcist | ||||||
|  |  | ||||||
|  | @ -4,23 +4,17 @@ de: | ||||||
|     hints: |     hints: | ||||||
|       defaults: |       defaults: | ||||||
|         autofollow: Leute die sich über deine Einladung registrieren werden dir automatisch folgen |         autofollow: Leute die sich über deine Einladung registrieren werden dir automatisch folgen | ||||||
|         avatar: PNG, GIF oder JPG. Maximal %{size}. Wird auf 400×400 px herunterskaliert |         avatar: PNG, GIF oder JPG. Maximal %{size}. Wird auf %{dimensions} px herunterskaliert | ||||||
|         bot: Dieses Konto führt lediglich automatisierte Aktionen durch und wird möglicherweise nicht überwacht |         bot: Dieses Konto führt lediglich automatisierte Aktionen durch und wird möglicherweise nicht überwacht | ||||||
|         context: Ein oder mehrere Aspekte, wo der Filter greifen soll |         context: Ein oder mehrere Aspekte, wo der Filter greifen soll | ||||||
|         digest: Wenn du lange Zeit inaktiv bist, wird dir eine Zusammenfassung von Erwähnungen in deiner Abwesenheit zugeschickt |         digest: Wenn du lange Zeit inaktiv bist, wird dir eine Zusammenfassung von Erwähnungen in deiner Abwesenheit zugeschickt | ||||||
|         display_name: |  | ||||||
|           one: <span class="name-counter">1</span> Zeichen verbleibt |  | ||||||
|           other: <span class="name-counter">%{count}</span> Zeichen verbleiben |  | ||||||
|         email: Du wirst ein Bestätigungs-E-Mail erhalten |         email: Du wirst ein Bestätigungs-E-Mail erhalten | ||||||
|         fields: Du kannst bis zu 4 Elemente als Tabelle dargestellt auf deinem Profil anzeigen lassen |         fields: Du kannst bis zu 4 Elemente als Tabelle dargestellt auf deinem Profil anzeigen lassen | ||||||
|         header: PNG, GIF oder JPG. Maximal %{size}. Wird auf 700×335 px herunterskaliert |         header: PNG, GIF oder JPG. Maximal %{size}. Wird auf %{dimensions} px herunterskaliert | ||||||
|         inbox_url: Kopiere die URL von der Startseite des gewünschten Relays |         inbox_url: Kopiere die URL von der Startseite des gewünschten Relays | ||||||
|         irreversible: Gefilterte Beiträge werden unwiderruflich gefiltert, selbst wenn der Filter später entfernt wurde |         irreversible: Gefilterte Beiträge werden unwiderruflich gefiltert, selbst wenn der Filter später entfernt wurde | ||||||
|         locale: Die Sprache der Oberfläche, E-Mails und Push-Benachrichtigungen |         locale: Die Sprache der Oberfläche, E-Mails und Push-Benachrichtigungen | ||||||
|         locked: Wer dir folgen möchte, muss um deine Erlaubnis bitten |         locked: Wer dir folgen möchte, muss um deine Erlaubnis bitten | ||||||
|         note: |  | ||||||
|           one: <span class="note-counter">1</span> Zeichen verbleibt |  | ||||||
|           other: <span class="note-counter">%{count}</span> Zeichen verbleiben |  | ||||||
|         password: Verwende mindestens 8 Zeichen |         password: Verwende mindestens 8 Zeichen | ||||||
|         phrase: Wird unabhängig vom umgebenen Text oder Inhaltswarnung eines Beitrags verglichen |         phrase: Wird unabhängig vom umgebenen Text oder Inhaltswarnung eines Beitrags verglichen | ||||||
|         scopes: Welche Schnittstellen der Applikation erlaubt sind. Wenn du einen Top-Level-Scope auswählst, dann musst du nicht jeden einzelnen darunter auswählen. |         scopes: Welche Schnittstellen der Applikation erlaubt sind. Wenn du einen Top-Level-Scope auswählst, dann musst du nicht jeden einzelnen darunter auswählen. | ||||||
|  |  | ||||||
|  | @ -8,9 +8,6 @@ el: | ||||||
|         bot: Ο λογαριασμός αυτός εκτελεί κυρίως αυτοματοποιημένες ενέργειες και ίσως να μην παρακολουθείται |         bot: Ο λογαριασμός αυτός εκτελεί κυρίως αυτοματοποιημένες ενέργειες και ίσως να μην παρακολουθείται | ||||||
|         context: Ένα ή περισσότερα πλαίσια στα οποία μπορεί να εφαρμόζεται αυτό το φίλτρο |         context: Ένα ή περισσότερα πλαίσια στα οποία μπορεί να εφαρμόζεται αυτό το φίλτρο | ||||||
|         digest: Αποστέλλεται μόνο μετά από μακρά περίοδο αδράνειας και μόνο αν έχεις λάβει προσωπικά μηνύματα κατά την απουσία σου |         digest: Αποστέλλεται μόνο μετά από μακρά περίοδο αδράνειας και μόνο αν έχεις λάβει προσωπικά μηνύματα κατά την απουσία σου | ||||||
|         display_name: |  | ||||||
|           one: απομένει <span class="name-counter">1</span> χαρακτήρας |  | ||||||
|           other: απομένουν <span class="name-counter">%{count}</span> χαρακτήρες |  | ||||||
|         email: Θα σου σταλεί email επιβεβαίωσης |         email: Θα σου σταλεί email επιβεβαίωσης | ||||||
|         fields: Μπορείς να έχεις έως 4 σημειώσεις σε μορφή πίνακα στο προφίλ σου |         fields: Μπορείς να έχεις έως 4 σημειώσεις σε μορφή πίνακα στο προφίλ σου | ||||||
|         header: PNG, GIF ή JPG. Έως %{size}. Θα περιοριστεί σε διάσταση %{dimensions}px |         header: PNG, GIF ή JPG. Έως %{size}. Θα περιοριστεί σε διάσταση %{dimensions}px | ||||||
|  | @ -18,9 +15,6 @@ el: | ||||||
|         irreversible: Τα φιλτραρισμένα τουτ θα εξαφανιστούν αμετάκλητα, ακόμα και αν το φίλτρο αργότερα αφαιρεθεί |         irreversible: Τα φιλτραρισμένα τουτ θα εξαφανιστούν αμετάκλητα, ακόμα και αν το φίλτρο αργότερα αφαιρεθεί | ||||||
|         locale: Η γλώσσα του περιβάλλοντος χρήσης, των email και των ειδοποιήσεων ώθησης |         locale: Η γλώσσα του περιβάλλοντος χρήσης, των email και των ειδοποιήσεων ώθησης | ||||||
|         locked: Απαιτεί να εγκρίνεις χειροκίνητα τους ακόλουθούς σου |         locked: Απαιτεί να εγκρίνεις χειροκίνητα τους ακόλουθούς σου | ||||||
|         note: |  | ||||||
|           one: απομένει <span class="note-counter">1</span> χαρακτήρας |  | ||||||
|           other: απομένουν <span class="note-counter">%{count}</span> χαρακτήρες |  | ||||||
|         password: Χρησιμοποίησε τουλάχιστον 8 χαρακτήρες |         password: Χρησιμοποίησε τουλάχιστον 8 χαρακτήρες | ||||||
|         phrase: Θα ταιριάζει ανεξαρτήτως πεζών/κεφαλαίων ή προειδοποίησης περιεχομένου του τουτ |         phrase: Θα ταιριάζει ανεξαρτήτως πεζών/κεφαλαίων ή προειδοποίησης περιεχομένου του τουτ | ||||||
|         scopes: Ποια API θα επιτρέπεται στην εφαρμογή να χρησιμοποιήσεις. Αν επιλέξεις κάποιο υψηλό εύρος εφαρμογής, δε χρειάζεται να επιλέξεις και εξειδικευμένα. |         scopes: Ποια API θα επιτρέπεται στην εφαρμογή να χρησιμοποιήσεις. Αν επιλέξεις κάποιο υψηλό εύρος εφαρμογής, δε χρειάζεται να επιλέξεις και εξειδικευμένα. | ||||||
|  |  | ||||||
|  | @ -8,9 +8,6 @@ en: | ||||||
|         bot: This account mainly performs automated actions and might not be monitored |         bot: This account mainly performs automated actions and might not be monitored | ||||||
|         context: One or multiple contexts where the filter should apply |         context: One or multiple contexts where the filter should apply | ||||||
|         digest: Only sent after a long period of inactivity and only if you have received any personal messages in your absence |         digest: Only sent after a long period of inactivity and only if you have received any personal messages in your absence | ||||||
|         display_name: |  | ||||||
|           one: <span class="name-counter">1</span> character left |  | ||||||
|           other: <span class="name-counter">%{count}</span> characters left |  | ||||||
|         email: You will be sent a confirmation e-mail |         email: You will be sent a confirmation e-mail | ||||||
|         fields: You can have up to 4 items displayed as a table on your profile |         fields: You can have up to 4 items displayed as a table on your profile | ||||||
|         header: PNG, GIF or JPG. At most %{size}. Will be downscaled to %{dimensions}px |         header: PNG, GIF or JPG. At most %{size}. Will be downscaled to %{dimensions}px | ||||||
|  | @ -18,9 +15,6 @@ en: | ||||||
|         irreversible: Filtered toots will disappear irreversibly, even if filter is later removed |         irreversible: Filtered toots will disappear irreversibly, even if filter is later removed | ||||||
|         locale: The language of the user interface, e-mails and push notifications |         locale: The language of the user interface, e-mails and push notifications | ||||||
|         locked: Requires you to manually approve followers |         locked: Requires you to manually approve followers | ||||||
|         note: |  | ||||||
|           one: <span class="note-counter">1</span> character left |  | ||||||
|           other: <span class="note-counter">%{count}</span> characters left |  | ||||||
|         password: Use at least 8 characters |         password: Use at least 8 characters | ||||||
|         phrase: Will be matched regardless of casing in text or content warning of a toot |         phrase: Will be matched regardless of casing in text or content warning of a toot | ||||||
|         scopes: Which APIs the application will be allowed to access. If you select a top-level scope, you don't need to select individual ones. |         scopes: Which APIs the application will be allowed to access. If you select a top-level scope, you don't need to select individual ones. | ||||||
|  |  | ||||||
|  | @ -1 +1,2 @@ | ||||||
|  | --- | ||||||
| {} | {} | ||||||
|  |  | ||||||
|  | @ -8,18 +8,12 @@ eo: | ||||||
|         bot: Tiu konto ĉefe faras aŭtomatajn agojn, kaj povas esti ne kontrolata |         bot: Tiu konto ĉefe faras aŭtomatajn agojn, kaj povas esti ne kontrolata | ||||||
|         context: Unu ol pluraj kuntekstoj kie la filtrilo devus agi |         context: Unu ol pluraj kuntekstoj kie la filtrilo devus agi | ||||||
|         digest: Sendita nur post longa tempo de neaktiveco, kaj nur se vi ricevis personan mesaĝon en via foresto |         digest: Sendita nur post longa tempo de neaktiveco, kaj nur se vi ricevis personan mesaĝon en via foresto | ||||||
|         display_name: |  | ||||||
|           one: <span class="name-counter">1</span> signo restas |  | ||||||
|           other: <span class="name-counter">%{count}</span> signoj restas |  | ||||||
|         fields: Vi povas havi ĝis 4 tabelajn elementojn en via profilo |         fields: Vi povas havi ĝis 4 tabelajn elementojn en via profilo | ||||||
|         header: Formato PNG, GIF aŭ JPG. Ĝis %{size}. Estos malgrandigita al %{dimensions}px |         header: Formato PNG, GIF aŭ JPG. Ĝis %{size}. Estos malgrandigita al %{dimensions}px | ||||||
|         inbox_url: Kopiu la URL de la ĉefpaĝo de la ripetilo, kiun vi volas uzi |         inbox_url: Kopiu la URL de la ĉefpaĝo de la ripetilo, kiun vi volas uzi | ||||||
|         irreversible: Elfiltritaj mesaĝoj malaperos por ĉiam, eĉ se la filtrilo estas poste forigita |         irreversible: Elfiltritaj mesaĝoj malaperos por ĉiam, eĉ se la filtrilo estas poste forigita | ||||||
|         locale: La lingvo de la uzant-interfaco, retmesaĝoj kaj puŝ-sciigoj |         locale: La lingvo de la uzant-interfaco, retmesaĝoj kaj puŝ-sciigoj | ||||||
|         locked: Vi devos aprobi ĉiun peton de sekvado mane |         locked: Vi devos aprobi ĉiun peton de sekvado mane | ||||||
|         note: |  | ||||||
|           one: <span class="note-counter">1</span> signo restas |  | ||||||
|           other: <span class="note-counter">%{count}</span> signoj restas |  | ||||||
|         phrase: Estos provita senzorge pri la uskleco de teksto aŭ averto pri enhavo de mesaĝo |         phrase: Estos provita senzorge pri la uskleco de teksto aŭ averto pri enhavo de mesaĝo | ||||||
|         setting_default_language: La lingvo de viaj mesaĝoj povas esti aŭtomate detektitaj, sed tio ne ĉiam ĝustas |         setting_default_language: La lingvo de viaj mesaĝoj povas esti aŭtomate detektitaj, sed tio ne ĉiam ĝustas | ||||||
|         setting_hide_network: Tiuj, kiujn vi sekvas, kaj tiuj, kiuj sekvas vin ne estos videblaj en via profilo |         setting_hide_network: Tiuj, kiujn vi sekvas, kaj tiuj, kiuj sekvas vin ne estos videblaj en via profilo | ||||||
|  |  | ||||||
|  | @ -8,18 +8,12 @@ es: | ||||||
|         bot: Esta cuenta ejecuta principalmente acciones automatizadas y podría no ser monitorizada |         bot: Esta cuenta ejecuta principalmente acciones automatizadas y podría no ser monitorizada | ||||||
|         context: Uno o múltiples contextos en los que debe aplicarse el filtro |         context: Uno o múltiples contextos en los que debe aplicarse el filtro | ||||||
|         digest: Solo enviado tras un largo periodo de inactividad y solo si has recibido mensajes personales durante tu ausencia |         digest: Solo enviado tras un largo periodo de inactividad y solo si has recibido mensajes personales durante tu ausencia | ||||||
|         display_name: |  | ||||||
|           one: <span class="name-counter">1</span> caracter restante |  | ||||||
|           other: <span class="name-counter">%{count}</span> caracteres restantes |  | ||||||
|         fields: Puedes tener hasta 4 elementos mostrándose como una tabla en tu perfil |         fields: Puedes tener hasta 4 elementos mostrándose como una tabla en tu perfil | ||||||
|         header: PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px |         header: PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px | ||||||
|         inbox_url: Copia la URL de la página principal del relés que quieres utilizar |         inbox_url: Copia la URL de la página principal del relés que quieres utilizar | ||||||
|         irreversible: Los toots filtrados desaparecerán irreversiblemente, incluso si este filtro es eliminado más adelante |         irreversible: Los toots filtrados desaparecerán irreversiblemente, incluso si este filtro es eliminado más adelante | ||||||
|         locale: El idioma de la interfaz de usuario, correos y notificaciones push |         locale: El idioma de la interfaz de usuario, correos y notificaciones push | ||||||
|         locked: Requiere que manualmente apruebes seguidores y las publicaciones serán mostradas solamente a tus seguidores |         locked: Requiere que manualmente apruebes seguidores y las publicaciones serán mostradas solamente a tus seguidores | ||||||
|         note: |  | ||||||
|           one: <span class="name-counter">1</span> carácter restante |  | ||||||
|           other: <span class="name-counter">%{count}</span> caracteres restantes |  | ||||||
|         phrase: Se aplicará sin importar las mayúsculas o los avisos de contenido de un toot |         phrase: Se aplicará sin importar las mayúsculas o los avisos de contenido de un toot | ||||||
|         scopes: Qué APIs de la aplicación tendrán acceso. Si seleccionas el alcance de nivel mas alto, no necesitas seleccionar las individuales. |         scopes: Qué APIs de la aplicación tendrán acceso. Si seleccionas el alcance de nivel mas alto, no necesitas seleccionar las individuales. | ||||||
|         setting_default_language: El idioma de tus toots podrá detectarse automáticamente, pero no siempre es preciso |         setting_default_language: El idioma de tus toots podrá detectarse automáticamente, pero no siempre es preciso | ||||||
|  |  | ||||||
|  | @ -8,18 +8,12 @@ eu: | ||||||
|         bot: Kontu honek nagusiki automatizatutako ekintzak burutzen ditu eta agian ez du inork monitorizatzen |         bot: Kontu honek nagusiki automatizatutako ekintzak burutzen ditu eta agian ez du inork monitorizatzen | ||||||
|         context: Iragazkia aplikatzeko testuinguru bat edo batzuk |         context: Iragazkia aplikatzeko testuinguru bat edo batzuk | ||||||
|         digest: Soilik jarduerarik gabeko epe luze bat eta gero, eta soilik ez zeudela mezu pertsonalen bat jaso baduzu |         digest: Soilik jarduerarik gabeko epe luze bat eta gero, eta soilik ez zeudela mezu pertsonalen bat jaso baduzu | ||||||
|         display_name: |  | ||||||
|           one: Karaktere <span class="name-counter">1</span> geratzen da |  | ||||||
|           other: <span class="name-counter">%{count}</span> karaktere geratzen dira |  | ||||||
|         fields: 4 elementu bistaratu ditzakezu taula batean zure profilean |         fields: 4 elementu bistaratu ditzakezu taula batean zure profilean | ||||||
|         header: PNG, GIF edo JPG. Gehienez %{size}. %{dimensions}px eskalara txikituko da |         header: PNG, GIF edo JPG. Gehienez %{size}. %{dimensions}px eskalara txikituko da | ||||||
|         inbox_url: Kopiatu erabili nahi duzun errelearen hasiera orriaren URLa |         inbox_url: Kopiatu erabili nahi duzun errelearen hasiera orriaren URLa | ||||||
|         irreversible: Iragazitako toot-ak betirako galduko dira, geroago iragazkia kentzen baduzu ere |         irreversible: Iragazitako toot-ak betirako galduko dira, geroago iragazkia kentzen baduzu ere | ||||||
|         locale: Erabiltzaile-interfazea, e-mail mezuen eta jakinarazpenen hizkuntza |         locale: Erabiltzaile-interfazea, e-mail mezuen eta jakinarazpenen hizkuntza | ||||||
|         locked: Jarraitzaileak eskuz onartu behar dituzu |         locked: Jarraitzaileak eskuz onartu behar dituzu | ||||||
|         note: |  | ||||||
|           one: Karaktere<span class="note-counter">1</span> geratzen da |  | ||||||
|           other: <span class="note-counter"> %{count}</span> karaktere geratzen dira |  | ||||||
|         phrase: Bat egingo du Maiuskula/minuskula kontuan hartu gabe eta edukiaren abisua kontuan hartu gabe |         phrase: Bat egingo du Maiuskula/minuskula kontuan hartu gabe eta edukiaren abisua kontuan hartu gabe | ||||||
|         scopes: Zeintzuk API atzitu ditzakeen aplikazioak. Goi mailako arloa aukeratzen baduzu, ez dituzu azpikoak aukeratu behar. |         scopes: Zeintzuk API atzitu ditzakeen aplikazioak. Goi mailako arloa aukeratzen baduzu, ez dituzu azpikoak aukeratu behar. | ||||||
|         setting_default_language: Zure toot-en hizkuntza automatikoki antzeman daiteke, baina ez da beti zehatza |         setting_default_language: Zure toot-en hizkuntza automatikoki antzeman daiteke, baina ez da beti zehatza | ||||||
|  |  | ||||||
|  | @ -8,9 +8,6 @@ fa: | ||||||
|         bot: این حساب بیشتر به طور خودکار فعالیت میکند و نظارت پیوستهای روی آن وجود ندارد |         bot: این حساب بیشتر به طور خودکار فعالیت میکند و نظارت پیوستهای روی آن وجود ندارد | ||||||
|         context: یک یا چند زمینه که فیلتر باید در آنها اعمال شود |         context: یک یا چند زمینه که فیلتر باید در آنها اعمال شود | ||||||
|         digest: تنها وقتی فرستاده میشود که مدتی طولانی فعالیتی نداشته باشید و در این مدت برای شما پیغام خصوصیای نوشته شده باشد |         digest: تنها وقتی فرستاده میشود که مدتی طولانی فعالیتی نداشته باشید و در این مدت برای شما پیغام خصوصیای نوشته شده باشد | ||||||
|         display_name: |  | ||||||
|           one: <span class="name-counter">1</span> حرف باقی مانده |  | ||||||
|           other: <span class="name-counter">%{count}</span> حرف باقی مانده |  | ||||||
|         email: به شما ایمیل تأییدی فرستاده خواهد شد |         email: به شما ایمیل تأییدی فرستاده خواهد شد | ||||||
|         fields: شما میتوانید تا چهار مورد را در یک جدول در نمایهٔ خود نمایش دهید |         fields: شما میتوانید تا چهار مورد را در یک جدول در نمایهٔ خود نمایش دهید | ||||||
|         header: یکی از قالبهای PNG یا  GIF یا JPG. بیشترین اندازه %{size}. تصویر به اندازهٔ %{dimensions} پیکسل تبدیل خواهد شد |         header: یکی از قالبهای PNG یا  GIF یا JPG. بیشترین اندازه %{size}. تصویر به اندازهٔ %{dimensions} پیکسل تبدیل خواهد شد | ||||||
|  | @ -18,9 +15,6 @@ fa: | ||||||
|         irreversible: بوقهای فیلترشده به طور برگشتناپذیری ناپدید میشوند، حتی اگر فیلتر را بعداً بردارید |         irreversible: بوقهای فیلترشده به طور برگشتناپذیری ناپدید میشوند، حتی اگر فیلتر را بعداً بردارید | ||||||
|         locale: زبان محیط کاربری، ایمیلها، و اعلانها |         locale: زبان محیط کاربری، ایمیلها، و اعلانها | ||||||
|         locked: باید پیگیران تازه را خودتان تأیید کنید |         locked: باید پیگیران تازه را خودتان تأیید کنید | ||||||
|         note: |  | ||||||
|           one: <span class="note-counter">1</span> حرف باقی مانده |  | ||||||
|           other: <span class="note-counter">%{count}</span> حرف باقی مانده |  | ||||||
|         password: دستکم باید ۸ نویسه داشته باشد |         password: دستکم باید ۸ نویسه داشته باشد | ||||||
|         phrase: مستقل از کوچکی و بزرگی حروف، با متن اصلی یا هشدار محتوای بوقها مقایسه میشود |         phrase: مستقل از کوچکی و بزرگی حروف، با متن اصلی یا هشدار محتوای بوقها مقایسه میشود | ||||||
|         scopes: واسطهای برنامهنویسی که این برنامه به آن دسترسی دارد. اگر بالاترین سطح دسترسی را انتخاب کنید، دیگر نیازی به انتخاب سطحهای پایینی ندارید. |         scopes: واسطهای برنامهنویسی که این برنامه به آن دسترسی دارد. اگر بالاترین سطح دسترسی را انتخاب کنید، دیگر نیازی به انتخاب سطحهای پایینی ندارید. | ||||||
|  |  | ||||||
|  | @ -3,17 +3,11 @@ fi: | ||||||
|   simple_form: |   simple_form: | ||||||
|     hints: |     hints: | ||||||
|       defaults: |       defaults: | ||||||
|         avatar: PNG, GIF tai JPG. Enintään 2 Mt. Skaalataan kokoon 400 x 400 px |         avatar: PNG, GIF tai JPG. Enintään %{size}. Skaalataan kokoon %{dimensions} px | ||||||
|         digest: Lähetetään vain pitkän poissaolon jälkeen ja vain, jos olet saanut suoria viestejä poissaolosi aikana |         digest: Lähetetään vain pitkän poissaolon jälkeen ja vain, jos olet saanut suoria viestejä poissaolosi aikana | ||||||
|         display_name: |  | ||||||
|           one: <span class="name-counter">1</span> merkki jäljellä |  | ||||||
|           other: <span class="name-counter">%{count}</span> merkkiä jäljellä |  | ||||||
|         fields: Sinulla voi olla korkeintaan 4 asiaa profiilissasi taulukossa |         fields: Sinulla voi olla korkeintaan 4 asiaa profiilissasi taulukossa | ||||||
|         header: PNG, GIF tai JPG. Enintään 2 Mt. Skaalataan kokoon 700 x 335 px |         header: PNG, GIF tai JPG. Enintään %{size}. Skaalataan kokoon %{dimensions} px | ||||||
|         locked: Sinun täytyy hyväksyä seuraajat manuaalisesti |         locked: Sinun täytyy hyväksyä seuraajat manuaalisesti | ||||||
|         note: |  | ||||||
|           one: <span class="note-counter">1</span> merkki jäljellä |  | ||||||
|           other: <span class="note-counter">%{count}</span> merkkiä jäljellä |  | ||||||
|         setting_noindex: Vaikuttaa julkiseen profiiliisi ja tilasivuihisi |         setting_noindex: Vaikuttaa julkiseen profiiliisi ja tilasivuihisi | ||||||
|         setting_theme: Vaikuttaa Mastodonin ulkoasuun millä tahansa laitteella kirjauduttaessa. |         setting_theme: Vaikuttaa Mastodonin ulkoasuun millä tahansa laitteella kirjauduttaessa. | ||||||
|       imports: |       imports: | ||||||
|  |  | ||||||
|  | @ -4,23 +4,17 @@ fr: | ||||||
|     hints: |     hints: | ||||||
|       defaults: |       defaults: | ||||||
|         autofollow: Les personnes qui s’inscrivent grâce à l’invitation vous suivront automatiquement |         autofollow: Les personnes qui s’inscrivent grâce à l’invitation vous suivront automatiquement | ||||||
|         avatar: Au format PNG, GIF ou JPG. 2 Mo maximum. Sera réduit à %{dimensions}px |         avatar: Au format PNG, GIF ou JPG. %{size} maximum. Sera réduit à %{dimensions}px | ||||||
|         bot: Ce compte exécute principalement des actions automatisées et pourrait ne pas être surveillé |         bot: Ce compte exécute principalement des actions automatisées et pourrait ne pas être surveillé | ||||||
|         context: Un ou plusieurs contextes où le filtre devrait s’appliquer |         context: Un ou plusieurs contextes où le filtre devrait s’appliquer | ||||||
|         digest: Uniquement envoyé après une longue période d’inactivité et uniquement si vous avez reçu des messages personnels pendant votre absence |         digest: Uniquement envoyé après une longue période d’inactivité et uniquement si vous avez reçu des messages personnels pendant votre absence | ||||||
|         display_name: |  | ||||||
|           one: <span class="name-counter">1</span> caractère restant |  | ||||||
|           other: <span class="name-counter">%{count}</span> caractères restants |  | ||||||
|         email: Vous recevrez un courriel de confirmation |         email: Vous recevrez un courriel de confirmation | ||||||
|         fields: Vous pouvez avoir jusqu’à 4 éléments affichés en tant que tableau sur votre profil |         fields: Vous pouvez avoir jusqu’à 4 éléments affichés en tant que tableau sur votre profil | ||||||
|         header: Au format PNG, GIF ou JPG. 2 Mo maximum. Sera réduit à %{dimensions}px |         header: Au format PNG, GIF ou JPG. %{size} maximum. Sera réduit à %{dimensions}px | ||||||
|         inbox_url: Copiez l’URL depuis la page d’accueil du relais que vous souhaitez utiliser |         inbox_url: Copiez l’URL depuis la page d’accueil du relais que vous souhaitez utiliser | ||||||
|         irreversible: Les pouets filtrés disparaîtront irrémédiablement, même si le filtre est supprimé plus tard |         irreversible: Les pouets filtrés disparaîtront irrémédiablement, même si le filtre est supprimé plus tard | ||||||
|         locale: La langue de l’interface, des courriels et des notifications |         locale: La langue de l’interface, des courriels et des notifications | ||||||
|         locked: Vous devrez approuver chaque abonné⋅e et vos statuts ne s’afficheront qu’à vos abonné⋅es |         locked: Vous devrez approuver chaque abonné⋅e et vos statuts ne s’afficheront qu’à vos abonné⋅es | ||||||
|         note: |  | ||||||
|           one: <span class="note-counter">1</span> caractère restant |  | ||||||
|           other: <span class="note-counter">%{count}</span> caractères restants |  | ||||||
|         password: Utilisez au moins 8 caractères |         password: Utilisez au moins 8 caractères | ||||||
|         phrase: Sera trouvé sans que la case ou l’avertissement de contenu du pouet soit pris en compte |         phrase: Sera trouvé sans que la case ou l’avertissement de contenu du pouet soit pris en compte | ||||||
|         scopes: À quelles APIs l’application sera autorisée à accéder. Si vous sélectionnez un périmètre de haut-niveau, vous n’avez pas besoin de sélectionner les individuels. |         scopes: À quelles APIs l’application sera autorisée à accéder. Si vous sélectionnez un périmètre de haut-niveau, vous n’avez pas besoin de sélectionner les individuels. | ||||||
|  |  | ||||||
|  | @ -8,9 +8,6 @@ gl: | ||||||
|         bot: Esta conta realiza principalmente accións automatizadas e podería non estar monitorizada |         bot: Esta conta realiza principalmente accións automatizadas e podería non estar monitorizada | ||||||
|         context: Un ou varios contextos onde se debería aplicar o filtro |         context: Un ou varios contextos onde se debería aplicar o filtro | ||||||
|         digest: Enviar só tras un longo período de inactividade e só si recibeu algunha mensaxe personal na súa ausencia |         digest: Enviar só tras un longo período de inactividade e só si recibeu algunha mensaxe personal na súa ausencia | ||||||
|         display_name: |  | ||||||
|           one: <span class="name-counter">1</span> caracter restante |  | ||||||
|           other: <span class="name-counter">%{count}</span> caracteres restantes |  | ||||||
|         email: Enviaráselle un correo-e de confirmación |         email: Enviaráselle un correo-e de confirmación | ||||||
|         fields: Pode ter ate 4 elementos no seu perfil mostrados como unha táboa |         fields: Pode ter ate 4 elementos no seu perfil mostrados como unha táboa | ||||||
|         header: PNG, GIF ou JPG. Máximo %{size}. Será reducida a %{dimensions}px |         header: PNG, GIF ou JPG. Máximo %{size}. Será reducida a %{dimensions}px | ||||||
|  | @ -18,9 +15,6 @@ gl: | ||||||
|         irreversible: Os toots filtrados desaparecerán de xeito irreversible, incluso si despois se elimina o filtro |         irreversible: Os toots filtrados desaparecerán de xeito irreversible, incluso si despois se elimina o filtro | ||||||
|         locale: O idioma da interface de usuaria, correos e notificacións |         locale: O idioma da interface de usuaria, correos e notificacións | ||||||
|         locked: Require que vostede acepte as seguidoras de xeito manual |         locked: Require que vostede acepte as seguidoras de xeito manual | ||||||
|         note: |  | ||||||
|           one: <span class="note-counter">1</span> caracter restante |  | ||||||
|           other: <span class="note-counter">%{count}</span> caracteres restantes |  | ||||||
|         password: Utilice 8 caracteres ao menos |         password: Utilice 8 caracteres ao menos | ||||||
|         phrase: Concordará independentemente das maiúsculas ou avisos de contido no toot |         phrase: Concordará independentemente das maiúsculas ou avisos de contido no toot | ||||||
|         scopes: A que APIs terá acceso a aplicación. Si selecciona un ámbito de alto nivel, non precisa seleccionar elementos individuais. |         scopes: A que APIs terá acceso a aplicación. Si selecciona un ámbito de alto nivel, non precisa seleccionar elementos individuais. | ||||||
|  |  | ||||||
|  | @ -5,14 +5,8 @@ he: | ||||||
|       defaults: |       defaults: | ||||||
|         avatar: PNG, GIF או JPG. מקסימום %{size}. גודל התמונה יוקטן ל-%{dimensions}px |         avatar: PNG, GIF או JPG. מקסימום %{size}. גודל התמונה יוקטן ל-%{dimensions}px | ||||||
|         digest: נשלח לאחר תקופה ארוכה של אי-פעילות עם סיכום איזכורים שקיבלת בהעדרך |         digest: נשלח לאחר תקופה ארוכה של אי-פעילות עם סיכום איזכורים שקיבלת בהעדרך | ||||||
|         display_name: |  | ||||||
|           one: נותרה אות<span class="name-counter">אחת</span> |  | ||||||
|           other: נותרו<span class="name-counter">%{count}</span> אותיות |  | ||||||
|         header: PNG, GIF או JPG. מקסימום %{size}. גודל התמונה יוקטן %{dimensions}px |         header: PNG, GIF או JPG. מקסימום %{size}. גודל התמונה יוקטן %{dimensions}px | ||||||
|         locked: מחייב אישור עוקבים באופן ידני. פרטיות ההודעות תהיה עוקבים-בלבד אלא אם יצוין אחרת |         locked: מחייב אישור עוקבים באופן ידני. פרטיות ההודעות תהיה עוקבים-בלבד אלא אם יצוין אחרת | ||||||
|         note: |  | ||||||
|           one: נותרה אות<span class="note-counter">אחת</span> |  | ||||||
|           other: נותרו <span class="note-counter">%{count}</span> אותיות |  | ||||||
|         setting_noindex: משפיע על הפרופיל הציבורי שלך ועמודי ההודעות |         setting_noindex: משפיע על הפרופיל הציבורי שלך ועמודי ההודעות | ||||||
|         setting_theme: משפיע על המראה של מסטודון בעת החיבור המזוהה מכל מכשיר שהוא. |         setting_theme: משפיע על המראה של מסטודון בעת החיבור המזוהה מכל מכשיר שהוא. | ||||||
|       imports: |       imports: | ||||||
|  |  | ||||||
|  | @ -4,10 +4,8 @@ hr: | ||||||
|     hints: |     hints: | ||||||
|       defaults: |       defaults: | ||||||
|         avatar: PNG, GIF ili JPG. Najviše %{size}. Bit će smanjen na %{dimensions}px |         avatar: PNG, GIF ili JPG. Najviše %{size}. Bit će smanjen na %{dimensions}px | ||||||
|         display_name: Najviše 30 znakova |  | ||||||
|         header: PNG, GIF ili JPG. Najviše %{size}. Bit će smanjen na %{dimensions}px |         header: PNG, GIF ili JPG. Najviše %{size}. Bit će smanjen na %{dimensions}px | ||||||
|         locked: traži te da ručno odobriš sljedbenike i postavlja privatnost postova na dostupnu samo sljedbenicima |         locked: traži te da ručno odobriš sljedbenike i postavlja privatnost postova na dostupnu samo sljedbenicima | ||||||
|         note: Najviše 160 znakova |  | ||||||
|       imports: |       imports: | ||||||
|         data: CSV fajl izvezen iz druge Mastodon instance |         data: CSV fajl izvezen iz druge Mastodon instance | ||||||
|     labels: |     labels: | ||||||
|  |  | ||||||
Some files were not shown because too many files have changed in this diff Show more
		Loading…
	
		Reference in a new issue