Localizations for most server-side strings
This commit is contained in:
parent
3ce6ac0ce2
commit
546c4718e7
1
Gemfile
1
Gemfile
@ -55,6 +55,7 @@ group :development, :test do
|
|||||||
gem 'pry-rails'
|
gem 'pry-rails'
|
||||||
gem 'fuubar'
|
gem 'fuubar'
|
||||||
gem 'fabrication'
|
gem 'fabrication'
|
||||||
|
gem 'i18n-tasks', '~> 0.9.6'
|
||||||
end
|
end
|
||||||
|
|
||||||
group :test do
|
group :test do
|
||||||
|
22
Gemfile.lock
22
Gemfile.lock
@ -103,6 +103,10 @@ GEM
|
|||||||
dotenv-rails (2.1.1)
|
dotenv-rails (2.1.1)
|
||||||
dotenv (= 2.1.1)
|
dotenv (= 2.1.1)
|
||||||
railties (>= 4.0, < 5.1)
|
railties (>= 4.0, < 5.1)
|
||||||
|
easy_translate (0.5.0)
|
||||||
|
json
|
||||||
|
thread
|
||||||
|
thread_safe
|
||||||
erubis (2.7.0)
|
erubis (2.7.0)
|
||||||
excon (0.53.0)
|
excon (0.53.0)
|
||||||
execjs (2.7.0)
|
execjs (2.7.0)
|
||||||
@ -129,6 +133,7 @@ GEM
|
|||||||
hamlit (>= 1.2.0)
|
hamlit (>= 1.2.0)
|
||||||
railties (>= 4.0.1)
|
railties (>= 4.0.1)
|
||||||
hashdiff (0.3.0)
|
hashdiff (0.3.0)
|
||||||
|
highline (1.7.8)
|
||||||
hiredis (0.6.1)
|
hiredis (0.6.1)
|
||||||
htmlentities (4.3.4)
|
htmlentities (4.3.4)
|
||||||
http (2.0.3)
|
http (2.0.3)
|
||||||
@ -143,6 +148,16 @@ GEM
|
|||||||
httplog (0.3.2)
|
httplog (0.3.2)
|
||||||
colorize
|
colorize
|
||||||
i18n (0.7.0)
|
i18n (0.7.0)
|
||||||
|
i18n-tasks (0.9.6)
|
||||||
|
activesupport (>= 4.0.2)
|
||||||
|
ast (>= 2.1.0)
|
||||||
|
easy_translate (>= 0.5.0)
|
||||||
|
erubis
|
||||||
|
highline (>= 1.7.3)
|
||||||
|
i18n
|
||||||
|
parser (>= 2.2.3.0)
|
||||||
|
term-ansicolor (>= 1.3.2)
|
||||||
|
terminal-table (>= 1.5.1)
|
||||||
jbuilder (2.6.0)
|
jbuilder (2.6.0)
|
||||||
activesupport (>= 3.0.0, < 5.1)
|
activesupport (>= 3.0.0, < 5.1)
|
||||||
multi_json (~> 1.2)
|
multi_json (~> 1.2)
|
||||||
@ -352,9 +367,15 @@ GEM
|
|||||||
activesupport (>= 4.0)
|
activesupport (>= 4.0)
|
||||||
sprockets (>= 3.0.0)
|
sprockets (>= 3.0.0)
|
||||||
temple (0.7.7)
|
temple (0.7.7)
|
||||||
|
term-ansicolor (1.4.0)
|
||||||
|
tins (~> 1.0)
|
||||||
|
terminal-table (1.7.0)
|
||||||
|
unicode-display_width (~> 1.1)
|
||||||
thor (0.19.1)
|
thor (0.19.1)
|
||||||
|
thread (0.2.2)
|
||||||
thread_safe (0.3.5)
|
thread_safe (0.3.5)
|
||||||
tilt (2.0.5)
|
tilt (2.0.5)
|
||||||
|
tins (1.12.0)
|
||||||
tzinfo (1.2.2)
|
tzinfo (1.2.2)
|
||||||
thread_safe (~> 0.1)
|
thread_safe (~> 0.1)
|
||||||
uglifier (3.0.1)
|
uglifier (3.0.1)
|
||||||
@ -401,6 +422,7 @@ DEPENDENCIES
|
|||||||
htmlentities
|
htmlentities
|
||||||
http
|
http
|
||||||
httplog
|
httplog
|
||||||
|
i18n-tasks (~> 0.9.6)
|
||||||
jbuilder (~> 2.0)
|
jbuilder (~> 2.0)
|
||||||
jquery-rails
|
jquery-rails
|
||||||
ledermann-rails-settings
|
ledermann-rails-settings
|
||||||
|
@ -8,7 +8,7 @@ class NotificationMailer < ApplicationMailer
|
|||||||
@status = status
|
@status = status
|
||||||
|
|
||||||
return unless @me.user.settings(:notification_emails).mention
|
return unless @me.user.settings(:notification_emails).mention
|
||||||
mail to: @me.user.email, subject: "You were mentioned by #{@status.account.acct}"
|
mail to: @me.user.email, subject: I18n.t('notification_mailer.mention.subject', name: @status.account.acct)
|
||||||
end
|
end
|
||||||
|
|
||||||
def follow(followed_account, follower)
|
def follow(followed_account, follower)
|
||||||
@ -16,7 +16,7 @@ class NotificationMailer < ApplicationMailer
|
|||||||
@account = follower
|
@account = follower
|
||||||
|
|
||||||
return unless @me.user.settings(:notification_emails).follow
|
return unless @me.user.settings(:notification_emails).follow
|
||||||
mail to: @me.user.email, subject: "#{@account.acct} is now following you"
|
mail to: @me.user.email, subject: I18n.t('notification_mailer.follow.subject', name: @account.acct)
|
||||||
end
|
end
|
||||||
|
|
||||||
def favourite(target_status, from_account)
|
def favourite(target_status, from_account)
|
||||||
@ -25,7 +25,7 @@ class NotificationMailer < ApplicationMailer
|
|||||||
@status = target_status
|
@status = target_status
|
||||||
|
|
||||||
return unless @me.user.settings(:notification_emails).favourite
|
return unless @me.user.settings(:notification_emails).favourite
|
||||||
mail to: @me.user.email, subject: "#{@account.acct} favourited your status"
|
mail to: @me.user.email, subject: I18n.t('notification_mailer.favourite.subject', name: @account.acct)
|
||||||
end
|
end
|
||||||
|
|
||||||
def reblog(target_status, from_account)
|
def reblog(target_status, from_account)
|
||||||
@ -34,6 +34,6 @@ class NotificationMailer < ApplicationMailer
|
|||||||
@status = target_status
|
@status = target_status
|
||||||
|
|
||||||
return unless @me.user.settings(:notification_emails).reblog
|
return unless @me.user.settings(:notification_emails).reblog
|
||||||
mail to: @me.user.email, subject: "#{@account.acct} reblogged your status"
|
mail to: @me.user.email, subject: I18n.t('notification_mailer.reblog.subject', name: @account.acct)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -6,24 +6,15 @@
|
|||||||
= image_tag 'logo.png'
|
= image_tag 'logo.png'
|
||||||
Mastodon
|
Mastodon
|
||||||
|
|
||||||
%p
|
%p= t('about.about_mastodon').html_safe
|
||||||
Mastodon is a
|
%p= t('about.about_instance', instance: Rails.configuration.x.local_domain).html_safe
|
||||||
%em free, open-source
|
|
||||||
social network server. A
|
|
||||||
%em decentralized
|
|
||||||
alternative to commercial platforms, it avoids the risks of a single company monopolizing your communication. Anyone can run Mastodon and participate in the
|
|
||||||
%em social network
|
|
||||||
seamlessly.
|
|
||||||
%p
|
|
||||||
%em= Rails.configuration.x.local_domain
|
|
||||||
is a Mastodon instance.
|
|
||||||
|
|
||||||
.screenshot= image_tag 'screenshot.png'
|
.screenshot= image_tag 'screenshot.png'
|
||||||
|
|
||||||
.actions
|
.actions
|
||||||
.info
|
.info
|
||||||
= link_to 'Terms', terms_path
|
= link_to t('about.terms'), terms_path
|
||||||
= link_to 'Source code', 'https://github.com/Gargron/mastodon'
|
= link_to t('about.source_code'), 'https://github.com/Gargron/mastodon'
|
||||||
|
|
||||||
= link_to 'Get started', new_user_registration_path, class: 'button'
|
= link_to t('about.get_started'), new_user_registration_path, class: 'button'
|
||||||
= link_to 'Log in', new_user_session_path, class: 'button'
|
= link_to t('auth.login'), new_user_session_path, class: 'button'
|
||||||
|
@ -2,9 +2,9 @@
|
|||||||
- if user_signed_in? && current_account.id != @account.id
|
- if user_signed_in? && current_account.id != @account.id
|
||||||
.controls
|
.controls
|
||||||
- if current_account.following?(@account)
|
- if current_account.following?(@account)
|
||||||
= link_to 'Unfollow', unfollow_account_path(@account), data: { method: :post }, class: 'button'
|
= link_to t('accounts.unfollow'), unfollow_account_path(@account), data: { method: :post }, class: 'button'
|
||||||
- else
|
- else
|
||||||
= link_to 'Follow', follow_account_path(@account), data: { method: :post }, class: 'button'
|
= link_to t('accounts.follow'), follow_account_path(@account), data: { method: :post }, class: 'button'
|
||||||
|
|
||||||
.avatar= image_tag @account.avatar.url(:large)
|
.avatar= image_tag @account.avatar.url(:large)
|
||||||
%h1.name
|
%h1.name
|
||||||
@ -17,13 +17,13 @@
|
|||||||
.details-counters
|
.details-counters
|
||||||
.counter{ class: active_nav_class(account_url(@account)) }
|
.counter{ class: active_nav_class(account_url(@account)) }
|
||||||
= link_to account_url(@account) do
|
= link_to account_url(@account) do
|
||||||
%span.counter-label Posts
|
%span.counter-label= t('accounts.posts')
|
||||||
%span.counter-number= @account.statuses.count
|
%span.counter-number= @account.statuses.count
|
||||||
.counter{ class: active_nav_class(following_account_url(@account)) }
|
.counter{ class: active_nav_class(following_account_url(@account)) }
|
||||||
= link_to following_account_url(@account) do
|
= link_to following_account_url(@account) do
|
||||||
%span.counter-label Following
|
%span.counter-label= t('accounts.following')
|
||||||
%span.counter-number= @account.following.count
|
%span.counter-number= @account.following.count
|
||||||
.counter{ class: active_nav_class(followers_account_url(@account)) }
|
.counter{ class: active_nav_class(followers_account_url(@account)) }
|
||||||
= link_to followers_account_url(@account) do
|
= link_to followers_account_url(@account) do
|
||||||
%span.counter-label Followers
|
%span.counter-label= t('accounts.followers')
|
||||||
%span.counter-number= @account.followers.count
|
%span.counter-number= @account.followers.count
|
||||||
|
@ -1 +1 @@
|
|||||||
%p.nothing-here There is nothing here!
|
%p.nothing-here= t('accounts.nothing_here')
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
- content_for :page_title do
|
- content_for :page_title do
|
||||||
People who follow
|
= t('accounts.people_who_follow', name: display_name(@account))
|
||||||
= display_name(@account)
|
|
||||||
|
|
||||||
= render partial: 'header'
|
= render partial: 'header'
|
||||||
|
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
- content_for :page_title do
|
- content_for :page_title do
|
||||||
People whom
|
= t('accounts.people_followed_by', name: display_name(@account))
|
||||||
= display_name(@account)
|
|
||||||
follows
|
|
||||||
|
|
||||||
= render partial: 'header'
|
= render partial: 'header'
|
||||||
|
|
||||||
|
@ -2,4 +2,4 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Mastodon notifications from <%= Rails.configuration.x.local_domain %>
|
<%= t('application_mailer.signature', instance: Rails.configuration.x.local_domain) %>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<%= display_name(@me) %>,
|
<%= display_name(@me) %>,
|
||||||
|
|
||||||
Your status was favourited by <%= @account.acct %>:
|
<%= t('notification_mailer.favourite.body', name: @account.acct) %>
|
||||||
|
|
||||||
<%= render partial: 'status' %>
|
<%= render partial: 'status' %>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<%= display_name(@me) %>,
|
<%= display_name(@me) %>,
|
||||||
|
|
||||||
<%= @account.acct %> is now following you!
|
<%= t('notification_mailer.follow.body', name: @account.acct) %>
|
||||||
|
|
||||||
<%= web_url("accounts/#{@account.id}") %>
|
<%= web_url("accounts/#{@account.id}") %>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<%= display_name(@me) %>,
|
<%= display_name(@me) %>,
|
||||||
|
|
||||||
You were mentioned by <%= @status.account.acct %> in:
|
<%= t('notification_mailer.mention.body', name: @status.account.acct) %>
|
||||||
|
|
||||||
<%= render partial: 'status' %>
|
<%= render partial: 'status' %>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<%= display_name(@me) %>,
|
<%= display_name(@me) %>,
|
||||||
|
|
||||||
Your status was reblogged by <%= @account.acct %>:
|
<%= t('notification_mailer.reblog.body', name: @account.acct) %>
|
||||||
|
|
||||||
<%= render partial: 'status' %>
|
<%= render partial: 'status' %>
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
|
- content_for :page_title do
|
||||||
|
= t('doorkeeper.authorizations.new.title')
|
||||||
|
|
||||||
.oauth-prompt
|
.oauth-prompt
|
||||||
%h2
|
%h2= t('doorkeeper.authorizations.new.prompt', name: @pre_auth.client.name)
|
||||||
Application
|
|
||||||
%strong=@pre_auth.client.name
|
|
||||||
requests access to your account
|
|
||||||
|
|
||||||
%p
|
%p
|
||||||
It will be able to
|
= t('doorkeeper.authorizations.new.able_to')
|
||||||
= @pre_auth.scopes.map { |scope| t(scope, scope: [:doorkeeper, :scopes]) }.map { |s| "<strong>#{s}</strong>"}.to_sentence.html_safe
|
= @pre_auth.scopes.map { |scope| t(scope, scope: [:doorkeeper, :scopes]) }.map { |s| "<strong>#{s}</strong>"}.to_sentence.html_safe
|
||||||
|
|
||||||
= form_tag oauth_authorization_path, method: :post, class: 'simple_form' do
|
= form_tag oauth_authorization_path, method: :post, class: 'simple_form' do
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
.entry.entry-favourite
|
.entry.entry-favourite
|
||||||
.content
|
.content
|
||||||
%strong= favourite.account.acct
|
%strong= favourite.account.acct
|
||||||
favourited a post by
|
= t('stream_entries.favourited')
|
||||||
%strong= favourite.status.account.acct
|
%strong= favourite.status.account.acct
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
.entry.entry-follow
|
.entry.entry-follow
|
||||||
.content
|
.content
|
||||||
%strong= link_to follow.account.acct, account_path(follow.account)
|
%strong= link_to follow.account.acct, account_path(follow.account)
|
||||||
is now following
|
= t('stream_entries.is_now_following')
|
||||||
%strong= link_to follow.target_account.acct, TagManager.instance.url_for(follow.target_account)
|
%strong= link_to follow.target_account.acct, TagManager.instance.url_for(follow.target_account)
|
||||||
|
@ -31,16 +31,16 @@ module Mastodon
|
|||||||
allow do
|
allow do
|
||||||
origins '*'
|
origins '*'
|
||||||
|
|
||||||
resource '/api/*', :headers => :any, :methods => [:post, :put, :delete, :get, :options], credentials: false
|
resource '/api/*', headers: :any, methods: [:post, :put, :delete, :get, :options], credentials: false
|
||||||
resource '/oauth/token', :headers => :any, :methods => [:post], credentials: false
|
resource '/oauth/token', headers: :any, methods: [:post], credentials: false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
config.middleware.use Rack::Attack
|
config.middleware.use Rack::Attack
|
||||||
config.middleware.use Rack::Deflater
|
config.middleware.use Rack::Deflater
|
||||||
|
|
||||||
config.browserify_rails.source_map_environments += %w[development production]
|
config.browserify_rails.source_map_environments += %w(development production)
|
||||||
config.browserify_rails.commandline_options = "--transform [ babelify --presets [ es2015 react ] ] --extension=\".jsx\""
|
config.browserify_rails.commandline_options = '--transform [ babelify --presets [ es2015 react ] ] --extension=".jsx"'
|
||||||
|
|
||||||
config.to_prepare do
|
config.to_prepare do
|
||||||
Doorkeeper::AuthorizationsController.layout 'auth'
|
Doorkeeper::AuthorizationsController.layout 'auth'
|
||||||
@ -50,7 +50,7 @@ module Mastodon
|
|||||||
'Server' => 'Mastodon',
|
'Server' => 'Mastodon',
|
||||||
'X-Frame-Options' => 'DENY',
|
'X-Frame-Options' => 'DENY',
|
||||||
'X-Content-Type-Options' => 'nosniff',
|
'X-Content-Type-Options' => 'nosniff',
|
||||||
'X-XSS-Protection' => '1; mode=block'
|
'X-XSS-Protection' => '1; mode=block',
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
43
config/i18n-tasks.yml
Normal file
43
config/i18n-tasks.yml
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
# i18n-tasks finds and manages missing and unused translations: https://github.com/glebm/i18n-tasks
|
||||||
|
|
||||||
|
# The "main" locale.
|
||||||
|
base_locale: en
|
||||||
|
data:
|
||||||
|
read:
|
||||||
|
- config/locales/%{locale}.yml
|
||||||
|
- config/locales/**/*.%{locale}.yml
|
||||||
|
|
||||||
|
write:
|
||||||
|
- ['{devise, simple_form, doorkeeper}.*', 'config/locales/\1.%{locale}.yml']
|
||||||
|
- config/locales/%{locale}.yml
|
||||||
|
|
||||||
|
yaml:
|
||||||
|
write:
|
||||||
|
line_width: -1
|
||||||
|
|
||||||
|
search:
|
||||||
|
paths:
|
||||||
|
- app/
|
||||||
|
|
||||||
|
relative_roots:
|
||||||
|
- app/controllers
|
||||||
|
- app/helpers
|
||||||
|
- app/mailers
|
||||||
|
- app/views
|
||||||
|
|
||||||
|
exclude:
|
||||||
|
- app/assets/images
|
||||||
|
- app/assets/fonts
|
||||||
|
- app/assets/videos
|
||||||
|
|
||||||
|
ignore_missing:
|
||||||
|
- '{devise,simple_form}.*'
|
||||||
|
|
||||||
|
ignore_unused:
|
||||||
|
- 'activerecord.attributes.*'
|
||||||
|
- '{devise,will_paginate,doorkeeper}.*'
|
||||||
|
- 'simple_form.{yes,no}'
|
||||||
|
- 'simple_form.{placeholders,hints,labels}.*'
|
||||||
|
- 'simple_form.{error_notification,required}.:'
|
||||||
|
- 'errors.messages.*'
|
||||||
|
- 'activerecord.errors.models.doorkeeper/*'
|
@ -9,3 +9,4 @@ Rails.application.config.assets.version = '1.0'
|
|||||||
# Precompile additional assets.
|
# Precompile additional assets.
|
||||||
# application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
|
# application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
|
||||||
Rails.application.config.assets.precompile += %w(application_public.js)
|
Rails.application.config.assets.precompile += %w(application_public.js)
|
||||||
|
Rails.application.config.assets.initialize_on_precompile = true
|
||||||
|
@ -1,62 +1,61 @@
|
|||||||
# Additional translations at https://github.com/plataformatec/devise/wiki/I18n
|
---
|
||||||
|
|
||||||
en:
|
en:
|
||||||
devise:
|
devise:
|
||||||
confirmations:
|
confirmations:
|
||||||
confirmed: "Your email address has been successfully confirmed."
|
confirmed: Your email address has been successfully confirmed.
|
||||||
send_instructions: "You will receive an email with instructions for how to confirm your email address in a few minutes."
|
send_instructions: You will receive an email with instructions for how to confirm your email address in a few minutes.
|
||||||
send_paranoid_instructions: "If your email address exists in our database, you will receive an email with instructions for how to confirm your email address in a few minutes."
|
send_paranoid_instructions: If your email address exists in our database, you will receive an email with instructions for how to confirm your email address in a few minutes.
|
||||||
failure:
|
failure:
|
||||||
already_authenticated: "You are already signed in."
|
already_authenticated: You are already signed in.
|
||||||
inactive: "Your account is not activated yet."
|
inactive: Your account is not activated yet.
|
||||||
invalid: "Invalid %{authentication_keys} or password."
|
invalid: Invalid %{authentication_keys} or password.
|
||||||
locked: "Your account is locked."
|
last_attempt: You have one more attempt before your account is locked.
|
||||||
last_attempt: "You have one more attempt before your account is locked."
|
locked: Your account is locked.
|
||||||
not_found_in_database: "Invalid %{authentication_keys} or password."
|
not_found_in_database: Invalid %{authentication_keys} or password.
|
||||||
timeout: "Your session expired. Please sign in again to continue."
|
timeout: Your session expired. Please sign in again to continue.
|
||||||
unauthenticated: "You need to sign in or sign up before continuing."
|
unauthenticated: You need to sign in or sign up before continuing.
|
||||||
unconfirmed: "You have to confirm your email address before continuing."
|
unconfirmed: You have to confirm your email address before continuing.
|
||||||
mailer:
|
mailer:
|
||||||
confirmation_instructions:
|
confirmation_instructions:
|
||||||
subject: "Mastodon: Confirmation instructions"
|
subject: 'Mastodon: Confirmation instructions'
|
||||||
reset_password_instructions:
|
|
||||||
subject: "Mastodon: Reset password instructions"
|
|
||||||
unlock_instructions:
|
|
||||||
subject: "Mastodon: Unlock instructions"
|
|
||||||
password_change:
|
password_change:
|
||||||
subject: "Mastodon: Password changed"
|
subject: 'Mastodon: Password changed'
|
||||||
|
reset_password_instructions:
|
||||||
|
subject: 'Mastodon: Reset password instructions'
|
||||||
|
unlock_instructions:
|
||||||
|
subject: 'Mastodon: Unlock instructions'
|
||||||
omniauth_callbacks:
|
omniauth_callbacks:
|
||||||
failure: "Could not authenticate you from %{kind} because \"%{reason}\"."
|
failure: Could not authenticate you from %{kind} because "%{reason}".
|
||||||
success: "Successfully authenticated from %{kind} account."
|
success: Successfully authenticated from %{kind} account.
|
||||||
passwords:
|
passwords:
|
||||||
no_token: "You can't access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided."
|
no_token: You can't access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided.
|
||||||
send_instructions: "You will receive an email with instructions on how to reset your password in a few minutes."
|
send_instructions: You will receive an email with instructions on how to reset your password in a few minutes.
|
||||||
send_paranoid_instructions: "If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes."
|
send_paranoid_instructions: If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes.
|
||||||
updated: "Your password has been changed successfully. You are now signed in."
|
updated: Your password has been changed successfully. You are now signed in.
|
||||||
updated_not_active: "Your password has been changed successfully."
|
updated_not_active: Your password has been changed successfully.
|
||||||
registrations:
|
registrations:
|
||||||
destroyed: "Bye! Your account has been successfully cancelled. We hope to see you again soon."
|
destroyed: Bye! Your account has been successfully cancelled. We hope to see you again soon.
|
||||||
signed_up: "Welcome! You have signed up successfully."
|
signed_up: Welcome! You have signed up successfully.
|
||||||
signed_up_but_inactive: "You have signed up successfully. However, we could not sign you in because your account is not yet activated."
|
signed_up_but_inactive: You have signed up successfully. However, we could not sign you in because your account is not yet activated.
|
||||||
signed_up_but_locked: "You have signed up successfully. However, we could not sign you in because your account is locked."
|
signed_up_but_locked: You have signed up successfully. However, we could not sign you in because your account is locked.
|
||||||
signed_up_but_unconfirmed: "A message with a confirmation link has been sent to your email address. Please follow the link to activate your account."
|
signed_up_but_unconfirmed: A message with a confirmation link has been sent to your email address. Please follow the link to activate your account.
|
||||||
update_needs_confirmation: "You updated your account successfully, but we need to verify your new email address. Please check your email and follow the confirm link to confirm your new email address."
|
update_needs_confirmation: You updated your account successfully, but we need to verify your new email address. Please check your email and follow the confirm link to confirm your new email address.
|
||||||
updated: "Your account has been updated successfully."
|
updated: Your account has been updated successfully.
|
||||||
sessions:
|
sessions:
|
||||||
signed_in: "Signed in successfully."
|
already_signed_out: Signed out successfully.
|
||||||
signed_out: "Signed out successfully."
|
signed_in: Signed in successfully.
|
||||||
already_signed_out: "Signed out successfully."
|
signed_out: Signed out successfully.
|
||||||
unlocks:
|
unlocks:
|
||||||
send_instructions: "You will receive an email with instructions for how to unlock your account in a few minutes."
|
send_instructions: You will receive an email with instructions for how to unlock your account in a few minutes.
|
||||||
send_paranoid_instructions: "If your account exists, you will receive an email with instructions for how to unlock it in a few minutes."
|
send_paranoid_instructions: If your account exists, you will receive an email with instructions for how to unlock it in a few minutes.
|
||||||
unlocked: "Your account has been unlocked successfully. Please sign in to continue."
|
unlocked: Your account has been unlocked successfully. Please sign in to continue.
|
||||||
errors:
|
errors:
|
||||||
messages:
|
messages:
|
||||||
already_confirmed: "was already confirmed, please try signing in"
|
already_confirmed: was already confirmed, please try signing in
|
||||||
confirmation_period_expired: "needs to be confirmed within %{period}, please request a new one"
|
confirmation_period_expired: needs to be confirmed within %{period}, please request a new one
|
||||||
expired: "has expired, please request a new one"
|
expired: has expired, please request a new one
|
||||||
not_found: "not found"
|
not_found: not found
|
||||||
not_locked: "was not locked"
|
not_locked: was not locked
|
||||||
not_saved:
|
not_saved:
|
||||||
one: "1 error prohibited this %{resource} from being saved:"
|
one: '1 error prohibited this %{resource} from being saved:'
|
||||||
other: "%{count} errors prohibited this %{resource} from being saved:"
|
other: "%{count} errors prohibited this %{resource} from being saved:"
|
||||||
|
@ -1,127 +1,112 @@
|
|||||||
|
---
|
||||||
en:
|
en:
|
||||||
activerecord:
|
activerecord:
|
||||||
attributes:
|
attributes:
|
||||||
doorkeeper/application:
|
doorkeeper/application:
|
||||||
name: 'Name'
|
name: Name
|
||||||
redirect_uri: 'Redirect URI'
|
redirect_uri: Redirect URI
|
||||||
errors:
|
errors:
|
||||||
models:
|
models:
|
||||||
doorkeeper/application:
|
doorkeeper/application:
|
||||||
attributes:
|
attributes:
|
||||||
redirect_uri:
|
redirect_uri:
|
||||||
fragment_present: 'cannot contain a fragment.'
|
fragment_present: cannot contain a fragment.
|
||||||
invalid_uri: 'must be a valid URI.'
|
invalid_uri: must be a valid URI.
|
||||||
relative_uri: 'must be an absolute URI.'
|
relative_uri: must be an absolute URI.
|
||||||
secured_uri: 'must be an HTTPS/SSL URI.'
|
secured_uri: must be an HTTPS/SSL URI.
|
||||||
|
|
||||||
doorkeeper:
|
doorkeeper:
|
||||||
scopes:
|
|
||||||
read: read your account's data
|
|
||||||
write: post on your behalf
|
|
||||||
follow: follow, block, unblock and unfollow accounts
|
|
||||||
applications:
|
applications:
|
||||||
confirmations:
|
|
||||||
destroy: 'Are you sure?'
|
|
||||||
buttons:
|
buttons:
|
||||||
edit: 'Edit'
|
authorize: Authorize
|
||||||
destroy: 'Destroy'
|
cancel: Cancel
|
||||||
submit: 'Submit'
|
destroy: Destroy
|
||||||
cancel: 'Cancel'
|
edit: Edit
|
||||||
authorize: 'Authorize'
|
submit: Submit
|
||||||
form:
|
confirmations:
|
||||||
error: 'Whoops! Check your form for possible errors'
|
destroy: Are you sure?
|
||||||
help:
|
|
||||||
redirect_uri: 'Use one line per URI'
|
|
||||||
native_redirect_uri: 'Use %{native_redirect_uri} for local tests'
|
|
||||||
scopes: 'Separate scopes with spaces. Leave blank to use the default scopes.'
|
|
||||||
edit:
|
edit:
|
||||||
title: 'Edit application'
|
title: Edit application
|
||||||
|
form:
|
||||||
|
error: Whoops! Check your form for possible errors
|
||||||
|
help:
|
||||||
|
native_redirect_uri: Use %{native_redirect_uri} for local tests
|
||||||
|
redirect_uri: Use one line per URI
|
||||||
|
scopes: Separate scopes with spaces. Leave blank to use the default scopes.
|
||||||
index:
|
index:
|
||||||
title: 'Your applications'
|
callback_url: Callback URL
|
||||||
new: 'New Application'
|
name: Name
|
||||||
name: 'Name'
|
new: New Application
|
||||||
callback_url: 'Callback URL'
|
title: Your applications
|
||||||
new:
|
new:
|
||||||
title: 'New Application'
|
title: New Application
|
||||||
show:
|
show:
|
||||||
|
actions: Actions
|
||||||
|
application_id: Application Id
|
||||||
|
callback_urls: Callback urls
|
||||||
|
scopes: Scopes
|
||||||
|
secret: Secret
|
||||||
title: 'Application: %{name}'
|
title: 'Application: %{name}'
|
||||||
application_id: 'Application Id'
|
|
||||||
secret: 'Secret'
|
|
||||||
scopes: 'Scopes'
|
|
||||||
callback_urls: 'Callback urls'
|
|
||||||
actions: 'Actions'
|
|
||||||
|
|
||||||
authorizations:
|
authorizations:
|
||||||
buttons:
|
buttons:
|
||||||
authorize: 'Authorize'
|
authorize: Authorize
|
||||||
deny: 'Deny'
|
deny: Deny
|
||||||
error:
|
error:
|
||||||
title: 'An error has occurred'
|
title: An error has occurred
|
||||||
new:
|
new:
|
||||||
title: 'Authorization required'
|
able_to: It will be able to
|
||||||
prompt: 'Authorize %{client_name} to use your account?'
|
prompt: Application %{client_name} requests access to your account
|
||||||
able_to: 'This application will be able to'
|
title: Authorization required
|
||||||
show:
|
show:
|
||||||
title: 'Authorization code'
|
title: Authorization code
|
||||||
|
|
||||||
authorized_applications:
|
authorized_applications:
|
||||||
confirmations:
|
|
||||||
revoke: 'Are you sure?'
|
|
||||||
buttons:
|
buttons:
|
||||||
revoke: 'Revoke'
|
revoke: Revoke
|
||||||
|
confirmations:
|
||||||
|
revoke: Are you sure?
|
||||||
index:
|
index:
|
||||||
title: 'Your authorized applications'
|
application: Application
|
||||||
application: 'Application'
|
created_at: Created At
|
||||||
created_at: 'Created At'
|
date_format: "%Y-%m-%d %H:%M:%S"
|
||||||
date_format: '%Y-%m-%d %H:%M:%S'
|
title: Your authorized applications
|
||||||
|
|
||||||
errors:
|
errors:
|
||||||
messages:
|
messages:
|
||||||
# Common error messages
|
access_denied: The resource owner or authorization server denied the request.
|
||||||
invalid_request: 'The request is missing a required parameter, includes an unsupported parameter value, or is otherwise malformed.'
|
credential_flow_not_configured: Resource Owner Password Credentials flow failed due to Doorkeeper.configure.resource_owner_from_credentials being unconfigured.
|
||||||
invalid_redirect_uri: 'The redirect uri included is not valid.'
|
invalid_client: Client authentication failed due to unknown client, no client authentication included, or unsupported authentication method.
|
||||||
unauthorized_client: 'The client is not authorized to perform this request using this method.'
|
invalid_grant: The provided authorization grant is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client.
|
||||||
access_denied: 'The resource owner or authorization server denied the request.'
|
invalid_redirect_uri: The redirect uri included is not valid.
|
||||||
invalid_scope: 'The requested scope is invalid, unknown, or malformed.'
|
invalid_request: The request is missing a required parameter, includes an unsupported parameter value, or is otherwise malformed.
|
||||||
server_error: 'The authorization server encountered an unexpected condition which prevented it from fulfilling the request.'
|
invalid_resource_owner: The provided resource owner credentials are not valid, or resource owner cannot be found
|
||||||
temporarily_unavailable: 'The authorization server is currently unable to handle the request due to a temporary overloading or maintenance of the server.'
|
invalid_scope: The requested scope is invalid, unknown, or malformed.
|
||||||
|
|
||||||
#configuration error messages
|
|
||||||
credential_flow_not_configured: 'Resource Owner Password Credentials flow failed due to Doorkeeper.configure.resource_owner_from_credentials being unconfigured.'
|
|
||||||
resource_owner_authenticator_not_configured: 'Resource Owner find failed due to Doorkeeper.configure.resource_owner_authenticator being unconfiged.'
|
|
||||||
|
|
||||||
# Access grant errors
|
|
||||||
unsupported_response_type: 'The authorization server does not support this response type.'
|
|
||||||
|
|
||||||
# Access token errors
|
|
||||||
invalid_client: 'Client authentication failed due to unknown client, no client authentication included, or unsupported authentication method.'
|
|
||||||
invalid_grant: 'The provided authorization grant is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client.'
|
|
||||||
unsupported_grant_type: 'The authorization grant type is not supported by the authorization server.'
|
|
||||||
|
|
||||||
# Password Access token errors
|
|
||||||
invalid_resource_owner: 'The provided resource owner credentials are not valid, or resource owner cannot be found'
|
|
||||||
|
|
||||||
invalid_token:
|
invalid_token:
|
||||||
revoked: "The access token was revoked"
|
expired: The access token expired
|
||||||
expired: "The access token expired"
|
revoked: The access token was revoked
|
||||||
unknown: "The access token is invalid"
|
unknown: The access token is invalid
|
||||||
|
resource_owner_authenticator_not_configured: Resource Owner find failed due to Doorkeeper.configure.resource_owner_authenticator being unconfiged.
|
||||||
|
server_error: The authorization server encountered an unexpected condition which prevented it from fulfilling the request.
|
||||||
|
temporarily_unavailable: The authorization server is currently unable to handle the request due to a temporary overloading or maintenance of the server.
|
||||||
|
unauthorized_client: The client is not authorized to perform this request using this method.
|
||||||
|
unsupported_grant_type: The authorization grant type is not supported by the authorization server.
|
||||||
|
unsupported_response_type: The authorization server does not support this response type.
|
||||||
flash:
|
flash:
|
||||||
applications:
|
applications:
|
||||||
create:
|
create:
|
||||||
notice: 'Application created.'
|
notice: Application created.
|
||||||
destroy:
|
destroy:
|
||||||
notice: 'Application deleted.'
|
notice: Application deleted.
|
||||||
update:
|
update:
|
||||||
notice: 'Application updated.'
|
notice: Application updated.
|
||||||
authorized_applications:
|
authorized_applications:
|
||||||
destroy:
|
destroy:
|
||||||
notice: 'Application revoked.'
|
notice: Application revoked.
|
||||||
|
|
||||||
layouts:
|
layouts:
|
||||||
admin:
|
admin:
|
||||||
nav:
|
nav:
|
||||||
oauth2_provider: 'OAuth2 Provider'
|
applications: Applications
|
||||||
applications: 'Applications'
|
oauth2_provider: OAuth2 Provider
|
||||||
application:
|
application:
|
||||||
title: 'OAuth authorization required'
|
title: OAuth authorization required
|
||||||
|
scopes:
|
||||||
|
follow: follow, block, unblock and unfollow accounts
|
||||||
|
read: read your account's data
|
||||||
|
write: post on your behalf
|
||||||
|
@ -1,23 +1,57 @@
|
|||||||
|
---
|
||||||
en:
|
en:
|
||||||
|
about:
|
||||||
|
about_instance: "<em>%{instance}</em> is a Mastodon instance."
|
||||||
|
about_mastodon: Mastodon is a <em>free, open-source</em> social network server. A <em>decentralized</em> alternative to commercial platforms, it avoids the risks of a single company monopolizing your communication. Anyone can run Mastodon and participate in the <em>social network</em> seamlessly.
|
||||||
|
get_started: Get started
|
||||||
|
source_code: Source code
|
||||||
|
terms: Terms
|
||||||
|
accounts:
|
||||||
|
follow: Follow
|
||||||
|
followers: Followers
|
||||||
|
following: Following
|
||||||
|
nothing_here: There is nothing here!
|
||||||
|
people_followed_by: People whom %{name} follows
|
||||||
|
people_who_follow: People who follow %{name}
|
||||||
|
posts: Posts
|
||||||
|
unfollow: Unfollow
|
||||||
|
application_mailer:
|
||||||
|
signature: Mastodon notifications from %{instance}
|
||||||
auth:
|
auth:
|
||||||
|
change_password: Change password
|
||||||
|
didnt_get_confirmation: Didn't receive confirmation instructions?
|
||||||
|
forgot_password: Forgot your password?
|
||||||
login: Log in
|
login: Log in
|
||||||
register: Sign up
|
register: Sign up
|
||||||
forgot_password: Forgot your password?
|
|
||||||
didnt_get_confirmation: Didn't receive confirmation instructions?
|
|
||||||
resend_confirmation: Resend confirmation instructions
|
resend_confirmation: Resend confirmation instructions
|
||||||
reset_password: Reset password
|
reset_password: Reset password
|
||||||
set_new_password: Set new password
|
set_new_password: Set new password
|
||||||
change_password: Change password
|
|
||||||
generic:
|
generic:
|
||||||
|
changes_saved_msg: Changes successfully saved!
|
||||||
|
powered_by: powered by %{link}
|
||||||
save_changes: Save changes
|
save_changes: Save changes
|
||||||
validation_errors:
|
validation_errors:
|
||||||
one: Something isn't quite right yet! Please review the error below
|
one: Something isn't quite right yet! Please review the error below
|
||||||
other: Something isn't quite right yet! Please review %{count} errors below
|
other: Something isn't quite right yet! Please review %{count} errors below
|
||||||
powered_by: powered by %{link}
|
notification_mailer:
|
||||||
changes_saved_msg: Changes successfully saved!
|
favourite:
|
||||||
|
body: 'Your status was favourited by %{name}:'
|
||||||
|
subject: "%{name} favourited your status"
|
||||||
|
follow:
|
||||||
|
body: "%{name} is now following you!"
|
||||||
|
subject: "%{name} is now following you"
|
||||||
|
mention:
|
||||||
|
body: 'You were mentioned by %{name} in:'
|
||||||
|
subject: You were mentioned by %{name}
|
||||||
|
reblog:
|
||||||
|
body: 'Your status was reblogged by %{name}:'
|
||||||
|
subject: "%{name} reblogged your status"
|
||||||
pagination:
|
pagination:
|
||||||
next: Next
|
next: Next
|
||||||
prev: Prev
|
prev: Prev
|
||||||
settings:
|
settings:
|
||||||
edit_profile: Edit profile
|
edit_profile: Edit profile
|
||||||
preferences: Preferences
|
preferences: Preferences
|
||||||
|
stream_entries:
|
||||||
|
favourited: favourited a post by
|
||||||
|
is_now_following: is now following
|
||||||
|
@ -1,43 +1,28 @@
|
|||||||
|
---
|
||||||
en:
|
en:
|
||||||
simple_form:
|
simple_form:
|
||||||
"yes": 'Yes'
|
|
||||||
"no": 'No'
|
|
||||||
required:
|
|
||||||
text: 'required'
|
|
||||||
mark: '*'
|
|
||||||
error_notification:
|
error_notification:
|
||||||
default_message: "Please review the problems below:"
|
default_message: 'Please review the problems below:'
|
||||||
|
|
||||||
labels:
|
labels:
|
||||||
defaults:
|
defaults:
|
||||||
email: E-mail address
|
avatar: Avatar
|
||||||
password: Password
|
|
||||||
username: Username
|
|
||||||
confirm_password: Confirm password
|
|
||||||
new_password: New password
|
|
||||||
confirm_new_password: Confirm new password
|
confirm_new_password: Confirm new password
|
||||||
|
confirm_password: Confirm password
|
||||||
current_password: Current password
|
current_password: Current password
|
||||||
display_name: Display name
|
display_name: Display name
|
||||||
note: Bio
|
email: E-mail address
|
||||||
avatar: Avatar
|
|
||||||
header: Header
|
header: Header
|
||||||
|
new_password: New password
|
||||||
|
note: Bio
|
||||||
|
password: Password
|
||||||
|
username: Username
|
||||||
notification_emails:
|
notification_emails:
|
||||||
follow: Send e-mail when someone follows you
|
|
||||||
reblog: Send e-mail when someone reblogs your status
|
|
||||||
favourite: Send e-mail when someone favourites your status
|
favourite: Send e-mail when someone favourites your status
|
||||||
|
follow: Send e-mail when someone follows you
|
||||||
mention: Send e-mail when someone mentions you
|
mention: Send e-mail when someone mentions you
|
||||||
# user:
|
reblog: Send e-mail when someone reblogs your status
|
||||||
# new:
|
'no': 'No'
|
||||||
# email: 'E-mail to sign in.'
|
required:
|
||||||
# edit:
|
mark: "*"
|
||||||
# email: 'E-mail.'
|
text: required
|
||||||
# hints:
|
'yes': 'Yes'
|
||||||
# defaults:
|
|
||||||
# username: 'User name to sign in.'
|
|
||||||
# password: 'No special characters, please.'
|
|
||||||
# include_blanks:
|
|
||||||
# defaults:
|
|
||||||
# age: 'Rather not say'
|
|
||||||
# prompts:
|
|
||||||
# defaults:
|
|
||||||
# age: 'Select your age'
|
|
||||||
|
18
spec/i18n_spec.rb
Normal file
18
spec/i18n_spec.rb
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
require 'i18n/tasks'
|
||||||
|
|
||||||
|
RSpec.describe 'I18n' do
|
||||||
|
let(:i18n) { I18n::Tasks::BaseTask.new }
|
||||||
|
let(:missing_keys) { i18n.missing_keys }
|
||||||
|
let(:unused_keys) { i18n.unused_keys }
|
||||||
|
|
||||||
|
it 'does not have missing keys' do
|
||||||
|
expect(missing_keys).to be_empty,
|
||||||
|
"Missing #{missing_keys.leaves.count} i18n keys, run `i18n-tasks missing' to show them"
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'does not have unused keys' do
|
||||||
|
expect(unused_keys).to be_empty,
|
||||||
|
"#{unused_keys.leaves.count} unused i18n keys, run `i18n-tasks unused' to show them"
|
||||||
|
end
|
||||||
|
end
|
@ -1,5 +1,5 @@
|
|||||||
require 'rails_helper'
|
require 'rails_helper'
|
||||||
|
|
||||||
RSpec.describe DomainBlock, type: :model do
|
RSpec.describe DomainBlock, type: :model do
|
||||||
pending "add some examples to (or delete) #{__FILE__}"
|
|
||||||
end
|
end
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
require 'rails_helper'
|
require 'rails_helper'
|
||||||
|
|
||||||
RSpec.describe Tag, type: :model do
|
RSpec.describe Tag, type: :model do
|
||||||
pending "add some examples to (or delete) #{__FILE__}"
|
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user