Socket
Socket
Sign inDemoInstall

@ribajs/i18n

Package Overview
Dependencies
Maintainers
1
Versions
83
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@ribajs/i18n - npm Package Compare versions

Comparing version 1.9.0-alpha.0 to 1.9.0-alpha.1

14

dist/binders/i18n/i18n-star.binder.d.ts

@@ -1,9 +0,9 @@

import { BinderWrapper } from '@ribajs/core';
import { BinderWrapper } from "@ribajs/core";
export interface BinderAttributeChangedEvent {
detail: {
name: string;
oldValue: string;
newValue: string;
namespace: null;
};
detail: {
name: string;
oldValue: string;
newValue: string;
namespace: null;
};
}

@@ -10,0 +10,0 @@ /**

@@ -8,169 +8,212 @@ "use strict";

exports.i18nStarBinderWrapper = (localesService) => {
return {
name: 'i18n-*',
block: false,
priority: 0,
bind(el) {
const getElementData = () => {
const customData = {};
customData.type = el.type;
customData.tagName = el.tagName;
customData.contenteditable = el.getAttribute('contenteditable') ? true : false;
customData.isRadio = customData.tagName === 'INPUT' && customData.type === 'radio';
return customData;
};
this.customData = getElementData();
this.customData.i18n = localesService;
this.customData.vars = {};
this.customData.translateMePathString = null;
this.customData.properties = [];
this.customData.attributeName = this.args[0].toString();
this.customData.applyTranslation = (locale) => {
if (!locale) {
if (this.customData.i18n.showMissingTranslation) {
locale = `translation missing: "${this.customData.properties.join('.')}"`;
}
else {
return;
}
}
if (this.customData.attributeName === 'html') {
el.innerHTML = locale;
}
else if (this.customData.attributeName === 'text') {
el.innerText = locale;
}
else if (this.customData.attributeName === 'value') {
// TODO support also: https://github.com/JumpLinkNetwork/tinybind/blob/master/src/binders/basic/value.binder.ts#L51
if (this.customData.contenteditable) {
el.innerHTML = locale;
}
else {
el.value = locale;
}
}
else {
el.setAttribute(this.customData.attributeName, locale);
}
};
this.customData.parseVars = (_el) => {
// parse templates to vars
const newVars = this.customData.i18n.parseTemplateVars(_el);
this.customData.vars = core_1.Utils.concat(true, this.customData.vars, newVars);
// if (Object.keys(this.customData.vars).length) {
// console.warn('parsed templates vars', this.customData.vars);
// }
// parse data attributes to vars
// Vanilla works better than jquery data function?
this.customData.vars = core_1.Utils.concat(true, this.customData.vars, _el.dataset);
// if (Object.keys(this.customData.vars).length) {
// console.warn('parsed attribute vars', this.customData.vars);
// }
// Parse templates wich have his own translations
this.customData.langVars = this.customData.i18n.parseLocalVars(_el);
// if (this.customData.langVars && Object.keys(this.customData.langVars).length) {
// console.warn('parsed own translations', this.customData.langVars);
// }
};
this.customData.translate = (langcode) => {
// If language service is not ready do nothing
if (!this.customData.i18n.ready) {
return;
}
if (!langcode) {
langcode = this.customData.i18n.getLangcode();
if (!langcode) {
console.error('Langcode is requred', langcode);
return;
}
}
// translate by using the already translated language variable
if (this.customData.langVars && this.customData.langVars[langcode]) {
return this.customData.applyTranslation(this.customData.langVars[langcode]);
}
if (!this.customData.properties || this.customData.properties.length === 0) {
// get the default translation if available
if (this.customData.langVars && this.customData.langVars.default) {
// console.warn('Translate by default', this.customData.langVars.default);
return this.customData.applyTranslation(this.customData.langVars.default);
}
}
// translate by properies, e.g. de.cart.add
return this.customData.i18n.get([langcode, ...this.customData.properties], this.customData.vars)
.then((local) => {
if (local && typeof (local) === 'string') {
// console.warn('Translate by properties', [langcode, ...this.customData.properties], local);
return this.customData.applyTranslation(local);
}
// get the default translation if available
if (this.customData.langVars && this.customData.langVars.default) {
// console.warn('Translate by default as fallback', this.customData.langVars.default);
return this.customData.applyTranslation(this.customData.langVars.default);
}
return this.customData.applyTranslation(null);
})
.catch((error) => {
console.error(error);
});
};
this.customData.onAttributeChanged = (data) => {
if (data.detail.name.startsWith('data-')) {
const varName = data.detail.name.slice(5);
const newVar = {};
newVar[varName] = data.detail.newValue;
// console.warn('binder-changed newVar', newVar);
this.customData.vars = core_1.Utils.concat(true, this.customData.vars, newVar);
this.customData.translate();
}
};
this.customData.onLanguageChanged = (langcode, initial) => {
// Do not translate on inital language change, we use the ready event for this
if (!initial) {
this.customData.translate(langcode);
}
};
/**
* Initial stuff wee need to do after the language service is ready
*/
this.customData.initOnReady = (langcode, translationNeeded) => {
// Translate on translation service ready if needed
if (translationNeeded) {
this.customData.translate(langcode);
}
// Translate if language changes
this.customData.i18n.event.on('changed', this.customData.onLanguageChanged);
// Translate if binder attribute event is changed
el.addEventListener('binder-changed', this.customData.onAttributeChanged);
};
},
routine(el, translateMePathString) {
if (this.customData.translateMePathString === null) {
// if this is the first call of this function
this.customData.translateMePathString = translateMePathString;
if (translateMePathString) {
this.customData.properties = this.customData.translateMePathString.split('.');
}
this.customData.parseVars(el);
// Translate if language is ready
if (this.customData.i18n.ready) {
this.customData.initOnReady(this.customData.i18n.getLangcode(), this.customData.i18n.currentLangcode !== this.customData.i18n.initalLangcode || !localesService.doNotTranslateDefaultLanguage);
}
else {
this.customData.i18n.event.on('ready', this.customData.initOnReady);
}
return {
name: "i18n-*",
block: false,
priority: 0,
bind(el) {
const getElementData = () => {
const customData = {};
customData.type = el.type;
customData.tagName = el.tagName;
customData.contenteditable = el.getAttribute("contenteditable")
? true
: false;
customData.isRadio =
customData.tagName === "INPUT" && customData.type === "radio";
return customData;
};
this.customData = getElementData();
this.customData.i18n = localesService;
this.customData.vars = {};
this.customData.translateMePathString = null;
this.customData.properties = [];
this.customData.attributeName = this.args[0].toString();
this.customData.applyTranslation = (locale) => {
if (!locale) {
if (this.customData.i18n.showMissingTranslation) {
locale = `translation missing: "${this.customData.properties.join(
"."
)}"`;
} else {
return;
}
}
if (this.customData.attributeName === "html") {
el.innerHTML = locale;
} else if (this.customData.attributeName === "text") {
el.innerText = locale;
} else if (this.customData.attributeName === "value") {
// TODO support also: https://github.com/JumpLinkNetwork/tinybind/blob/master/src/binders/basic/value.binder.ts#L51
if (this.customData.contenteditable) {
el.innerHTML = locale;
} else {
el.value = locale;
}
} else {
el.setAttribute(this.customData.attributeName, locale);
}
};
this.customData.parseVars = (_el) => {
// parse templates to vars
const newVars = this.customData.i18n.parseTemplateVars(_el);
this.customData.vars = core_1.Utils.concat(
true,
this.customData.vars,
newVars
);
// if (Object.keys(this.customData.vars).length) {
// console.warn('parsed templates vars', this.customData.vars);
// }
// parse data attributes to vars
// Vanilla works better than jquery data function?
this.customData.vars = core_1.Utils.concat(
true,
this.customData.vars,
_el.dataset
);
// if (Object.keys(this.customData.vars).length) {
// console.warn('parsed attribute vars', this.customData.vars);
// }
// Parse templates wich have his own translations
this.customData.langVars = this.customData.i18n.parseLocalVars(_el);
// if (this.customData.langVars && Object.keys(this.customData.langVars).length) {
// console.warn('parsed own translations', this.customData.langVars);
// }
};
this.customData.translate = (langcode) => {
// If language service is not ready do nothing
if (!this.customData.i18n.ready) {
return;
}
if (!langcode) {
langcode = this.customData.i18n.getLangcode();
if (!langcode) {
console.error("Langcode is requred", langcode);
return;
}
}
// translate by using the already translated language variable
if (this.customData.langVars && this.customData.langVars[langcode]) {
return this.customData.applyTranslation(
this.customData.langVars[langcode]
);
}
if (
!this.customData.properties ||
this.customData.properties.length === 0
) {
// get the default translation if available
if (this.customData.langVars && this.customData.langVars.default) {
// console.warn('Translate by default', this.customData.langVars.default);
return this.customData.applyTranslation(
this.customData.langVars.default
);
}
}
// translate by properies, e.g. de.cart.add
return this.customData.i18n
.get([langcode, ...this.customData.properties], this.customData.vars)
.then((local) => {
if (local && typeof local === "string") {
// console.warn('Translate by properties', [langcode, ...this.customData.properties], local);
return this.customData.applyTranslation(local);
}
else if (this.customData.translateMePathString !== translateMePathString) {
// If translate string was changed
this.customData.translateMePathString = translateMePathString;
this.customData.properties = this.customData.translateMePathString.split('.');
this.customData.parseVars(el);
this.customData.translate();
// get the default translation if available
if (this.customData.langVars && this.customData.langVars.default) {
// console.warn('Translate by default as fallback', this.customData.langVars.default);
return this.customData.applyTranslation(
this.customData.langVars.default
);
}
},
unbind() {
this.el.removeEventListener('binder-changed', this.customData.onAttributeChanged);
this.customData.i18n.event.off('changed', this.customData.onLanguageChanged);
},
};
return this.customData.applyTranslation(null);
})
.catch((error) => {
console.error(error);
});
};
this.customData.onAttributeChanged = (data) => {
if (data.detail.name.startsWith("data-")) {
const varName = data.detail.name.slice(5);
const newVar = {};
newVar[varName] = data.detail.newValue;
// console.warn('binder-changed newVar', newVar);
this.customData.vars = core_1.Utils.concat(
true,
this.customData.vars,
newVar
);
this.customData.translate();
}
};
this.customData.onLanguageChanged = (langcode, initial) => {
// Do not translate on inital language change, we use the ready event for this
if (!initial) {
this.customData.translate(langcode);
}
};
/**
* Initial stuff wee need to do after the language service is ready
*/
this.customData.initOnReady = (langcode, translationNeeded) => {
// Translate on translation service ready if needed
if (translationNeeded) {
this.customData.translate(langcode);
}
// Translate if language changes
this.customData.i18n.event.on(
"changed",
this.customData.onLanguageChanged
);
// Translate if binder attribute event is changed
el.addEventListener(
"binder-changed",
this.customData.onAttributeChanged
);
};
},
routine(el, translateMePathString) {
if (this.customData.translateMePathString === null) {
// if this is the first call of this function
this.customData.translateMePathString = translateMePathString;
if (translateMePathString) {
this.customData.properties = this.customData.translateMePathString.split(
"."
);
}
this.customData.parseVars(el);
// Translate if language is ready
if (this.customData.i18n.ready) {
this.customData.initOnReady(
this.customData.i18n.getLangcode(),
this.customData.i18n.currentLangcode !==
this.customData.i18n.initalLangcode ||
!localesService.doNotTranslateDefaultLanguage
);
} else {
this.customData.i18n.event.on("ready", this.customData.initOnReady);
}
} else if (
this.customData.translateMePathString !== translateMePathString
) {
// If translate string was changed
this.customData.translateMePathString = translateMePathString;
this.customData.properties = this.customData.translateMePathString.split(
"."
);
this.customData.parseVars(el);
this.customData.translate();
}
},
unbind() {
this.el.removeEventListener(
"binder-changed",
this.customData.onAttributeChanged
);
this.customData.i18n.event.off(
"changed",
this.customData.onLanguageChanged
);
},
};
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi1zdGFyLmJpbmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iaW5kZXJzL2kxOG4vaTE4bi1zdGFyLmJpbmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHVDQUE0RDtBQWE1RDs7R0FFRztBQUNVLFFBQUEscUJBQXFCLEdBQTBCLENBQUMsY0FBK0IsRUFBRSxFQUFFO0lBQzlGLE9BQU87UUFDTCxJQUFJLEVBQUUsUUFBUTtRQUNkLEtBQUssRUFBRSxLQUFLO1FBQ1osUUFBUSxFQUFFLENBQUM7UUFDWCxJQUFJLENBQUMsRUFBc0I7WUFDekIsTUFBTSxjQUFjLEdBQUcsR0FBRyxFQUFFO2dCQUMxQixNQUFNLFVBQVUsR0FBUSxFQUFFLENBQUM7Z0JBQzNCLFVBQVUsQ0FBQyxJQUFJLEdBQUksRUFBdUIsQ0FBQyxJQUFJLENBQUM7Z0JBQ2hELFVBQVUsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQztnQkFDaEMsVUFBVSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2dCQUMvRSxVQUFVLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLEtBQUssT0FBTyxJQUFJLFVBQVUsQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDO2dCQUNuRixPQUFPLFVBQVUsQ0FBQztZQUNwQixDQUFDLENBQUM7WUFDRixJQUFJLENBQUMsVUFBVSxHQUFHLGNBQWMsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQztZQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7WUFDN0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFV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
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi1zdGFyLmJpbmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iaW5kZXJzL2kxOG4vaTE4bi1zdGFyLmJpbmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHVDQUE0RDtBQWE1RDs7R0FFRztBQUNVLFFBQUEscUJBQXFCLEdBQTBCLENBQUMsY0FBK0IsRUFBRSxFQUFFO0lBQzlGLE9BQU87UUFDTCxJQUFJLEVBQUUsUUFBUTtRQUNkLEtBQUssRUFBRSxLQUFLO1FBQ1osUUFBUSxFQUFFLENBQUM7UUFDWCxJQUFJLENBQUMsRUFBc0I7WUFDekIsTUFBTSxjQUFjLEdBQUcsR0FBRyxFQUFFO2dCQUMxQixNQUFNLFVBQVUsR0FBUSxFQUFFLENBQUM7Z0JBQzNCLFVBQVUsQ0FBQyxJQUFJLEdBQUksRUFBdUIsQ0FBQyxJQUFJLENBQUM7Z0JBQ2hELFVBQVUsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQztnQkFDaEMsVUFBVSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2dCQUMvRSxVQUFVLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLEtBQUssT0FBTyxJQUFJLFVBQVUsQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDO2dCQUNuRixPQUFPLFVBQVUsQ0FBQztZQUNwQixDQUFDLENBQUM7WUFDRixJQUFJLENBQUMsVUFBVSxHQUFHLGNBQWMsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQztZQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7WUFDN0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFV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

@@ -1,4 +0,4 @@

import { ALocalesService } from '../services/locales-base.service';
import { Binders } from '@ribajs/core';
import { ALocalesService } from "../services/locales-base.service";
import { Binders } from "@ribajs/core";
declare const _default: (localesService: ALocalesService) => Binders<any>;
export default _default;

@@ -5,6 +5,6 @@ "use strict";

exports.default = (localesService) => {
return {
i18nStarBinder: i18n_star_binder_1.i18nStarBinderWrapper(localesService),
};
return {
i18nStarBinder: i18n_star_binder_1.i18nStarBinderWrapper(localesService),
};
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmluZGVycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDhEQUFnRTtBQUloRSxrQkFBZSxDQUFDLGNBQStCLEVBQUUsRUFBRTtJQUNqRCxPQUFPO1FBQ0wsY0FBYyxFQUFFLHdDQUFxQixDQUFDLGNBQWMsQ0FBQztLQUNyQyxDQUFDO0FBQ3JCLENBQUMsQ0FBQyJ9
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmluZGVycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDhEQUFnRTtBQUloRSxrQkFBZSxDQUFDLGNBQStCLEVBQUUsRUFBRTtJQUNqRCxPQUFPO1FBQ0wsY0FBYyxFQUFFLHdDQUFxQixDQUFDLGNBQWMsQ0FBQztLQUNyQyxDQUFDO0FBQ3JCLENBQUMsQ0FBQyJ9

@@ -1,37 +0,46 @@

import { Component, Binder, View } from '@ribajs/core';
import { Langcode } from '../../interfaces';
import { ALocalesService } from '../../services/locales-base.service';
import { Component, Binder, View } from "@ribajs/core";
import { Langcode } from "../../interfaces";
import { ALocalesService } from "../../services/locales-base.service";
export interface Scope {
langcodes: Langcode[];
switch: AI18nSwitcherComponent["switch"];
toggle: AI18nSwitcherComponent["toggle"];
ready: boolean;
}
export declare abstract class AI18nSwitcherComponent extends Component {
protected abstract localesService: ALocalesService;
protected scope: {
langcodes: Langcode[];
switch: AI18nSwitcherComponent['switch'];
toggle: AI18nSwitcherComponent['toggle'];
switch: (
langcode: Langcode,
context?: Binder<any> | undefined,
event?: Event | undefined
) => void;
toggle: (
context?: Binder<any> | undefined,
event?: Event | undefined
) => void;
ready: boolean;
};
constructor(element?: HTMLElement);
/**
* Switch to language by langcode
* @param langcode
* @param event
*/
switch(langcode: Langcode, context?: Binder<any>, event?: Event): void;
/**
* Toggle language, makes only sense if you have only two languages
* @param langcode
* @param event
*/
toggle(context?: Binder<any>, event?: Event): void;
protected init(
observedAttributes: string[]
): Promise<View | null | undefined>;
protected initLocales(langcode: string): Promise<Langcode[]>;
protected setLangcode(langcode: string): void;
protected requiredAttributes(): never[];
protected disconnectedCallback(): void;
protected template(): null;
}
export declare abstract class AI18nSwitcherComponent extends Component {
protected abstract localesService: ALocalesService;
protected scope: {
langcodes: Langcode[];
switch: (langcode: Langcode, context?: Binder<any> | undefined, event?: Event | undefined) => void;
toggle: (context?: Binder<any> | undefined, event?: Event | undefined) => void;
ready: boolean;
};
constructor(element?: HTMLElement);
/**
* Switch to language by langcode
* @param langcode
* @param event
*/
switch(langcode: Langcode, context?: Binder<any>, event?: Event): void;
/**
* Toggle language, makes only sense if you have only two languages
* @param langcode
* @param event
*/
toggle(context?: Binder<any>, event?: Event): void;
protected init(observedAttributes: string[]): Promise<View | null | undefined>;
protected initLocales(langcode: string): Promise<Langcode[]>;
protected setLangcode(langcode: string): void;
protected requiredAttributes(): never[];
protected disconnectedCallback(): void;
protected template(): null;
}

@@ -5,105 +5,103 @@ "use strict";

class AI18nSwitcherComponent extends core_1.Component {
constructor(element) {
super(element);
this.scope = {
langcodes: [],
switch: this.switch,
toggle: this.toggle,
ready: false,
};
constructor(element) {
super(element);
this.scope = {
langcodes: [],
switch: this.switch,
toggle: this.toggle,
ready: false,
};
}
/**
* Switch to language by langcode
* @param langcode
* @param event
*/
switch(langcode, context, event) {
if (event) {
event.preventDefault();
event.stopPropagation();
}
/**
* Switch to language by langcode
* @param langcode
* @param event
*/
switch(langcode, context, event) {
if (event) {
event.preventDefault();
event.stopPropagation();
}
if (!langcode.active) {
this.setLangcode(langcode.code);
}
if (!langcode.active) {
this.setLangcode(langcode.code);
}
/**
* Toggle language, makes only sense if you have only two languages
* @param langcode
* @param event
*/
toggle(context, event) {
if (event) {
event.preventDefault();
event.stopPropagation();
}
/**
* Toggle language, makes only sense if you have only two languages
* @param langcode
* @param event
*/
toggle(context, event) {
if (event) {
event.preventDefault();
event.stopPropagation();
}
for (const i in this.scope.langcodes) {
if (this.scope.langcodes.hasOwnProperty(i)) {
if (this.scope.langcodes[i].active !== true) {
this.setLangcode(this.scope.langcodes[i].code);
return;
}
for (const i in this.scope.langcodes) {
if (this.scope.langcodes.hasOwnProperty(i)) {
if (this.scope.langcodes[i].active !== true) {
this.setLangcode(this.scope.langcodes[i].code);
return;
}
}
}
}
}
async init(observedAttributes) {
if (this.localesService.ready) {
const langcode = this.localesService.getLangcode();
if (langcode) {
return this.initLocales(langcode)
.then((langcodes) => {
return super.init(observedAttributes);
});
}
}
return new Promise((resolve, reject) => {
this.localesService.event.on('ready', (langcode, translationNeeded) => {
this.initLocales(langcode)
.then((langcodes) => {
super.init(observedAttributes)
.then((view) => {
resolve(view);
});
});
});
}
async init(observedAttributes) {
if (this.localesService.ready) {
const langcode = this.localesService.getLangcode();
if (langcode) {
return this.initLocales(langcode).then((langcodes) => {
return super.init(observedAttributes);
});
}
}
async initLocales(langcode) {
// set avaible langcodes
return this.localesService.getAvailableLangcodes()
.then((langcodes) => {
this.scope.langcodes = langcodes;
// set active langcodes
this.scope.langcodes.forEach((langCode) => {
langCode.active = (langCode.code === langcode);
});
return this.scope.langcodes;
})
.then((langcodes) => {
this.localesService.event.on('changed', (changedLangcode, initial) => {
// Activate localcode and disable the other
this.scope.langcodes.forEach((langCode) => {
langCode.active = (langCode.code === changedLangcode);
});
});
return langcodes;
})
.then((langcodes) => {
this.scope.ready = true;
return langcodes;
return new Promise((resolve, reject) => {
this.localesService.event.on("ready", (langcode, translationNeeded) => {
this.initLocales(langcode).then((langcodes) => {
super.init(observedAttributes).then((view) => {
resolve(view);
});
});
}
setLangcode(langcode) {
this.localesService.setLangcode(langcode);
}
requiredAttributes() {
return [];
}
disconnectedCallback() {
super.disconnectedCallback();
}
template() {
return null;
}
});
});
}
async initLocales(langcode) {
// set avaible langcodes
return this.localesService
.getAvailableLangcodes()
.then((langcodes) => {
this.scope.langcodes = langcodes;
// set active langcodes
this.scope.langcodes.forEach((langCode) => {
langCode.active = langCode.code === langcode;
});
return this.scope.langcodes;
})
.then((langcodes) => {
this.localesService.event.on("changed", (changedLangcode, initial) => {
// Activate localcode and disable the other
this.scope.langcodes.forEach((langCode) => {
langCode.active = langCode.code === changedLangcode;
});
});
return langcodes;
})
.then((langcodes) => {
this.scope.ready = true;
return langcodes;
});
}
setLangcode(langcode) {
this.localesService.setLangcode(langcode);
}
requiredAttributes() {
return [];
}
disconnectedCallback() {
super.disconnectedCallback();
}
template() {
return null;
}
}
exports.AI18nSwitcherComponent = AI18nSwitcherComponent;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpdGNoZXIuYWJzdHJhY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYWJzdHJhY3Qtc3dpdGNoZXIvc3dpdGNoZXIuYWJzdHJhY3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsdUNBSXNCO0FBV3RCLE1BQXNCLHNCQUF1QixTQUFRLGdCQUFTO0lBVzVELFlBQVksT0FBcUI7UUFDL0IsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBUlAsVUFBSyxHQUFHO1lBQ2hCLFNBQVMsRUFBZSxFQUFFO1lBQzFCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsS0FBSyxFQUFZLEtBQUs7U0FDdkIsQ0FBQztJQUlGLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFFBQWtCLEVBQUUsT0FBcUIsRUFBRSxLQUFhO1FBQ3BFLElBQUksS0FBSyxFQUFFO1lBQ1QsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUN6QjtRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsT0FBcUIsRUFBRSxLQUFhO1FBQ2hELElBQUksS0FBSyxFQUFFO1lBQ1QsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUN6QjtRQUNELEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUU7WUFDcEMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxD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
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpdGNoZXIuYWJzdHJhY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYWJzdHJhY3Qtc3dpdGNoZXIvc3dpdGNoZXIuYWJzdHJhY3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsdUNBSXNCO0FBV3RCLE1BQXNCLHNCQUF1QixTQUFRLGdCQUFTO0lBVzVELFlBQVksT0FBcUI7UUFDL0IsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBUlAsVUFBSyxHQUFHO1lBQ2hCLFNBQVMsRUFBZSxFQUFFO1lBQzFCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsS0FBSyxFQUFZLEtBQUs7U0FDdkIsQ0FBQztJQUlGLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFFBQWtCLEVBQUUsT0FBcUIsRUFBRSxLQUFhO1FBQ3BFLElBQUksS0FBSyxFQUFFO1lBQ1QsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUN6QjtRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsT0FBcUIsRUFBRSxLQUFhO1FBQ2hELElBQUksS0FBSyxFQUFFO1lBQ1QsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUN6QjtRQUNELEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUU7WUFDcEMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLElBQUksRUFBRTtvQkFDM0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDL0MsT0FBTztpQkFDUjthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBRVMsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBNEI7UUFDL0MsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRTtZQUM3QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25ELElBQUksUUFBUSxFQUFFO2dCQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUM7cUJBQ2hDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO29CQUNsQixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztnQkFDeEMsQ0FBQyxDQUFDLENBQUM7YUFDSjtTQUNGO1FBQ0QsT0FBTyxJQUFJLE9BQU8sQ0FBMEIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDOUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQWdCLEVBQUUsaUJBQTBCLEVBQUUsRUFBRTtnQkFDckYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUM7cUJBQ3pCLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO29CQUNsQixLQUFLLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDO3lCQUM3QixJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTt3QkFDYixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2hCLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFUyxLQUFLLENBQUMsV0FBVyxDQUFDLFFBQWdCO1FBQzFDLHdCQUF3QjtRQUN4QixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMscUJBQXFCLEVBQUU7YUFDakQsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1lBQ2pDLHVCQUF1QjtZQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDeEMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUM7WUFDakQsQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQzlCLENBQUMsQ0FBQzthQUNELElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxlQUF1QixFQUFFLE9BQWdCLEVBQUUsRUFBRTtnQkFDcEYsMkNBQTJDO2dCQUMzQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtvQkFDeEMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLENBQUM7Z0JBQ3hELENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDLENBQUM7YUFDRCxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDeEIsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRVMsV0FBVyxDQUFDLFFBQWdCO1FBQ3BDLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFUyxrQkFBa0I7UUFDMUIsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRVMsb0JBQW9CO1FBQzVCLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFUyxRQUFRO1FBQ2hCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztDQUNGO0FBbEhELHdEQWtIQyJ9

@@ -1,5 +0,5 @@

export { AI18nSwitcherComponent } from './abstract-switcher/switcher.abstract.component';
import { ALocalesService } from '../services/locales-base.service';
import { Components } from '@ribajs/core';
export { AI18nSwitcherComponent } from "./abstract-switcher/switcher.abstract.component";
import { ALocalesService } from "../services/locales-base.service";
import { Components } from "@ribajs/core";
declare const _default: (localesService: ALocalesService) => Components;
export default _default;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var switcher_abstract_component_1 = require("./abstract-switcher/switcher.abstract.component");
exports.AI18nSwitcherComponent = switcher_abstract_component_1.AI18nSwitcherComponent;
exports.AI18nSwitcherComponent =
switcher_abstract_component_1.AI18nSwitcherComponent;
const switcher_component_1 = require("./switcher/switcher.component");
exports.default = (localesService) => {
return {
i18nSwitcherComponent: switcher_component_1.i18nSwitcherComponentWrapper(localesService),
};
return {
i18nSwitcherComponent: switcher_component_1.i18nSwitcherComponentWrapper(
localesService
),
};
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLCtGQUF5RjtBQUFoRiwrREFBQSxzQkFBc0IsQ0FBQTtBQUMvQixzRUFBNkU7QUFJN0Usa0JBQWUsQ0FBQyxjQUErQixFQUFjLEVBQUU7SUFDN0QsT0FBTztRQUNMLHFCQUFxQixFQUFFLGlEQUE0QixDQUFDLGNBQWMsQ0FBQztLQUNwRSxDQUFDO0FBQ0osQ0FBQyxDQUFDIn0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLCtGQUF5RjtBQUFoRiwrREFBQSxzQkFBc0IsQ0FBQTtBQUMvQixzRUFBNkU7QUFJN0Usa0JBQWUsQ0FBQyxjQUErQixFQUFjLEVBQUU7SUFDN0QsT0FBTztRQUNMLHFCQUFxQixFQUFFLGlEQUE0QixDQUFDLGNBQWMsQ0FBQztLQUNwRSxDQUFDO0FBQ0osQ0FBQyxDQUFDIn0=

@@ -1,4 +0,6 @@

import { TypeOfComponent } from '@ribajs/core';
import { AI18nSwitcherComponent } from '../abstract-switcher/switcher.abstract.component';
import { ALocalesService } from '../../services/locales-base.service';
export declare const i18nSwitcherComponentWrapper: (localesService: ALocalesService) => TypeOfComponent<AI18nSwitcherComponent>;
import { TypeOfComponent } from "@ribajs/core";
import { AI18nSwitcherComponent } from "../abstract-switcher/switcher.abstract.component";
import { ALocalesService } from "../../services/locales-base.service";
export declare const i18nSwitcherComponentWrapper: (
localesService: ALocalesService
) => TypeOfComponent<AI18nSwitcherComponent>;

@@ -5,50 +5,52 @@ "use strict";

exports.i18nSwitcherComponentWrapper = (localesService) => {
var _a;
return _a = class I18nSwitcherComponent extends switcher_abstract_component_1.AI18nSwitcherComponent {
constructor(element) {
super(element);
this.localesService = localesService;
this.scope = {
langcodes: [],
switch: this.switch,
toggle: this.toggle,
ready: false,
};
this.init(I18nSwitcherComponent.observedAttributes);
}
static get observedAttributes() {
return [];
}
/**
* Switch to language by langcode
* @param langcode
* @param event
*/
switch(langcode, context, event) {
return super.switch(langcode, context, event);
}
/**
* Toggle language, makes only sense if you have only two languages
* @param langcode
* @param event
*/
toggle(context, event) {
return super.toggle(context, event);
}
setLangcode(langcode) {
return super.setLangcode(langcode);
}
requiredAttributes() {
return [];
}
disconnectedCallback() {
super.disconnectedCallback();
}
template() {
return null;
}
},
_a.tagName = 'i18n-switcher',
_a;
var _a;
return (
(_a = class I18nSwitcherComponent extends switcher_abstract_component_1.AI18nSwitcherComponent {
constructor(element) {
super(element);
this.localesService = localesService;
this.scope = {
langcodes: [],
switch: this.switch,
toggle: this.toggle,
ready: false,
};
this.init(I18nSwitcherComponent.observedAttributes);
}
static get observedAttributes() {
return [];
}
/**
* Switch to language by langcode
* @param langcode
* @param event
*/
switch(langcode, context, event) {
return super.switch(langcode, context, event);
}
/**
* Toggle language, makes only sense if you have only two languages
* @param langcode
* @param event
*/
toggle(context, event) {
return super.toggle(context, event);
}
setLangcode(langcode) {
return super.setLangcode(langcode);
}
requiredAttributes() {
return [];
}
disconnectedCallback() {
super.disconnectedCallback();
}
template() {
return null;
}
}),
(_a.tagName = "i18n-switcher"),
_a
);
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpdGNoZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc3dpdGNoZXIvc3dpdGNoZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQ0Esa0dBQTBGO0FBSTdFLFFBQUEsNEJBQTRCLEdBQUcsQ0FBQyxjQUErQixFQUEyQyxFQUFFOztJQUV2SCxZQUFPLE1BQU0scUJBQXNCLFNBQVEsb0RBQXNCO1lBaUIvRCxZQUFZLE9BQXFCO2dCQUMvQixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBVlAsbUJBQWMsR0FBRyxjQUFjLENBQUM7Z0JBRWhDLFVBQUssR0FBRztvQkFDaEIsU0FBUyxFQUFlLEVBQUU7b0JBQzFCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtvQkFDbkIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO29CQUNuQixLQUFLLEVBQVksS0FBSztpQkFDdkIsQ0FBQztnQkFJQSxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDdEQsQ0FBQztZQWhCRCxNQUFNLEtBQUssa0JBQWtCO2dCQUMzQixPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUM7WUFnQkQ7Ozs7ZUFJRztZQUNJLE1BQU0sQ0FBQyxRQUFrQixFQUFFLE9BQXFCLEVBQUUsS0FBYTtnQkFDcEUsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDaEQsQ0FBQztZQUVEOzs7O2VBSUc7WUFDSSxNQUFNLENBQUMsT0FBcUIsRUFBRSxLQUFhO2dCQUNoRCxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3RDLENBQUM7WUFFUyxXQUFXLENBQUMsUUFBZ0I7Z0JBQ3BDLE9BQU8sS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNyQyxDQUFDO1lBRVMsa0JBQWtCO2dCQUMxQixPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUM7WUFFUyxvQkFBb0I7Z0JBQzVCLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQy9CLENBQUM7WUFFUyxRQUFRO2dCQUNoQixPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7U0FDRjtRQXJEZSxVQUFPLEdBQVcsZUFBZ0I7V0FxRGhEO0FBQ0osQ0FBQyxDQUFDIn0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpdGNoZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc3dpdGNoZXIvc3dpdGNoZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQ0Esa0dBQTBGO0FBSTdFLFFBQUEsNEJBQTRCLEdBQUcsQ0FBQyxjQUErQixFQUEyQyxFQUFFOztJQUV2SCxZQUFPLE1BQU0scUJBQXNCLFNBQVEsb0RBQXNCO1lBaUIvRCxZQUFZLE9BQXFCO2dCQUMvQixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBVlAsbUJBQWMsR0FBRyxjQUFjLENBQUM7Z0JBRWhDLFVBQUssR0FBRztvQkFDaEIsU0FBUyxFQUFlLEVBQUU7b0JBQzFCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtvQkFDbkIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO29CQUNuQixLQUFLLEVBQVksS0FBSztpQkFDdkIsQ0FBQztnQkFJQSxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDdEQsQ0FBQztZQWhCRCxNQUFNLEtBQUssa0JBQWtCO2dCQUMzQixPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUM7WUFnQkQ7Ozs7ZUFJRztZQUNJLE1BQU0sQ0FBQyxRQUFrQixFQUFFLE9BQXFCLEVBQUUsS0FBYTtnQkFDcEUsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDaEQsQ0FBQztZQUVEOzs7O2VBSUc7WUFDSSxNQUFNLENBQUMsT0FBcUIsRUFBRSxLQUFhO2dCQUNoRCxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3RDLENBQUM7WUFFUyxXQUFXLENBQUMsUUFBZ0I7Z0JBQ3BDLE9BQU8sS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNyQyxDQUFDO1lBRVMsa0JBQWtCO2dCQUMxQixPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUM7WUFFUyxvQkFBb0I7Z0JBQzVCLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQy9CLENBQUM7WUFFUyxRQUFRO2dCQUNoQixPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7U0FDRjtRQXJEZSxVQUFPLEdBQVcsZUFBZ0I7V0FxRGhEO0FBQ0osQ0FBQyxDQUFDIn0=

@@ -1,4 +0,4 @@

import { ALocalesService } from '../services/locales-base.service';
import { Formatters } from '@ribajs/core';
import { ALocalesService } from "../services/locales-base.service";
import { Formatters } from "@ribajs/core";
declare const _default: (localesService: ALocalesService) => Formatters;
export default _default;

@@ -5,6 +5,6 @@ "use strict";

exports.default = (localesService) => {
return {
t: t_formatter_1.tFormatterWrapper(localesService),
};
return {
t: t_formatter_1.tFormatterWrapper(localesService),
};
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZm9ybWF0dGVycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLCtDQUFrRDtBQUlsRCxrQkFBZSxDQUFDLGNBQStCLEVBQWMsRUFBRTtJQUM3RCxPQUFPO1FBQ0wsQ0FBQyxFQUFFLCtCQUFpQixDQUFDLGNBQWMsQ0FBQztLQUNyQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIn0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZm9ybWF0dGVycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLCtDQUFrRDtBQUlsRCxrQkFBZSxDQUFDLGNBQStCLEVBQWMsRUFBRTtJQUM3RCxPQUFPO1FBQ0wsQ0FBQyxFQUFFLCtCQUFpQixDQUFDLGNBQWMsQ0FBQztLQUNyQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIn0=

@@ -1,3 +0,5 @@

import { Formatter } from '@ribajs/core';
import { ALocalesService } from '../services/locales-base.service';
export declare const tFormatterWrapper: (localesService: ALocalesService) => Formatter;
import { Formatter } from "@ribajs/core";
import { ALocalesService } from "../services/locales-base.service";
export declare const tFormatterWrapper: (
localesService: ALocalesService
) => Formatter;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const translate = async (translateMePathString, localesService, langcode) => {
const properties = translateMePathString.split('.');
const properties = translateMePathString.split(".");
if (!langcode) {
langcode = localesService.getLangcode();
if (!langcode) {
langcode = localesService.getLangcode();
if (!langcode) {
return null;
}
return null;
}
return localesService.get([langcode, ...properties] /*, vars */)
.then((locale) => {
return locale;
}
return localesService
.get([langcode, ...properties] /*, vars */)
.then((locale) => {
return locale;
})
.catch((error) => {
console.error(error);
.catch((error) => {
console.error(error);
});
};
exports.tFormatterWrapper = (localesService) => {
return {
name: 't',
read(translateMePathString, langcode, ...vars) {
return new Promise((resolve, reject) => {
localesService.event.on('changed', () => {
// console.debug('changed');
translate(translateMePathString, localesService, langcode)
.then((locale) => {
resolve(locale);
})
.catch((error) => {
reject(error);
});
});
localesService.event.on('ready', () => {
translate(translateMePathString, localesService, langcode)
.then((locale) => {
resolve(locale);
})
.catch((error) => {
reject(error);
});
});
if (localesService.ready) {
translate(translateMePathString, localesService, langcode)
.then((locale) => {
resolve(locale);
});
}
return {
name: "t",
read(translateMePathString, langcode, ...vars) {
return new Promise((resolve, reject) => {
localesService.event.on("changed", () => {
// console.debug('changed');
translate(translateMePathString, localesService, langcode)
.then((locale) => {
resolve(locale);
})
.catch((error) => {
reject(error);
});
},
};
});
localesService.event.on("ready", () => {
translate(translateMePathString, localesService, langcode)
.then((locale) => {
resolve(locale);
})
.catch((error) => {
reject(error);
});
});
if (localesService.ready) {
translate(translateMePathString, localesService, langcode).then(
(locale) => {
resolve(locale);
}
);
}
});
},
};
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidC5mb3JtYXR0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZm9ybWF0dGVycy90LmZvcm1hdHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUdBLE1BQU0sU0FBUyxHQUFHLEtBQUssRUFBRSxxQkFBNkIsRUFBRSxjQUErQixFQUFFLFFBQWlCLEVBQUUsRUFBRTtJQUM1RyxNQUFNLFVBQVUsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEQsSUFBSSxDQUFDLFFBQVEsRUFBRTtRQUNiLFFBQVEsR0FBRyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNiLE9BQU8sSUFBSSxDQUFDO1NBQ2I7S0FDRjtJQUNELE9BQU8sY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFBLFdBQVcsQ0FBQztTQUM5RCxJQUFJLENBQUMsQ0FBQyxNQUFjLEVBQUUsRUFBRTtRQUN2QixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDLENBQUM7U0FDRCxLQUFLLENBQUMsQ0FBQyxLQUFZLEVBQUUsRUFBRTtRQUN0QixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRVcsUUFBQSxpQkFBaUIsR0FBRyxDQUFDLGNBQStCLEVBQWEsRUFBRTtJQUM5RSxPQUFPO1FBQ0wsSUFBSSxFQUFFLEdBQUc7UUFDVCxJQUFJLENBQUMscUJBQTZCLEVBQUUsUUFBZ0IsRUFBRSxHQUFHLElBQWM7WUFDckUsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtnQkFFckMsY0FBYyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRTtvQkFDdEMsNEJBQTRCO29CQUM1QixTQUFTLENBQUMscUJBQXFCLEVBQUUsY0FBYyxFQUFFLFFBQVEsQ0FBQzt5QkFDekQsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7d0JBQ2YsT0FBTyxDQUFDLE1BQWEsQ0FBQyxDQUFDO29CQUN6QixDQUFDLENBQUM7eUJBQ0QsS0FBSyxDQUFDLENBQUMsS0FBWSxFQUFFLEVBQUU7d0JBQ3RCLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDaEIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsY0FBYyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtvQkFDcEMsU0FBUyxDQUFDLHFCQUFxQixFQUFFLGNBQWMsRUFBRSxRQUFRLENBQUM7eUJBQ3pELElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO3dCQUNmLE9BQU8sQ0FBQyxNQUFhLENBQUMsQ0FBQztvQkFDekIsQ0FBQyxDQUFDO3lCQUNELEtBQUssQ0FBQyxDQUFDLEtBQVksRUFBRSxFQUFFO3dCQUN0QixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ2hCLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO2dCQUVILElBQUksY0FBYyxDQUFDLEtBQUssRUFBRTtvQkFDeEIsU0FBUyxDQUFDLHFCQUFxQixFQUFFLGNBQWMsRUFBRSxRQUFRLENBQUM7eUJBQ3pELElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO3dCQUNmLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDbEIsQ0FBQyxDQUFDLENBQUM7aUJBQ0o7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7S0FDVyxDQUFDO0FBQ2pCLENBQUMsQ0FBQyJ9
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidC5mb3JtYXR0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZm9ybWF0dGVycy90LmZvcm1hdHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUdBLE1BQU0sU0FBUyxHQUFHLEtBQUssRUFBRSxxQkFBNkIsRUFBRSxjQUErQixFQUFFLFFBQWlCLEVBQUUsRUFBRTtJQUM1RyxNQUFNLFVBQVUsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEQsSUFBSSxDQUFDLFFBQVEsRUFBRTtRQUNiLFFBQVEsR0FBRyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNiLE9BQU8sSUFBSSxDQUFDO1NBQ2I7S0FDRjtJQUNELE9BQU8sY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFBLFdBQVcsQ0FBQztTQUM5RCxJQUFJLENBQUMsQ0FBQyxNQUFjLEVBQUUsRUFBRTtRQUN2QixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDLENBQUM7U0FDRCxLQUFLLENBQUMsQ0FBQyxLQUFZLEVBQUUsRUFBRTtRQUN0QixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRVcsUUFBQSxpQkFBaUIsR0FBRyxDQUFDLGNBQStCLEVBQWEsRUFBRTtJQUM5RSxPQUFPO1FBQ0wsSUFBSSxFQUFFLEdBQUc7UUFDVCxJQUFJLENBQUMscUJBQTZCLEVBQUUsUUFBZ0IsRUFBRSxHQUFHLElBQWM7WUFDckUsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtnQkFFckMsY0FBYyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRTtvQkFDdEMsNEJBQTRCO29CQUM1QixTQUFTLENBQUMscUJBQXFCLEVBQUUsY0FBYyxFQUFFLFFBQVEsQ0FBQzt5QkFDekQsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7d0JBQ2YsT0FBTyxDQUFDLE1BQWEsQ0FBQyxDQUFDO29CQUN6QixDQUFDLENBQUM7eUJBQ0QsS0FBSyxDQUFDLENBQUMsS0FBWSxFQUFFLEVBQUU7d0JBQ3RCLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDaEIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsY0FBYyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtvQkFDcEMsU0FBUyxDQUFDLHFCQUFxQixFQUFFLGNBQWMsRUFBRSxRQUFRLENBQUM7eUJBQ3pELElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO3dCQUNmLE9BQU8sQ0FBQyxNQUFhLENBQUMsQ0FBQztvQkFDekIsQ0FBQyxDQUFDO3lCQUNELEtBQUssQ0FBQyxDQUFDLEtBQVksRUFBRSxFQUFFO3dCQUN0QixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ2hCLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO2dCQUVILElBQUksY0FBYyxDQUFDLEtBQUssRUFBRTtvQkFDeEIsU0FBUyxDQUFDLHFCQUFxQixFQUFFLGNBQWMsRUFBRSxRQUFRLENBQUM7eUJBQ3pELElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO3dCQUNmLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDbEIsQ0FBQyxDQUFDLENBQUM7aUJBQ0o7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7S0FDVyxDQUFDO0FBQ2pCLENBQUMsQ0FBQyJ9

@@ -1,9 +0,11 @@

import { RibaModule } from '@ribajs/core';
export * from './binders';
export * from './components';
export * from './formatters';
export * from './interfaces';
export * from './services';
import * as services from './services';
export declare const i18nModule: (localesService: services.ALocalesService) => RibaModule;
import { RibaModule } from "@ribajs/core";
export * from "./binders";
export * from "./components";
export * from "./formatters";
export * from "./interfaces";
export * from "./services";
import * as services from "./services";
export declare const i18nModule: (
localesService: services.ALocalesService
) => RibaModule;
export default i18nModule;
"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
var __importStar = (this && this.__importStar) || function (mod) {
var __importDefault =
(this && this.__importDefault) ||
function (mod) {
return mod && mod.__esModule ? mod : { default: mod };
};
var __importStar =
(this && this.__importStar) ||
function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
if (mod != null)
for (var k in mod)
if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result["default"] = mod;
return result;
};
};
Object.defineProperty(exports, "__esModule", { value: true });

@@ -25,10 +31,10 @@ __export(require("./binders"));

exports.i18nModule = (localesService) => {
return {
binders: binders_1.default(localesService),
components: components_1.default(localesService),
formatters: formatters_1.default(localesService),
services,
};
return {
binders: binders_1.default(localesService),
components: components_1.default(localesService),
formatters: formatters_1.default(localesService),
services,
};
};
exports.default = exports.i18nModule;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsK0JBQTBCO0FBQzFCLGtDQUE2QjtBQUM3QixrQ0FBNkI7QUFFN0IsZ0NBQTJCO0FBRTNCLHdEQUF1QztBQUN2Qyw4REFBNkM7QUFDN0MsOERBQTZDO0FBQzdDLHFEQUF1QztBQUUxQixRQUFBLFVBQVUsR0FBRyxDQUFDLGNBQXdDLEVBQWMsRUFBRTtJQUNqRixPQUFPO1FBQ0wsT0FBTyxFQUFFLGlCQUFjLENBQUMsY0FBYyxDQUFDO1FBQ3ZDLFVBQVUsRUFBRSxvQkFBaUIsQ0FBQyxjQUFjLENBQUM7UUFDN0MsVUFBVSxFQUFFLG9CQUFpQixDQUFDLGNBQWMsQ0FBQztRQUM3QyxRQUFRO0tBQ1QsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLGtCQUFlLGtCQUFVLENBQUMifQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsK0JBQTBCO0FBQzFCLGtDQUE2QjtBQUM3QixrQ0FBNkI7QUFFN0IsZ0NBQTJCO0FBRTNCLHdEQUF1QztBQUN2Qyw4REFBNkM7QUFDN0MsOERBQTZDO0FBQzdDLHFEQUF1QztBQUUxQixRQUFBLFVBQVUsR0FBRyxDQUFDLGNBQXdDLEVBQWMsRUFBRTtJQUNqRixPQUFPO1FBQ0wsT0FBTyxFQUFFLGlCQUFjLENBQUMsY0FBYyxDQUFDO1FBQ3ZDLFVBQVUsRUFBRSxvQkFBaUIsQ0FBQyxjQUFjLENBQUM7UUFDN0MsVUFBVSxFQUFFLG9CQUFpQixDQUFDLGNBQWMsQ0FBQztRQUM3QyxRQUFRO0tBQ1QsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLGtCQUFlLGtCQUFVLENBQUMifQ==

@@ -1,2 +0,2 @@

export * from './langcode';
export * from './local-var';
export * from "./langcode";
export * from "./local-var";
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW50ZXJmYWNlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW50ZXJmYWNlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
export interface Langcode {
code: string;
active: boolean;
code: string;
active: boolean;
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZ2NvZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW50ZXJmYWNlcy9sYW5nY29kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZ2NvZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW50ZXJmYWNlcy9sYW5nY29kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
export interface LocalPluralization {
zero?: string;
one?: string;
two?: string;
other?: string;
zero?: string;
one?: string;
two?: string;
other?: string;
}
export interface LocalVar {
[name: string]: string | LocalPluralization;
[name: string]: string | LocalPluralization;
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtdmFyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ludGVyZmFjZXMvbG9jYWwtdmFyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtdmFyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ludGVyZmFjZXMvbG9jYWwtdmFyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==

@@ -1,3 +0,3 @@

export * from './locales-base.service';
export * from './locales-rest.service';
export * from './locales-static.service';
export * from "./locales-base.service";
export * from "./locales-rest.service";
export * from "./locales-static.service";
"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}

@@ -9,2 +9,2 @@ Object.defineProperty(exports, "__esModule", { value: true });

__export(require("./locales-static.service"));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw0Q0FBdUM7QUFDdkMsNENBQXVDO0FBQ3ZDLDhDQUF5QyJ9
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw0Q0FBdUM7QUFDdkMsNENBQXVDO0FBQ3ZDLDhDQUF5QyJ9

@@ -1,67 +0,73 @@

import { EventDispatcher } from '@ribajs/core';
import { Langcode, LocalPluralization, LocalVar } from '../interfaces';
import { EventDispatcher } from "@ribajs/core";
import { Langcode, LocalPluralization, LocalVar } from "../interfaces";
export declare abstract class ALocalesService {
doNotTranslateDefaultLanguage: boolean;
get ready(): boolean;
event: EventDispatcher;
showMissingTranslation: boolean;
protected _ready: boolean;
/**
* The current setted langcode
*/
protected abstract currentLangcode?: string;
/**
* The default theme langcode before any language was choosed
*/
protected abstract initalLangcode?: string;
constructor(doNotTranslateDefaultLanguage: boolean, showMissingTranslation: boolean);
/**
* Get translation by properties, e.g. `de.form.newsletter_label`
* Properties object must include the language code, e.g. `de`.
* @param properties properties, e.g. `['de', 'form', 'newsletter', 'label']`
* @param force Set this to true if you want to force the request also if the service is not ready, you should use this only one the time
*/
get(properties?: string[], vars?: LocalVar, force?: boolean): Promise<any>;
/**
* Get translation by properties, e.g. `form.newsletter_label`
* Properties object must not include the language code.
* @param properties properties, e.g. `[form', 'newsletter', 'label']`
*/
getByCurrentLang(properties?: string[], vars?: LocalVar): Promise<any>;
getBrowserLangcode(): any;
getHTMLLangcode(): string;
/**
* Get the current langcode,
* if lang was not choosed this is the langcode of the lang attribute of the html element.
* If the language was changed this returns the changed language
*/
getLangcode(): string | undefined;
getInitialLangcode(): string | undefined;
setLangcode(langcode: string, initial?: boolean): void;
getAvailableLangcodes(): Promise<Langcode[]>;
/**
* Parse templates wich can be used to set variables on language strings
*/
parseTemplateVars(el: HTMLElement): LocalVar;
/**
* Parse templates wich have his own translations
*/
parseLocalVars(el: HTMLElement): LocalVar;
/**
* Replace variables on translated string
* @param translateString
* @param vars
*/
setTranslateStringVars(translateString: string, vars: LocalVar): string;
/**
* Get file with all languages
*/
protected abstract getAll(): Promise<any>;
protected init(): Promise<any>;
/**
* see https://help.shopify.com/en/themes/development/theme-store-requirements/internationalizing/translation-filter#pluralization-in-translation-keys
* @param translateString
* @param vars
*/
protected setTranslateStringPluralization(translateObj: LocalPluralization | string, vars: LocalVar): string;
doNotTranslateDefaultLanguage: boolean;
get ready(): boolean;
event: EventDispatcher;
showMissingTranslation: boolean;
protected _ready: boolean;
/**
* The current setted langcode
*/
protected abstract currentLangcode?: string;
/**
* The default theme langcode before any language was choosed
*/
protected abstract initalLangcode?: string;
constructor(
doNotTranslateDefaultLanguage: boolean,
showMissingTranslation: boolean
);
/**
* Get translation by properties, e.g. `de.form.newsletter_label`
* Properties object must include the language code, e.g. `de`.
* @param properties properties, e.g. `['de', 'form', 'newsletter', 'label']`
* @param force Set this to true if you want to force the request also if the service is not ready, you should use this only one the time
*/
get(properties?: string[], vars?: LocalVar, force?: boolean): Promise<any>;
/**
* Get translation by properties, e.g. `form.newsletter_label`
* Properties object must not include the language code.
* @param properties properties, e.g. `[form', 'newsletter', 'label']`
*/
getByCurrentLang(properties?: string[], vars?: LocalVar): Promise<any>;
getBrowserLangcode(): any;
getHTMLLangcode(): string;
/**
* Get the current langcode,
* if lang was not choosed this is the langcode of the lang attribute of the html element.
* If the language was changed this returns the changed language
*/
getLangcode(): string | undefined;
getInitialLangcode(): string | undefined;
setLangcode(langcode: string, initial?: boolean): void;
getAvailableLangcodes(): Promise<Langcode[]>;
/**
* Parse templates wich can be used to set variables on language strings
*/
parseTemplateVars(el: HTMLElement): LocalVar;
/**
* Parse templates wich have his own translations
*/
parseLocalVars(el: HTMLElement): LocalVar;
/**
* Replace variables on translated string
* @param translateString
* @param vars
*/
setTranslateStringVars(translateString: string, vars: LocalVar): string;
/**
* Get file with all languages
*/
protected abstract getAll(): Promise<any>;
protected init(): Promise<any>;
/**
* see https://help.shopify.com/en/themes/development/theme-store-requirements/internationalizing/translation-filter#pluralization-in-translation-keys
* @param translateString
* @param vars
*/
protected setTranslateStringPluralization(
translateObj: LocalPluralization | string,
vars: LocalVar
): string;
}

@@ -5,234 +5,260 @@ "use strict";

class ALocalesService {
constructor(doNotTranslateDefaultLanguage, showMissingTranslation) {
this.doNotTranslateDefaultLanguage = doNotTranslateDefaultLanguage;
this.event = new core_1.EventDispatcher('i18n');
this.showMissingTranslation = false;
this._ready = false;
this.doNotTranslateDefaultLanguage = doNotTranslateDefaultLanguage;
this.showMissingTranslation = showMissingTranslation;
constructor(doNotTranslateDefaultLanguage, showMissingTranslation) {
this.doNotTranslateDefaultLanguage = doNotTranslateDefaultLanguage;
this.event = new core_1.EventDispatcher("i18n");
this.showMissingTranslation = false;
this._ready = false;
this.doNotTranslateDefaultLanguage = doNotTranslateDefaultLanguage;
this.showMissingTranslation = showMissingTranslation;
}
get ready() {
return this._ready;
}
/**
* Get translation by properties, e.g. `de.form.newsletter_label`
* Properties object must include the language code, e.g. `de`.
* @param properties properties, e.g. `['de', 'form', 'newsletter', 'label']`
* @param force Set this to true if you want to force the request also if the service is not ready, you should use this only one the time
*/
async get(properties, vars, force = false) {
if (!this.ready && !force) {
throw new Error("not ready");
}
get ready() {
return this._ready;
}
/**
* Get translation by properties, e.g. `de.form.newsletter_label`
* Properties object must include the language code, e.g. `de`.
* @param properties properties, e.g. `['de', 'form', 'newsletter', 'label']`
* @param force Set this to true if you want to force the request also if the service is not ready, you should use this only one the time
*/
async get(properties, vars, force = false) {
if (!this.ready && !force) {
throw new Error('not ready');
}
return this.getAll()
// extract properties
.then((locals) => {
if (properties && properties.length) {
let local = core_1.Utils.clone(true, locals);
for (const property of properties) {
if (!property) {
return;
}
if (local[property]) {
local = local[property];
}
else {
return null;
}
}
return local;
return (
this.getAll()
// extract properties
.then((locals) => {
if (properties && properties.length) {
let local = core_1.Utils.clone(true, locals);
for (const property of properties) {
if (!property) {
return;
}
if (local[property]) {
local = local[property];
} else {
return null;
}
}
return locals;
})
.then((local) => {
if (local === null && properties) {
console.warn(`WARNING translation missing: "${properties.join('.')}"`, local, properties);
}
return local;
}
return locals;
})
// Replace variables in local string if vars are set
.then((local) => {
if (vars) {
local = this.setTranslateStringPluralization(local, vars);
local = this.setTranslateStringVars(local, vars);
}
return local;
.then((local) => {
if (local === null && properties) {
console.warn(
`WARNING translation missing: "${properties.join(".")}"`,
local,
properties
);
}
return local;
})
.catch((error) => {
console.error(error);
this._ready = false;
return error;
});
// Replace variables in local string if vars are set
.then((local) => {
if (vars) {
local = this.setTranslateStringPluralization(local, vars);
local = this.setTranslateStringVars(local, vars);
}
return local;
})
.catch((error) => {
console.error(error);
this._ready = false;
return error;
})
);
}
/**
* Get translation by properties, e.g. `form.newsletter_label`
* Properties object must not include the language code.
* @param properties properties, e.g. `[form', 'newsletter', 'label']`
*/
async getByCurrentLang(properties = [], vars) {
const langcode = this.getLangcode();
if (!langcode) {
throw new Error("Langcode not found in html tag");
}
/**
* Get translation by properties, e.g. `form.newsletter_label`
* Properties object must not include the language code.
* @param properties properties, e.g. `[form', 'newsletter', 'label']`
*/
async getByCurrentLang(properties = [], vars) {
const langcode = this.getLangcode();
if (!langcode) {
throw new Error('Langcode not found in html tag');
}
return this.get([langcode, ...properties], vars);
return this.get([langcode, ...properties], vars);
}
getBrowserLangcode() {
const lang = navigator.language || navigator.userLanguage;
const simplified = lang.split("-")[0].toLowerCase();
return simplified;
}
getHTMLLangcode() {
const langcode = document.documentElement
? document.documentElement.lang
: "en";
return langcode;
}
/**
* Get the current langcode,
* if lang was not choosed this is the langcode of the lang attribute of the html element.
* If the language was changed this returns the changed language
*/
getLangcode() {
return this.currentLangcode;
}
getInitialLangcode() {
return this.initalLangcode;
}
setLangcode(langcode, initial = false) {
if (this.currentLangcode !== langcode) {
this.currentLangcode = langcode;
// $('html').attr('lang', langcode);
if (document.documentElement) {
document.documentElement.lang = langcode;
}
this.event.trigger("changed", langcode, initial);
}
getBrowserLangcode() {
const lang = navigator.language || navigator.userLanguage;
const simplified = lang.split('-')[0].toLowerCase();
return simplified;
}
async getAvailableLangcodes() {
const activeCode = this.getLangcode();
return this.get(undefined, undefined, true).then((locals) => {
const langcodes = [];
Object.keys(locals).forEach((langcode) => {
langcodes.push({
code: langcode,
active: langcode === activeCode,
});
});
return langcodes;
});
}
/**
* Parse templates wich can be used to set variables on language strings
*/
parseTemplateVars(el) {
const templates = el.querySelectorAll("template");
const vars = {};
templates.forEach((template) => {
const name = template.getAttribute("name");
if (name !== null) {
vars[name] = template.innerHTML.trim();
}
});
return vars;
}
/**
* Parse templates wich have his own translations
*/
parseLocalVars(el) {
const templates = el.querySelectorAll("template");
const vars = {};
templates.forEach((template) => {
const lang = template.getAttribute("lang");
if (lang !== null) {
vars[lang] = template.innerHTML.trim();
}
});
return vars;
}
/**
* Replace variables on translated string
* @param translateString
* @param vars
*/
setTranslateStringVars(translateString, vars) {
if (
!translateString ||
Object.keys(vars).length === 0 ||
typeof translateString.match !== "function"
) {
return translateString;
}
getHTMLLangcode() {
const langcode = document.documentElement ? document.documentElement.lang : 'en';
return langcode;
}
/**
* Get the current langcode,
* if lang was not choosed this is the langcode of the lang attribute of the html element.
* If the language was changed this returns the changed language
*/
getLangcode() {
return this.currentLangcode;
}
getInitialLangcode() {
return this.initalLangcode;
}
setLangcode(langcode, initial = false) {
if (this.currentLangcode !== langcode) {
this.currentLangcode = langcode;
// $('html').attr('lang', langcode);
if (document.documentElement) {
document.documentElement.lang = langcode;
}
this.event.trigger('changed', langcode, initial);
const matches = translateString.match(/{{\s*?[A-Za-z0-9_-]+\s*?}}/gm);
if (matches) {
for (const match of matches) {
if (match) {
const varName = match.replace(/{{\s*|\s*}}/gm, "");
if (
typeof vars[varName] === "string" ||
typeof vars[varName] === "number"
) {
translateString = translateString.replace(match, vars[varName]);
}
}
}
}
async getAvailableLangcodes() {
const activeCode = this.getLangcode();
return this.get(undefined, undefined, true)
.then((locals) => {
const langcodes = [];
Object.keys(locals).forEach((langcode) => {
langcodes.push({
code: langcode,
active: langcode === activeCode,
});
});
return langcodes;
});
return translateString;
}
async init() {
this.initalLangcode = this.getHTMLLangcode();
this.currentLangcode = this.initalLangcode;
if (!this.initalLangcode) {
throw new Error(
`The lang attribute on the html element is requred to detect the default theme language: ${this.initalLangcode}`
);
}
/**
* Parse templates wich can be used to set variables on language strings
*/
parseTemplateVars(el) {
const templates = el.querySelectorAll('template');
const vars = {};
templates.forEach((template) => {
const name = template.getAttribute('name');
if (name !== null) {
vars[name] = template.innerHTML.trim();
}
});
return vars;
}
/**
* Parse templates wich have his own translations
*/
parseLocalVars(el) {
const templates = el.querySelectorAll('template');
const vars = {};
templates.forEach((template) => {
const lang = template.getAttribute('lang');
if (lang !== null) {
vars[lang] = template.innerHTML.trim();
}
});
return vars;
}
/**
* Replace variables on translated string
* @param translateString
* @param vars
*/
setTranslateStringVars(translateString, vars) {
if (!translateString || Object.keys(vars).length === 0 || typeof (translateString.match) !== 'function') {
return translateString;
// Detect browser language and switch to this language when available
const browserLangcode = this.getBrowserLangcode();
return this.getAvailableLangcodes()
.then((availableLangcodes) => {
let browserLangFound = false;
for (const availableLangcodeObj of availableLangcodes) {
if (availableLangcodeObj.code === browserLangcode) {
browserLangFound = true;
}
}
const matches = translateString.match(/{{\s*?[A-Za-z0-9_-]+\s*?}}/gm);
if (matches) {
for (const match of matches) {
if (match) {
const varName = match.replace(/{{\s*|\s*}}/gm, '');
if (typeof (vars[varName]) === 'string' || typeof (vars[varName]) === 'number') {
translateString = translateString.replace(match, vars[varName]);
}
}
}
// only switch language if the browser language is not the default language (if doNotTranslateDefaultLanguage is true)
if (
!this.doNotTranslateDefaultLanguage ||
(browserLangFound && browserLangcode !== this.currentLangcode)
) {
this.setLangcode(browserLangcode, true);
}
return translateString;
}
async init() {
this.initalLangcode = this.getHTMLLangcode();
this.currentLangcode = this.initalLangcode;
if (!this.initalLangcode) {
throw new Error(`The lang attribute on the html element is requred to detect the default theme language: ${this.initalLangcode}`);
return availableLangcodes;
})
.then((availableLangcodes) => {
this._ready = true;
// If the current langcode is not the inital langcode then translation is needed
const translationNeeded =
this.currentLangcode !== this.initalLangcode ||
!this.doNotTranslateDefaultLanguage;
this.event.trigger("ready", this.currentLangcode, translationNeeded);
})
.catch((error) => {
console.error(error);
this._ready = false;
return error;
});
}
/**
* see https://help.shopify.com/en/themes/development/theme-store-requirements/internationalizing/translation-filter#pluralization-in-translation-keys
* @param translateString
* @param vars
*/
setTranslateStringPluralization(translateObj, vars) {
if (
vars.count &&
typeof translateObj === "object" &&
translateObj !== null
) {
const count = Number(vars.count);
if (count === 0) {
if (translateObj.zero) {
return translateObj.zero;
}
// Detect browser language and switch to this language when available
const browserLangcode = this.getBrowserLangcode();
return this.getAvailableLangcodes()
.then((availableLangcodes) => {
let browserLangFound = false;
for (const availableLangcodeObj of availableLangcodes) {
if (availableLangcodeObj.code === browserLangcode) {
browserLangFound = true;
}
}
// only switch language if the browser language is not the default language (if doNotTranslateDefaultLanguage is true)
if (!this.doNotTranslateDefaultLanguage || (browserLangFound && browserLangcode !== this.currentLangcode)) {
this.setLangcode(browserLangcode, true);
}
return availableLangcodes;
})
.then((availableLangcodes) => {
this._ready = true;
// If the current langcode is not the inital langcode then translation is needed
const translationNeeded = this.currentLangcode !== this.initalLangcode || !this.doNotTranslateDefaultLanguage;
this.event.trigger('ready', this.currentLangcode, translationNeeded);
})
.catch((error) => {
console.error(error);
this._ready = false;
return error;
});
}
/**
* see https://help.shopify.com/en/themes/development/theme-store-requirements/internationalizing/translation-filter#pluralization-in-translation-keys
* @param translateString
* @param vars
*/
setTranslateStringPluralization(translateObj, vars) {
if (vars.count && typeof (translateObj) === 'object' && translateObj !== null) {
const count = Number(vars.count);
if (count === 0) {
if (translateObj.zero) {
return translateObj.zero;
}
}
else if (count === 1) {
if (translateObj.one) {
return translateObj.one;
}
}
else if (count === 2) {
if (translateObj.two) {
return translateObj.two;
}
}
} else if (count === 1) {
if (translateObj.one) {
return translateObj.one;
}
if (typeof (translateObj) === 'object' && translateObj !== null && translateObj.other) {
return translateObj.other;
} else if (count === 2) {
if (translateObj.two) {
return translateObj.two;
}
return translateObj;
}
}
if (
typeof translateObj === "object" &&
translateObj !== null &&
translateObj.other
) {
return translateObj.other;
}
return translateObj;
}
}
exports.ALocalesService = ALocalesService;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxlcy1iYXNlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvbG9jYWxlcy1iYXNlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx1Q0FBc0Q7QUFHdEQsTUFBc0IsZUFBZTtJQXNCbkMsWUFBbUIsNkJBQXNDLEVBQUUsc0JBQStCO1FBQXZFLGtDQUE2QixHQUE3Qiw2QkFBNkIsQ0FBUztRQWhCbEQsVUFBSyxHQUFHLElBQUksc0JBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVwQywyQkFBc0IsR0FBWSxLQUFLLENBQUM7UUFFckMsV0FBTSxHQUFZLEtBQUssQ0FBQztRQWFoQyxJQUFJLENBQUMsNkJBQTZCLEdBQUcsNkJBQTZCLENBQUM7UUFDbkUsSUFBSSxDQUFDLHNCQUFzQixHQUFHLHNCQUFzQixDQUFDO0lBQ3ZELENBQUM7SUF2QkQsSUFBVyxLQUFLO1FBQ2QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUF1QkQ7Ozs7O09BS0c7SUFDSSxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQXFCLEVBQUUsSUFBZSxFQUFFLFFBQWlCLEtBQUs7UUFDN0UsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUM5QjtRQUNELE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNwQixxQkFBcUI7YUFDcEIsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDZixJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFO2dCQUNuQyxJQUFJLEtBQUssR0FBUSxZQUFLLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDM0MsS0FBSyxNQUFNLFFBQVEsSUFBSSxVQUFVLEVBQUU7b0JBQ2pDLElBQUksQ0FBQyxRQUFR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
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxlcy1iYXNlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvbG9jYWxlcy1iYXNlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx1Q0FBc0Q7QUFHdEQsTUFBc0IsZUFBZTtJQXNCbkMsWUFBbUIsNkJBQXNDLEVBQUUsc0JBQStCO1FBQXZFLGtDQUE2QixHQUE3Qiw2QkFBNkIsQ0FBUztRQWhCbEQsVUFBSyxHQUFHLElBQUksc0JBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVwQywyQkFBc0IsR0FBWSxLQUFLLENBQUM7UUFFckMsV0FBTSxHQUFZLEtBQUssQ0FBQztRQWFoQyxJQUFJLENBQUMsNkJBQTZCLEdBQUcsNkJBQTZCLENBQUM7UUFDbkUsSUFBSSxDQUFDLHNCQUFzQixHQUFHLHNCQUFzQixDQUFDO0lBQ3ZELENBQUM7SUF2QkQsSUFBVyxLQUFLO1FBQ2QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUF1QkQ7Ozs7O09BS0c7SUFDSSxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQXFCLEVBQUUsSUFBZSxFQUFFLFFBQWlCLEtBQUs7UUFDN0UsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUM5QjtRQUNELE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNwQixxQkFBcUI7YUFDcEIsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDZixJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFO2dCQUNuQyxJQUFJLEtBQUssR0FBUSxZQUFLLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDM0MsS0FBSyxNQUFNLFFBQVEsSUFBSSxVQUFVLEVBQUU7b0JBQ2pDLElBQUksQ0FBQyxRQUFRLEVBQUU7d0JBQ2IsT0FBTztxQkFDUjtvQkFDRCxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRTt3QkFDbkIsS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztxQkFDekI7eUJBQU07d0JBQ0wsT0FBTyxJQUFJLENBQUM7cUJBQ2I7aUJBQ0Y7Z0JBQ0QsT0FBTyxLQUFLLENBQUM7YUFDZDtZQUNELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQzthQUNELElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2QsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLFVBQVUsRUFBRTtnQkFDaEMsT0FBTyxDQUFDLElBQUksQ0FBQyxpQ0FBaUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQzthQUMzRjtZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxDQUFDO1lBQ0Ysb0RBQW9EO2FBQ25ELElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2QsSUFBSSxJQUFJLEVBQUU7Z0JBQ1IsS0FBSyxHQUFHLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzFELEtBQUssR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ2xEO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUM7YUFDRCxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDcEIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLGdCQUFnQixDQUFDLGFBQXVCLEVBQUUsRUFBRSxJQUFlO1FBQ3RFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1NBQ25EO1FBQ0QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEdBQUcsVUFBVSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVNLGtCQUFrQjtRQUN2QixNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsUUFBUSxJQUFLLFNBQWlCLENBQUMsWUFBWSxDQUFDO1FBQ25FLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEQsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVNLGVBQWU7UUFDcEIsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNqRixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFdBQVc7UUFDaEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7SUFFTSxrQkFBa0I7UUFDdkIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFTSxXQUFXLENBQUMsUUFBZ0IsRUFBRSxVQUFtQixLQUFLO1FBQzNELElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxRQUFRLEVBQUU7WUFDckMsSUFBSSxDQUFDLGVBQWUsR0FBRyxRQUFRLENBQUM7WUFFaEMsb0NBQW9DO1lBQ3BDLElBQUksUUFBUSxDQUFDLGVBQWUsRUFBRTtnQkFDNUIsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO2FBQzFDO1lBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNsRDtJQUNILENBQUM7SUFFTSxLQUFLLENBQUMscUJBQXFCO1FBQ2hDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN0QyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUM7YUFDMUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDZixNQUFNLFNBQVMsR0FBZSxFQUFFLENBQUM7WUFDakMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDdkMsU0FBUyxDQUFDLElBQUksQ0FBQztvQkFDYixJQUFJLEVBQUUsUUFBUTtvQkFDZCxNQUFNLEVBQUUsUUFBUSxLQUFLLFVBQVU7aUJBQ2hDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxpQkFBaUIsQ0FBQyxFQUFlO1FBQ3RDLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBc0IsVUFBVSxDQUFDLENBQUM7UUFDdkUsTUFBTSxJQUFJLEdBQWEsRUFBRSxDQUFDO1FBQzFCLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUM3QixNQUFNLElBQUksR0FBa0IsUUFBUSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxRCxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO2FBQ3hDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNJLGNBQWMsQ0FBQyxFQUFlO1FBQ25DLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBc0IsVUFBVSxDQUFDLENBQUM7UUFDdkUsTUFBTSxJQUFJLEdBQWEsRUFBRSxDQUFDO1FBQzFCLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUM3QixNQUFNLElBQUksR0FBa0IsUUFBUSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxRCxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO2FBQ3hDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksc0JBQXNCLENBQUMsZUFBdUIsRUFBRSxJQUFjO1FBQ25FLElBQUksQ0FBQyxlQUFlLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLE9BQU0sQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEtBQUssVUFBVSxFQUFFO1lBQ3RHLE9BQU8sZUFBZSxDQUFDO1NBQ3hCO1FBQ0QsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQ3RFLElBQUksT0FBTyxFQUFFO1lBQ1gsS0FBSyxNQUFNLEtBQUssSUFBSSxPQUFPLEVBQUU7Z0JBQzNCLElBQUksS0FBSyxFQUFFO29CQUNULE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUNuRCxJQUFJLE9BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxRQUFRLElBQUksT0FBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTt3QkFDNUUsZUFBZSxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQVcsQ0FBQyxDQUFDO3FCQUMzRTtpQkFDRjthQUNGO1NBQ0Y7UUFDRCxPQUFPLGVBQWUsQ0FBQztJQUN6QixDQUFDO0lBT1MsS0FBSyxDQUFDLElBQUk7UUFDbEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDN0MsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFHO1lBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkZBQTJGLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1NBQ25JO1FBQ0QscUVBQXFFO1FBQ3JFLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ2xELE9BQU8sSUFBSSxDQUFDLHFCQUFxQixFQUFFO2FBQ2xDLElBQUksQ0FBQyxDQUFDLGtCQUFrQixFQUFFLEVBQUU7WUFDM0IsSUFBSSxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7WUFDN0IsS0FBSyxNQUFNLG9CQUFvQixJQUFJLGtCQUFrQixFQUFFO2dCQUNyRCxJQUFJLG9CQUFvQixDQUFDLElBQUksS0FBSyxlQUFlLEVBQUU7b0JBQ2pELGdCQUFnQixHQUFHLElBQUksQ0FBQztpQkFDekI7YUFDRjtZQUNELHNIQUFzSDtZQUN0SCxJQUFJLENBQUMsSUFBSSxDQUFDLDZCQUE2QixJQUFJLENBQUMsZ0JBQWdCLElBQUksZUFBZSxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRTtnQkFDekcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDekM7WUFDRCxPQUFPLGtCQUFrQixDQUFDO1FBQzVCLENBQUMsQ0FBQzthQUNELElBQUksQ0FBQyxDQUFDLGtCQUFrQixFQUFFLEVBQUU7WUFDM0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDbkIsZ0ZBQWdGO1lBQ2hGLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLGVBQWUsS0FBSyxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDO1lBQzlHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDdkUsQ0FBQyxDQUFDO2FBQ0QsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ3BCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNPLCtCQUErQixDQUFDLFlBQXlDLEVBQUUsSUFBYztRQUNqRyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLFFBQVEsSUFBSSxZQUFZLEtBQUssSUFBSSxFQUFFO1lBQzVFLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakMsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO2dCQUNmLElBQUksWUFBWSxDQUFDLElBQUksRUFBRTtvQkFDckIsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDO2lCQUMxQjthQUNGO2lCQUFNLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtnQkFDdEIsSUFBSSxZQUFZLENBQUMsR0FBRyxFQUFFO29CQUNwQixPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUM7aUJBQ3pCO2FBQ0Y7aUJBQU0sSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO2dCQUN0QixJQUFJLFlBQVksQ0FBQyxHQUFHLEVBQUU7b0JBQ3BCLE9BQU8sWUFBWSxDQUFDLEdBQUcsQ0FBQztpQkFDekI7YUFDRjtTQUNGO1FBRUQsSUFBSSxPQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssUUFBUSxJQUFJLFlBQVksS0FBSyxJQUFJLElBQUksWUFBWSxDQUFDLEtBQUssRUFBRTtZQUNwRixPQUFPLFlBQVksQ0FBQyxLQUFLLENBQUM7U0FDM0I7UUFDRCxPQUFPLFlBQXNCLENBQUM7SUFDaEMsQ0FBQztDQUNGO0FBdFFELDBDQXNRQyJ9

@@ -1,2 +0,2 @@

import { ALocalesService } from './locales-base.service';
import { ALocalesService } from "./locales-base.service";
/**

@@ -6,22 +6,26 @@ * LocalesRestService get locales object from url

export declare class LocalesRestService extends ALocalesService {
protected url: string;
static instances: {
[url: string]: LocalesRestService;
};
static getInstance(url: string): LocalesRestService;
locales: any;
/**
* The current setted langcode
*/
protected currentLangcode?: string;
/**
* The default theme langcode before any language was choosed
*/
protected initalLangcode?: string;
constructor(url: string, doNotTranslateDefaultLanguage?: boolean, showMissingTranslation?: boolean);
/**
* Get file with all languages
* @param themeID
*/
protected getAll(url?: string): Promise<any>;
protected url: string;
static instances: {
[url: string]: LocalesRestService;
};
static getInstance(url: string): LocalesRestService;
locales: any;
/**
* The current setted langcode
*/
protected currentLangcode?: string;
/**
* The default theme langcode before any language was choosed
*/
protected initalLangcode?: string;
constructor(
url: string,
doNotTranslateDefaultLanguage?: boolean,
showMissingTranslation?: boolean
);
/**
* Get file with all languages
* @param themeID
*/
protected getAll(url?: string): Promise<any>;
}

@@ -9,45 +9,48 @@ "use strict";

class LocalesRestService extends locales_base_service_1.ALocalesService {
constructor(url, doNotTranslateDefaultLanguage = false, showMissingTranslation = false) {
super(doNotTranslateDefaultLanguage, showMissingTranslation);
this.url = url;
this.locales = {};
this.url = url;
if (!this.url) {
throw new Error(`Url is requred!`);
}
if (LocalesRestService.instances[this.url]) {
return LocalesRestService.instances[this.url];
}
this.init();
LocalesRestService.instances[this.url] = this;
constructor(
url,
doNotTranslateDefaultLanguage = false,
showMissingTranslation = false
) {
super(doNotTranslateDefaultLanguage, showMissingTranslation);
this.url = url;
this.locales = {};
this.url = url;
if (!this.url) {
throw new Error(`Url is requred!`);
}
static getInstance(url) {
return LocalesRestService.instances[url];
if (LocalesRestService.instances[this.url]) {
return LocalesRestService.instances[this.url];
}
/**
* Get file with all languages
* @param themeID
*/
async getAll(url) {
if (!url) {
url = this.url;
}
if (!url) {
throw new Error(`Url is requred!`);
}
if (window.Shopify.shop) {
url = url + `?shop=${window.Shopify.shop}`;
}
if (this.locales[url]) {
return this.locales[url];
}
return core_1.HttpService.getJSON(url)
.then((locales) => {
this.locales[url] = locales;
return this.locales[url];
});
this.init();
LocalesRestService.instances[this.url] = this;
}
static getInstance(url) {
return LocalesRestService.instances[url];
}
/**
* Get file with all languages
* @param themeID
*/
async getAll(url) {
if (!url) {
url = this.url;
}
if (!url) {
throw new Error(`Url is requred!`);
}
if (window.Shopify.shop) {
url = url + `?shop=${window.Shopify.shop}`;
}
if (this.locales[url]) {
return this.locales[url];
}
return core_1.HttpService.getJSON(url).then((locales) => {
this.locales[url] = locales;
return this.locales[url];
});
}
}
exports.LocalesRestService = LocalesRestService;
LocalesRestService.instances = {};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxlcy1yZXN0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvbG9jYWxlcy1yZXN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx1Q0FBMkM7QUFDM0MsaUVBQXlEO0FBRXpEOztHQUVHO0FBQ0gsTUFBYSxrQkFBbUIsU0FBUSxzQ0FBZTtJQXNCckQsWUFBc0IsR0FBVyxFQUFFLGdDQUF5QyxLQUFLLEVBQUUseUJBQWtDLEtBQUs7UUFDeEgsS0FBSyxDQUFDLDZCQUE2QixFQUFFLHNCQUFzQixDQUFDLENBQUM7UUFEekMsUUFBRyxHQUFILEdBQUcsQ0FBUTtRQVoxQixZQUFPLEdBQVEsRUFBRSxDQUFDO1FBZXZCLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBRWYsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDYixNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7U0FDcEM7UUFFRCxJQUFJLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDMUMsT0FBTyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQy9DO1FBRUQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1osa0JBQWtCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDaEQsQ0FBQztJQS9CTSxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQVc7UUFDbkMsT0FBTyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQStCRDs7O09BR0c7SUFDTyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQVk7UUFDakMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNSLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1NBQ2hCO1FBRUQsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNSLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztTQUNwQztRQUVELElBQUssTUFBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7WUFDaEMsR0FBRyxHQUFHLEdBQUcsR0FBRyxTQUFVLE1BQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDckQ7UUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDckIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzFCO1FBQ0QsT0FBTyxrQkFBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7YUFDOUIsSUFBSSxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7WUFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFhLENBQUMsR0FBRyxPQUFPLENBQUM7WUFDdEMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQWEsQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUEvREgsZ0RBaUVDO0FBL0RlLDRCQUFTLEdBRW5CLEVBQUUsQ0FBQyJ9
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxlcy1yZXN0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvbG9jYWxlcy1yZXN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx1Q0FBMkM7QUFDM0MsaUVBQXlEO0FBRXpEOztHQUVHO0FBQ0gsTUFBYSxrQkFBbUIsU0FBUSxzQ0FBZTtJQXNCckQsWUFBc0IsR0FBVyxFQUFFLGdDQUF5QyxLQUFLLEVBQUUseUJBQWtDLEtBQUs7UUFDeEgsS0FBSyxDQUFDLDZCQUE2QixFQUFFLHNCQUFzQixDQUFDLENBQUM7UUFEekMsUUFBRyxHQUFILEdBQUcsQ0FBUTtRQVoxQixZQUFPLEdBQVEsRUFBRSxDQUFDO1FBZXZCLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBRWYsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDYixNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7U0FDcEM7UUFFRCxJQUFJLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDMUMsT0FBTyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQy9DO1FBRUQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1osa0JBQWtCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDaEQsQ0FBQztJQS9CTSxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQVc7UUFDbkMsT0FBTyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQStCRDs7O09BR0c7SUFDTyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQVk7UUFDakMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNSLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1NBQ2hCO1FBRUQsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNSLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztTQUNwQztRQUVELElBQUssTUFBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7WUFDaEMsR0FBRyxHQUFHLEdBQUcsR0FBRyxTQUFVLE1BQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDckQ7UUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDckIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzFCO1FBQ0QsT0FBTyxrQkFBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7YUFDOUIsSUFBSSxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7WUFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFhLENBQUMsR0FBRyxPQUFPLENBQUM7WUFDdEMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQWEsQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUEvREgsZ0RBaUVDO0FBL0RlLDRCQUFTLEdBRW5CLEVBQUUsQ0FBQyJ9

@@ -1,23 +0,28 @@

import { ALocalesService } from './locales-base.service';
import { ALocalesService } from "./locales-base.service";
export declare class LocalesStaticService extends ALocalesService {
protected locales: any;
protected id?: string | undefined;
static instances: {
[id: string]: LocalesStaticService;
};
static getInstance(id?: string): LocalesStaticService;
/**
* The current setted langcode
*/
protected currentLangcode?: string;
/**
* The default theme langcode before any language was choosed
*/
protected initalLangcode?: string;
constructor(locales: any, id?: string | undefined, doNotTranslateDefaultLanguage?: boolean, showMissingTranslation?: boolean);
/**
* Get file with all languages
* @param themeID
*/
protected getAll(themeID?: number): Promise<any>;
protected locales: any;
protected id?: string | undefined;
static instances: {
[id: string]: LocalesStaticService;
};
static getInstance(id?: string): LocalesStaticService;
/**
* The current setted langcode
*/
protected currentLangcode?: string;
/**
* The default theme langcode before any language was choosed
*/
protected initalLangcode?: string;
constructor(
locales: any,
id?: string | undefined,
doNotTranslateDefaultLanguage?: boolean,
showMissingTranslation?: boolean
);
/**
* Get file with all languages
* @param themeID
*/
protected getAll(themeID?: number): Promise<any>;
}

@@ -5,29 +5,34 @@ "use strict";

class LocalesStaticService extends locales_base_service_1.ALocalesService {
constructor(locales, id, doNotTranslateDefaultLanguage = false, showMissingTranslation = false) {
super(doNotTranslateDefaultLanguage, showMissingTranslation);
this.locales = locales;
this.id = id;
if (!id) {
id = 'main';
}
this.locales = locales;
if (LocalesStaticService.instances[id]) {
return LocalesStaticService.instances[id];
}
this.init();
LocalesStaticService.instances[id] = this;
constructor(
locales,
id,
doNotTranslateDefaultLanguage = false,
showMissingTranslation = false
) {
super(doNotTranslateDefaultLanguage, showMissingTranslation);
this.locales = locales;
this.id = id;
if (!id) {
id = "main";
}
static getInstance(id = 'main') {
return LocalesStaticService.instances[id];
this.locales = locales;
if (LocalesStaticService.instances[id]) {
return LocalesStaticService.instances[id];
}
/**
* Get file with all languages
* @param themeID
*/
async getAll(themeID) {
return this.locales;
}
this.init();
LocalesStaticService.instances[id] = this;
}
static getInstance(id = "main") {
return LocalesStaticService.instances[id];
}
/**
* Get file with all languages
* @param themeID
*/
async getAll(themeID) {
return this.locales;
}
}
exports.LocalesStaticService = LocalesStaticService;
LocalesStaticService.instances = {};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxlcy1zdGF0aWMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9sb2NhbGVzLXN0YXRpYy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsaUVBQXlEO0FBRXpELE1BQWEsb0JBQXFCLFNBQVEsc0NBQWU7SUFvQnZELFlBQXNCLE9BQVksRUFBWSxFQUFXLEVBQUUsZ0NBQXlDLEtBQUssRUFBRSx5QkFBa0MsS0FBSztRQUNoSixLQUFLLENBQUMsNkJBQTZCLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztRQUR6QyxZQUFPLEdBQVAsT0FBTyxDQUFLO1FBQVksT0FBRSxHQUFGLEVBQUUsQ0FBUztRQUV2RCxJQUFJLENBQUMsRUFBRSxFQUFFO1lBQ1AsRUFBRSxHQUFHLE1BQU0sQ0FBQztTQUNiO1FBRUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFFdkIsSUFBSSxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDdEMsT0FBTyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDM0M7UUFFRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDWixvQkFBb0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQzVDLENBQUM7SUE1Qk0sTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFhLE1BQU07UUFDM0MsT0FBTyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQTRCRDs7O09BR0c7SUFDTyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQWdCO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDOztBQTFDSCxvREE0Q0M7QUExQ2UsOEJBQVMsR0FFbkIsRUFBRSxDQUFDIn0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxlcy1zdGF0aWMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9sb2NhbGVzLXN0YXRpYy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsaUVBQXlEO0FBRXpELE1BQWEsb0JBQXFCLFNBQVEsc0NBQWU7SUFvQnZELFlBQXNCLE9BQVksRUFBWSxFQUFXLEVBQUUsZ0NBQXlDLEtBQUssRUFBRSx5QkFBa0MsS0FBSztRQUNoSixLQUFLLENBQUMsNkJBQTZCLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztRQUR6QyxZQUFPLEdBQVAsT0FBTyxDQUFLO1FBQVksT0FBRSxHQUFGLEVBQUUsQ0FBUztRQUV2RCxJQUFJLENBQUMsRUFBRSxFQUFFO1lBQ1AsRUFBRSxHQUFHLE1BQU0sQ0FBQztTQUNiO1FBRUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFFdkIsSUFBSSxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDdEMsT0FBTyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDM0M7UUFFRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDWixvQkFBb0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQzVDLENBQUM7SUE1Qk0sTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFhLE1BQU07UUFDM0MsT0FBTyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQTRCRDs7O09BR0c7SUFDTyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQWdCO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDOztBQTFDSCxvREE0Q0M7QUExQ2UsOEJBQVMsR0FFbkIsRUFBRSxDQUFDIn0=

@@ -1,1 +0,1 @@

export * from './i18n/i18n-star.binder';
export * from "./i18n/i18n-star.binder";
"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
Object.defineProperty(exports, "__esModule", { value: true });
__export(require("./i18n/i18n-star.binder"));

@@ -1,9 +0,9 @@

import { BinderWrapper } from '@ribajs/core';
import { BinderWrapper } from "@ribajs/core";
export interface BinderAttributeChangedEvent {
detail: {
name: string;
oldValue: string;
newValue: string;
namespace: null;
};
detail: {
name: string;
oldValue: string;
newValue: string;
namespace: null;
};
}

@@ -10,0 +10,0 @@ /**

@@ -8,168 +8,211 @@ "use strict";

exports.i18nStarBinderWrapper = (localesService) => {
return {
name: 'i18n-*',
block: false,
priority: 0,
bind(el) {
const getElementData = () => {
const customData = {};
customData.type = el.type;
customData.tagName = el.tagName;
customData.contenteditable = el.getAttribute('contenteditable') ? true : false;
customData.isRadio = customData.tagName === 'INPUT' && customData.type === 'radio';
return customData;
};
this.customData = getElementData();
this.customData.i18n = localesService;
this.customData.vars = {};
this.customData.translateMePathString = null;
this.customData.properties = [];
this.customData.attributeName = this.args[0].toString();
this.customData.applyTranslation = (locale) => {
if (!locale) {
if (this.customData.i18n.showMissingTranslation) {
locale = `translation missing: "${this.customData.properties.join('.')}"`;
}
else {
return;
}
}
if (this.customData.attributeName === 'html') {
el.innerHTML = locale;
}
else if (this.customData.attributeName === 'text') {
el.innerText = locale;
}
else if (this.customData.attributeName === 'value') {
// TODO support also: https://github.com/JumpLinkNetwork/tinybind/blob/master/src/binders/basic/value.binder.ts#L51
if (this.customData.contenteditable) {
el.innerHTML = locale;
}
else {
el.value = locale;
}
}
else {
el.setAttribute(this.customData.attributeName, locale);
}
};
this.customData.parseVars = (_el) => {
// parse templates to vars
const newVars = this.customData.i18n.parseTemplateVars(_el);
this.customData.vars = core_1.Utils.concat(true, this.customData.vars, newVars);
// if (Object.keys(this.customData.vars).length) {
// console.warn('parsed templates vars', this.customData.vars);
// }
// parse data attributes to vars
// Vanilla works better than jquery data function?
this.customData.vars = core_1.Utils.concat(true, this.customData.vars, _el.dataset);
// if (Object.keys(this.customData.vars).length) {
// console.warn('parsed attribute vars', this.customData.vars);
// }
// Parse templates wich have his own translations
this.customData.langVars = this.customData.i18n.parseLocalVars(_el);
// if (this.customData.langVars && Object.keys(this.customData.langVars).length) {
// console.warn('parsed own translations', this.customData.langVars);
// }
};
this.customData.translate = (langcode) => {
// If language service is not ready do nothing
if (!this.customData.i18n.ready) {
return;
}
if (!langcode) {
langcode = this.customData.i18n.getLangcode();
if (!langcode) {
console.error('Langcode is requred', langcode);
return;
}
}
// translate by using the already translated language variable
if (this.customData.langVars && this.customData.langVars[langcode]) {
return this.customData.applyTranslation(this.customData.langVars[langcode]);
}
if (!this.customData.properties || this.customData.properties.length === 0) {
// get the default translation if available
if (this.customData.langVars && this.customData.langVars.default) {
// console.warn('Translate by default', this.customData.langVars.default);
return this.customData.applyTranslation(this.customData.langVars.default);
}
}
// translate by properies, e.g. de.cart.add
return this.customData.i18n.get([langcode, ...this.customData.properties], this.customData.vars)
.then((local) => {
if (local && typeof (local) === 'string') {
// console.warn('Translate by properties', [langcode, ...this.customData.properties], local);
return this.customData.applyTranslation(local);
}
// get the default translation if available
if (this.customData.langVars && this.customData.langVars.default) {
// console.warn('Translate by default as fallback', this.customData.langVars.default);
return this.customData.applyTranslation(this.customData.langVars.default);
}
return this.customData.applyTranslation(null);
})
.catch((error) => {
console.error(error);
});
};
this.customData.onAttributeChanged = (data) => {
if (data.detail.name.startsWith('data-')) {
const varName = data.detail.name.slice(5);
const newVar = {};
newVar[varName] = data.detail.newValue;
// console.warn('binder-changed newVar', newVar);
this.customData.vars = core_1.Utils.concat(true, this.customData.vars, newVar);
this.customData.translate();
}
};
this.customData.onLanguageChanged = (langcode, initial) => {
// Do not translate on inital language change, we use the ready event for this
if (!initial) {
this.customData.translate(langcode);
}
};
/**
* Initial stuff wee need to do after the language service is ready
*/
this.customData.initOnReady = (langcode, translationNeeded) => {
// Translate on translation service ready if needed
if (translationNeeded) {
this.customData.translate(langcode);
}
// Translate if language changes
this.customData.i18n.event.on('changed', this.customData.onLanguageChanged);
// Translate if binder attribute event is changed
el.addEventListener('binder-changed', this.customData.onAttributeChanged);
};
},
routine(el, translateMePathString) {
if (this.customData.translateMePathString === null) {
// if this is the first call of this function
this.customData.translateMePathString = translateMePathString;
if (translateMePathString) {
this.customData.properties = this.customData.translateMePathString.split('.');
}
this.customData.parseVars(el);
// Translate if language is ready
if (this.customData.i18n.ready) {
this.customData.initOnReady(this.customData.i18n.getLangcode(), this.customData.i18n.currentLangcode !== this.customData.i18n.initalLangcode || !localesService.doNotTranslateDefaultLanguage);
}
else {
this.customData.i18n.event.on('ready', this.customData.initOnReady);
}
return {
name: "i18n-*",
block: false,
priority: 0,
bind(el) {
const getElementData = () => {
const customData = {};
customData.type = el.type;
customData.tagName = el.tagName;
customData.contenteditable = el.getAttribute("contenteditable")
? true
: false;
customData.isRadio =
customData.tagName === "INPUT" && customData.type === "radio";
return customData;
};
this.customData = getElementData();
this.customData.i18n = localesService;
this.customData.vars = {};
this.customData.translateMePathString = null;
this.customData.properties = [];
this.customData.attributeName = this.args[0].toString();
this.customData.applyTranslation = (locale) => {
if (!locale) {
if (this.customData.i18n.showMissingTranslation) {
locale = `translation missing: "${this.customData.properties.join(
"."
)}"`;
} else {
return;
}
}
if (this.customData.attributeName === "html") {
el.innerHTML = locale;
} else if (this.customData.attributeName === "text") {
el.innerText = locale;
} else if (this.customData.attributeName === "value") {
// TODO support also: https://github.com/JumpLinkNetwork/tinybind/blob/master/src/binders/basic/value.binder.ts#L51
if (this.customData.contenteditable) {
el.innerHTML = locale;
} else {
el.value = locale;
}
} else {
el.setAttribute(this.customData.attributeName, locale);
}
};
this.customData.parseVars = (_el) => {
// parse templates to vars
const newVars = this.customData.i18n.parseTemplateVars(_el);
this.customData.vars = core_1.Utils.concat(
true,
this.customData.vars,
newVars
);
// if (Object.keys(this.customData.vars).length) {
// console.warn('parsed templates vars', this.customData.vars);
// }
// parse data attributes to vars
// Vanilla works better than jquery data function?
this.customData.vars = core_1.Utils.concat(
true,
this.customData.vars,
_el.dataset
);
// if (Object.keys(this.customData.vars).length) {
// console.warn('parsed attribute vars', this.customData.vars);
// }
// Parse templates wich have his own translations
this.customData.langVars = this.customData.i18n.parseLocalVars(_el);
// if (this.customData.langVars && Object.keys(this.customData.langVars).length) {
// console.warn('parsed own translations', this.customData.langVars);
// }
};
this.customData.translate = (langcode) => {
// If language service is not ready do nothing
if (!this.customData.i18n.ready) {
return;
}
if (!langcode) {
langcode = this.customData.i18n.getLangcode();
if (!langcode) {
console.error("Langcode is requred", langcode);
return;
}
}
// translate by using the already translated language variable
if (this.customData.langVars && this.customData.langVars[langcode]) {
return this.customData.applyTranslation(
this.customData.langVars[langcode]
);
}
if (
!this.customData.properties ||
this.customData.properties.length === 0
) {
// get the default translation if available
if (this.customData.langVars && this.customData.langVars.default) {
// console.warn('Translate by default', this.customData.langVars.default);
return this.customData.applyTranslation(
this.customData.langVars.default
);
}
}
// translate by properies, e.g. de.cart.add
return this.customData.i18n
.get([langcode, ...this.customData.properties], this.customData.vars)
.then((local) => {
if (local && typeof local === "string") {
// console.warn('Translate by properties', [langcode, ...this.customData.properties], local);
return this.customData.applyTranslation(local);
}
else if (this.customData.translateMePathString !== translateMePathString) {
// If translate string was changed
this.customData.translateMePathString = translateMePathString;
this.customData.properties = this.customData.translateMePathString.split('.');
this.customData.parseVars(el);
this.customData.translate();
// get the default translation if available
if (this.customData.langVars && this.customData.langVars.default) {
// console.warn('Translate by default as fallback', this.customData.langVars.default);
return this.customData.applyTranslation(
this.customData.langVars.default
);
}
},
unbind() {
this.el.removeEventListener('binder-changed', this.customData.onAttributeChanged);
this.customData.i18n.event.off('changed', this.customData.onLanguageChanged);
},
};
return this.customData.applyTranslation(null);
})
.catch((error) => {
console.error(error);
});
};
this.customData.onAttributeChanged = (data) => {
if (data.detail.name.startsWith("data-")) {
const varName = data.detail.name.slice(5);
const newVar = {};
newVar[varName] = data.detail.newValue;
// console.warn('binder-changed newVar', newVar);
this.customData.vars = core_1.Utils.concat(
true,
this.customData.vars,
newVar
);
this.customData.translate();
}
};
this.customData.onLanguageChanged = (langcode, initial) => {
// Do not translate on inital language change, we use the ready event for this
if (!initial) {
this.customData.translate(langcode);
}
};
/**
* Initial stuff wee need to do after the language service is ready
*/
this.customData.initOnReady = (langcode, translationNeeded) => {
// Translate on translation service ready if needed
if (translationNeeded) {
this.customData.translate(langcode);
}
// Translate if language changes
this.customData.i18n.event.on(
"changed",
this.customData.onLanguageChanged
);
// Translate if binder attribute event is changed
el.addEventListener(
"binder-changed",
this.customData.onAttributeChanged
);
};
},
routine(el, translateMePathString) {
if (this.customData.translateMePathString === null) {
// if this is the first call of this function
this.customData.translateMePathString = translateMePathString;
if (translateMePathString) {
this.customData.properties = this.customData.translateMePathString.split(
"."
);
}
this.customData.parseVars(el);
// Translate if language is ready
if (this.customData.i18n.ready) {
this.customData.initOnReady(
this.customData.i18n.getLangcode(),
this.customData.i18n.currentLangcode !==
this.customData.i18n.initalLangcode ||
!localesService.doNotTranslateDefaultLanguage
);
} else {
this.customData.i18n.event.on("ready", this.customData.initOnReady);
}
} else if (
this.customData.translateMePathString !== translateMePathString
) {
// If translate string was changed
this.customData.translateMePathString = translateMePathString;
this.customData.properties = this.customData.translateMePathString.split(
"."
);
this.customData.parseVars(el);
this.customData.translate();
}
},
unbind() {
this.el.removeEventListener(
"binder-changed",
this.customData.onAttributeChanged
);
this.customData.i18n.event.off(
"changed",
this.customData.onLanguageChanged
);
},
};
};

@@ -1,4 +0,4 @@

import { ALocalesService } from '../services/locales-base.service';
import { Binders } from '@ribajs/core';
import { ALocalesService } from "../services/locales-base.service";
import { Binders } from "@ribajs/core";
declare const _default: (localesService: ALocalesService) => Binders<any>;
export default _default;

@@ -5,5 +5,5 @@ "use strict";

exports.default = (localesService) => {
return {
i18nStarBinder: i18n_star_binder_1.i18nStarBinderWrapper(localesService),
};
return {
i18nStarBinder: i18n_star_binder_1.i18nStarBinderWrapper(localesService),
};
};

@@ -1,37 +0,46 @@

import { Component, Binder, View } from '@ribajs/core';
import { Langcode } from '../../interfaces';
import { ALocalesService } from '../../services/locales-base.service';
import { Component, Binder, View } from "@ribajs/core";
import { Langcode } from "../../interfaces";
import { ALocalesService } from "../../services/locales-base.service";
export interface Scope {
langcodes: Langcode[];
switch: AI18nSwitcherComponent["switch"];
toggle: AI18nSwitcherComponent["toggle"];
ready: boolean;
}
export declare abstract class AI18nSwitcherComponent extends Component {
protected abstract localesService: ALocalesService;
protected scope: {
langcodes: Langcode[];
switch: AI18nSwitcherComponent['switch'];
toggle: AI18nSwitcherComponent['toggle'];
switch: (
langcode: Langcode,
context?: Binder<any> | undefined,
event?: Event | undefined
) => void;
toggle: (
context?: Binder<any> | undefined,
event?: Event | undefined
) => void;
ready: boolean;
};
constructor(element?: HTMLElement);
/**
* Switch to language by langcode
* @param langcode
* @param event
*/
switch(langcode: Langcode, context?: Binder<any>, event?: Event): void;
/**
* Toggle language, makes only sense if you have only two languages
* @param langcode
* @param event
*/
toggle(context?: Binder<any>, event?: Event): void;
protected init(
observedAttributes: string[]
): Promise<View | null | undefined>;
protected initLocales(langcode: string): Promise<Langcode[]>;
protected setLangcode(langcode: string): void;
protected requiredAttributes(): never[];
protected disconnectedCallback(): void;
protected template(): null;
}
export declare abstract class AI18nSwitcherComponent extends Component {
protected abstract localesService: ALocalesService;
protected scope: {
langcodes: Langcode[];
switch: (langcode: Langcode, context?: Binder<any> | undefined, event?: Event | undefined) => void;
toggle: (context?: Binder<any> | undefined, event?: Event | undefined) => void;
ready: boolean;
};
constructor(element?: HTMLElement);
/**
* Switch to language by langcode
* @param langcode
* @param event
*/
switch(langcode: Langcode, context?: Binder<any>, event?: Event): void;
/**
* Toggle language, makes only sense if you have only two languages
* @param langcode
* @param event
*/
toggle(context?: Binder<any>, event?: Event): void;
protected init(observedAttributes: string[]): Promise<View | null | undefined>;
protected initLocales(langcode: string): Promise<Langcode[]>;
protected setLangcode(langcode: string): void;
protected requiredAttributes(): never[];
protected disconnectedCallback(): void;
protected template(): null;
}

@@ -5,104 +5,102 @@ "use strict";

class AI18nSwitcherComponent extends core_1.Component {
constructor(element) {
super(element);
this.scope = {
langcodes: [],
switch: this.switch,
toggle: this.toggle,
ready: false,
};
constructor(element) {
super(element);
this.scope = {
langcodes: [],
switch: this.switch,
toggle: this.toggle,
ready: false,
};
}
/**
* Switch to language by langcode
* @param langcode
* @param event
*/
switch(langcode, context, event) {
if (event) {
event.preventDefault();
event.stopPropagation();
}
/**
* Switch to language by langcode
* @param langcode
* @param event
*/
switch(langcode, context, event) {
if (event) {
event.preventDefault();
event.stopPropagation();
}
if (!langcode.active) {
this.setLangcode(langcode.code);
}
if (!langcode.active) {
this.setLangcode(langcode.code);
}
/**
* Toggle language, makes only sense if you have only two languages
* @param langcode
* @param event
*/
toggle(context, event) {
if (event) {
event.preventDefault();
event.stopPropagation();
}
/**
* Toggle language, makes only sense if you have only two languages
* @param langcode
* @param event
*/
toggle(context, event) {
if (event) {
event.preventDefault();
event.stopPropagation();
}
for (const i in this.scope.langcodes) {
if (this.scope.langcodes.hasOwnProperty(i)) {
if (this.scope.langcodes[i].active !== true) {
this.setLangcode(this.scope.langcodes[i].code);
return;
}
for (const i in this.scope.langcodes) {
if (this.scope.langcodes.hasOwnProperty(i)) {
if (this.scope.langcodes[i].active !== true) {
this.setLangcode(this.scope.langcodes[i].code);
return;
}
}
}
}
}
async init(observedAttributes) {
if (this.localesService.ready) {
const langcode = this.localesService.getLangcode();
if (langcode) {
return this.initLocales(langcode)
.then((langcodes) => {
return super.init(observedAttributes);
});
}
}
return new Promise((resolve, reject) => {
this.localesService.event.on('ready', (langcode, translationNeeded) => {
this.initLocales(langcode)
.then((langcodes) => {
super.init(observedAttributes)
.then((view) => {
resolve(view);
});
});
});
}
async init(observedAttributes) {
if (this.localesService.ready) {
const langcode = this.localesService.getLangcode();
if (langcode) {
return this.initLocales(langcode).then((langcodes) => {
return super.init(observedAttributes);
});
}
}
async initLocales(langcode) {
// set avaible langcodes
return this.localesService.getAvailableLangcodes()
.then((langcodes) => {
this.scope.langcodes = langcodes;
// set active langcodes
this.scope.langcodes.forEach((langCode) => {
langCode.active = (langCode.code === langcode);
});
return this.scope.langcodes;
})
.then((langcodes) => {
this.localesService.event.on('changed', (changedLangcode, initial) => {
// Activate localcode and disable the other
this.scope.langcodes.forEach((langCode) => {
langCode.active = (langCode.code === changedLangcode);
});
});
return langcodes;
})
.then((langcodes) => {
this.scope.ready = true;
return langcodes;
return new Promise((resolve, reject) => {
this.localesService.event.on("ready", (langcode, translationNeeded) => {
this.initLocales(langcode).then((langcodes) => {
super.init(observedAttributes).then((view) => {
resolve(view);
});
});
}
setLangcode(langcode) {
this.localesService.setLangcode(langcode);
}
requiredAttributes() {
return [];
}
disconnectedCallback() {
super.disconnectedCallback();
}
template() {
return null;
}
});
});
}
async initLocales(langcode) {
// set avaible langcodes
return this.localesService
.getAvailableLangcodes()
.then((langcodes) => {
this.scope.langcodes = langcodes;
// set active langcodes
this.scope.langcodes.forEach((langCode) => {
langCode.active = langCode.code === langcode;
});
return this.scope.langcodes;
})
.then((langcodes) => {
this.localesService.event.on("changed", (changedLangcode, initial) => {
// Activate localcode and disable the other
this.scope.langcodes.forEach((langCode) => {
langCode.active = langCode.code === changedLangcode;
});
});
return langcodes;
})
.then((langcodes) => {
this.scope.ready = true;
return langcodes;
});
}
setLangcode(langcode) {
this.localesService.setLangcode(langcode);
}
requiredAttributes() {
return [];
}
disconnectedCallback() {
super.disconnectedCallback();
}
template() {
return null;
}
}
exports.AI18nSwitcherComponent = AI18nSwitcherComponent;

@@ -1,5 +0,5 @@

export { AI18nSwitcherComponent } from './abstract-switcher/switcher.abstract.component';
import { ALocalesService } from '../services/locales-base.service';
import { Components } from '@ribajs/core';
export { AI18nSwitcherComponent } from "./abstract-switcher/switcher.abstract.component";
import { ALocalesService } from "../services/locales-base.service";
import { Components } from "@ribajs/core";
declare const _default: (localesService: ALocalesService) => Components;
export default _default;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var switcher_abstract_component_1 = require("./abstract-switcher/switcher.abstract.component");
exports.AI18nSwitcherComponent = switcher_abstract_component_1.AI18nSwitcherComponent;
exports.AI18nSwitcherComponent =
switcher_abstract_component_1.AI18nSwitcherComponent;
const switcher_component_1 = require("./switcher/switcher.component");
exports.default = (localesService) => {
return {
i18nSwitcherComponent: switcher_component_1.i18nSwitcherComponentWrapper(localesService),
};
return {
i18nSwitcherComponent: switcher_component_1.i18nSwitcherComponentWrapper(
localesService
),
};
};

@@ -1,37 +0,39 @@

import { Component, Binder, View } from '@ribajs/core';
import { Langcode } from '../../interfaces';
import { ALocalesService } from '../../services/locales-base.service';
import { Component, Binder, View } from "@ribajs/core";
import { Langcode } from "../../interfaces";
import { ALocalesService } from "../../services/locales-base.service";
export interface Scope {
langcodes: Langcode[];
switch: AI18nSwitcherComponent["switch"];
toggle: AI18nSwitcherComponent["toggle"];
ready: boolean;
}
export declare abstract class AI18nSwitcherComponent extends Component {
protected abstract localesService: ALocalesService;
protected scope: {
langcodes: Langcode[];
switch: AI18nSwitcherComponent['switch'];
toggle: AI18nSwitcherComponent['toggle'];
switch: (langcode: Langcode, context: Binder<any>, event: Event) => void;
toggle: (context: Binder<any>, event: Event) => void;
ready: boolean;
};
constructor(element?: HTMLElement);
/**
* Switch to language by langcode
* @param langcode
* @param event
*/
switch(langcode: Langcode, context: Binder<any>, event: Event): void;
/**
* Toggle language, makes only sense if you have only two languages
* @param langcode
* @param event
*/
toggle(context: Binder<any>, event: Event): void;
protected init(
observedAttributes: string[]
): Promise<View | null | undefined>;
protected initLocales(langcode: string): Promise<Langcode[]>;
protected setLangcode(langcode: string): void;
protected requiredAttributes(): never[];
protected disconnectedCallback(): void;
protected template(): null;
}
export declare abstract class AI18nSwitcherComponent extends Component {
protected abstract localesService: ALocalesService;
protected scope: {
langcodes: Langcode[];
switch: (langcode: Langcode, context: Binder<any>, event: Event) => void;
toggle: (context: Binder<any>, event: Event) => void;
ready: boolean;
};
constructor(element?: HTMLElement);
/**
* Switch to language by langcode
* @param langcode
* @param event
*/
switch(langcode: Langcode, context: Binder<any>, event: Event): void;
/**
* Toggle language, makes only sense if you have only two languages
* @param langcode
* @param event
*/
toggle(context: Binder<any>, event: Event): void;
protected init(observedAttributes: string[]): Promise<View | null | undefined>;
protected initLocales(langcode: string): Promise<Langcode[]>;
protected setLangcode(langcode: string): void;
protected requiredAttributes(): never[];
protected disconnectedCallback(): void;
protected template(): null;
}

@@ -5,100 +5,98 @@ "use strict";

class AI18nSwitcherComponent extends core_1.Component {
constructor(element) {
super(element);
this.scope = {
langcodes: [],
switch: this.switch,
toggle: this.toggle,
ready: false,
};
constructor(element) {
super(element);
this.scope = {
langcodes: [],
switch: this.switch,
toggle: this.toggle,
ready: false,
};
}
/**
* Switch to language by langcode
* @param langcode
* @param event
*/
switch(langcode, context, event) {
event.preventDefault();
event.stopPropagation();
if (!langcode.active) {
this.setLangcode(langcode.code);
}
/**
* Switch to language by langcode
* @param langcode
* @param event
*/
switch(langcode, context, event) {
event.preventDefault();
event.stopPropagation();
if (!langcode.active) {
this.setLangcode(langcode.code);
}
/**
* Toggle language, makes only sense if you have only two languages
* @param langcode
* @param event
*/
toggle(context, event) {
event.preventDefault();
event.stopPropagation();
for (const i in this.scope.langcodes) {
if (this.scope.langcodes.hasOwnProperty(i)) {
if (this.scope.langcodes[i].active !== true) {
this.setLangcode(this.scope.langcodes[i].code);
return;
}
}
}
/**
* Toggle language, makes only sense if you have only two languages
* @param langcode
* @param event
*/
toggle(context, event) {
event.preventDefault();
event.stopPropagation();
for (const i in this.scope.langcodes) {
if (this.scope.langcodes.hasOwnProperty(i)) {
if (this.scope.langcodes[i].active !== true) {
this.setLangcode(this.scope.langcodes[i].code);
return;
}
}
}
}
async init(observedAttributes) {
if (this.localesService.ready) {
const langcode = this.localesService.getLangcode();
if (langcode) {
return this.initLocales(langcode)
.then((langcodes) => {
return super.init(observedAttributes);
});
}
}
return new Promise((resolve, reject) => {
this.localesService.event.on('ready', (langcode, translationNeeded) => {
this.initLocales(langcode)
.then((langcodes) => {
super.init(observedAttributes)
.then((view) => {
resolve(view);
});
});
});
}
async init(observedAttributes) {
if (this.localesService.ready) {
const langcode = this.localesService.getLangcode();
if (langcode) {
return this.initLocales(langcode).then((langcodes) => {
return super.init(observedAttributes);
});
}
}
async initLocales(langcode) {
// set avaible langcodes
return this.localesService.getAvailableLangcodes()
.then((langcodes) => {
this.scope.langcodes = langcodes;
// set active langcodes
this.scope.langcodes.forEach((langCode) => {
langCode.active = (langCode.code === langcode);
});
return this.scope.langcodes;
})
.then((langcodes) => {
this.localesService.event.on('changed', (changedLangcode, initial) => {
// Activate localcode and disable the other
this.scope.langcodes.forEach((langCode) => {
langCode.active = (langCode.code === changedLangcode);
});
});
return langcodes;
})
.then((langcodes) => {
this.scope.ready = true;
return langcodes;
return new Promise((resolve, reject) => {
this.localesService.event.on("ready", (langcode, translationNeeded) => {
this.initLocales(langcode).then((langcodes) => {
super.init(observedAttributes).then((view) => {
resolve(view);
});
});
}
setLangcode(langcode) {
this.localesService.setLangcode(langcode);
}
requiredAttributes() {
return [];
}
disconnectedCallback() {
super.disconnectedCallback();
}
template() {
return null;
}
});
});
}
async initLocales(langcode) {
// set avaible langcodes
return this.localesService
.getAvailableLangcodes()
.then((langcodes) => {
this.scope.langcodes = langcodes;
// set active langcodes
this.scope.langcodes.forEach((langCode) => {
langCode.active = langCode.code === langcode;
});
return this.scope.langcodes;
})
.then((langcodes) => {
this.localesService.event.on("changed", (changedLangcode, initial) => {
// Activate localcode and disable the other
this.scope.langcodes.forEach((langCode) => {
langCode.active = langCode.code === changedLangcode;
});
});
return langcodes;
})
.then((langcodes) => {
this.scope.ready = true;
return langcodes;
});
}
setLangcode(langcode) {
this.localesService.setLangcode(langcode);
}
requiredAttributes() {
return [];
}
disconnectedCallback() {
super.disconnectedCallback();
}
template() {
return null;
}
}
exports.AI18nSwitcherComponent = AI18nSwitcherComponent;

@@ -1,4 +0,6 @@

import { Type } from '@ribajs/core';
import { AI18nSwitcherComponent } from '../abstract-switcher/switcher.abstract.component';
import { ALocalesService } from '../../services/locales-base.service';
export declare const i18nSwitcherComponentWrapper: (localesService: ALocalesService) => Type<AI18nSwitcherComponent>;
import { Type } from "@ribajs/core";
import { AI18nSwitcherComponent } from "../abstract-switcher/switcher.abstract.component";
import { ALocalesService } from "../../services/locales-base.service";
export declare const i18nSwitcherComponentWrapper: (
localesService: ALocalesService
) => Type<AI18nSwitcherComponent>;

@@ -5,49 +5,51 @@ "use strict";

exports.i18nSwitcherComponentWrapper = (localesService) => {
var _a;
return _a = class I18nSwitcherComponent extends switcher_abstract_component_1.AI18nSwitcherComponent {
constructor(element) {
super(element);
this.localesService = localesService;
this.scope = {
langcodes: [],
switch: this.switch,
toggle: this.toggle,
ready: false,
};
this.init(I18nSwitcherComponent.observedAttributes);
}
static get observedAttributes() {
return [];
}
/**
* Switch to language by langcode
* @param langcode
* @param event
*/
switch(langcode, context, event) {
return super.switch(langcode, context, event);
}
/**
* Toggle language, makes only sense if you have only two languages
* @param langcode
* @param event
*/
toggle(context, event) {
return super.toggle(context, event);
}
setLangcode(langcode) {
return super.setLangcode(langcode);
}
requiredAttributes() {
return [];
}
disconnectedCallback() {
super.disconnectedCallback();
}
template() {
return null;
}
},
_a.tagName = 'i18n-switcher',
_a;
var _a;
return (
(_a = class I18nSwitcherComponent extends switcher_abstract_component_1.AI18nSwitcherComponent {
constructor(element) {
super(element);
this.localesService = localesService;
this.scope = {
langcodes: [],
switch: this.switch,
toggle: this.toggle,
ready: false,
};
this.init(I18nSwitcherComponent.observedAttributes);
}
static get observedAttributes() {
return [];
}
/**
* Switch to language by langcode
* @param langcode
* @param event
*/
switch(langcode, context, event) {
return super.switch(langcode, context, event);
}
/**
* Toggle language, makes only sense if you have only two languages
* @param langcode
* @param event
*/
toggle(context, event) {
return super.toggle(context, event);
}
setLangcode(langcode) {
return super.setLangcode(langcode);
}
requiredAttributes() {
return [];
}
disconnectedCallback() {
super.disconnectedCallback();
}
template() {
return null;
}
}),
(_a.tagName = "i18n-switcher"),
_a
);
};

@@ -1,1 +0,1 @@

export { i18nFormatterWrapper } from './t.formatter';
export { i18nFormatterWrapper } from "./t.formatter";

@@ -1,4 +0,4 @@

import { ALocalesService } from '../services/locales-base.service';
import { Formatters } from '@ribajs/core';
import { ALocalesService } from "../services/locales-base.service";
import { Formatters } from "@ribajs/core";
declare const _default: (localesService: ALocalesService) => Formatters;
export default _default;

@@ -5,5 +5,5 @@ "use strict";

exports.default = (localesService) => {
return {
t: t_formatter_1.tFormatterWrapper(localesService),
};
return {
t: t_formatter_1.tFormatterWrapper(localesService),
};
};

@@ -1,3 +0,5 @@

import { Formatter } from '@ribajs/core';
import { ALocalesService } from '../services/locales-base.service';
export declare const tFormatterWrapper: (localesService: ALocalesService) => Formatter;
import { Formatter } from "@ribajs/core";
import { ALocalesService } from "../services/locales-base.service";
export declare const tFormatterWrapper: (
localesService: ALocalesService
) => Formatter;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const translate = async (translateMePathString, localesService, langcode) => {
const properties = translateMePathString.split('.');
const properties = translateMePathString.split(".");
if (!langcode) {
langcode = localesService.getLangcode();
if (!langcode) {
langcode = localesService.getLangcode();
if (!langcode) {
return null;
}
return null;
}
return localesService.get([langcode, ...properties] /*, vars */)
.then((locale) => {
return locale;
}
return localesService
.get([langcode, ...properties] /*, vars */)
.then((locale) => {
return locale;
})
.catch((error) => {
console.error(error);
.catch((error) => {
console.error(error);
});
};
exports.tFormatterWrapper = (localesService) => {
return {
name: 't',
read(translateMePathString, langcode, ...vars) {
return new Promise((resolve, reject) => {
localesService.event.on('changed', () => {
// console.debug('changed');
translate(translateMePathString, localesService, langcode)
.then((locale) => {
resolve(locale);
})
.catch((error) => {
reject(error);
});
});
localesService.event.on('ready', () => {
translate(translateMePathString, localesService, langcode)
.then((locale) => {
resolve(locale);
})
.catch((error) => {
reject(error);
});
});
if (localesService.ready) {
translate(translateMePathString, localesService, langcode)
.then((locale) => {
resolve(locale);
});
}
return {
name: "t",
read(translateMePathString, langcode, ...vars) {
return new Promise((resolve, reject) => {
localesService.event.on("changed", () => {
// console.debug('changed');
translate(translateMePathString, localesService, langcode)
.then((locale) => {
resolve(locale);
})
.catch((error) => {
reject(error);
});
},
};
});
localesService.event.on("ready", () => {
translate(translateMePathString, localesService, langcode)
.then((locale) => {
resolve(locale);
})
.catch((error) => {
reject(error);
});
});
if (localesService.ready) {
translate(translateMePathString, localesService, langcode).then(
(locale) => {
resolve(locale);
}
);
}
});
},
};
};

@@ -1,9 +0,11 @@

import { RibaModule } from '@ribajs/core';
export * from './binders';
export * from './components';
export * from './formatters';
export * from './interfaces';
export * from './services';
import * as services from './services';
export declare const i18nModule: (localesService: services.ALocalesService) => RibaModule;
import { RibaModule } from "@ribajs/core";
export * from "./binders";
export * from "./components";
export * from "./formatters";
export * from "./interfaces";
export * from "./services";
import * as services from "./services";
export declare const i18nModule: (
localesService: services.ALocalesService
) => RibaModule;
export default i18nModule;
"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
var __importStar = (this && this.__importStar) || function (mod) {
var __importDefault =
(this && this.__importDefault) ||
function (mod) {
return mod && mod.__esModule ? mod : { default: mod };
};
var __importStar =
(this && this.__importStar) ||
function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
if (mod != null)
for (var k in mod)
if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result["default"] = mod;
return result;
};
};
Object.defineProperty(exports, "__esModule", { value: true });

@@ -25,9 +31,9 @@ __export(require("./binders"));

exports.i18nModule = (localesService) => {
return {
binders: binders_1.default(localesService),
components: components_1.default(localesService),
formatters: formatters_1.default(localesService),
services,
};
return {
binders: binders_1.default(localesService),
components: components_1.default(localesService),
formatters: formatters_1.default(localesService),
services,
};
};
exports.default = exports.i18nModule;

@@ -1,2 +0,2 @@

export * from './langcode';
export * from './local-var';
export * from "./langcode";
export * from "./local-var";

@@ -1,2 +0,2 @@

export * from './langcode';
export * from './local-var';
export * from "./langcode";
export * from "./local-var";
export interface Langcode {
code: string;
active: boolean;
code: string;
active: boolean;
}
export interface LocalPluralization {
zero?: string;
one?: string;
two?: string;
other?: string;
zero?: string;
one?: string;
two?: string;
other?: string;
}
export interface LocalVar {
[name: string]: string | LocalPluralization;
[name: string]: string | LocalPluralization;
}

@@ -1,1 +0,1 @@

export * from './locales.service';
export * from "./locales.service";
"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
Object.defineProperty(exports, "__esModule", { value: true });
__export(require("./locales.service"));

@@ -1,3 +0,3 @@

export * from './locales-base.service';
export * from './locales-rest.service';
export * from './locales-static.service';
export * from "./locales-base.service";
export * from "./locales-rest.service";
export * from "./locales-static.service";
"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}

@@ -5,0 +5,0 @@ Object.defineProperty(exports, "__esModule", { value: true });

@@ -1,67 +0,73 @@

import { EventDispatcher } from '@ribajs/core';
import { Langcode, LocalPluralization, LocalVar } from '../interfaces';
import { EventDispatcher } from "@ribajs/core";
import { Langcode, LocalPluralization, LocalVar } from "../interfaces";
export declare abstract class ALocalesService {
doNotTranslateDefaultLanguage: boolean;
get ready(): boolean;
event: EventDispatcher;
showMissingTranslation: boolean;
protected _ready: boolean;
/**
* The current setted langcode
*/
protected abstract currentLangcode?: string;
/**
* The default theme langcode before any language was choosed
*/
protected abstract initalLangcode?: string;
constructor(doNotTranslateDefaultLanguage: boolean, showMissingTranslation: boolean);
/**
* Get translation by properties, e.g. `de.form.newsletter_label`
* Properties object must include the language code, e.g. `de`.
* @param properties properties, e.g. `['de', 'form', 'newsletter', 'label']`
* @param force Set this to true if you want to force the request also if the service is not ready, you should use this only one the time
*/
get(properties?: string[], vars?: LocalVar, force?: boolean): Promise<any>;
/**
* Get translation by properties, e.g. `form.newsletter_label`
* Properties object must not include the language code.
* @param properties properties, e.g. `[form', 'newsletter', 'label']`
*/
getByCurrentLang(properties?: string[], vars?: LocalVar): Promise<any>;
getBrowserLangcode(): any;
getHTMLLangcode(): string;
/**
* Get the current langcode,
* if lang was not choosed this is the langcode of the lang attribute of the html element.
* If the language was changed this returns the changed language
*/
getLangcode(): string | undefined;
getInitialLangcode(): string | undefined;
setLangcode(langcode: string, initial?: boolean): void;
getAvailableLangcodes(): Promise<Langcode[]>;
/**
* Parse templates wich can be used to set variables on language strings
*/
parseTemplateVars(el: HTMLElement): LocalVar;
/**
* Parse templates wich have his own translations
*/
parseLocalVars(el: HTMLElement): LocalVar;
/**
* Replace variables on translated string
* @param translateString
* @param vars
*/
setTranslateStringVars(translateString: string, vars: LocalVar): string;
/**
* Get file with all languages
*/
protected abstract getAll(): Promise<any>;
protected init(): Promise<any>;
/**
* see https://help.shopify.com/en/themes/development/theme-store-requirements/internationalizing/translation-filter#pluralization-in-translation-keys
* @param translateString
* @param vars
*/
protected setTranslateStringPluralization(translateObj: LocalPluralization | string, vars: LocalVar): string;
doNotTranslateDefaultLanguage: boolean;
get ready(): boolean;
event: EventDispatcher;
showMissingTranslation: boolean;
protected _ready: boolean;
/**
* The current setted langcode
*/
protected abstract currentLangcode?: string;
/**
* The default theme langcode before any language was choosed
*/
protected abstract initalLangcode?: string;
constructor(
doNotTranslateDefaultLanguage: boolean,
showMissingTranslation: boolean
);
/**
* Get translation by properties, e.g. `de.form.newsletter_label`
* Properties object must include the language code, e.g. `de`.
* @param properties properties, e.g. `['de', 'form', 'newsletter', 'label']`
* @param force Set this to true if you want to force the request also if the service is not ready, you should use this only one the time
*/
get(properties?: string[], vars?: LocalVar, force?: boolean): Promise<any>;
/**
* Get translation by properties, e.g. `form.newsletter_label`
* Properties object must not include the language code.
* @param properties properties, e.g. `[form', 'newsletter', 'label']`
*/
getByCurrentLang(properties?: string[], vars?: LocalVar): Promise<any>;
getBrowserLangcode(): any;
getHTMLLangcode(): string;
/**
* Get the current langcode,
* if lang was not choosed this is the langcode of the lang attribute of the html element.
* If the language was changed this returns the changed language
*/
getLangcode(): string | undefined;
getInitialLangcode(): string | undefined;
setLangcode(langcode: string, initial?: boolean): void;
getAvailableLangcodes(): Promise<Langcode[]>;
/**
* Parse templates wich can be used to set variables on language strings
*/
parseTemplateVars(el: HTMLElement): LocalVar;
/**
* Parse templates wich have his own translations
*/
parseLocalVars(el: HTMLElement): LocalVar;
/**
* Replace variables on translated string
* @param translateString
* @param vars
*/
setTranslateStringVars(translateString: string, vars: LocalVar): string;
/**
* Get file with all languages
*/
protected abstract getAll(): Promise<any>;
protected init(): Promise<any>;
/**
* see https://help.shopify.com/en/themes/development/theme-store-requirements/internationalizing/translation-filter#pluralization-in-translation-keys
* @param translateString
* @param vars
*/
protected setTranslateStringPluralization(
translateObj: LocalPluralization | string,
vars: LocalVar
): string;
}

@@ -5,233 +5,259 @@ "use strict";

class ALocalesService {
constructor(doNotTranslateDefaultLanguage, showMissingTranslation) {
this.doNotTranslateDefaultLanguage = doNotTranslateDefaultLanguage;
this.event = new core_1.EventDispatcher('i18n');
this.showMissingTranslation = false;
this._ready = false;
this.doNotTranslateDefaultLanguage = doNotTranslateDefaultLanguage;
this.showMissingTranslation = showMissingTranslation;
constructor(doNotTranslateDefaultLanguage, showMissingTranslation) {
this.doNotTranslateDefaultLanguage = doNotTranslateDefaultLanguage;
this.event = new core_1.EventDispatcher("i18n");
this.showMissingTranslation = false;
this._ready = false;
this.doNotTranslateDefaultLanguage = doNotTranslateDefaultLanguage;
this.showMissingTranslation = showMissingTranslation;
}
get ready() {
return this._ready;
}
/**
* Get translation by properties, e.g. `de.form.newsletter_label`
* Properties object must include the language code, e.g. `de`.
* @param properties properties, e.g. `['de', 'form', 'newsletter', 'label']`
* @param force Set this to true if you want to force the request also if the service is not ready, you should use this only one the time
*/
async get(properties, vars, force = false) {
if (!this.ready && !force) {
throw new Error("not ready");
}
get ready() {
return this._ready;
}
/**
* Get translation by properties, e.g. `de.form.newsletter_label`
* Properties object must include the language code, e.g. `de`.
* @param properties properties, e.g. `['de', 'form', 'newsletter', 'label']`
* @param force Set this to true if you want to force the request also if the service is not ready, you should use this only one the time
*/
async get(properties, vars, force = false) {
if (!this.ready && !force) {
throw new Error('not ready');
}
return this.getAll()
// extract properties
.then((locals) => {
if (properties && properties.length) {
let local = core_1.Utils.clone(true, locals);
for (const property of properties) {
if (!property) {
return;
}
if (local[property]) {
local = local[property];
}
else {
return null;
}
}
return local;
return (
this.getAll()
// extract properties
.then((locals) => {
if (properties && properties.length) {
let local = core_1.Utils.clone(true, locals);
for (const property of properties) {
if (!property) {
return;
}
if (local[property]) {
local = local[property];
} else {
return null;
}
}
return locals;
})
.then((local) => {
if (local === null && properties) {
console.warn(`WARNING translation missing: "${properties.join('.')}"`, local, properties);
}
return local;
}
return locals;
})
// Replace variables in local string if vars are set
.then((local) => {
if (vars) {
local = this.setTranslateStringPluralization(local, vars);
local = this.setTranslateStringVars(local, vars);
}
return local;
.then((local) => {
if (local === null && properties) {
console.warn(
`WARNING translation missing: "${properties.join(".")}"`,
local,
properties
);
}
return local;
})
.catch((error) => {
console.error(error);
this._ready = false;
return error;
});
// Replace variables in local string if vars are set
.then((local) => {
if (vars) {
local = this.setTranslateStringPluralization(local, vars);
local = this.setTranslateStringVars(local, vars);
}
return local;
})
.catch((error) => {
console.error(error);
this._ready = false;
return error;
})
);
}
/**
* Get translation by properties, e.g. `form.newsletter_label`
* Properties object must not include the language code.
* @param properties properties, e.g. `[form', 'newsletter', 'label']`
*/
async getByCurrentLang(properties = [], vars) {
const langcode = this.getLangcode();
if (!langcode) {
throw new Error("Langcode not found in html tag");
}
/**
* Get translation by properties, e.g. `form.newsletter_label`
* Properties object must not include the language code.
* @param properties properties, e.g. `[form', 'newsletter', 'label']`
*/
async getByCurrentLang(properties = [], vars) {
const langcode = this.getLangcode();
if (!langcode) {
throw new Error('Langcode not found in html tag');
}
return this.get([langcode, ...properties], vars);
return this.get([langcode, ...properties], vars);
}
getBrowserLangcode() {
const lang = navigator.language || navigator.userLanguage;
const simplified = lang.split("-")[0].toLowerCase();
return simplified;
}
getHTMLLangcode() {
const langcode = document.documentElement
? document.documentElement.lang
: "en";
return langcode;
}
/**
* Get the current langcode,
* if lang was not choosed this is the langcode of the lang attribute of the html element.
* If the language was changed this returns the changed language
*/
getLangcode() {
return this.currentLangcode;
}
getInitialLangcode() {
return this.initalLangcode;
}
setLangcode(langcode, initial = false) {
if (this.currentLangcode !== langcode) {
this.currentLangcode = langcode;
// $('html').attr('lang', langcode);
if (document.documentElement) {
document.documentElement.lang = langcode;
}
this.event.trigger("changed", langcode, initial);
}
getBrowserLangcode() {
const lang = navigator.language || navigator.userLanguage;
const simplified = lang.split('-')[0].toLowerCase();
return simplified;
}
async getAvailableLangcodes() {
const activeCode = this.getLangcode();
return this.get(undefined, undefined, true).then((locals) => {
const langcodes = [];
Object.keys(locals).forEach((langcode) => {
langcodes.push({
code: langcode,
active: langcode === activeCode,
});
});
return langcodes;
});
}
/**
* Parse templates wich can be used to set variables on language strings
*/
parseTemplateVars(el) {
const templates = el.querySelectorAll("template");
const vars = {};
templates.forEach((template) => {
const name = template.getAttribute("name");
if (name !== null) {
vars[name] = template.innerHTML.trim();
}
});
return vars;
}
/**
* Parse templates wich have his own translations
*/
parseLocalVars(el) {
const templates = el.querySelectorAll("template");
const vars = {};
templates.forEach((template) => {
const lang = template.getAttribute("lang");
if (lang !== null) {
vars[lang] = template.innerHTML.trim();
}
});
return vars;
}
/**
* Replace variables on translated string
* @param translateString
* @param vars
*/
setTranslateStringVars(translateString, vars) {
if (
!translateString ||
Object.keys(vars).length === 0 ||
typeof translateString.match !== "function"
) {
return translateString;
}
getHTMLLangcode() {
const langcode = document.documentElement ? document.documentElement.lang : 'en';
return langcode;
}
/**
* Get the current langcode,
* if lang was not choosed this is the langcode of the lang attribute of the html element.
* If the language was changed this returns the changed language
*/
getLangcode() {
return this.currentLangcode;
}
getInitialLangcode() {
return this.initalLangcode;
}
setLangcode(langcode, initial = false) {
if (this.currentLangcode !== langcode) {
this.currentLangcode = langcode;
// $('html').attr('lang', langcode);
if (document.documentElement) {
document.documentElement.lang = langcode;
}
this.event.trigger('changed', langcode, initial);
const matches = translateString.match(/{{\s*?[A-Za-z0-9_-]+\s*?}}/gm);
if (matches) {
for (const match of matches) {
if (match) {
const varName = match.replace(/{{\s*|\s*}}/gm, "");
if (
typeof vars[varName] === "string" ||
typeof vars[varName] === "number"
) {
translateString = translateString.replace(match, vars[varName]);
}
}
}
}
async getAvailableLangcodes() {
const activeCode = this.getLangcode();
return this.get(undefined, undefined, true)
.then((locals) => {
const langcodes = [];
Object.keys(locals).forEach((langcode) => {
langcodes.push({
code: langcode,
active: langcode === activeCode,
});
});
return langcodes;
});
return translateString;
}
async init() {
this.initalLangcode = this.getHTMLLangcode();
this.currentLangcode = this.initalLangcode;
if (!this.initalLangcode) {
throw new Error(
`The lang attribute on the html element is requred to detect the default theme language: ${this.initalLangcode}`
);
}
/**
* Parse templates wich can be used to set variables on language strings
*/
parseTemplateVars(el) {
const templates = el.querySelectorAll('template');
const vars = {};
templates.forEach((template) => {
const name = template.getAttribute('name');
if (name !== null) {
vars[name] = template.innerHTML.trim();
}
});
return vars;
}
/**
* Parse templates wich have his own translations
*/
parseLocalVars(el) {
const templates = el.querySelectorAll('template');
const vars = {};
templates.forEach((template) => {
const lang = template.getAttribute('lang');
if (lang !== null) {
vars[lang] = template.innerHTML.trim();
}
});
return vars;
}
/**
* Replace variables on translated string
* @param translateString
* @param vars
*/
setTranslateStringVars(translateString, vars) {
if (!translateString || Object.keys(vars).length === 0 || typeof (translateString.match) !== 'function') {
return translateString;
// Detect browser language and switch to this language when available
const browserLangcode = this.getBrowserLangcode();
return this.getAvailableLangcodes()
.then((availableLangcodes) => {
let browserLangFound = false;
for (const availableLangcodeObj of availableLangcodes) {
if (availableLangcodeObj.code === browserLangcode) {
browserLangFound = true;
}
}
const matches = translateString.match(/{{\s*?[A-Za-z0-9_-]+\s*?}}/gm);
if (matches) {
for (const match of matches) {
if (match) {
const varName = match.replace(/{{\s*|\s*}}/gm, '');
if (typeof (vars[varName]) === 'string' || typeof (vars[varName]) === 'number') {
translateString = translateString.replace(match, vars[varName]);
}
}
}
// only switch language if the browser language is not the default language (if doNotTranslateDefaultLanguage is true)
if (
!this.doNotTranslateDefaultLanguage ||
(browserLangFound && browserLangcode !== this.currentLangcode)
) {
this.setLangcode(browserLangcode, true);
}
return translateString;
}
async init() {
this.initalLangcode = this.getHTMLLangcode();
this.currentLangcode = this.initalLangcode;
if (!this.initalLangcode) {
throw new Error(`The lang attribute on the html element is requred to detect the default theme language: ${this.initalLangcode}`);
return availableLangcodes;
})
.then((availableLangcodes) => {
this._ready = true;
// If the current langcode is not the inital langcode then translation is needed
const translationNeeded =
this.currentLangcode !== this.initalLangcode ||
!this.doNotTranslateDefaultLanguage;
this.event.trigger("ready", this.currentLangcode, translationNeeded);
})
.catch((error) => {
console.error(error);
this._ready = false;
return error;
});
}
/**
* see https://help.shopify.com/en/themes/development/theme-store-requirements/internationalizing/translation-filter#pluralization-in-translation-keys
* @param translateString
* @param vars
*/
setTranslateStringPluralization(translateObj, vars) {
if (
vars.count &&
typeof translateObj === "object" &&
translateObj !== null
) {
const count = Number(vars.count);
if (count === 0) {
if (translateObj.zero) {
return translateObj.zero;
}
// Detect browser language and switch to this language when available
const browserLangcode = this.getBrowserLangcode();
return this.getAvailableLangcodes()
.then((availableLangcodes) => {
let browserLangFound = false;
for (const availableLangcodeObj of availableLangcodes) {
if (availableLangcodeObj.code === browserLangcode) {
browserLangFound = true;
}
}
// only switch language if the browser language is not the default language (if doNotTranslateDefaultLanguage is true)
if (!this.doNotTranslateDefaultLanguage || (browserLangFound && browserLangcode !== this.currentLangcode)) {
this.setLangcode(browserLangcode, true);
}
return availableLangcodes;
})
.then((availableLangcodes) => {
this._ready = true;
// If the current langcode is not the inital langcode then translation is needed
const translationNeeded = this.currentLangcode !== this.initalLangcode || !this.doNotTranslateDefaultLanguage;
this.event.trigger('ready', this.currentLangcode, translationNeeded);
})
.catch((error) => {
console.error(error);
this._ready = false;
return error;
});
}
/**
* see https://help.shopify.com/en/themes/development/theme-store-requirements/internationalizing/translation-filter#pluralization-in-translation-keys
* @param translateString
* @param vars
*/
setTranslateStringPluralization(translateObj, vars) {
if (vars.count && typeof (translateObj) === 'object' && translateObj !== null) {
const count = Number(vars.count);
if (count === 0) {
if (translateObj.zero) {
return translateObj.zero;
}
}
else if (count === 1) {
if (translateObj.one) {
return translateObj.one;
}
}
else if (count === 2) {
if (translateObj.two) {
return translateObj.two;
}
}
} else if (count === 1) {
if (translateObj.one) {
return translateObj.one;
}
if (typeof (translateObj) === 'object' && translateObj !== null && translateObj.other) {
return translateObj.other;
} else if (count === 2) {
if (translateObj.two) {
return translateObj.two;
}
return translateObj;
}
}
if (
typeof translateObj === "object" &&
translateObj !== null &&
translateObj.other
) {
return translateObj.other;
}
return translateObj;
}
}
exports.ALocalesService = ALocalesService;

@@ -1,2 +0,2 @@

import { ALocalesService } from './locales-base.service';
import { ALocalesService } from "./locales-base.service";
/**

@@ -6,22 +6,26 @@ * LocalesRestService get locales object from url

export declare class LocalesRestService extends ALocalesService {
protected url: string;
static instances: {
[url: string]: LocalesRestService;
};
static getInstance(url: string): LocalesRestService;
locales: any;
/**
* The current setted langcode
*/
protected currentLangcode?: string;
/**
* The default theme langcode before any language was choosed
*/
protected initalLangcode?: string;
constructor(url: string, doNotTranslateDefaultLanguage?: boolean, showMissingTranslation?: boolean);
/**
* Get file with all languages
* @param themeID
*/
protected getAll(url?: string): Promise<any>;
protected url: string;
static instances: {
[url: string]: LocalesRestService;
};
static getInstance(url: string): LocalesRestService;
locales: any;
/**
* The current setted langcode
*/
protected currentLangcode?: string;
/**
* The default theme langcode before any language was choosed
*/
protected initalLangcode?: string;
constructor(
url: string,
doNotTranslateDefaultLanguage?: boolean,
showMissingTranslation?: boolean
);
/**
* Get file with all languages
* @param themeID
*/
protected getAll(url?: string): Promise<any>;
}

@@ -9,44 +9,47 @@ "use strict";

class LocalesRestService extends locales_base_service_1.ALocalesService {
constructor(url, doNotTranslateDefaultLanguage = false, showMissingTranslation = false) {
super(doNotTranslateDefaultLanguage, showMissingTranslation);
this.url = url;
this.locales = {};
this.url = url;
if (!this.url) {
throw new Error(`Url is requred!`);
}
if (LocalesRestService.instances[this.url]) {
return LocalesRestService.instances[this.url];
}
this.init();
LocalesRestService.instances[this.url] = this;
constructor(
url,
doNotTranslateDefaultLanguage = false,
showMissingTranslation = false
) {
super(doNotTranslateDefaultLanguage, showMissingTranslation);
this.url = url;
this.locales = {};
this.url = url;
if (!this.url) {
throw new Error(`Url is requred!`);
}
static getInstance(url) {
return LocalesRestService.instances[url];
if (LocalesRestService.instances[this.url]) {
return LocalesRestService.instances[this.url];
}
/**
* Get file with all languages
* @param themeID
*/
async getAll(url) {
if (!url) {
url = this.url;
}
if (!url) {
throw new Error(`Url is requred!`);
}
if (window.Shopify.shop) {
url = url + `?shop=${window.Shopify.shop}`;
}
if (this.locales[url]) {
return this.locales[url];
}
return core_1.HttpService.getJSON(url)
.then((locales) => {
this.locales[url] = locales;
return this.locales[url];
});
this.init();
LocalesRestService.instances[this.url] = this;
}
static getInstance(url) {
return LocalesRestService.instances[url];
}
/**
* Get file with all languages
* @param themeID
*/
async getAll(url) {
if (!url) {
url = this.url;
}
if (!url) {
throw new Error(`Url is requred!`);
}
if (window.Shopify.shop) {
url = url + `?shop=${window.Shopify.shop}`;
}
if (this.locales[url]) {
return this.locales[url];
}
return core_1.HttpService.getJSON(url).then((locales) => {
this.locales[url] = locales;
return this.locales[url];
});
}
}
exports.LocalesRestService = LocalesRestService;
LocalesRestService.instances = {};

@@ -1,23 +0,28 @@

import { ALocalesService } from './locales-base.service';
import { ALocalesService } from "./locales-base.service";
export declare class LocalesStaticService extends ALocalesService {
protected locales: any;
protected id?: string | undefined;
static instances: {
[id: string]: LocalesStaticService;
};
static getInstance(id?: string): LocalesStaticService;
/**
* The current setted langcode
*/
protected currentLangcode?: string;
/**
* The default theme langcode before any language was choosed
*/
protected initalLangcode?: string;
constructor(locales: any, id?: string | undefined, doNotTranslateDefaultLanguage?: boolean, showMissingTranslation?: boolean);
/**
* Get file with all languages
* @param themeID
*/
protected getAll(themeID?: number): Promise<any>;
protected locales: any;
protected id?: string | undefined;
static instances: {
[id: string]: LocalesStaticService;
};
static getInstance(id?: string): LocalesStaticService;
/**
* The current setted langcode
*/
protected currentLangcode?: string;
/**
* The default theme langcode before any language was choosed
*/
protected initalLangcode?: string;
constructor(
locales: any,
id?: string | undefined,
doNotTranslateDefaultLanguage?: boolean,
showMissingTranslation?: boolean
);
/**
* Get file with all languages
* @param themeID
*/
protected getAll(themeID?: number): Promise<any>;
}

@@ -5,28 +5,33 @@ "use strict";

class LocalesStaticService extends locales_base_service_1.ALocalesService {
constructor(locales, id, doNotTranslateDefaultLanguage = false, showMissingTranslation = false) {
super(doNotTranslateDefaultLanguage, showMissingTranslation);
this.locales = locales;
this.id = id;
if (!id) {
id = 'main';
}
this.locales = locales;
if (LocalesStaticService.instances[id]) {
return LocalesStaticService.instances[id];
}
this.init();
LocalesStaticService.instances[id] = this;
constructor(
locales,
id,
doNotTranslateDefaultLanguage = false,
showMissingTranslation = false
) {
super(doNotTranslateDefaultLanguage, showMissingTranslation);
this.locales = locales;
this.id = id;
if (!id) {
id = "main";
}
static getInstance(id = 'main') {
return LocalesStaticService.instances[id];
this.locales = locales;
if (LocalesStaticService.instances[id]) {
return LocalesStaticService.instances[id];
}
/**
* Get file with all languages
* @param themeID
*/
async getAll(themeID) {
return this.locales;
}
this.init();
LocalesStaticService.instances[id] = this;
}
static getInstance(id = "main") {
return LocalesStaticService.instances[id];
}
/**
* Get file with all languages
* @param themeID
*/
async getAll(themeID) {
return this.locales;
}
}
exports.LocalesStaticService = LocalesStaticService;
LocalesStaticService.instances = {};

@@ -1,65 +0,72 @@

import { EventDispatcher, Debug } from '@ribajs/core';
import { ILangcode, ILocalPluralization, ILocalVar } from '../interfaces/interfaces';
import { EventDispatcher, Debug } from "@ribajs/core";
import {
ILangcode,
ILocalPluralization,
ILocalVar,
} from "../interfaces/interfaces";
export declare abstract class ALocalesService {
readonly ready: boolean;
event: EventDispatcher;
protected _ready: boolean;
protected debug: Debug.IDebugger;
/**
* The current setted langcode
*/
protected abstract currentLangcode: string;
/**
* The default theme langcode before any language was choosed
*/
protected abstract initalLangcode: string;
/**
* Get translation by properties, e.g. `de.form.newsletter_label`
* Properties object must include the language code, e.g. `de`.
* @param properties properties, e.g. `['de', 'form', 'newsletter', 'label']`
* @param force Set this to true if you want to force the request also if the service is not ready, you should use this only one the time
*/
get(properties?: string[], vars?: ILocalVar, force?: boolean): Promise<any>;
/**
* Get translation by properties, e.g. `form.newsletter_label`
* Properties object must not include the language code.
* @param properties properties, e.g. `[form', 'newsletter', 'label']`
*/
getByCurrentLang(properties?: string[], vars?: ILocalVar): Promise<any>;
getBrowserLangcode(): any;
getHTMLLangcode(): string;
/**
* Get the current langcode,
* if lang was not choosed this is the langcode of the lang attribute of the html element.
* If the language was changed this returns the changed language
*/
getLangcode(): string;
getInitialLangcode(): string;
setLangcode(langcode: string, initial?: boolean): void;
getAvailableLangcodes(): Promise<ILangcode[]>;
/**
* Parse templates wich can be used to set variables on language strings
*/
parseTemplateVars($el: JQuery<HTMLElement>): ILocalVar;
/**
* Parse templates wich have his own translations
*/
parseLocalVars($el: JQuery<HTMLElement>): ILocalVar;
/**
* Replace variables on translated string
* @param translateString
* @param vars
*/
setTranslateStringVars(translateString: string, vars: ILocalVar): string;
/**
* Get file with all languages
*/
protected abstract getAll(): Promise<any>;
protected switchToBrowserLanguage(): Promise<any>;
/**
* see https://help.shopify.com/en/themes/development/theme-store-requirements/internationalizing/translation-filter#pluralization-in-translation-keys
* @param translateString
* @param vars
*/
protected setTranslateStringPluralization(translateObj: ILocalPluralization | string, vars: ILocalVar): string;
readonly ready: boolean;
event: EventDispatcher;
protected _ready: boolean;
protected debug: Debug.IDebugger;
/**
* The current setted langcode
*/
protected abstract currentLangcode: string;
/**
* The default theme langcode before any language was choosed
*/
protected abstract initalLangcode: string;
/**
* Get translation by properties, e.g. `de.form.newsletter_label`
* Properties object must include the language code, e.g. `de`.
* @param properties properties, e.g. `['de', 'form', 'newsletter', 'label']`
* @param force Set this to true if you want to force the request also if the service is not ready, you should use this only one the time
*/
get(properties?: string[], vars?: ILocalVar, force?: boolean): Promise<any>;
/**
* Get translation by properties, e.g. `form.newsletter_label`
* Properties object must not include the language code.
* @param properties properties, e.g. `[form', 'newsletter', 'label']`
*/
getByCurrentLang(properties?: string[], vars?: ILocalVar): Promise<any>;
getBrowserLangcode(): any;
getHTMLLangcode(): string;
/**
* Get the current langcode,
* if lang was not choosed this is the langcode of the lang attribute of the html element.
* If the language was changed this returns the changed language
*/
getLangcode(): string;
getInitialLangcode(): string;
setLangcode(langcode: string, initial?: boolean): void;
getAvailableLangcodes(): Promise<ILangcode[]>;
/**
* Parse templates wich can be used to set variables on language strings
*/
parseTemplateVars($el: JQuery<HTMLElement>): ILocalVar;
/**
* Parse templates wich have his own translations
*/
parseLocalVars($el: JQuery<HTMLElement>): ILocalVar;
/**
* Replace variables on translated string
* @param translateString
* @param vars
*/
setTranslateStringVars(translateString: string, vars: ILocalVar): string;
/**
* Get file with all languages
*/
protected abstract getAll(): Promise<any>;
protected switchToBrowserLanguage(): Promise<any>;
/**
* see https://help.shopify.com/en/themes/development/theme-store-requirements/internationalizing/translation-filter#pluralization-in-translation-keys
* @param translateString
* @param vars
*/
protected setTranslateStringPluralization(
translateObj: ILocalPluralization | string,
vars: ILocalVar
): string;
}

@@ -5,224 +5,239 @@ "use strict";

class ALocalesService {
constructor() {
this.event = new core_1.EventDispatcher('i18n');
this._ready = false;
this.debug = core_1.Debug('services:ALocalesService');
constructor() {
this.event = new core_1.EventDispatcher("i18n");
this._ready = false;
this.debug = core_1.Debug("services:ALocalesService");
}
get ready() {
return this._ready;
}
/**
* Get translation by properties, e.g. `de.form.newsletter_label`
* Properties object must include the language code, e.g. `de`.
* @param properties properties, e.g. `['de', 'form', 'newsletter', 'label']`
* @param force Set this to true if you want to force the request also if the service is not ready, you should use this only one the time
*/
async get(properties, vars, force = false) {
if (!this.ready && !force) {
throw new Error("not ready");
}
get ready() {
return this._ready;
}
/**
* Get translation by properties, e.g. `de.form.newsletter_label`
* Properties object must include the language code, e.g. `de`.
* @param properties properties, e.g. `['de', 'form', 'newsletter', 'label']`
* @param force Set this to true if you want to force the request also if the service is not ready, you should use this only one the time
*/
async get(properties, vars, force = false) {
if (!this.ready && !force) {
throw new Error('not ready');
}
return this.getAll()
// extract properties
.then((locals) => {
if (properties && properties.length) {
let local = core_1.Utils.clone(true, locals);
for (const property of properties) {
if (!property) {
return;
}
if (local[property]) {
local = local[property];
}
else {
return null;
}
}
return local;
return (
this.getAll()
// extract properties
.then((locals) => {
if (properties && properties.length) {
let local = core_1.Utils.clone(true, locals);
for (const property of properties) {
if (!property) {
return;
}
if (local[property]) {
local = local[property];
} else {
return null;
}
}
return locals;
})
.then((local) => {
if (local === null && properties) {
this.debug(`WARNING translation missing: "${properties.join('.')}"`, local, properties);
}
return local;
}
return locals;
})
// Replace variables in local string if vars are set
.then((local) => {
if (vars) {
local = this.setTranslateStringPluralization(local, vars);
local = this.setTranslateStringVars(local, vars);
}
return local;
.then((local) => {
if (local === null && properties) {
this.debug(
`WARNING translation missing: "${properties.join(".")}"`,
local,
properties
);
}
return local;
})
.catch((error) => {
console.error(error);
this._ready = false;
return error;
});
// Replace variables in local string if vars are set
.then((local) => {
if (vars) {
local = this.setTranslateStringPluralization(local, vars);
local = this.setTranslateStringVars(local, vars);
}
return local;
})
.catch((error) => {
console.error(error);
this._ready = false;
return error;
})
);
}
/**
* Get translation by properties, e.g. `form.newsletter_label`
* Properties object must not include the language code.
* @param properties properties, e.g. `[form', 'newsletter', 'label']`
*/
async getByCurrentLang(properties = [], vars) {
const langcode = this.getLangcode();
if (!langcode) {
throw new Error("Langcode not found in html tag");
}
/**
* Get translation by properties, e.g. `form.newsletter_label`
* Properties object must not include the language code.
* @param properties properties, e.g. `[form', 'newsletter', 'label']`
*/
async getByCurrentLang(properties = [], vars) {
const langcode = this.getLangcode();
if (!langcode) {
throw new Error('Langcode not found in html tag');
}
return this.get([langcode, ...properties], vars);
return this.get([langcode, ...properties], vars);
}
getBrowserLangcode() {
const lang = navigator.language || navigator.userLanguage;
const simplified = lang.split("-")[0].toLowerCase();
return simplified;
}
getHTMLLangcode() {
const langcode = document.documentElement
? document.documentElement.lang
: "en";
return langcode;
}
/**
* Get the current langcode,
* if lang was not choosed this is the langcode of the lang attribute of the html element.
* If the language was changed this returns the changed language
*/
getLangcode() {
return this.currentLangcode;
}
getInitialLangcode() {
return this.initalLangcode;
}
setLangcode(langcode, initial = false) {
if (this.currentLangcode !== langcode) {
this.currentLangcode = langcode;
// $('html').attr('lang', langcode);
if (document.documentElement) {
document.documentElement.lang = langcode;
}
this.event.trigger("changed", langcode, initial);
}
getBrowserLangcode() {
const lang = navigator.language || navigator.userLanguage;
const simplified = lang.split('-')[0].toLowerCase();
return simplified;
}
async getAvailableLangcodes() {
const activeCode = this.getLangcode();
return this.get(undefined, undefined, true).then((locals) => {
const langcodes = [];
Object.keys(locals).forEach((langcode) => {
langcodes.push({
code: langcode,
active: langcode === activeCode,
});
});
return langcodes;
});
}
/**
* Parse templates wich can be used to set variables on language strings
*/
parseTemplateVars($el) {
const templates = $el.find("template");
const vars = {};
templates.each((i, template) => {
const name = template.getAttribute("name");
if (name !== null) {
vars[name] = template.innerHTML.trim();
}
});
return vars;
}
/**
* Parse templates wich have his own translations
*/
parseLocalVars($el) {
const templates = $el.find("template");
const vars = {};
templates.each((i, template) => {
const lang = template.getAttribute("lang");
if (lang !== null) {
vars[lang] = template.innerHTML.trim();
}
});
return vars;
}
/**
* Replace variables on translated string
* @param translateString
* @param vars
*/
setTranslateStringVars(translateString, vars) {
if (!translateString || typeof translateString.match !== "function") {
return translateString;
}
getHTMLLangcode() {
const langcode = document.documentElement ? document.documentElement.lang : 'en';
return langcode;
}
/**
* Get the current langcode,
* if lang was not choosed this is the langcode of the lang attribute of the html element.
* If the language was changed this returns the changed language
*/
getLangcode() {
return this.currentLangcode;
}
getInitialLangcode() {
return this.initalLangcode;
}
setLangcode(langcode, initial = false) {
if (this.currentLangcode !== langcode) {
this.currentLangcode = langcode;
// $('html').attr('lang', langcode);
if (document.documentElement) {
document.documentElement.lang = langcode;
}
this.event.trigger('changed', langcode, initial);
const matches = translateString.match(/{{\s*?[A-Za-z_-]+\s*?}}/gm);
if (matches) {
for (const match of matches) {
if (match) {
const varName = match.replace(/{{\s*|\s*}}/gm, "");
if (
typeof vars[varName] === "string" ||
typeof vars[varName] === "number"
) {
translateString = translateString.replace(match, vars[varName]);
}
}
}
}
async getAvailableLangcodes() {
const activeCode = this.getLangcode();
return this.get(undefined, undefined, true)
.then((locals) => {
const langcodes = [];
Object.keys(locals).forEach((langcode) => {
langcodes.push({
code: langcode,
active: langcode === activeCode,
});
});
return langcodes;
});
}
/**
* Parse templates wich can be used to set variables on language strings
*/
parseTemplateVars($el) {
const templates = $el.find('template');
const vars = {};
templates.each((i, template) => {
const name = template.getAttribute('name');
if (name !== null) {
vars[name] = template.innerHTML.trim();
}
});
return vars;
}
/**
* Parse templates wich have his own translations
*/
parseLocalVars($el) {
const templates = $el.find('template');
const vars = {};
templates.each((i, template) => {
const lang = template.getAttribute('lang');
if (lang !== null) {
vars[lang] = template.innerHTML.trim();
}
});
return vars;
}
/**
* Replace variables on translated string
* @param translateString
* @param vars
*/
setTranslateStringVars(translateString, vars) {
if (!translateString || typeof (translateString.match) !== 'function') {
return translateString;
return translateString;
}
async switchToBrowserLanguage() {
// Detect browser language and switch to this language when available
const browserLangcode = this.getBrowserLangcode();
return this.getAvailableLangcodes()
.then((availableLangcodes) => {
let browserLangFound = false;
for (const availableLangcodeObj of availableLangcodes) {
if (availableLangcodeObj.code === browserLangcode) {
browserLangFound = true;
}
}
const matches = translateString.match(/{{\s*?[A-Za-z_-]+\s*?}}/gm);
if (matches) {
for (const match of matches) {
if (match) {
const varName = match.replace(/{{\s*|\s*}}/gm, '');
if (typeof (vars[varName]) === 'string' || typeof (vars[varName]) === 'number') {
translateString = translateString.replace(match, vars[varName]);
}
}
}
// ony switch language if autodetectLanguage is true and the browser language is not the default language
if (browserLangFound && browserLangcode !== this.currentLangcode) {
this.setLangcode(browserLangcode, true);
}
return translateString;
}
async switchToBrowserLanguage() {
// Detect browser language and switch to this language when available
const browserLangcode = this.getBrowserLangcode();
return this.getAvailableLangcodes()
.then((availableLangcodes) => {
let browserLangFound = false;
for (const availableLangcodeObj of availableLangcodes) {
if (availableLangcodeObj.code === browserLangcode) {
browserLangFound = true;
}
}
// ony switch language if autodetectLanguage is true and the browser language is not the default language
if (browserLangFound && browserLangcode !== this.currentLangcode) {
this.setLangcode(browserLangcode, true);
}
return availableLangcodes;
})
.then((availableLangcodes) => {
// If the current langcode is not the inital langcode then translation is needed
const translationNeeded = this.currentLangcode !== this.initalLangcode;
this.event.trigger('ready', this.currentLangcode, translationNeeded);
})
.catch((error) => {
console.error(error);
this._ready = false;
return error;
});
}
/**
* see https://help.shopify.com/en/themes/development/theme-store-requirements/internationalizing/translation-filter#pluralization-in-translation-keys
* @param translateString
* @param vars
*/
setTranslateStringPluralization(translateObj, vars) {
if (vars.count && typeof (translateObj) === 'object' && translateObj !== null) {
const count = Number(vars.count);
if (count === 0) {
if (translateObj.zero) {
return translateObj.zero;
}
}
else if (count === 1) {
if (translateObj.one) {
return translateObj.one;
}
}
else if (count === 2) {
if (translateObj.two) {
return translateObj.two;
}
}
return availableLangcodes;
})
.then((availableLangcodes) => {
// If the current langcode is not the inital langcode then translation is needed
const translationNeeded = this.currentLangcode !== this.initalLangcode;
this.event.trigger("ready", this.currentLangcode, translationNeeded);
})
.catch((error) => {
console.error(error);
this._ready = false;
return error;
});
}
/**
* see https://help.shopify.com/en/themes/development/theme-store-requirements/internationalizing/translation-filter#pluralization-in-translation-keys
* @param translateString
* @param vars
*/
setTranslateStringPluralization(translateObj, vars) {
if (
vars.count &&
typeof translateObj === "object" &&
translateObj !== null
) {
const count = Number(vars.count);
if (count === 0) {
if (translateObj.zero) {
return translateObj.zero;
}
if (typeof (translateObj) === 'object' && translateObj !== null && translateObj.other) {
return translateObj.other;
} else if (count === 1) {
if (translateObj.one) {
return translateObj.one;
}
return translateObj;
} else if (count === 2) {
if (translateObj.two) {
return translateObj.two;
}
}
}
if (
typeof translateObj === "object" &&
translateObj !== null &&
translateObj.other
) {
return translateObj.other;
}
return translateObj;
}
}
exports.ALocalesService = ALocalesService;
{
"name": "@ribajs/i18n",
"description": "Internationalization module for Riba.js",
"version": "1.9.0-alpha.0",
"version": "1.9.0-alpha.1",
"author": "Pascal Garber <pascal@artandcode.studio>",

@@ -29,23 +29,29 @@ "url": "https://github.com/ribajs/riba/tree/master/packages/i18n",

"devDependencies": {
"@babel/cli": "^7.8.4",
"@babel/core": "^7.9.0",
"@babel/plugin-proposal-class-properties": "^7.8.3",
"@babel/plugin-proposal-object-rest-spread": "^7.9.5",
"@babel/preset-env": "^7.9.5",
"@babel/preset-typescript": "^7.9.0",
"@babel/runtime-corejs3": "^7.9.2",
"@ribajs/eslint-config": "1.9.0-alpha.0",
"@ribajs/tsconfig": "1.9.0-alpha.0",
"@ribajs/webpack-config": "0.0.1",
"@babel/cli": "^7.10.4",
"@babel/core": "^7.10.4",
"@babel/plugin-proposal-class-properties": "^7.10.4",
"@babel/plugin-proposal-object-rest-spread": "^7.10.4",
"@babel/preset-env": "^7.10.4",
"@babel/preset-typescript": "^7.10.4",
"@babel/runtime-corejs3": "^7.10.4",
"@ribajs/eslint-config": "1.9.0-alpha.1",
"@ribajs/tsconfig": "1.9.0-alpha.1",
"@ribajs/webpack-config": "1.9.0-alpha.1",
"@typescript-eslint/eslint-plugin": "^3.6.0",
"@typescript-eslint/parser": "^3.6.0",
"babel-loader": "^8.1.0",
"babel-plugin-array-includes": "^2.0.3",
"core-js": "^3.6.5",
"eslint": "^6.8.0",
"typescript": "^3.8.3",
"webpack": "^5.0.0-beta.15",
"webpack-cli": "^3.3.11"
"eslint": "^7.4.0",
"eslint-config-prettier": "^6.11.0",
"eslint-plugin-prettier": "^3.1.4",
"prettier": "^2.0.5",
"typescript": "^3.9.6",
"webpack": "^5.0.0-beta.22",
"webpack-cli": "^3.3.12"
},
"dependencies": {
"@ribajs/bs4": "1.9.0-alpha.0",
"@ribajs/core": "1.9.0-alpha.0"
"@ribajs/bs4": "1.9.0-alpha.1",
"@ribajs/core": "1.9.0-alpha.1",
"@ribajs/utils": "1.9.0-alpha.1"
},

@@ -52,0 +58,0 @@ "bugs": {

@@ -1,4 +0,4 @@

import { Binder, BinderWrapper } from '@ribajs/core';
import { concat } from '@ribajs/utils/src/type';
import { ALocalesService } from '../../services/locales-base.service';
import { Binder, BinderWrapper } from "@ribajs/core";
import { concat } from "@ribajs/utils/src/type";
import { ALocalesService } from "../../services/locales-base.service";

@@ -11,3 +11,3 @@ // see star.binder.ts

newValue: string;
namespace: null,
namespace: null;
};

@@ -19,5 +19,7 @@ }

*/
export const i18nStarBinderWrapper: BinderWrapper<string> = (localesService: ALocalesService) => {
export const i18nStarBinderWrapper: BinderWrapper<string> = (
localesService: ALocalesService
) => {
return {
name: 'i18n-*',
name: "i18n-*",
block: false,

@@ -30,4 +32,7 @@ priority: 0,

customData.tagName = el.tagName;
customData.contenteditable = el.getAttribute('contenteditable') ? true : false;
customData.isRadio = customData.tagName === 'INPUT' && customData.type === 'radio';
customData.contenteditable = el.getAttribute("contenteditable")
? true
: false;
customData.isRadio =
customData.tagName === "INPUT" && customData.type === "radio";
return customData;

@@ -45,3 +50,5 @@ };

if (this.customData.i18n.showMissingTranslation) {
locale = `translation missing: "${this.customData.properties.join('.')}"`;
locale = `translation missing: "${this.customData.properties.join(
"."
)}"`;
} else {

@@ -51,7 +58,7 @@ return;

}
if (this.customData.attributeName === 'html') {
if (this.customData.attributeName === "html") {
el.innerHTML = locale;
} else if (this.customData.attributeName === 'text') {
} else if (this.customData.attributeName === "text") {
el.innerText = locale;
} else if (this.customData.attributeName === 'value') {
} else if (this.customData.attributeName === "value") {
// TODO support also: https://github.com/JumpLinkNetwork/tinybind/blob/master/src/binders/basic/value.binder.ts#L51

@@ -77,3 +84,2 @@ if (this.customData.contenteditable) {

// parse data attributes to vars
// Vanilla works better than jquery data function?
this.customData.vars = concat(true, this.customData.vars, _el.dataset);

@@ -99,3 +105,3 @@ // if (Object.keys(this.customData.vars).length) {

if (!langcode) {
console.error('Langcode is requred', langcode);
console.error("Langcode is requred", langcode);
return;

@@ -107,10 +113,17 @@ }

if (this.customData.langVars && this.customData.langVars[langcode]) {
return this.customData.applyTranslation(this.customData.langVars[langcode]);
return this.customData.applyTranslation(
this.customData.langVars[langcode]
);
}
if (!this.customData.properties || this.customData.properties.length === 0) {
if (
!this.customData.properties ||
this.customData.properties.length === 0
) {
// get the default translation if available
if (this.customData.langVars && this.customData.langVars.default) {
// console.warn('Translate by default', this.customData.langVars.default);
return this.customData.applyTranslation(this.customData.langVars.default);
return this.customData.applyTranslation(
this.customData.langVars.default
);
}

@@ -120,23 +133,28 @@ }

// translate by properies, e.g. de.cart.add
return this.customData.i18n.get([langcode, ...this.customData.properties], this.customData.vars)
.then((local: string) => {
if (local && typeof(local) === 'string') {
// console.warn('Translate by properties', [langcode, ...this.customData.properties], local);
return this.customData.applyTranslation(local);
}
// get the default translation if available
if (this.customData.langVars && this.customData.langVars.default) {
// console.warn('Translate by default as fallback', this.customData.langVars.default);
return this.customData.applyTranslation(this.customData.langVars.default);
}
return this.customData.i18n
.get([langcode, ...this.customData.properties], this.customData.vars)
.then((local: string) => {
if (local && typeof local === "string") {
// console.warn('Translate by properties', [langcode, ...this.customData.properties], local);
return this.customData.applyTranslation(local);
}
// get the default translation if available
if (this.customData.langVars && this.customData.langVars.default) {
// console.warn('Translate by default as fallback', this.customData.langVars.default);
return this.customData.applyTranslation(
this.customData.langVars.default
);
}
return this.customData.applyTranslation(null);
})
.catch((error: Error) => {
console.error(error);
});
return this.customData.applyTranslation(null);
})
.catch((error: Error) => {
console.error(error);
});
};
this.customData.onAttributeChanged = (data: BinderAttributeChangedEvent) => {
if (data.detail.name.startsWith('data-')) {
this.customData.onAttributeChanged = (
data: BinderAttributeChangedEvent
) => {
if (data.detail.name.startsWith("data-")) {
const varName = data.detail.name.slice(5);

@@ -151,3 +169,6 @@ const newVar: any = {};

this.customData.onLanguageChanged = (langcode: string, initial: boolean) => {
this.customData.onLanguageChanged = (
langcode: string,
initial: boolean
) => {
// Do not translate on inital language change, we use the ready event for this

@@ -162,3 +183,6 @@ if (!initial) {

*/
this.customData.initOnReady = (langcode: string, translationNeeded: boolean) => {
this.customData.initOnReady = (
langcode: string,
translationNeeded: boolean
) => {
// Translate on translation service ready if needed

@@ -170,6 +194,12 @@ if (translationNeeded) {

// Translate if language changes
this.customData.i18n.event.on('changed', this.customData.onLanguageChanged);
this.customData.i18n.event.on(
"changed",
this.customData.onLanguageChanged
);
// Translate if binder attribute event is changed
el.addEventListener('binder-changed', this.customData.onAttributeChanged);
el.addEventListener(
"binder-changed",
this.customData.onAttributeChanged
);
};

@@ -180,7 +210,8 @@ },

if (this.customData.translateMePathString === null) {
// if this is the first call of this function
this.customData.translateMePathString = translateMePathString;
if (translateMePathString) {
this.customData.properties = this.customData.translateMePathString.split('.');
this.customData.properties = this.customData.translateMePathString.split(
"."
);
}

@@ -192,10 +223,19 @@

if (this.customData.i18n.ready) {
this.customData.initOnReady(this.customData.i18n.getLangcode(), this.customData.i18n.currentLangcode !== this.customData.i18n.initalLangcode || !localesService.doNotTranslateDefaultLanguage);
this.customData.initOnReady(
this.customData.i18n.getLangcode(),
this.customData.i18n.currentLangcode !==
this.customData.i18n.initalLangcode ||
!localesService.doNotTranslateDefaultLanguage
);
} else {
this.customData.i18n.event.on('ready', this.customData.initOnReady);
this.customData.i18n.event.on("ready", this.customData.initOnReady);
}
} else if (this.customData.translateMePathString !== translateMePathString) {
} else if (
this.customData.translateMePathString !== translateMePathString
) {
// If translate string was changed
this.customData.translateMePathString = translateMePathString;
this.customData.properties = this.customData.translateMePathString.split('.');
this.customData.properties = this.customData.translateMePathString.split(
"."
);
this.customData.parseVars(el);

@@ -207,7 +247,12 @@ this.customData.translate();

unbind() {
this.el.removeEventListener('binder-changed', this.customData.onAttributeChanged);
this.customData.i18n.event.off('changed', this.customData.onLanguageChanged);
this.el.removeEventListener(
"binder-changed",
this.customData.onAttributeChanged
);
this.customData.i18n.event.off(
"changed",
this.customData.onLanguageChanged
);
},
} as Binder<string>;
};

@@ -1,4 +0,4 @@

import { i18nStarBinderWrapper } from './i18n/i18n-star.binder';
import { ALocalesService } from '../services/locales-base.service';
import { Binders } from '@ribajs/core';
import { i18nStarBinderWrapper } from "./i18n/i18n-star.binder";
import { ALocalesService } from "../services/locales-base.service";
import { Binders } from "@ribajs/core";

@@ -8,3 +8,3 @@ export default (localesService: ALocalesService) => {

i18nStarBinder: i18nStarBinderWrapper(localesService),
} as Binders<any>;
} as Binders<any>;
};

@@ -1,2 +0,2 @@

import { Component, View } from "@ribajs/core";
import { Component } from "@ribajs/core";
import { Langcode } from "../../interfaces";

@@ -70,13 +70,12 @@ import { ALocalesService } from "../../services/locales-base.service";

}
return new Promise<View | null | undefined>((resolve) => {
this.localesService.event.on(
"ready",
(langcode: string, translationNeeded: boolean) => {
this.initLocales(langcode).then((langcodes) => {
super.init(observedAttributes).then((view) => {
resolve(view);
});
return new Promise<undefined | null>((resolve) => {
this.localesService.event.on("ready", (
langcode: string /*, translationNeeded: boolean*/
) => {
return this.initLocales(langcode).then((/*langcodes*/) => {
return super.init(observedAttributes).then((view) => {
resolve(view);
});
}
);
});
});
});

@@ -98,11 +97,10 @@ }

.then((langcodes) => {
this.localesService.event.on(
"changed",
(changedLangcode: string, initial: boolean) => {
// Activate localcode and disable the other
this.scope.langcodes.forEach((langCode) => {
langCode.active = langCode.code === changedLangcode;
});
}
);
this.localesService.event.on("changed", (
changedLangcode: string /*, initial: boolean*/
) => {
// Activate localcode and disable the other
this.scope.langcodes.forEach((langCode) => {
langCode.active = langCode.code === changedLangcode;
});
});
return langcodes;

@@ -109,0 +107,0 @@ })

@@ -6,5 +6,5 @@ import { TypeOfComponent } from "@ribajs/core";

} from "@ribajs/bs4/src/components/bs4-share/bs4-share.component";
import template from "@ribajs/bs4/src/components/bs4-share/bs4-share.component.html";
import labelTemplate from "./share.label.html";
import { ALocalesService } from "../../services/locales-base.service";
// import { LocalesService } from "@ribajs/shopify-tda";

@@ -39,2 +39,4 @@ interface Scope extends Bs4ShareScope {

public _debug = false;
static get observedAttributes() {

@@ -61,2 +63,7 @@ return [

protected connectedCallback() {
this.init(Bs4ShareComponent.observedAttributes);
this.addEventListeners();
}
protected async initTranslate() {

@@ -86,3 +93,3 @@ return new Promise<string>((resolve) => {

.then((locale: string) => {
// console.debug('changed local', local);
// this.debug('changed local', local);
return locale;

@@ -96,3 +103,3 @@ })

protected async beforeBind() {
// console.debug('beforeBind');
// this.debug('beforeBind');
await super.beforeBind();

@@ -121,3 +128,13 @@ const langcode = await this.initTranslate();

}
protected template() {
this.debug("template", this.el, this.el.hasChildNodes());
if (this.el && this.el.hasChildNodes()) {
// If a child is set, this is a custom label template
this.scope.labelTemplate = this.el.innerHTML;
this.debug("Custom label template: ", this.scope.labelTemplate);
}
return template;
}
};
};

@@ -1,4 +0,4 @@

import { tFormatterWrapper } from './t.formatter';
import { ALocalesService } from '../services/locales-base.service';
import { Formatters } from '@ribajs/core';
import { tFormatterWrapper } from "./t.formatter";
import { ALocalesService } from "../services/locales-base.service";
import { Formatters } from "@ribajs/core";

@@ -5,0 +5,0 @@ export default (localesService: ALocalesService): Formatters => {

@@ -1,6 +0,10 @@

import { Formatter } from '@ribajs/core';
import { ALocalesService } from '../services/locales-base.service';
import { Formatter } from "@ribajs/core";
import { ALocalesService } from "../services/locales-base.service";
const translate = async (translateMePathString: string, localesService: ALocalesService, langcode?: string) => {
const properties = translateMePathString.split('.');
const translate = async (
translateMePathString: string,
localesService: ALocalesService,
langcode?: string
) => {
const properties = translateMePathString.split(".");
if (!langcode) {

@@ -12,43 +16,49 @@ langcode = localesService.getLangcode();

}
return localesService.get([langcode, ...properties]/*, vars */)
.then((locale: string) => {
return locale;
})
.catch((error: Error) => {
console.error(error);
});
return localesService
.get([langcode, ...properties] /*, vars */)
.then((locale: string) => {
return locale;
})
.catch((error: Error) => {
console.error(error);
});
};
export const tFormatterWrapper = (localesService: ALocalesService): Formatter => {
export const tFormatterWrapper = (
localesService: ALocalesService
): Formatter => {
return {
name: 't',
read(translateMePathString: string, langcode: string, ...vars: string[]) {
name: "t",
read(
translateMePathString: string,
langcode: string /*, ...vars: string[]*/
) {
return new Promise((resolve, reject) => {
localesService.event.on('changed', () => {
localesService.event.on("changed", () => {
// console.debug('changed');
translate(translateMePathString, localesService, langcode)
.then((locale) => {
resolve(locale as any);
})
.catch((error: Error) => {
reject(error);
});
.then((locale) => {
resolve(locale as any);
})
.catch((error: Error) => {
reject(error);
});
});
localesService.event.on('ready', () => {
localesService.event.on("ready", () => {
translate(translateMePathString, localesService, langcode)
.then((locale) => {
resolve(locale as any);
})
.catch((error: Error) => {
reject(error);
});
.then((locale) => {
resolve(locale as any);
})
.catch((error: Error) => {
reject(error);
});
});
if (localesService.ready) {
translate(translateMePathString, localesService, langcode)
.then((locale) => {
resolve(locale);
});
translate(translateMePathString, localesService, langcode).then(
(locale) => {
resolve(locale);
}
);
}

@@ -55,0 +65,0 @@ });

@@ -1,6 +0,6 @@

export * from './binders';
export * from './components';
export * from './formatters';
export * from './interfaces';
export * from './services';
export * from './i18n.module';
export * from "./binders";
export * from "./components";
export * from "./formatters";
export * from "./interfaces";
export * from "./services";
export * from "./i18n.module";

@@ -1,2 +0,2 @@

export * from './langcode';
export * from './local-var';
export * from "./langcode";
export * from "./local-var";

@@ -1,3 +0,3 @@

export * from './locales-base.service';
export * from './locales-rest.service';
export * from './locales-static.service';
export * from "./locales-base.service";
export * from "./locales-rest.service";
export * from "./locales-static.service";

@@ -1,7 +0,6 @@

import { EventDispatcher } from '@ribajs/core';
import { clone } from '@ribajs/utils/src/type';
import { Langcode, LocalPluralization, LocalVar } from '../interfaces';
import { EventDispatcher } from "@ribajs/core";
import { clone } from "@ribajs/utils/src/type";
import { Langcode, LocalPluralization, LocalVar } from "../interfaces";
export abstract class ALocalesService {
public get ready() {

@@ -11,7 +10,7 @@ return this._ready;

public event = new EventDispatcher('i18n');
public event = new EventDispatcher("i18n");
public showMissingTranslation: boolean = false;
public showMissingTranslation = false;
protected _ready: boolean = false;
protected _ready = false;

@@ -28,3 +27,6 @@ /**

constructor(public doNotTranslateDefaultLanguage: boolean, showMissingTranslation: boolean) {
constructor(
public doNotTranslateDefaultLanguage: boolean,
showMissingTranslation: boolean
) {
this.doNotTranslateDefaultLanguage = doNotTranslateDefaultLanguage;

@@ -40,44 +42,50 @@ this.showMissingTranslation = showMissingTranslation;

*/
public async get(properties?: string[], vars?: LocalVar, force: boolean = false) {
public async get(properties?: string[], vars?: LocalVar, force = false) {
if (!this.ready && !force) {
throw new Error('not ready');
throw new Error("not ready");
}
return this.getAll()
// extract properties
.then((locals) => {
if (properties && properties.length) {
let local: any = clone(true, locals);
for (const property of properties) {
if (!property) {
return;
return (
this.getAll()
// extract properties
.then((locals) => {
if (properties && properties.length) {
let local: any = clone(true, locals);
for (const property of properties) {
if (!property) {
return;
}
if (local[property]) {
local = local[property];
} else {
return null;
}
}
return local;
}
if (local[property]) {
local = local[property];
} else {
return null;
return locals;
})
.then((local) => {
if (local === null && properties) {
console.warn(
`WARNING translation missing: "${properties.join(".")}"`,
local,
properties
);
}
}
return local;
}
return locals;
})
.then((local) => {
if (local === null && properties) {
console.warn(`WARNING translation missing: "${properties.join('.')}"`, local, properties);
}
return local;
})
// Replace variables in local string if vars are set
.then((local) => {
if (vars) {
local = this.setTranslateStringPluralization(local, vars);
local = this.setTranslateStringVars(local, vars);
}
return local;
})
.catch((error) => {
console.error(error);
this._ready = false;
return error;
});
return local;
})
// Replace variables in local string if vars are set
.then((local) => {
if (vars) {
local = this.setTranslateStringPluralization(local, vars);
local = this.setTranslateStringVars(local, vars);
}
return local;
})
.catch((error) => {
console.error(error);
this._ready = false;
return error;
})
);
}

@@ -93,3 +101,3 @@

if (!langcode) {
throw new Error('Langcode not found in html tag');
throw new Error("Langcode not found in html tag");
}

@@ -101,3 +109,3 @@ return this.get([langcode, ...properties], vars);

const lang = navigator.language || (navigator as any).userLanguage;
const simplified = lang.split('-')[0].toLowerCase();
const simplified = lang.split("-")[0].toLowerCase();
return simplified;

@@ -107,3 +115,5 @@ }

public getHTMLLangcode(): string {
const langcode = document.documentElement ? document.documentElement.lang : 'en';
const langcode = document.documentElement
? document.documentElement.lang
: "en";
return langcode;

@@ -125,3 +135,3 @@ }

public setLangcode(langcode: string, initial: boolean = false) {
public setLangcode(langcode: string, initial = false) {
if (this.currentLangcode !== langcode) {

@@ -134,3 +144,3 @@ this.currentLangcode = langcode;

}
this.event.trigger('changed', langcode, initial);
this.event.trigger("changed", langcode, initial);
}

@@ -141,4 +151,3 @@ }

const activeCode = this.getLangcode();
return this.get(undefined, undefined, true)
.then((locals) => {
return this.get(undefined, undefined, true).then((locals) => {
const langcodes: Langcode[] = [];

@@ -159,6 +168,6 @@ Object.keys(locals).forEach((langcode) => {

public parseTemplateVars(el: HTMLElement): LocalVar {
const templates = el.querySelectorAll<HTMLTemplateElement>('template');
const templates = el.querySelectorAll<HTMLTemplateElement>("template");
const vars: LocalVar = {};
templates.forEach((template) => {
const name: string | null = template.getAttribute('name');
const name: string | null = template.getAttribute("name");
if (name !== null) {

@@ -175,6 +184,6 @@ vars[name] = template.innerHTML.trim();

public parseLocalVars(el: HTMLElement): LocalVar {
const templates = el.querySelectorAll<HTMLTemplateElement>('template');
const templates = el.querySelectorAll<HTMLTemplateElement>("template");
const vars: LocalVar = {};
templates.forEach((template) => {
const lang: string | null = template.getAttribute('lang');
const lang: string | null = template.getAttribute("lang");
if (lang !== null) {

@@ -193,3 +202,7 @@ vars[lang] = template.innerHTML.trim();

public setTranslateStringVars(translateString: string, vars: LocalVar) {
if (!translateString || Object.keys(vars).length === 0 || typeof(translateString.match) !== 'function') {
if (
!translateString ||
Object.keys(vars).length === 0 ||
typeof translateString.match !== "function"
) {
return translateString;

@@ -201,5 +214,11 @@ }

if (match) {
const varName = match.replace(/{{\s*|\s*}}/gm, '');
if (typeof(vars[varName]) === 'string' || typeof(vars[varName]) === 'number') {
translateString = translateString.replace(match, vars[varName] as string);
const varName = match.replace(/{{\s*|\s*}}/gm, "");
if (
typeof vars[varName] === "string" ||
typeof vars[varName] === "number"
) {
translateString = translateString.replace(
match,
vars[varName] as string
);
}

@@ -220,4 +239,6 @@ }

this.currentLangcode = this.initalLangcode;
if (!this.initalLangcode ) {
throw new Error(`The lang attribute on the html element is requred to detect the default theme language: ${this.initalLangcode}`);
if (!this.initalLangcode) {
throw new Error(
`The lang attribute on the html element is requred to detect the default theme language: ${this.initalLangcode}`
);
}

@@ -227,26 +248,31 @@ // Detect browser language and switch to this language when available

return this.getAvailableLangcodes()
.then((availableLangcodes) => {
let browserLangFound = false;
for (const availableLangcodeObj of availableLangcodes) {
if (availableLangcodeObj.code === browserLangcode) {
browserLangFound = true;
.then((availableLangcodes) => {
let browserLangFound = false;
for (const availableLangcodeObj of availableLangcodes) {
if (availableLangcodeObj.code === browserLangcode) {
browserLangFound = true;
}
}
}
// only switch language if the browser language is not the default language (if doNotTranslateDefaultLanguage is true)
if (!this.doNotTranslateDefaultLanguage || (browserLangFound && browserLangcode !== this.currentLangcode)) {
this.setLangcode(browserLangcode, true);
}
return availableLangcodes;
})
.then((availableLangcodes) => {
this._ready = true;
// If the current langcode is not the inital langcode then translation is needed
const translationNeeded = this.currentLangcode !== this.initalLangcode || !this.doNotTranslateDefaultLanguage;
this.event.trigger('ready', this.currentLangcode, translationNeeded);
})
.catch((error) => {
console.error(error);
this._ready = false;
return error;
});
// only switch language if the browser language is not the default language (if doNotTranslateDefaultLanguage is true)
if (
!this.doNotTranslateDefaultLanguage ||
(browserLangFound && browserLangcode !== this.currentLangcode)
) {
this.setLangcode(browserLangcode, true);
}
return availableLangcodes;
})
.then((/*availableLangcodes*/) => {
this._ready = true;
// If the current langcode is not the inital langcode then translation is needed
const translationNeeded =
this.currentLangcode !== this.initalLangcode ||
!this.doNotTranslateDefaultLanguage;
this.event.trigger("ready", this.currentLangcode, translationNeeded);
})
.catch((error) => {
console.error(error);
this._ready = false;
return error;
});
}

@@ -259,4 +285,11 @@

*/
protected setTranslateStringPluralization(translateObj: LocalPluralization | string, vars: LocalVar) {
if (vars.count && typeof(translateObj) === 'object' && translateObj !== null) {
protected setTranslateStringPluralization(
translateObj: LocalPluralization | string,
vars: LocalVar
) {
if (
vars.count &&
typeof translateObj === "object" &&
translateObj !== null
) {
const count = Number(vars.count);

@@ -278,3 +311,7 @@ if (count === 0) {

if (typeof(translateObj) === 'object' && translateObj !== null && translateObj.other) {
if (
typeof translateObj === "object" &&
translateObj !== null &&
translateObj.other
) {
return translateObj.other;

@@ -281,0 +318,0 @@ }

@@ -1,3 +0,3 @@

import { HttpService } from '@ribajs/core';
import { ALocalesService } from './locales-base.service';
import { HttpService } from "@ribajs/core";
import { ALocalesService } from "./locales-base.service";

@@ -8,3 +8,2 @@ /**

export class LocalesRestService extends ALocalesService {
public static instances: {

@@ -30,3 +29,7 @@ [url: string]: LocalesRestService;

constructor(protected url: string, doNotTranslateDefaultLanguage: boolean = false, showMissingTranslation: boolean = false) {
constructor(
protected url: string,
doNotTranslateDefaultLanguage = false,
showMissingTranslation = false
) {
super(doNotTranslateDefaultLanguage, showMissingTranslation);

@@ -67,4 +70,3 @@

}
return HttpService.getJSON(url)
.then((locales: any) => {
return HttpService.getJSON(url).then((locales: any) => {
this.locales[url as string] = locales;

@@ -74,3 +76,2 @@ return this.locales[url as string];

}
}

@@ -1,5 +0,4 @@

import { ALocalesService } from './locales-base.service';
import { ALocalesService } from "./locales-base.service";
export class LocalesStaticService extends ALocalesService {
public static instances: {

@@ -9,3 +8,3 @@ [id: string]: LocalesStaticService;

public static getInstance(id: string = 'main') {
public static getInstance(id = "main") {
return LocalesStaticService.instances[id];

@@ -24,6 +23,11 @@ }

constructor(protected locales: any, protected id?: string, doNotTranslateDefaultLanguage: boolean = false, showMissingTranslation: boolean = false) {
constructor(
protected locales: any,
protected id?: string,
doNotTranslateDefaultLanguage = false,
showMissingTranslation = false
) {
super(doNotTranslateDefaultLanguage, showMissingTranslation);
if (!id) {
id = 'main';
id = "main";
}

@@ -45,6 +49,5 @@

*/
protected async getAll(themeID?: number) {
protected async getAll(/*themeID?: number*/) {
return this.locales;
}
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc