Skip to content

Commit

Permalink
Feat: Add Serbian (sr) translation
Browse files Browse the repository at this point in the history
  • Loading branch information
OndraM committed Feb 4, 2025
1 parent 7deb4bf commit 3cd805c
Show file tree
Hide file tree
Showing 7 changed files with 249 additions and 1 deletion.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -295,6 +295,7 @@ Translation of the user interface is provided in the following languages:
- Polish (`pl`)
- Portuguese (`pt`)
- Russian (`ru`)
- Serbian (latin) (`sr`)
- Slovak (`sk`)
- Slovenian (`sl`)
- Spanish (`es`)
Expand Down
4 changes: 4 additions & 0 deletions examples/languages.html
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,10 @@ <h2 class="mt-md-3 mb-3">Select language</h2>
<input type="radio" class="form-check-input" id="lang-select-ru" value="ru" autocomplete="off" name="lang-select" onclick="toggleLanguage();">
<label class="form-check-label" for="lang-select-ru">Russian</label>
</div>
<div class="form-check">
<input type="radio" class="form-check-input" id="lang-select-sr" value="sr" autocomplete="off" name="lang-select" onclick="toggleLanguage();">
<label class="form-check-label" for="lang-select-sr">Serbian</label>
</div>
<div class="form-check">
<input type="radio" class="form-check-input" id="lang-select-sk" value="sk" autocomplete="off" name="lang-select" onclick="toggleLanguage();">
<label class="form-check-label" for="lang-select-sk">Slovak</label>
Expand Down
145 changes: 145 additions & 0 deletions src/languages/__tests__/__snapshots__/langConfig.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -2449,6 +2449,151 @@ exports[`config sl should return localization object with cookie table 1`] = `
}
`;

exports[`config sr should return localization object for acceptNecessary button mode 1`] = `
{
"consentModal": {
"acceptAllBtn": "Prihvati sve",
"acceptNecessaryBtn": "Prihvati neophodne",
"description": "
<p>Ako budemo bolje razumeli ono što vas zanima, prikazivaćemo relevantniji sadržaj.</p>
<p>
Klikom na dugme „Prihvati sve” dajete
kompanijama
test1, test2 i test3
svoju saglasnost za korišćenje kolačića za personalizaciju, analitiku i ciljani marketing.
U prilagođenim podešavanjima možete da <strong><a href="" data-cc="show-preferencesModal">prilagodite korišćenje kolačića</a></strong>.
</p>",
"title": "Kolačići dodatno unapređuju naš sajt",
},
"preferencesModal": {
"acceptAllBtn": "Prihvati sve",
"acceptNecessaryBtn": "Prihvati neophodne",
"savePreferencesBtn": "Sačuvaj podešavanja",
"sections": [
{
"description": "Ako želite da maksimalno iskoristite naš veb-sajt, najbolje bi bilo da dozvolite sve vrste kolačića.
Više informacija o tome šta su kolačići i kako ih obrađujemo možete da pronađete u našoj <a href="https://www.almacareer.com/gdpr" target="_blank">politici kolačića</a>.",
},
{
"description": "Ovi kolačići su neophodni za pravilno funkcionisanje našeg veb-sajta i zato se ne mogu onemogućiti. Bez njih ne bi bilo moguće npr. prikazati bilo kakav sadržaj ili se prijaviti na naš veb-sajt.",
"linkedCategory": "necessary",
"title": "Tehnički neophodni kolačići",
},
{
"description": "Ovi kolačići nam pomažu da izmerimo efikasnost oglašavanja i ciljanih ponuda usluga. Marketing kolačići nam omogućavaju da vam pružimo vesti koje bi vas mogle zanimati na internetu.",
"linkedCategory": "ad",
"title": "Marketing kolačići",
},
{
"description": "Oni nam pomažu da pratimo koliko ljudi posećuje naš veb-sajt i kako ga koriste. Ove informacije nam omogućavaju da kontinuirano poboljšavamo veb-sajt i druge usluge.",
"linkedCategory": "analytics",
"title": "Analitički kolačići",
},
{
"description": "Naš veb-sajt je još efikasniji i bolje funkcioniše zahvaljujući ovim kolačićima. Na primer, omogućavaju nam da koristimo uslugu četa i brzo i lako odgovorimo na vaša pitanja.",
"linkedCategory": "functionality",
"title": "Funkcionalni kolačići",
},
{
"description": "Naše usluge rade bolje ako ih možemo prilagoditi konkretnim korisnicima. Ako omogućite kolačiće za personalizaciju, povećavate šanse da pronađete sadržaj koji želite.",
"linkedCategory": "personalization",
"title": "Kolačići za personalizaciju",
},
],
"title": "Prilagođena podešavanja kolačića",
},
}
`;

