Giter Site home page Giter Site logo

oliverfischer / messageformat.js Goto Github PK

View Code? Open in Web Editor NEW

This project forked from messageformat/messageformat

0.0 2.0 0.0 1.42 MB

ICU MessageFormat for Javascript - i18n Plural and Gender Capable Messages

Home Page: https://messageformat.github.io/

License: MIT License

Makefile 2.22% JavaScript 95.66% HTML 2.12%

messageformat.js's Introduction

Build Status

messageformat.js

The experience and subtlety of your program's text can be important. MessageFormat is a mechanism for handling both pluralization and gender in your applications. It can also lead to much better translations, as it's designed to support all the languages included in the Unicode CLDR.

The ICU has an official guide for the format. Messageformat.js supports and extends all parts of the standard, with the exception of the deprecated ChoiceFormat.

There is a good slide-deck on Plural and Gender in Translated Messages by Markus Scherer and Mark Davis. But, again, remember that many of these problems apply even if you're only outputting english.

Please see messageformat.github.io for a guide to MessageFormat, more information on on the build-time use of messageformat.js, and the code documentation.

What problems does it solve?

Using messageformat.js, you can separate your code from your text formatting, while enabling much more humane expressions. In other words, you won't need to see this anymore in your output:

There are 1 results.
There are 1 result(s).
Number of results: 5.

What does it look like?

With this message:

> var msg =
  '{GENDER, select, male{He} female{She} other{They} }' +
  ' found ' +
  '{RES, plural, =0{no results} one{1 result} other{# results} }' +
  ' in the ' +
  '{CAT, selectordinal, one{#st} two{#nd} few{#rd} other{#th} }' +
  ' category.';

You'll get these results:

> var mfunc = new MessageFormat('en').compile(msg);

> mfunc({ GENDER: 'male', RES: 1, CAT: 2 })
'He found 1 result in the 2nd category.'

> mfunc({ GENDER: 'female', RES: 1, CAT: 2 })
'She found 1 result in the 2nd category.'

> mfunc({ GENDER: 'male', RES: 2, CAT: 1 })
'He found 2 results in the 1st category.'

> mfunc({ RES: 2, CAT: 2 })
'They found 2 results in the 2nd category.'

Features

  • Handles arbitrary nesting of pluralization and select rules
  • Supports all ~466 languages included in the Unicode CLDR
  • Works on the server and the client
  • Remarkably useful even for single-language use
  • Speed & efficiency: Can pre-compile messages to JavaScript code
    • Great for speed: message formatting is just string concatenation
  • Compatible with other MessageFormat implementations
  • Extendable with custom formatting functions
  • Very whitespace tolerant
  • Supports Unicode

Installation

Node

npm install messageformat
var MessageFormat = require('messageformat');
var mf = new MessageFormat('en');

Bower

bower install messageformat
<script src="path/to/bower_components/messageformat/messageformat.js"></script>
<script>
  var mf = new MessageFormat('en');
</script>

License

You may use this software under the MIT License.

You may contribute to this software under the Dojo CLA.

Authors

Credits

Thanks to:

  • Bazaarvoice - my previous employer - for letting me do cool stuff like this.
  • Google has an implementation that is similar in Google Closure, I tried to vet my code against many of their tests.
  • Norbert Lindenberg for showing me how good it can be.

Implementations in other languages

Jeff Hansen (@jeffijoe) has written an implementation for .NET - it's a Portable Class Library, making it possible to use on iOS, Android, Windows Phone, and pretty much any other .NET target.

Additional tools

icu-converter is a NodeJS tool for converting message files in the ICU Resource Bundle format into JSON or .property files.

messageformat.js's People

Contributors

eemeli avatar slexaxton avatar vogelsgesang avatar filirom1 avatar jokesterfr avatar stuk avatar pgherveou avatar tomdionysus avatar holiverv6 avatar nook-scheel avatar iamrandys avatar ashensis avatar osk avatar hadrianoliver avatar xiaohongyin avatar scottgonzalez avatar rxaviers avatar oori avatar nzakas avatar iammerrick avatar magomogo avatar jeffijoe avatar jameshenry avatar chadmaughan avatar cezarykluczynski avatar abernier avatar alex-dow avatar

Watchers

James Cloos avatar Oliver Fischer avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.