diff --git a/README.md b/README.md index 92a965ca..ac9100d6 100644 --- a/README.md +++ b/README.md @@ -296,6 +296,7 @@ Translation of the user interface is provided in the following languages: - Russian (`ru`) - Slovak (`sk`) - Slovenian (`sl`) +- Spanish (`es`) - Ukrainian (`uk`) [👀 See example of each language version][examples-languages] diff --git a/examples/languages.html b/examples/languages.html index 02829940..b1a41b04 100644 --- a/examples/languages.html +++ b/examples/languages.html @@ -159,6 +159,10 @@

Select language

+
+ + +
diff --git a/src/languages/__tests__/__snapshots__/langConfig.test.ts.snap b/src/languages/__tests__/__snapshots__/langConfig.test.ts.snap index a3d84bd4..85b8dea2 100644 --- a/src/languages/__tests__/__snapshots__/langConfig.test.ts.snap +++ b/src/languages/__tests__/__snapshots__/langConfig.test.ts.snap @@ -576,6 +576,149 @@ exports[`config en should return localization object with cookie table 1`] = ` } `; +exports[`config es should return localization object for acceptNecessary button mode 1`] = ` +{ + "consentModal": { + "acceptAllBtn": "Aceptar todo", + "acceptNecessaryBtn": "Aceptar las necesarias", + "description": " +

Si entendemos mejor lo que le interesa, le ofreceremos contenidos más personalizados.

+

+ Al pulsar el botón «Aceptar todo», usted presta su consentimiento a + test1, test2 y test3 + para el uso de las cookies con fines de personalización, análisis y publicidad comportamental. + Más información sobre las cookies y cómo configurarlas se puede encontrar en la configuración de cookies. +

", + "title": "Las cookies mejorarán nuestras páginas web aún más", + }, + "preferencesModal": { + "acceptAllBtn": "Aceptar todo", + "acceptNecessaryBtn": "Aceptar las necesarias", + "savePreferencesBtn": "Guardar configuración", + "sections": [ + { + "description": "Para aprovechar nuestras páginas al máximo, es recomendable permitir todos los tipos de cookies. + Más información sobre qué son las cookies y cómo trabajamos con ellas se puede encontrar en la Política de cookies.", + }, + { + "description": "Son aquellas que son necesarias para el funcionamiento correcto de nuestras páginas web, por lo que no es posible desactivarlas. Sin ellas no se podrá mostrar ningún contenido en nuestras páginas o no funcionará el inicio de sesión, entre otras cosas.", + "linkedCategory": "necessary", + "title": "Cookies técnicas", + }, + { + "description": "Son aquellas que nos permiten medir lo efectivo que es nuestra publicidad y las ofertas comportamentales de nuestros servicios. Las cookies de publicidad comportamental nos permiten informarle en la Red sobre las novedades que puedan ser de su interés.", + "linkedCategory": "ad", + "title": "Cookies de publicidad comportamental", + }, + { + "description": "Son aquellas que usamos para seguir cuántas personas visitan nuestras páginas web y cómo las utilizan. Lo que nos permite ir mejorando las páginas así como otros servicios.", + "linkedCategory": "analytics", + "title": "Cookies de análisis", + }, + { + "description": "Son aquellas que hacen nuestras páginas aún más eficientes y mejoran su funcionalidad. Por ejemplo, nos permiten usar el chat para que podamos responder a sus preguntas de manera rápida y sencilla.", + "linkedCategory": "functionality", + "title": "Cookies de funcionalidad", + }, + { + "description": "Nuestros servicios funcionan mejor cuando podemos adaptarlos a las necesidades de cada usuario. Al permitir las cookies de personalización, aumentará la posibilidad de encontrar exactamente el contenido que está buscando.", + "linkedCategory": "personalization", + "title": "Cookies de personalización", + }, + ], + "title": "Personalizar la configuración de cookies", + }, +} +`; + +exports[`config es should return localization object with cookie table 1`] = ` +{ + "consentModal": { + "acceptAllBtn": "Aceptar todo", + "acceptNecessaryBtn": "Aceptar las necesarias", + "description": " +

Si entendemos mejor lo que le interesa, le ofreceremos contenidos más personalizados.

+

+ Al pulsar el botón «Aceptar todo», usted presta su consentimiento a + Alma Career y las empresas del grupo empresarial + para el uso de las cookies con fines de personalización, análisis y publicidad comportamental. + Más información sobre las cookies y cómo configurarlas se puede encontrar en la configuración de cookies. +

", + "title": "Las cookies mejorarán nuestras páginas web aún más", + }, + "preferencesModal": { + "acceptAllBtn": "Aceptar todo", + "acceptNecessaryBtn": "Aceptar las necesarias", + "savePreferencesBtn": "Guardar configuración", + "sections": [ + { + "description": "Para aprovechar nuestras páginas al máximo, es recomendable permitir todos los tipos de cookies. + Más información sobre qué son las cookies y cómo trabajamos con ellas se puede encontrar en la Política de cookies.", + }, + { + "cookieTable": { + "body": [ + { + "description": "Google Analytics description ...", + "expiration": "1 year", + "name": "_ga*", + }, + { + "description": "Foo description", + "expiration": "end of session", + "name": "foo", + }, + ], + "headers": { + "description": "Descripción", + "expiration": "Validez", + "name": "Título", + }, + }, + "description": "Son aquellas que son necesarias para el funcionamiento correcto de nuestras páginas web, por lo que no es posible desactivarlas. Sin ellas no se podrá mostrar ningún contenido en nuestras páginas o no funcionará el inicio de sesión, entre otras cosas.", + "linkedCategory": "necessary", + "title": "Cookies técnicas", + }, + { + "description": "Son aquellas que nos permiten medir lo efectivo que es nuestra publicidad y las ofertas comportamentales de nuestros servicios. Las cookies de publicidad comportamental nos permiten informarle en la Red sobre las novedades que puedan ser de su interés.", + "linkedCategory": "ad", + "title": "Cookies de publicidad comportamental", + }, + { + "description": "Son aquellas que usamos para seguir cuántas personas visitan nuestras páginas web y cómo las utilizan. Lo que nos permite ir mejorando las páginas así como otros servicios.", + "linkedCategory": "analytics", + "title": "Cookies de análisis", + }, + { + "description": "Son aquellas que hacen nuestras páginas aún más eficientes y mejoran su funcionalidad. Por ejemplo, nos permiten usar el chat para que podamos responder a sus preguntas de manera rápida y sencilla.", + "linkedCategory": "functionality", + "title": "Cookies de funcionalidad", + }, + { + "cookieTable": { + "body": [ + { + "description": "Session log description ...", + "expiration": "1 year", + "name": "sessionLog_id", + }, + ], + "headers": { + "description": "Descripción", + "expiration": "Validez", + "name": "Título", + }, + }, + "description": "Nuestros servicios funcionan mejor cuando podemos adaptarlos a las necesidades de cada usuario. Al permitir las cookies de personalización, aumentará la posibilidad de encontrar exactamente el contenido que está buscando.", + "linkedCategory": "personalization", + "title": "Cookies de personalización", + }, + ], + "title": "Personalizar la configuración de cookies", + }, +} +`; + exports[`config et should return localization object for acceptNecessary button mode 1`] = ` { "consentModal": { diff --git a/src/languages/__tests__/langConfig.test.ts b/src/languages/__tests__/langConfig.test.ts index ea81173b..c45a61e7 100644 --- a/src/languages/__tests__/langConfig.test.ts +++ b/src/languages/__tests__/langConfig.test.ts @@ -2,6 +2,7 @@ import { config as configBs } from '../bs'; import { config as configCs } from '../cs'; import { config as configDe } from '../de'; import { config as configEn } from '../en'; +import { config as configEs } from '../es'; import { config as configEt } from '../et'; import { config as configFr } from '../fr'; import { config as configHr } from '../hr'; @@ -20,6 +21,7 @@ describe.each([ ['cs', configCs], ['de', configDe], ['en', configEn], + ['es', configEs], ['et', configEt], ['fr', configFr], ['hr', configHr], diff --git a/src/languages/__tests__/loader.test.ts b/src/languages/__tests__/loader.test.ts index 0615d836..7ab12f39 100644 --- a/src/languages/__tests__/loader.test.ts +++ b/src/languages/__tests__/loader.test.ts @@ -4,7 +4,7 @@ describe('loader', () => { describe('assembleTranslationsConfig', () => { it('should assemble configs for all translations', () => { const config = assembleTranslationsConfig(['Alma Career'], {}, {}); - expect(Object.keys(config)).toHaveLength(16); + expect(Object.keys(config)).toHaveLength(17); }); }); }); diff --git a/src/languages/es.ts b/src/languages/es.ts new file mode 100644 index 00000000..2309d3c4 --- /dev/null +++ b/src/languages/es.ts @@ -0,0 +1,84 @@ +import { addSeparators, assembleCookieTableSections, assembleDescriptionIntro, legalizeAlmaCareer } from '../utils'; +import { CookieTableCategories, ExtraMessages } from '../types'; +import { Translation } from 'vanilla-cookieconsent'; + +const extra = { + and: 'y', + legalName: 'Alma Career y las empresas del grupo empresarial', +}; +/** + * @param {ExtraMessages} [extraMessages] - Object with extra messages + * @param {CookieTableCategories} [cookieTable] - Cookie table items defined by category + * @returns {Translation} Object with translated messages + */ +export const config = (extraMessages: ExtraMessages, cookieTable: CookieTableCategories): Translation => { + const lang = { ...extra, ...extraMessages }; + const cookieTableHeaders = { name: 'Título', description: 'Descripción', expiration: 'Validez' }; + + return { + consentModal: { + title: lang.consentTitle ?? 'Las cookies mejorarán nuestras páginas web aún más', + description: ` + ${assembleDescriptionIntro( + 'Si entendemos mejor lo que le interesa, le ofreceremos contenidos más personalizados.', + lang.descriptionIntro, + )} +

