piral-translate 0.15.0-beta.4708 → 0.15.0-beta.4715
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/esm/create.js +11 -0
- package/esm/create.js.map +1 -1
- package/esm/types.d.ts +10 -0
- package/lib/create.js +11 -0
- package/lib/create.js.map +1 -1
- package/lib/types.d.ts +10 -0
- package/package.json +7 -3
- package/piral-translate.min.js +1 -1
- package/src/create.test.ts +81 -0
- package/src/create.ts +15 -0
- package/src/types.ts +10 -0
package/README.md
CHANGED
|
@@ -34,6 +34,10 @@ Sets the translations (custom language to key to string mapping) for the pilet.
|
|
|
34
34
|
|
|
35
35
|
Gets the translations defined in the pilet.
|
|
36
36
|
|
|
37
|
+
### `addTranslations()`
|
|
38
|
+
|
|
39
|
+
Adds a list of translations (custom language to key to string mapping) to the existing translations for the pilet.
|
|
40
|
+
|
|
37
41
|
## Usage
|
|
38
42
|
|
|
39
43
|
::: summary: For pilet authors
|
package/esm/create.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import * as deepmerge from 'deepmerge';
|
|
1
2
|
import { createActions } from './actions';
|
|
2
3
|
import { Localizer } from './localize';
|
|
3
4
|
import { DefaultPicker } from './default';
|
|
@@ -29,6 +30,16 @@ export function createLocaleApi(localizer = setupLocalizer()) {
|
|
|
29
30
|
return (api) => {
|
|
30
31
|
let localTranslations = {};
|
|
31
32
|
return {
|
|
33
|
+
addTranslations(messages, isOverriding = true) {
|
|
34
|
+
const messagesToMerge = messages;
|
|
35
|
+
if (isOverriding) {
|
|
36
|
+
messagesToMerge.unshift(localizer.messages);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
messagesToMerge.push(localizer.messages);
|
|
40
|
+
}
|
|
41
|
+
this.setTranslations(deepmerge.all(messagesToMerge));
|
|
42
|
+
},
|
|
32
43
|
getCurrentLanguage(cb) {
|
|
33
44
|
const selected = context.readState((s) => s.language.selected);
|
|
34
45
|
if (cb) {
|
package/esm/create.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"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"}
|
package/esm/types.d.ts
CHANGED
|
@@ -108,6 +108,16 @@ export interface LocalizationMessages {
|
|
|
108
108
|
[lang: string]: Translations;
|
|
109
109
|
}
|
|
110
110
|
export interface PiletLocaleApi {
|
|
111
|
+
/**
|
|
112
|
+
* Adds a list of translations to the existing translations.
|
|
113
|
+
*
|
|
114
|
+
* Internally, setTranslations is used, which means the translations will be exclusively used for
|
|
115
|
+
* retrieving translations for the pilet.
|
|
116
|
+
*
|
|
117
|
+
* @param messagesList The list of messages that extend the existing translations
|
|
118
|
+
* @param [isOverriding=true] Indicates whether the new translations overwrite the existing translations
|
|
119
|
+
*/
|
|
120
|
+
addTranslations(messagesList: LocalizationMessages[], isOverriding?: boolean): void;
|
|
111
121
|
/**
|
|
112
122
|
* Gets the currently selected language directly.
|
|
113
123
|
*/
|
package/lib/create.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createLocaleApi = exports.setupLocalizer = void 0;
|
|
4
|
+
const deepmerge = require("deepmerge");
|
|
4
5
|
const actions_1 = require("./actions");
|
|
5
6
|
const localize_1 = require("./localize");
|
|
6
7
|
const default_1 = require("./default");
|
|
@@ -33,6 +34,16 @@ function createLocaleApi(localizer = setupLocalizer()) {
|
|
|
33
34
|
return (api) => {
|
|
34
35
|
let localTranslations = {};
|
|
35
36
|
return {
|
|
37
|
+
addTranslations(messages, isOverriding = true) {
|
|
38
|
+
const messagesToMerge = messages;
|
|
39
|
+
if (isOverriding) {
|
|
40
|
+
messagesToMerge.unshift(localizer.messages);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
messagesToMerge.push(localizer.messages);
|
|
44
|
+
}
|
|
45
|
+
this.setTranslations(deepmerge.all(messagesToMerge));
|
|
46
|
+
},
|
|
36
47
|
getCurrentLanguage(cb) {
|
|
37
48
|
const selected = context.readState((s) => s.language.selected);
|
|
38
49
|
if (cb) {
|
package/lib/create.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"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"}
|
package/lib/types.d.ts
CHANGED
|
@@ -108,6 +108,16 @@ export interface LocalizationMessages {
|
|
|
108
108
|
[lang: string]: Translations;
|
|
109
109
|
}
|
|
110
110
|
export interface PiletLocaleApi {
|
|
111
|
+
/**
|
|
112
|
+
* Adds a list of translations to the existing translations.
|
|
113
|
+
*
|
|
114
|
+
* Internally, setTranslations is used, which means the translations will be exclusively used for
|
|
115
|
+
* retrieving translations for the pilet.
|
|
116
|
+
*
|
|
117
|
+
* @param messagesList The list of messages that extend the existing translations
|
|
118
|
+
* @param [isOverriding=true] Indicates whether the new translations overwrite the existing translations
|
|
119
|
+
*/
|
|
120
|
+
addTranslations(messagesList: LocalizationMessages[], isOverriding?: boolean): void;
|
|
111
121
|
/**
|
|
112
122
|
* Gets the currently selected language directly.
|
|
113
123
|
*/
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "piral-translate",
|
|
3
|
-
"version": "0.15.0-beta.
|
|
3
|
+
"version": "0.15.0-beta.4715",
|
|
4
4
|
"description": "Plugin for providing translated messages in Piral.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"piral",
|
|
@@ -62,14 +62,18 @@
|
|
|
62
62
|
"typedoc": "typedoc --json ../../../docs/types/piral-translate.json src --exclude \"src/**/*.test.*\"",
|
|
63
63
|
"test": "echo \"Error: run tests from root\" && exit 1"
|
|
64
64
|
},
|
|
65
|
+
"dependencies": {
|
|
66
|
+
"deepmerge": "^4.2.2"
|
|
67
|
+
},
|
|
65
68
|
"devDependencies": {
|
|
69
|
+
"@types/deepmerge": "^2.2.0",
|
|
66
70
|
"@types/react": "^18.0.0",
|
|
67
|
-
"piral-core": "0.15.0-beta.
|
|
71
|
+
"piral-core": "0.15.0-beta.4715",
|
|
68
72
|
"react": "^18.0.0"
|
|
69
73
|
},
|
|
70
74
|
"peerDependencies": {
|
|
71
75
|
"piral-core": "0.14.x || 0.15.x",
|
|
72
76
|
"react": ">=16.8.0"
|
|
73
77
|
},
|
|
74
|
-
"gitHead": "
|
|
78
|
+
"gitHead": "d60f35a862f4f4d452a504fae843c60d083a88f4"
|
|
75
79
|
}
|
package/piral-translate.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var piralTranslate=(()=>{var
|
|
1
|
+
var piralTranslate=(()=>{var F=Object.create;var u=Object.defineProperty,U=Object.defineProperties,$=Object.getOwnPropertyDescriptor,D=Object.getOwnPropertyDescriptors,N=Object.getOwnPropertyNames,h=Object.getOwnPropertySymbols,B=Object.getPrototypeOf,O=Object.prototype.hasOwnProperty,V=Object.prototype.propertyIsEnumerable;var P=(e,r,t)=>r in e?u(e,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[r]=t,g=(e,r)=>{for(var t in r||(r={}))O.call(r,t)&&P(e,t,r[t]);if(h)for(var t of h(r))V.call(r,t)&&P(e,t,r[t]);return e},f=(e,r)=>U(e,D(r)),A=e=>u(e,"__esModule",{value:!0});var l=(e=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(e,{get:(r,t)=>(typeof require!="undefined"?require:r)[t]}):e)(function(e){if(typeof require!="undefined")return require.apply(this,arguments);throw new Error('Dynamic require of "'+e+'" is not supported')});var K=(e,r)=>()=>(r||e((r={exports:{}}).exports,r),r.exports),Y=(e,r)=>{A(e);for(var t in r)u(e,t,{get:r[t],enumerable:!0})},Z=(e,r,t)=>{if(r&&typeof r=="object"||typeof r=="function")for(let a of N(r))!O.call(e,a)&&a!=="default"&&u(e,a,{get:()=>r[a],enumerable:!(t=$(r,a))||t.enumerable});return e},i=e=>Z(A(u(e!=null?F(B(e)):{},"default",e&&e.__esModule&&"default"in e?{get:()=>e.default,enumerable:!0}:{value:e,enumerable:!0})),e);var z=K((ye,v)=>{"use strict";var q=function(r){return H(r)&&!J(r)};function H(e){return!!e&&typeof e=="object"}function J(e){var r=Object.prototype.toString.call(e);return r==="[object RegExp]"||r==="[object Date]"||X(e)}var Q=typeof Symbol=="function"&&Symbol.for,W=Q?Symbol.for("react.element"):60103;function X(e){return e.$$typeof===W}function ee(e){return Array.isArray(e)?[]:{}}function p(e,r){return r.clone!==!1&&r.isMergeableObject(e)?c(ee(e),e,r):e}function re(e,r,t){return e.concat(r).map(function(a){return p(a,t)})}function te(e,r){if(!r.customMerge)return c;var t=r.customMerge(e);return typeof t=="function"?t:c}function ae(e){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(e).filter(function(r){return e.propertyIsEnumerable(r)}):[]}function S(e){return Object.keys(e).concat(ae(e))}function j(e,r){try{return r in e}catch{return!1}}function ne(e,r){return j(e,r)&&!(Object.hasOwnProperty.call(e,r)&&Object.propertyIsEnumerable.call(e,r))}function se(e,r,t){var a={};return t.isMergeableObject(e)&&S(e).forEach(function(n){a[n]=p(e[n],t)}),S(r).forEach(function(n){ne(e,n)||(j(e,n)&&t.isMergeableObject(r[n])?a[n]=te(n,t)(e[n],r[n],t):a[n]=p(r[n],t))}),a}function c(e,r,t){t=t||{},t.arrayMerge=t.arrayMerge||re,t.isMergeableObject=t.isMergeableObject||q,t.cloneUnlessOtherwiseSpecified=p;var a=Array.isArray(r),n=Array.isArray(e),s=a===n;return s?a?t.arrayMerge(e,r,t):se(e,r,t):p(r,t)}c.all=function(r,t){if(!Array.isArray(r))throw new Error("first argument should be an array");return r.reduce(function(a,n){return c(a,n,t)},{})};var oe=c;v.exports=oe});var be={};Y(be,{Languages:()=>me,PiralLanguagesPicker:()=>T,createLocaleApi:()=>ge,getUserLocale:()=>ue,setupLocalizer:()=>w,useDynamicLanguage:()=>fe,useTranslate:()=>pe});var x=i(l("piral-core")),T=(0,x.getPiralComponent)("LanguagesPicker");var k=i(z());function E(e){return{selectLanguage(r,t){r.dispatch(a=>{e.language=t;let n=a.language.selected,s=t;return setTimeout(()=>{r.emit("select-language",{previousLanguage:n,currentLanguage:s})},0),f(g({},a),{language:f(g({},a.language),{loading:t===void 0,selected:t})})})},translate(r,t,a){return e&&e.localizeGlobal(t,a)},setTranslations(r,t,a){e.messages[t]=a.global;for(let n of a.locals){let s=r.apis[n.name];if(s){let o=s.getTranslations();o[t]=n.value,s.setTranslations(o)}}},getTranslations(r,t){return{global:e.messages[t],locals:Object.keys(r.apis).map(a=>({name:a,value:r.apis[a].getTranslations()[t]}))}}}}function ie(e,r){return r?"...":""}function le(e,r){return e.replace(/{{\s*([A-Za-z0-9_.]+)\s*}}/g,(t,a)=>a in r?r[a]||"":`{{${a}}}`)}var M=class{constructor(r,t,a,n=ie){this.messages=r;this.language=t;this.languages=a;this.fallback=n}localizeGlobal(r,t){return this.localizeBase(r,t)}localizeLocal(r,t,a){let n=this.translateMessage(r,t,a);return n===void 0?this.localizeBase(t,a):n}localizeBase(r,t){let a=this.translateMessage(this.messages,r,t);return a===void 0?this.fallback(r,this.language):a}translateMessage(r,t,a){let n=this.language,s=n&&r[n],o=s&&s[t];return o&&(a?le(o,a):o)}};var C=i(l("piral-core")),_=e=>(0,C.defaultRender)(void 0);function w(e={}){let r=e.messages||{},t=Object.keys(r),a=t[0]||"en",n=e.language,o=(typeof n=="function"?n(t,a,"en"):n)||a;return new M(r,o,t.length?t:[o],e.fallback)}function ge(e=w()){return r=>(r.defineActions(E(e)),r.dispatch(t=>f(g({},t),{components:g({LanguagesPicker:_},t.components),language:{loading:!1,available:e.languages,selected:e.language}})),t=>{let a={};return{addTranslations(n,s=!0){let o=n;s?o.unshift(e.messages):o.push(e.messages),this.setTranslations(k.all(o))},getCurrentLanguage(n){let s=r.readState(o=>o.language.selected);if(n){n(s);let o=b=>{n(b.currentLanguage)};return t.on("select-language",o),()=>t.off("select-language",o)}return s},setTranslations(n){a=n},getTranslations(){return a},translate(n,s){return e.localizeLocal(a,n,s)}}})}var L=i(l("piral-core"));function ce(e,r){let t=L.cookie.getItem("_culture")||L.storage.getItem("locale");return t||(r?r.toLowerCase().substring(0,2):navigator.language?navigator.language.substring(0,2):e)}function ue(e,r,t){let a=ce(r,t||"");return e.indexOf(a)!==-1?a:r}var d=i(l("react")),m=i(l("piral-core"));function fe(e,r){let[t,a]=(0,d.useState)(e),{selectLanguage:n,setTranslations:s,getTranslations:o}=(0,m.useActions)();return(0,d.useEffect)(()=>{let b=!0,R=o(t);return n(void 0),r(t,R).then(y=>{b&&(s(t,y),n(t))},y=>console.error(y)),()=>{b=!1}},[t]),[t,a]}function pe(){let{translate:e}=(0,m.useActions)();return(0,m.useGlobalState)(r=>r.language.selected),e}var G=i(l("react")),I=i(l("piral-core"));var me=()=>{let{available:e,selected:r}=(0,I.useGlobalState)(t=>t.language);return G.createElement(T,{selected:r,available:e})};return be;})();
|
package/src/create.test.ts
CHANGED
|
@@ -133,4 +133,85 @@ describe('Create Localize API', () => {
|
|
|
133
133
|
const result = api.getCurrentLanguage();
|
|
134
134
|
expect(result).toEqual('fr');
|
|
135
135
|
});
|
|
136
|
+
|
|
137
|
+
it('addTranslations should add new translations if no value exists yet for the combination of language and key', (): void => {
|
|
138
|
+
const config = {
|
|
139
|
+
language: 'fr',
|
|
140
|
+
messages: {
|
|
141
|
+
fr: {
|
|
142
|
+
foo: 'fóo',
|
|
143
|
+
bar: 'bár',
|
|
144
|
+
},
|
|
145
|
+
},
|
|
146
|
+
};
|
|
147
|
+
const messagesToAdd = {
|
|
148
|
+
fr: {
|
|
149
|
+
foo: 'fóo (new)',
|
|
150
|
+
bar: 'bár (new)',
|
|
151
|
+
baz: 'báz (new)',
|
|
152
|
+
},
|
|
153
|
+
};
|
|
154
|
+
const api = (createLocaleApi(setupLocalizer(config))(context) as any)();
|
|
155
|
+
api.addTranslations([
|
|
156
|
+
messagesToAdd
|
|
157
|
+
]);
|
|
158
|
+
const result = api.translate('baz');
|
|
159
|
+
|
|
160
|
+
expect(result).toEqual(messagesToAdd.fr.baz);
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
it('addTranslations should add new translations if overwriting is enabled and a value already exists for the combination of language and key', (): void => {
|
|
164
|
+
const config = {
|
|
165
|
+
language: 'fr',
|
|
166
|
+
messages: {
|
|
167
|
+
fr: {
|
|
168
|
+
foo: 'fóo',
|
|
169
|
+
bar: 'bár',
|
|
170
|
+
},
|
|
171
|
+
},
|
|
172
|
+
};
|
|
173
|
+
const messagesToAdd = {
|
|
174
|
+
fr: {
|
|
175
|
+
foo: 'fóo (new)',
|
|
176
|
+
bar: 'bár (new)',
|
|
177
|
+
baz: 'báz (new)',
|
|
178
|
+
},
|
|
179
|
+
};
|
|
180
|
+
const api = (createLocaleApi(setupLocalizer(config))(context) as any)();
|
|
181
|
+
api.addTranslations([
|
|
182
|
+
messagesToAdd
|
|
183
|
+
]);
|
|
184
|
+
const result = api.translate('bar');
|
|
185
|
+
|
|
186
|
+
expect(result).toEqual(messagesToAdd.fr.bar);
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
it('addTranslations should not add new translations if overwriting is disabled and a value already exists for the combination of language and key', (): void => {
|
|
190
|
+
const config = {
|
|
191
|
+
language: 'fr',
|
|
192
|
+
messages: {
|
|
193
|
+
fr: {
|
|
194
|
+
foo: 'fóo',
|
|
195
|
+
bar: 'bár',
|
|
196
|
+
},
|
|
197
|
+
},
|
|
198
|
+
};
|
|
199
|
+
const messagesToAdd = {
|
|
200
|
+
fr: {
|
|
201
|
+
foo: 'fóo (neu)',
|
|
202
|
+
bar: 'bár (neu)',
|
|
203
|
+
baz: 'báz',
|
|
204
|
+
},
|
|
205
|
+
};
|
|
206
|
+
const api = (createLocaleApi(setupLocalizer(config))(context) as any)();
|
|
207
|
+
api.addTranslations(
|
|
208
|
+
[
|
|
209
|
+
messagesToAdd
|
|
210
|
+
],
|
|
211
|
+
false
|
|
212
|
+
);
|
|
213
|
+
const result = api.translate('bar');
|
|
214
|
+
|
|
215
|
+
expect(result).toEqual(config.messages.fr.bar);
|
|
216
|
+
});
|
|
136
217
|
});
|
package/src/create.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import * as deepmerge from 'deepmerge';
|
|
2
|
+
|
|
1
3
|
import type { PiralPlugin } from 'piral-core';
|
|
2
4
|
import { createActions } from './actions';
|
|
3
5
|
import { Localizer } from './localize';
|
|
@@ -70,6 +72,19 @@ export function createLocaleApi(localizer: Localizable = setupLocalizer()): Pira
|
|
|
70
72
|
let localTranslations: LocalizationMessages = {};
|
|
71
73
|
|
|
72
74
|
return {
|
|
75
|
+
addTranslations(messages: LocalizationMessages[], isOverriding: boolean = true) {
|
|
76
|
+
const messagesToMerge: LocalizationMessages[] = messages;
|
|
77
|
+
|
|
78
|
+
if (isOverriding) {
|
|
79
|
+
messagesToMerge.unshift(localizer.messages);
|
|
80
|
+
} else {
|
|
81
|
+
messagesToMerge.push(localizer.messages);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
this.setTranslations(
|
|
85
|
+
deepmerge.all(messagesToMerge),
|
|
86
|
+
);
|
|
87
|
+
},
|
|
73
88
|
getCurrentLanguage(cb?: (l: string) => void): any {
|
|
74
89
|
const selected = context.readState((s) => s.language.selected);
|
|
75
90
|
|
package/src/types.ts
CHANGED
|
@@ -120,6 +120,16 @@ export interface LocalizationMessages {
|
|
|
120
120
|
}
|
|
121
121
|
|
|
122
122
|
export interface PiletLocaleApi {
|
|
123
|
+
/**
|
|
124
|
+
* Adds a list of translations to the existing translations.
|
|
125
|
+
*
|
|
126
|
+
* Internally, setTranslations is used, which means the translations will be exclusively used for
|
|
127
|
+
* retrieving translations for the pilet.
|
|
128
|
+
*
|
|
129
|
+
* @param messagesList The list of messages that extend the existing translations
|
|
130
|
+
* @param [isOverriding=true] Indicates whether the new translations overwrite the existing translations
|
|
131
|
+
*/
|
|
132
|
+
addTranslations(messagesList: LocalizationMessages[], isOverriding?: boolean): void;
|
|
123
133
|
/**
|
|
124
134
|
* Gets the currently selected language directly.
|
|
125
135
|
*/
|