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/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}']] %>
diff --git a/config/locales/ca.yml b/config/locales/ca.yml
index a9811af..29e6e3a 100644
--- a/config/locales/ca.yml
+++ b/config/locales/ca.yml
@@ -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
+ 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 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
+ _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'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
diff --git a/config/locales/en.yml b/config/locales/en.yml
index b901c96..418bcce 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -9,109 +9,149 @@ 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
+ header:
+ main_menu: Main menu
+ user_menu:
+ title: Title
diff --git a/config/locales/es.yml b/config/locales/es.yml
index 26a7fbf..eaabc6d 100644
--- a/config/locales/es.yml
+++ b/config/locales/es.yml
@@ -7,6 +7,159 @@ es:
meetings: Encuentros
news: Noticias
participate: Participa
- welcome: Bienvenida
+ start_here: Comienza aquí
sms:
- text: "Tu código para verificarte en Metadecidim es: %{code}"
+ 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
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