Skip to content

🌍Extract i18n message files and replace text with i18n-formatter.

License

Notifications You must be signed in to change notification settings

mickeyjsx/babel-plugin-mickey-i18n

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

babel-plugin-mickey-i18n

Extract i18n message files and replace text with i18n-formatter.

React Intl is awesome. But, defineMessages is hard-coding, also Global ID management is difficult and confusing.

This plugin releases you from tedious codings, helps you building react components without any perceptions of i18n.

Take a look at the following component:

import React from 'react';

export default class HelloI18n extends React.Component {
  constructor(props) {
    super(props);
    this.hello = '你好';
    this.template = `你好,${this.state.name}`
  }

  state = {
    hello: '你好',
    name: '小明',
  }

  render() {
    const { hello, name } = this.state;
    return (
      <div title="小明,你好">
        <p>{name}{hello}</p>
        <p>小明,你好</p>
      </div>
    );
  }
}

Compiled with this plugin, result that all the Chinese characters in this component ware replaced with _i18n mathod which exported from mickey-i18n(the client for localized messages):

import { i18n as _i18n } from "mickey-i18n";
import React from 'react';

export default class HelloI18n extends React.Component {
  constructor(props) {
    super(props);
    this.hello = _i18n("652829", "你好");
    this.template = _i18n("-743864039", "你好,{0}", [this.state.name])
  }

  state = {
    hello: _i18n("652829", "你好"),
    name: _i18n("756703", "小明"),
  }

  render() {
    const { hello, name } = this.state;
    return (
      <div title={_i18n("1131501034", "小明,你好")}>
        <p>{name}{hello}</p>
        <p>{_i18n("1131501034", "小明,你好", [], true)}</p>
      </div>
    );
  }
}

We also get a message file like this, the id is the text's hashcode:

[
  {
    "id": 652829,
    "text": "你好",
  },
  {
    "id": -743864039,
    "text": "你好,{0}",
  },
  {
    "id": 756703,
    "text": "小明",
  },
  {
    "id": 1131501034,
    "text": "小明,你好",
  },
]

Then we can use atool-l10n to automatically generate localization resource.

Install

npm install babel-plugin-mickey-i18n --save-dev
npm install mickey-i18n react react-dom react-intl --save

Usage

Add the following section in your .babelrc:

{
  "plugins": ["mickey-i18n", { "dest": "./i18n_messages" }]
}

Options

  • dest: string; The target directory of message file. Default: ./i18n_messages
  • filename: string; The target file name of message file. Default: i18n.json
  • debug: boolean; If true we will get message files of each component. Default: false
  • exclude: RegExp | RegExp[]; Prevent mickey-i18n parsing any file if its path matches the RegExp(s) provided. Default: false

Contributing

Pull requests and stars are highly welcome.

For bugs and feature requests, please create an issue.

About

🌍Extract i18n message files and replace text with i18n-formatter.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published