senselogic-lingo

0.1.3 • Public • Published

Lingo

Text localization and processing.

Localization

Any string can be internationalized by starting additional translations with a language separator followed by a language specifier.

Translations are tested from right to left, the first translation being used by default.

A language specifier can contain one or several language tags separated by commas.

A language tag can optionally combine a language code, a country code and a continent code, separated by dashes : en, en-UK, -UK, en-AU, en--OC, --OC.

The continent code can be automatically deduced from the country code.

setLanguageSeparator( '\n¨' );

let multilingualText =
    'trunk\n'
    + '¨en-UK,en--OC:boot\n'
    + '¨fr:coffre\n'
    + '¨pt:mala\n'
    + '¨pt-BR:porta-malas';

setLanguageCode( 'en' );
setCountryCode( 'US' );
checkResult( getLocalizedText( multilingualText ), 'trunk' );

setLanguageCode( 'en' );
setCountryCode( 'UK' );
checkResult( getLocalizedText( multilingualText ), 'boot' );

setLanguageCode( 'en' );
setCountryCode( 'AU' );
checkResult( getLocalizedText( multilingualText ), 'boot' );

setLanguageCode( 'fr' );
setCountryCode( 'FR' );
checkResult( getLocalizedText( multilingualText ), 'coffre' );

setLanguageCode( 'pt' );
setCountryCode( 'PT' );
checkResult( getLocalizedText( multilingualText ), 'mala' );

setLanguageCode( 'pt' );
setCountryCode( 'BR' );
checkResult( getLocalizedText( multilingualText ), 'porta-malas' );

Translations can also include variables, and use them to define additional conditions.

let conditionalMultilingualText =
    '{count} bathrooms\n'
    + '¨en?count=1:{count} bathroom\n'
    + '¨fr:{count} salles de bain\n'
    + '¨fr?count<2:{count} salle de bain';

setLanguageCode( 'en' );
setCountryCode( 'US' );
checkResult( getLocalizedText( conditionalMultilingualText, { count: 0 } ), '0 bathrooms' );
checkResult( getLocalizedText( conditionalMultilingualText, { count: 1 } ), '1 bathroom' );
checkResult( getLocalizedText( conditionalMultilingualText, { count: 2 } ), '2 bathrooms' );

setLanguageCode( 'fr' );
setCountryCode( 'FR' );
checkResult( getLocalizedText( conditionalMultilingualText, { count: 0 } ), '0 salle de bain' );
checkResult( getLocalizedText( conditionalMultilingualText, { count: 1 } ), '1 salle de bain' );
checkResult( getLocalizedText( conditionalMultilingualText, { count: 2 } ), '2 salles de bain' );

Processing

By default, translations can of course contain tags and entities :

setLanguageSeparator( '¨' );

multilingualText = 'A text<br>on two lines.¨fr:Un texte<br>sur deux lignes.';

setLanguageCode( 'en' );
checkResult( getLocalizedText( multilingualText ), 'A text<br>on two lines.' );

setLanguageCode( 'fr' );
checkResult( getLocalizedText( multilingualText ), 'Un texte<br>sur deux lignes.' );

But they can also contain custom tags, that can be freely defined :

defineTag( '§', '<br/>' );
defineDualTag( '**', '<b>', '</b>' );

multilingualText = 'A **bold** text§on two lines.¨fr:Un texte en **gras**§sur deux lignes.';

setLanguageCode( 'en' );
checkResult( getProcessedLocalizedText( multilingualText ), 'A <b>bold</b> text<br/>on two lines.' );

setLanguageCode( 'fr' );
checkResult( getProcessedLocalizedText( multilingualText ), 'Un texte en <b>gras</b><br/>sur deux lignes.' );

Version

0.1

Author

Eric Pelzer (ecstatic.coder@gmail.com).

License

This project is licensed under the GNU Lesser General Public License version 3.

See the LICENSE.md file for details.

Readme

Keywords

Package Sidebar

Install

npm i senselogic-lingo

Weekly Downloads

1

Version

0.1.3

License

LGPL-3.0-only

Unpacked Size

64.8 kB

Total Files

8

Last publish

Collaborators

  • senselogic