From fcb57e7f5766332b89445abefd8635a80a31446f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Pereira=20de=20Lucena?= Date: Wed, 23 Nov 2022 11:30:22 +0100 Subject: [PATCH 1/6] Add i18n-tasks gem --- Gemfile | 2 +- Gemfile.lock | 1 + spec/i18n_spec.rb | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 spec/i18n_spec.rb diff --git a/Gemfile b/Gemfile index 156afd9..7e63f67 100644 --- a/Gemfile +++ b/Gemfile @@ -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" diff --git a/Gemfile.lock b/Gemfile.lock index 54f8ec1..0a4136c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -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 diff --git a/spec/i18n_spec.rb b/spec/i18n_spec.rb new file mode 100644 index 0000000..ba3a486 --- /dev/null +++ b/spec/i18n_spec.rb @@ -0,0 +1,34 @@ +# 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 } + 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 + + 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 + + it '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 From 8ce4698ebeb6a06ea05b1b289bc4d16ad27e4e57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Pereira=20de=20Lucena?= Date: Wed, 23 Nov 2022 11:38:23 +0100 Subject: [PATCH 2/6] Normalize i18n locales --- config/locales/ca.yml | 2 +- config/locales/en.yml | 159 ++++++++++++++++++++++++------------------ config/locales/es.yml | 2 +- 3 files changed, 95 insertions(+), 68 deletions(-) diff --git a/config/locales/ca.yml b/config/locales/ca.yml index a9811af..bd7bb1e 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -9,4 +9,4 @@ ca: participate: Participa welcome: Benvinguda sms: - text: "El teu codi per verificar-te a Metadecidim és: %{code}" + text: 'El teu codi per verificar-te a Metadecidim és: %{code}' diff --git a/config/locales/en.yml b/config/locales/en.yml index b901c96..b8d6269 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -9,109 +9,136 @@ en: participate: Participate start_here: Start here sms: - text: "Your code to be verified at Metadecidim is: %{code}" + text: 'Your code to be verified at Metadecidim is: %{code}' layouts: decidim: data_consent: details: items: + CONSENT: + description: Used for functionality. Lasts for 2 years, Google uses + it to store a user’s state regarding their cookies choices. Read more + at How + Google uses cookies + service: YouTube embeds + PREF: + description: Used for functionality. YouTube uses this cookie to store + information such as your preferred page configuration and playback + preferences like explicit autoplay choices, shuffle content, and player + size. Read more at How + Google uses cookies + service: YouTube embeds + VISITOR_INFO1_LIVE: + description: Used for functionality, analytics, advertising, and personalization. + Read more at How + Google uses cookies + service: YouTube embeds + YSC: + description: Used for security. Lasts for the duration of a user's browsing + session. Used to ensure that requests within a browsing session are + made by the user, and not by other sites. This cookie prevent malicious + sites from acting on behalf of a user without that user’s knowledge. + Read more at How + Google uses cookies + service: YouTube embeds _session_id: - description: Allows websites to remember user within a website when they move between web pages. + description: Allows websites to remember user within a website when + they move between web pages. service: This website + amp_: + description: Used for Amplitude Analytics + service: Jitsi Meet + amplitude_unsent: + description: Used for Amplitude Analytics + service: Jitsi Meet + amplitude_unsent_identify: + description: Used for Amplitude Analytics + service: Jitsi Meet + callStatsUserName: + description: Used to save the user session on Jitsi. + service: Jitsi Meet decidim-consent: - description: Stores information about the cookies allowed by the user on this website. + description: Stores information about the cookies allowed by the user + on this website. service: This website - remember_user_token: - description: Allows to keep your session open if you click on "Remember me" when logging in. - service: This website - "emojiPicker-recent": + emojiPicker-recent: description: Stores your most recent selected emojis service: This website - "graphiql:docExplorerOpen": - description: Saves wheter you have the documentation panel open when using the GraphQL API - service: This website - "graphiql:editorFlex": - description: Saves your tab preference when using the GraphQL API - service: This website - "graphiql:historyPaneOpen": - description: Saves wheter you have the history panel open when using the GraphQL API - service: This website - "graphiql:queries": - description: Saves the history of your queries when using the GraphQL API - service: This website - "graphiql:query": - description: Saves your last query when using the GraphQL API - service: This website - "graphiql:tabState": - description: Saves your tab configuration when using the GraphQL API - service: This website - YSC: - description: Used for security. Lasts for the duration of a user's browsing session. Used to ensure that requests within a browsing session are made by the user, and not by other sites. This cookie prevent malicious sites from acting on behalf of a user without that user’s knowledge. Read more at How Google uses cookies - service: YouTube embeds - VISITOR_INFO1_LIVE: - description: Used for functionality, analytics, advertising, and personalization. Read more at How Google uses cookies - service: YouTube embeds - PREF: - description: Used for functionality. YouTube uses this cookie to store information such as your preferred page configuration and playback preferences like explicit autoplay choices, shuffle content, and player size. Read more at How Google uses cookies - service: YouTube embeds - CONSENT: - description: Used for functionality. Lasts for 2 years, Google uses it to store a user’s state regarding their cookies choices. Read more at How Google uses cookies - service: YouTube embeds - language: - description: Save your language preference + endpointID: + description: Used for communication purposes with the Jitsi server. service: Jitsi Meet - "features/base/known-domains": + features/base/known-domains: description: Save a list of known domains service: Jitsi Meet - "features/base/settings": + features/base/settings: description: Used your save your Jtisi settings. service: Jitsi Meet - "features/calendar-sync": + features/calendar-sync: description: Used for the calendar sync feature. service: Jitsi Meet - "features/dropbox": + features/dropbox: description: Used for the dropbox integration feature. service: Jitsi Meet - "features/prejoin": + features/prejoin: description: Used for the prejoin screen feature. service: Jitsi Meet - "features/recent-list": + features/recent-list: description: Used for the recent list feature. service: Jitsi Meet - "features/video-quality-persistent-storage": + features/video-quality-persistent-storage: description: Used for the video quality persistent storage feature. service: Jitsi Meet - "features/virtual-background": + features/virtual-background: description: Used for the video background feature. service: Jitsi Meet - amp_: - description: Used for Amplitude Analytics - service: Jitsi Meet - amplitude_unsent: - description: Used for Amplitude Analytics - service: Jitsi Meet - amplitude_unsent_identify: - description: Used for Amplitude Analytics - service: Jitsi Meet - callStatsUserName: - description: Used to save the user session on Jitsi. - service: Jitsi Meet - endpointID: - description: Used for communication purposes with the Jitsi server. + graphiql:docExplorerOpen: + description: Saves wheter you have the documentation panel open when + using the GraphQL API + service: This website + graphiql:editorFlex: + description: Saves your tab preference when using the GraphQL API + service: This website + graphiql:historyPaneOpen: + description: Saves wheter you have the history panel open when using + the GraphQL API + service: This website + graphiql:queries: + description: Saves the history of your queries when using the GraphQL + API + service: This website + graphiql:query: + description: Saves your last query when using the GraphQL API + service: This website + graphiql:tabState: + description: Saves your tab configuration when using the GraphQL API + service: This website + language: + description: Save your language preference service: Jitsi Meet + remember_user_token: + description: Allows to keep your session open if you click on "Remember + me" when logging in. + service: This website types: localstorage: LocalStorage modal: analytics: - description: Analytics cookies are cookies that track how users navigate and interact with a website. The information collected is used to help the website owner improve the website. + description: Analytics cookies are cookies that track how users navigate + and interact with a website. The information collected is used to help + the website owner improve the website. title: Analytics and statistics - description: We use cookies to ensure the basic functionalities of the website and to enhance your online experience. You can choose for each category to opt-in/out whenever you want. + description: We use cookies to ensure the basic functionalities of the website + and to enhance your online experience. You can choose for each category + to opt-in/out whenever you want. essential: - description: These cookies are essential for the proper functioning of my website. Without these cookies, the website would not work properly. + description: These cookies are essential for the proper functioning of + my website. Without these cookies, the website would not work properly. title: Essential marketing: - description: These cookies collect information about how you use the website, which pages you visited and which links you clicked on. + description: These cookies collect information about how you use the website, + which pages you visited and which links you clicked on. title: Marketing preferences: - description: These cookies allow the website to remember the choices you have made in the past + description: These cookies allow the website to remember the choices you + have made in the past title: Preferences diff --git a/config/locales/es.yml b/config/locales/es.yml index 26a7fbf..792fa8f 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -9,4 +9,4 @@ es: participate: Participa welcome: Bienvenida sms: - text: "Tu código para verificarte en Metadecidim es: %{code}" + text: 'Tu código para verificarte en Metadecidim es: %{code}' From 9de1f96961a084d9e0ec68cc1b4bec6ac45b5a4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Pereira=20de=20Lucena?= Date: Wed, 23 Nov 2022 13:26:55 +0100 Subject: [PATCH 3/6] Add missing translations --- config/locales/ca.yml | 144 +++++++++++++++++++++++++++++++++++++++++- config/locales/en.yml | 4 ++ config/locales/es.yml | 144 +++++++++++++++++++++++++++++++++++++++++- 3 files changed, 290 insertions(+), 2 deletions(-) diff --git a/config/locales/ca.yml b/config/locales/ca.yml index bd7bb1e..61835de 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -7,6 +7,148 @@ 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}' + layouts: + decidim: + data_consent: + details: + items: + CONSENT: + description: S'utilitza per a la funcionalitat. Té una durada de 2 anys, + Google la utilitza per emmagatzemar l'estat d'un usuari pel que fa + a les seves opcions de galetes. Llegeix més a Com + Google utilitza galetes + 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 Com + Google utilitza galetes + 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 Com + Google utilitza galetes + 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 llocs malliosos d'actuar en nom + d'un usuari sense el coneixement d'aquest. Més informació a Com + Google utilitza galetes + 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 + 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 + jo" 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 millorar + el lloc web. + 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 de + el meu 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 diff --git a/config/locales/en.yml b/config/locales/en.yml index b8d6269..1561535 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -142,3 +142,7 @@ en: description: These cookies allow the website to remember the choices you have made in the past title: Preferences + header: + main_menu: Main menu + user_menu: + title: Title diff --git a/config/locales/es.yml b/config/locales/es.yml index 792fa8f..3d4f1a6 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -7,6 +7,148 @@ es: meetings: Encuentros news: Noticias participate: Participa - welcome: Bienvenida + start_here: Comienza aquí sms: text: 'Tu código para verificarte en Metadecidim es: %{code}' + layouts: + decidim: + data_consent: + details: + items: + CONSENT: + description: Se utiliza para la funcionalidad. Tiene una duración de + 2 años, Google la utiliza para almacenar el estado de un usuario con + respecto a sus opciones de cookies. Obtenga más información en Cómo Google + utiliza cookies + service: Incrustaciones de YouTube + PREF: + description: Se utiliza para la funcionalidad. YouTube utiliza esta + cookie para almacenar información como su configuración de página + preferida y preferencias de reproducción, como opciones de reproducción + automática, contenido aleatorio y medidas del reproductor. Obtenga + más información en Cómo + Google utiliza cookies + service: Incrustaciones de YouTube + VISITOR_INFO1_LIVE: + description: Se utiliza para la funcionalidad, el análisis, la publicidad + y la personalización. Obtenga más información en Cómo + Google utiliza cookies + service: Incrustaciones de YouTube + YSC: + description: Se utiliza para la seguridad. Tiene una duración de la + sesión de navegación de un usuario. Se utiliza para garantizar que + las solicitudes dentro de una sesión de navegación sean realizadas + por el usuario, y no por otros sitios. Esta cookie previene a los + sitios maliciosos actuar en nombre de un usuario sin el conocimiento + de ese usuario. Obtenga más información en Cómo + Google utiliza cookies + service: Incrustaciones de YouTube + _session_id: + description: Permite que los sitios web recuerden al usuario dentro + de un sitio web cuando se mueven entre páginas web. + service: Este sitio web + amp_: + description: Utilizado para Amplitude Analytics + service: Jitsi Meet + amplitude_unsent: + description: Utilizado para Amplitude Analytics + service: Jitsi Meet + amplitude_unsent_identify: + description: Utilizado para Amplitude Analytics + service: Jitsi Meet + callStatsUserName: + description: Se usa para guardar la sesión del usuario en Jitsi. + service: Jitsi Meet + decidim-consent: + description: Almacena información sobre las cookies permitidas por el + usuario en este sitio web. + service: Este sitio web + emojiPicker-recent: + description: Almacena tus emojis seleccionados más recientes + service: Este sitio web + endpointID: + description: Se utiliza para fines de comunicación con el servidor Jitsi. + service: Jitsi Meet + features/base/known-domains: + description: Guarda una lista de dominios conocidos + service: Jitsi Meet + features/base/settings: + description: Se utiliza para guardar la configuración de Jtisi. + service: Jitsi Meet + features/calendar-sync: + description: Se utiliza para la función de sincronización del calendario. + service: Jitsi Meet + features/dropbox: + description: Se utiliza para la función de integración de Dropbox. + service: Jitsi Meet + features/prejoin: + description: Se utiliza para la función de pantalla previa a la unión. + service: Jitsi Meet + features/recent-list: + description: Se utiliza para la función de lista reciente. + service: Jitsi Meet + features/video-quality-persistent-storage: + description: Se utiliza para la función de almacenamiento persistente + de calidad de video. + service: Jitsi Meet + features/virtual-background: + description: Se utiliza para la función de fondo de video. + service: Jitsi Meet + graphiql:docExplorerOpen: + description: Guarda si tiene el panel de documentación abierto cuando + se utilitza la API de GraphQL + service: Este sitio web + graphiql:editorFlex: + description: Guarda su preferencia de pestaña cuando usa la API de GraphQL + service: Este sitio web + graphiql:historyPaneOpen: + description: Guarda si tiene el panel de historial abierto al usar la + API de GraphQL + service: Este sitio web + graphiql:queries: + description: Guarda el historial de tus consultas cuando usas la API + de GraphQL + service: Este sitio web + graphiql:query: + description: Guarda tu última consulta cuando usas la API de GraphQL + service: Este sitio web + graphiql:tabState: + description: Guarda la configuración de pestañas cuando usas la API + de GraphQL + service: Este sitio web + language: + description: Guarda su preferencia de idioma + service: Jitsi Meet + remember_user_token: + description: Permite mantener tu sesión abierta si haces clic en "Recordarme" + al iniciar sesión. + service: Este sitio web + types: + localstorage: Almacenamiento local + modal: + analytics: + description: Las cookies de análisis son cookies que rastrean cómo navegan + los usuarios e interactuar con un sitio web. La información recopilada + se utiliza para ayudar el propietario del sitio web mejorar el sitio + web. + title: Análisis y estadísticas + description: Utilizamos cookies para asegurar las funcionalidades básicas + del sitio web y para mejorar su experiencia en línea. Puedes elegir + para cada categoría. para darte de alta o de baja cuando quieras. + essential: + description: Estas cookies son esenciales para el correcto funcionamiento + de Mi sitio web. Sin estas cookies, el sitio web no funcionaría correctamente. + title: Esencial + marketing: + description: Estas cookies recopilan información sobre cómo utiliza + el sitio web, qué páginas visitó y en qué enlaces hizo clic. + title: Mercadeo + preferences: + description: Estas cookies permiten que el sitio web recuerde las opciones + que usted han hecho en el pasado + title: Preferencias + header: + main_menu: Menú principal + user_menu: + title: Título From 52e1122d1600c6c7ca01c6e86ded3997d80a61cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Pereira=20de=20Lucena?= Date: Wed, 23 Nov 2022 13:31:45 +0100 Subject: [PATCH 4/6] Add i18n-tasks configuration file --- config/i18n-tasks.yml | 144 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 config/i18n-tasks.yml diff --git a/config/i18n-tasks.yml b/config/i18n-tasks.yml new file mode 100644 index 0000000..cd78d19 --- /dev/null +++ b/config/i18n-tasks.yml @@ -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}']] %> From 2b75afb29a31941b22fa66358a09dd6a8d43460f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Pereira=20de=20Lucena?= Date: Wed, 23 Nov 2022 13:32:24 +0100 Subject: [PATCH 5/6] Normalize i18n files with 80 characters of line width --- config/locales/ca.yml | 76 ++++++++++++++++++++---------------- config/locales/en.yml | 63 +++++++++++++++++------------- config/locales/es.yml | 89 ++++++++++++++++++++++++------------------- 3 files changed, 129 insertions(+), 99 deletions(-) diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 61835de..e64d5f6 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -16,34 +16,39 @@ ca: details: items: CONSENT: - description: S'utilitza per a la funcionalitat. Té una durada de 2 anys, - Google la utilitza per emmagatzemar l'estat d'un usuari pel que fa - a les seves opcions de galetes. Llegeix més a Com + description: >- + S'utilitza per a la funcionalitat. Té una durada de 2 anys, Google + la utilitza per emmagatzemar l'estat d'un usuari pel que fa a les + seves opcions de galetes. Llegeix més a Com Google utilitza galetes 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, + 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 Com Google utilitza galetes 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 Com + description: >- + S'utilitza per a la funcionalitat, l'anàlisi, la publicitat i la personalització. + Més informació a Com Google utilitza galetes 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 llocs malliosos d'actuar en nom - d'un usuari sense el coneixement d'aquest. Més informació a Com + 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 llocs malliosos d'actuar en nom d'un usuari sense + el coneixement d'aquest. Més informació a Com Google utilitza galetes 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. + 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 @@ -58,8 +63,9 @@ ca: 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. + 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 @@ -120,33 +126,37 @@ ca: 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 - jo" en iniciar la sessió. + description: >- + Permet mantenir la sessió oberta si feu clic a "Recorda jo" 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 millorar - el lloc web. + 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 millorar el lloc web. 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. + 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 de - el meu lloc web. Sense aquestes galetes, el lloc web no funcionaria - correctament. + description: >- + Aquestes galetes són essencials per al bon funcionament de el meu 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. + 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 + 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 diff --git a/config/locales/en.yml b/config/locales/en.yml index 1561535..418bcce 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -16,34 +16,38 @@ en: details: items: CONSENT: - description: Used for functionality. Lasts for 2 years, Google uses - it to store a user’s state regarding their cookies choices. Read more - at How + description: >- + Used for functionality. Lasts for 2 years, Google uses it to store + a user’s state regarding their cookies choices. Read more at How Google uses cookies service: YouTube embeds PREF: - description: Used for functionality. YouTube uses this cookie to store - information such as your preferred page configuration and playback - preferences like explicit autoplay choices, shuffle content, and player - size. Read more at How + description: >- + Used for functionality. YouTube uses this cookie to store information + such as your preferred page configuration and playback preferences + like explicit autoplay choices, shuffle content, and player size. + Read more at How Google uses cookies service: YouTube embeds VISITOR_INFO1_LIVE: - description: Used for functionality, analytics, advertising, and personalization. + description: >- + Used for functionality, analytics, advertising, and personalization. Read more at How Google uses cookies service: YouTube embeds YSC: - description: Used for security. Lasts for the duration of a user's browsing - session. Used to ensure that requests within a browsing session are - made by the user, and not by other sites. This cookie prevent malicious - sites from acting on behalf of a user without that user’s knowledge. - Read more at How + description: >- + Used for security. Lasts for the duration of a user's browsing session. + Used to ensure that requests within a browsing session are made by + the user, and not by other sites. This cookie prevent malicious sites + from acting on behalf of a user without that user’s knowledge. Read + more at How Google uses cookies service: YouTube embeds _session_id: - description: Allows websites to remember user within a website when - they move between web pages. + description: >- + Allows websites to remember user within a website when they move between + web pages. service: This website amp_: description: Used for Amplitude Analytics @@ -123,24 +127,29 @@ en: localstorage: LocalStorage modal: analytics: - description: Analytics cookies are cookies that track how users navigate - and interact with a website. The information collected is used to help - the website owner improve the website. + description: >- + Analytics cookies are cookies that track how users navigate and interact + with a website. The information collected is used to help the website + owner improve the website. title: Analytics and statistics - description: We use cookies to ensure the basic functionalities of the website - and to enhance your online experience. You can choose for each category - to opt-in/out whenever you want. + description: >- + We use cookies to ensure the basic functionalities of the website and + to enhance your online experience. You can choose for each category to + opt-in/out whenever you want. essential: - description: These cookies are essential for the proper functioning of - my website. Without these cookies, the website would not work properly. + description: >- + These cookies are essential for the proper functioning of my website. + Without these cookies, the website would not work properly. title: Essential marketing: - description: These cookies collect information about how you use the website, - which pages you visited and which links you clicked on. + description: >- + These cookies collect information about how you use the website, which + pages you visited and which links you clicked on. title: Marketing preferences: - description: These cookies allow the website to remember the choices you - have made in the past + description: >- + These cookies allow the website to remember the choices you have made + in the past title: Preferences header: main_menu: Main menu diff --git a/config/locales/es.yml b/config/locales/es.yml index 3d4f1a6..eaabc6d 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -16,37 +16,41 @@ es: details: items: CONSENT: - description: Se utiliza para la funcionalidad. Tiene una duración de - 2 años, Google la utiliza para almacenar el estado de un usuario con - respecto a sus opciones de cookies. Obtenga más información en Cómo Google - utiliza cookies + description: >- + Se utiliza para la funcionalidad. Tiene una duración de 2 años, Google + la utiliza para almacenar el estado de un usuario con respecto a sus + opciones de cookies. Obtenga más información en Cómo + Google utiliza cookies service: Incrustaciones de YouTube PREF: - description: Se utiliza para la funcionalidad. YouTube utiliza esta - cookie para almacenar información como su configuración de página - preferida y preferencias de reproducción, como opciones de reproducción - automática, contenido aleatorio y medidas del reproductor. Obtenga - más información en Cómo + description: >- + Se utiliza para la funcionalidad. YouTube utiliza esta cookie para + almacenar información como su configuración de página preferida y + preferencias de reproducción, como opciones de reproducción automática, + contenido aleatorio y medidas del reproductor. Obtenga más información + en Cómo Google utiliza cookies service: Incrustaciones de YouTube VISITOR_INFO1_LIVE: - description: Se utiliza para la funcionalidad, el análisis, la publicidad - y la personalización. Obtenga más información en Cómo + description: >- + Se utiliza para la funcionalidad, el análisis, la publicidad y la + personalización. Obtenga más información en Cómo Google utiliza cookies service: Incrustaciones de YouTube YSC: - description: Se utiliza para la seguridad. Tiene una duración de la - sesión de navegación de un usuario. Se utiliza para garantizar que - las solicitudes dentro de una sesión de navegación sean realizadas - por el usuario, y no por otros sitios. Esta cookie previene a los - sitios maliciosos actuar en nombre de un usuario sin el conocimiento - de ese usuario. Obtenga más información en Cómo + description: >- + Se utiliza para la seguridad. Tiene una duración de la sesión de navegación + de un usuario. Se utiliza para garantizar que las solicitudes dentro + de una sesión de navegación sean realizadas por el usuario, y no por + otros sitios. Esta cookie previene a los sitios maliciosos actuar + en nombre de un usuario sin el conocimiento de ese usuario. Obtenga + más información en Cómo Google utiliza cookies service: Incrustaciones de YouTube _session_id: - description: Permite que los sitios web recuerden al usuario dentro - de un sitio web cuando se mueven entre páginas web. + description: >- + Permite que los sitios web recuerden al usuario dentro de un sitio + web cuando se mueven entre páginas web. service: Este sitio web amp_: description: Utilizado para Amplitude Analytics @@ -61,8 +65,9 @@ es: description: Se usa para guardar la sesión del usuario en Jitsi. service: Jitsi Meet decidim-consent: - description: Almacena información sobre las cookies permitidas por el - usuario en este sitio web. + description: >- + Almacena información sobre las cookies permitidas por el usuario en + este sitio web. service: Este sitio web emojiPicker-recent: description: Almacena tus emojis seleccionados más recientes @@ -96,8 +101,9 @@ es: description: Se utiliza para la función de fondo de video. service: Jitsi Meet graphiql:docExplorerOpen: - description: Guarda si tiene el panel de documentación abierto cuando - se utilitza la API de GraphQL + description: >- + Guarda si tiene el panel de documentación abierto cuando se utilitza + la API de GraphQL service: Este sitio web graphiql:editorFlex: description: Guarda su preferencia de pestaña cuando usa la API de GraphQL @@ -121,32 +127,37 @@ es: description: Guarda su preferencia de idioma service: Jitsi Meet remember_user_token: - description: Permite mantener tu sesión abierta si haces clic en "Recordarme" - al iniciar sesión. + description: >- + Permite mantener tu sesión abierta si haces clic en "Recordarme" al + iniciar sesión. service: Este sitio web types: localstorage: Almacenamiento local modal: analytics: - description: Las cookies de análisis son cookies que rastrean cómo navegan - los usuarios e interactuar con un sitio web. La información recopilada - se utiliza para ayudar el propietario del sitio web mejorar el sitio - web. + description: >- + Las cookies de análisis son cookies que rastrean cómo navegan los usuarios + e interactuar con un sitio web. La información recopilada se utiliza + para ayudar el propietario del sitio web mejorar el sitio web. title: Análisis y estadísticas - description: Utilizamos cookies para asegurar las funcionalidades básicas - del sitio web y para mejorar su experiencia en línea. Puedes elegir - para cada categoría. para darte de alta o de baja cuando quieras. + description: >- + Utilizamos cookies para asegurar las funcionalidades básicas del sitio + web y para mejorar su experiencia en línea. Puedes elegir para cada categoría. + para darte de alta o de baja cuando quieras. essential: - description: Estas cookies son esenciales para el correcto funcionamiento - de Mi sitio web. Sin estas cookies, el sitio web no funcionaría correctamente. + description: >- + Estas cookies son esenciales para el correcto funcionamiento de Mi sitio + web. Sin estas cookies, el sitio web no funcionaría correctamente. title: Esencial marketing: - description: Estas cookies recopilan información sobre cómo utiliza - el sitio web, qué páginas visitó y en qué enlaces hizo clic. + description: >- + Estas cookies recopilan información sobre cómo utiliza el sitio web, + qué páginas visitó y en qué enlaces hizo clic. title: Mercadeo preferences: - description: Estas cookies permiten que el sitio web recuerde las opciones - que usted han hecho en el pasado + description: >- + Estas cookies permiten que el sitio web recuerde las opciones que usted + han hecho en el pasado title: Preferencias header: main_menu: Menú principal From ba8717f4dc6c318a00e26132dd6ed6d9b6f392bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Pereira=20de=20Lucena?= Date: Thu, 24 Nov 2022 15:47:18 +0100 Subject: [PATCH 6/6] Apply suggestions from code review Co-authored-by: NilHomedes <71442847+NilHomedes@users.noreply.github.com> --- config/locales/ca.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/config/locales/ca.yml b/config/locales/ca.yml index e64d5f6..29e6e3a 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -41,7 +41,7 @@ ca: 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 llocs malliosos d'actuar en nom d'un usuari sense + Aquesta galeta evita que llocs maliciosos actuïn en nom d'un usuari sense el coneixement d'aquest. Més informació a Com Google utilitza galetes service: Incrustracions de YouTube @@ -127,7 +127,7 @@ ca: service: Jitsi Meet remember_user_token: description: >- - Permet mantenir la sessió oberta si feu clic a "Recorda jo" en iniciar + Permet mantenir la sessió oberta si feu clic a "Recorda'm" en iniciar la sessió. service: Aquest lloc web types: @@ -137,7 +137,7 @@ ca: 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 millorar el lloc web. + 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 @@ -145,7 +145,7 @@ ca: per activar/desactivar-la quan vulguis. essential: description: >- - Aquestes galetes són essencials per al bon funcionament de el meu lloc + Aquestes galetes són essencials per al bon funcionament del lloc web. Sense aquestes galetes, el lloc web no funcionaria correctament. title: Imprescindible marketing: