Misc i18n fixes (#14852)
* Add i18n tasks spec * Ignore storybook static folder * Run i18n-tasks normalize * Fix inconsistent interpolations flagged by i18n-tasks check-consistent-interpolations * Update devise en translation and add devise_invitable fr translation * Add missing keys, ignore those to be translated and normalize * Temporarily ignore unused keys until we have a strategy for maintenance * Add missing key * Re-run normalize * Disable normalize test temporarily
This commit is contained in:
parent
ad513ebfc7
commit
eba0ddb240
9 changed files with 321 additions and 259 deletions
|
|
@ -16,9 +16,9 @@ data:
|
|||
# Locale files or `File.find` patterns where translations are read from:
|
||||
read:
|
||||
## Default:
|
||||
# - config/locales/%{locale}.yml
|
||||
- config/locales/%{locale}.yml
|
||||
## More files:
|
||||
# - config/locales/**/*.%{locale}.yml
|
||||
- config/locales/**/*.%{locale}.yml
|
||||
|
||||
# Locale files to write new keys to, based on a list of key pattern => file rules. Matched from top to bottom:
|
||||
# `i18n-tasks normalize -p` will force move the keys according to these rules
|
||||
|
|
@ -70,6 +70,7 @@ search:
|
|||
- app/assets/images
|
||||
- app/assets/fonts
|
||||
- app/assets/videos
|
||||
- app/javascript/storybook-static
|
||||
|
||||
## Alternatively, the only files or `File.fnmatch patterns` to search in `paths`:
|
||||
## If specified, this settings takes priority over `exclude`, but `exclude` still applies.
|
||||
|
|
@ -92,7 +93,17 @@ search:
|
|||
# deepl_api_key: "48E92789-57A3-466A-9959-1A1A1A1A1A1A"
|
||||
|
||||
## Do not consider these keys missing:
|
||||
# ignore_missing:
|
||||
ignore_missing:
|
||||
- date.*
|
||||
|
||||
# TODO: add translations for these
|
||||
- 'activerecord.attributes.doorkeeper/*'
|
||||
- 'activerecord.errors.models.doorkeeper/*'
|
||||
- devise.*
|
||||
- doorkeeper.*
|
||||
|
||||
# these are loaded from kaminari default gem
|
||||
- views.*
|
||||
# - 'errors.messages.{accepted,blank,invalid,too_short,too_long}'
|
||||
# - '{devise,simple_form}.*'
|
||||
|
||||
|
|
|
|||
|
|
@ -1,60 +1,64 @@
|
|||
# Additional translations at https://github.com/plataformatec/devise/wiki/I18n
|
||||
|
||||
---
|
||||
en:
|
||||
devise:
|
||||
confirmations:
|
||||
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_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."
|
||||
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_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:
|
||||
already_authenticated: "You are already signed in."
|
||||
inactive: "Your account is not activated yet."
|
||||
invalid: "Invalid %{authentication_keys} or password."
|
||||
locked: "Your account is locked."
|
||||
last_attempt: "You have one more attempt before your account is locked."
|
||||
not_found_in_database: "Invalid %{authentication_keys} or password."
|
||||
timeout: "Your session expired. Please sign in again to continue."
|
||||
unauthenticated: "You need to sign in or sign up before continuing."
|
||||
unconfirmed: "You have to confirm your email address before continuing."
|
||||
already_authenticated: You are already signed in.
|
||||
inactive: Your account is not activated yet.
|
||||
invalid: Invalid %{authentication_keys} or password.
|
||||
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.
|
||||
timeout: Your session expired. Please sign in again to continue.
|
||||
unauthenticated: You need to sign in or sign up before continuing.
|
||||
unconfirmed: You have to confirm your email address before continuing.
|
||||
mailer:
|
||||
confirmation_instructions:
|
||||
subject: "Confirmation instructions"
|
||||
subject: Confirmation instructions
|
||||
email_changed:
|
||||
subject: Email Changed
|
||||
password_change:
|
||||
subject: Password Changed
|
||||
reset_password_instructions:
|
||||
subject: "Reset password instructions"
|
||||
subject: Reset password instructions
|
||||
unlock_instructions:
|
||||
subject: "Unlock instructions"
|
||||
subject: Unlock instructions
|
||||
omniauth_callbacks:
|
||||
failure: "Could not authenticate you from %{kind} because \"%{reason}\"."
|
||||
success: "Successfully authenticated from %{kind} account."
|
||||
failure: Could not authenticate you from %{kind} because "%{reason}".
|
||||
success: Successfully authenticated from %{kind} account.
|
||||
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."
|
||||
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."
|
||||
updated: "Your password has been changed successfully. You are now signed in."
|
||||
updated_not_active: "Your password has been changed successfully."
|
||||
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_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_not_active: Your password has been changed successfully.
|
||||
registrations:
|
||||
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_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_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."
|
||||
updated: "Your account has been updated successfully."
|
||||
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_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_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 confirmation link to confirm your new email address.
|
||||
updated: Your account has been updated successfully.
|
||||
updated_but_not_signed_in: Your account has been updated successfully, but since your password was changed, you need to sign in again.
|
||||
sessions:
|
||||
signed_in: "Signed in successfully."
|
||||
signed_out: "Signed out successfully."
|
||||
already_signed_out: "Signed out successfully."
|
||||
already_signed_out: Signed out successfully.
|
||||
signed_in: Signed in successfully.
|
||||
signed_out: Signed out successfully.
|
||||
unlocks:
|
||||
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."
|
||||
unlocked: "Your account has been unlocked successfully. Please sign in to continue."
|
||||
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.
|
||||
unlocked: Your account has been unlocked successfully. Please sign in to continue.
|
||||
errors:
|
||||
messages:
|
||||
already_confirmed: "was already confirmed, please try signing in"
|
||||
confirmation_period_expired: "needs to be confirmed within %{period}, please request a new one"
|
||||
expired: "has expired, please request a new one"
|
||||
not_found: "not found"
|
||||
not_locked: "was not locked"
|
||||
already_confirmed: was already confirmed, please try signing in
|
||||
confirmation_period_expired: needs to be confirmed within %{period}, please request a new one
|
||||
expired: has expired, please request a new one
|
||||
not_found: not found
|
||||
not_locked: was not locked
|
||||
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:"
|
||||
|
|
|
|||
|
|
@ -1,28 +1,29 @@
|
|||
---
|
||||
en:
|
||||
devise:
|
||||
failure:
|
||||
invited: "You have a pending invitation, accept it to finish creating your account."
|
||||
invited: You have a pending invitation, accept it to finish creating your account.
|
||||
invitations:
|
||||
send_instructions: "An invitation email has been sent to %{email}."
|
||||
invitation_token_invalid: "The invitation token provided is not valid!"
|
||||
updated: "Your password was set successfully. You are now signed in."
|
||||
updated_not_active: "Your password was set successfully."
|
||||
no_invitations_remaining: "No invitations remaining"
|
||||
invitation_removed: "Your invitation was removed."
|
||||
new:
|
||||
header: "Send invitation"
|
||||
submit_button: "Send an invitation"
|
||||
edit:
|
||||
header: "Set your password"
|
||||
submit_button: "Let's Get Started"
|
||||
header: Set your password
|
||||
submit_button: Let's Get Started
|
||||
invitation_removed: Your invitation was removed.
|
||||
invitation_token_invalid: The invitation token provided is not valid!
|
||||
new:
|
||||
header: Send invitation
|
||||
submit_button: Send an invitation
|
||||
no_invitations_remaining: No invitations remaining
|
||||
send_instructions: An invitation email has been sent to %{email}.
|
||||
updated: Your password was set successfully. You are now signed in.
|
||||
updated_not_active: Your password was set successfully.
|
||||
mailer:
|
||||
invitation_instructions:
|
||||
subject: "Invitation instructions"
|
||||
hello: "Hello %{email}"
|
||||
someone_invited_you: "Someone has invited you to %{url}, you can accept it through the link below."
|
||||
accept: "Accept invitation"
|
||||
accept_until: "This invitation will be due in %{due_date}."
|
||||
ignore: "If you don't want to accept the invitation, please ignore this email. Your account won't be created until you access the link above and set your password."
|
||||
accept: Accept invitation
|
||||
accept_until: This invitation will be due in %{due_date}.
|
||||
hello: Hello %{email}
|
||||
ignore: If you don't want to accept the invitation, please ignore this email. Your account won't be created until you access the link above and set your password.
|
||||
someone_invited_you: Someone has invited you to %{url}, you can accept it through the link below.
|
||||
subject: Invitation instructions
|
||||
time:
|
||||
formats:
|
||||
devise:
|
||||
|
|
|
|||
35
config/locales/devise_invitable.fr.yml
Normal file
35
config/locales/devise_invitable.fr.yml
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
---
|
||||
fr:
|
||||
devise:
|
||||
failure:
|
||||
invited: Vous avez une invitation en attente, acceptez-la pour terminer la création de votre compte.
|
||||
invitations:
|
||||
edit:
|
||||
header: Confirmation
|
||||
new_password: Mot de passe
|
||||
new_password_confirmation: Confirmation du mot de passe
|
||||
submit_button: Confirmer
|
||||
invitation_removed: Votre invitation a été supprimée.
|
||||
invitation_token_invalid: Le jeton d'invitation fourni n'est pas valide!
|
||||
new:
|
||||
header: Nouvel utilisateur
|
||||
legend: Envoyer l’invitation
|
||||
submit_button: Envoyer
|
||||
no_invitations_remaining: Il n'y a plus d'invitations restantes
|
||||
send_instructions: Un e-mail d'invitation a été envoyé à %{email}.
|
||||
updated: Votre mot de passe a été défini avec succès. Vous êtes maintenant connecté.
|
||||
updated_not_active: Votre mot de passe a été défini avec succès.
|
||||
mailer:
|
||||
invitation_instructions:
|
||||
accept: Accepter l'invitation
|
||||
accept_until: Cette invitation sera valable jusqu'au %{due_date}.
|
||||
hello: Bonjour %{email}
|
||||
ignore: Si vous ne souhaitez pas accepter cette invitation, veuillez ignorer cet e-mail.<br />Votre compte ne sera pas créé tant que vous n'accéderez pas au lien ci-dessous et que vous ayez défini votre mot de passe.
|
||||
someone_invited_you: Vous avez été invité à rejoindre %{url}, vous pouvez accepter cette invitation via le lien ci-dessous.
|
||||
subject: Vous avez reçu une invitation
|
||||
time:
|
||||
formats:
|
||||
devise:
|
||||
mailer:
|
||||
invitation_instructions:
|
||||
accept_until_format: "%B %d, %Y %I:%M %p"
|
||||
|
|
@ -1,152 +1,140 @@
|
|||
---
|
||||
en:
|
||||
activerecord:
|
||||
attributes:
|
||||
doorkeeper/application:
|
||||
name: 'Name'
|
||||
redirect_uri: 'Redirect URI'
|
||||
name: Name
|
||||
redirect_uri: Redirect URI
|
||||
errors:
|
||||
models:
|
||||
doorkeeper/application:
|
||||
attributes:
|
||||
redirect_uri:
|
||||
fragment_present: 'cannot contain a fragment.'
|
||||
invalid_uri: 'must be a valid URI.'
|
||||
unspecified_scheme: 'must specify a scheme.'
|
||||
relative_uri: 'must be an absolute URI.'
|
||||
secured_uri: 'must be an HTTPS/SSL URI.'
|
||||
forbidden_uri: 'is forbidden by the server.'
|
||||
forbidden_uri: is forbidden by the server.
|
||||
fragment_present: cannot contain a fragment.
|
||||
invalid_uri: must be a valid URI.
|
||||
relative_uri: must be an absolute URI.
|
||||
secured_uri: must be an HTTPS/SSL URI.
|
||||
unspecified_scheme: must specify a scheme.
|
||||
scopes:
|
||||
not_match_configured: "doesn't match configured on the server."
|
||||
|
||||
not_match_configured: doesn't match configured on the server.
|
||||
doorkeeper:
|
||||
scopes:
|
||||
public: 'Access public profile data and published articles'
|
||||
read_articles: 'Access all articles including drafts'
|
||||
write_articles: 'Access to creating and updating articles'
|
||||
|
||||
applications:
|
||||
confirmations:
|
||||
destroy: 'Are you sure?'
|
||||
buttons:
|
||||
edit: 'Edit'
|
||||
destroy: 'Destroy'
|
||||
submit: 'Submit'
|
||||
cancel: 'Cancel'
|
||||
authorize: 'Authorize'
|
||||
form:
|
||||
error: 'Whoops! Check your form for possible errors'
|
||||
help:
|
||||
confidential: 'Application will be used where the client secret can be kept confidential. Native mobile apps and Single Page Apps are considered non-confidential.'
|
||||
redirect_uri: 'Use one line per URI'
|
||||
blank_redirect_uri: "Leave it blank if you configured your provider to use Client Credentials, Resource Owner Password Credentials or any other grant type that doesn't require redirect URI."
|
||||
scopes: 'Separate scopes with spaces. Leave blank to use the default scopes.'
|
||||
authorize: Authorize
|
||||
cancel: Cancel
|
||||
destroy: Destroy
|
||||
edit: Edit
|
||||
submit: Submit
|
||||
confirmations:
|
||||
destroy: Are you sure?
|
||||
edit:
|
||||
title: 'Edit application'
|
||||
title: Edit application
|
||||
form:
|
||||
error: Whoops! Check your form for possible errors
|
||||
help:
|
||||
blank_redirect_uri: Leave it blank if you configured your provider to use Client Credentials, Resource Owner Password Credentials or any other grant type that doesn't require redirect URI.
|
||||
confidential: Application will be used where the client secret can be kept confidential. Native mobile apps and Single Page Apps are considered non-confidential.
|
||||
redirect_uri: Use one line per URI
|
||||
scopes: Separate scopes with spaces. Leave blank to use the default scopes.
|
||||
index:
|
||||
title: 'Your applications'
|
||||
new: 'New Application'
|
||||
name: 'Name'
|
||||
callback_url: 'Callback URL'
|
||||
confidential: 'Confidential?'
|
||||
actions: 'Actions'
|
||||
actions: Actions
|
||||
callback_url: Callback URL
|
||||
confidential: Confidential?
|
||||
confidentiality:
|
||||
'yes': 'Yes'
|
||||
'no': 'No'
|
||||
'yes': 'Yes'
|
||||
name: Name
|
||||
new: New Application
|
||||
title: Your applications
|
||||
new:
|
||||
title: 'New Application'
|
||||
title: New Application
|
||||
show:
|
||||
actions: Actions
|
||||
application_id: UID
|
||||
callback_urls: Callback urls
|
||||
confidential: Confidential
|
||||
not_defined: Not defined
|
||||
scopes: Scopes
|
||||
secret: Secret
|
||||
secret_hashed: Secret hashed
|
||||
title: 'Application: %{name}'
|
||||
application_id: 'UID'
|
||||
secret: 'Secret'
|
||||
secret_hashed: 'Secret hashed'
|
||||
scopes: 'Scopes'
|
||||
confidential: 'Confidential'
|
||||
callback_urls: 'Callback urls'
|
||||
actions: 'Actions'
|
||||
not_defined: 'Not defined'
|
||||
|
||||
authorizations:
|
||||
buttons:
|
||||
authorize: 'Authorize'
|
||||
deny: 'Deny'
|
||||
authorize: Authorize
|
||||
deny: Deny
|
||||
error:
|
||||
title: 'An error has occurred'
|
||||
new:
|
||||
title: 'Authorization required'
|
||||
prompt: 'Authorize %{client_name} to use your account?'
|
||||
able_to: 'This application will be able to'
|
||||
show:
|
||||
title: 'Authorization code'
|
||||
title: An error has occurred
|
||||
form_post:
|
||||
title: 'Submit this form'
|
||||
title: Submit this form
|
||||
new:
|
||||
able_to: This application will be able to
|
||||
prompt: Authorize %{client_name} to use your account?
|
||||
title: Authorization required
|
||||
show:
|
||||
title: Authorization code
|
||||
authorized_applications:
|
||||
confirmations:
|
||||
revoke: 'Are you sure?'
|
||||
buttons:
|
||||
revoke: 'Revoke'
|
||||
revoke: Revoke
|
||||
confirmations:
|
||||
revoke: Are you sure?
|
||||
index:
|
||||
title: 'Your authorized applications'
|
||||
application: 'Application'
|
||||
created_at: 'Created At'
|
||||
date_format: '%Y-%m-%d %H:%M:%S'
|
||||
|
||||
pre_authorization:
|
||||
status: 'Pre-authorization'
|
||||
|
||||
application: Application
|
||||
created_at: Created At
|
||||
date_format: "%Y-%m-%d %H:%M:%S"
|
||||
title: Your authorized applications
|
||||
errors:
|
||||
messages:
|
||||
# Common error messages
|
||||
access_denied: The resource owner or authorization server denied the request.
|
||||
admin_authenticator_not_configured: Access to admin panel is forbidden due to Doorkeeper.configure.admin_authenticator being unconfigured.
|
||||
credential_flow_not_configured: Resource Owner Password Credentials flow failed due to Doorkeeper.configure.resource_owner_from_credentials being unconfigured.
|
||||
forbidden_token:
|
||||
missing_scope: Access to this resource requires scope "%{oauth_scopes}".
|
||||
invalid_client: Client authentication failed due to unknown client, no client authentication included, or unsupported authentication method.
|
||||
invalid_code_challenge_method: The code challenge method must be plain or S256.
|
||||
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.
|
||||
invalid_redirect_uri: The requested redirect uri is malformed or doesn't match client redirect URI.
|
||||
invalid_request:
|
||||
unknown: 'The request is missing a required parameter, includes an unsupported parameter value, or is otherwise malformed.'
|
||||
missing_param: 'Missing required parameter: %{value}.'
|
||||
request_not_authorized: 'Request need to be authorized. Required parameter for authorizing request is missing or invalid.'
|
||||
invalid_redirect_uri: "The requested redirect uri is malformed or doesn't match client redirect URI."
|
||||
unauthorized_client: 'The client is not authorized to perform this request using this method.'
|
||||
access_denied: 'The resource owner or authorization server denied the request.'
|
||||
invalid_scope: 'The requested scope is invalid, unknown, or malformed.'
|
||||
invalid_code_challenge_method: 'The code challenge method must be plain or S256.'
|
||||
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.'
|
||||
|
||||
# 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 unconfigured.'
|
||||
admin_authenticator_not_configured: 'Access to admin panel is forbidden due to Doorkeeper.configure.admin_authenticator being unconfigured.'
|
||||
|
||||
# Access grant errors
|
||||
unsupported_response_type: 'The authorization server does not support this response type.'
|
||||
unsupported_response_mode: 'The authorization server does not support this response mode.'
|
||||
|
||||
# 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.'
|
||||
|
||||
request_not_authorized: Request need to be authorized. Required parameter for authorizing request is missing or invalid.
|
||||
unknown: The request is missing a required parameter, includes an unsupported parameter value, or is otherwise malformed.
|
||||
invalid_scope: The requested scope is invalid, unknown, or malformed.
|
||||
invalid_token:
|
||||
revoked: "The access token was revoked"
|
||||
expired: "The access token expired"
|
||||
unknown: "The access token is invalid"
|
||||
expired: The access token expired
|
||||
revoked: The access token was revoked
|
||||
unknown: The access token is invalid
|
||||
resource_owner_authenticator_not_configured: Resource Owner find failed due to Doorkeeper.configure.resource_owner_authenticator being unconfigured.
|
||||
revoke:
|
||||
unauthorized: "You are not authorized to revoke this token"
|
||||
|
||||
unauthorized: You are not authorized to revoke this token
|
||||
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_mode: The authorization server does not support this response mode.
|
||||
unsupported_response_type: The authorization server does not support this response type.
|
||||
flash:
|
||||
applications:
|
||||
create:
|
||||
notice: 'Application created.'
|
||||
notice: Application created.
|
||||
destroy:
|
||||
notice: 'Application deleted.'
|
||||
notice: Application deleted.
|
||||
update:
|
||||
notice: 'Application updated.'
|
||||
notice: Application updated.
|
||||
authorized_applications:
|
||||
destroy:
|
||||
notice: 'Application revoked.'
|
||||
|
||||
notice: Application revoked.
|
||||
layouts:
|
||||
admin:
|
||||
title: 'Doorkeeper'
|
||||
nav:
|
||||
oauth2_provider: 'OAuth2 Provider'
|
||||
applications: 'Applications'
|
||||
home: 'Home'
|
||||
applications: Applications
|
||||
home: Home
|
||||
oauth2_provider: OAuth2 Provider
|
||||
title: Doorkeeper
|
||||
application:
|
||||
title: 'OAuth authorization required'
|
||||
title: OAuth authorization required
|
||||
pre_authorization:
|
||||
status: Pre-authorization
|
||||
scopes:
|
||||
public: Access public profile data and published articles
|
||||
read_articles: Access all articles including drafts
|
||||
write_articles: Access to creating and updating articles
|
||||
|
|
|
|||
|
|
@ -1,73 +1,49 @@
|
|||
# Files in the config/locales directory are used for internationalization
|
||||
# and are automatically loaded by Rails. If you want to use locales other
|
||||
# than English, add the necessary files in this directory.
|
||||
#
|
||||
# To use the locales, use `I18n.t`:
|
||||
#
|
||||
# I18n.t 'hello'
|
||||
#
|
||||
# In views, this is aliased to just `t`:
|
||||
#
|
||||
# <%= t('hello') %>
|
||||
#
|
||||
# To use a different locale, set it with `I18n.locale`:
|
||||
#
|
||||
# I18n.locale = :es
|
||||
#
|
||||
# This would use the information in config/locales/es.yml.
|
||||
#
|
||||
# The following keys must be escaped otherwise they will not be retrieved by
|
||||
# the default I18n backend:
|
||||
#
|
||||
# true, false, on, off, yes, no
|
||||
#
|
||||
# Instead, surround them with single quotes.
|
||||
#
|
||||
# en:
|
||||
# 'true': 'foo'
|
||||
#
|
||||
# To learn more, please read the Rails Internationalization guide
|
||||
# available at https://guides.rubyonrails.org/i18n.html.
|
||||
|
||||
---
|
||||
en:
|
||||
core:
|
||||
add_comment: "Add comment"
|
||||
all: "All"
|
||||
comment: "Comment"
|
||||
copy_link: "Copy link"
|
||||
create_account: "Create account"
|
||||
create_post: "Create Post"
|
||||
discussion: "Discussion"
|
||||
edit_profile: "Edit profile"
|
||||
feed: "Feed"
|
||||
follow: "Follow"
|
||||
follow_back: "Follow back"
|
||||
following: "Following"
|
||||
full: "Full"
|
||||
infinity: "Infinity"
|
||||
latest: "Latest"
|
||||
like: "Like"
|
||||
listings: "Listings"
|
||||
log_in: "Log in"
|
||||
month: "Month"
|
||||
more_from: "More from"
|
||||
my_tags: "My Tags"
|
||||
post: "Post"
|
||||
reaction: "Reaction"
|
||||
read_next: "Read next"
|
||||
reply: "Reply"
|
||||
report_abuse: "Report abuse"
|
||||
search: "Search"
|
||||
see_all: "See all"
|
||||
trending_on: "Trending on"
|
||||
view: "View"
|
||||
week: "Week"
|
||||
year: "Year"
|
||||
add_comment: Add comment
|
||||
all: All
|
||||
comment: Comment
|
||||
copy_link: Copy link
|
||||
create_account: Create account
|
||||
create_post: Create Post
|
||||
discussion: Discussion
|
||||
edit_profile: Edit profile
|
||||
feed: Feed
|
||||
follow: Follow
|
||||
follow_back: Follow back
|
||||
following: Following
|
||||
full: Full
|
||||
infinity: Infinity
|
||||
latest: Latest
|
||||
like: Like
|
||||
listings: Listings
|
||||
log_in: Log in
|
||||
month: Month
|
||||
more_from: More from
|
||||
my_tags: My Tags
|
||||
popular_tags: Popular Tags
|
||||
post: Post
|
||||
reaction: Reaction
|
||||
read_next: Read next
|
||||
reply: Reply
|
||||
report_abuse: Report abuse
|
||||
search: Search
|
||||
see_all: See all
|
||||
trending_on: Trending on
|
||||
view: View
|
||||
week: Week
|
||||
year: Year
|
||||
dashboard:
|
||||
following_users: Following users
|
||||
loading: loading...
|
||||
not_following_any_users: You don't follow any users...
|
||||
page_title: Dashboard
|
||||
errors:
|
||||
messages:
|
||||
accepted: must be accepted
|
||||
bad_uri: is an invalid url
|
||||
bad_protocol: must start with %{protocols}
|
||||
bad_uri: is an invalid url
|
||||
blank: can't be blank
|
||||
confirmation: doesn't match %{attribute}
|
||||
empty: can't be empty
|
||||
|
|
@ -99,12 +75,7 @@ en:
|
|||
other: is the wrong length (should be %{count} characters)
|
||||
podcasts:
|
||||
statuses:
|
||||
unreachable: Podcast's feed_url is not reachable
|
||||
ssl_failed: SSL certificate verify failed while fetching podcast's feed_url
|
||||
unparsable: Podcast's rss couldn't be parsed
|
||||
unplayable: This podcast may not be playable in the browser
|
||||
ssl_failed: SSL certificate verify failed while fetching podcast's feed_url
|
||||
dashboard:
|
||||
page_title: Dashboard
|
||||
following_users: Following users
|
||||
loading: loading...
|
||||
not_following_any_users: You don't follow any users...
|
||||
unreachable: Podcast's feed_url is not reachable
|
||||
|
|
|
|||
|
|
@ -34,8 +34,14 @@ fr:
|
|||
view: Vue
|
||||
week: Semaine
|
||||
year: Année
|
||||
dashboard:
|
||||
following_users: Utilisateurs suivis
|
||||
loading: Chargement en cours...
|
||||
not_following_any_users: Vous ne suivez aucun utilisateur...
|
||||
page_title: Tableau de bord
|
||||
date:
|
||||
abbr_month_names:
|
||||
-
|
||||
- Janv
|
||||
- Fevr
|
||||
- Mars
|
||||
|
|
@ -51,34 +57,42 @@ fr:
|
|||
errors:
|
||||
messages:
|
||||
accepted: doit être accepté
|
||||
bad_protocol: doit commencer par
|
||||
already_confirmed: a déjà été confirmé, veuillez essayer de vous connecter
|
||||
bad_protocol: doit commencer par %{protocols}
|
||||
bad_uri: est une URL invalide
|
||||
blank: ne peut pas être vide
|
||||
confirmation: ne correspond pas à
|
||||
confirmation: ne correspond pas à %{attribute}
|
||||
confirmation_period_expired: doit être confirmé dans %{period}, veuillez en demander un nouveau
|
||||
empty: ne peut pas être vide
|
||||
equal_to: doit être égal à
|
||||
equal_to: doit être égal à %{count}
|
||||
even: doit être pair
|
||||
exclusion: est réservé
|
||||
greater_than: doit être supérieur à
|
||||
greater_than_or_equal_to: doit être supérieur ou égal à
|
||||
expired: a expiré, veuillez en demander un nouveau
|
||||
greater_than: doit être supérieur à %{count}
|
||||
greater_than_or_equal_to: doit être supérieur ou égal à %{count}
|
||||
inclusion: n'est pas inclus dans la liste
|
||||
invalid: est invalide
|
||||
less_than: doit être inférieur à
|
||||
less_than_or_equal_to: doit être inférieur ou égal à
|
||||
model_invalid: 'Échec de la validation :'
|
||||
less_than: doit être inférieur à %{count}
|
||||
less_than_or_equal_to: doit être inférieur ou égal à %{count}
|
||||
model_invalid: 'Échec de la validation: %{errors}'
|
||||
not_a_number: n'est pas un nombre
|
||||
not_an_integer: Doit être un entier
|
||||
not_found: pas trouvé
|
||||
not_locked: n'était pas verrouillé
|
||||
not_saved:
|
||||
one: 1 erreur a interdit l'enregistrement de cette %{resource}
|
||||
other: "%{count} erreurs ont interdit l'enregistrement de cette %{resource}:"
|
||||
odd: doit être étrange
|
||||
other_than: doit être différent de
|
||||
other_than: doit être différent de %{count}
|
||||
present: doit être vide
|
||||
required: doit exister
|
||||
taken: a déjà été pris
|
||||
too_long:
|
||||
one: est trop long (le maximum est de 1 caractère)
|
||||
other: est trop long (le maximum est de caractères)
|
||||
other: est trop long (le maximum est de %{count} caractères)
|
||||
too_short:
|
||||
one: est trop court (au moins 1 caractère)
|
||||
other: est trop court (le minimum est de caractères)
|
||||
other: est trop court (le minimum est de %{count} caractères)
|
||||
wrong_length:
|
||||
one: est la mauvaise longueur (devrait être 1 caractère)
|
||||
other: est la mauvaise longueur (devrait être %{count} caractères)
|
||||
|
|
@ -88,8 +102,3 @@ fr:
|
|||
unparsable: Le rss du podcast n'a pas pu être analysé
|
||||
unplayable: Ce podcast peut ne pas être lisible dans le navigateur
|
||||
unreachable: Le feed_url du podcast n'est pas accessible
|
||||
dashboard:
|
||||
page_title: Tableau de bord
|
||||
following_users: Utilisateurs suivis
|
||||
loading: Chargement en cours...
|
||||
not_following_any_users: Vous ne suivez aucun utilisateur...
|
||||
|
|
|
|||
9
config/locales/kaminari.fr.yml
Normal file
9
config/locales/kaminari.fr.yml
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
fr:
|
||||
views:
|
||||
pagination:
|
||||
first: "« Premier"
|
||||
last: Dernier »
|
||||
next: Suivant ›
|
||||
previous: "‹ Précédent"
|
||||
truncate: "…"
|
||||
34
spec/i18n_spec.rb
Normal file
34
spec/i18n_spec.rb
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
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 }
|
||||
let(:inconsistent_interpolations) { i18n.inconsistent_interpolations }
|
||||
|
||||
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
|
||||
|
||||
xit "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
|
||||
|
||||
# NOTE: [@rhymes] disabling normalization check for now as it fails on CI but
|
||||
# not locally, needs investigation
|
||||
xit "files are normalized" do
|
||||
non_normalized = i18n.non_normalized_paths
|
||||
error_message = "The following files need to be normalized:\n" \
|
||||
"#{non_normalized.map { |path| " #{path}" }.join("\n")}\n" \
|
||||
"Please run `i18n-tasks normalize' to fix"
|
||||
expect(non_normalized).to be_empty, error_message
|
||||
end
|
||||
|
||||
it "does not have inconsistent interpolations" do
|
||||
error_message = "#{inconsistent_interpolations.leaves.count} i18n keys have inconsistent interpolations.\n" \
|
||||
"Run `i18n-tasks check-consistent-interpolations' to show them"
|
||||
expect(inconsistent_interpolations).to be_empty, error_message
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Reference in a new issue