hermes
Minimalist i18n in TypeScript
hermes is a TypeScript library tackling the issues of internationalization (i18n) with minimalist and elegant tools.
Installation
npm install @giancosta86/hermes
or
yarn add @giancosta86/hermes
The public API entirely resides in the root package index, so one shouldn't reference specific modules.
Usage
-
IsoDateFormat
: formatsIsoDate
objects - as defined in time-utils. It can be constructed with the same options asDateTimeFormat
- also supporting reasonable defaults -
Noun
: defines a noun - which can have a singular and a plural form. Case-based declension is not supported at present, but one can use case-keyed maps ofNoun
values -
MeasureUnit
takes aNoun
and provides aget()
method, which returns:-
the
singular
form if the value is +1 or -1 -
the
plural
form otherwise
-
-
Language
is a semantically useful type alias forstring
-
LocaleLike
- can be either a BCP47 language tag string or anÌntl.Locale
object -
localeNuances
is an array containing the i18n-related properties of anIntl.Locale
instance except thelanguage
attribute -
ensureLocale()
takes aLocaleLike
and always returns anIntl.Locale
-
ensureLanguageTag()
takes aLocaleLike
and returns its BCP47 language tag -
getLocaleDistance()
takes twoLocaleLike
, converts them toIntl.Locale
and returns:-
Number.POSITIVE_INFINITY
if the twolanguage
attributes are different -
0
if all the other i18n-related attributes (localeNuances
) are equal, otherwise+1
is added for every non-matching attribute
-
-
BilingualLibrary
is a library ofBilingualDictionary
instances and can be built via static methods; additionally,Phrase
is just a type alias forstring
that identifies each side of a dictionary translation.Each dictionary can be retrieved from a library via a
LocaleLike
- not necessarily via an exact match, but by proximity: the dictionary registered with the most matching locale (shorter or longer) is returned; the proximity is computed withgetLocaleDistance()
, as described above.If a library is requested an unregistered locale, an empty dictionary is returned; if a dictionary is requested a phrase it does not contain, the original phrase itself is returned.
Further references
-
IETF BCP 47 - Standardized codes that are used to identify human languages
-
time-utils - Time-related utilities
-
Rimbu - Immutable collections and tools for TypeScript