►
Description
The State of the Art in Localization - Eemeli Aro, Vincit
Speakers: Eemeli Aro
A review of the current tools, libraries and specifications available for localization and message formatting in JavaScript. Covering everything from framework-specific front-end libraries to server-side tools. What to take into account when selecting your own solutions, including integration with other languages and systems as well as the needs and expectations of translators. Noting in particular which early decisions are significant and hard to reverse later, and which are trivial to refactor later. Also briefly looking at where the current specification work is at, and where it might be going next.
A
Hi
everyone,
I'm
Emily
I
work
for
a
Finnish
consulting
company
vincit,
and
that
gives
me
a
little
bit
of
our
basis
of
why
I'm
a
good
guy
to
have
talked
about
localization
Finland
is
a
bilingual
country.
In
case
you
didn't
know,
and
this
means
that
we
may
be
faced
some
localization
issues
a
little
bit
quicker.
A
Whenever
we're
doing
anything,
then
you
might
well
on
in
most
parts
of
the
North
American
continent,
except
here
in
Quebec,
won't
bother
policy,
yes
yeah,
but
yeah.
Fundamentally
the
issue
that
I
want
to
that
that
I
that
I
end
up
spending
a
lot
of
the
time
that
I
work
on
open
source.
Everything
is
to
try
and
find
ways
to
make
sure
that
this
sort
of
thing
doesn't
happen.
A
A
That's
not
be
ok
button,
it's
probably
safe,
but
you
know
just
not
sure
this
is
a
bit
of
an
extreme
and
and
you
don't
really
have
to
actually
go
beyond
any
of
the
scope
of
English
language
in
order
to
find
the
issues
that
really
make
localization
and
the
tools
in
JavaScript
to
make
localization
important
and
effective
and
powerful,
so
really
I
mean
I'm
gonna
be
talking
mostly
about
marks.
Photos
mark
is
a
photographer
taking
photos
around
here.
You
might
show
up
at
some
point
here
and
he
takes
a
lot
of
photos.
I'm
sure.
A
Actually,
that's
not
an
exact
count,
but
photo
photographers
at
conferences.
Take
a
lot
of
photos
and
it's
that
it
was
a
nice
phrase
to
come
up
with
in
order
to
use
as
an
example
for
for
the
kind
of
formatting
that
you
might
want
to
do
with
variables
coming
in
localization.
In
other
words-
and
the
first
thing
you
might
notice
is
that
when
you
say
1246
it
nicer
to
use
the
convention,
for
example,
be
used
in
English
to
put
a
comment
there
as
a
thousand
separator.
How
do
you
do
that?
A
How
do
you,
then,
if
you're
formatting
this
as
the
output
of
some
application
or
whatever
you're
working
with?
How
do
you
then
tell
it
that
the
date
should
be
printed
out,
say
11th
of
December
2019,
so
the
first
part
of
it?
Many
of
these
parts
in
fact
are
possible
and
you
should
be
using
the
power
of
int'l.
This
is
a
part
of
JavaScript.
It's
most
of
javascript
is,
of
course,
defined
by
a
comma
3.
A
Echo
402
is
the
other
major
working
group
that
works
on
JavaScript
and
what
they
are
fundamentally
working
on
is
the
int'l
object.
Number
format
is
one
of
the
best.
How
many
people
here
have
used
number
format
until
that
number
format
cool,
so
yeah
you
can
tell
it
you
can
create
a
formatter,
and
then
you
can
tell
it
to
format
a
number
and
you
get
for
English.
For
instance,
it'll
put
a
comment
there
for
other
locales
it'll.
Do
something
different
for
that
number
date.
A
Time
format
is
another
really
powerful
part
of
int'l
and
it'll
get
you
provided
that
you
have
a
date
object
you'll
then
be
able
to
format
it
as
a
string,
and
this
part
yeah
brings
in
in
one
of
the
issues
of
English.
There
is
no
just
one
English.
This
is
what
happens
when
you
format
a
date
with
numbers
numeric
day
long
form
a
month
and
a
numeric
year
in
British
English.
If
you
go
for
the
default
US
American
option,
the
formatting
is
different,
so
it
matters
even
within
the
scope
of
English.
It
buries.
A
English
is
in
some
ways
because
some
of
the
rules
of
how
English
language
works.
It's
really
good.
For
these
examples,
relative
time
format
is
another
interesting,
more
reason.
Oh
sorry,
going
back
date-time
format
who
here
has
used
that
about
the
same
house?
Maybe
a
bit
ball:
how
about
relative
time
format!
No
I
mean
it
hasn't
been
around
even
for
that
long
in
actual
implementations,
but
it
gives
you
nice
things
when
you
trying
to
provide
a
nice
user
experience
and
and
say
that
you
know
it's
not
this
specific
date.
A
That's
two
days
ago,
somewhat:
there's
no
similar
vain
list
format,
you
give
it
a
list,
an
array
of
things
array
of
strings,
sorry
and
what
you
can
get
out
of.
It
is
a
format,
a
locale,
specific
formatted
way
of
expressing
those
as
a
string,
a
motorcycle,
comma
bus,
Oxford,
comma
and
car
this
one.
The
Oxford
comma,
does
not
vary
between
British
and
American
English,
at
least
in
this
condition.
But
how
about
when
you
want
to
put
the
whole
message
together,
mark
took
1246
photos
on
11
December
to
2019.
A
This
specific
thing
does
not
exist
yet
I'm,
a
part
of
the
ACMA
for
echo
402
message,
format,
working
group,
which
is
just
starting
now,
and
we
are
just
now
starting
to
work
of
defining
exactly.
How
does
this
thing
work
and
what
else
is
really
part
of
that,
and
we
do
not
have
most
of
the
answers
for
any
of
those
questioners
yet,
but
we're
working
on
it
it'll
be
a
thing
in
the
future,
but
not
yet.
A
What
is
there
is
int'l
doctoral
rules.
Anyone
here
use
this
for
anything
yeah,
not
surprised
what
it
does
is
that
it
gives
you
a
little
part
of
what
messageformat
does
is
that
you
can
give
it
a
number
and
it'll
tell
you
what
category
of
plurals
that
falls
into
English
is
kind
of
simple
for
for
normal
plurals.
A
Ordinal
plurals
in
English
or
complicated
first
second,
third,
1240.
Sixth,
it
you
know
how
it
goes
so
this
you
can
get
out
of
into
a
poor
old
rules,
but
mostly
this
is
useful
for
guys
like
me,
who
have
writing
libraries
that
then
others
use
by
Yap.
It's
there
I
mean
fundamentally
don't
there
are
a
number
of
these
libraries
that
then
provide
the
services
of
message
formatting
in
JavaScript,
and
most
of
these
have
been
around
for
a
while.
A
Those
are
the
years
in
which
those
projects
have
each
of
them
started,
and
this
is
the
list
of
things
that
I
would
currently
recommend
to
be
used.
It
is
quite
likely
that,
if
you're
using
localization
that
the
tooling
you're
using
is
using
one
of
these
libraries
at
some
fundamental
level,
format,
Jas
and
I
18
next-
are
probably
some
of
the
biggest
things
biggest
of
these
globalize
and
messageformat
they're.
Both
open
J's
foundation
projects,
I'm,
maintain
message,
format,
so
I'm
kind
of
biased.
A
They
are
currently
Mozilla
is
currently
putting
all
of
fire
floor
and
all
of
everything
to
be
using
fluent
then,
when
you
go
I
mean
when
you're
done
using
these,
you
are
most
of
the
time
not
using
any
of
these
libraries
directly.
You
are
most
often
using
using
something
that
depends
on
the
environment
that
you
are
in
for
react.
A
Angular
you
spelt
all
of
these
have
a
number
of
toolkits
that
provide
that
effectively
use
that
the
libraries
that
I
mentioned
before
and
the
ecosystems
in
them,
then,
when
you
go
really
really
deep
down
in
a
where
do
you
get
the
strings
that
you
want
for
all
of
these
systems?
There
are
a
number
of
translation
services
with
these
I.
A
Localization
is
one
of
those
fields
of
application,
development
or
parts
of
application,
development
where
it
turns
out
that
there
is
no
one
right
tool
for
everyone.
It
ends
up
varying
and
depending
a
lot
on
the
exact
specifics
of
what
it
is
that
you
need
and
how
it
is
that
you're
using
it
and
what
is
your
own
history
and
and
all
of
it,
so
I
can't
really
go
that
deeply
into
all
of
these.
But
how
do
you
then
format?
These
messages?
A
In
particular,
when
you
have
a
string
like
mark,
took
or
variable
of
a
name,
someone
took
some
number
of
photos
and
then
does
you
need
to
formalize
whether
it's
zero
for
no
photos,
one
photo
or
many
photos
and
then
on
on
a
specific
date.
The
format
that
I
would
by
phone
recommend
is
I,
see
your
message,
format
at
the
moment
and
message
format.
A
That's
been
patched
up
as
time
goes
on.
I
18
next
has
its
native
format.
For
this
case,
it
looks
kind
of
like
this,
and
one
other
polyglot
is,
is
another
format
used
by
a
number
of
well?
Not
the
number
of
a
polyglot
is
itself.
It
gets
complicated,
so
I
would
as
a
fundamental
language
for
message
formatting
if
it,
if
it
has
any
complexity,
ICU
message
format
is
currently
a
really
good
choice.
A
Project
fluent
is
a
kind
of
an
evolution
of
ICU
message
format
and
the
people
behind
it
are
very
much
active
in
the
in
the
ECMO
4:02
work
and
are
participating
or
figuring
out.
What
should
the
intel
dot
message?
Format
format
look
like,
should
it
be
something
more
like
what
project
fluence
has
done
or
more
like
what
message.
Icu
message:
format
we're
working
on
it.
A
This
is
not
really
possible
with
messageformat,
because
the
message
format
is
is
formulated
so
that
you're
talking
about
the
contents
of
a
message,
whereas
with
fluent
you're
talking
about
the
content
of
an
entire
file
at
a
time-
and
you
can
build
really
interesting
things-
so
definitely
a
thing
to
keep
track
of,
but
still
in
development
a
little
bit
so
coming
back
to
ICU
message
format,
you
have
these
messages
and
you
need
to
keep
them
somewhere.
How
does
this
work?
A
You
could
put
them
in
an
ex
live
file
which
is
XML,
and
this
is
the
closest
thing
to
a
standard
for
localization
stuff
that
we
have
currently
I'm.
Not
a
fan
of
XML
I've
never
actually
used
an
extra
file
for
anything.
If
you
think
this
is
a
good
choice
for
you
great
and
the
some
of
the
origins
of
off
message.
A
A
Dot
properties,
files
common
in
in
Java
is
another
entirely
valid
option
and
it
kind
of
works
you
just
need
to
you.
Can
you
can
have
multi-line
strings
as
well?
You
just
need
to
remember
to
escape
all
of
them
and
it's
a
little
bit
tricky
in
some
aspects
or
you
could
have
your
messages
in
JSON
files,
and
this
is
this
is
one
point
in
which
the
the
the
non-human
aspects
of
why
jason
is
a
good
thing,
come
into
play
because
you
can't
have
multi-line
strings
and
you
even
this
example.
A
It
shall
we
say
Scrolls
quite
a
bit
in
order
to
show
the
whole
message:
that's
even
possible
there,
and-
and
this
is
in
fact
why
I
went
and
broke
my
own
yam.
All
library
and
llamo
Gemmill
is
actually
a
good
use
for
this,
because
it
lets
you
escape
the
the
curly
bits
better
than
most
other
configuration
file
formats,
but
it
still
it's
got
some
ugly
bits
to
it.
A
A
A
But
dysfunctionality
effectively
that
I'm
demoing
here
works
also
equally
well
with
the
message
format,
which
is
what
you
get.
If
you
drop
that
next
from
these.
So
that's
a
web
packed
loader
defining
for
it.
So
that
lets
you
import
from
a
message
tamil
file,
for
instance-
and
this
means
that
because
you're
doing
it
in
a
build
time
and
because
you're
transpiling,
you
don't
have
to
worry
about
any
of
the
cost
of
needing
to
in
the
runtime,
compile
the
message
format,
source
into
a
function
and
then
actually
get
variables
into
it.
A
A
It
does
this
plugins
also
for
for
using
using
it
in
react.
For
instance,
use
message
there
is
is
getting
you
the
message
from
a
react
context
and
working
from
there,
and
I
will
need
to
write
a
node
import
loader
in
order
to
make
all
of
this
work
in
node
as
well,
because
that's
cool
in
the
end
when
you're
starting
to
work
on
all
of
this.
A
A
Just
do
something
like
this
earlier,
and
this
is
just
for
for
just
generic.
Whatever
function,
I
mean
got
in
react.
You
can
do
something
equally
dumb
to
start
with,
it
doesn't
have
to
be
anything
as
long
as
you
have
a
something
that
your
your
your
code,
completion
or
whatever
you
can
grab
on
to
then
later
on,
modify
if
you
need
it,
but
yeah.
This
has
been
got
toys.
A
A
A
Am
not
willing
to
commit
to
any
sort
of
a
timeline
that
I'm
gonna
say
because,
honestly,
this,
the
the
the
message
format
working
group
has
met
once
the
next
meeting
is
I
is
on
Monday.
So
it's
very
much
getting
started
and
figuring
out
where
we
are
and
really
what
is
the
expression?
Is
it
really
Intel
dot
message
format
or
is
it
something
else
that
is
gonna,
be
the
implementation
of
it?
Whether
it's
includes
the
Dom,
whether
it's
something
entirely
different,
don't
know.
A
Then
you're
entering
the
question
of
when
you
have
a
string
and
you're
localizing
it
from
one
language
to
another
one.
What
do
you
use
really
as
the
key
there,
and
there
are
two
schools
of
thought
effectively
on
this
one,
whether
you
use
a
full
phrase
in
English,
for
instance,
English
makes
sense,
because
the
code
itself
is
effectively
English
and
use
the
full
phrase
or
use
a
key
to
look
it
up,
I'm
proposing
here
to
use
a
full
phrase
like
this,
because
that
doesn't
mean
you
have
to
actually
make
a
decision.