Skip to content

Commit

Permalink
Feat: Add Spanish (es) translation
Browse files Browse the repository at this point in the history
  • Loading branch information
OndraM committed Feb 4, 2025
1 parent 97073c0 commit 84e5205
Show file tree
Hide file tree
Showing 7 changed files with 237 additions and 1 deletion.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand Down
4 changes: 4 additions & 0 deletions examples/languages.html
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,10 @@ <h2 class="mt-md-3 mb-3">Select language</h2>
<input type="radio" class="form-check-input" id="lang-select-sl" value="sl" autocomplete="off" name="lang-select" onclick="toggleLanguage();">
<label class="form-check-label" for="lang-select-sl">Slovenian</label>
</div>
<div class="form-check">
<input type="radio" class="form-check-input" id="lang-select-es" value="es" autocomplete="off" name="lang-select" onclick="toggleLanguage();">
<label class="form-check-label" for="lang-select-es">Spanish</label>
</div>
<div class="form-check">
<input type="radio" class="form-check-input" id="lang-select-uk" value="uk" autocomplete="off" name="lang-select" onclick="toggleLanguage();">
<label class="form-check-label" for="lang-select-uk">Ukrainian</label>
Expand Down
143 changes: 143 additions & 0 deletions src/languages/__tests__/__snapshots__/langConfig.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -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": "
<p>Si entendemos mejor lo que le interesa, le ofreceremos contenidos más personalizados.</p>
<p>
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 <strong><a href="" data-cc="show-preferencesModal">configuración de cookies</a></strong>.
</p>",
"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 <a href="https://www.almacareer.com/gdpr" target="_blank">Política de cookies</a>.",
},
{
"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": "
<p>Si entendemos mejor lo que le interesa, le ofreceremos contenidos más personalizados.</p>
<p>
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 <strong><a href="" data-cc="show-preferencesModal">configuración de cookies</a></strong>.
</p>",
"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 <a href="https://www.almacareer.com/gdpr" target="_blank">Política de cookies</a>.",
},
{
"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": {
Expand Down
2 changes: 2 additions & 0 deletions src/languages/__tests__/langConfig.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand All @@ -20,6 +21,7 @@ describe.each([
['cs', configCs],
['de', configDe],
['en', configEn],
['es', configEs],
['et', configEt],
['fr', configFr],
['hr', configHr],
Expand Down
2 changes: 1 addition & 1 deletion src/languages/__tests__/loader.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
});
});
});
84 changes: 84 additions & 0 deletions src/languages/es.ts
Original file line number Diff line number Diff line change
@@ -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,
)}
<p>
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 <strong><a href="" data-cc="show-preferencesModal">configuración de cookies</a></strong>.
</p>`,
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 <a href="https://www.almacareer.com/gdpr" target="_blank">Política de cookies</a>.`
}`,
},
...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;
2 changes: 2 additions & 0 deletions src/languages/loader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand All @@ -22,6 +23,7 @@ const languagesMap = {
cs: configCs,
de: configDe,
en: configEn,
es: configEs,
et: configEt,
fr: configFr,
hr: configHr,
Expand Down

0 comments on commit 84e5205

Please sign in to comment.