-
Notifications
You must be signed in to change notification settings - Fork 276
Localization
Please refer to the documentation here for using iLib with Enyo: http://enyojs.com/docs/2.4.0/building-apps/localization.html
The g11n Library has been deprecated with Enyo 2.4. The remainder of this document is preserved for historical purposes.
With Enyo 2.1, we introduced a powerful, versatile library for handling
globalization and localization, called g11n. While we are distributing g11n
as part of the Enyo project--as an optional library that fits neatly into the
standard distribution under /lib/g11n/--most of the library is designed such
that it can be used with any JavaScript framework. Our hope is that you'll find
g11n useful, whatever your framework of choice may be.
The heart of g11n lies in the base package. In base, you'll find tools
for working with locales, as well as specialized code for localizing strings,
numbers, durations, dates and times, and time zones. All apps using g11n
should include base.
g11n also features several optional packages--name, phone, and
address--which may be included in applications as needed. These packages
facilitate the parsing and formatting of personal names, phone numbers, and
addresses (of physical locations), respectively. (Note: For the initial
release of g11n, the address package has "work-in-progress" status.)
There is also a mini-package called css, which allows you to automatically
load locale-specific stylesheets.
While a comprehensive survey of the g11n library lies outside the scope of
this document, we'd like to provide you with a basic introduction to help you
get started.
The way that g11n works should be familiar to developers with previous
localization experience. One part of the library handles strings that have been
translated into different languages. By using the appropriate API calls, an app
can retrieve and display the right string for a given
linguistic/geographic/cultural context (i.e., "locale") without having to
concern itself with what the current locale happens to be. Furthermore, while
someone on your team still has to do the work of translating strings into
multiple languages (and placing the translated strings in the right files), for
the most part, this process may be kept separate from app code development.
In addition, the library has access to a repository of data on how different
locales deal with numbers, names, dates, addresses, and the like. The g11n
API provides functions that let apps retrieve and apply the appropriate set of
data parsing and formatting rules for a given locale, without needing to know
the detailed rules pertaining to any one locale.
With that in mind, it's no surprise that the basic unit of information in g11n
is the locale specifier, a string of the form "<language>" (e.g., "en",
"fr"), "<language>_<region>" ("en_us", "fr_ca"), or
"<language>_<region>_<variant>" ("en_us_funkytown").
Closely related to the locale specifier is the Locale object. A Locale
object is created by passing a locale specifier into the enyo.g11n.Locale
constructor method (found in
locale.js in the base
package). This object is essentially a container for the language, region, and
variant data from the specifier, with some convenience functions added for
parsing the specifier data and for making comparisons with other locales.
If you look in the file
g11n.js from the base
package, you'll notice that the g11n library actually keeps track of three
different locale specifiers--the uiLocale, formatLocale, and phoneLocale:
-
The
uiLocaleis the overarching default locale for displaying the user interface, including strings. (Note: The code for dealing with localized strings is concentrated in the files resources.js and template.js underbase.)When a
Localeobject is created, theuiLocalebecomes the current locale (i.e., the locale returned by calls toenyo.g11n.currentLocale()) if it is specified in the passed-inparamsobject. TheuiLocalealso becomes the current locale if it is included in the parameters passed toenyo.g11n.setLocale(params). -
The
formatLocaleis a locale used for formatting dates and times, durations, numbers, percentages, currency, addresses, and names. LikeuiLocale, it may be passed as a parameter to eitherenyo.g11n.Locale()orenyo.g11n.setLocale(); you may retrieve the current value by callingenyo.g11n.formatLocale(). If noformatLocaleis specified, the current locale is used. -
The
phoneLocaleserves as a "home" locale for parsing and formatting phone numbers that do not contain an explicit country code. To get the current value, callenyo.g11n.phoneLocale(). (Internally, thephonepackage has its own unique concept of what a phone locale is--seephoneloc.jsfor details.)
Within the g11n library, localized data exists in JSON-based text files, which
are generally named according to language, region, and variant, and stored in a
directory called data.
The following table summarizes the most significant objects and modules in
g11n, grouped by the type of data being localized. It is provided as a source
of pointers to additional information in the online
Enyo API Viewer.
| Data Type | Key Object(s) | Module(s) |
|---|---|---|
| Locales | enyo.g11n.Locale, enyo.g11n.Fmts |
locale.js, fmts.js |
| Strings | enyo.g11n.Resources, $L (function) |
resources.js, template.js |
| Characters | enyo.g11n.Char, enyo.g11n.Fmts |
character.js, fmts.js |
| Dates | enyo.g11n.DateFmt, enyo.g11n.Fmts |
datetime.js, fmts.js |
| Numbers | enyo.g11n.NumberFmt |
numberfmt.js |
| Durations | enyo.g11n.DurationFmt |
duration.js |
| Names | enyo.g11n.Name, enyo.g11n.NameFmt |
name.js, format.js |
| Phone Numbers | enyo.g11n.PhoneNumber, enyo.g11n.PhoneFmt |
phone.js, format.js |
| Addresses (work-in-progress) | enyo.g11n.Address, enyo.g11n.AddressFmt |
address.js, format.js |
The g11n library currently supports date and number formatting for the following countries:
Albania, Argentina, Australia, Austria, Bahrain, Belgium, Bolivia, Brazil, Bulgaria, Canada, Chile, China, Colombia, Costa Rica, Croatia, Czech Republic, Democratic Republic of the Congo, Denmark, Dominican Republic, Ecuador, Egypt, El Salvador, Estonia, Finland, France, Germany, Great Britain, Greece, Guatamala, Honduras, Hong Kong, Hungary, Iceland, India, Indonesia, Ireland, Israel, Italy, Jamaica, Japan, Jordan, Kazahkstan, Kenya, Latvia, Lesotho, Libya, Lithuania, Luxembourg, Macedonia (The Former Yugoslav Republic of), Malaysia, Malta, Mexico, Montenegro, Morocco, Mozambique, Netherlands, New Zealand, Nicaragua, Norway, Pakistan, Panama, Paraguay, Peru, Philippines, Poland, Portugal, Puerto Rico, Republic of Korea, Republic of Serbia, Romania, Russian Federation, Saudi Arabia, Singapore, Slovakia, South Africa, Spain, Sweden, Switzerland, Taiwan, Thailand, Turkey, Ukraine, United Arab Emirates, United Republic of Tanzania, United States of America, Uruguay, Venezuela
g11n currently supports the parsing and formatting of personal names in the
following languages:
Chinese, Dutch, English, French, German, Italian, Spanish
g11n currently supports phone number parsing and formatting for the following
countries:
Australia, Belgium, China, France, Germany, Hong Kong, India, Ireland, Italy, Luxembourg, Mexico, Netherlands, New Zealand, Singapore, Spain, United Kingdom, United States of America
g11n currently supports the ability to determine a phone number's region of
origin within a country for the following countries:
Australia, Belgium, China, France, Germany, India, Ireland, Italy, Mexico, Netherlands, New Zealand, Spain, United Kingdom, United States of America
While the g11n library's support for parsing and formatting addresses is
currently a work-in-progress, we plan to have support for addresses in the
following countries:
Australia, Belgium, Canada, China, France, Germany, Hong Kong, India, Ireland, Italy, Luxembourg, Mexico, Netherlands, New Zealand, Singapore, Taiwan, United Kingdom, United States of America
The effort needed to add g11n to an app is really quite minimal.
To use g11n in an Enyo application, include the library just as you would
onyx or layout:
-
In your app's
libdirectory, check out theg11nrepo from GitHub. (In a command-line git client, you can do this by issuing the commandgit clone [email protected]:enyojs/g11n.git.) -
In the app's
package.jsfile, add an entry for"$lib/g11n".
To use g11n in a non-Enyo app, do the following:
-
In your app's root directory, check out the Enyo core:
git clone [email protected]:enyojs/enyo.git -
Then check out the
g11nlibrary:git clone [email protected]:enyojs/g11n.git -
Finally, in your
index.htmlfile, add the following<script>tags:<script src="enyo/enyo.js"> <script src="g11n/package.js">
To learn more about g11n, see the documentation in the
API Viewer (where individual files from the library
are listed under the "Modules" tab), as well as the example code in the
Enyo Sampler.