Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

i18n-behavior

Package Overview
Dependencies
Maintainers
1
Versions
97
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

i18n-behavior

Instant and Modular I18N for Polymer

  • 0.0.60
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
35
decreased by-76.82%
Maintainers
1
Weekly downloads
 
Created
Source

Build Status Coverage Status

i18n-behavior

Instant and Modular I18N for Polymer (beta for Release 0.1.0)

API Docs, Demo, and Test on GitHub Pages (https://t2ym.github.io/i18n-behavior)

Features

  • Instant I18N by one line addition of I18nBehavior
  • Minimal or no overhead for development: Run-time automatic extraction of hard-coded UI text strings from HTML templates
  • Optimal for production: Build-time automatic extraction and bundling of hard-coded UI text strings from HTML templates by gulp-i18n-preprocess preprocessor
  • Modular (per element) JSON support for storing and fetching localized UI text strings
  • Bundled (per app) JSON support for storing and fetching localized UI text strings
  • Automatic application of <i18n-format> with Unicode CLDR plural rules and Gender support
  • Polymer 1.2.0's Compound Bindings support with <i18n-format>
  • i18n-dom-bind template instead of dom-bind for instant I18N of bound templates
  • Dynamic on-demand fetching of localized UI text strings from JSON under locales directories
  • Real-time observation of <html lang> attribute value for UI text localization
  • Robust fallback of missing UI text strings to parent locales and finally to the default locale (e.g. "fr-CA" -> "fr" -> "en") with practical BCP47 support
  • this.text dynamic object shared among the same custom element to access localized strings
  • this.model object deepcopied from this.text.model object per instance to access localized attribute strings
  • i18n-attr-repo to maintain repository of I18N target attributes
  • gulp-i18n-leverage filter to merge changes in the default language in HTML templates into localized JSON resources.
  • gulp-i18n-leverage filter to put meta infomation, that is, L10N "TO DO" list, for the merged changes in JSON resources
  • Option to define I18N target strings manually by <json-data> elements

Conceptual Workflow

Browser Compatibility with webcomponents-lite.min.js

DOMChrome*Firefox*Edge 13+IE 10+Safari 7+Chrome Android*Mobile Safari*Opera*
Shady
Shadow-----

* latest versions

Install

    bower install --save i18n-behavior

Quick Tour with polymer-starter-kit-i18n

Import

    <link rel="import" href="/path/to/bower_components/i18n-behavior/i18n-behavior.html">

Usage

Run-time Automatic I18N (for development)

Apply BehaviorsStore.I18nBehavior for run-time automatic I18N.

Source Code:
    <dom-module id="custom-element">
      <template>
        <span id="label">UI text label</span> <!-- no need to touch UI text strings -->
      </template>
      <script>
        Polymer({
          is: 'custom-element',
          behaviors: [
            BehaviorsStore.I18nBehavior // Add this line for I18N
          ]
        });
      </script>
    </dom-module>
I18N-ready preprocessed DOM at element registration:

Hard-coded UI text strings are automatically extracted and replaced with annotations bound to text object.

lang attribute specifies the current locale. By default, <html lang> attribute is observed and mirrored to those for I18N-ready element instances.

    <html lang="en"><!-- html lang attribute is observed and mirrored -->
      ...
      <custom-element lang="en">
        <span id="label">{{text.label}}</span><!-- UI texts are bound to text object -->
      </custom-element>
      ...
    </html>

If the containing element of the target text has id attribute, the string id is named with the id value. If not, the string id is automatically generated. It is recommended to put meaningful id to each string for robustness. When attaching id attribute is too much for the containing element, text-id attribute can be used instead.

    <span text-id="label">{{text.label}}</span>
text dynamic property:

this.text dynamic object property represents an object with UI text strings for the current locale.

    this.text = {
      "label": "UI Text Label"
    }

this.text dynamic object is SHARED among all the instances of the same custom element.

model dynamic property:

this.model is deepcopied from this.text.model per instance to store I18N target attributes. UI text strings in I18N target attributes are automatically extracted and replaced with annotations according to the shared repository (i18n-attr-repo) of I18N target attributes per elements (like placeholder attribute of input element).

<json-data> for manual text definitions

Optionally, any JSON data can be manually added to I18N target strings via <json-data> element. This option is effective for manual extraction of hard-coded UI text strings in JavaScript literals.

  <dom-module id="my-element">
    <template>
      ... <!-- ordinary template for rendering -->
      <template><!-- containing template element to avoid rendering -->
        <json-data id="items">[
          "Responsive Web App boilerplate",
          "Iron Elements and Paper Elements",
          "End-to-end Build Tooling (including Vulcanize)",
          "Unit testing with Web Component Tester",
          "Routing with Page.js",
          "Offline support with the Platinum Service Worker Elements"
        ]</json-data>
        <json-data id="sender">{ "name": "Sam", "gender": "male" }</json-data>
      </template>
    </template>
    <script>
    ...
    this.text.items[0] === 'Responsive Web App boilerplate'
    this.text.sender.name === 'Sam'
    ...
    </script>
  </dom-module>
Localized text strings fetched from JSON:

While default text strings are extracted from the hard-coded strings in HTML template, localized text strings are asynchronously fetched from JSON files under locales directory at the server.

    /bundle.json
    /locales/bundle.ja.json
            /bundle.fr.json
            /bundle.zh-Hans.json
    
    /elements/my-list/my-list.json
                     /locales/my-list.ja.json
                             /my-list.zh-Hans.json
    
    /google-chart-demo/google-chart-demo.json
                      /locales/google-chart-demo.ja.json
                              /google-chart-demo.fr.json

Build-time Automatic I18N (for production)

gulp-i18n-preprocess filter performs build-time automatic I18N and embeds UI texts as JSON.

I18N-ready Source Code preprocessed by gulp-i18n-preprocess:

    <dom-module id="custom-element">
      <template localizable-text="embedded">
        <span id="label">{{text.label}}</span>
        <template id="localizable-text">
          <json-data>{
            "label": "UI Text Label"
          }</json-data>
        </template>
      </template>
    </dom-module>

Default text values are immediately extracted from the embedded JSON without overheads of run-time traversal into the whole template.

TODOs

  • (In Progress) Comprehensive tests with Web Component Tester

Quick Tour

Quick demo project deployment

    git clone https://github.com/t2ym/polymer-starter-kit-i18n.git
    cd polymer-starter-kit-i18n
    npm install -g gulp bower # if missing
    npm install && bower install
    # Development build with scan/preprocess/leverage/bundle/feedback tasks
    gulp --dev
    # Run-time I18N demo on http://localhost:5000
    gulp serve
    # Build-time I18N demo on http://localhost:5001
    gulp serve:dist --dev

Change language on the demo

1. Press F12 to open debugger console on the browser
2. Navigate to the elements or DOM tab in the debugger
3. Change lang attribute of html element from "en" to "ja" or "fr"
    <html lang="ja">

Update UI strings on the demo

1. Change any UI strings in the following HTMLs
    polymer-starter-kit-i18n/app/index.html
                                /elements/my-greeting/my-greeting.html
                                /elements/my-list/my-list.html
2. Merge changes into JSON files
    cd polymer-starter-kit-i18n
    gulp --dev
3. Check diffs
    git diff app

Testing

Test Suites

Test Suites (*-test.html)Description
basicBasic functionalities
edge-caseEdge cases
multiple-caseMultiple element cases
template-default-langtemplateDefaultLang tests
preferencei18n-preference tests
no-persisti18n-preference tests

Test on Build Phases

Build PhasesWCjsDOMUI StringsL10N JSONHTMLJavaScript
src-liteliteShadyHard-codedModularModularHTML Embedded
preprocess-liteliteShadyExtractedModularModularHTML Embedded
vulcanize-liteliteShadyExtractedBundledVulcanizedHTML Embedded and Vulcanized
minify-liteliteShadyExtractedBundled and MinifiedVulcanized and MinifiedConcatenated and Obfuscated
srcfullShadyHard-codedModularModularHTML Embedded
preprocessfullShadyExtractedModularModularHTML Embedded
vulcanizefullShadyExtractedBundledVulcanizedHTML Embedded and Vulcanized
minifyfullShadyExtractedBundled and MinifiedVulcanized and MinifiedConcatenated and Obfuscated

Notes on Test Suites

  • WCjs lite = webcomponents-lite.min.js, full = webcomponents.min.js
  • Both Shady DOM and Shadow DOM are tested on Chrome browser.
  • On non-Chrome browsers, ShadowDOMPolyfill from webcomponents.min.js is functional even if Polymer uses Shady DOM.
  • On non-Chrome browsers, Shadow DOM mode with ShadowDOM Polyfill is not tested and unsupported. Polyfill may work with more than 50% overheads.

Online Test

Available at https://t2ym.github.io/i18n-behavior/components/i18n-behavior/test/

Rebuild Test Suites

Rebuild preprocessed, vulcanized, and minified test suites by the following commmand.

    gulp pretest

Local/Remote Browsers Test

These test:* tasks perform the pretest task as a dependency.

    gulp test:local  # local browsers; Chrome and Firefox are preset in wct.conf.json
    gulp test:remote # remote browsers on Sauce Labs; Edge, IE10/11, Safari 7/8/9 are preset in wct.conf.json

License

BSD-2-Clause

Keywords

FAQs

Package last updated on 28 Mar 2016

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

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