JSPM

  • Created
  • Published
  • Downloads 9
  • Score
    100M100P100Q71668F
  • License MIT

simple localization library (inspired by laravel translation)

Package Exports

  • inno-trans

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (inno-trans) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

inno-trans

πŸ“œ simple localization library (inspired by laravel translation)

npm downloads

Example

const t = InnoTrans({
    locale: 'en',
    message: {
        en: {
            'hello': 'hello world!'
        }
    }
})

t.trans('hello') // => hello world!

Install

yarn add inno-trans
const InnoTrans = require('inno-trans');

browser

<script src="https://unpkg.com/inno-trans"></script>
<script>
 var t = InnoTrans({...});
</script>

Features

Interpolation

Interpolate using tag bracket ({}).

const t = InnoTrans({
    locale: 'en',
    message: {
        en: {
            welcome: 'welcome, {name}!'
        }
    }
})
t.trans('welcome', {name: 'john'}) // => welcome, john!

Change interpolation tag bracket.

const t = InnoTrans({
    locale: 'en',
    message: {
        en: {
            welcome: 'welcome, <?=name=>!'
        }
    }
})
t.tag(['<?=', '=>'])
t.trans('welcome', {name: 'john'}) // => welcome, john!

Pluralization

Choose a message that matches the quantity.

const t = InnoTrans({
    locale: 'en',
    message: {
        en: {
            apples: 'one apple|many apples'
        }
    }
})
t.transChoice('apples', 1) // => one apple
t.transChoice('apples', 2) // => many apples

Complex pluralization

const t = InnoTrans({
    locale: 'en',
    message: {
        en: {
            apples: '{0}none|[1,19]some|[20,*]many'
        }
    }
})
t.transChoice('apples', 0) // => none
t.transChoice('apples', 10) // => some
t.transChoice('apples', 20) // => many

Fallback

Fallback a another locale when there is no message.

const t = InnoTrans({
    locale: 'en',
    message: {
        en: {},
        ko: {
            'index.hello': 'μ•ˆλ…•~'
        },
        ja: {
            'index.hello': 'こんにけは~',
            'index.welcome': 'ζ­“θΏŽγ‚ˆ~'
        }
    }
})
t.trans('index.hello') // => index.hello
t.trans('index.welcome') // => index.welcome

t.fallbacks(['ko', 'ja'])

t.trans('index.hello') // => μ•ˆλ…•~
t.trans('index.welcome') // => ζ­“θΏŽγ‚ˆ~

Filter

Converts interpolation values.

const t = InnoTrans({
    locale: 'en',
    message: {
        en: {
            welcome: 'welcome, {name|upper}!',
            hello: 'hello, {name|lower}!'
        }
    }
})
t.addFilter('upper', str => str.toUpperCase())
t.addFilter('lower', str => str.toLowerCase())

t.trans('welcome', {name: 'John'}) // => welcome JOHN!
t.trans('hello', {name: 'John'}) // => hello john!

Common filter

