babel-plugin-translate-mi2

1.0.2 • Public • Published

babel-plugin-translate-mi2 CircleCI

Babel plugin for translation for mi2js library.

Combined with babel-plugin-translate-mi2

Translations inside JSX code in mi2js library

You want to write some templates in JSX

// state: {name:'Somebody', city: 'Mordor'}

proto.initTemplate = function(h,t,state){
  return <div>
    <div class="name"><b>[[name]]: </b>{state.name}</div>
    <div class="city"><b>[[city]]: </b>{state.city}</div>
  </div>
}

The JSX is tranformed to function calls and then the code looks like this

proto.initTemplate = function(h,t,state){
  return h('div', null,
    h('div', {'class':'name'}, h('b', null, t('name')+': '), ()=>person.name),
    h('div', {'class':'city'}, h('b', null, t('city')+': '), ()=>person.city),
  )
}

the function t return translations for the translation code provided

the function h is implemented in such way that these calls to h result in def being:

{
  "tag": "div",
  "attr": null,
  "children": [
    {
      "tag": "div",
      "attr": { "class": "name" },
      "children": [
        { "tag": "b", "attr": null,  "children": [ "Name: " ] },
        ()=>person.name
      ]
    },
    {
      "tag": "div",
      "attr": { "class": "city" },
      "children": [
        { "tag": "b", "attr": null,  "children": [ "City: " ] },
        ()=>person.city
      ]
    }
  ]
}

the library will use returned structure and call mi2js.insertHtml function to generate(eventually) HTML based on data structured like that so the final result in HTML is:

<div>
  <div class="name"><b>Name: </b>Somebody</div>
  <div class="city"><b>City: </b>Mordor</div>
</div>

quick explanation: the JS expressions are wrapped in arrow function so they can be reevaluated later when state changes (for more details check the explanation in the library).

Dependencies (0)

    Dev Dependencies (13)

    Package Sidebar

    Install

    npm i babel-plugin-translate-mi2

    Weekly Downloads

    2

    Version

    1.0.2

    License

    MIT

    Last publish

    Collaborators

    • hrgdavor