Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add i18n-tasks gem #114

Draft
wants to merge 6 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ gem "omniauth-decidim", "0.2.1"
gem "faker"
gem "puma", ">= 4.3"
gem "geocoder", "~> 1.8.0"

gem "redis", "~> 4.7.0"
gem "i18n-tasks", "~> 0.9.37"

# Report GC usage data to StatsD with 'barnes' gem so that Heroku can monitor
gem "barnes"
Expand Down
1 change: 1 addition & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -874,6 +874,7 @@ DEPENDENCIES
faker
fog-aws
geocoder (~> 1.8.0)
i18n-tasks (~> 0.9.37)
letter_opener_web
listen (~> 3.7.1)
lograge
Expand Down
144 changes: 144 additions & 0 deletions config/i18n-tasks.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
# i18n-tasks finds and manages missing and unused translations: https://github.com/glebm/i18n-tasks

# The "main" locale.
base_locale: en
## All available locales are inferred from the data by default. Alternatively, specify them explicitly:
# locales: [es, fr]
## Reporting locale, default: en. Available: en, ru.
# internal_locale: en

# Read and write translations.
data:
## Translations are read from the file system. Supported format: YAML, JSON.
## Provide a custom adapter:
# adapter: I18n::Tasks::Data::FileSystem

# Locale files or `File.find` patterns where translations are read from:
read:
## Default:
# - config/locales/%{locale}.yml
## More files:
# - 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
write:
## For example, write devise and simple form keys to their respective files:
# - ['{devise, simple_form}.*', 'config/locales/\1.%{locale}.yml']
## Catch-all default:
# - config/locales/%{locale}.yml

# External locale data (e.g. gems).
# This data is not considered unused and is never written to.
external:
## Example (replace %#= with %=):
# - "<%#= %x[bundle info vagrant --path].chomp %>/templates/locales/%{locale}.yml"

## Specify the router (see Readme for details). Valid values: conservative_router, pattern_router, or a custom class.
# router: conservative_router

yaml:
write:
# do not wrap lines at 80 characters
line_width: 80

## Pretty-print JSON:
# json:
# write:
# indent: ' '
# space: ' '
# object_nl: "\n"
# array_nl: "\n"

# Find translate calls
search:
## Paths or `File.find` patterns to search in:
# paths:
# - app/

## Root directories for relative keys resolution.
# relative_roots:
# - app/controllers
# - app/helpers
# - app/mailers
# - app/presenters
# - app/views

## Directories where method names which should not be part of a relative key resolution.
# By default, if a relative translation is used inside a method, the name of the method will be considered part of the resolved key.
# Directories listed here will not consider the name of the method part of the resolved key
#
# relative_exclude_method_name_paths:
# -

## Files or `File.fnmatch` patterns to exclude from search. Some files are always excluded regardless of this setting:
## %w(*.jpg *.png *.gif *.svg *.ico *.eot *.otf *.ttf *.woff *.woff2 *.pdf *.css *.sass *.scss *.less *.yml *.json *.map)
exclude:
- app/assets/images
- app/assets/fonts
- app/assets/videos

## Alternatively, the only files or `File.fnmatch patterns` to search in `paths`:
## If specified, this settings takes priority over `exclude`, but `exclude` still applies.
# only: ["*.rb", "*.html.slim"]

## If `strict` is `false`, guess usages such as t("categories.#{category}.title"). The default is `true`.
# strict: true

## Multiple scanners can be used. Their results are merged.
## The options specified above are passed down to each scanner. Per-scanner options can be specified as well.
## See this example of a custom scanner: https://github.com/glebm/i18n-tasks/wiki/A-custom-scanner-example

## Translation Services
# translation:
# # Google Translate
# # Get an API key and set billing info at https://code.google.com/apis/console to use Google Translate
# google_translate_api_key: "AbC-dEf5"
# # DeepL Pro Translate
# # Get an API key and subscription at https://www.deepl.com/pro to use DeepL Pro
# deepl_api_key: "48E92789-57A3-466A-9959-1A1A1A1A1A1A"
# # deepl_host: "https://api.deepl.com"
# # deepl_version: "v2"

## Do not consider these keys missing:
# ignore_missing:
# - 'errors.messages.{accepted,blank,invalid,too_short,too_long}'
# - '{devise,simple_form}.*'