const t = InnoTrans({
    locale: 'en',
    message: {
        en: {
            abc: 'ab {0} {1}'
        }
    }
})
t.addFilter('*', str => str.toUpperCase())
t.trans('abc', {0: 'cd', 1: 'ef') // => ab CD EF

Formatter

Converts interpolated messages.

const t = InnoTrans({
    locale: 'en',
    message: {
        en: {
            welcome: 'welcome, {name}!',
        }
    }
})
t.addFormatter((str, values, locale)=> {
    console.log(`str: ${str}, values: ${JSON.stringify(values)}, locale: ${locale}`)
    return '<p>' + str + '</p>'
})

t.trans('welcome', {name: 'john'})
// str: welcome, john!, values: {"name":"john"}, locale: en
// => <p>welcome, john!</p>

Event

const t = InnoTrans({
    locale: 'en',
    message: {
        en: {
            welcome: 'welcome, {name}!',
        },
        ko: {
            welcome: 'μ•ˆλ…•, {name}!',
        }
    }
})

t.trans('welcome', {name: 'john'}) // => welcome, john!

t.on('changeLocale', () => {
    t.trans('welcome', {name: 'john'}) // => μ•ˆλ…•, john!
})

t.locale('ko')

events

  • changeLocale
  • changeFallbacks
  • changeTag
  • addMessages
  • removeMessages
  • addFilter
  • removeFilter
  • addFormatter
  • removeFormatter
  • * - Global event.

API

InnoTrans(options)

Create InnoTrans instance.

const t = InnoTrans({
    locale: 'en',
    fallbacks: ['ko', 'ja'],
    messages: {
        en: {
            'welcome': 'welcome, {name}!'
        },
        ko: {
            'welcome': 'ν™˜μ˜ν•΄, {name}!'
        },
        ja: {
            'welcome': 'ζ­“θΏŽγ‚ˆ, {name}!'
        }
    },
    tag: ['{', '}'],
    filters: {
        upper: str => str.toUpperCase(),
        lower: str => str.toLowerCase(),
    },
    formatters: [
        str => str + 😝
    ]
})

options

  • locale - Specifies current locale. If not, it is automatically inferred.
  • fallbacks - Specifies another locales to fallback.
  • messages - Message resources.
  • tag - Prefix and suffix for interpolation. Default {,}.
  • filters - Function for converting interpolation values.
  • formatters - Function for converting interpolated message.
  • plugins - Plugin to use.

t.trans(key [, values [, options]])

Returns a message that matches the key.

options

  • locale - Specifies the locale. The current locale is ignored.
  • defaults - String to return instead of the key when a message does not exist.
const t = InnoTrans({
    locale: 'en',
    messages: {
        en: { hello: 'hello!' },
        ko: { hello: 'μ•ˆλ…•!' }
    }
})

t.trans('welcome') // => welcome
t.trans('welcome', undefined, {defaults: 'Welcome~!'}) // => Welcome~!
t.trans('hello') // => hello!
t.trans('hello', undefined, {locale: 'ko'}) // => μ•ˆλ…•

Short method

t.t('hello', {name: 'john'})

t.transChoice(key, number [, values [, options]])

Returns a message that matches the key and the quantity number.

t.addMessages('en', {bought: 'I bought one|I bought many things!'})

t.transChoice('bought', 1) // => I bought one
t.transChoice('bought', 10) // => I bought many things!

Short mehotd

t.tc('apples', 3, {count: 3});

t.locale([locale])

t.locale('ko') // Change locale to "ko".
t.locale() // => 'ko'

t.fallbacks([fallbacks])

t.fallbacks(['ko', 'ja'])
t.fallbacks() // => ['ko', 'ja']

t.addMessages(locale, messages)

t.addMessages('en', {
    'welcome': 'Welcome, {name}!',
    'hello': 'hello, {name}!'
})

t.removeMessages(locale[, key])

If no key argument, remove all messages in the locale.

t.removeMessages('en', 'welcome')
t.removeMessages('en')

t.getAddedLocales()

Returns the added message locales.

t.getAddedLocales() // => ['en', 'ko', 'ja']
t.removeMessages('en')
t.getAddedLocales() // => ['ko', 'ja']

t.hasMessage(locale [, key])

t.hasMessage('ko') // => false

t.addMessages('ko', {hello: 'μ•ˆλ…•!'})

t.hasMessage('ko') // => true
t.hasMessage('ko', 'hello') // => true
t.hasMessage('ko', 'others') // => false

t.tag(tag)

Set prefix and suffix for interpolation.

t.tag(['<?=', '=>'])

t.addFilter(name, filter)

Add a filter function.

t.removeFilter(name[, filter])

Remove a filter function.

t.addFormatter(formatter)

Add a formatter function.

t.removeFormatter(formatter)

Remove a formatter function.

t.use(plugin)

Add a plugin.

License

MIT