piral-translate 0.15.0-beta.4699 → 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 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":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AA8B1C;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,SAAuB,EAAE;IACtD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;IACnC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACzC,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC;IACpC,MAAM,QAAQ,GAAG,OAAO,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;IAC7G,MAAM,QAAQ,GAAG,QAAQ,IAAI,WAAW,CAAC;IACzC,OAAO,IAAI,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;AACnG,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,YAAyB,cAAc,EAAE;IACvE,OAAO,CAAC,OAAO,EAAE,EAAE;QACjB,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;QAEhD,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iCACvB,KAAK,KACR,UAAU,kBACR,eAAe,EAAE,aAAa,IAC3B,KAAK,CAAC,UAAU,GAErB,QAAQ,EAAE;gBACR,OAAO,EAAE,KAAK;gBACd,SAAS,EAAE,SAAS,CAAC,SAAS;gBAC9B,QAAQ,EAAE,SAAS,CAAC,QAAQ;aAC7B,IACD,CAAC,CAAC;QAEJ,OAAO,CAAC,GAAG,EAAE,EAAE;YACb,IAAI,iBAAiB,GAAyB,EAAE,CAAC;YAEjD,OAAO;gBACL,kBAAkB,CAAC,EAAwB;oBACzC,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBAE/D,IAAI,EAAE,EAAE;wBACN,EAAE,CAAC,QAAQ,CAAC,CAAC;wBACb,MAAM,OAAO,GAAG,CAAC,EAA4B,EAAE,EAAE;4BAC/C,EAAE,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC;wBACzB,CAAC,CAAC;wBACF,GAAG,CAAC,EAAE,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;wBACnC,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;qBAClD;oBAED,OAAO,QAAQ,CAAC;gBAClB,CAAC;gBACD,eAAe,CAAC,QAAQ;oBACtB,iBAAiB,GAAG,QAAQ,CAAC;gBAC/B,CAAC;gBACD,eAAe;oBACb,OAAO,iBAAiB,CAAC;gBAC3B,CAAC;gBACD,SAAS,CAAC,GAAG,EAAE,SAAS;oBACtB,OAAO,SAAS,CAAC,aAAa,CAAC,iBAAiB,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;gBACpE,CAAC;aACF,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
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":";;;AACA,uCAA0C;AAC1C,yCAAuC;AACvC,uCAA0C;AA8B1C;;;GAGG;AACH,SAAgB,cAAc,CAAC,SAAuB,EAAE;IACtD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;IACnC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACzC,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC;IACpC,MAAM,QAAQ,GAAG,OAAO,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;IAC7G,MAAM,QAAQ,GAAG,QAAQ,IAAI,WAAW,CAAC;IACzC,OAAO,IAAI,oBAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;AACnG,CAAC;AARD,wCAQC;AAED;;;GAGG;AACH,SAAgB,eAAe,CAAC,YAAyB,cAAc,EAAE;IACvE,OAAO,CAAC,OAAO,EAAE,EAAE;QACjB,OAAO,CAAC,aAAa,CAAC,IAAA,uBAAa,EAAC,SAAS,CAAC,CAAC,CAAC;QAEhD,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iCACvB,KAAK,KACR,UAAU,kBACR,eAAe,EAAE,uBAAa,IAC3B,KAAK,CAAC,UAAU,GAErB,QAAQ,EAAE;gBACR,OAAO,EAAE,KAAK;gBACd,SAAS,EAAE,SAAS,CAAC,SAAS;gBAC9B,QAAQ,EAAE,SAAS,CAAC,QAAQ;aAC7B,IACD,CAAC,CAAC;QAEJ,OAAO,CAAC,GAAG,EAAE,EAAE;YACb,IAAI,iBAAiB,GAAyB,EAAE,CAAC;YAEjD,OAAO;gBACL,kBAAkB,CAAC,EAAwB;oBACzC,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBAE/D,IAAI,EAAE,EAAE;wBACN,EAAE,CAAC,QAAQ,CAAC,CAAC;wBACb,MAAM,OAAO,GAAG,CAAC,EAA4B,EAAE,EAAE;4BAC/C,EAAE,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC;wBACzB,CAAC,CAAC;wBACF,GAAG,CAAC,EAAE,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;wBACnC,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;qBAClD;oBAED,OAAO,QAAQ,CAAC;gBAClB,CAAC;gBACD,eAAe,CAAC,QAAQ;oBACtB,iBAAiB,GAAG,QAAQ,CAAC;gBAC/B,CAAC;gBACD,eAAe;oBACb,OAAO,iBAAiB,CAAC;gBAC3B,CAAC;gBACD,SAAS,CAAC,GAAG,EAAE,SAAS;oBACtB,OAAO,SAAS,CAAC,aAAa,CAAC,iBAAiB,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;gBACpE,CAAC;aACF,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AA/CD,0CA+CC"}
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.4699",
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.4699",
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": "1d7d09c7a953009ade1470abf74b5e7e627f2bc2"
78
+ "gitHead": "d60f35a862f4f4d452a504fae843c60d083a88f4"
75
79
  }