## Consider these keys used:
ignore_unused:
- 'layouts.decidim.data_consent.*'
- 'decidim.menu.*'
# - 'activerecord.attributes.*'
# - '{devise,kaminari,will_paginate}.*'
# - 'simple_form.{yes,no}'
# - 'simple_form.{placeholders,hints,labels}.*'
# - 'simple_form.{error_notification,required}.:'

## Exclude these keys from the `i18n-tasks eq-base' report:
# ignore_eq_base:
# all:
# - common.ok
# fr,es:
# - common.brand

## Exclude these keys from the `i18n-tasks check-consistent-interpolations` report:
# ignore_inconsistent_interpolations:
# - 'activerecord.attributes.*'

## Ignore these keys completely:
# ignore:
# - kaminari.*

## Sometimes, it isn't possible for i18n-tasks to match the key correctly,
## e.g. in case of a relative key defined in a helper method.
## In these cases you can use the built-in PatternMapper to map patterns to keys, e.g.:
#
# <%# I18n::Tasks.add_scanner 'I18n::Tasks::Scanners::PatternMapper',
# only: %w(*.html.haml *.html.slim),
# patterns: [['= title\b', '.page_title']] %>
#
# The PatternMapper can also match key literals via a special %{key} interpolation, e.g.:
#
# <%# I18n::Tasks.add_scanner 'I18n::Tasks::Scanners::PatternMapper',
# patterns: [['\bSpree\.t[( ]\s*%{key}', 'spree.%{key}']] %>
156 changes: 154 additions & 2 deletions config/locales/ca.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,158 @@ ca:
meetings: Trobades
news: Notícies
participate: Participa
welcome: Benvinguda
start_here: Comença aquí
sms:
text: "El teu codi per verificar-te a Metadecidim és: %{code}"
text: 'El teu codi per verificar-te a Metadecidim és: %{code}'
layouts:
decidim:
data_consent:
details:
items:
CONSENT:
description: >-
S'utilitza per a la funcionalitat. Té una durada de 2 anys, Google
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tinc dubtes amb l'expressió "S'utilitza per a la funcionalitat". Em sembla poc comprensible per a la gent que no domina, potser millor "S'utilitza per al correcte funcionament de nom_aplicació"

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(I answer you in English as this implies changes in the other languages).

I agree with what you're saying, its too technical-speak aka Klingon. This comes from the English original text ("Used for functionality"). Mind that in this case we're talking about "YouTube embeds", so the description should refer to this service.

How about this?

  • "Used for the correct functioning of the service. "
  • "Utilitzat pel corrrecte funcionament del servei"
  • "Utilitzado para el correcto funcionamiento del servicio"

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"Used for the correct functioning of the service. "
"Utilitzat pel corrrecte funcionament del servei"
"Utilitzado para el correcto funcionamiento del servicio"

Sounds good to me