+ Al pulsar el botón «Aceptar todo», usted presta su consentimiento a + ${addSeparators(legalizeAlmaCareer(lang.companyNames, lang.legalName), extra.and)} + para el uso de las cookies con fines de personalización, análisis y publicidad comportamental. + Más información sobre las cookies y cómo configurarlas se puede encontrar en la configuración de cookies. +

`, + acceptAllBtn: 'Aceptar todo', + acceptNecessaryBtn: 'Aceptar las necesarias', + }, + preferencesModal: { + title: 'Personalizar la configuración de cookies', + acceptAllBtn: 'Aceptar todo', + acceptNecessaryBtn: 'Aceptar las necesarias', + savePreferencesBtn: 'Guardar configuración', + sections: [ + { + description: `Para aprovechar nuestras páginas al máximo, es recomendable permitir todos los tipos de cookies. + ${ + lang.preferencesModalMoreInfo ?? + `Más información sobre qué son las cookies y cómo trabajamos con ellas se puede encontrar en la Política de cookies.` + }`, + }, + ...assembleCookieTableSections( + cookieTableHeaders, + { + necessary: { + title: 'Cookies técnicas', + description: + 'Son aquellas que son necesarias para el funcionamiento correcto de nuestras páginas web, por lo que no es posible desactivarlas. Sin ellas no se podrá mostrar ningún contenido en nuestras páginas o no funcionará el inicio de sesión, entre otras cosas.', + }, + analytics: { + title: 'Cookies de análisis', + description: + 'Son aquellas que usamos para seguir cuántas personas visitan nuestras páginas web y cómo las utilizan. Lo que nos permite ir mejorando las páginas así como otros servicios.', + }, + functionality: { + title: 'Cookies de funcionalidad', + description: + 'Son aquellas que hacen nuestras páginas aún más eficientes y mejoran su funcionalidad. Por ejemplo, nos permiten usar el chat para que podamos responder a sus preguntas de manera rápida y sencilla.', + }, + ad: { + title: 'Cookies de publicidad comportamental', + description: + 'Son aquellas que nos permiten medir lo efectivo que es nuestra publicidad y las ofertas comportamentales de nuestros servicios. Las cookies de publicidad comportamental nos permiten informarle en la Red sobre las novedades que puedan ser de su interés.', + }, + personalization: { + title: 'Cookies de personalización', + description: + 'Nuestros servicios funcionan mejor cuando podemos adaptarlos a las necesidades de cada usuario. Al permitir las cookies de personalización, aumentará la posibilidad de encontrar exactamente el contenido que está buscando.', + }, + }, + cookieTable, + ), + ], + }, + }; +}; + +export default config; diff --git a/src/languages/loader.ts b/src/languages/loader.ts index e1bcf514..528fa506 100644 --- a/src/languages/loader.ts +++ b/src/languages/loader.ts @@ -2,6 +2,7 @@ import { config as configBs } from './bs'; import { config as configCs } from './cs'; import { config as configDe } from './de'; import { config as configEn } from './en'; +import { config as configEs } from './es'; import { config as configEt } from './et'; import { config as configFr } from './fr'; import { config as configHr } from './hr'; @@ -22,6 +23,7 @@ const languagesMap = { cs: configCs, de: configDe, en: configEn, + es: configEs, et: configEt, fr: configFr, hr: configHr,