@@ -1 +1 @@
1
- var piralTranslate=(()=>{var G=Object.create;var c=Object.defineProperty,F=Object.defineProperties,E=Object.getOwnPropertyDescriptor,R=Object.getOwnPropertyDescriptors,$=Object.getOwnPropertyNames,k=Object.getOwnPropertySymbols,D=Object.getPrototypeOf,x=Object.prototype.hasOwnProperty,O=Object.prototype.propertyIsEnumerable;var P=(t,e,a)=>e in t?c(t,e,{enumerable:!0,configurable:!0,writable:!0,value:a}):t[e]=a,g=(t,e)=>{for(var a in e||(e={}))x.call(e,a)&&P(t,a,e[a]);if(k)for(var a of k(e))O.call(e,a)&&P(t,a,e[a]);return t},u=(t,e)=>F(t,R(e)),y=t=>c(t,"__esModule",{value:!0});var i=(t=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(t,{get:(e,a)=>(typeof require!="undefined"?require:e)[a]}):t)(function(t){if(typeof require!="undefined")return require.apply(this,arguments);throw new Error('Dynamic require of "'+t+'" is not supported')});var w=(t,e)=>{y(t);for(var a in e)c(t,a,{get:e[a],enumerable:!0})},B=(t,e,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of $(e))!x.call(t,n)&&n!=="default"&&c(t,n,{get:()=>e[n],enumerable:!(a=E(e,n))||a.enumerable});return t},l=t=>B(y(c(t!=null?G(D(t)):{},"default",t&&t.__esModule&&"default"in t?{get:()=>t.default,enumerable:!0}:{value:t,enumerable:!0})),t);var J={};w(J,{Languages:()=>H,PiralLanguagesPicker:()=>b,createLocaleApi:()=>I,getUserLocale:()=>V,setupLocalizer:()=>M,useDynamicLanguage:()=>Z,useTranslate:()=>q});var z=l(i("piral-core")),b=(0,z.getPiralComponent)("LanguagesPicker");function h(t){return{selectLanguage(e,a){e.dispatch(n=>{t.language=a;let r=n.language.selected,s=a;return setTimeout(()=>{e.emit("select-language",{previousLanguage:r,currentLanguage:s})},0),u(g({},n),{language:u(g({},n.language),{loading:a===void 0,selected:a})})})},translate(e,a,n){return t&&t.localizeGlobal(a,n)},setTranslations(e,a,n){t.messages[a]=n.global;for(let r of n.locals){let s=e.apis[r.name];if(s){let o=s.getTranslations();o[a]=r.value,s.setTranslations(o)}}},getTranslations(e,a){return{global:t.messages[a],locals:Object.keys(e.apis).map(n=>({name:n,value:e.apis[n].getTranslations()[a]}))}}}}function U(t,e){return e?"...":""}function j(t,e){return t.replace(/{{\s*([A-Za-z0-9_.]+)\s*}}/g,(a,n)=>n in e?e[n]||"":`{{${n}}}`)}var T=class{constructor(e,a,n,r=U){this.messages=e;this.language=a;this.languages=n;this.fallback=r}localizeGlobal(e,a){return this.localizeBase(e,a)}localizeLocal(e,a,n){let r=this.translateMessage(e,a,n);return r===void 0?this.localizeBase(a,n):r}localizeBase(e,a){let n=this.translateMessage(this.messages,e,a);return n===void 0?this.fallback(e,this.language):n}translateMessage(e,a,n){let r=this.language,s=r&&e[r],o=s&&s[a];return o&&(n?j(o,n):o)}};var v=l(i("piral-core")),C=t=>(0,v.defaultRender)(void 0);function M(t={}){let e=t.messages||{},a=Object.keys(e),n=a[0]||"en",r=t.language,o=(typeof r=="function"?r(a,n,"en"):r)||n;return new T(e,o,a.length?a:[o],t.fallback)}function I(t=M()){return e=>(e.defineActions(h(t)),e.dispatch(a=>u(g({},a),{components:g({LanguagesPicker:C},a.components),language:{loading:!1,available:t.languages,selected:t.language}})),a=>{let n={};return{getCurrentLanguage(r){let s=e.readState(o=>o.language.selected);if(r){r(s);let o=f=>{r(f.currentLanguage)};return a.on("select-language",o),()=>a.off("select-language",o)}return s},setTranslations(r){n=r},getTranslations(){return n},translate(r,s){return t.localizeLocal(n,r,s)}}})}var m=l(i("piral-core"));function N(t,e){let a=m.cookie.getItem("_culture")||m.storage.getItem("locale");return a||(e?e.toLowerCase().substring(0,2):navigator.language?navigator.language.substring(0,2):t)}function V(t,e,a){let n=N(e,a||"");return t.indexOf(n)!==-1?n:e}var L=l(i("react")),p=l(i("piral-core"));function Z(t,e){let[a,n]=(0,L.useState)(t),{selectLanguage:r,setTranslations:s,getTranslations:o}=(0,p.useActions)();return(0,L.useEffect)(()=>{let f=!0,_=o(a);return r(void 0),e(a,_).then(d=>{f&&(s(a,d),r(a))},d=>console.error(d)),()=>{f=!1}},[a]),[a,n]}function q(){let{translate:t}=(0,p.useActions)();return(0,p.useGlobalState)(e=>e.language.selected),t}var S=l(i("react")),A=l(i("piral-core"));var H=()=>{let{available:t,selected:e}=(0,A.useGlobalState)(a=>a.language);return S.createElement(b,{selected:e,available:t})};return J;})();
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;})();
@@ -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
  */