diff --git a/package-lock.json b/package-lock.json index df5224b9..b3500f3c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,6 @@ "dependencies": { "fast-xml-parser": "^4.2.2", "geostyler-style": "^9.0.1", - "i18next": "^23.11.5", "lodash": "^4.17.21" }, "devDependencies": { @@ -316,17 +315,6 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/runtime": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz", - "integrity": "sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/template": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", @@ -4894,28 +4882,6 @@ "node": ">=10.17.0" } }, - "node_modules/i18next": { - "version": "23.11.5", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.11.5.tgz", - "integrity": "sha512-41pvpVbW9rhZPk5xjCX2TPJi2861LEig/YRhUkY+1FQ2IQPS0bKUDYnEqY8XPPbB48h1uIwLnP9iiEfuSl20CA==", - "funding": [ - { - "type": "individual", - "url": "https://locize.com" - }, - { - "type": "individual", - "url": "https://locize.com/i18next.html" - }, - { - "type": "individual", - "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" - } - ], - "dependencies": { - "@babel/runtime": "^7.23.2" - } - }, "node_modules/ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", @@ -9247,11 +9213,6 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" - }, "node_modules/registry-auth-token": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", diff --git a/package.json b/package.json index d03f6853..c5ccc635 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,6 @@ }, "dependencies": { "fast-xml-parser": "^4.2.2", - "i18next": "^23.11.5", "geostyler-style": "^9.0.1", "lodash": "^4.17.21" }, diff --git a/src/SldStyleParser.ts b/src/SldStyleParser.ts index 0f5ef4c0..caee09f3 100644 --- a/src/SldStyleParser.ts +++ b/src/SldStyleParser.ts @@ -37,7 +37,6 @@ import { } from 'fast-xml-parser'; import { merge } from 'lodash'; -import i18next from 'i18next'; import { geoStylerFunctionToSldFunction, @@ -102,9 +101,9 @@ const COMBINATION_MAP = { type CombinationType = keyof typeof COMBINATION_MAP; export type SldStyleParserTranslationKeys = { - marksymbolizerParseFailedUnknownWellknownName?: string; + marksymbolizerParseFailedUnknownWellknownName?: (params: {wellKnownName: string}) => string; noFilterDetected?: string; - symbolizerKindParseFailed?: string; + symbolizerKindParseFailed?: (params: {sldSymbolizerName: string}) => string; colorMapEntriesParseFailedColorUndefined?: string; contrastEnhancParseFailedHistoAndNormalizeMutuallyExclusive?: string; channelSelectionParseFailedRGBAndGrayscaleMutuallyExclusive?: string; @@ -115,10 +114,11 @@ export type SldStyleParserTranslations = Record + `MarkSymbolizer cannot be parsed. WellKnownName ${wellKnownName} is not supported.`, noFilterDetected: 'No Filter detected.', - symbolizerKindParseFailed: 'Failed to parse SymbolizerKind {{sldSymbolizerName}} from SldRule.', + symbolizerKindParseFailed: ({sldSymbolizerName}) => + `Failed to parse SymbolizerKind ${sldSymbolizerName} from SldRule.`, colorMapEntriesParseFailedColorUndefined: 'Cannot parse ColorMapEntries. color is undefined.', contrastEnhancParseFailedHistoAndNormalizeMutuallyExclusive: 'Cannot parse ContrastEnhancement. Histogram and Normalize are mutually exclusive.', @@ -129,10 +129,11 @@ export const defaultTranslations: SldStyleParserTranslations = { }, de: {}, fr: { - marksymbolizerParseFailedUnknownWellknownName: - 'Échec de lecture du symbole de type MarkSymbolizer. Le WellKnownName {{wellKnownName}} n\'est pas supporté.', + marksymbolizerParseFailedUnknownWellknownName: ({wellKnownName}) => + `Échec de lecture du symbole de type MarkSymbolizer. Le WellKnownName ${wellKnownName} n'est pas supporté.`, noFilterDetected: 'Aucun filtre détecté.', - symbolizerKindParseFailed: 'Échec de lecture du type de symbole {{sldSymbolizerName}} à partir de SldRule.', + symbolizerKindParseFailed: ({sldSymbolizerName}) => + `Échec de lecture du type de symbole ${sldSymbolizerName} à partir de SldRule.`, colorMapEntriesParseFailedColorUndefined: 'Lecture de ColorMapEntries échoué. color n\'est pas défini.', contrastEnhancParseFailedHistoAndNormalizeMutuallyExclusive: 'Échec de lecture des propriétés de contraste ContrastEnhancement échoué. ' @@ -276,26 +277,17 @@ export class SldStyleParser implements StyleParser { this.translations = merge(this.translations, opts.translations); } - i18next.init({ - lng: this.locale, - resources: { - en: { - translation: this.translations.en, - }, - de: { - translation: this.translations.de, - }, - fr: { - translation: this.translations.fr, - } - } - }); - Object.assign(this, opts); } translate(key: keyof SldStyleParserTranslationKeys, params?: any): string { - return i18next.t(key, params) as string; + const trans = this.translations?.[this.locale]?.[key] ?? key; + + if (typeof trans === 'function') { + return trans(params); + } + + return trans; } private _parser: XMLParser; diff --git a/src/SldStyleParser.v1.0.spec.ts b/src/SldStyleParser.v1.0.spec.ts index 0964e6f0..d9023472 100644 --- a/src/SldStyleParser.v1.0.spec.ts +++ b/src/SldStyleParser.v1.0.spec.ts @@ -297,7 +297,7 @@ describe('SldStyleParser implements StyleParser (reading)', () => { expect(readResult.errors).toBeDefined(); expect(readResult.errors?.[0].message.toString()) - .contains('MarkSymbolizer cannot be parsed.'); + .equals('MarkSymbolizer cannot be parsed. WellKnownName brush://dense5 is not supported.'); }); }); @@ -312,7 +312,9 @@ describe('SldStyleParser implements StyleParser (reading)', () => { expect(readResult.errors).toBeDefined(); expect(readResult.errors?.[0].message.toString()) - .contains('Échec de lecture du symbole de type MarkSymbolizer.'); + .equals( + 'Échec de lecture du symbole de type MarkSymbolizer. Le WellKnownName brush://dense5 n\'est pas supporté.' + ); }); }); @@ -322,8 +324,8 @@ describe('SldStyleParser implements StyleParser (reading)', () => { locale: 'fr', translations: { fr: { - marksymbolizerParseFailedUnknownWellknownName: - 'Echec de lecture de MarkSymbolizer. WellKnownName {{wellKnownName}} inconnu.', + marksymbolizerParseFailedUnknownWellknownName: ({ wellKnownName }) => + `Echec de lecture de MarkSymbolizer. WellKnownName ${wellKnownName} inconnu.`, } } }); @@ -333,7 +335,7 @@ describe('SldStyleParser implements StyleParser (reading)', () => { expect(readResult.errors).toBeDefined(); expect(readResult.errors?.[0].message.toString()) - .contains('Echec de lecture de MarkSymbolizer.'); + .equals('Echec de lecture de MarkSymbolizer. WellKnownName brush://dense5 inconnu.'); }); });