exports[`config sr should return localization object with cookie table 1`] = `
{
"consentModal": {
"acceptAllBtn": "Prihvati sve",
"acceptNecessaryBtn": "Prihvati neophodne",
"description": "
<p>Ako budemo bolje razumeli ono što vas zanima, prikazivaćemo relevantniji sadržaj.</p>
<p>
Klikom na dugme „Prihvati sve” dajete
kompaniji
Alma Career i ostale kompanije iz njene poslovne grupe
svoju saglasnost za korišćenje kolačića za personalizaciju, analitiku i ciljani marketing.
U prilagođenim podešavanjima možete da <strong><a href="" data-cc="show-preferencesModal">prilagodite korišćenje kolačića</a></strong>.
</p>",
"title": "Kolačići dodatno unapređuju naš sajt",
},
"preferencesModal": {
"acceptAllBtn": "Prihvati sve",
"acceptNecessaryBtn": "Prihvati neophodne",
"savePreferencesBtn": "Sačuvaj podešavanja",
"sections": [
{
"description": "Ako želite da maksimalno iskoristite naš veb-sajt, najbolje bi bilo da dozvolite sve vrste kolačića.
Više informacija o tome šta su kolačići i kako ih obrađujemo možete da pronađete u našoj <a href="https://www.almacareer.com/gdpr" target="_blank">politici kolačića</a>.",
},
{
"cookieTable": {
"body": [
{
"description": "Google Analytics description ...",
"expiration": "1 year",
"name": "_ga*",
},
{
"description": "Foo description",
"expiration": "end of session",
"name": "foo",
},
],
"headers": {
"description": "Opis",
"expiration": "Vreme isteka",
"name": "Ime",
},
},
"description": "Ovi kolačići su neophodni za pravilno funkcionisanje našeg veb-sajta i zato se ne mogu onemogućiti. Bez njih ne bi bilo moguće npr. prikazati bilo kakav sadržaj ili se prijaviti na naš veb-sajt.",
"linkedCategory": "necessary",
"title": "Tehnički neophodni kolačići",
},
{
"description": "Ovi kolačići nam pomažu da izmerimo efikasnost oglašavanja i ciljanih ponuda usluga. Marketing kolačići nam omogućavaju da vam pružimo vesti koje bi vas mogle zanimati na internetu.",
"linkedCategory": "ad",
"title": "Marketing kolačići",
},
{
"description": "Oni nam pomažu da pratimo koliko ljudi posećuje naš veb-sajt i kako ga koriste. Ove informacije nam omogućavaju da kontinuirano poboljšavamo veb-sajt i druge usluge.",
"linkedCategory": "analytics",
"title": "Analitički kolačići",
},
{
"description": "Naš veb-sajt je još efikasniji i bolje funkcioniše zahvaljujući ovim kolačićima. Na primer, omogućavaju nam da koristimo uslugu četa i brzo i lako odgovorimo na vaša pitanja.",
"linkedCategory": "functionality",
"title": "Funkcionalni kolačići",
},
{
"cookieTable": {
"body": [
{
"description": "Session log description ...",
"expiration": "1 year",
"name": "sessionLog_id",
},
],
"headers": {
"description": "Opis",
"expiration": "Vreme isteka",
"name": "Ime",
},
},
"description": "Naše usluge rade bolje ako ih možemo prilagoditi konkretnim korisnicima. Ako omogućite kolačiće za personalizaciju, povećavate šanse da pronađete sadržaj koji želite.",
"linkedCategory": "personalization",
"title": "Kolačići za personalizaciju",
},
],
"title": "Prilagođena podešavanja kolačića",
},
}
`;

