From 3cd805c233df6837da0637252671f9e5d386d521 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Machulda?= Date: Mon, 3 Feb 2025 17:07:51 +0100 Subject: [PATCH] Feat: Add Serbian (sr) translation --- README.md | 1 + examples/languages.html | 4 + .../__snapshots__/langConfig.test.ts.snap | 145 ++++++++++++++++++ src/languages/__tests__/langConfig.test.ts | 2 + src/languages/__tests__/loader.test.ts | 2 +- src/languages/loader.ts | 2 + src/languages/sr.ts | 94 ++++++++++++ 7 files changed, 249 insertions(+), 1 deletion(-) create mode 100644 src/languages/sr.ts diff --git a/README.md b/README.md index 9ca82c26..2885791e 100644 --- a/README.md +++ b/README.md @@ -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`) diff --git a/examples/languages.html b/examples/languages.html index b699bd72..4490680c 100644 --- a/examples/languages.html +++ b/examples/languages.html @@ -155,6 +155,10 @@

Select language

+
+ + +
diff --git a/src/languages/__tests__/__snapshots__/langConfig.test.ts.snap b/src/languages/__tests__/__snapshots__/langConfig.test.ts.snap index 7f84ff0c..3bd2c2f0 100644 --- a/src/languages/__tests__/__snapshots__/langConfig.test.ts.snap +++ b/src/languages/__tests__/__snapshots__/langConfig.test.ts.snap @@ -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": " +

Ako budemo bolje razumeli ono što vas zanima, prikazivaćemo relevantniji sadržaj.

+

+ 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 prilagodite korišćenje kolačića. +

", + "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 politici kolačić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": " +

Ako budemo bolje razumeli ono što vas zanima, prikazivaćemo relevantniji sadržaj.

+

+ 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 prilagodite korišćenje kolačića. +

", + "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 politici kolačić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": { diff --git a/src/languages/__tests__/langConfig.test.ts b/src/languages/__tests__/langConfig.test.ts index 9f966999..5a82946d 100644 --- a/src/languages/__tests__/langConfig.test.ts +++ b/src/languages/__tests__/langConfig.test.ts @@ -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([ @@ -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', () => { diff --git a/src/languages/__tests__/loader.test.ts b/src/languages/__tests__/loader.test.ts index 8ed0e447..4cc898fb 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(18); + expect(Object.keys(config)).toHaveLength(19); }); }); }); diff --git a/src/languages/loader.ts b/src/languages/loader.ts index ab0664ff..34f1f378 100644 --- a/src/languages/loader.ts +++ b/src/languages/loader.ts @@ -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'; @@ -37,6 +38,7 @@ const languagesMap = { ru: configRu, sk: configSk, sl: configSl, + sr: configSr, uk: configUk, }; diff --git a/src/languages/sr.ts b/src/languages/sr.ts new file mode 100644 index 00000000..b22b4e80 --- /dev/null +++ b/src/languages/sr.ts @@ -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, + )} +

+ 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 prilagodite korišćenje kolačića. +

`, + 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 politici kolačić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;