piral-translate 1.4.0-beta.6313 → 1.4.0-beta.6342

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/esm/localize.js CHANGED
@@ -15,7 +15,7 @@ function defaultFallback(key, language) {
15
15
  }
16
16
  function formatMessage(message, variables) {
17
17
  return message.replace(/{{\s*([A-Za-z0-9_.]+)\s*}}/g, (_match, p1) => {
18
- return p1 in variables ? variables[p1] || '' : `{{${p1}}}`;
18
+ return p1 in variables ? variables[p1] ?? '' : `{{${p1}}}`;
19
19
  });
20
20
  }
21
21
  export class Localizer {
package/lib/localize.js CHANGED
@@ -18,7 +18,7 @@ function defaultFallback(key, language) {
18
18
  }
19
19
  function formatMessage(message, variables) {
20
20
  return message.replace(/{{\s*([A-Za-z0-9_.]+)\s*}}/g, (_match, p1) => {
21
- return p1 in variables ? variables[p1] || '' : `{{${p1}}}`;
21
+ return p1 in variables ? variables[p1] ?? '' : `{{${p1}}}`;
22
22
  });
23
23
  }
24
24
  class Localizer {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "piral-translate",
3
- "version": "1.4.0-beta.6313",
3
+ "version": "1.4.0-beta.6342",
4
4
  "description": "Plugin for providing translated messages in Piral.",
5
5
  "keywords": [
6
6
  "piral",
@@ -68,8 +68,8 @@
68
68
  "devDependencies": {
69
69
  "@types/deepmerge": "^2.2.0",
70
70
  "@types/react": "^18.0.0",
71
- "piral-core": "1.4.0-beta.6313",
71
+ "piral-core": "1.4.0-beta.6342",
72
72
  "react": "^18.0.0"
73
73
  },
74
- "gitHead": "7d4435e0f368bb36b2095f3b15dfb57f57932c29"
74
+ "gitHead": "e6c8a51029c2d826696b9eddd724462ad09de66d"
75
75
  }
@@ -1 +1 @@
1
- var piralTranslate=(()=>{var R=Object.create;var p=Object.defineProperty;var G=Object.getOwnPropertyDescriptor;var N=Object.getOwnPropertyNames;var $=Object.getPrototypeOf,I=Object.prototype.hasOwnProperty;var j=e=>p(e,"__esModule",{value:!0});var c=(e=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(e,{get:(t,r)=>(typeof require!="undefined"?require:t)[r]}):e)(function(e){if(typeof require!="undefined")return require.apply(this,arguments);throw new Error('Dynamic require of "'+e+'" is not supported')});var F=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),U=(e,t)=>{j(e);for(var r in t)p(e,r,{get:t[r],enumerable:!0})},D=(e,t,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of N(t))!I.call(e,n)&&n!=="default"&&p(e,n,{get:()=>t[n],enumerable:!(r=G(t,n))||r.enumerable});return e},l=e=>D(j(p(e!=null?R($(e)):{},"default",e&&e.__esModule&&"default"in e?{get:()=>e.default,enumerable:!0}:{value:e,enumerable:!0})),e);var h=F((me,z)=>{"use strict";var B=function(t){return V(t)&&!K(t)};function V(e){return!!e&&typeof e=="object"}function K(e){var t=Object.prototype.toString.call(e);return t==="[object RegExp]"||t==="[object Date]"||q(e)}var Y=typeof Symbol=="function"&&Symbol.for,Z=Y?Symbol.for("react.element"):60103;function q(e){return e.$$typeof===Z}function H(e){return Array.isArray(e)?[]:{}}function u(e,t){return t.clone!==!1&&t.isMergeableObject(e)?g(H(e),e,t):e}function J(e,t,r){return e.concat(t).map(function(n){return u(n,r)})}function Q(e,t){if(!t.customMerge)return g;var r=t.customMerge(e);return typeof r=="function"?r:g}function W(e){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(e).filter(function(t){return Object.propertyIsEnumerable.call(e,t)}):[]}function x(e){return Object.keys(e).concat(W(e))}function A(e,t){try{return t in e}catch{return!1}}function X(e,t){return A(e,t)&&!(Object.hasOwnProperty.call(e,t)&&Object.propertyIsEnumerable.call(e,t))}function ee(e,t,r){var n={};return r.isMergeableObject(e)&&x(e).forEach(function(a){n[a]=u(e[a],r)}),x(t).forEach(function(a){X(e,a)||(A(e,a)&&r.isMergeableObject(t[a])?n[a]=Q(a,r)(e[a],t[a],r):n[a]=u(t[a],r))}),n}function g(e,t,r){r=r||{},r.arrayMerge=r.arrayMerge||J,r.isMergeableObject=r.isMergeableObject||B,r.cloneUnlessOtherwiseSpecified=u;var n=Array.isArray(t),a=Array.isArray(e),s=n===a;return s?n?r.arrayMerge(e,t,r):ee(e,t,r):u(t,r)}g.all=function(t,r){if(!Array.isArray(t))throw new Error("first argument should be an array");return t.reduce(function(n,a){return g(n,a,r)},{})};var te=g;z.exports=te});var ue={};U(ue,{Languages:()=>ge,PiralLanguagesPicker:()=>M,createLocaleApi:()=>se,getUserLocale:()=>ie,setupLocalizer:()=>_,useDynamicLanguage:()=>le,useTranslate:()=>ce});var O=l(c("piral-core")),M=(0,O.getPiralComponent)("LanguagesPicker");var C=l(h());function P(e){return{selectLanguage(t,r){t.dispatch(n=>{e.language=r;let a=n.language.selected,s=r;return setTimeout(()=>{t.emit("select-language",{previousLanguage:a,currentLanguage:s})},0),{...n,language:{...n.language,loading:r===void 0,selected:r}}})},translate(t,r,n){return e&&e.localizeGlobal(r,n)},setTranslations(t,r,n){e.messages[r]=n.global;for(let a of n.locals){let s=t.apis[a.name];if(s){let o=s.getTranslations();o[r]=a.value,s.setTranslations(o)}}},getTranslations(t,r){return{global:e.messages[r],locals:Object.keys(t.apis).map(n=>({name:n,value:t.apis[n].getTranslations()[r]}))}}}}function re(e){let t={};return S(e,t),t}function S(e,t,r=""){if(typeof e=="string"){t[r]=e;return}if(typeof e=="object"&&e!==null){Object.keys(e).forEach(n=>{S(e[n],t,r?`${r}.${n}`:n)});return}}function m(e){return Object.fromEntries(Object.entries(e).map(([t,r])=>[t,re(r)]))}function ne(e,t){return t?"...":""}function ae(e,t){return e.replace(/{{\s*([A-Za-z0-9_.]+)\s*}}/g,(r,n)=>n in t?t[n]||"":`{{${n}}}`)}var T=class{constructor(t,r,n,a=ne){this.language=r;this.languages=n;this.fallback=a;this.messages=m(t)}localizeGlobal(t,r){return this.localizeBase(t,r)}localizeLocal(t,r,n){let a=this.translateMessage(t,r,n);return a===void 0?this.localizeBase(r,n):a}localizeBase(t,r){let n=this.translateMessage(this.messages,t,r);return n===void 0?this.fallback(t,this.language):n}translateMessage(t,r,n){let a=this.language,s=a&&t[a],o=s&&s[r];return o&&(n?ae(o,n):o)}};var v=l(c("piral-core")),E=e=>(0,v.defaultRender)(void 0);function _(e={}){let t=e.messages||{},r=Object.keys(t),n=r[0]||"en",a=e.language,o=(typeof a=="function"?a(r,n,"en"):a)||n;return new T(t,o,r.length?r:[o],e.fallback)}function se(e=_()){return t=>(t.defineActions(P(e)),t.dispatch(r=>({...r,components:{LanguagesPicker:E,...r.components},language:{loading:!1,available:e.languages,selected:e.language}})),r=>{let n={},a=s=>{n=m(s)};return{addTranslations(s,o=!0){let i=e.messages;a(C.all(o?[i,...s]:[...s,i]))},getCurrentLanguage(s){let o=t.readState(i=>i.language.selected);if(s){s(o);let i=L=>{s(L.currentLanguage)};return r.on("select-language",i),()=>r.off("select-language",i)}return o},setTranslations:a,getTranslations(){return n},translate(s,o){return e.localizeLocal(n,s,o)}}})}var b=l(c("piral-core"));function oe(e,t){let r=b.cookie.getItem("_culture")||b.storage.getItem("locale");return r||(t?t.toLowerCase().substring(0,2):navigator.language?navigator.language.substring(0,2):e)}function ie(e,t,r){let n=oe(t,r||"");return e.indexOf(n)!==-1?n:t}var d=l(c("react")),f=l(c("piral-core"));function le(e,t){let[r,n]=(0,d.useState)(e),{selectLanguage:a,setTranslations:s,getTranslations:o}=(0,f.useActions)();return(0,d.useEffect)(()=>{let i=!0,L=o(r);return a(void 0),t(r,L).then(y=>{i&&(s(r,y),a(r))},y=>console.error(y)),()=>{i=!1}},[r]),[r,n]}function ce(){let{translate:e}=(0,f.useActions)();return(0,f.useGlobalState)(t=>t.language.selected),e}var k=l(c("react")),w=l(c("piral-core"));var ge=()=>{let{available:e,selected:t}=(0,w.useGlobalState)(r=>r.language);return k.createElement(M,{selected:t,available:e})};return ue;})();
1
+ var piralTranslate=(()=>{var R=Object.create;var p=Object.defineProperty;var G=Object.getOwnPropertyDescriptor;var N=Object.getOwnPropertyNames;var $=Object.getPrototypeOf,I=Object.prototype.hasOwnProperty;var j=e=>p(e,"__esModule",{value:!0});var c=(e=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(e,{get:(t,r)=>(typeof require!="undefined"?require:t)[r]}):e)(function(e){if(typeof require!="undefined")return require.apply(this,arguments);throw new Error('Dynamic require of "'+e+'" is not supported')});var F=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),U=(e,t)=>{j(e);for(var r in t)p(e,r,{get:t[r],enumerable:!0})},D=(e,t,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of N(t))!I.call(e,n)&&n!=="default"&&p(e,n,{get:()=>t[n],enumerable:!(r=G(t,n))||r.enumerable});return e},l=e=>D(j(p(e!=null?R($(e)):{},"default",e&&e.__esModule&&"default"in e?{get:()=>e.default,enumerable:!0}:{value:e,enumerable:!0})),e);var h=F((me,z)=>{"use strict";var B=function(t){return V(t)&&!K(t)};function V(e){return!!e&&typeof e=="object"}function K(e){var t=Object.prototype.toString.call(e);return t==="[object RegExp]"||t==="[object Date]"||q(e)}var Y=typeof Symbol=="function"&&Symbol.for,Z=Y?Symbol.for("react.element"):60103;function q(e){return e.$$typeof===Z}function H(e){return Array.isArray(e)?[]:{}}function u(e,t){return t.clone!==!1&&t.isMergeableObject(e)?g(H(e),e,t):e}function J(e,t,r){return e.concat(t).map(function(n){return u(n,r)})}function Q(e,t){if(!t.customMerge)return g;var r=t.customMerge(e);return typeof r=="function"?r:g}function W(e){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(e).filter(function(t){return Object.propertyIsEnumerable.call(e,t)}):[]}function x(e){return Object.keys(e).concat(W(e))}function A(e,t){try{return t in e}catch{return!1}}function X(e,t){return A(e,t)&&!(Object.hasOwnProperty.call(e,t)&&Object.propertyIsEnumerable.call(e,t))}function ee(e,t,r){var n={};return r.isMergeableObject(e)&&x(e).forEach(function(a){n[a]=u(e[a],r)}),x(t).forEach(function(a){X(e,a)||(A(e,a)&&r.isMergeableObject(t[a])?n[a]=Q(a,r)(e[a],t[a],r):n[a]=u(t[a],r))}),n}function g(e,t,r){r=r||{},r.arrayMerge=r.arrayMerge||J,r.isMergeableObject=r.isMergeableObject||B,r.cloneUnlessOtherwiseSpecified=u;var n=Array.isArray(t),a=Array.isArray(e),s=n===a;return s?n?r.arrayMerge(e,t,r):ee(e,t,r):u(t,r)}g.all=function(t,r){if(!Array.isArray(t))throw new Error("first argument should be an array");return t.reduce(function(n,a){return g(n,a,r)},{})};var te=g;z.exports=te});var ue={};U(ue,{Languages:()=>ge,PiralLanguagesPicker:()=>M,createLocaleApi:()=>se,getUserLocale:()=>ie,setupLocalizer:()=>_,useDynamicLanguage:()=>le,useTranslate:()=>ce});var O=l(c("piral-core")),M=(0,O.getPiralComponent)("LanguagesPicker");var C=l(h());function P(e){return{selectLanguage(t,r){t.dispatch(n=>{e.language=r;let a=n.language.selected,s=r;return setTimeout(()=>{t.emit("select-language",{previousLanguage:a,currentLanguage:s})},0),{...n,language:{...n.language,loading:r===void 0,selected:r}}})},translate(t,r,n){return e&&e.localizeGlobal(r,n)},setTranslations(t,r,n){e.messages[r]=n.global;for(let a of n.locals){let s=t.apis[a.name];if(s){let o=s.getTranslations();o[r]=a.value,s.setTranslations(o)}}},getTranslations(t,r){return{global:e.messages[r],locals:Object.keys(t.apis).map(n=>({name:n,value:t.apis[n].getTranslations()[r]}))}}}}function re(e){let t={};return S(e,t),t}function S(e,t,r=""){if(typeof e=="string"){t[r]=e;return}if(typeof e=="object"&&e!==null){Object.keys(e).forEach(n=>{S(e[n],t,r?`${r}.${n}`:n)});return}}function m(e){return Object.fromEntries(Object.entries(e).map(([t,r])=>[t,re(r)]))}function ne(e,t){return t?"...":""}function ae(e,t){return e.replace(/{{\s*([A-Za-z0-9_.]+)\s*}}/g,(r,n)=>n in t?t[n]??"":`{{${n}}}`)}var T=class{constructor(t,r,n,a=ne){this.language=r;this.languages=n;this.fallback=a;this.messages=m(t)}localizeGlobal(t,r){return this.localizeBase(t,r)}localizeLocal(t,r,n){let a=this.translateMessage(t,r,n);return a===void 0?this.localizeBase(r,n):a}localizeBase(t,r){let n=this.translateMessage(this.messages,t,r);return n===void 0?this.fallback(t,this.language):n}translateMessage(t,r,n){let a=this.language,s=a&&t[a],o=s&&s[r];return o&&(n?ae(o,n):o)}};var v=l(c("piral-core")),E=e=>(0,v.defaultRender)(void 0);function _(e={}){let t=e.messages||{},r=Object.keys(t),n=r[0]||"en",a=e.language,o=(typeof a=="function"?a(r,n,"en"):a)||n;return new T(t,o,r.length?r:[o],e.fallback)}function se(e=_()){return t=>(t.defineActions(P(e)),t.dispatch(r=>({...r,components:{LanguagesPicker:E,...r.components},language:{loading:!1,available:e.languages,selected:e.language}})),r=>{let n={},a=s=>{n=m(s)};return{addTranslations(s,o=!0){let i=e.messages;a(C.all(o?[i,...s]:[...s,i]))},getCurrentLanguage(s){let o=t.readState(i=>i.language.selected);if(s){s(o);let i=L=>{s(L.currentLanguage)};return r.on("select-language",i),()=>r.off("select-language",i)}return o},setTranslations:a,getTranslations(){return n},translate(s,o){return e.localizeLocal(n,s,o)}}})}var b=l(c("piral-core"));function oe(e,t){let r=b.cookie.getItem("_culture")||b.storage.getItem("locale");return r||(t?t.toLowerCase().substring(0,2):navigator.language?navigator.language.substring(0,2):e)}function ie(e,t,r){let n=oe(t,r||"");return e.indexOf(n)!==-1?n:t}var d=l(c("react")),f=l(c("piral-core"));function le(e,t){let[r,n]=(0,d.useState)(e),{selectLanguage:a,setTranslations:s,getTranslations:o}=(0,f.useActions)();return(0,d.useEffect)(()=>{let i=!0,L=o(r);return a(void 0),t(r,L).then(y=>{i&&(s(r,y),a(r))},y=>console.error(y)),()=>{i=!1}},[r]),[r,n]}function ce(){let{translate:e}=(0,f.useActions)();return(0,f.useGlobalState)(t=>t.language.selected),e}var k=l(c("react")),w=l(c("piral-core"));var ge=()=>{let{available:e,selected:t}=(0,w.useGlobalState)(r=>r.language);return k.createElement(M,{selected:t,available:e})};return ue;})();
@@ -8,6 +8,7 @@ const messages = {
8
8
  en: {
9
9
  hi: 'hello',
10
10
  greeting: 'Hi {{name}}, welcome back',
11
+ secretNumber: 'The secret number is {{number}}.',
11
12
  header: {
12
13
  title: 'Hello world'
13
14
  }
@@ -80,6 +81,12 @@ describe('Localize Module', () => {
80
81
  expect(result).toBe('Hi , welcome back');
81
82
  });
82
83
 
84
+ it('localizeGlobal does not replace falsy variables with an empty string', () => {
85
+ const localizer = new Localizer(messages, 'en');
86
+ const result = localizer.localizeGlobal('secretNumber', { number: 0 });
87
+ expect(result).toBe('The secret number is 0.');
88
+ });
89
+
83
90
  it('localizeGlobal translates from global translations using passed nested translations', () => {
84
91
  const localizer = new Localizer(messages, 'en');
85
92
  const result = localizer.localizeGlobal('header.title');
package/src/localize.ts CHANGED
@@ -16,7 +16,7 @@ function defaultFallback(key: string, language: string): string {
16
16
 
17
17
  function formatMessage<T extends object>(message: string, variables: T): string {
18
18
  return message.replace(/{{\s*([A-Za-z0-9_.]+)\s*}}/g, (_match: string, p1: string) => {
19
- return p1 in variables ? variables[p1] || '' : `{{${p1}}}`;
19
+ return p1 in variables ? variables[p1] ?? '' : `{{${p1}}}`;
20
20
  });
21
21
  }
22
22