la utilitza per emmagatzemar l'estat d'un usuari pel que fa a les
seves opcions de galetes. Llegeix més a <a href="https://policies.google.com/technologies/cookies">Com
Google utilitza galetes</a>
service: Incrustracions de YouTube
PREF:
description: >-
S'utilitza per a la funcionalitat. YouTube utilitza aquesta galeta
per emmagatzemar informació com ara la configuració de la pàgina i
preferències de reproducció com les opcions de reproducció automàtica,
contingut aleatori i mida del reproductor. Més informació a <a href="https://policies.google.com/technologies/cookies">Com
Google utilitza galetes</a>
service: Incrustracions de YouTube
VISITOR_INFO1_LIVE:
description: >-
S'utilitza per a la funcionalitat, l'anàlisi, la publicitat i la personalització.
Més informació a <a href="https://policies.google.com/technologies/cookies">Com
Google utilitza galetes</a>
service: Incrustracions de YouTube
YSC:
description: >-
S'utilitza per a la seguretat. Té una durada de la sessió de navegació
d'un usuari. S'utilitza per garantir que les sol·licituds dins d'una
sessió de navegació siguin fetes per l'usuari, i no per altres llocs.
Aquesta galeta evita que llocs maliciosos actuïn en nom d'un usuari sense
el coneixement d'aquest. Més informació a <a href="https://policies.google.com/technologies/cookies">Com
Google utilitza galetes</a>
service: Incrustracions de YouTube
_session_id:
description: >-
Permet als llocs web recordar l'usuari d'un lloc web quan es mouen
entre pàgines web.
service: Aquest lloc web
amp_:
description: S'utilitza per a Amplitude Analytics
service: Jitsi Meet
amplitude_unsent:
description: S'utilitza per a Amplitude Analytics
service: Jitsi Meet
amplitude_unsent_identify:
description: S'utilitza per a Amplitude Analytics
service: Jitsi Meet
callStatsUserName:
description: S'utilitza per desar la sessió d'usuari a Jitsi
service: Jitsi Meet
decidim-consent:
description: >-
Emmagatzema informació sobre les galetes permeses per l'usuari en
aquest lloc web.
service: Aquest lloc web
emojiPicker-recent:
description: Emmagatzema els teus emojis seleccionats més recents
service: Aquest lloc web
endpointID:
description: S'utilitza per a finalitats de comunicació amb el servidor
Jitsi
service: Jitsi Meet
features/base/known-domains:
description: Desa una llista de dominis coneguts
service: Jitsi Meet
features/base/settings:
description: S'utilitza per guardar les teves configuracions de Jitsi
service: Jitsi Meet
features/calendar-sync:
description: S'utilitza per a la funció de sincronització del calendari
service: Jitsi Meet
features/dropbox:
description: S'utilitza per a la funció d'integració de Dropbox
service: Jitsi Meet
features/prejoin:
description: S'utilitza per a la funció de pantalla prèvia a la connexió
service: Jitsi Meet
features/recent-list:
description: S'utilitza per a la funció de llista recent
service: Jitsi Meet
features/video-quality-persistent-storage:
description: S'utilitza per a la funció d'emmagatzematge persistent
de qualitat de vídeo.
service: Jitsi Meet
features/virtual-background:
description: S'utilitza per a la funció de fons de vídeo
service: Jitsi Meet
graphiql:docExplorerOpen:
description: Desa si teniu el tauler de documentació obert quan utilitzant
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
description: Desa si teniu el tauler de documentació obert quan utilitzant
description: Es desa si teniu el tauler de documentació obert quan s'utilitza

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should use the same formula everywhere ("S'utilitza per ..."). This is something that we aren't doing in English neither: sometimes we use "used for" other times we say "saves". I'll change all of these sentences to be consistent in all the locales.

l'API GraphQL
service: Aquest lloc web
graphiql:editorFlex:
description: Desa la vostra preferència de pestanya quan feu servir
l'API GraphQL
service: Aquest lloc web
graphiql:historyPaneOpen:
description: Desa si teniu el tauler d'historial obert quan feu servir
l'API GraphQL
service: Aquest lloc web
graphiql:queries:
description: Desa l'historial de les vostres consultes quan feu servir
el l'API GraphQL
service: Aquest lloc web
graphiql:query:
description: Desa la darrera consulta quan utilitzeu l'API GraphQL
service: Aquest lloc web
graphiql:tabState:
description: Desa la configuració de la pestanya quan utilitzeu l'API
GraphQL
service: Aquest lloc web
language:
description: Desa la teva preferència d'idioma
service: Jitsi Meet
remember_user_token:
description: >-
Permet mantenir la sessió oberta si feu clic a "Recorda'm" en iniciar
la sessió.
service: Aquest lloc web
types:
localstorage: LocalStorage
modal:
analytics:
description: >-
Les galetes d'anàlisi són galetes que fan un seguiment de com els usuaris
naveguen i interactuen amb un lloc web. La informació recollida s'utilitza
per ajudar el propietari del lloc web a millorar-lo.
title: Analítiques i estadístiques
description: >-
Fem servir galetes per garantir les funcionalitats bàsiques del lloc web
i per millorar la teva experiència en línia. Podeu triar per a cada categoria
per activar/desactivar-la quan vulguis.
essential:
description: >-
Aquestes galetes són essencials per al bon funcionament del lloc
web. Sense aquestes galetes, el lloc web no funcionaria correctament.
title: Imprescindible
marketing:
description: >-
Aquestes galetes recullen informació sobre com utilitza el lloc web,
quines pàgines heu visitat i quins enllaços heu fet clic.
title: Màrqueting
preferences:
description: >-
Aquestes galetes permeten que el lloc web recordi les eleccions que
has fet en el passat
title: Preferències
header:
main_menu: Menú principal
user_menu:
title: Títol
Loading