exports[`config uk 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 @@ -15,6 +15,7 @@ import { config as configPt } from '../pt';
import { config as configRu } from '../ru';
import { config as configSk } from '../sk';
import { config as configSl } from '../sl';
import { config as configSr } from '../sr';
import { config as configUk } from '../uk';

describe.each([
Expand All @@ -35,6 +36,7 @@ describe.each([
['ru', configRu],
['sk', configSk],
['sl', configSl],
['sr', configSr],
['uk', configUk],
])('config %s', (name, config) => {
it('should return localization object for acceptNecessary button mode', () => {
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(18);
expect(Object.keys(config)).toHaveLength(19);
});
});
});
2 changes: 2 additions & 0 deletions src/languages/loader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import { config as configPt } from './pt';
import { config as configRu } from './ru';
import { config as configSk } from './sk';
import { config as configSl } from './sl';
import { config as configSr } from './sr';
import { config as configUk } from './uk';
import { CookieTable, TranslationOverride } from '../types';
import { Translation } from 'vanilla-cookieconsent';
Expand All @@ -37,6 +38,7 @@ const languagesMap = {
ru: configRu,
sk: configSk,
sl: configSl,
sr: configSr,
uk: configUk,
};

Expand Down
94 changes: 94 additions & 0 deletions src/languages/sr.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
import {
addSeparators,
assembleCookieTableSections,
assembleDescriptionIntro,
legalizeAlmaCareer,
pluralize,
} from '../utils';
import { CookieTableCategories, ExtraMessages } from '../types';
import { Translation } from 'vanilla-cookieconsent';

const extra = {
and: 'i',
company: 'kompaniji',
companies: 'kompanijama',
legalName: 'Alma Career i ostale kompanije iz njene poslovne grupe',
};

/**
* @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: 'Ime', description: 'Opis', expiration: 'Vreme isteka' };

return {
consentModal: {
title: lang.consentTitle ?? 'Kolačići dodatno unapređuju naš sajt',
description: `
${assembleDescriptionIntro(
'Ako budemo bolje razumeli ono što vas zanima, prikazivaćemo relevantniji sadržaj.',
lang.descriptionIntro,
)}
<p>
Klikom na dugme „Prihvati sve” dajete
${pluralize(lang.companyNames.length, lang.company, lang.companies)}
${addSeparators(legalizeAlmaCareer(lang.companyNames, lang.legalName), lang.and)}
svoju saglasnost za korišćenje kolačića za personalizaciju, analitiku i ciljani marketing.
U prilagođenim podešavanjima možete da <strong><a href="" data-cc="show-preferencesModal">prilagodite korišćenje kolačića</a></strong>.
</p>`,
acceptAllBtn: 'Prihvati sve',
acceptNecessaryBtn: 'Prihvati neophodne',
},
preferencesModal: {
title: 'Prilagođena podešavanja kolačića',
acceptAllBtn: 'Prihvati sve',
acceptNecessaryBtn: 'Prihvati neophodne',
savePreferencesBtn: 'Sačuvaj podešavanja',
sections: [
{
description: `Ako želite da maksimalno iskoristite naš veb-sajt, najbolje bi bilo da dozvolite sve vrste kolačića.
${
lang.preferencesModalMoreInfo ??
`Više informacija o tome šta su kolačići i kako ih obrađujemo možete da pronađete u našoj <a href="https://www.almacareer.com/gdpr" target="_blank">politici kolačića</a>.`
}`,
},
...assembleCookieTableSections(
cookieTableHeaders,
{
necessary: {
title: 'Tehnički neophodni kolačići',
description:
'Ovi kolačići su neophodni za pravilno funkcionisanje našeg veb-sajta i zato se ne mogu onemogućiti. Bez njih ne bi bilo moguće npr. prikazati bilo kakav sadržaj ili se prijaviti na naš veb-sajt.',
},
analytics: {
title: 'Analitički kolačići',
description:
'Oni nam pomažu da pratimo koliko ljudi posećuje naš veb-sajt i kako ga koriste. Ove informacije nam omogućavaju da kontinuirano poboljšavamo veb-sajt i druge usluge.',
},
functionality: {
title: 'Funkcionalni kolačići',
description:
'Naš veb-sajt je još efikasniji i bolje funkcioniše zahvaljujući ovim kolačićima. Na primer, omogućavaju nam da koristimo uslugu četa i brzo i lako odgovorimo na vaša pitanja.',
},
ad: {
title: 'Marketing kolačići',
description:
'Ovi kolačići nam pomažu da izmerimo efikasnost oglašavanja i ciljanih ponuda usluga. Marketing kolačići nam omogućavaju da vam pružimo vesti koje bi vas mogle zanimati na internetu.',
},
personalization: {
title: 'Kolačići za personalizaciju',
description:
'Naše usluge rade bolje ako ih možemo prilagoditi konkretnim korisnicima. Ako omogućite kolačiće za personalizaciju, povećavate šanse da pronađete sadržaj koji želite.',
},
},
cookieTable,
),
],
},
};
};

export default config;

0 comments on commit 3cd805c

Please sign in to comment.