Nice Parakeet Marriage

    @markuplint/i18n
    TypeScript icon, indicating that this package has built-in type declarations

    2.1.1 • Public • Published

    @markuplint/i18n

    npm version Build Status Coverage Status

    Install

    $ npm install @markuplint/i18n
    
    $ yarn add @markuplint/i18n

    API

    import { translator } from '@markuplint/i18n';
    
    const t = translator({
      locale: 'ja',
      ...require('@markuplint/i18n/locales/ja.json'),
    });

    The translator function creates the t function. It is an overloading function that accepts kind of arguments below:

    Translate sentence

    type T = (template?: string, ...values: string[]) => string;
    const message = t(
      // Template #1
      '{0} is {1:c}',
      // The {0} value of template #1
      t(
        // Template #2
        '{0} of {1}',
        // The {0} value of template #2
        t(
          // Template #3
          'the {0}',
          // The {0} value of template #3
          'value',
        ),
        // The {1} value of template #2
        t(
          // Template #4
          'the "{0*}" {1}',
          // The {0} value of template #4
          'id',
          // The {1} value of template #4
          'attribute',
        ),
      ),
      // The {1} value of template #1
      'duplicated',
    );
    
    console.log(message);
    // => 属性「id」の値が重複しています

    Placeholder

    There is a placeholder that the number is surrounded by {} on template strings. It is replaced argument as a phrase. It translates the phrase if it matches the keyword defined in the dictionary.

    Tagged templates syntax

    ⚠️ It is experimental.

    import { taggedTemplateTranslator } from '@markuplint/i18n';
    
    const _ = taggedTemplateTranslator({
      locale: 'ja',
      ...require('path/to/dictionary/ja.json'),
    });
    
    const message = _`${
      //
      _`${
        //
        _`the ${'value'}`
      } of ${
        //
        _`the "${'id'}" ${'attribute'}`
      }`
    } is ${
      //
      'c:duplicated'
    }`;
    
    console.log(message);
    // => 属性「id」の値が重複しています

    Translate a phrase

    type T = (phrase: string) => string;
    const phrase = t('element');
    
    console.log(phrase);
    // => 要素

    Translate listed phrases

    type T = (phrases: string[]) => string;
    const list = t(['element', 'attribute', 'value']);
    
    console.log(list);
    // => 「要素」「属性」「値」
    
    /* If locale is "en" */
    console.log(list);
    // => "element", "attribute", "value"

    It converts the character-separated list specified in each locale.

    Locale Separater Before Char After Char
    en , (camma + space) " (double quote) " (double quote)
    ja none (empty string) (left corner bracket) (right corner bracket)

    Avoid translation

    The autocomplete is defined as オートコンプリート in the JA dictionary. However, It avoids translation if the number placeholder includes * (asterisk). It is an effective means if you want a code or a specific name.

    const phrase = t('the "{0}" {1}', 'autocomplete', 'attribute');
    console.log(phrase);
    // => 属性「オートコンプリート」
    
    const phrase = t('the "{0*}" {1}', 'autocomplete', 'attribute');
    console.log(phrase);
    // => 属性「autocomplete」

    Another means is that it surrounds % (percentage) to a phrase. It is effective when you use listing.

    const phrase = t('the "{0}" {1}', '%autocomplete%', 'attribute');
    console.log(phrase);
    // => 属性「autocomplete」
    
    const list = t(['element', '%attribute%', 'value']);
    console.log(list);
    // => 「要素」「attribute」「値」

    Keywords

    none

    Install

    npm i @markuplint/i18n

    DownloadsWeekly Downloads

    5,329

    Version

    2.1.1

    License

    MIT

    Unpacked Size

    78.1 kB

    Total Files

    14

    Last publish

    Collaborators

    • yusukehirao