Merge branch 'cdvtest' of https://github.com/stacic/cordova-plugin-globalization
diff --git a/NOTICE b/NOTICE
index 8ec56a5..1f7b4c9 100644
--- a/NOTICE
+++ b/NOTICE
@@ -3,3 +3,12 @@
 
 This product includes software developed at
 The Apache Software Foundation (http://www.apache.org/).
+
+This software includes software developed by Baptiste Lepilleur
+Copyright (C) 2007-2010 Baptiste Lepilleur
+
+This software includes software developed by Joerg Wiedenmann
+Copyright (C) 2006 Joerg Wiedenmann
+
+This software includes software developed by BlackBerry Ltd.
+Copyright (C) 2014 BlackBerry Ltd.
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index ced413d..a4d074f 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -58,3 +58,12 @@
 * Android should return BCP47 tag, not localized string
 * CB-6491 add CONTRIBUTING.md
 * CB-5980 Updated version and RELEASENOTES.md for release 0.2.6
+
+### 0.3.0 (Aug 06, 2014)
+* The right Apache License 2.0 added
+* Update headers and NOTICE file
+* [BlackBerry10] Implement Globalization for BB10
+* Initial implementation for **FirefoxOS**
+* CB-4602 ios: Use normalized values for getPreferredLanguage.
+* CB-6127 Updated translations for docs
+* CB-4602 geolocation.getPreferredLanguage and geolocation.getLocaleName now return strings with hypen (-) to stay compliant with current standards
diff --git a/doc/de/index.md b/doc/de/index.md
index 11be8f5..6ce34f8 100644
--- a/doc/de/index.md
+++ b/doc/de/index.md
@@ -62,6 +62,8 @@
 
 *   Amazon Fire OS
 *   Android
+*   BlackBerry 10
+*   Firefox OS
 *   iOS
 *   Windows Phone 8
 
@@ -101,6 +103,8 @@
 
 *   Amazon Fire OS
 *   Android
+*   BlackBerry 10
+*   Firefox OS
 *   iOS
 *   Windows Phone 8
 
@@ -150,6 +154,8 @@
 
 *   Amazon Fire OS
 *   Android
+*   BlackBerry 10
+*   Firefox OS
 *   iOS
 *   Windows Phone 8
 
@@ -169,6 +175,11 @@
 
 *   Die `formatLength` option unterstützt nur `short` und `full` Werte.
 
+### Firefox OS Macken
+
+*   `formatLength`ist keine Unterscheidung `long` und`full` 
+*   nur eine Methode der Anzeige von Datum (keine `long` oder `full` Version)
+
 ## navigator.globalization.getCurrencyPattern
 
 Gibt eine Musterzeichenfolge zum Formatieren und Analysieren von Währungsangaben nach Benutzereinstellungen und ISO 4217 Währungscode des Kunden.
@@ -202,6 +213,7 @@
 
 *   Amazon Fire OS
 *   Android
+*   BlackBerry 10
 *   iOS
 
 ### Beispiel
@@ -258,6 +270,8 @@
 
 *   Amazon Fire OS
 *   Android
+*   BlackBerry 10
+*   Firefox OS
 *   iOS
 *   Windows Phone 8
 
@@ -276,6 +290,10 @@
     );
     
 
+### Firefox OS Macken
+
+*   `options.type`unterstützt einen `genitive` Wert, wichtig für einige Sprachen
+
 ## navigator.globalization.getDatePattern
 
 Gibt eine Musterzeichenfolge zum Formatieren und Analysieren von Daten entsprechend der Client-Benutzer-Einstellungen.
@@ -309,6 +327,7 @@
 
 *   Amazon Fire OS
 *   Android
+*   BlackBerry 10
 *   iOS
 *   Windows Phone 8
 
@@ -352,6 +371,8 @@
 
 *   Amazon Fire OS
 *   Android
+*   BlackBerry 10
+*   Firefox OS
 *   iOS
 *   Windows Phone 8
 
@@ -405,6 +426,7 @@
 
 *   Amazon Fire OS
 *   Android
+*   BlackBerry 10
 *   iOS
 *   Windows Phone 8
 
@@ -463,6 +485,8 @@
 
 *   Amazon Fire OS
 *   Android
+*   BlackBerry 10
+*   Firefox OS
 *   iOS
 *   Windows Phone 8
 
@@ -501,6 +525,7 @@
 
 *   Amazon Fire OS
 *   Android
+*   BlackBerry 10
 *   iOS
 *   Windows Phone 8
 
@@ -557,6 +582,8 @@
 
 *   Amazon Fire OS
 *   Android
+*   BlackBerry 10
+*   Firefox OS
 *   iOS
 *   Windows Phone 8
 
@@ -602,6 +629,7 @@
 
 *   Amazon Fire OS
 *   Android
+*   BlackBerry 10
 *   iOS
 *   Windows Phone 8
 
@@ -638,6 +666,8 @@
 
 *   Amazon Fire OS
 *   Android
+*   BlackBerry 10
+*   Firefox OS
 *   iOS
 
 ### Beispiel
diff --git a/doc/es/index.md b/doc/es/index.md
index 9f701c4..9f32a21 100644
--- a/doc/es/index.md
+++ b/doc/es/index.md
@@ -62,6 +62,8 @@
 
 *   Amazon fuego OS
 *   Android
+*   BlackBerry 10
+*   Firefox OS
 *   iOS
 *   Windows Phone 8
 
@@ -101,6 +103,8 @@
 
 *   Amazon fuego OS
 *   Android
+*   BlackBerry 10
+*   Firefox OS
 *   iOS
 *   Windows Phone 8
 
@@ -150,6 +154,8 @@
 
 *   Amazon fuego OS
 *   Android
+*   BlackBerry 10
+*   Firefox OS
 *   iOS
 *   Windows Phone 8
 
@@ -169,6 +175,11 @@
 
 *   El `formatLength` los soportes de la opción `short` y `full` los valores.
 
+### Firefox OS rarezas
+
+*   `formatLength`No es distinguir `long` y`full` 
+*   Sólo un método de visualización de fecha (no `long` o `full` versión)
+
 ## navigator.globalization.getCurrencyPattern
 
 Devuelve una cadena de patrón para analizar valores de divisas según las preferencias del usuario y código de moneda ISO 4217 del cliente y el formato.
@@ -202,6 +213,7 @@
 
 *   Amazon fuego OS
 *   Android
+*   BlackBerry 10
 *   iOS
 
 ### Ejemplo
@@ -258,6 +270,8 @@
 
 *   Amazon fuego OS
 *   Android
+*   BlackBerry 10
+*   Firefox OS
 *   iOS
 *   Windows Phone 8
 
@@ -276,6 +290,10 @@
     );
     
 
+### Firefox OS rarezas
+
+*   `options.type`apoya un `genitive` valor, importante para algunos idiomas
+
 ## navigator.globalization.getDatePattern
 
 Devuelve una cadena de patrón para analizar las fechas según las preferencias del cliente usuario y el formato.
@@ -309,6 +327,7 @@
 
 *   Amazon fuego OS
 *   Android
+*   BlackBerry 10
 *   iOS
 *   Windows Phone 8
 
@@ -352,6 +371,8 @@
 
 *   Amazon fuego OS
 *   Android
+*   BlackBerry 10
+*   Firefox OS
 *   iOS
 *   Windows Phone 8
 
@@ -405,6 +426,7 @@
 
 *   Amazon fuego OS
 *   Android
+*   BlackBerry 10
 *   iOS
 *   Windows Phone 8
 
@@ -463,6 +485,8 @@
 
 *   Amazon fuego OS
 *   Android
+*   BlackBerry 10
+*   Firefox OS
 *   iOS
 *   Windows Phone 8
 
@@ -501,6 +525,7 @@
 
 *   Amazon fuego OS
 *   Android
+*   BlackBerry 10
 *   iOS
 *   Windows Phone 8
 
@@ -557,6 +582,8 @@
 
 *   Amazon fuego OS
 *   Android
+*   BlackBerry 10
+*   Firefox OS
 *   iOS
 *   Windows Phone 8
 
@@ -602,6 +629,7 @@
 
 *   Amazon fuego OS
 *   Android
+*   BlackBerry 10
 *   iOS
 *   Windows Phone 8
 
@@ -638,6 +666,8 @@
 
 *   Amazon fuego OS
 *   Android
+*   BlackBerry 10
+*   Firefox OS
 *   iOS
 
 ### Ejemplo
diff --git a/doc/fr/index.md b/doc/fr/index.md
index 1b86154..a72a2b6 100644
--- a/doc/fr/index.md
+++ b/doc/fr/index.md
@@ -62,6 +62,8 @@
 
 *   Amazon Fire OS
 *   Android
+*   BlackBerry 10
+*   Firefox OS
 *   iOS
 *   Windows Phone 8
 
@@ -101,6 +103,8 @@
 
 *   Amazon Fire OS
 *   Android
+*   BlackBerry 10
+*   Firefox OS
 *   iOS
 *   Windows Phone 8
 
@@ -150,6 +154,8 @@
 
 *   Amazon Fire OS
 *   Android
+*   BlackBerry 10
+*   Firefox OS
 *   iOS
 *   Windows Phone 8
 
@@ -169,6 +175,11 @@
 
 *   Le `formatLength` prend en charge uniquement l'option `short` et `full` valeurs.
 
+### Firefox OS Quirks
+
+*   `formatLength`n'est pas distinguer `long` et`full` 
+*   une seule méthode d'affichage de date (aucun `long` ou `full` version)
+
 ## navigator.globalization.getCurrencyPattern
 
 Retourne une chaîne de modèles pour formater et analyser les valeurs de monnaie selon les préférences de l'utilisateur et du code de devise ISO 4217 du client.
@@ -202,6 +213,7 @@
 
 *   Amazon Fire OS
 *   Android
+*   BlackBerry 10
 *   iOS
 
 ### Exemple
@@ -258,6 +270,8 @@
 
 *   Amazon Fire OS
 *   Android
+*   BlackBerry 10
+*   Firefox OS
 *   iOS
 *   Windows Phone 8
 
@@ -276,6 +290,10 @@
     );
     
 
+### Firefox OS Quirks
+
+*   `options.type`prend en charge une `genitive` valeur, important pour certaines langues
+
 ## navigator.globalization.getDatePattern
 
 Retourne une chaîne de modèles pour formater et d'analyser les dates selon les préférences de l'utilisateur du client.
@@ -309,6 +327,7 @@
 
 *   Amazon Fire OS
 *   Android
+*   BlackBerry 10
 *   iOS
 *   Windows Phone 8
 
@@ -352,6 +371,8 @@
 
 *   Amazon Fire OS
 *   Android
+*   BlackBerry 10
+*   Firefox OS
 *   iOS
 *   Windows Phone 8
 
@@ -405,6 +426,7 @@
 
 *   Amazon Fire OS
 *   Android
+*   BlackBerry 10
 *   iOS
 *   Windows Phone 8
 
@@ -463,6 +485,8 @@
 
 *   Amazon Fire OS
 *   Android
+*   BlackBerry 10
+*   Firefox OS
 *   iOS
 *   Windows Phone 8
 
@@ -501,6 +525,7 @@
 
 *   Amazon Fire OS
 *   Android
+*   BlackBerry 10
 *   iOS
 *   Windows Phone 8
 
@@ -557,6 +582,8 @@
 
 *   Amazon Fire OS
 *   Android
+*   BlackBerry 10
+*   Firefox OS
 *   iOS
 *   Windows Phone 8
 
@@ -602,6 +629,7 @@
 
 *   Amazon Fire OS
 *   Android
+*   BlackBerry 10
 *   iOS
 *   Windows Phone 8
 
@@ -638,6 +666,8 @@
 
 *   Amazon Fire OS
 *   Android
+*   BlackBerry 10
+*   Firefox OS
 *   iOS
 
 ### Exemple
diff --git a/doc/index.md b/doc/index.md
index 4e949f2..57cbb59 100644
--- a/doc/index.md
+++ b/doc/index.md
@@ -72,6 +72,8 @@
 
 - Amazon Fire OS
 - Android
+- BlackBerry 10
+- Firefox OS
 - iOS
 - Windows Phone 8
 
@@ -120,6 +122,8 @@
 
 - Amazon Fire OS
 - Android
+- BlackBerry 10
+- Firefox OS
 - iOS
 - Windows Phone 8
 
@@ -174,6 +178,8 @@
 
 - Amazon Fire OS
 - Android
+- BlackBerry 10
+- Firefox OS
 - iOS
 - Windows Phone 8
 
@@ -194,6 +200,11 @@
 
 - The `formatLength` option supports only `short` and `full` values.
 
+### Firefox OS Quirks
+
+- `formatLength` is not distinguishing `long` and `full` 
+- only one method of displaying date (no `long` or `full` version)
+
 ## navigator.globalization.getCurrencyPattern
 
 Returns a pattern string to format and parse currency values according
@@ -229,6 +240,7 @@
 
 - Amazon Fire OS
 - Android
+- BlackBerry 10
 - iOS
 
 ### Example
@@ -291,6 +303,8 @@
 
 - Amazon Fire OS
 - Android
+- BlackBerry 10
+- Firefox OS
 - iOS
 - Windows Phone 8
 
@@ -310,6 +324,10 @@
         { type: 'wide', item: 'months' }
     );
 
+### Firefox OS Quirks
+
+- `options.type` supports a `genitive` value, important for some languages
+
 
 ## navigator.globalization.getDatePattern
 
@@ -347,6 +365,7 @@
 
 - Amazon Fire OS
 - Android
+- BlackBerry 10
 - iOS
 - Windows Phone 8
 
@@ -396,6 +415,8 @@
 
 - Amazon Fire OS
 - Android
+- BlackBerry 10
+- Firefox OS
 - iOS
 - Windows Phone 8
 
@@ -451,6 +472,7 @@
 
 - Amazon Fire OS
 - Android
+- BlackBerry 10
 - iOS
 - Windows Phone 8
 
@@ -515,6 +537,8 @@
 
 - Amazon Fire OS
 - Android
+- BlackBerry 10
+- Firefox OS
 - iOS
 - Windows Phone 8
 
@@ -558,6 +582,7 @@
 
 - Amazon Fire OS
 - Android
+- BlackBerry 10
 - iOS
 - Windows Phone 8
 
@@ -620,6 +645,8 @@
 
 - Amazon Fire OS
 - Android
+- BlackBerry 10
+- Firefox OS
 - iOS
 - Windows Phone 8
 
@@ -673,6 +700,7 @@
 
 - Amazon Fire OS
 - Android
+- BlackBerry 10
 - iOS
 - Windows Phone 8
 
@@ -710,6 +738,8 @@
 
 - Amazon Fire OS
 - Android
+- BlackBerry 10
+- Firefox OS
 - iOS
 
 ### Example
@@ -722,3 +752,4 @@
               'message: ' + error.message + '\n');
     };
 
+
diff --git a/doc/it/index.md b/doc/it/index.md
index 737e05a..87a0af2 100644
--- a/doc/it/index.md
+++ b/doc/it/index.md
@@ -62,6 +62,8 @@
 
 *   Amazon fuoco OS
 *   Android
+*   BlackBerry 10
+*   Firefox OS
 *   iOS
 *   Windows Phone 8
 
@@ -101,6 +103,8 @@
 
 *   Amazon fuoco OS
 *   Android
+*   BlackBerry 10
+*   Firefox OS
 *   iOS
 *   Windows Phone 8
 
@@ -150,6 +154,8 @@
 
 *   Amazon fuoco OS
 *   Android
+*   BlackBerry 10
+*   Firefox OS
 *   iOS
 *   Windows Phone 8
 
@@ -169,6 +175,11 @@
 
 *   Il `formatLength` opzione supporta solo `short` e `full` i valori.
 
+### Firefox OS stranezze
+
+*   `formatLength`non è distinguere `long` e`full` 
+*   solo un metodo di visualizzazione data (non `long` o `full` versione)
+
 ## navigator.globalization.getCurrencyPattern
 
 Restituisce una stringa per formattare e analizzare i valori di valuta secondo le preferenze dell'utente e il codice ISO 4217 del client.
@@ -202,6 +213,7 @@
 
 *   Amazon fuoco OS
 *   Android
+*   BlackBerry 10
 *   iOS
 
 ### Esempio
@@ -258,6 +270,8 @@
 
 *   Amazon fuoco OS
 *   Android
+*   BlackBerry 10
+*   Firefox OS
 *   iOS
 *   Windows Phone 8
 
@@ -276,6 +290,10 @@
     );
     
 
+### Firefox OS stranezze
+
+*   `options.type`supporta un `genitive` valore, importante per alcune lingue
+
 ## navigator.globalization.getDatePattern
 
 Restituisce una stringa per formattare e analizzare i dati secondo le preferenze dell'utente del client.
@@ -309,6 +327,7 @@
 
 *   Amazon fuoco OS
 *   Android
+*   BlackBerry 10
 *   iOS
 *   Windows Phone 8
 
@@ -352,6 +371,8 @@
 
 *   Amazon fuoco OS
 *   Android
+*   BlackBerry 10
+*   Firefox OS
 *   iOS
 *   Windows Phone 8
 
@@ -405,6 +426,7 @@
 
 *   Amazon fuoco OS
 *   Android
+*   BlackBerry 10
 *   iOS
 *   Windows Phone 8
 
@@ -463,6 +485,8 @@
 
 *   Amazon fuoco OS
 *   Android
+*   BlackBerry 10
+*   Firefox OS
 *   iOS
 *   Windows Phone 8
 
@@ -501,6 +525,7 @@
 
 *   Amazon fuoco OS
 *   Android
+*   BlackBerry 10
 *   iOS
 *   Windows Phone 8
 
@@ -557,6 +582,8 @@
 
 *   Amazon fuoco OS
 *   Android
+*   BlackBerry 10
+*   Firefox OS
 *   iOS
 *   Windows Phone 8
 
@@ -602,6 +629,7 @@
 
 *   Amazon fuoco OS
 *   Android
+*   BlackBerry 10
 *   iOS
 *   Windows Phone 8
 
@@ -638,6 +666,8 @@
 
 *   Amazon fuoco OS
 *   Android
+*   BlackBerry 10
+*   Firefox OS
 *   iOS
 
 ### Esempio
diff --git a/doc/ja/index.md b/doc/ja/index.md
index 936ad37..f6b3711 100644
--- a/doc/ja/index.md
+++ b/doc/ja/index.md
@@ -62,6 +62,8 @@
 
 *   アマゾン火 OS
 *   アンドロイド
+*   ブラックベリー 10
+*   Firefox の OS
 *   iOS
 *   Windows Phone 8
 
@@ -101,6 +103,8 @@
 
 *   アマゾン火 OS
 *   アンドロイド
+*   ブラックベリー 10
+*   Firefox の OS
 *   iOS
 *   Windows Phone 8
 
@@ -150,6 +154,8 @@
 
 *   アマゾン火 OS
 *   アンドロイド
+*   ブラックベリー 10
+*   Firefox の OS
 *   iOS
 *   Windows Phone 8
 
@@ -169,6 +175,11 @@
 
 *   `formatLength`オプションをサポートするだけ `short` と `full` の値。
 
+### Firefox OS 癖
+
+*   `formatLength`識別されない `long` と`full` 
+*   日付を表示する 1 つだけメソッド (ない `long` または `full` バージョン)
+
 ## navigator.globalization.getCurrencyPattern
 
 書式設定および通貨の値によると、クライアントのユーザーの基本設定と ISO 4217 通貨コードを解析するパターン文字列を返します。
@@ -202,6 +213,7 @@
 
 *   アマゾン火 OS
 *   アンドロイド
+*   ブラックベリー 10
 *   iOS
 
 ### 例
@@ -258,6 +270,8 @@
 
 *   アマゾン火 OS
 *   アンドロイド
+*   ブラックベリー 10
+*   Firefox の OS
 *   iOS
 *   Windows Phone 8
 
@@ -276,6 +290,10 @@
     );
     
 
+### Firefox OS 癖
+
+*   `options.type`サポートしている、 `genitive` のいくつかの言語の重要な値
+
 ## navigator.globalization.getDatePattern
 
 クライアントのユーザーの設定に従った日付を解析するパターン文字列を返します。
@@ -309,6 +327,7 @@
 
 *   アマゾン火 OS
 *   アンドロイド
+*   ブラックベリー 10
 *   iOS
 *   Windows Phone 8
 
@@ -352,6 +371,8 @@
 
 *   アマゾン火 OS
 *   アンドロイド
+*   ブラックベリー 10
+*   Firefox の OS
 *   iOS
 *   Windows Phone 8
 
@@ -405,6 +426,7 @@
 
 *   アマゾン火 OS
 *   アンドロイド
+*   ブラックベリー 10
 *   iOS
 *   Windows Phone 8
 
@@ -463,6 +485,8 @@
 
 *   アマゾン火 OS
 *   アンドロイド
+*   ブラックベリー 10
+*   Firefox の OS
 *   iOS
 *   Windows Phone 8
 
@@ -501,6 +525,7 @@
 
 *   アマゾン火 OS
 *   アンドロイド
+*   ブラックベリー 10
 *   iOS
 *   Windows Phone 8
 
@@ -557,6 +582,8 @@
 
 *   アマゾン火 OS
 *   アンドロイド
+*   ブラックベリー 10
+*   Firefox の OS
 *   iOS
 *   Windows Phone 8
 
@@ -602,6 +629,7 @@
 
 *   アマゾン火 OS
 *   アンドロイド
+*   ブラックベリー 10
 *   iOS
 *   Windows Phone 8
 
@@ -638,6 +666,8 @@
 
 *   アマゾン火 OS
 *   アンドロイド
+*   ブラックベリー 10
+*   Firefox の OS
 *   iOS
 
 ### 例
diff --git a/doc/ko/index.md b/doc/ko/index.md
index 8c1f16f..a9b8568 100644
--- a/doc/ko/index.md
+++ b/doc/ko/index.md
@@ -62,6 +62,8 @@
 
 *   아마존 화재 운영 체제
 *   안 드 로이드
+*   블랙베리 10
+*   Firefox 운영 체제
 *   iOS
 *   Windows Phone 8
 
@@ -101,6 +103,8 @@
 
 *   아마존 화재 운영 체제
 *   안 드 로이드
+*   블랙베리 10
+*   Firefox 운영 체제
 *   iOS
 *   Windows Phone 8
 
@@ -150,6 +154,8 @@
 
 *   아마존 화재 운영 체제
 *   안 드 로이드
+*   블랙베리 10
+*   Firefox 운영 체제
 *   iOS
 *   Windows Phone 8
 
@@ -169,6 +175,11 @@
 
 *   `formatLength`만 지원 옵션 `short` 및 `full` 값.
 
+### 파이어 폭스 OS 단점
+
+*   `formatLength`구별 하지 `long` 및`full` 
+*   날짜를 표시 하는 하나의 방법을 (아무 `long` 또는 `full` 버전)
+
 ## navigator.globalization.getCurrencyPattern
 
 포맷 하 고 클라이언트의 사용자 환경 설정 및 ISO 4217 통화 부호에 따라 통화 값을 구문 분석 패턴 문자열을 반환 합니다.
@@ -202,6 +213,7 @@
 
 *   아마존 화재 운영 체제
 *   안 드 로이드
+*   블랙베리 10
 *   iOS
 
 ### 예를 들어
@@ -258,6 +270,8 @@
 
 *   아마존 화재 운영 체제
 *   안 드 로이드
+*   블랙베리 10
+*   Firefox 운영 체제
 *   iOS
 *   Windows Phone 8
 
@@ -276,6 +290,10 @@
     );
     
 
+### 파이어 폭스 OS 단점
+
+*   `options.type`지원 한 `genitive` 값, 일부 언어에 대 한 중요 한
+
 ## navigator.globalization.getDatePattern
 
 포맷 하 고 클라이언트의 사용자 환경 설정에 따라 날짜 구문 분석 패턴 문자열을 반환 합니다.
@@ -309,6 +327,7 @@
 
 *   아마존 화재 운영 체제
 *   안 드 로이드
+*   블랙베리 10
 *   iOS
 *   Windows Phone 8
 
@@ -352,6 +371,8 @@
 
 *   아마존 화재 운영 체제
 *   안 드 로이드
+*   블랙베리 10
+*   Firefox 운영 체제
 *   iOS
 *   Windows Phone 8
 
@@ -405,6 +426,7 @@
 
 *   아마존 화재 운영 체제
 *   안 드 로이드
+*   블랙베리 10
 *   iOS
 *   Windows Phone 8
 
@@ -463,6 +485,8 @@
 
 *   아마존 화재 운영 체제
 *   안 드 로이드
+*   블랙베리 10
+*   Firefox 운영 체제
 *   iOS
 *   Windows Phone 8
 
@@ -501,6 +525,7 @@
 
 *   아마존 화재 운영 체제
 *   안 드 로이드
+*   블랙베리 10
 *   iOS
 *   Windows Phone 8
 
@@ -557,6 +582,8 @@
 
 *   아마존 화재 운영 체제
 *   안 드 로이드
+*   블랙베리 10
+*   Firefox 운영 체제
 *   iOS
 *   Windows Phone 8
 
@@ -602,6 +629,7 @@
 
 *   아마존 화재 운영 체제
 *   안 드 로이드
+*   블랙베리 10
 *   iOS
 *   Windows Phone 8
 
@@ -638,6 +666,8 @@
 
 *   아마존 화재 운영 체제
 *   안 드 로이드
+*   블랙베리 10
+*   Firefox 운영 체제
 *   iOS
 
 ### 예를 들어
diff --git a/doc/pl/index.md b/doc/pl/index.md
index 80b13db..82c7b5a 100644
--- a/doc/pl/index.md
+++ b/doc/pl/index.md
@@ -62,6 +62,8 @@
 
 *   Amazon ogień OS
 *   Android
+*   Jeżyna 10
+*   Firefox OS
 *   iOS
 *   Windows Phone 8
 
@@ -101,6 +103,8 @@
 
 *   Amazon ogień OS
 *   Android
+*   Jeżyna 10
+*   Firefox OS
 *   iOS
 *   Windows Phone 8
 
@@ -150,6 +154,8 @@
 
 *   Amazon ogień OS
 *   Android
+*   Jeżyna 10
+*   Firefox OS
 *   iOS
 *   Windows Phone 8
 
@@ -169,6 +175,11 @@
 
 *   `formatLength`Opcja obsługuje tylko `short` i `full` wartości.
 
+### Firefox OS dziwactwa
+
+*   `formatLength`nie jest odróżnienie `long` i`full` 
+*   tylko jedna metoda wyświetlania daty (nie `long` lub `full` wersja)
+
 ## navigator.globalization.getCurrencyPattern
 
 Zwraca ciąg wzór do formatu i analizy wartości walut według preferencji użytkownika klienta i kod waluty ISO 4217.
@@ -202,6 +213,7 @@
 
 *   Amazon ogień OS
 *   Android
+*   Jeżyna 10
 *   iOS
 
 ### Przykład
@@ -258,6 +270,8 @@
 
 *   Amazon ogień OS
 *   Android
+*   Jeżyna 10
+*   Firefox OS
 *   iOS
 *   Windows Phone 8
 
@@ -276,6 +290,10 @@
     );
     
 
+### Firefox OS dziwactwa
+
+*   `options.type`obsługuje `genitive` wartość, ważne dla niektórych języków
+
 ## navigator.globalization.getDatePattern
 
 Zwraca ciąg wzór do formatu i analizy dat według preferencji użytkownika klienta.
@@ -309,6 +327,7 @@
 
 *   Amazon ogień OS
 *   Android
+*   Jeżyna 10
 *   iOS
 *   Windows Phone 8
 
@@ -352,6 +371,8 @@
 
 *   Amazon ogień OS
 *   Android
+*   Jeżyna 10
+*   Firefox OS
 *   iOS
 *   Windows Phone 8
 
@@ -405,6 +426,7 @@
 
 *   Amazon ogień OS
 *   Android
+*   Jeżyna 10
 *   iOS
 *   Windows Phone 8
 
@@ -463,6 +485,8 @@
 
 *   Amazon ogień OS
 *   Android
+*   Jeżyna 10
+*   Firefox OS
 *   iOS
 *   Windows Phone 8
 
@@ -501,6 +525,7 @@
 
 *   Amazon ogień OS
 *   Android
+*   Jeżyna 10
 *   iOS
 *   Windows Phone 8
 
@@ -557,6 +582,8 @@
 
 *   Amazon ogień OS
 *   Android
+*   Jeżyna 10
+*   Firefox OS
 *   iOS
 *   Windows Phone 8
 
@@ -602,6 +629,7 @@
 
 *   Amazon ogień OS
 *   Android
+*   Jeżyna 10
 *   iOS
 *   Windows Phone 8
 
@@ -638,6 +666,8 @@
 
 *   Amazon ogień OS
 *   Android
+*   Jeżyna 10
+*   Firefox OS
 *   iOS
 
 ### Przykład
diff --git a/doc/ru/index.md b/doc/ru/index.md
new file mode 100644
index 0000000..6ed9ae7
--- /dev/null
+++ b/doc/ru/index.md
@@ -0,0 +1,680 @@
+<!---
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+
+# org.apache.cordova.globalization
+
+Этот модуль получает информацию и выполняет операции, специфичные для языка, язык и часовой пояс пользователя. Обратите внимание на разницу между и языка: язык элементов, как числа, даты и время отображаются для региона, в то время как язык определяет, какой язык текст отображается в виде, независимо от локали. Часто разработчики используют языковой стандарт для установки обоих параметров, но нет никаких причин, которые пользователь не мог установить ее язык «Английский язык», но языка «Французский», так что текст отображается на английском языке, но даты, время, и т.п., отображаются как они во Франции. К сожалению большинство мобильных платформ в настоящее время не проводится различие между этими параметрами.
+
+## Установка
+
+    cordova plugin add org.apache.cordova.globalization
+    
+
+## Объекты
+
+*   GlobalizationError
+
+## Методы
+
+*   navigator.globalization.getPreferredLanguage
+*   navigator.globalization.getLocaleName
+*   navigator.globalization.dateToString
+*   navigator.globalization.stringToDate
+*   navigator.globalization.getDatePattern
+*   navigator.globalization.getDateNames
+*   navigator.globalization.isDayLightSavingsTime
+*   navigator.globalization.getFirstDayOfWeek
+*   navigator.globalization.numberToString
+*   navigator.globalization.stringToNumber
+*   navigator.globalization.getNumberPattern
+*   navigator.globalization.getCurrencyPattern
+
+## navigator.globalization.getPreferredLanguage
+
+Получите тег языка BCP 47 для клиента текущего языка.
+
+    navigator.globalization.getPreferredLanguage(successCallback, errorCallback);
+    
+
+### Описание
+
+Возвращает метку идентификатор совместимого языка BCP-47 к `successCallback` с `properties` объект в качестве параметра. Этот объект должен иметь `value` собственности с `String` значение.
+
+Если есть ошибка, как язык, то `errorCallback` выполняет с `GlobalizationError` объект в качестве параметра. Ожидаемый код ошибки`GlobalizationError.UNKNOWN_ERROR`.
+
+### Поддерживаемые платформы
+
+*   Amazon Fire ОС
+*   Android
+*   BlackBerry 10
+*   Firefox OS
+*   iOS
+*   Windows Phone 8
+
+### Пример
+
+Когда браузер настроен `en-US` языке, это должно отображать всплывающее диалоговое окно с текстом `language: en-US` :
+
+    navigator.globalization.getPreferredLanguage(
+        function (language) {alert('language: ' + language.value + '\n');},
+        function () {alert('Error getting language\n');}
+    );
+    
+
+### Android причуды
+
+*   Возвращает ISO 639-двухбуквенный код языка 1, верхний регистр ISO 3166-1 код и вариант, разделенных дефисами. Примеры: «en», «en US», «США»
+
+### Windows Phone 8 причуды
+
+*   Код языка возвращает двухбуквенный ISO 639-1 и ISO 3166-1 код региональный вариант, соответствующий «Язык» установка, разделенных дефисом.
+*   Обратите внимание, что региональный вариант является свойством параметра «Язык» и не определяется параметром отношения "Страна/регион" на Windows Phone.
+
+## navigator.globalization.getLocaleName
+
+Возвращает в BCP 47 совместимый тег для текущей локали клиента.
+
+    navigator.globalization.getLocaleName(successCallback, errorCallback);
+    
+
+### Описание
+
+Возвращает строку идентификатор совместимого языка BCP 47 `successCallback` с `properties` объект в качестве параметра. Этот объект должен иметь `value` собственности с `String` значение. Тег языка будет состоять из двух букв нижнего регистра кода языка, код страны две буквы заглавные и (неопределенные) код варианта, разделенных дефисом.
+
+Если есть ошибка получения локали, то `errorCallback` выполняет с `GlobalizationError` объект в качестве параметра. Ожидаемый код ошибки`GlobalizationError.UNKNOWN_ERROR`.
+
+### Поддерживаемые платформы
+
+*   Amazon Fire ОС
+*   Android
+*   BlackBerry 10
+*   Firefox OS
+*   iOS
+*   Windows Phone 8
+
+### Пример
+
+Когда браузер настроен `en-US` языка, это выводит всплывающее диалоговое окно с текстом`locale: en-US`.
+
+    navigator.globalization.getLocaleName(
+        function (locale) {alert('locale: ' + locale.value + '\n');},
+        function () {alert('Error getting locale\n');}
+    );
+    
+
+### Android причуды
+
+*   Java не различает набор «langauge» и установить «локаль», поэтому этот метод является по существу таким же, как`navigator.globalizatin.getPreferredLanguage()`.
+
+### Windows Phone 8 причуды
+
+*   Возвращает ISO 639-1 двухбуквенный код языка и код ISO 3166-1 страны региональный вариант соответствующего параметра «Региональный формат», разделенных дефисом.
+
+## navigator.globalization.dateToString
+
+Возвращает дату в формате строки согласно локали клиента и часовой пояс.
+
+    navigator.globalization.dateToString(date, successCallback, errorCallback, options);
+    
+
+### Описание
+
+Возвращает отформатированную дату `String` через `value` свойств, доступных из объекта, переданного в качестве параметра для`successCallback`.
+
+Входящий `date` параметр должен иметь тип`Date`.
+
+Если есть ошибка форматирования даты, то `errorCallback` выполняет с `GlobalizationError` объект в качестве параметра. Ожидаемый код ошибки`GlobalizationError.FORMATTING_ERROR`.
+
+`options`Параметр является необязательным, и его значения по умолчанию являются:
+
+    {formatLength: «короткая», селектор: «Дата и время»}
+    
+
+`options.formatLength`Может быть `short` , `medium` , `long` , или`full`.
+
+`options.selector`Может быть `date` , `time` или`date and time`.
+
+### Поддерживаемые платформы
+
+*   Amazon Fire ОС
+*   Android
+*   BlackBerry 10
+*   Firefox OS
+*   iOS
+*   Windows Phone 8
+
+### Пример
+
+Если браузер настроен `en_US` языка, это выводит всплывающее диалоговое окно с текстом, похож на `date: 9/25/2012 4:21PM` с использованием параметров по умолчанию:
+
+    navigator.globalization.dateToString(
+        new Date(),
+        function (date) { alert('date: ' + date.value + '\n'); },
+        function () { alert('Error getting dateString\n'); },
+        { formatLength: 'short', selector: 'date and time' }
+    );
+    
+
+### Windows Phone 8 причуды
+
+*   `formatLength`Вариант поддерживает только `short` и `full` значения.
+
+### Firefox OS причуды
+
+*   `formatLength`не различать `long` и`full` 
+*   только один метод отображения даты (не `long` или `full` версия)
+
+## navigator.globalization.getCurrencyPattern
+
+Возвращает строку шаблона для форматирования и анализа значений валют согласно ISO 4217 код валюты предпочтения пользователя и клиента.
+
+     navigator.globalization.getCurrencyPattern(currencyCode, successCallback, errorCallback);
+    
+
+### Описание
+
+Возвращает шаблон для `successCallback` с `properties` объект в качестве параметра. Этот объект должен содержать следующие свойства:
+
+*   **шаблон**: валюты шаблон для форматирования и синтаксического анализа значения валюты. Шаблоны следуют [технического стандарта Unicode #35][1]. *(Строка)*
+
+*   **код**: код валюты ISO 4217 для шаблона. *(Строка)*
+
+*   **фракция**: количество дробных разрядов для использования когда синтаксический анализ и форматирование валюты. *(Число)*
+
+*   **округления**: округление увеличивается для использования при синтаксического анализа и форматирования. *(Число)*
+
+*   **десятичное**: десятичный символ использовать для синтаксического анализа и форматирования. *(Строка)*
+
+*   **Группировка**: группировка символ использовать для синтаксического анализа и форматирования. *(Строка)*
+
+ [1]: http://unicode.org/reports/tr35/tr35-4.html
+
+Входящий `currencyCode` параметр должен быть `String` одного из кодов ISO 4217 валют, например «USD».
+
+Если есть ошибка получения шаблона, то свойство `errorCallback` выполняет с `GlobalizationError` объект в качестве параметра. Ожидаемый код ошибки`GlobalizationError.FORMATTING_ERROR`.
+
+### Поддерживаемые платформы
+
+*   Amazon Fire ОС
+*   Android
+*   BlackBerry 10
+*   iOS
+
+### Пример
+
+Когда браузер настроен `en_US` языка и выбранной валюты это доллары США, этот пример отображает всплывающее диалоговое окно с текстом аналогичные результаты, которые следуют:
+
+    navigator.globalization.getCurrencyPattern(
+        'USD',
+        function (pattern) {
+            alert('pattern: '  + pattern.pattern  + '\n' +
+                  'code: '     + pattern.code     + '\n' +
+                  'fraction: ' + pattern.fraction + '\n' +
+                  'rounding: ' + pattern.rounding + '\n' +
+                  'decimal: '  + pattern.decimal  + '\n' +
+                  'grouping: ' + pattern.grouping);
+        },
+        function () { alert('Error getting pattern\n'); }
+    );
+    
+
+Ожидаемый результат:
+
+    pattern: $#,##0.##;($#,##0.##)
+    code: USD
+    fraction: 2
+    rounding: 0
+    decimal: .
+    grouping: ,
+    
+
+## navigator.globalization.getDateNames
+
+Возвращает массив, содержащий названия месяцев или дней недели, в зависимости от предпочтений пользователя и календарь клиента.
+
+    navigator.globalization.getDateNames(successCallback, errorCallback, options);
+    
+
+### Описание
+
+Возвращает массив имен для `successCallback` с `properties` объект в качестве параметра. Этот объект содержит `value` собственности с `Array` из `String` значения. Имена функций массива, начиная с либо в первый месяц, в год или в первый день недели, в зависимости от выбранного варианта.
+
+Если есть ошибка получения имена, а затем `errorCallback` выполняет с `GlobalizationError` объект в качестве параметра. Ожидаемый код ошибки`GlobalizationError.UNKNOWN_ERROR`.
+
+`options`Параметр является необязательным, и его значения по умолчанию являются:
+
+    {type:'wide', item:'months'}
+    
+
+Значение `options.type` может быть `narrow` или`wide`.
+
+Значение `options.item` может быть `months` или`days`.
+
+### Поддерживаемые платформы
+
+*   Amazon Fire ОС
+*   Android
+*   BlackBerry 10
+*   Firefox OS
+*   iOS
+*   Windows Phone 8
+
+### Пример
+
+Когда браузер настроен `en_US` языка, в этом примере отображается ряд двенадцати всплывающих диалоговых окон, один в месяц, с текстом, похож на `month: January` :
+
+    navigator.globalization.getDateNames(
+        function (names) {
+            for (var i = 0; i < names.value.length; i++) {
+                alert('month: ' + names.value[i] + '\n');
+            }
+        },
+        function () { alert('Error getting names\n'); },
+        { type: 'wide', item: 'months' }
+    );
+    
+
+### Firefox OS причуды
+
+*   `options.type`поддерживает `genitive` значения, важные для некоторых языков
+
+## navigator.globalization.getDatePattern
+
+Возвращает строку шаблона для форматирования и разбора даты согласно предпочтениям пользователя клиента.
+
+    navigator.globalization.getDatePattern(successCallback, errorCallback, options);
+    
+
+### Описание
+
+Возвращает шаблон для `successCallback` . Объект, переданный в качестве параметра содержит следующие свойства:
+
+*   **шаблон**: Дата и время шаблон для форматирования и разбора дат. Шаблоны следуют [технического стандарта Unicode #35][1]. *(Строка)*
+
+*   **Часовой пояс**: сокращенное название часового пояса на клиентском компьютере. *(Строка)*
+
+*   **utc_offset**: текущий разница в секундах между часовой пояс и время клиента. *(Число)*
+
+*   **dst_offset**: текущее смещение в летнее время в секундах между клиента не летнее часовой пояс и летнее клиента сохранение в часовой пояс. *(Число)*
+
+Если есть ошибка получения шаблон, `errorCallback` выполняет с `GlobalizationError` объект в качестве параметра. Ожидаемый код ошибки`GlobalizationError.PATTERN_ERROR`.
+
+`options`Параметр является необязательным и по умолчанию имеет следующие значения:
+
+    {formatLength: «короткая», селектор: «Дата и время»}
+    
+
+`options.formatLength`Может быть `short` , `medium` , `long` , или `full` . `options.selector`Может быть `date` , `time` или`date and
+time`.
+
+### Поддерживаемые платформы
+
+*   Amazon Fire ОС
+*   Android
+*   BlackBerry 10
+*   iOS
+*   Windows Phone 8
+
+### Пример
+
+Когда браузер настроен `en_US` языка, этот пример отображает всплывающее диалоговое окно с текстом, такие как `pattern: M/d/yyyy h:mm a` :
+
+    function checkDatePattern() {
+        navigator.globalization.getDatePattern(
+            function (date) { alert('pattern: ' + date.pattern + '\n'); },
+            function () { alert('Error getting pattern\n'); },
+            { formatLength: 'short', selector: 'date and time' }
+        );
+    }
+    
+
+### Windows Phone 8 причуды
+
+*   `formatLength`Поддерживает только `short` и `full` значения.
+
+*   `pattern`Для `date and time` модель возвращает только полное datetime формат.
+
+*   `timezone`Возвращает имя зоны полный рабочий день.
+
+*   `dst_offset`Свойство не поддерживается, и всегда возвращает нуль.
+
+## navigator.globalization.getFirstDayOfWeek
+
+Возвращает первый день недели согласно календаря предпочтения пользователя и клиента.
+
+    navigator.globalization.getFirstDayOfWeek(successCallback, errorCallback);
+    
+
+### Описание
+
+Дни недели нумеруются, начиная с 1, где 1 считается воскресенье. Возвращает день в `successCallback` с `properties` объект в качестве параметра. Этот объект должен иметь `value` собственности с `Number` значение.
+
+Если есть ошибка получения шаблона, то свойство `errorCallback` выполняет с `GlobalizationError` объект в качестве параметра. Ожидаемый код ошибки`GlobalizationError.UNKNOWN_ERROR`.
+
+### Поддерживаемые платформы
+
+*   Amazon Fire ОС
+*   Android
+*   BlackBerry 10
+*   Firefox OS
+*   iOS
+*   Windows Phone 8
+
+### Пример
+
+Когда браузер настроен `en_US` языка, это выводит всплывающее диалоговое окно с текстом похож на`day: 1`.
+
+    navigator.globalization.getFirstDayOfWeek(
+        function (day) {alert('day: ' + day.value + '\n');},
+        function () {alert('Error getting day\n');}
+    );
+    
+
+## navigator.globalization.getNumberPattern
+
+Возвращает строку шаблона для форматирования и разбора номера согласно предпочтениям пользователя клиента.
+
+    navigator.globalization.getNumberPattern(successCallback, errorCallback, options);
+    
+
+### Описание
+
+Возвращает шаблон для `successCallback` с `properties` объект в качестве параметра. Этот объект содержит следующие свойства:
+
+*   **шаблон**: шаблон номера для форматирования и синтаксического анализа чисел. Шаблоны следуют [технического стандарта Unicode #35][1]. *(Строка)*
+
+*   **символ**: символ для использования при форматировании и синтаксическом разборе, например символ валюты и процентов. *(Строка)*
+
+*   **фракция**: количество дробных разрядов для использования при синтаксического анализа и форматирования чисел. *(Число)*
+
+*   **округления**: округление увеличивается для использования при синтаксического анализа и форматирования. *(Число)*
+
+*   **положительные**: символ для положительных чисел, когда синтаксический анализ и форматирование. *(Строка)*
+
+*   **отрицательные**: символ для отрицательных чисел, когда синтаксический анализ и форматирование. *(Строка)*
+
+*   **десятичное**: десятичный символ использовать для синтаксического анализа и форматирования. *(Строка)*
+
+*   **Группировка**: группировка символ использовать для синтаксического анализа и форматирования. *(Строка)*
+
+Если есть ошибка получения шаблона, то свойство `errorCallback` выполняет с `GlobalizationError` объект в качестве параметра. Ожидаемый код ошибки`GlobalizationError.PATTERN_ERROR`.
+
+`options`Параметр является необязательным, и значения по умолчанию являются:
+
+    {Тип: «десятичных»}
+    
+
+`options.type`Может быть `decimal` , `percent` , или`currency`.
+
+### Поддерживаемые платформы
+
+*   Amazon Fire ОС
+*   Android
+*   BlackBerry 10
+*   iOS
+*   Windows Phone 8
+
+### Пример
+
+Когда браузер настроен `en_US` языка, это должно отображать всплывающее диалоговое окно с текстом аналогичные результаты, которые следуют:
+
+    navigator.globalization.getNumberPattern(
+        function (pattern) {alert('pattern: '  + pattern.pattern  + '\n' +
+                                  'symbol: '   + pattern.symbol   + '\n' +
+                                  'fraction: ' + pattern.fraction + '\n' +
+                                  'rounding: ' + pattern.rounding + '\n' +
+                                  'positive: ' + pattern.positive + '\n' +
+                                  'negative: ' + pattern.negative + '\n' +
+                                  'decimal: '  + pattern.decimal  + '\n' +
+                                  'grouping: ' + pattern.grouping);},
+        function () {alert('Error getting pattern\n');},
+        {type:'decimal'}
+    );
+    
+
+Результаты:
+
+    pattern: #,##0.###
+    symbol: .
+    fraction: 0
+    rounding: 0
+    positive:
+    negative: -
+    decimal: .
+    grouping: ,
+    
+
+### Windows Phone 8 причуды
+
+*   `pattern`Свойство не поддерживается и retuens является пустой строкой.
+
+*   `fraction`Свойство не поддерживается, и возвращает ноль.
+
+## navigator.globalization.isDayLightSavingsTime
+
+Указывает, является ли летнее время в силе для заданной даты, с использованием клиента часовой пояс и календаря.
+
+    navigator.globalization.isDayLightSavingsTime(date, successCallback, errorCallback);
+    
+
+### Описание
+
+Указывает, является ли или не летнее время в силе до `successCallback` с `properties` объект в качестве параметра. Этот объект должен иметь `dst` свойство с `Boolean` значение. A `true` значение указывает, что летнее время в силе для заданной даты и `false` показывает, что это не.
+
+Входящий параметр `date` должен иметь тип`Date`.
+
+Если есть ошибка чтения даты, то `errorCallback` выполняет. Ожидаемый код ошибки`GlobalizationError.UNKNOWN_ERROR`.
+
+### Поддерживаемые платформы
+
+*   Amazon Fire ОС
+*   Android
+*   BlackBerry 10
+*   Firefox OS
+*   iOS
+*   Windows Phone 8
+
+### Пример
+
+В течение лета и если браузер настроен на часовой пояс, летнее время с поддержкой, это должно отображать всплывающее диалоговое окно с текстом похож на `dst: true` :
+
+    navigator.globalization.isDayLightSavingsTime(
+        new Date(),
+        function (date) {alert('dst: ' + date.dst + '\n');},
+        function () {alert('Error getting names\n');}
+    );
+    
+
+## navigator.globalization.numberToString
+
+Возвращает число, которое форматируется как строка согласно предпочтениям пользователя клиента.
+
+    navigator.globalization.numberToString(number, successCallback, errorCallback, options);
+    
+
+### Описание
+
+Возвращает форматируемую строку номер для `successCallback` с `properties` объект в качестве параметра. Этот объект должен иметь `value` собственности с `String` значение.
+
+Если есть ошибка форматирования числа, то `errorCallback` выполняет с `GlobalizationError` объект в качестве параметра. Ожидаемый код ошибки`GlobalizationError.FORMATTING_ERROR`.
+
+`options`Параметр является необязательным, и его значения по умолчанию являются:
+
+    {Тип: «десятичных»}
+    
+
+`options.type` может быть 'decimal', 'percent' или 'currency'.
+
+### Поддерживаемые платформы
+
+*   Amazon Fire ОС
+*   Android
+*   BlackBerry 10
+*   iOS
+*   Windows Phone 8
+
+### Пример
+
+Когда браузер настроен `en_US` языка, это выводит всплывающее диалоговое окно с текстом, похож на `number: 3.142` :
+
+    navigator.globalization.numberToString(
+        3.1415926,
+        function (number) {alert('number: ' + number.value + '\n');},
+        function () {alert('Error getting number\n');},
+        {type:'decimal'}
+    );
+    
+
+## navigator.globalization.stringToDate
+
+Анализирует дату форматированы в виде строки, по словам клиента предпочтения пользователя и календарь с помощью часовой пояс клиента и возвращает соответствующий объект date.
+
+    navigator.globalization.stringToDate(dateString, successCallback, errorCallback, options);
+    
+
+### Описание
+
+Возвращает дату в успех обратного вызова с `properties` объект в качестве параметра. Этот объект должен иметь следующие свойства:
+
+*   **год**: год четыре цифры. *(Число)*
+
+*   **месяц**: на месяц от (0-11). *(Число)*
+
+*   **день**: день с (1-31). *(Число)*
+
+*   **час**: час (0-23). *(Число)*
+
+*   **минута**: минута (0-59). *(Число)*
+
+*   **второй**: второй от (0-59). *(Число)*
+
+*   **МС**: миллисекунд (от 0-999), не доступны на всех платформах. *(Число)*
+
+Входящий `dateString` параметр должен иметь тип`String`.
+
+`options`Параметр является необязательным и по умолчанию имеет следующие значения:
+
+    {formatLength: «короткая», селектор: «Дата и время»}
+    
+
+`options.formatLength`Может быть `short` , `medium` , `long` , или `full` . `options.selector`Может быть `date` , `time` или`date and
+time`.
+
+Если есть ошибка при разборе строки даты, то `errorCallback` выполняет с `GlobalizationError` объект в качестве параметра. Ожидаемый код ошибки`GlobalizationError.PARSING_ERROR`.
+
+### Поддерживаемые платформы
+
+*   Amazon Fire ОС
+*   Android
+*   BlackBerry 10
+*   Firefox OS
+*   iOS
+*   Windows Phone 8
+
+### Пример
+
+Когда браузер настроен `en_US` языка, это выводит всплывающее диалоговое окно с текстом, похож на `month:8 day:25 year:2012` . Обратите внимание, что целое число является один месяц меньше, чем строка, как целое число месяца представляет индекс массива.
+
+    navigator.globalization.stringToDate(
+        '9/25/2012',
+        function (date) {alert('month:' + date.month +
+                               ' day:'  + date.day   +
+                               ' year:' + date.year  + '\n');},
+        function () {alert('Error getting date\n');},
+        {selector: 'date'}
+    );
+    
+
+### Windows Phone 8 причуды
+
+*   `formatLength`Вариант поддерживает только `short` и `full` значения.
+
+## navigator.globalization.stringToNumber
+
+Анализирует число, которое форматируется как строка согласно предпочтениям пользователя клиента и возвращает соответствующий номер.
+
+    navigator.globalization.stringToNumber(string, successCallback, errorCallback, options);
+    
+
+### Описание
+
+Возвращает номер для `successCallback` с `properties` объект в качестве параметра. Этот объект должен иметь `value` свойство с `Number` значение.
+
+Если есть ошибка при разборе номер строки, а затем `errorCallback` выполняет с `GlobalizationError` объект в качестве параметра. Ожидаемый код ошибки`GlobalizationError.PARSING_ERROR`.
+
+`options`Параметр является необязательным и по умолчанию имеет следующие значения:
+
+    {Тип: «десятичных»}
+    
+
+`options.type`Может быть `decimal` , `percent` , или`currency`.
+
+### Поддерживаемые платформы
+
+*   Amazon Fire ОС
+*   Android
+*   BlackBerry 10
+*   iOS
+*   Windows Phone 8
+
+### Пример
+
+Когда браузер настроен `en_US` языка, это должно отображать всплывающее диалоговое окно с текстом, похож на `number: 1234.56` :
+
+    navigator.globalization.stringToNumber(
+        '1234.56',
+        function (number) {alert('number: ' + number.value + '\n');},
+        function () {alert('Error getting number\n');},
+        {type:'decimal'}
+    );
+    
+
+## GlobalizationError
+
+Объект, представляющий ошибку от глобализации API.
+
+### Свойства
+
+*   **код**: Один из следующих кодов, представляющих тип ошибки *(Число)* 
+    *   GlobalizationError.UNKNOWN_ERROR: 0
+    *   GlobalizationError.FORMATTING_ERROR: 1
+    *   GlobalizationError.PARSING_ERROR: 2
+    *   GlobalizationError.PATTERN_ERROR: 3
+*   **сообщение**: текстовое сообщение, которое включает в себя объяснение ошибки и/или детали *(String)*
+
+### Описание
+
+Этот объект создается и населенная Cordova и возвращается обратный вызов в случае ошибки.
+
+### Поддерживаемые платформы
+
+*   Amazon Fire ОС
+*   Android
+*   BlackBerry 10
+*   Firefox OS
+*   iOS
+
+### Пример
+
+Когда следующий ошибка обратного вызова выполняется, он отображает всплывающее диалоговое окно с текстом похож на `code: 3` и`message:`
+
+    function errorCallback(error) {
+        alert('code: ' + error.code + '\n' +
+              'message: ' + error.message + '\n');
+    };
\ No newline at end of file
diff --git a/doc/zh/index.md b/doc/zh/index.md
index 990ea25..9fd6d34 100644
--- a/doc/zh/index.md
+++ b/doc/zh/index.md
@@ -62,6 +62,8 @@
 
 *   亞馬遜火 OS
 *   Android 系統
+*   黑莓 10
+*   火狐瀏覽器的作業系統
 *   iOS
 *   Windows Phone 8
 
@@ -101,6 +103,8 @@
 
 *   亞馬遜火 OS
 *   Android 系統
+*   黑莓 10
+*   火狐瀏覽器的作業系統
 *   iOS
 *   Windows Phone 8
 
@@ -150,6 +154,8 @@
 
 *   亞馬遜火 OS
 *   Android 系統
+*   黑莓 10
+*   火狐瀏覽器的作業系統
 *   iOS
 *   Windows Phone 8
 
@@ -169,6 +175,11 @@
 
 *   `formatLength`選項僅支援 `short` 和 `full` 的值。
 
+### 火狐瀏覽器作業系統的怪癖
+
+*   `formatLength`不區分 `long` 和`full` 
+*   顯示日期的只有一個方法 (沒有 `long` 或 `full` 版本)
+
 ## navigator.globalization.getCurrencyPattern
 
 返回一個模式字串格式化和分析根據用戶端的使用者首選項和 ISO 4217 貨幣代碼貨幣值。
@@ -176,19 +187,19 @@
      navigator.globalization.getCurrencyPattern(currencyCode, successCallback, errorCallback);
     
 
-### 說明
+### 描述
 
 返回到模式 `successCallback` 與 `properties` 物件作為參數。該物件應包含以下屬性:
 
-*   **模式**: 要格式化和分析貨幣值的貨幣模式。 模式按照[Unicode 技術標準 #35][1]。 *(字串)*
+*   **模式**: 要格式化和解析貨幣值的貨幣模式。 模式按照[Unicode 技術標準 #35][1]。 *(字串)*
 
 *   **代碼**: 模式的 ISO 4217 貨幣代碼。*(字串)*
 
 *   **分數**: 小數位數解析和貨幣的格式時要使用的數量。*(人數)*
 
-*   **舍**: 舍遞增時分析和格式設置使用。*(人數)*
+*   **舍入**: 舍入增量解析和設置格式時使用。*(人數)*
 
-*   **十進位**: 小數點符號用於分析和格式設置。*(字串)*
+*   **十進位**: 用於分析和格式設置的小數點符號。*(字串)*
 
 *   **分組**: 分組符號用於分析和格式設置。*(字串)*
 
@@ -202,6 +213,7 @@
 
 *   亞馬遜火 OS
 *   Android 系統
+*   黑莓 10
 *   iOS
 
 ### 示例
@@ -239,7 +251,7 @@
     navigator.globalization.getDateNames(successCallback, errorCallback, options);
     
 
-### 說明
+### 描述
 
 返回的陣列的名稱為 `successCallback` 與 `properties` 物件作為參數。 該物件包含 `value` 屬性與 `Array` 的 `String` 的值。 從任一開始一年或一周內,根據所選的選項的第一天中的第一個月的陣列功能名稱。
 
@@ -257,7 +269,9 @@
 ### 支援的平臺
 
 *   亞馬遜火 OS
-*   Android 系統
+*   安卓系統
+*   黑莓 10
+*   火狐瀏覽器的作業系統
 *   iOS
 *   Windows Phone 8
 
@@ -276,6 +290,10 @@
     );
     
 
+### 火狐瀏覽器作業系統的怪癖
+
+*   `options.type`支援 `genitive` 的價值,對於某些語言重要
+
 ## navigator.globalization.getDatePattern
 
 返回一個模式字串格式化和解析日期根據用戶端的使用者首選項。
@@ -283,7 +301,7 @@
     navigator.globalization.getDatePattern(successCallback, errorCallback, options);
     
 
-### 說明
+### 描述
 
 返回到模式 `successCallback` 。作為一個參數傳遞的物件包含以下屬性:
 
@@ -291,9 +309,9 @@
 
 *   **時區**: 在用戶端上的時區的縮寫的名稱。*(字串)*
 
-*   **utc_offset**: 用戶端的時區和協調通用時間當前區別秒。*(人數)*
+*   **utc_offset**: 用戶端的時區和協調通用時間以秒為單位的當前區別。*(人數)*
 
-*   **dst_offset**: 在用戶端的夏之間的秒數的當前夏令時偏移量的時區和用戶端的夏時制儲蓄的時區。*(人數)*
+*   **dst_offset**: 在用戶端的非夏令時之間的秒數的當前日光節約時間偏移量的時區和用戶端的夏時制節約的時區的時間。*(人數)*
 
 如果您獲取該模式,錯誤 `errorCallback` 執行與 `GlobalizationError` 物件作為參數。 錯誤的期望的代碼`GlobalizationError.PATTERN_ERROR`.
 
@@ -309,6 +327,7 @@
 
 *   亞馬遜火 OS
 *   Android 系統
+*   黑莓 10
 *   iOS
 *   Windows Phone 8
 
@@ -329,11 +348,11 @@
 
 *   `formatLength`僅支援 `short` 和 `full` 的值。
 
-*   `pattern`的 `date and time` 模式返回只完整的日期時間格式。
+*   `pattern`為 `date and time` 模式返回只完整的日期時間格式。
 
 *   `timezone`返回全時區名稱。
 
-*   `dst_offset`屬性不受支援,並且總是返回零。
+*   `dst_offset`不支援屬性,並始終返回零。
 
 ## navigator.globalization.getFirstDayOfWeek
 
@@ -342,7 +361,7 @@
     navigator.globalization.getFirstDayOfWeek(successCallback, errorCallback);
     
 
-### 說明
+### 描述
 
 周中天的編號 1,從開始位置 1 假定是星期日。 返回到天 `successCallback` 與 `properties` 物件作為參數。 物件應具有 `value` 屬性與 `Number` 的值。
 
@@ -352,6 +371,8 @@
 
 *   亞馬遜火 OS
 *   Android 系統
+*   黑莓 10
+*   火狐瀏覽器的作業系統
 *   iOS
 *   Windows Phone 8
 
@@ -372,23 +393,23 @@
     navigator.globalization.getNumberPattern(successCallback, errorCallback, options);
     
 
-### 說明
+### 描述
 
 返回到模式 `successCallback` 與 `properties` 物件作為參數。該物件包含以下屬性:
 
-*   **模式**: 要格式化和分析數位的數位模式。 模式按照[Unicode 技術標準 #35][1]。 *(字串)*
+*   **模式**: 要格式化和解析數位的數位模式。 模式按照[Unicode 技術標準 #35][1]。 *(字串)*
 
-*   **符號**: 符號格式設置和分析過程中,如 %或貨幣符號時使用。*(字串)*
+*   **符號**: 符號格式和解析,如 %或貨幣符號時使用。*(字串)*
 
 *   **分數**: 小數位數解析和設置數位格式時要使用的數量。*(人數)*
 
-*   **舍**: 舍遞增時分析和格式設置使用。*(人數)*
+*   **舍入**: 舍入增量解析和設置格式時使用。*(人數)*
 
 *   **積極**: 積極數位分析和格式時要使用的符號。*(字串)*
 
 *   **負面**: 要為負數時分析和格式設置使用的符號。*(字串)*
 
-*   **十進位**: 小數點符號用於分析和格式設置。*(字串)*
+*   **十進位**: 用於分析和格式設置的小數點符號。*(字串)*
 
 *   **分組**: 分組符號用於分析和格式設置。*(字串)*
 
@@ -405,6 +426,7 @@
 
 *   亞馬遜火 OS
 *   Android 系統
+*   黑莓 10
 *   iOS
 *   Windows Phone 8
 
@@ -451,7 +473,7 @@
     navigator.globalization.isDayLightSavingsTime(date, successCallback, errorCallback);
     
 
-### 說明
+### 描述
 
 指示是否夏令時生效的是 `successCallback` 與 `properties` 物件作為參數。 物件應具有 `dst` 屬性與 `Boolean` 的值。 A `true` 值指示夏令時實際上是對給定的日期,和 `false` 指示它不是。
 
@@ -462,7 +484,9 @@
 ### 支援的平臺
 
 *   亞馬遜火 OS
-*   Android 系統
+*   安卓系統
+*   黑莓 10
+*   火狐瀏覽器的作業系統
 *   iOS
 *   Windows Phone 8
 
@@ -484,7 +508,7 @@
     navigator.globalization.numberToString(number, successCallback, errorCallback, options);
     
 
-### 說明
+### 描述
 
 返回到帶格式的數位字串 `successCallback` 與 `properties` 物件作為參數。 物件應具有 `value` 屬性與 `String` 的值。
 
@@ -501,6 +525,7 @@
 
 *   亞馬遜火 OS
 *   Android 系統
+*   黑莓 10
 *   iOS
 *   Windows Phone 8
 
@@ -523,23 +548,23 @@
     navigator.globalization.stringToDate(dateString, successCallback, errorCallback, options);
     
 
-### 說明
+### 描述
 
 返回的日期與成功回檔到 `properties` 物件作為參數。該物件應具有以下屬性:
 
-*   **一年**: 將四個數字的年份。*(人數)*
+*   **年**: 將四個數字的年份。*(人數)*
 
 *   **月**: 從 (0-11) 月。*(人數)*
 
 *   **一天**: 從 (1-31) 天。*(人數)*
 
-*   **小時**: 從 (0-23) 小時。*(人數)*
+*   **小時**: 從 (0-23) 小時。*(人數)*
 
-*   **分鐘**: 從 (0-59) 分鐘。*(人數)*
+*   **分鐘**: 從 (0-59) 分鐘。*(人數)*
 
 *   **第二**: 的第二位 (0-59)。*(人數)*
 
-*   **毫秒**: 的毫秒數 (從 0-999),在所有平臺上不可用。*(人數)*
+*   **毫秒**: 的毫秒數 (從 0-999),在所有的平臺上不可用。*(人數)*
 
 入站 `dateString` 參數的類型應為`String`.
 
@@ -557,6 +582,8 @@
 
 *   亞馬遜火 OS
 *   Android 系統
+*   黑莓 10
+*   火狐瀏覽器的作業系統
 *   iOS
 *   Windows Phone 8
 
@@ -585,7 +612,7 @@
     navigator.globalization.stringToNumber(string, successCallback, errorCallback, options);
     
 
-### 說明
+### 描述
 
 返回到數 `successCallback` 與 `properties` 物件作為參數。物件應具有 `value` 屬性與 `Number` 的值。
 
@@ -602,6 +629,7 @@
 
 *   亞馬遜火 OS
 *   Android 系統
+*   黑莓 10
 *   iOS
 *   Windows Phone 8
 
@@ -630,14 +658,16 @@
     *   GlobalizationError.PATTERN_ERROR: 3
 *   **消息**: 一條文本消息,包括錯誤的解釋,和/或詳細說明*(字串)*
 
-### 說明
+### 描述
 
 此物件創建和填充的科爾多瓦,並返回到出現錯誤時的回檔。
 
 ### 支援的平臺
 
 *   亞馬遜火 OS
-*   Android 系統
+*   安卓系統
+*   黑莓 10
+*   火狐瀏覽器的作業系統
 *   iOS
 
 ### 示例
diff --git a/plugin.xml b/plugin.xml
index c120c1d..1232c3b 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -20,7 +20,7 @@
 
 <plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
            id="org.apache.cordova.globalization"
-      version="0.2.9-dev">
+      version="0.3.1-dev">
     <name>Globalization</name>
     <description>Cordova Globalization Plugin</description>
     <license>Apache 2.0</license>
@@ -70,6 +70,16 @@
        </js-module>
    </platform>
 
+    <!-- firefoxos -->
+    <platform name="firefoxos">
+        <js-module src="src/firefoxos/GlobalizationProxy.js" name="GlobalizationProxy">
+            <runs />
+        </js-module>
+		<asset src="www/firefoxos/locales" target="locales" />
+		<asset src="www/firefoxos/l10n.js" target="js/l10n.js" />
+		<asset src="www/firefoxos/l10n_date.js" target="js/l10n_date.js" />
+    </platform>  
+
    <!-- ios -->
    <platform name="ios">    
         <config-file target="config.xml" parent="/*">
@@ -109,4 +119,11 @@
             <runs/>
         </js-module>
     </platform>
+
+    <!-- blackberry10 -->
+    <platform name="blackberry10">
+        <source-file src="src/blackberry10/index.js" target-dir="Globalization" />
+        <lib-file src="src/blackberry10/native/device/libGlobalization.so" arch="device" />
+        <lib-file src="src/blackberry10/native/simulator/libGlobalization.so" arch="simulator" />
+    </platform>
 </plugin>
diff --git a/src/blackberry10/index.js b/src/blackberry10/index.js
new file mode 100644
index 0000000..7d56740
--- /dev/null
+++ b/src/blackberry10/index.js
@@ -0,0 +1,634 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+var g11n;
+
+var globalization = {
+    /**
+    * Returns the string identifier for the client's current language.
+    * It returns the language identifier string to the successCB callback with a
+    * properties object as a parameter. If there is an error getting the language,
+    * then the errorCB callback is invoked.
+    *
+    * @param {Function} successCB
+    * @param {Function} errorCB
+    *
+    * @return Object.value {String}: The language identifier
+    *
+    * @error GlobalizationError.UNKNOWN_ERROR
+    *
+    * Example
+    *    globalization.getPreferredLanguage(function (language) {alert('language:' + language.value + '\n');},
+    *                                function () {});
+    */
+    getPreferredLanguage:function(successCB, failureCB, args, env) {
+        var result = new PluginResult(args, env),
+            response = g11n.getInstance().InvokeMethod("getPreferredLanguage", args),
+            data = JSON.parse(response);
+        console.log("getPreferredLanguage: " + JSON.stringify(response));
+
+        if (data.error !== undefined) {
+            result.error({
+                code: data.error.code,
+                message: data.error.message
+            });
+        } else {
+            result.ok({
+                value: data.result
+            });
+        }
+    },
+
+    /**
+    * Returns the string identifier for the client's current locale setting.
+    * It returns the locale identifier string to the successCB callback with a
+    * properties object as a parameter. If there is an error getting the locale,
+    * then the errorCB callback is invoked.
+    *
+    * @param {Function} successCB
+    * @param {Function} errorCB
+    *
+    * @return Object.value {String}: The locale identifier
+    *
+    * @error GlobalizationError.UNKNOWN_ERROR
+    *
+    * Example
+    *    globalization.getLocaleName(function (locale) {alert('locale:' + locale.value + '\n');},
+    *                                function () {});
+    */
+    getLocaleName:function(successCB, failureCB, args, env) {
+        var result = new PluginResult(args, env),
+            response = g11n.getInstance().InvokeMethod("getLocaleName", args),
+            data = JSON.parse(response);
+        console.log("getLocaleName: " + JSON.stringify(response));
+
+        if (data.error !== undefined) {
+            result.error({
+                code: data.error.code,
+                message: data.error.message
+            });
+        } else {
+            result.ok({
+                value: data.result
+            });
+        }
+    },
+
+
+    /**
+    * Returns a date formatted as a string according to the client's user preferences and
+    * calendar using the time zone of the client. It returns the formatted date string to the
+    * successCB callback with a properties object as a parameter. If there is an error
+    * formatting the date, then the errorCB callback is invoked.
+    *
+    * The defaults are: formatLenght="short" and selector="date and time"
+    *
+    * @param {Date} date
+    * @param {Function} successCB
+    * @param {Function} errorCB
+    * @param {Object} options {optional}
+    *            formatLength {String}: 'short', 'medium', 'long', or 'full'
+    *            selector {String}: 'date', 'time', or 'date and time'
+    *
+    * @return Object.value {String}: The localized date string
+    *
+    * @error GlobalizationError.FORMATTING_ERROR
+    *
+    * Example
+    *    globalization.dateToString(new Date(),
+    *                function (date) {alert('date:' + date.value + '\n');},
+    *                function (errorCode) {alert(errorCode);},
+    *                {formatLength:'short'});
+    */
+    dateToString:function(successCB, failureCB, args, env) {
+        var result = new PluginResult(args, env),
+            response = g11n.getInstance().InvokeMethod("dateToString", args),
+            data = JSON.parse(response);
+        console.log("dateToString: " + JSON.stringify(response));
+
+        if (data.error !== undefined) {
+            result.error({
+                code: data.error.code,
+                message: data.error.message
+            });
+        } else {
+            result.ok({
+                value: data.result
+            });
+        }
+    },
+
+
+    /**
+    * Parses a date formatted as a string according to the client's user
+    * preferences and calendar using the time zone of the client and returns
+    * the corresponding date object. It returns the date to the successCB
+    * callback with a properties object as a parameter. If there is an error
+    * parsing the date string, then the errorCB callback is invoked.
+    *
+    * The defaults are: formatLength="short" and selector="date and time"
+    *
+    * @param {String} dateString
+    * @param {Function} successCB
+    * @param {Function} errorCB
+    * @param {Object} options {optional}
+    *            formatLength {String}: 'short', 'medium', 'long', or 'full'
+    *            selector {String}: 'date', 'time', or 'date and time'
+    *
+    * @return    Object.year {Number}: The four digit year
+    *            Object.month {Number}: The month from (0 - 11)
+    *            Object.day {Number}: The day from (1 - 31)
+    *            Object.hour {Number}: The hour from (0 - 23)
+    *            Object.minute {Number}: The minute from (0 - 59)
+    *            Object.second {Number}: The second from (0 - 59)
+    *            Object.millisecond {Number}: The milliseconds (from 0 - 999),
+    *                                        not available on all platforms
+    *
+    * @error GlobalizationError.PARSING_ERROR
+    *
+    * Example
+    *    globalization.stringToDate('4/11/2011',
+    *                function (date) { alert('Month:' + date.month + '\n' +
+    *                    'Day:' + date.day + '\n' +
+    *                    'Year:' + date.year + '\n');},
+    *                function (errorCode) {alert(errorCode);},
+    *                {selector:'date'});
+    */
+    stringToDate:function(successCB, failureCB, args, env) {
+        var result = new PluginResult(args, env),
+            response = g11n.getInstance().InvokeMethod("stringToDate", args),
+            data = JSON.parse(response);
+        console.log("stringToDate: " + JSON.stringify(response));
+
+        if (data.error !== undefined) {
+            result.error({
+                code: data.error.code,
+                message: data.error.message
+            });
+        } else {
+            result.ok({
+                year: data.result.year,
+                month: data.result.month,
+                day: data.result.day,
+                hour: data.result.hour,
+                minute: data.result.minute,
+                second: data.result.second,
+                millisecond: data.result.millisecond
+            });
+        }
+    },
+
+
+    /**
+    * Returns a pattern string for formatting and parsing dates according to the client's
+    * user preferences. It returns the pattern to the successCB callback with a
+    * properties object as a parameter. If there is an error obtaining the pattern,
+    * then the errorCB callback is invoked.
+    *
+    * The defaults are: formatLength="short" and selector="date and time"
+    *
+    * @param {Function} successCB
+    * @param {Function} errorCB
+    * @param {Object} options {optional}
+    *            formatLength {String}: 'short', 'medium', 'long', or 'full'
+    *            selector {String}: 'date', 'time', or 'date and time'
+    *
+    * @return    Object.pattern {String}: The date and time pattern for formatting and parsing dates.
+    *                                    The patterns follow Unicode Technical Standard #35
+    *                                    http://unicode.org/reports/tr35/tr35-4.html
+    *            Object.timezone {String}: The abbreviated name of the time zone on the client
+    *            Object.utc_offset {Number}: The current difference in seconds between the client's
+    *                                        time zone and coordinated universal time.
+    *            Object.dst_offset {Number}: The current daylight saving time offset in seconds
+    *                                        between the client's non-daylight saving's time zone
+    *                                        and the client's daylight saving's time zone.
+    *
+    * @error GlobalizationError.PATTERN_ERROR
+    *
+    * Example
+    *    globalization.getDatePattern(
+    *                function (date) {alert('pattern:' + date.pattern + '\n');},
+    *                function () {},
+    *                {formatLength:'short'});
+    */
+    getDatePattern:function(successCB, failureCB, args, env) {
+        var result = new PluginResult(args, env),
+            response = g11n.getInstance().InvokeMethod("getDatePattern", args),
+            data = JSON.parse(response);
+        console.log("getDatePattern: " + JSON.stringify(response));
+
+        if (data.error !== undefined) {
+            result.error({
+                code: data.error.code,
+                message: data.error.message
+            });
+        } else {
+            result.ok({
+                pattern: data.result.pattern,
+                timezone: data.result.timezone,
+                utc_offset: data.result.utc_offset,
+                dst_offset: data.result.dst_offset
+            });
+        }
+    },
+
+
+    /**
+    * Returns an array of either the names of the months or days of the week
+    * according to the client's user preferences and calendar. It returns the array of names to the
+    * successCB callback with a properties object as a parameter. If there is an error obtaining the
+    * names, then the errorCB callback is invoked.
+    *
+    * The defaults are: type="wide" and item="months"
+    *
+    * @param {Function} successCB
+    * @param {Function} errorCB
+    * @param {Object} options {optional}
+    *            type {String}: 'narrow' or 'wide'
+    *            item {String}: 'months', or 'days'
+    *
+    * @return Object.value {Array{String}}: The array of names starting from either
+    *                                        the first month in the year or the
+    *                                        first day of the week.
+    * @error GlobalizationError.UNKNOWN_ERROR
+    *
+    * Example
+    *    globalization.getDateNames(function (names) {
+    *        for(var i = 0; i < names.value.length; i++) {
+    *            alert('Month:' + names.value[i] + '\n');}},
+    *        function () {});
+    */
+    getDateNames:function(successCB, failureCB, args, env) {
+        var result = new PluginResult(args, env),
+            response = g11n.getInstance().InvokeMethod("getDateNames", args),
+            data = JSON.parse(response);
+        console.log("getDateNames: " + JSON.stringify(response));
+
+        if (data.error !== undefined) {
+            result.error({
+                code: data.error.code,
+                message: data.error.message
+            });
+        } else {
+            result.ok({
+                value: data.result
+            });
+        }
+    },
+
+    /**
+    * Returns whether daylight savings time is in effect for a given date using the client's
+    * time zone and calendar. It returns whether or not daylight savings time is in effect
+    * to the successCB callback with a properties object as a parameter. If there is an error
+    * reading the date, then the errorCB callback is invoked.
+    *
+    * @param {Date} date
+    * @param {Function} successCB
+    * @param {Function} errorCB
+    *
+    * @return Object.dst {Boolean}: The value "true" indicates that daylight savings time is
+    *                                in effect for the given date and "false" indicate that it is not.
+    *
+    * @error GlobalizationError.UNKNOWN_ERROR
+    *
+    * Example
+    *    globalization.isDayLightSavingsTime(new Date(),
+    *                function (date) {alert('dst:' + date.dst + '\n');}
+    *                function () {});
+    */
+    isDayLightSavingsTime:function(successCB, failureCB, args, env) {
+        var result = new PluginResult(args, env),
+            response = g11n.getInstance().InvokeMethod("isDayLightSavingsTime", args),
+            data = JSON.parse(response);
+        console.log("isDayLightSavingsTime: " + JSON.stringify(response));
+
+        if (data.error !== undefined) {
+            result.error({
+                code: data.error.code,
+                message: data.error.message
+            });
+        } else {
+            result.ok({
+                dst: data.result
+            });
+        }
+    },
+
+    /**
+    * Returns the first day of the week according to the client's user preferences and calendar.
+    * The days of the week are numbered starting from 1 where 1 is considered to be Sunday.
+    * It returns the day to the successCB callback with a properties object as a parameter.
+    * If there is an error obtaining the pattern, then the errorCB callback is invoked.
+    *
+    * @param {Function} successCB
+    * @param {Function} errorCB
+    *
+    * @return Object.value {Number}: The number of the first day of the week.
+    *
+    * @error GlobalizationError.UNKNOWN_ERROR
+    *
+    * Example
+    *    globalization.getFirstDayOfWeek(function (day)
+    *                { alert('Day:' + day.value + '\n');},
+    *                function () {});
+    */
+    getFirstDayOfWeek:function(successCB, failureCB, args, env) {
+        var result = new PluginResult(args, env),
+            response = g11n.getInstance().InvokeMethod("getFirstDayOfWeek", args),
+            data = JSON.parse(response);
+        console.log("getFirstDayOfWeek: " + JSON.stringify(response));
+
+        if (data.error !== undefined) {
+            result.error({
+                code: data.error.code,
+                message: data.error.message
+            });
+        } else {
+            result.ok({
+                value: data.result
+            });
+        }
+    },
+
+
+    /**
+    * Returns a number formatted as a string according to the client's user preferences.
+    * It returns the formatted number string to the successCB callback with a properties object as a
+    * parameter. If there is an error formatting the number, then the errorCB callback is invoked.
+    *
+    * The defaults are: type="decimal"
+    *
+    * @param {Number} number
+    * @param {Function} successCB
+    * @param {Function} errorCB
+    * @param {Object} options {optional}
+    *            type {String}: 'decimal', "percent", or 'currency'
+    *
+    * @return Object.value {String}: The formatted number string.
+    *
+    * @error GlobalizationError.FORMATTING_ERROR
+    *
+    * Example
+    *    globalization.numberToString(3.25,
+    *                function (number) {alert('number:' + number.value + '\n');},
+    *                function () {},
+    *                {type:'decimal'});
+    */
+    numberToString:function(successCB, failureCB, args, env) {
+        var result = new PluginResult(args, env),
+            response = g11n.getInstance().InvokeMethod("numberToString", args),
+            data = JSON.parse(response);
+        console.log("numberToString: " + JSON.stringify(response));
+
+        if (data.error !== undefined) {
+            result.error({
+                code: data.error.code,
+                message: data.error.message
+            });
+        } else {
+            result.ok({
+                value: data.result
+            });
+        }
+    },
+
+    /**
+    * Parses a number formatted as a string according to the client's user preferences and
+    * returns the corresponding number. It returns the number to the successCB callback with a
+    * properties object as a parameter. If there is an error parsing the number string, then
+    * the errorCB callback is invoked.
+    *
+    * The defaults are: type="decimal"
+    *
+    * @param {String} numberString
+    * @param {Function} successCB
+    * @param {Function} errorCB
+    * @param {Object} options {optional}
+    *            type {String}: 'decimal', "percent", or 'currency'
+    *
+    * @return Object.value {Number}: The parsed number.
+    *
+    * @error GlobalizationError.PARSING_ERROR
+    *
+    * Example
+    *    globalization.stringToNumber('1234.56',
+    *                function (number) {alert('Number:' + number.value + '\n');},
+    *                function () { alert('Error parsing number');});
+    */
+    stringToNumber:function(successCB, failureCB, args, env) {
+        var result = new PluginResult(args, env),
+            response = g11n.getInstance().InvokeMethod("stringToNumber", args),
+            data = JSON.parse(response);
+        console.log("stringToNumber: " + JSON.stringify(response));
+
+        if (data.error !== undefined) {
+            result.error({
+                code: data.error.code,
+                message: data.error.message
+            });
+        } else {
+            result.ok({
+                value: data.result
+            });
+        }
+    },
+
+    /**
+    * Returns a pattern string for formatting and parsing numbers according to the client's user
+    * preferences. It returns the pattern to the successCB callback with a properties object as a
+    * parameter. If there is an error obtaining the pattern, then the errorCB callback is invoked.
+    *
+    * The defaults are: type="decimal"
+    *
+    * @param {Function} successCB
+    * @param {Function} errorCB
+    * @param {Object} options {optional}
+    *            type {String}: 'decimal', "percent", or 'currency'
+    *
+    * @return    Object.pattern {String}: The number pattern for formatting and parsing numbers.
+    *                                    The patterns follow Unicode Technical Standard #35.
+    *                                    http://unicode.org/reports/tr35/tr35-4.html
+    *            Object.symbol {String}: The symbol to be used when formatting and parsing
+    *                                    e.g., percent or currency symbol.
+    *            Object.fraction {Number}: The number of fractional digits to use when parsing and
+    *                                    formatting numbers.
+    *            Object.rounding {Number}: The rounding increment to use when parsing and formatting.
+    *            Object.positive {String}: The symbol to use for positive numbers when parsing and formatting.
+    *            Object.negative: {String}: The symbol to use for negative numbers when parsing and formatting.
+    *            Object.decimal: {String}: The decimal symbol to use for parsing and formatting.
+    *            Object.grouping: {String}: The grouping symbol to use for parsing and formatting.
+    *
+    * @error GlobalizationError.PATTERN_ERROR
+    *
+    * Example
+    *    globalization.getNumberPattern(
+    *                function (pattern) {alert('Pattern:' + pattern.pattern + '\n');},
+    *                function () {});
+    */
+    getNumberPattern:function(successCB, failureCB, args, env) {
+        var result = new PluginResult(args, env),
+            response = g11n.getInstance().InvokeMethod("getNumberPattern", args),
+            data = JSON.parse(response);
+        console.log("getNumberPattern: " + JSON.stringify(response));
+
+        if (data.error !== undefined) {
+            result.error({
+                code: data.error.code,
+                message: data.error.message
+            });
+        } else {
+            result.ok({
+                pattern: data.result.pattern,
+                symbol: data.result.symbol,
+                fraction: data.result.fraction,
+                rounding: data.result.rounding,
+                positive: data.result.positive,
+                negative: data.result.negative,
+                decimal: data.result.decimal,
+                grouping: data.result.grouping
+            });
+        }
+    },
+
+    /**
+    * Returns a pattern string for formatting and parsing currency values according to the client's
+    * user preferences and ISO 4217 currency code. It returns the pattern to the successCB callback with a
+    * properties object as a parameter. If there is an error obtaining the pattern, then the errorCB
+    * callback is invoked.
+    *
+    * @param {String} currencyCode
+    * @param {Function} successCB
+    * @param {Function} errorCB
+    *
+    * @return    Object.pattern {String}: The currency pattern for formatting and parsing currency values.
+    *                                    The patterns follow Unicode Technical Standard #35
+    *                                    http://unicode.org/reports/tr35/tr35-4.html
+    *            Object.code {String}: The ISO 4217 currency code for the pattern.
+    *            Object.fraction {Number}: The number of fractional digits to use when parsing and
+    *                                    formatting currency.
+    *            Object.rounding {Number}: The rounding increment to use when parsing and formatting.
+    *            Object.decimal: {String}: The decimal symbol to use for parsing and formatting.
+    *            Object.grouping: {String}: The grouping symbol to use for parsing and formatting.
+    *
+    * @error GlobalizationError.FORMATTING_ERROR
+    *
+    * Example
+    *    globalization.getCurrencyPattern('EUR',
+    *                function (currency) {alert('Pattern:' + currency.pattern + '\n');}
+    *                function () {});
+    */
+    getCurrencyPattern:function(successCB, failureCB, args, env) {
+        var result = new PluginResult(args, env),
+            response = g11n.getInstance().InvokeMethod("getCurrencyPattern", args),
+            data = JSON.parse(response);
+        console.log("getCurrencyPattern: " + JSON.stringify(response));
+
+        if (data.error !== undefined) {
+            result.error({
+                code: data.error.code,
+                message: data.error.message
+            });
+        } else {
+            result.ok({
+                pattern: data.result.pattern,
+                code: data.result.code,
+                fraction: data.result.fraction,
+                rounding: data.result.rounding,
+                decimal: data.result.decimal,
+                grouping: data.result.grouping
+            });
+        }
+    }
+};
+
+module.exports = globalization;
+
+function lineArgsFromArray(args) {
+    var cmd = "";
+
+    if ("callbackId" in args)
+        cmd += decodeURIComponent(args.callbackId);
+    if ("0" in args) {
+        if (cmd.length > 0)
+            cmd += " ";
+        cmd += decodeURIComponent(args["0"]);
+    }
+
+    return cmd;
+}
+
+function cmdLineForMethod(method, args) {
+    var cmd = lineArgsFromArray(args);
+    if (cmd.length > 0)
+        return method + " " + cmd;
+    else
+        return method;
+}
+
+///////////////////////////////////////////////////////////////////
+// JavaScript wrapper for JNEXT plugin
+///////////////////////////////////////////////////////////////////
+
+JNEXT.Globalization = function () {
+    var self = this,
+        hasInstance = false;
+
+    self.InvokeMethod = function (method, args) {
+        //This is how Javascript calls into native
+        return JNEXT.invoke(self.m_id, cmdLineForMethod(method, args));
+    };
+
+    self.init = function () {
+        //Checks that the jnext library is present and loads it
+        if (!JNEXT.require("libGlobalization")) {
+            return false;
+        }
+
+        //Creates the native object that this interface will call
+        self.m_id = JNEXT.createObject("libGlobalization.Globalization");
+
+        if (self.m_id === "") {
+            return false;
+        }
+
+        //Registers for the JNEXT event loop
+        JNEXT.registerEvents(self);
+    };
+
+    self.m_id = "";
+
+    //Used by JNEXT library to get the ID
+    self.getId = function () {
+        return self.m_id;
+    };
+
+    //Not truly required but useful for instance management
+    self.getInstance = function () {
+        if (!hasInstance) {
+            self.init();
+            hasInstance = true;
+        }
+        return self;
+    };
+};
+
+g11n = new JNEXT.Globalization();
+
diff --git a/src/blackberry10/native/.cproject b/src/blackberry10/native/.cproject
new file mode 100644
index 0000000..43a8b0e
--- /dev/null
+++ b/src/blackberry10/native/.cproject
@@ -0,0 +1,510 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?fileVersion 4.0.0?>
+
+<cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
+	<storageModule moduleId="org.eclipse.cdt.core.settings">
+		<cconfiguration id="com.qnx.qcc.configuration.sharedLib.debug.2086195267">
+			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.qnx.qcc.configuration.sharedLib.debug.2086195267" moduleId="org.eclipse.cdt.core.settings" name="Device-Debug">
+				<externalSettings>
+					<externalSetting>
+						<entry flags="VALUE_WORKSPACE_PATH" kind="includePath" name="/Globalization/public"/>
+						<entry flags="VALUE_WORKSPACE_PATH" kind="libraryPath" name="/Globalization/Device-Debug"/>
+						<entry flags="" kind="libraryFile" name="Globalization" srcPrefixMapping="" srcRootPath=""/>
+					</externalSetting>
+				</externalSettings>
+				<extensions>
+					<extension id="com.qnx.tools.ide.qde.core.QDEBynaryParser" point="org.eclipse.cdt.core.BinaryParser"/>
+					<extension id="com.qnx.tools.ide.qde.core.QDELinkerErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+				</extensions>
+			</storageModule>
+			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
+				<configuration artifactExtension="so" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.sharedLib" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.sharedLib" description="" id="com.qnx.qcc.configuration.sharedLib.debug.2086195267" name="Device-Debug" parent="com.qnx.qcc.configuration.sharedLib.debug">
+					<folderInfo id="com.qnx.qcc.configuration.sharedLib.debug.2086195267." name="/" resourcePath="">
+						<toolChain id="com.qnx.qcc.toolChain.sharedLib.debug.1362656948" name="QNX QCC" superClass="com.qnx.qcc.toolChain">
+							<option id="com.qnx.qcc.option.cpu.512974648" superClass="com.qnx.qcc.option.cpu" value="com.qnx.qcc.option.gen.cpu.armle-v7" valueType="enumerated"/>
+							<targetPlatform archList="all" binaryParser="com.qnx.tools.ide.qde.core.QDEBynaryParser" id="com.qnx.qcc.targetPlatform.576541971" osList="all" superClass="com.qnx.qcc.targetPlatform"/>
+							<builder buildPath="${workspace_loc:/Globalization}/Device-Debug" id="com.qnx.nto.138042708" keepEnvironmentInBuildfile="false" name="CDT Internal Builder.Debug" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.qnx.nto"/>
+							<tool id="com.qnx.qcc.tool.compiler.553646508" name="QCC Compiler" superClass="com.qnx.qcc.tool.compiler">
+								<option id="com.qnx.qcc.option.compiler.shared.278820220" superClass="com.qnx.qcc.option.compiler.shared" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.compiler.optlevel.730243799" superClass="com.qnx.qcc.option.compiler.optlevel" value="com.qnx.qcc.option.compiler.optlevel.0" valueType="enumerated"/>
+								<option id="com.qnx.qcc.option.compile.debug.875074879" superClass="com.qnx.qcc.option.compile.debug" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.compiler.includePath.977318505" superClass="com.qnx.qcc.option.compiler.includePath" valueType="includePath">
+									<listOptionValue builtIn="false" value="${workspace_loc:/${ProjName}/public}"/>
+									<listOptionValue builtIn="false" value="${QNX_TARGET}/usr/include/freetype2"/>
+									<listOptionValue builtIn="false" value="${QNX_TARGET}/../target-override/usr/include"/>
+								</option>
+								<option id="com.qnx.qcc.option.compiler.security.1067657967" superClass="com.qnx.qcc.option.compiler.security" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.compiler.defines.338551047" superClass="com.qnx.qcc.option.compiler.defines" valueType="definedSymbols">
+									<listOptionValue builtIn="false" value="_FORTIFY_SOURCE=2"/>
+								</option>
+								<inputType id="com.qnx.qcc.inputType.compiler.795064051" superClass="com.qnx.qcc.inputType.compiler"/>
+							</tool>
+							<tool id="com.qnx.qcc.tool.assembler.726495690" name="QCC Assembler" superClass="com.qnx.qcc.tool.assembler">
+								<option id="com.qnx.qcc.option.assembler.debug.948021167" superClass="com.qnx.qcc.option.assembler.debug" value="true" valueType="boolean"/>
+								<inputType id="com.qnx.qcc.inputType.assembler.125094268" superClass="com.qnx.qcc.inputType.assembler"/>
+							</tool>
+							<tool id="com.qnx.qcc.tool.linker.940618489" name="QCC Linker" superClass="com.qnx.qcc.tool.linker">
+								<option id="com.qnx.qcc.option.linker.debug.90334319" superClass="com.qnx.qcc.option.linker.debug" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.linker.shared.1207731347" superClass="com.qnx.qcc.option.linker.shared" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.linker.langcpp.597102664" superClass="com.qnx.qcc.option.linker.langcpp" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.linker.libraryPaths.65846768" superClass="com.qnx.qcc.option.linker.libraryPaths" valueType="libPaths">
+									<listOptionValue builtIn="false" value="${QNX_TARGET}/../target-override/${CPUVARDIR}/lib"/>
+									<listOptionValue builtIn="false" value="${QNX_TARGET}/../target-override/${CPUVARDIR}/usr/lib"/>
+								</option>
+								<option id="com.qnx.qcc.option.linker.security.1124639079" superClass="com.qnx.qcc.option.linker.security" value="true" valueType="boolean"/>
+								<inputType id="com.qnx.qcc.inputType.linker.446382694" superClass="com.qnx.qcc.inputType.linker">
+									<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+									<additionalInput kind="additionalinput" paths="$(LIBS)"/>
+								</inputType>
+							</tool>
+							<tool id="com.qnx.qcc.tool.archiver.854314517" name="QCC Archiver" superClass="com.qnx.qcc.tool.archiver"/>
+						</toolChain>
+					</folderInfo>
+					<sourceEntries>
+						<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
+						<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="public"/>
+					</sourceEntries>
+				</configuration>
+			</storageModule>
+			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+		</cconfiguration>
+		<cconfiguration id="com.qnx.qcc.configuration.sharedLib.release.2071793542">
+			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.qnx.qcc.configuration.sharedLib.release.2071793542" moduleId="org.eclipse.cdt.core.settings" name="Device-Release">
+				<externalSettings>
+					<externalSetting>
+						<entry flags="VALUE_WORKSPACE_PATH" kind="includePath" name="/Globalization/public"/>
+						<entry flags="VALUE_WORKSPACE_PATH" kind="libraryPath" name="/Globalization/Device-Release"/>
+						<entry flags="" kind="libraryFile" name="Globalization" srcPrefixMapping="" srcRootPath=""/>
+					</externalSetting>
+				</externalSettings>
+				<extensions>
+					<extension id="com.qnx.tools.ide.qde.core.QDEBynaryParser" point="org.eclipse.cdt.core.BinaryParser"/>
+					<extension id="com.qnx.tools.ide.qde.core.QDELinkerErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+				</extensions>
+			</storageModule>
+			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
+				<configuration artifactExtension="so" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.sharedLib" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.sharedLib" description="" id="com.qnx.qcc.configuration.sharedLib.release.2071793542" name="Device-Release" parent="com.qnx.qcc.configuration.sharedLib.release">
+					<folderInfo id="com.qnx.qcc.configuration.sharedLib.release.2071793542." name="/" resourcePath="">
+						<toolChain id="com.qnx.qcc.toolChain.sharedLib.release.1564739122" name="QNX QCC" superClass="com.qnx.qcc.toolChain">
+							<option id="com.qnx.qcc.option.cpu.349375964" superClass="com.qnx.qcc.option.cpu" value="com.qnx.qcc.option.gen.cpu.armle-v7" valueType="enumerated"/>
+							<targetPlatform archList="all" binaryParser="com.qnx.tools.ide.qde.core.QDEBynaryParser" id="com.qnx.qcc.targetPlatform.113921716" osList="all" superClass="com.qnx.qcc.targetPlatform"/>
+							<builder buildPath="${workspace_loc:/Globalization}/Device-Release" id="com.qnx.nto.210432747" keepEnvironmentInBuildfile="false" name="CDT Internal Builder.Release" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.qnx.nto"/>
+							<tool id="com.qnx.qcc.tool.compiler.1741525543" name="QCC Compiler" superClass="com.qnx.qcc.tool.compiler">
+								<option id="com.qnx.qcc.option.compiler.shared.924299858" superClass="com.qnx.qcc.option.compiler.shared" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.compiler.optlevel.1714650029" superClass="com.qnx.qcc.option.compiler.optlevel" value="com.qnx.qcc.option.compiler.optlevel.2" valueType="enumerated"/>
+								<option id="com.qnx.qcc.option.compiler.includePath.529997080" superClass="com.qnx.qcc.option.compiler.includePath" valueType="includePath">
+									<listOptionValue builtIn="false" value="${workspace_loc:/${ProjName}/public}"/>
+									<listOptionValue builtIn="false" value="${QNX_TARGET}/usr/include/freetype2"/>
+									<listOptionValue builtIn="false" value="${QNX_TARGET}/../target-override/usr/include"/>
+								</option>
+								<option id="com.qnx.qcc.option.compiler.security.763134044" superClass="com.qnx.qcc.option.compiler.security" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.compiler.defines.2066593852" superClass="com.qnx.qcc.option.compiler.defines" valueType="definedSymbols">
+									<listOptionValue builtIn="false" value="_FORTIFY_SOURCE=2"/>
+								</option>
+								<option id="com.qnx.qcc.option.compiler.qccoptions.126622563" superClass="com.qnx.qcc.option.compiler.qccoptions" valueType="stringList">
+									<listOptionValue builtIn="false" value="-frecord-gcc-switches"/>
+								</option>
+								<inputType id="com.qnx.qcc.inputType.compiler.1862720939" superClass="com.qnx.qcc.inputType.compiler"/>
+							</tool>
+							<tool id="com.qnx.qcc.tool.assembler.1417356824" name="QCC Assembler" superClass="com.qnx.qcc.tool.assembler">
+								<inputType id="com.qnx.qcc.inputType.assembler.33758862" superClass="com.qnx.qcc.inputType.assembler"/>
+							</tool>
+							<tool id="com.qnx.qcc.tool.linker.1941695646" name="QCC Linker" superClass="com.qnx.qcc.tool.linker">
+								<option id="com.qnx.qcc.option.linker.shared.2042451846" superClass="com.qnx.qcc.option.linker.shared" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.linker.langcpp.1413795751" superClass="com.qnx.qcc.option.linker.langcpp" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.linker.libraryPaths.1466129804" superClass="com.qnx.qcc.option.linker.libraryPaths" valueType="libPaths">
+									<listOptionValue builtIn="false" value="${QNX_TARGET}/../target-override/${CPUVARDIR}/lib"/>
+									<listOptionValue builtIn="false" value="${QNX_TARGET}/../target-override/${CPUVARDIR}/usr/lib"/>
+								</option>
+								<option id="com.qnx.qcc.option.linker.security.638267015" superClass="com.qnx.qcc.option.linker.security" value="true" valueType="boolean"/>
+								<inputType id="com.qnx.qcc.inputType.linker.1094802170" superClass="com.qnx.qcc.inputType.linker">
+									<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+									<additionalInput kind="additionalinput" paths="$(LIBS)"/>
+								</inputType>
+							</tool>
+							<tool id="com.qnx.qcc.tool.archiver.1630015150" name="QCC Archiver" superClass="com.qnx.qcc.tool.archiver"/>
+						</toolChain>
+					</folderInfo>
+					<sourceEntries>
+						<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
+						<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="public"/>
+					</sourceEntries>
+				</configuration>
+			</storageModule>
+			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+		</cconfiguration>
+		<cconfiguration id="com.qnx.qcc.configuration.sharedLib.profile.71672286">
+			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.qnx.qcc.configuration.sharedLib.profile.71672286" moduleId="org.eclipse.cdt.core.settings" name="Device-Profile">
+				<externalSettings>
+					<externalSetting>
+						<entry flags="VALUE_WORKSPACE_PATH" kind="includePath" name="/Globalization/public"/>
+						<entry flags="VALUE_WORKSPACE_PATH" kind="libraryPath" name="/Globalization/Device-Profile"/>
+						<entry flags="" kind="libraryFile" name="Globalization" srcPrefixMapping="" srcRootPath=""/>
+					</externalSetting>
+				</externalSettings>
+				<extensions>
+					<extension id="com.qnx.tools.ide.qde.core.QDEBynaryParser" point="org.eclipse.cdt.core.BinaryParser"/>
+					<extension id="com.qnx.tools.ide.qde.core.QDELinkerErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+				</extensions>
+			</storageModule>
+			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
+				<configuration artifactExtension="so" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.sharedLib" buildProperties="org.eclipse.cdt.build.core.buildType=com.qnx.buildType.profile,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.sharedLib" description="Build for Profiling" id="com.qnx.qcc.configuration.sharedLib.profile.71672286" name="Device-Profile" parent="com.qnx.qcc.configuration.sharedLib.profile">
+					<folderInfo id="com.qnx.qcc.configuration.sharedLib.profile.71672286." name="/" resourcePath="">
+						<toolChain id="com.qnx.qcc.toolChain.sharedLib.profile.173706803" name="QNX QCC" superClass="com.qnx.qcc.toolChain">
+							<option id="com.qnx.qcc.option.cpu.471089035" superClass="com.qnx.qcc.option.cpu" value="com.qnx.qcc.option.gen.cpu.armle-v7" valueType="enumerated"/>
+							<targetPlatform archList="all" binaryParser="com.qnx.tools.ide.qde.core.QDEBynaryParser" id="com.qnx.qcc.targetPlatform.1116175308" osList="all" superClass="com.qnx.qcc.targetPlatform"/>
+							<builder buildPath="${workspace_loc:/Globalization}/Device-Profile" id="com.qnx.nto.2147023982" keepEnvironmentInBuildfile="false" name="CDT Internal Builder.Profile" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.qnx.nto"/>
+							<tool id="com.qnx.qcc.tool.compiler.448702677" name="QCC Compiler" superClass="com.qnx.qcc.tool.compiler">
+								<option id="com.qnx.qcc.option.compiler.shared.1924390753" superClass="com.qnx.qcc.option.compiler.shared" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.compiler.optlevel.354330544" superClass="com.qnx.qcc.option.compiler.optlevel" value="com.qnx.qcc.option.compiler.optlevel.0" valueType="enumerated"/>
+								<option id="com.qnx.qcc.option.compile.debug.1818057617" superClass="com.qnx.qcc.option.compile.debug" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.compiler.profile2.1637349216" superClass="com.qnx.qcc.option.compiler.profile2" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.compiler.includePath.1119867170" superClass="com.qnx.qcc.option.compiler.includePath" valueType="includePath">
+									<listOptionValue builtIn="false" value="${workspace_loc:/${ProjName}/public}"/>
+									<listOptionValue builtIn="false" value="${QNX_TARGET}/usr/include/freetype2"/>
+									<listOptionValue builtIn="false" value="${QNX_TARGET}/../target-override/usr/include"/>
+								</option>
+								<option id="com.qnx.qcc.option.compiler.security.525918388" superClass="com.qnx.qcc.option.compiler.security" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.compiler.defines.120578861" superClass="com.qnx.qcc.option.compiler.defines" valueType="definedSymbols">
+									<listOptionValue builtIn="false" value="_FORTIFY_SOURCE=2"/>
+								</option>
+								<inputType id="com.qnx.qcc.inputType.compiler.2129412695" superClass="com.qnx.qcc.inputType.compiler"/>
+							</tool>
+							<tool id="com.qnx.qcc.tool.assembler.172030109" name="QCC Assembler" superClass="com.qnx.qcc.tool.assembler">
+								<option id="com.qnx.qcc.option.assembler.debug.562912696" superClass="com.qnx.qcc.option.assembler.debug" value="true" valueType="boolean"/>
+								<inputType id="com.qnx.qcc.inputType.assembler.2001205978" superClass="com.qnx.qcc.inputType.assembler"/>
+							</tool>
+							<tool id="com.qnx.qcc.tool.linker.102856136" name="QCC Linker" superClass="com.qnx.qcc.tool.linker">
+								<option id="com.qnx.qcc.option.linker.debug.1267086970" superClass="com.qnx.qcc.option.linker.debug" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.linker.profile2.480924351" superClass="com.qnx.qcc.option.linker.profile2" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.linker.shared.1474901931" superClass="com.qnx.qcc.option.linker.shared" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.linker.langcpp.909415351" superClass="com.qnx.qcc.option.linker.langcpp" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.linker.libraryPaths.1052143075" superClass="com.qnx.qcc.option.linker.libraryPaths" valueType="libPaths">
+									<listOptionValue builtIn="false" value="${QNX_TARGET}/../target-override/${CPUVARDIR}/lib"/>
+									<listOptionValue builtIn="false" value="${QNX_TARGET}/../target-override/${CPUVARDIR}/usr/lib"/>
+								</option>
+								<option id="com.qnx.qcc.option.linker.security.1265875655" superClass="com.qnx.qcc.option.linker.security" value="true" valueType="boolean"/>
+								<inputType id="com.qnx.qcc.inputType.linker.2147201558" superClass="com.qnx.qcc.inputType.linker">
+									<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+									<additionalInput kind="additionalinput" paths="$(LIBS)"/>
+								</inputType>
+							</tool>
+							<tool id="com.qnx.qcc.tool.archiver.447051030" name="QCC Archiver" superClass="com.qnx.qcc.tool.archiver"/>
+						</toolChain>
+					</folderInfo>
+					<sourceEntries>
+						<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
+						<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="public"/>
+					</sourceEntries>
+				</configuration>
+			</storageModule>
+			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+		</cconfiguration>
+		<cconfiguration id="com.qnx.qcc.configuration.sharedLib.coverage.1241223459">
+			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.qnx.qcc.configuration.sharedLib.coverage.1241223459" moduleId="org.eclipse.cdt.core.settings" name="Device-Coverage">
+				<externalSettings>
+					<externalSetting>
+						<entry flags="VALUE_WORKSPACE_PATH" kind="includePath" name="/Globalization/public"/>
+						<entry flags="VALUE_WORKSPACE_PATH" kind="libraryPath" name="/Globalization/Device-Coverage"/>
+						<entry flags="" kind="libraryFile" name="Globalization" srcPrefixMapping="" srcRootPath=""/>
+					</externalSetting>
+				</externalSettings>
+				<extensions>
+					<extension id="com.qnx.tools.ide.qde.core.QDEBynaryParser" point="org.eclipse.cdt.core.BinaryParser"/>
+					<extension id="com.qnx.tools.ide.qde.core.QDELinkerErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+				</extensions>
+			</storageModule>
+			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
+				<configuration artifactExtension="so" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.sharedLib" buildProperties="org.eclipse.cdt.build.core.buildType=com.qnx.buildType.coverage,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.sharedLib" description="Build with Code Coverage" id="com.qnx.qcc.configuration.sharedLib.coverage.1241223459" name="Device-Coverage" parent="com.qnx.qcc.configuration.sharedLib.coverage">
+					<folderInfo id="com.qnx.qcc.configuration.sharedLib.coverage.1241223459." name="/" resourcePath="">
+						<toolChain id="com.qnx.qcc.toolChain.sharedLib.coverage.791768170" name="QNX QCC" superClass="com.qnx.qcc.toolChain">
+							<option id="com.qnx.qcc.option.cpu.68628853" superClass="com.qnx.qcc.option.cpu" value="com.qnx.qcc.option.gen.cpu.armle-v7" valueType="enumerated"/>
+							<targetPlatform archList="all" binaryParser="com.qnx.tools.ide.qde.core.QDEBynaryParser" id="com.qnx.qcc.targetPlatform.656480293" osList="all" superClass="com.qnx.qcc.targetPlatform"/>
+							<builder buildPath="${workspace_loc:/Globalization}/Device-Coverage" id="com.qnx.nto.1920891004" keepEnvironmentInBuildfile="false" name="CDT Internal Builder.Coverage" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.qnx.nto"/>
+							<tool id="com.qnx.qcc.tool.compiler.515240916" name="QCC Compiler" superClass="com.qnx.qcc.tool.compiler">
+								<option id="com.qnx.qcc.option.compiler.shared.1113214186" superClass="com.qnx.qcc.option.compiler.shared" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.compiler.optlevel.138531937" superClass="com.qnx.qcc.option.compiler.optlevel" value="com.qnx.qcc.option.compiler.optlevel.0" valueType="enumerated"/>
+								<option id="com.qnx.qcc.option.compile.debug.1717007173" superClass="com.qnx.qcc.option.compile.debug" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.compiler.coverage.1501374122" superClass="com.qnx.qcc.option.compiler.coverage" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.compiler.includePath.1121849764" superClass="com.qnx.qcc.option.compiler.includePath" valueType="includePath">
+									<listOptionValue builtIn="false" value="${workspace_loc:/${ProjName}/public}"/>
+									<listOptionValue builtIn="false" value="${QNX_TARGET}/usr/include/freetype2"/>
+									<listOptionValue builtIn="false" value="${QNX_TARGET}/../target-override/usr/include"/>
+								</option>
+								<option id="com.qnx.qcc.option.compiler.security.1566134090" superClass="com.qnx.qcc.option.compiler.security" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.compiler.defines.856115483" superClass="com.qnx.qcc.option.compiler.defines" valueType="definedSymbols">
+									<listOptionValue builtIn="false" value="_FORTIFY_SOURCE=2"/>
+								</option>
+								<inputType id="com.qnx.qcc.inputType.compiler.1103118153" superClass="com.qnx.qcc.inputType.compiler"/>
+							</tool>
+							<tool id="com.qnx.qcc.tool.assembler.799640784" name="QCC Assembler" superClass="com.qnx.qcc.tool.assembler">
+								<option id="com.qnx.qcc.option.assembler.debug.915885087" superClass="com.qnx.qcc.option.assembler.debug" value="true" valueType="boolean"/>
+								<inputType id="com.qnx.qcc.inputType.assembler.1721241388" superClass="com.qnx.qcc.inputType.assembler"/>
+							</tool>
+							<tool id="com.qnx.qcc.tool.linker.266251808" name="QCC Linker" superClass="com.qnx.qcc.tool.linker">
+								<option id="com.qnx.qcc.option.linker.debug.403740236" superClass="com.qnx.qcc.option.linker.debug" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.linker.coverage.967247243" superClass="com.qnx.qcc.option.linker.coverage" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.linker.shared.1162613647" superClass="com.qnx.qcc.option.linker.shared" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.linker.langcpp.1275324861" superClass="com.qnx.qcc.option.linker.langcpp" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.linker.libraryPaths.1690661732" superClass="com.qnx.qcc.option.linker.libraryPaths" valueType="libPaths">
+									<listOptionValue builtIn="false" value="${QNX_TARGET}/../target-override/${CPUVARDIR}/lib"/>
+									<listOptionValue builtIn="false" value="${QNX_TARGET}/../target-override/${CPUVARDIR}/usr/lib"/>
+								</option>
+								<option id="com.qnx.qcc.option.linker.security.1181796302" superClass="com.qnx.qcc.option.linker.security" value="true" valueType="boolean"/>
+								<inputType id="com.qnx.qcc.inputType.linker.1416849477" superClass="com.qnx.qcc.inputType.linker">
+									<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+									<additionalInput kind="additionalinput" paths="$(LIBS)"/>
+								</inputType>
+							</tool>
+							<tool id="com.qnx.qcc.tool.archiver.1329594166" name="QCC Archiver" superClass="com.qnx.qcc.tool.archiver"/>
+						</toolChain>
+					</folderInfo>
+					<sourceEntries>
+						<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
+						<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="public"/>
+					</sourceEntries>
+				</configuration>
+			</storageModule>
+			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+		</cconfiguration>
+		<cconfiguration id="com.qnx.qcc.configuration.sharedLib.debug.282851211">
+			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.qnx.qcc.configuration.sharedLib.debug.282851211" moduleId="org.eclipse.cdt.core.settings" name="Simulator-Debug">
+				<externalSettings>
+					<externalSetting>
+						<entry flags="VALUE_WORKSPACE_PATH" kind="includePath" name="/Globalization/public"/>
+						<entry flags="VALUE_WORKSPACE_PATH" kind="libraryPath" name="/Globalization/Simulator-Debug"/>
+						<entry flags="" kind="libraryFile" name="Globalization" srcPrefixMapping="" srcRootPath=""/>
+					</externalSetting>
+				</externalSettings>
+				<extensions>
+					<extension id="com.qnx.tools.ide.qde.core.QDEBynaryParser" point="org.eclipse.cdt.core.BinaryParser"/>
+					<extension id="com.qnx.tools.ide.qde.core.QDELinkerErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+				</extensions>
+			</storageModule>
+			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
+				<configuration artifactExtension="so" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.sharedLib" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.sharedLib" description="" id="com.qnx.qcc.configuration.sharedLib.debug.282851211" name="Simulator-Debug" parent="com.qnx.qcc.configuration.sharedLib.debug">
+					<folderInfo id="com.qnx.qcc.configuration.sharedLib.debug.282851211." name="/" resourcePath="">
+						<toolChain id="com.qnx.qcc.toolChain.sharedLib.debug.690069147" name="QNX QCC" superClass="com.qnx.qcc.toolChain">
+							<targetPlatform archList="all" binaryParser="com.qnx.tools.ide.qde.core.QDEBynaryParser" id="com.qnx.qcc.targetPlatform.447477861" osList="all" superClass="com.qnx.qcc.targetPlatform"/>
+							<builder buildPath="${workspace_loc:/Globalization}/Simulator-Debug" id="com.qnx.nto.16935706" keepEnvironmentInBuildfile="false" name="CDT Internal Builder.Debug" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.qnx.nto"/>
+							<tool id="com.qnx.qcc.tool.compiler.436064558" name="QCC Compiler" superClass="com.qnx.qcc.tool.compiler">
+								<option id="com.qnx.qcc.option.compiler.shared.1296520839" superClass="com.qnx.qcc.option.compiler.shared" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.compiler.optlevel.798653580" superClass="com.qnx.qcc.option.compiler.optlevel" value="com.qnx.qcc.option.compiler.optlevel.0" valueType="enumerated"/>
+								<option id="com.qnx.qcc.option.compile.debug.480309598" superClass="com.qnx.qcc.option.compile.debug" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.compiler.includePath.194299949" superClass="com.qnx.qcc.option.compiler.includePath" valueType="includePath">
+									<listOptionValue builtIn="false" value="${workspace_loc:/${ProjName}/public}"/>
+									<listOptionValue builtIn="false" value="${QNX_TARGET}/usr/include/freetype2"/>
+									<listOptionValue builtIn="false" value="${QNX_TARGET}/../target-override/usr/include"/>
+								</option>
+								<option id="com.qnx.qcc.option.compiler.security.1690823520" superClass="com.qnx.qcc.option.compiler.security" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.compiler.defines.1497909684" superClass="com.qnx.qcc.option.compiler.defines" valueType="definedSymbols">
+									<listOptionValue builtIn="false" value="_FORTIFY_SOURCE=2"/>
+								</option>
+								<inputType id="com.qnx.qcc.inputType.compiler.32518827" superClass="com.qnx.qcc.inputType.compiler"/>
+							</tool>
+							<tool id="com.qnx.qcc.tool.assembler.683379246" name="QCC Assembler" superClass="com.qnx.qcc.tool.assembler">
+								<option id="com.qnx.qcc.option.assembler.debug.483390641" superClass="com.qnx.qcc.option.assembler.debug" value="true" valueType="boolean"/>
+								<inputType id="com.qnx.qcc.inputType.assembler.1931286803" superClass="com.qnx.qcc.inputType.assembler"/>
+							</tool>
+							<tool id="com.qnx.qcc.tool.linker.676523579" name="QCC Linker" superClass="com.qnx.qcc.tool.linker">
+								<option id="com.qnx.qcc.option.linker.debug.1664064271" superClass="com.qnx.qcc.option.linker.debug" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.linker.shared.1927735399" superClass="com.qnx.qcc.option.linker.shared" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.linker.langcpp.1837738060" superClass="com.qnx.qcc.option.linker.langcpp" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.linker.libraryPaths.1117614039" superClass="com.qnx.qcc.option.linker.libraryPaths" valueType="libPaths">
+									<listOptionValue builtIn="false" value="${QNX_TARGET}/../target-override/${CPUVARDIR}/lib"/>
+									<listOptionValue builtIn="false" value="${QNX_TARGET}/../target-override/${CPUVARDIR}/usr/lib"/>
+								</option>
+								<option id="com.qnx.qcc.option.linker.security.667831419" superClass="com.qnx.qcc.option.linker.security" value="true" valueType="boolean"/>
+								<inputType id="com.qnx.qcc.inputType.linker.939010972" superClass="com.qnx.qcc.inputType.linker">
+									<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+									<additionalInput kind="additionalinput" paths="$(LIBS)"/>
+								</inputType>
+							</tool>
+							<tool id="com.qnx.qcc.tool.archiver.438645925" name="QCC Archiver" superClass="com.qnx.qcc.tool.archiver"/>
+						</toolChain>
+					</folderInfo>
+					<sourceEntries>
+						<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
+						<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="public"/>
+					</sourceEntries>
+				</configuration>
+			</storageModule>
+			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+		</cconfiguration>
+		<cconfiguration id="com.qnx.qcc.configuration.sharedLib.profile.2132121806">
+			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.qnx.qcc.configuration.sharedLib.profile.2132121806" moduleId="org.eclipse.cdt.core.settings" name="Simulator-Profile">
+				<externalSettings>
+					<externalSetting>
+						<entry flags="VALUE_WORKSPACE_PATH" kind="includePath" name="/Globalization/public"/>
+						<entry flags="VALUE_WORKSPACE_PATH" kind="libraryPath" name="/Globalization/Simulator-Profile"/>
+						<entry flags="" kind="libraryFile" name="Globalization" srcPrefixMapping="" srcRootPath=""/>
+					</externalSetting>
+				</externalSettings>
+				<extensions>
+					<extension id="com.qnx.tools.ide.qde.core.QDEBynaryParser" point="org.eclipse.cdt.core.BinaryParser"/>
+					<extension id="com.qnx.tools.ide.qde.core.QDELinkerErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+				</extensions>
+			</storageModule>
+			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
+				<configuration artifactExtension="so" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.sharedLib" buildProperties="org.eclipse.cdt.build.core.buildType=com.qnx.buildType.profile,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.sharedLib" description="Build for Profiling" id="com.qnx.qcc.configuration.sharedLib.profile.2132121806" name="Simulator-Profile" parent="com.qnx.qcc.configuration.sharedLib.profile">
+					<folderInfo id="com.qnx.qcc.configuration.sharedLib.profile.2132121806." name="/" resourcePath="">
+						<toolChain id="com.qnx.qcc.toolChain.sharedLib.profile.465563550" name="QNX QCC" superClass="com.qnx.qcc.toolChain">
+							<targetPlatform archList="all" binaryParser="com.qnx.tools.ide.qde.core.QDEBynaryParser" id="com.qnx.qcc.targetPlatform.304065104" osList="all" superClass="com.qnx.qcc.targetPlatform"/>
+							<builder buildPath="${workspace_loc:/Globalization}/Simulator-Profile" id="com.qnx.nto.71834368" keepEnvironmentInBuildfile="false" name="CDT Internal Builder.Profile" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.qnx.nto"/>
+							<tool id="com.qnx.qcc.tool.compiler.2141575840" name="QCC Compiler" superClass="com.qnx.qcc.tool.compiler">
+								<option id="com.qnx.qcc.option.compiler.shared.505307927" superClass="com.qnx.qcc.option.compiler.shared" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.compiler.optlevel.968435582" superClass="com.qnx.qcc.option.compiler.optlevel" value="com.qnx.qcc.option.compiler.optlevel.0" valueType="enumerated"/>
+								<option id="com.qnx.qcc.option.compile.debug.856956580" superClass="com.qnx.qcc.option.compile.debug" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.compiler.profile2.989054174" superClass="com.qnx.qcc.option.compiler.profile2" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.compiler.includePath.495822837" superClass="com.qnx.qcc.option.compiler.includePath" valueType="includePath">
+									<listOptionValue builtIn="false" value="${workspace_loc:/${ProjName}/public}"/>
+									<listOptionValue builtIn="false" value="${QNX_TARGET}/usr/include/freetype2"/>
+									<listOptionValue builtIn="false" value="${QNX_TARGET}/../target-override/usr/include"/>
+								</option>
+								<option id="com.qnx.qcc.option.compiler.security.927039616" superClass="com.qnx.qcc.option.compiler.security" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.compiler.defines.1204951033" superClass="com.qnx.qcc.option.compiler.defines" valueType="definedSymbols">
+									<listOptionValue builtIn="false" value="_FORTIFY_SOURCE=2"/>
+								</option>
+								<inputType id="com.qnx.qcc.inputType.compiler.1895926933" superClass="com.qnx.qcc.inputType.compiler"/>
+							</tool>
+							<tool id="com.qnx.qcc.tool.assembler.719566290" name="QCC Assembler" superClass="com.qnx.qcc.tool.assembler">
+								<option id="com.qnx.qcc.option.assembler.debug.1091030139" superClass="com.qnx.qcc.option.assembler.debug" value="true" valueType="boolean"/>
+								<inputType id="com.qnx.qcc.inputType.assembler.508987171" superClass="com.qnx.qcc.inputType.assembler"/>
+							</tool>
+							<tool id="com.qnx.qcc.tool.linker.928406170" name="QCC Linker" superClass="com.qnx.qcc.tool.linker">
+								<option id="com.qnx.qcc.option.linker.debug.1137401240" superClass="com.qnx.qcc.option.linker.debug" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.linker.profile2.1319172054" superClass="com.qnx.qcc.option.linker.profile2" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.linker.shared.1658583636" superClass="com.qnx.qcc.option.linker.shared" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.linker.langcpp.1754991623" superClass="com.qnx.qcc.option.linker.langcpp" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.linker.libraryPaths.663604549" superClass="com.qnx.qcc.option.linker.libraryPaths" valueType="libPaths">
+									<listOptionValue builtIn="false" value="${QNX_TARGET}/../target-override/${CPUVARDIR}/lib"/>
+									<listOptionValue builtIn="false" value="${QNX_TARGET}/../target-override/${CPUVARDIR}/usr/lib"/>
+								</option>
+								<option id="com.qnx.qcc.option.linker.security.1854879990" superClass="com.qnx.qcc.option.linker.security" value="true" valueType="boolean"/>
+								<inputType id="com.qnx.qcc.inputType.linker.1227173708" superClass="com.qnx.qcc.inputType.linker">
+									<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+									<additionalInput kind="additionalinput" paths="$(LIBS)"/>
+								</inputType>
+							</tool>
+							<tool id="com.qnx.qcc.tool.archiver.395883161" name="QCC Archiver" superClass="com.qnx.qcc.tool.archiver"/>
+						</toolChain>
+					</folderInfo>
+					<sourceEntries>
+						<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
+						<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="public"/>
+					</sourceEntries>
+				</configuration>
+			</storageModule>
+			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+		</cconfiguration>
+		<cconfiguration id="com.qnx.qcc.configuration.sharedLib.coverage.612831700">
+			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.qnx.qcc.configuration.sharedLib.coverage.612831700" moduleId="org.eclipse.cdt.core.settings" name="Simulator-Coverage">
+				<externalSettings>
+					<externalSetting>
+						<entry flags="VALUE_WORKSPACE_PATH" kind="includePath" name="/Globalization/public"/>
+						<entry flags="VALUE_WORKSPACE_PATH" kind="libraryPath" name="/Globalization/Simulator-Coverage"/>
+						<entry flags="" kind="libraryFile" name="Globalization" srcPrefixMapping="" srcRootPath=""/>
+					</externalSetting>
+				</externalSettings>
+				<extensions>
+					<extension id="com.qnx.tools.ide.qde.core.QDEBynaryParser" point="org.eclipse.cdt.core.BinaryParser"/>
+					<extension id="com.qnx.tools.ide.qde.core.QDELinkerErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+				</extensions>
+			</storageModule>
+			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
+				<configuration artifactExtension="so" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.sharedLib" buildProperties="org.eclipse.cdt.build.core.buildType=com.qnx.buildType.coverage,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.sharedLib" description="Build with Code Coverage" id="com.qnx.qcc.configuration.sharedLib.coverage.612831700" name="Simulator-Coverage" parent="com.qnx.qcc.configuration.sharedLib.coverage">
+					<folderInfo id="com.qnx.qcc.configuration.sharedLib.coverage.612831700." name="/" resourcePath="">
+						<toolChain id="com.qnx.qcc.toolChain.sharedLib.coverage.1383933656" name="QNX QCC" superClass="com.qnx.qcc.toolChain">
+							<targetPlatform archList="all" binaryParser="com.qnx.tools.ide.qde.core.QDEBynaryParser" id="com.qnx.qcc.targetPlatform.452717109" osList="all" superClass="com.qnx.qcc.targetPlatform"/>
+							<builder buildPath="${workspace_loc:/Globalization}/Simulator-Coverage" id="com.qnx.nto.1135704316" keepEnvironmentInBuildfile="false" name="CDT Internal Builder.Coverage" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.qnx.nto"/>
+							<tool id="com.qnx.qcc.tool.compiler.1718571577" name="QCC Compiler" superClass="com.qnx.qcc.tool.compiler">
+								<option id="com.qnx.qcc.option.compiler.shared.1096742880" superClass="com.qnx.qcc.option.compiler.shared" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.compiler.optlevel.166447058" superClass="com.qnx.qcc.option.compiler.optlevel" value="com.qnx.qcc.option.compiler.optlevel.0" valueType="enumerated"/>
+								<option id="com.qnx.qcc.option.compile.debug.1423713908" superClass="com.qnx.qcc.option.compile.debug" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.compiler.coverage.1586182529" superClass="com.qnx.qcc.option.compiler.coverage" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.compiler.includePath.30649465" superClass="com.qnx.qcc.option.compiler.includePath" valueType="includePath">
+									<listOptionValue builtIn="false" value="${workspace_loc:/${ProjName}/public}"/>
+									<listOptionValue builtIn="false" value="${QNX_TARGET}/usr/include/freetype2"/>
+									<listOptionValue builtIn="false" value="${QNX_TARGET}/../target-override/usr/include"/>
+								</option>
+								<option id="com.qnx.qcc.option.compiler.security.865063774" superClass="com.qnx.qcc.option.compiler.security" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.compiler.defines.1139268915" superClass="com.qnx.qcc.option.compiler.defines" valueType="definedSymbols">
+									<listOptionValue builtIn="false" value="_FORTIFY_SOURCE=2"/>
+								</option>
+								<inputType id="com.qnx.qcc.inputType.compiler.1818433192" superClass="com.qnx.qcc.inputType.compiler"/>
+							</tool>
+							<tool id="com.qnx.qcc.tool.assembler.1970479264" name="QCC Assembler" superClass="com.qnx.qcc.tool.assembler">
+								<option id="com.qnx.qcc.option.assembler.debug.1421289121" superClass="com.qnx.qcc.option.assembler.debug" value="true" valueType="boolean"/>
+								<inputType id="com.qnx.qcc.inputType.assembler.738302309" superClass="com.qnx.qcc.inputType.assembler"/>
+							</tool>
+							<tool id="com.qnx.qcc.tool.linker.1144413440" name="QCC Linker" superClass="com.qnx.qcc.tool.linker">
+								<option id="com.qnx.qcc.option.linker.debug.323909895" superClass="com.qnx.qcc.option.linker.debug" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.linker.coverage.516279967" superClass="com.qnx.qcc.option.linker.coverage" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.linker.shared.2121854288" superClass="com.qnx.qcc.option.linker.shared" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.linker.langcpp.1259368782" superClass="com.qnx.qcc.option.linker.langcpp" value="true" valueType="boolean"/>
+								<option id="com.qnx.qcc.option.linker.libraryPaths.980080699" superClass="com.qnx.qcc.option.linker.libraryPaths" valueType="libPaths">
+									<listOptionValue builtIn="false" value="${QNX_TARGET}/../target-override/${CPUVARDIR}/lib"/>
+									<listOptionValue builtIn="false" value="${QNX_TARGET}/../target-override/${CPUVARDIR}/usr/lib"/>
+								</option>
+								<option id="com.qnx.qcc.option.linker.security.532451915" superClass="com.qnx.qcc.option.linker.security" value="true" valueType="boolean"/>
+								<inputType id="com.qnx.qcc.inputType.linker.540474532" superClass="com.qnx.qcc.inputType.linker">
+									<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+									<additionalInput kind="additionalinput" paths="$(LIBS)"/>
+								</inputType>
+							</tool>
+							<tool id="com.qnx.qcc.tool.archiver.542003348" name="QCC Archiver" superClass="com.qnx.qcc.tool.archiver"/>
+						</toolChain>
+					</folderInfo>
+					<sourceEntries>
+						<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
+						<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="public"/>
+					</sourceEntries>
+				</configuration>
+			</storageModule>
+			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+		</cconfiguration>
+	</storageModule>
+	<storageModule moduleId="cdtBuildSystem" version="4.0.0">
+		<project id="Globalization.null.1361991291" name="Globalization"/>
+	</storageModule>
+	<storageModule moduleId="scannerConfiguration">
+		<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.qnx.tools.ide.qde.managedbuilder.core.qccScannerInfo"/>
+		<scannerConfigBuildInfo instanceId="com.qnx.qcc.configuration.sharedLib.release.2071793542">
+			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.qnx.tools.ide.qde.managedbuilder.core.qccScannerInfo"/>
+		</scannerConfigBuildInfo>
+		<scannerConfigBuildInfo instanceId="com.qnx.qcc.configuration.sharedLib.coverage.1241223459">
+			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.qnx.tools.ide.qde.managedbuilder.core.qccScannerInfo"/>
+		</scannerConfigBuildInfo>
+		<scannerConfigBuildInfo instanceId="com.qnx.qcc.configuration.sharedLib.profile.71672286">
+			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.qnx.tools.ide.qde.managedbuilder.core.qccScannerInfo"/>
+		</scannerConfigBuildInfo>
+		<scannerConfigBuildInfo instanceId="com.qnx.qcc.configuration.sharedLib.profile.2132121806">
+			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.qnx.tools.ide.qde.managedbuilder.core.qccScannerInfo"/>
+		</scannerConfigBuildInfo>
+		<scannerConfigBuildInfo instanceId="com.qnx.qcc.configuration.sharedLib.debug.282851211">
+			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.qnx.tools.ide.qde.managedbuilder.core.qccScannerInfo"/>
+		</scannerConfigBuildInfo>
+		<scannerConfigBuildInfo instanceId="com.qnx.qcc.configuration.sharedLib.coverage.612831700">
+			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.qnx.tools.ide.qde.managedbuilder.core.qccScannerInfo"/>
+		</scannerConfigBuildInfo>
+		<scannerConfigBuildInfo instanceId="com.qnx.qcc.configuration.sharedLib.debug.2086195267">
+			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.qnx.tools.ide.qde.managedbuilder.core.qccScannerInfo"/>
+		</scannerConfigBuildInfo>
+	</storageModule>
+	<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
+	<storageModule moduleId="refreshScope"/>
+</cproject>
diff --git a/src/blackberry10/native/.project b/src/blackberry10/native/.project
new file mode 100644
index 0000000..11f9301
--- /dev/null
+++ b/src/blackberry10/native/.project
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>Globalization</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
+			<triggers>clean,full,incremental,</triggers>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
+			<triggers>full,incremental,</triggers>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>com.qnx.tools.bbt.xml.core.bbtXMLValidationBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.cdt.core.cnature</nature>
+		<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
+		<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
+		<nature>com.qnx.tools.ide.bbt.core.bbtnature</nature>
+		<nature>org.eclipse.cdt.core.ccnature</nature>
+	</natures>
+</projectDescription>
diff --git a/src/blackberry10/native/device/libGlobalization.so b/src/blackberry10/native/device/libGlobalization.so
new file mode 100755
index 0000000..3b39fcc
--- /dev/null
+++ b/src/blackberry10/native/device/libGlobalization.so
Binary files differ
diff --git a/src/blackberry10/native/public/json/autolink.h b/src/blackberry10/native/public/json/autolink.h
new file mode 100644
index 0000000..21904b9
--- /dev/null
+++ b/src/blackberry10/native/public/json/autolink.h
@@ -0,0 +1,46 @@
+// Copyright 2007-2010 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+/*
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+
+#ifndef JSON_AUTOLINK_H_INCLUDED
+# define JSON_AUTOLINK_H_INCLUDED
+
+# include "config.h"
+
+# ifdef JSON_IN_CPPTL
+#  include <cpptl/cpptl_autolink.h>
+# endif
+
+# if !defined(JSON_NO_AUTOLINK)  &&  !defined(JSON_DLL_BUILD)  &&  !defined(JSON_IN_CPPTL)
+#  define CPPTL_AUTOLINK_NAME "json"
+#  undef CPPTL_AUTOLINK_DLL
+#  ifdef JSON_DLL
+#   define CPPTL_AUTOLINK_DLL
+#  endif
+#  include "autolink.h"
+# endif
+
+#endif // JSON_AUTOLINK_H_INCLUDED
diff --git a/src/blackberry10/native/public/json/config.h b/src/blackberry10/native/public/json/config.h
new file mode 100644
index 0000000..8ca83f2
--- /dev/null
+++ b/src/blackberry10/native/public/json/config.h
@@ -0,0 +1,70 @@
+// Copyright 2007-2010 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+/*
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+
+#ifndef JSON_CONFIG_H_INCLUDED
+# define JSON_CONFIG_H_INCLUDED
+
+/// If defined, indicates that json library is embedded in CppTL library.
+//# define JSON_IN_CPPTL 1
+
+/// If defined, indicates that json may leverage CppTL library
+//#  define JSON_USE_CPPTL 1
+/// If defined, indicates that cpptl vector based map should be used instead of std::map
+/// as Value container.
+//#  define JSON_USE_CPPTL_SMALLMAP 1
+/// If defined, indicates that Json specific container should be used
+/// (hash table & simple deque container with customizable allocator).
+/// THIS FEATURE IS STILL EXPERIMENTAL!
+//#  define JSON_VALUE_USE_INTERNAL_MAP 1
+/// Force usage of standard new/malloc based allocator instead of memory pool based allocator.
+/// The memory pools allocator used optimization (initializing Value and ValueInternalLink
+/// as if it was a POD) that may cause some validation tool to report errors.
+/// Only has effects if JSON_VALUE_USE_INTERNAL_MAP is defined.
+//#  define JSON_USE_SIMPLE_INTERNAL_ALLOCATOR 1
+
+/// If defined, indicates that Json use exception to report invalid type manipulation
+/// instead of C assert macro.
+# define JSON_USE_EXCEPTION 1
+
+# ifdef JSON_IN_CPPTL
+#  include <cpptl/config.h>
+#  ifndef JSON_USE_CPPTL
+#   define JSON_USE_CPPTL 1
+#  endif
+# endif
+
+# ifdef JSON_IN_CPPTL
+#  define JSON_API CPPTL_API
+# elif defined(JSON_DLL_BUILD)
+#  define JSON_API __declspec(dllexport)
+# elif defined(JSON_DLL)
+#  define JSON_API __declspec(dllimport)
+# else
+#  define JSON_API
+# endif
+
+#endif // JSON_CONFIG_H_INCLUDED
diff --git a/src/blackberry10/native/public/json/features.h b/src/blackberry10/native/public/json/features.h
new file mode 100644
index 0000000..a612d39
--- /dev/null
+++ b/src/blackberry10/native/public/json/features.h
@@ -0,0 +1,69 @@
+// Copyright 2007-2010 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+/*
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+
+#ifndef CPPTL_JSON_FEATURES_H_INCLUDED
+# define CPPTL_JSON_FEATURES_H_INCLUDED
+
+# include "forwards.h"
+
+namespace Json {
+
+   /** \brief Configuration passed to reader and writer.
+    * This configuration object can be used to force the Reader or Writer
+    * to behave in a standard conforming way.
+    */
+   class JSON_API Features
+   {
+   public:
+      /** \brief A configuration that allows all features and assumes all strings are UTF-8.
+       * - C & C++ comments are allowed
+       * - Root object can be any JSON value
+       * - Assumes Value strings are encoded in UTF-8
+       */
+      static Features all();
+
+      /** \brief A configuration that is strictly compatible with the JSON specification.
+       * - Comments are forbidden.
+       * - Root object must be either an array or an object value.
+       * - Assumes Value strings are encoded in UTF-8
+       */
+      static Features strictMode();
+
+      /** \brief Initialize the configuration like JsonConfig::allFeatures;
+       */
+      Features();
+
+      /// \c true if comments are allowed. Default: \c true.
+      bool allowComments_;
+
+      /// \c true if root must be either an array or an object value. Default: \c false.
+      bool strictRoot_;
+   };
+
+} // namespace Json
+
+#endif // CPPTL_JSON_FEATURES_H_INCLUDED
diff --git a/src/blackberry10/native/public/json/forwards.h b/src/blackberry10/native/public/json/forwards.h
new file mode 100644
index 0000000..37e4aa7
--- /dev/null
+++ b/src/blackberry10/native/public/json/forwards.h
@@ -0,0 +1,66 @@
+// Copyright 2007-2010 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+/*
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+
+#ifndef JSON_FORWARDS_H_INCLUDED
+# define JSON_FORWARDS_H_INCLUDED
+
+# include "config.h"
+
+namespace Json {
+
+   // writer.h
+   class FastWriter;
+   class StyledWriter;
+
+   // reader.h
+   class Reader;
+
+   // features.h
+   class Features;
+
+   // value.h
+   typedef int Int;
+   typedef unsigned int UInt;
+   class StaticString;
+   class Path;
+   class PathArgument;
+   class Value;
+   class ValueIteratorBase;
+   class ValueIterator;
+   class ValueConstIterator;
+#ifdef JSON_VALUE_USE_INTERNAL_MAP
+   class ValueAllocator;
+   class ValueMapAllocator;
+   class ValueInternalLink;
+   class ValueInternalArray;
+   class ValueInternalMap;
+#endif // #ifdef JSON_VALUE_USE_INTERNAL_MAP
+
+} // namespace Json
+
+
+#endif // JSON_FORWARDS_H_INCLUDED
diff --git a/src/blackberry10/native/public/json/json.h b/src/blackberry10/native/public/json/json.h
new file mode 100644
index 0000000..1b074ec
--- /dev/null
+++ b/src/blackberry10/native/public/json/json.h
@@ -0,0 +1,37 @@
+// Copyright 2007-2010 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+/*
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+
+#ifndef JSON_JSON_H_INCLUDED
+# define JSON_JSON_H_INCLUDED
+
+# include "autolink.h"
+# include "value.h"
+# include "reader.h"
+# include "writer.h"
+# include "features.h"
+
+#endif // JSON_JSON_H_INCLUDED
diff --git a/src/blackberry10/native/public/json/reader.h b/src/blackberry10/native/public/json/reader.h
new file mode 100644
index 0000000..f72e1a8
--- /dev/null
+++ b/src/blackberry10/native/public/json/reader.h
@@ -0,0 +1,223 @@
+// Copyright 2007-2010 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+/*
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+
+#ifndef CPPTL_JSON_READER_H_INCLUDED
+# define CPPTL_JSON_READER_H_INCLUDED
+
+# include "features.h"
+# include "value.h"
+# include <deque>
+# include <stack>
+# include <string>
+# include <iostream>
+
+namespace Json {
+
+   /** \brief Unserialize a <a HREF="http://www.json.org">JSON</a> document into a Value.
+    *
+    */
+   class JSON_API Reader
+   {
+   public:
+      typedef char Char;
+      typedef const Char *Location;
+
+      /** \brief Constructs a Reader allowing all features
+       * for parsing.
+       */
+      Reader();
+
+      /** \brief Constructs a Reader allowing the specified feature set
+       * for parsing.
+       */
+      Reader( const Features &features );
+
+      /** \brief Read a Value from a <a HREF="http://www.json.org">JSON</a> document.
+       * \param document UTF-8 encoded string containing the document to read.
+       * \param root [out] Contains the root value of the document if it was
+       *             successfully parsed.
+       * \param collectComments \c true to collect comment and allow writing them back during
+       *                        serialization, \c false to discard comments.
+       *                        This parameter is ignored if Features::allowComments_
+       *                        is \c false.
+       * \return \c true if the document was successfully parsed, \c false if an error occurred.
+       */
+      bool parse( const std::string &document, 
+                  Value &root,
+                  bool collectComments = true );
+
+      /** \brief Read a Value from a <a HREF="http://www.json.org">JSON</a> document.
+       * \param document UTF-8 encoded string containing the document to read.
+       * \param root [out] Contains the root value of the document if it was
+       *             successfully parsed.
+       * \param collectComments \c true to collect comment and allow writing them back during
+       *                        serialization, \c false to discard comments.
+       *                        This parameter is ignored if Features::allowComments_
+       *                        is \c false.
+       * \return \c true if the document was successfully parsed, \c false if an error occurred.
+       */
+      bool parse( const char *beginDoc, const char *endDoc, 
+                  Value &root,
+                  bool collectComments = true );
+
+      /// \brief Parse from input stream.
+      /// \see Json::operator>>(std::istream&, Json::Value&).
+      bool parse( std::istream &is,
+                  Value &root,
+                  bool collectComments = true );
+
+      /** \brief Returns a user friendly string that list errors in the parsed document.
+       * \return Formatted error message with the list of errors with their location in 
+       *         the parsed document. An empty string is returned if no error occurred
+       *         during parsing.
+       */
+      std::string getFormatedErrorMessages() const;
+
+   private:
+      enum TokenType
+      {
+         tokenEndOfStream = 0,
+         tokenObjectBegin,
+         tokenObjectEnd,
+         tokenArrayBegin,
+         tokenArrayEnd,
+         tokenString,
+         tokenNumber,
+         tokenTrue,
+         tokenFalse,
+         tokenNull,
+         tokenArraySeparator,
+         tokenMemberSeparator,
+         tokenComment,
+         tokenError
+      };
+
+      class Token
+      {
+      public:
+         TokenType type_;
+         Location start_;
+         Location end_;
+      };
+
+      class ErrorInfo
+      {
+      public:
+         Token token_;
+         std::string message_;
+         Location extra_;
+      };
+
+      typedef std::deque<ErrorInfo> Errors;
+
+      bool expectToken( TokenType type, Token &token, const char *message );
+      bool readToken( Token &token );
+      void skipSpaces();
+      bool match( Location pattern, 
+                  int patternLength );
+      bool readComment();
+      bool readCStyleComment();
+      bool readCppStyleComment();
+      bool readString();
+      void readNumber();
+      bool readValue();
+      bool readObject( Token &token );
+      bool readArray( Token &token );
+      bool decodeNumber( Token &token );
+      bool decodeString( Token &token );
+      bool decodeString( Token &token, std::string &decoded );
+      bool decodeDouble( Token &token );
+      bool decodeUnicodeCodePoint( Token &token, 
+                                   Location &current, 
+                                   Location end, 
+                                   unsigned int &unicode );
+      bool decodeUnicodeEscapeSequence( Token &token, 
+                                        Location &current, 
+                                        Location end, 
+                                        unsigned int &unicode );
+      bool addError( const std::string &message, 
+                     Token &token,
+                     Location extra = 0 );
+      bool recoverFromError( TokenType skipUntilToken );
+      bool addErrorAndRecover( const std::string &message, 
+                               Token &token,
+                               TokenType skipUntilToken );
+      void skipUntilSpace();
+      Value &currentValue();
+      Char getNextChar();
+      void getLocationLineAndColumn( Location location,
+                                     int &line,
+                                     int &column ) const;
+      std::string getLocationLineAndColumn( Location location ) const;
+      void addComment( Location begin, 
+                       Location end, 
+                       CommentPlacement placement );
+      void skipCommentTokens( Token &token );
+   
+      typedef std::stack<Value *> Nodes;
+      Nodes nodes_;
+      Errors errors_;
+      std::string document_;
+      Location begin_;
+      Location end_;
+      Location current_;
+      Location lastValueEnd_;
+      Value *lastValue_;
+      std::string commentsBefore_;
+      Features features_;
+      bool collectComments_;
+   };
+
+   /** \brief Read from 'sin' into 'root'.
+
+    Always keep comments from the input JSON.
+
+    This can be used to read a file into a particular sub-object.
+    For example:
+    \code
+    Json::Value root;
+    cin >> root["dir"]["file"];
+    cout << root;
+    \endcode
+    Result:
+    \verbatim
+    {
+	"dir": {
+	    "file": {
+		// The input stream JSON would be nested here.
+	    }
+	}
+    }
+    \endverbatim
+    \throw std::exception on parse error.
+    \see Json::operator<<()
+   */
+   std::istream& operator>>( std::istream&, Value& );
+
+} // namespace Json
+
+#endif // CPPTL_JSON_READER_H_INCLUDED
diff --git a/src/blackberry10/native/public/json/value.h b/src/blackberry10/native/public/json/value.h
new file mode 100644
index 0000000..c1df70e
--- /dev/null
+++ b/src/blackberry10/native/public/json/value.h
@@ -0,0 +1,1096 @@
+// Copyright 2007-2010 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+/*
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+
+#ifndef CPPTL_JSON_H_INCLUDED
+# define CPPTL_JSON_H_INCLUDED
+
+# include "forwards.h"
+# include <string>
+# include <vector>
+
+# ifndef JSON_USE_CPPTL_SMALLMAP
+#  include <map>
+# else
+#  include <cpptl/smallmap.h>
+# endif
+# ifdef JSON_USE_CPPTL
+#  include <cpptl/forwards.h>
+# endif
+
+/** \brief JSON (JavaScript Object Notation).
+ */
+namespace Json {
+
+   /** \brief Type of the value held by a Value object.
+    */
+   enum ValueType
+   {
+      nullValue = 0, ///< 'null' value
+      intValue,      ///< signed integer value
+      uintValue,     ///< unsigned integer value
+      realValue,     ///< double value
+      stringValue,   ///< UTF-8 string value
+      booleanValue,  ///< bool value
+      arrayValue,    ///< array value (ordered list)
+      objectValue    ///< object value (collection of name/value pairs).
+   };
+
+   enum CommentPlacement
+   {
+      commentBefore = 0,        ///< a comment placed on the line before a value
+      commentAfterOnSameLine,   ///< a comment just after a value on the same line
+      commentAfter,             ///< a comment on the line after a value (only make sense for root value)
+      numberOfCommentPlacement
+   };
+
+//# ifdef JSON_USE_CPPTL
+//   typedef CppTL::AnyEnumerator<const char *> EnumMemberNames;
+//   typedef CppTL::AnyEnumerator<const Value &> EnumValues;
+//# endif
+
+   /** \brief Lightweight wrapper to tag static string.
+    *
+    * Value constructor and objectValue member assignement takes advantage of the
+    * StaticString and avoid the cost of string duplication when storing the
+    * string or the member name.
+    *
+    * Example of usage:
+    * \code
+    * Json::Value aValue( StaticString("some text") );
+    * Json::Value object;
+    * static const StaticString code("code");
+    * object[code] = 1234;
+    * \endcode
+    */
+   class JSON_API StaticString
+   {
+   public:
+      explicit StaticString( const char *czstring )
+         : str_( czstring )
+      {
+      }
+
+      operator const char *() const
+      {
+         return str_;
+      }
+
+      const char *c_str() const
+      {
+         return str_;
+      }
+
+   private:
+      const char *str_;
+   };
+
+   /** \brief Represents a <a HREF="http://www.json.org">JSON</a> value.
+    *
+    * This class is a discriminated union wrapper that can represents a:
+    * - signed integer [range: Value::minInt - Value::maxInt]
+    * - unsigned integer (range: 0 - Value::maxUInt)
+    * - double
+    * - UTF-8 string
+    * - boolean
+    * - 'null'
+    * - an ordered list of Value
+    * - collection of name/value pairs (javascript object)
+    *
+    * The type of the held value is represented by a #ValueType and 
+    * can be obtained using type().
+    *
+    * values of an #objectValue or #arrayValue can be accessed using operator[]() methods. 
+    * Non const methods will automatically create the a #nullValue element 
+    * if it does not exist. 
+    * The sequence of an #arrayValue will be automatically resize and initialized 
+    * with #nullValue. resize() can be used to enlarge or truncate an #arrayValue.
+    *
+    * The get() methods can be used to obtanis default value in the case the required element
+    * does not exist.
+    *
+    * It is possible to iterate over the list of a #objectValue values using 
+    * the getMemberNames() method.
+    */
+   class JSON_API Value 
+   {
+      friend class ValueIteratorBase;
+# ifdef JSON_VALUE_USE_INTERNAL_MAP
+      friend class ValueInternalLink;
+      friend class ValueInternalMap;
+# endif
+   public:
+      typedef std::vector<std::string> Members;
+      typedef ValueIterator iterator;
+      typedef ValueConstIterator const_iterator;
+      typedef Json::UInt UInt;
+      typedef Json::Int Int;
+      typedef UInt ArrayIndex;
+
+      static const Value null;
+      static const Int minInt;
+      static const Int maxInt;
+      static const UInt maxUInt;
+
+   private:
+#ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION
+# ifndef JSON_VALUE_USE_INTERNAL_MAP
+      class CZString 
+      {
+      public:
+         enum DuplicationPolicy 
+         {
+            noDuplication = 0,
+            duplicate,
+            duplicateOnCopy
+         };
+         CZString( int index );
+         CZString( const char *cstr, DuplicationPolicy allocate );
+         CZString( const CZString &other );
+         ~CZString();
+         CZString &operator =( const CZString &other );
+         bool operator<( const CZString &other ) const;
+         bool operator==( const CZString &other ) const;
+         int index() const;
+         const char *c_str() const;
+         bool isStaticString() const;
+      private:
+         void swap( CZString &other );
+         const char *cstr_;
+         int index_;
+      };
+
+   public:
+#  ifndef JSON_USE_CPPTL_SMALLMAP
+      typedef std::map<CZString, Value> ObjectValues;
+#  else
+      typedef CppTL::SmallMap<CZString, Value> ObjectValues;
+#  endif // ifndef JSON_USE_CPPTL_SMALLMAP
+# endif // ifndef JSON_VALUE_USE_INTERNAL_MAP
+#endif // ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION
+
+   public:
+      /** \brief Create a default Value of the given type.
+
+        This is a very useful constructor.
+        To create an empty array, pass arrayValue.
+        To create an empty object, pass objectValue.
+        Another Value can then be set to this one by assignment.
+	This is useful since clear() and resize() will not alter types.
+
+        Examples:
+	\code
+	Json::Value null_value; // null
+	Json::Value arr_value(Json::arrayValue); // []
+	Json::Value obj_value(Json::objectValue); // {}
+	\endcode
+      */
+      Value( ValueType type = nullValue );
+      Value( Int value );
+      Value( UInt value );
+      Value( double value );
+      Value( const char *value );
+      Value( const char *beginValue, const char *endValue );
+      /** \brief Constructs a value from a static string.
+
+       * Like other value string constructor but do not duplicate the string for
+       * internal storage. The given string must remain alive after the call to this
+       * constructor.
+       * Example of usage:
+       * \code
+       * Json::Value aValue( StaticString("some text") );
+       * \endcode
+       */
+      Value( const StaticString &value );
+      Value( const std::string &value );
+# ifdef JSON_USE_CPPTL
+      Value( const CppTL::ConstString &value );
+# endif
+      Value( bool value );
+      Value( const Value &other );
+      ~Value();
+
+      Value &operator=( const Value &other );
+      /// Swap values.
+      /// \note Currently, comments are intentionally not swapped, for
+      /// both logic and efficiency.
+      void swap( Value &other );
+
+      ValueType type() const;
+
+      bool operator <( const Value &other ) const;
+      bool operator <=( const Value &other ) const;
+      bool operator >=( const Value &other ) const;
+      bool operator >( const Value &other ) const;
+
+      bool operator ==( const Value &other ) const;
+      bool operator !=( const Value &other ) const;
+
+      int compare( const Value &other );
+
+      const char *asCString() const;
+      std::string asString() const;
+# ifdef JSON_USE_CPPTL
+      CppTL::ConstString asConstString() const;
+# endif
+      Int asInt() const;
+      UInt asUInt() const;
+      double asDouble() const;
+      bool asBool() const;
+
+      bool isNull() const;
+      bool isBool() const;
+      bool isInt() const;
+      bool isUInt() const;
+      bool isIntegral() const;
+      bool isDouble() const;
+      bool isNumeric() const;
+      bool isString() const;
+      bool isArray() const;
+      bool isObject() const;
+
+      bool isConvertibleTo( ValueType other ) const;
+
+      /// Number of values in array or object
+      UInt size() const;
+
+      /// \brief Return true if empty array, empty object, or null;
+      /// otherwise, false.
+      bool empty() const;
+
+      /// Return isNull()
+      bool operator!() const;
+
+      /// Remove all object members and array elements.
+      /// \pre type() is arrayValue, objectValue, or nullValue
+      /// \post type() is unchanged
+      void clear();
+
+      /// Resize the array to size elements. 
+      /// New elements are initialized to null.
+      /// May only be called on nullValue or arrayValue.
+      /// \pre type() is arrayValue or nullValue
+      /// \post type() is arrayValue
+      void resize( UInt size );
+
+      /// Access an array element (zero based index ).
+      /// If the array contains less than index element, then null value are inserted
+      /// in the array so that its size is index+1.
+      /// (You may need to say 'value[0u]' to get your compiler to distinguish
+      ///  this from the operator[] which takes a string.)
+      Value &operator[]( UInt index );
+      /// Access an array element (zero based index )
+      /// (You may need to say 'value[0u]' to get your compiler to distinguish
+      ///  this from the operator[] which takes a string.)
+      const Value &operator[]( UInt index ) const;
+      /// If the array contains at least index+1 elements, returns the element value, 
+      /// otherwise returns defaultValue.
+      Value get( UInt index, 
+                 const Value &defaultValue ) const;
+      /// Return true if index < size().
+      bool isValidIndex( UInt index ) const;
+      /// \brief Append value to array at the end.
+      ///
+      /// Equivalent to jsonvalue[jsonvalue.size()] = value;
+      Value &append( const Value &value );
+
+      /// Access an object value by name, create a null member if it does not exist.
+      Value &operator[]( const char *key );
+      /// Access an object value by name, returns null if there is no member with that name.
+      const Value &operator[]( const char *key ) const;
+      /// Access an object value by name, create a null member if it does not exist.
+      Value &operator[]( const std::string &key );
+      /// Access an object value by name, returns null if there is no member with that name.
+      const Value &operator[]( const std::string &key ) const;
+      /** \brief Access an object value by name, create a null member if it does not exist.
+
+       * If the object as no entry for that name, then the member name used to store
+       * the new entry is not duplicated.
+       * Example of use:
+       * \code
+       * Json::Value object;
+       * static const StaticString code("code");
+       * object[code] = 1234;
+       * \endcode
+       */
+      Value &operator[]( const StaticString &key );
+# ifdef JSON_USE_CPPTL
+      /// Access an object value by name, create a null member if it does not exist.
+      Value &operator[]( const CppTL::ConstString &key );
+      /// Access an object value by name, returns null if there is no member with that name.
+      const Value &operator[]( const CppTL::ConstString &key ) const;
+# endif
+      /// Return the member named key if it exist, defaultValue otherwise.
+      Value get( const char *key, 
+                 const Value &defaultValue ) const;
+      /// Return the member named key if it exist, defaultValue otherwise.
+      Value get( const std::string &key,
+                 const Value &defaultValue ) const;
+# ifdef JSON_USE_CPPTL
+      /// Return the member named key if it exist, defaultValue otherwise.
+      Value get( const CppTL::ConstString &key,
+                 const Value &defaultValue ) const;
+# endif
+      /// \brief Remove and return the named member.  
+      ///
+      /// Do nothing if it did not exist.
+      /// \return the removed Value, or null.
+      /// \pre type() is objectValue or nullValue
+      /// \post type() is unchanged
+      Value removeMember( const char* key );
+      /// Same as removeMember(const char*)
+      Value removeMember( const std::string &key );
+
+      /// Return true if the object has a member named key.
+      bool isMember( const char *key ) const;
+      /// Return true if the object has a member named key.
+      bool isMember( const std::string &key ) const;
+# ifdef JSON_USE_CPPTL
+      /// Return true if the object has a member named key.
+      bool isMember( const CppTL::ConstString &key ) const;
+# endif
+
+      /// \brief Return a list of the member names.
+      ///
+      /// If null, return an empty list.
+      /// \pre type() is objectValue or nullValue
+      /// \post if type() was nullValue, it remains nullValue
+      Members getMemberNames() const;
+
+//# ifdef JSON_USE_CPPTL
+//      EnumMemberNames enumMemberNames() const;
+//      EnumValues enumValues() const;
+//# endif
+
+      /// Comments must be //... or /* ... */
+      void setComment( const char *comment,
+                       CommentPlacement placement );
+      /// Comments must be //... or /* ... */
+      void setComment( const std::string &comment,
+                       CommentPlacement placement );
+      bool hasComment( CommentPlacement placement ) const;
+      /// Include delimiters and embedded newlines.
+      std::string getComment( CommentPlacement placement ) const;
+
+      std::string toStyledString() const;
+
+      const_iterator begin() const;
+      const_iterator end() const;
+
+      iterator begin();
+      iterator end();
+
+   private:
+      Value &resolveReference( const char *key, 
+                               bool isStatic );
+
+# ifdef JSON_VALUE_USE_INTERNAL_MAP
+      inline bool isItemAvailable() const
+      {
+         return itemIsUsed_ == 0;
+      }
+
+      inline void setItemUsed( bool isUsed = true )
+      {
+         itemIsUsed_ = isUsed ? 1 : 0;
+      }
+
+      inline bool isMemberNameStatic() const
+      {
+         return memberNameIsStatic_ == 0;
+      }
+
+      inline void setMemberNameIsStatic( bool isStatic )
+      {
+         memberNameIsStatic_ = isStatic ? 1 : 0;
+      }
+# endif // # ifdef JSON_VALUE_USE_INTERNAL_MAP
+
+   private:
+      struct CommentInfo
+      {
+         CommentInfo();
+         ~CommentInfo();
+
+         void setComment( const char *text );
+
+         char *comment_;
+      };
+
+      //struct MemberNamesTransform
+      //{
+      //   typedef const char *result_type;
+      //   const char *operator()( const CZString &name ) const
+      //   {
+      //      return name.c_str();
+      //   }
+      //};
+
+      union ValueHolder
+      {
+         Int int_;
+         UInt uint_;
+         double real_;
+         bool bool_;
+         char *string_;
+# ifdef JSON_VALUE_USE_INTERNAL_MAP
+         ValueInternalArray *array_;
+         ValueInternalMap *map_;
+#else
+         ObjectValues *map_;
+# endif
+      } value_;
+      ValueType type_ : 8;
+      int allocated_ : 1;     // Notes: if declared as bool, bitfield is useless.
+# ifdef JSON_VALUE_USE_INTERNAL_MAP
+      unsigned int itemIsUsed_ : 1;      // used by the ValueInternalMap container.
+      int memberNameIsStatic_ : 1;       // used by the ValueInternalMap container.
+# endif
+      CommentInfo *comments_;
+   };
+
+
+   /** \brief Experimental and untested: represents an element of the "path" to access a node.
+    */
+   class PathArgument
+   {
+   public:
+      friend class Path;
+
+      PathArgument();
+      PathArgument( UInt index );
+      PathArgument( const char *key );
+      PathArgument( const std::string &key );
+
+   private:
+      enum Kind
+      {
+         kindNone = 0,
+         kindIndex,
+         kindKey
+      };
+      std::string key_;
+      UInt index_;
+      Kind kind_;
+   };
+
+   /** \brief Experimental and untested: represents a "path" to access a node.
+    *
+    * Syntax:
+    * - "." => root node
+    * - ".[n]" => elements at index 'n' of root node (an array value)
+    * - ".name" => member named 'name' of root node (an object value)
+    * - ".name1.name2.name3"
+    * - ".[0][1][2].name1[3]"
+    * - ".%" => member name is provided as parameter
+    * - ".[%]" => index is provied as parameter
+    */
+   class Path
+   {
+   public:
+      Path( const std::string &path,
+            const PathArgument &a1 = PathArgument(),
+            const PathArgument &a2 = PathArgument(),
+            const PathArgument &a3 = PathArgument(),
+            const PathArgument &a4 = PathArgument(),
+            const PathArgument &a5 = PathArgument() );
+
+      const Value &resolve( const Value &root ) const;
+      Value resolve( const Value &root, 
+                     const Value &defaultValue ) const;
+      /// Creates the "path" to access the specified node and returns a reference on the node.
+      Value &make( Value &root ) const;
+
+   private:
+      typedef std::vector<const PathArgument *> InArgs;
+      typedef std::vector<PathArgument> Args;
+
+      void makePath( const std::string &path,
+                     const InArgs &in );
+      void addPathInArg( const std::string &path, 
+                         const InArgs &in, 
+                         InArgs::const_iterator &itInArg, 
+                         PathArgument::Kind kind );
+      void invalidPath( const std::string &path, 
+                        int location );
+
+      Args args_;
+   };
+
+   /** \brief Experimental do not use: Allocator to customize member name and string value memory management done by Value.
+    *
+    * - makeMemberName() and releaseMemberName() are called to respectively duplicate and
+    *   free an Json::objectValue member name.
+    * - duplicateStringValue() and releaseStringValue() are called similarly to
+    *   duplicate and free a Json::stringValue value.
+    */
+   class ValueAllocator
+   {
+   public:
+      enum { unknown = (unsigned)-1 };
+
+      virtual ~ValueAllocator();
+
+      virtual char *makeMemberName( const char *memberName ) = 0;
+      virtual void releaseMemberName( char *memberName ) = 0;
+      virtual char *duplicateStringValue( const char *value, 
+                                          unsigned int length = unknown ) = 0;
+      virtual void releaseStringValue( char *value ) = 0;
+   };
+
+#ifdef JSON_VALUE_USE_INTERNAL_MAP
+   /** \brief Allocator to customize Value internal map.
+    * Below is an example of a simple implementation (default implementation actually
+    * use memory pool for speed).
+    * \code
+      class DefaultValueMapAllocator : public ValueMapAllocator
+      {
+      public: // overridden from ValueMapAllocator
+         virtual ValueInternalMap *newMap()
+         {
+            return new ValueInternalMap();
+         }
+
+         virtual ValueInternalMap *newMapCopy( const ValueInternalMap &other )
+         {
+            return new ValueInternalMap( other );
+         }
+
+         virtual void destructMap( ValueInternalMap *map )
+         {
+            delete map;
+         }
+
+         virtual ValueInternalLink *allocateMapBuckets( unsigned int size )
+         {
+            return new ValueInternalLink[size];
+         }
+
+         virtual void releaseMapBuckets( ValueInternalLink *links )
+         {
+            delete [] links;
+         }
+
+         virtual ValueInternalLink *allocateMapLink()
+         {
+            return new ValueInternalLink();
+         }
+
+         virtual void releaseMapLink( ValueInternalLink *link )
+         {
+            delete link;
+         }
+      };
+    * \endcode
+    */ 
+   class JSON_API ValueMapAllocator
+   {
+   public:
+      virtual ~ValueMapAllocator();
+      virtual ValueInternalMap *newMap() = 0;
+      virtual ValueInternalMap *newMapCopy( const ValueInternalMap &other ) = 0;
+      virtual void destructMap( ValueInternalMap *map ) = 0;
+      virtual ValueInternalLink *allocateMapBuckets( unsigned int size ) = 0;
+      virtual void releaseMapBuckets( ValueInternalLink *links ) = 0;
+      virtual ValueInternalLink *allocateMapLink() = 0;
+      virtual void releaseMapLink( ValueInternalLink *link ) = 0;
+   };
+
+   /** \brief ValueInternalMap hash-map bucket chain link (for internal use only).
+    * \internal previous_ & next_ allows for bidirectional traversal.
+    */
+   class JSON_API ValueInternalLink
+   {
+   public:
+      enum { itemPerLink = 6 };  // sizeof(ValueInternalLink) = 128 on 32 bits architecture.
+      enum InternalFlags { 
+         flagAvailable = 0,
+         flagUsed = 1
+      };
+
+      ValueInternalLink();
+
+      ~ValueInternalLink();
+
+      Value items_[itemPerLink];
+      char *keys_[itemPerLink];
+      ValueInternalLink *previous_;
+      ValueInternalLink *next_;
+   };
+
+
+   /** \brief A linked page based hash-table implementation used internally by Value.
+    * \internal ValueInternalMap is a tradional bucket based hash-table, with a linked
+    * list in each bucket to handle collision. There is an addional twist in that
+    * each node of the collision linked list is a page containing a fixed amount of
+    * value. This provides a better compromise between memory usage and speed.
+    * 
+    * Each bucket is made up of a chained list of ValueInternalLink. The last
+    * link of a given bucket can be found in the 'previous_' field of the following bucket.
+    * The last link of the last bucket is stored in tailLink_ as it has no following bucket.
+    * Only the last link of a bucket may contains 'available' item. The last link always
+    * contains at least one element unless is it the bucket one very first link.
+    */
+   class JSON_API ValueInternalMap
+   {
+      friend class ValueIteratorBase;
+      friend class Value;
+   public:
+      typedef unsigned int HashKey;
+      typedef unsigned int BucketIndex;
+
+# ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION
+      struct IteratorState
+      {
+         IteratorState() 
+            : map_(0)
+            , link_(0)
+            , itemIndex_(0)
+            , bucketIndex_(0) 
+         {
+         }
+         ValueInternalMap *map_;
+         ValueInternalLink *link_;
+         BucketIndex itemIndex_;
+         BucketIndex bucketIndex_;
+      };
+# endif // ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION
+
+      ValueInternalMap();
+      ValueInternalMap( const ValueInternalMap &other );
+      ValueInternalMap &operator =( const ValueInternalMap &other );
+      ~ValueInternalMap();
+
+      void swap( ValueInternalMap &other );
+
+      BucketIndex size() const;
+
+      void clear();
+
+      bool reserveDelta( BucketIndex growth );
+
+      bool reserve( BucketIndex newItemCount );
+
+      const Value *find( const char *key ) const;
+
+      Value *find( const char *key );
+
+      Value &resolveReference( const char *key, 
+                               bool isStatic );
+
+      void remove( const char *key );
+
+      void doActualRemove( ValueInternalLink *link, 
+                           BucketIndex index,
+                           BucketIndex bucketIndex );
+
+      ValueInternalLink *&getLastLinkInBucket( BucketIndex bucketIndex );
+
+      Value &setNewItem( const char *key, 
+                         bool isStatic, 
+                         ValueInternalLink *link, 
+                         BucketIndex index );
+
+      Value &unsafeAdd( const char *key, 
+                        bool isStatic, 
+                        HashKey hashedKey );
+
+      HashKey hash( const char *key ) const;
+
+      int compare( const ValueInternalMap &other ) const;
+
+   private:
+      void makeBeginIterator( IteratorState &it ) const;
+      void makeEndIterator( IteratorState &it ) const;
+      static bool equals( const IteratorState &x, const IteratorState &other );
+      static void increment( IteratorState &iterator );
+      static void incrementBucket( IteratorState &iterator );
+      static void decrement( IteratorState &iterator );
+      static const char *key( const IteratorState &iterator );
+      static const char *key( const IteratorState &iterator, bool &isStatic );
+      static Value &value( const IteratorState &iterator );
+      static int distance( const IteratorState &x, const IteratorState &y );
+
+   private:
+      ValueInternalLink *buckets_;
+      ValueInternalLink *tailLink_;
+      BucketIndex bucketsSize_;
+      BucketIndex itemCount_;
+   };
+
+   /** \brief A simplified deque implementation used internally by Value.
+   * \internal
+   * It is based on a list of fixed "page", each page contains a fixed number of items.
+   * Instead of using a linked-list, a array of pointer is used for fast item look-up.
+   * Look-up for an element is as follow:
+   * - compute page index: pageIndex = itemIndex / itemsPerPage
+   * - look-up item in page: pages_[pageIndex][itemIndex % itemsPerPage]
+   *
+   * Insertion is amortized constant time (only the array containing the index of pointers
+   * need to be reallocated when items are appended).
+   */
+   class JSON_API ValueInternalArray
+   {
+      friend class Value;
+      friend class ValueIteratorBase;
+   public:
+      enum { itemsPerPage = 8 };    // should be a power of 2 for fast divide and modulo.
+      typedef Value::ArrayIndex ArrayIndex;
+      typedef unsigned int PageIndex;
+
+# ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION
+      struct IteratorState // Must be a POD
+      {
+         IteratorState() 
+            : array_(0)
+            , currentPageIndex_(0)
+            , currentItemIndex_(0) 
+         {
+         }
+         ValueInternalArray *array_;
+         Value **currentPageIndex_;
+         unsigned int currentItemIndex_;
+      };
+# endif // ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION
+
+      ValueInternalArray();
+      ValueInternalArray( const ValueInternalArray &other );
+      ValueInternalArray &operator =( const ValueInternalArray &other );
+      ~ValueInternalArray();
+      void swap( ValueInternalArray &other );
+
+      void clear();
+      void resize( ArrayIndex newSize );
+
+      Value &resolveReference( ArrayIndex index );
+
+      Value *find( ArrayIndex index ) const;
+
+      ArrayIndex size() const;
+
+      int compare( const ValueInternalArray &other ) const;
+
+   private:
+      static bool equals( const IteratorState &x, const IteratorState &other );
+      static void increment( IteratorState &iterator );
+      static void decrement( IteratorState &iterator );
+      static Value &dereference( const IteratorState &iterator );
+      static Value &unsafeDereference( const IteratorState &iterator );
+      static int distance( const IteratorState &x, const IteratorState &y );
+      static ArrayIndex indexOf( const IteratorState &iterator );
+      void makeBeginIterator( IteratorState &it ) const;
+      void makeEndIterator( IteratorState &it ) const;
+      void makeIterator( IteratorState &it, ArrayIndex index ) const;
+
+      void makeIndexValid( ArrayIndex index );
+
+      Value **pages_;
+      ArrayIndex size_;
+      PageIndex pageCount_;
+   };
+
+   /** \brief Experimental: do not use. Allocator to customize Value internal array.
+    * Below is an example of a simple implementation (actual implementation use
+    * memory pool).
+      \code
+class DefaultValueArrayAllocator : public ValueArrayAllocator
+{
+public: // overridden from ValueArrayAllocator
+   virtual ~DefaultValueArrayAllocator()
+   {
+   }
+
+   virtual ValueInternalArray *newArray()
+   {
+      return new ValueInternalArray();
+   }
+
+   virtual ValueInternalArray *newArrayCopy( const ValueInternalArray &other )
+   {
+      return new ValueInternalArray( other );
+   }
+
+   virtual void destruct( ValueInternalArray *array )
+   {
+      delete array;
+   }
+
+   virtual void reallocateArrayPageIndex( Value **&indexes, 
+                                          ValueInternalArray::PageIndex &indexCount,
+                                          ValueInternalArray::PageIndex minNewIndexCount )
+   {
+      ValueInternalArray::PageIndex newIndexCount = (indexCount*3)/2 + 1;
+      if ( minNewIndexCount > newIndexCount )
+         newIndexCount = minNewIndexCount;
+      void *newIndexes = realloc( indexes, sizeof(Value*) * newIndexCount );
+      if ( !newIndexes )
+         throw std::bad_alloc();
+      indexCount = newIndexCount;
+      indexes = static_cast<Value **>( newIndexes );
+   }
+   virtual void releaseArrayPageIndex( Value **indexes, 
+                                       ValueInternalArray::PageIndex indexCount )
+   {
+      if ( indexes )
+         free( indexes );
+   }
+
+   virtual Value *allocateArrayPage()
+   {
+      return static_cast<Value *>( malloc( sizeof(Value) * ValueInternalArray::itemsPerPage ) );
+   }
+
+   virtual void releaseArrayPage( Value *value )
+   {
+      if ( value )
+         free( value );
+   }
+};
+      \endcode
+    */ 
+   class JSON_API ValueArrayAllocator
+   {
+   public:
+      virtual ~ValueArrayAllocator();
+      virtual ValueInternalArray *newArray() = 0;
+      virtual ValueInternalArray *newArrayCopy( const ValueInternalArray &other ) = 0;
+      virtual void destructArray( ValueInternalArray *array ) = 0;
+      /** \brief Reallocate array page index.
+       * Reallocates an array of pointer on each page.
+       * \param indexes [input] pointer on the current index. May be \c NULL.
+       *                [output] pointer on the new index of at least 
+       *                         \a minNewIndexCount pages. 
+       * \param indexCount [input] current number of pages in the index.
+       *                   [output] number of page the reallocated index can handle.
+       *                            \b MUST be >= \a minNewIndexCount.
+       * \param minNewIndexCount Minimum number of page the new index must be able to
+       *                         handle.
+       */
+      virtual void reallocateArrayPageIndex( Value **&indexes, 
+                                             ValueInternalArray::PageIndex &indexCount,
+                                             ValueInternalArray::PageIndex minNewIndexCount ) = 0;
+      virtual void releaseArrayPageIndex( Value **indexes, 
+                                          ValueInternalArray::PageIndex indexCount ) = 0;
+      virtual Value *allocateArrayPage() = 0;
+      virtual void releaseArrayPage( Value *value ) = 0;
+   };
+#endif // #ifdef JSON_VALUE_USE_INTERNAL_MAP
+
+
+   /** \brief base class for Value iterators.
+    *
+    */
+   class ValueIteratorBase
+   {
+   public:
+      typedef unsigned int size_t;
+      typedef int difference_type;
+      typedef ValueIteratorBase SelfType;
+
+      ValueIteratorBase();
+#ifndef JSON_VALUE_USE_INTERNAL_MAP
+      explicit ValueIteratorBase( const Value::ObjectValues::iterator &current );
+#else
+      ValueIteratorBase( const ValueInternalArray::IteratorState &state );
+      ValueIteratorBase( const ValueInternalMap::IteratorState &state );
+#endif
+
+      bool operator ==( const SelfType &other ) const
+      {
+         return isEqual( other );
+      }
+
+      bool operator !=( const SelfType &other ) const
+      {
+         return !isEqual( other );
+      }
+
+      difference_type operator -( const SelfType &other ) const
+      {
+         return computeDistance( other );
+      }
+
+      /// Return either the index or the member name of the referenced value as a Value.
+      Value key() const;
+
+      /// Return the index of the referenced Value. -1 if it is not an arrayValue.
+      UInt index() const;
+
+      /// Return the member name of the referenced Value. "" if it is not an objectValue.
+      const char *memberName() const;
+
+   protected:
+      Value &deref() const;
+
+      void increment();
+
+      void decrement();
+
+      difference_type computeDistance( const SelfType &other ) const;
+
+      bool isEqual( const SelfType &other ) const;
+
+      void copy( const SelfType &other );
+
+   private:
+#ifndef JSON_VALUE_USE_INTERNAL_MAP
+      Value::ObjectValues::iterator current_;
+      // Indicates that iterator is for a null value.
+      bool isNull_;
+#else
+      union
+      {
+         ValueInternalArray::IteratorState array_;
+         ValueInternalMap::IteratorState map_;
+      } iterator_;
+      bool isArray_;
+#endif
+   };
+
+   /** \brief const iterator for object and array value.
+    *
+    */
+   class ValueConstIterator : public ValueIteratorBase
+   {
+      friend class Value;
+   public:
+      typedef unsigned int size_t;
+      typedef int difference_type;
+      typedef const Value &reference;
+      typedef const Value *pointer;
+      typedef ValueConstIterator SelfType;
+
+      ValueConstIterator();
+   private:
+      /*! \internal Use by Value to create an iterator.
+       */
+#ifndef JSON_VALUE_USE_INTERNAL_MAP
+      explicit ValueConstIterator( const Value::ObjectValues::iterator &current );
+#else
+      ValueConstIterator( const ValueInternalArray::IteratorState &state );
+      ValueConstIterator( const ValueInternalMap::IteratorState &state );
+#endif
+   public:
+      SelfType &operator =( const ValueIteratorBase &other );
+
+      SelfType operator++( int )
+      {
+         SelfType temp( *this );
+         ++*this;
+         return temp;
+      }
+
+      SelfType operator--( int )
+      {
+         SelfType temp( *this );
+         --*this;
+         return temp;
+      }
+
+      SelfType &operator--()
+      {
+         decrement();
+         return *this;
+      }
+
+      SelfType &operator++()
+      {
+         increment();
+         return *this;
+      }
+
+      reference operator *() const
+      {
+         return deref();
+      }
+   };
+
+
+   /** \brief Iterator for object and array value.
+    */
+   class ValueIterator : public ValueIteratorBase
+   {
+      friend class Value;
+   public:
+      typedef unsigned int size_t;
+      typedef int difference_type;
+      typedef Value &reference;
+      typedef Value *pointer;
+      typedef ValueIterator SelfType;
+
+      ValueIterator();
+      ValueIterator( const ValueConstIterator &other );
+      ValueIterator( const ValueIterator &other );
+   private:
+      /*! \internal Use by Value to create an iterator.
+       */
+#ifndef JSON_VALUE_USE_INTERNAL_MAP
+      explicit ValueIterator( const Value::ObjectValues::iterator &current );
+#else
+      ValueIterator( const ValueInternalArray::IteratorState &state );
+      ValueIterator( const ValueInternalMap::IteratorState &state );
+#endif
+   public:
+
+      SelfType &operator =( const SelfType &other );
+
+      SelfType operator++( int )
+      {
+         SelfType temp( *this );
+         ++*this;
+         return temp;
+      }
+
+      SelfType operator--( int )
+      {
+         SelfType temp( *this );
+         --*this;
+         return temp;
+      }
+
+      SelfType &operator--()
+      {
+         decrement();
+         return *this;
+      }
+
+      SelfType &operator++()
+      {
+         increment();
+         return *this;
+      }
+
+      reference operator *() const
+      {
+         return deref();
+      }
+   };
+
+
+} // namespace Json
+
+
+#endif // CPPTL_JSON_H_INCLUDED
diff --git a/src/blackberry10/native/public/json/writer.h b/src/blackberry10/native/public/json/writer.h
new file mode 100644
index 0000000..da0ed7b
--- /dev/null
+++ b/src/blackberry10/native/public/json/writer.h
@@ -0,0 +1,201 @@
+// Copyright 2007-2010 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+/*
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+
+#ifndef JSON_WRITER_H_INCLUDED
+# define JSON_WRITER_H_INCLUDED
+
+# include "value.h"
+# include <vector>
+# include <string>
+# include <iostream>
+
+namespace Json {
+
+   class Value;
+
+   /** \brief Abstract class for writers.
+    */
+   class JSON_API Writer
+   {
+   public:
+      virtual ~Writer();
+
+      virtual std::string write( const Value &root ) = 0;
+   };
+
+   /** \brief Outputs a Value in <a HREF="http://www.json.org">JSON</a> format without formatting (not human friendly).
+    *
+    * The JSON document is written in a single line. It is not intended for 'human' consumption,
+    * but may be usefull to support feature such as RPC where bandwith is limited.
+    * \sa Reader, Value
+    */
+   class JSON_API FastWriter : public Writer
+   {
+   public:
+      FastWriter();
+      virtual ~FastWriter(){}
+
+      void enableYAMLCompatibility();
+
+   public: // overridden from Writer
+      virtual std::string write( const Value &root );
+
+   private:
+      void writeValue( const Value &value );
+
+      std::string document_;
+      bool yamlCompatiblityEnabled_;
+   };
+
+   /** \brief Writes a Value in <a HREF="http://www.json.org">JSON</a> format in a human friendly way.
+    *
+    * The rules for line break and indent are as follow:
+    * - Object value:
+    *     - if empty then print {} without indent and line break
+    *     - if not empty the print '{', line break & indent, print one value per line
+    *       and then unindent and line break and print '}'.
+    * - Array value:
+    *     - if empty then print [] without indent and line break
+    *     - if the array contains no object value, empty array or some other value types,
+    *       and all the values fit on one lines, then print the array on a single line.
+    *     - otherwise, it the values do not fit on one line, or the array contains
+    *       object or non empty array, then print one value per line.
+    *
+    * If the Value have comments then they are outputed according to their #CommentPlacement.
+    *
+    * \sa Reader, Value, Value::setComment()
+    */
+   class JSON_API StyledWriter: public Writer
+   {
+   public:
+      StyledWriter();
+      virtual ~StyledWriter(){}
+
+   public: // overridden from Writer
+      /** \brief Serialize a Value in <a HREF="http://www.json.org">JSON</a> format.
+       * \param root Value to serialize.
+       * \return String containing the JSON document that represents the root value.
+       */
+      virtual std::string write( const Value &root );
+
+   private:
+      void writeValue( const Value &value );
+      void writeArrayValue( const Value &value );
+      bool isMultineArray( const Value &value );
+      void pushValue( const std::string &value );
+      void writeIndent();
+      void writeWithIndent( const std::string &value );
+      void indent();
+      void unindent();
+      void writeCommentBeforeValue( const Value &root );
+      void writeCommentAfterValueOnSameLine( const Value &root );
+      bool hasCommentForValue( const Value &value );
+      static std::string normalizeEOL( const std::string &text );
+
+      typedef std::vector<std::string> ChildValues;
+
+      ChildValues childValues_;
+      std::string document_;
+      std::string indentString_;
+      int rightMargin_;
+      int indentSize_;
+      bool addChildValues_;
+   };
+
+   /** \brief Writes a Value in <a HREF="http://www.json.org">JSON</a> format in a human friendly way,
+        to a stream rather than to a string.
+    *
+    * The rules for line break and indent are as follow:
+    * - Object value:
+    *     - if empty then print {} without indent and line break
+    *     - if not empty the print '{', line break & indent, print one value per line
+    *       and then unindent and line break and print '}'.
+    * - Array value:
+    *     - if empty then print [] without indent and line break
+    *     - if the array contains no object value, empty array or some other value types,
+    *       and all the values fit on one lines, then print the array on a single line.
+    *     - otherwise, it the values do not fit on one line, or the array contains
+    *       object or non empty array, then print one value per line.
+    *
+    * If the Value have comments then they are outputed according to their #CommentPlacement.
+    *
+    * \param indentation Each level will be indented by this amount extra.
+    * \sa Reader, Value, Value::setComment()
+    */
+   class JSON_API StyledStreamWriter
+   {
+   public:
+      StyledStreamWriter( std::string indentation="\t" );
+      ~StyledStreamWriter(){}
+
+   public:
+      /** \brief Serialize a Value in <a HREF="http://www.json.org">JSON</a> format.
+       * \param out Stream to write to. (Can be ostringstream, e.g.)
+       * \param root Value to serialize.
+       * \note There is no point in deriving from Writer, since write() should not return a value.
+       */
+      void write( std::ostream &out, const Value &root );
+
+   private:
+      void writeValue( const Value &value );
+      void writeArrayValue( const Value &value );
+      bool isMultineArray( const Value &value );
+      void pushValue( const std::string &value );
+      void writeIndent();
+      void writeWithIndent( const std::string &value );
+      void indent();
+      void unindent();
+      void writeCommentBeforeValue( const Value &root );
+      void writeCommentAfterValueOnSameLine( const Value &root );
+      bool hasCommentForValue( const Value &value );
+      static std::string normalizeEOL( const std::string &text );
+
+      typedef std::vector<std::string> ChildValues;
+
+      ChildValues childValues_;
+      std::ostream* document_;
+      std::string indentString_;
+      int rightMargin_;
+      std::string indentation_;
+      bool addChildValues_;
+   };
+
+   std::string JSON_API valueToString( Int value );
+   std::string JSON_API valueToString( UInt value );
+   std::string JSON_API valueToString( double value );
+   std::string JSON_API valueToString( bool value );
+   std::string JSON_API valueToQuotedString( const char *value );
+
+   /// \brief Output using the StyledStreamWriter.
+   /// \see Json::operator>>()
+   std::ostream& operator<<( std::ostream&, const Value &root );
+
+} // namespace Json
+
+
+
+#endif // JSON_WRITER_H_INCLUDED
diff --git a/src/blackberry10/native/public/json_batchallocator.h b/src/blackberry10/native/public/json_batchallocator.h
new file mode 100644
index 0000000..559050b
--- /dev/null
+++ b/src/blackberry10/native/public/json_batchallocator.h
@@ -0,0 +1,149 @@
+// Copyright 2007-2010 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+/*
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+#ifndef JSONCPP_BATCHALLOCATOR_H_INCLUDED
+# define JSONCPP_BATCHALLOCATOR_H_INCLUDED
+
+# include <stdlib.h>
+# include <assert.h>
+
+# ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION
+
+namespace Json {
+
+/* Fast memory allocator.
+ *
+ * This memory allocator allocates memory for a batch of object (specified by
+ * the page size, the number of object in each page).
+ *
+ * It does not allow the destruction of a single object. All the allocated objects
+ * can be destroyed at once. The memory can be either released or reused for future
+ * allocation.
+ * 
+ * The in-place new operator must be used to construct the object using the pointer
+ * returned by allocate.
+ */
+template<typename AllocatedType
+        ,const unsigned int objectPerAllocation>
+class BatchAllocator
+{
+public:
+   typedef AllocatedType Type;
+
+   BatchAllocator( unsigned int objectsPerPage = 255 )
+      : freeHead_( 0 )
+      , objectsPerPage_( objectsPerPage )
+   {
+//      printf( "Size: %d => %s\n", sizeof(AllocatedType), typeid(AllocatedType).name() );
+      assert( sizeof(AllocatedType) * objectPerAllocation >= sizeof(AllocatedType *) ); // We must be able to store a slist in the object free space.
+      assert( objectsPerPage >= 16 );
+      batches_ = allocateBatch( 0 );   // allocated a dummy page
+      currentBatch_ = batches_;
+   }
+
+   ~BatchAllocator()
+   {
+      for ( BatchInfo *batch = batches_; batch;  )
+      {
+         BatchInfo *nextBatch = batch->next_;
+         free( batch );
+         batch = nextBatch;
+      }
+   }
+
+   /// allocate space for an array of objectPerAllocation object.
+   /// @warning it is the responsability of the caller to call objects constructors.
+   AllocatedType *allocate()
+   {
+      if ( freeHead_ ) // returns node from free list.
+      {
+         AllocatedType *object = freeHead_;
+         freeHead_ = *(AllocatedType **)object;
+         return object;
+      }
+      if ( currentBatch_->used_ == currentBatch_->end_ )
+      {
+         currentBatch_ = currentBatch_->next_;
+         while ( currentBatch_  &&  currentBatch_->used_ == currentBatch_->end_ )
+            currentBatch_ = currentBatch_->next_;
+
+         if ( !currentBatch_  ) // no free batch found, allocate a new one
+         { 
+            currentBatch_ = allocateBatch( objectsPerPage_ );
+            currentBatch_->next_ = batches_; // insert at the head of the list
+            batches_ = currentBatch_;
+         }
+      }
+      AllocatedType *allocated = currentBatch_->used_;
+      currentBatch_->used_ += objectPerAllocation;
+      return allocated;
+   }
+
+   /// Release the object.
+   /// @warning it is the responsability of the caller to actually destruct the object.
+   void release( AllocatedType *object )
+   {
+      assert( object != 0 );
+      *(AllocatedType **)object = freeHead_;
+      freeHead_ = object;
+   }
+
+private:
+   struct BatchInfo
+   {
+      BatchInfo *next_;
+      AllocatedType *used_;
+      AllocatedType *end_;
+      AllocatedType buffer_[objectPerAllocation];
+   };
+
+   // disabled copy constructor and assignement operator.
+   BatchAllocator( const BatchAllocator & );
+   void operator =( const BatchAllocator &);
+
+   static BatchInfo *allocateBatch( unsigned int objectsPerPage )
+   {
+      const unsigned int mallocSize = sizeof(BatchInfo) - sizeof(AllocatedType)* objectPerAllocation
+                                + sizeof(AllocatedType) * objectPerAllocation * objectsPerPage;
+      BatchInfo *batch = static_cast<BatchInfo*>( malloc( mallocSize ) );
+      batch->next_ = 0;
+      batch->used_ = batch->buffer_;
+      batch->end_ = batch->buffer_ + objectsPerPage;
+      return batch;
+   }
+
+   BatchInfo *batches_;
+   BatchInfo *currentBatch_;
+   /// Head of a single linked list within the allocated space of freeed object
+   AllocatedType *freeHead_;
+   unsigned int objectsPerPage_;
+};
+
+
+} // namespace Json
+
+# endif // ifndef JSONCPP_DOC_INCLUDE_IMPLEMENTATION
+
+#endif // JSONCPP_BATCHALLOCATOR_H_INCLUDED
+
diff --git a/src/blackberry10/native/public/json_internalarray.inl b/src/blackberry10/native/public/json_internalarray.inl
new file mode 100644
index 0000000..e207d74
--- /dev/null
+++ b/src/blackberry10/native/public/json_internalarray.inl
@@ -0,0 +1,474 @@
+// Copyright 2007-2010 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+/*
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+// included by json_value.cpp
+// everything is within Json namespace
+
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// class ValueInternalArray
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+
+ValueArrayAllocator::~ValueArrayAllocator()
+{
+}
+
+// //////////////////////////////////////////////////////////////////
+// class DefaultValueArrayAllocator
+// //////////////////////////////////////////////////////////////////
+#ifdef JSON_USE_SIMPLE_INTERNAL_ALLOCATOR
+class DefaultValueArrayAllocator : public ValueArrayAllocator
+{
+public: // overridden from ValueArrayAllocator
+   virtual ~DefaultValueArrayAllocator()
+   {
+   }
+
+   virtual ValueInternalArray *newArray()
+   {
+      return new ValueInternalArray();
+   }
+
+   virtual ValueInternalArray *newArrayCopy( const ValueInternalArray &other )
+   {
+      return new ValueInternalArray( other );
+   }
+
+   virtual void destructArray( ValueInternalArray *array )
+   {
+      delete array;
+   }
+
+   virtual void reallocateArrayPageIndex( Value **&indexes, 
+                                          ValueInternalArray::PageIndex &indexCount,
+                                          ValueInternalArray::PageIndex minNewIndexCount )
+   {
+      ValueInternalArray::PageIndex newIndexCount = (indexCount*3)/2 + 1;
+      if ( minNewIndexCount > newIndexCount )
+         newIndexCount = minNewIndexCount;
+      void *newIndexes = realloc( indexes, sizeof(Value*) * newIndexCount );
+      if ( !newIndexes )
+         throw std::bad_alloc();
+      indexCount = newIndexCount;
+      indexes = static_cast<Value **>( newIndexes );
+   }
+   virtual void releaseArrayPageIndex( Value **indexes, 
+                                       ValueInternalArray::PageIndex indexCount )
+   {
+      if ( indexes )
+         free( indexes );
+   }
+
+   virtual Value *allocateArrayPage()
+   {
+      return static_cast<Value *>( malloc( sizeof(Value) * ValueInternalArray::itemsPerPage ) );
+   }
+
+   virtual void releaseArrayPage( Value *value )
+   {
+      if ( value )
+         free( value );
+   }
+};
+
+#else // #ifdef JSON_USE_SIMPLE_INTERNAL_ALLOCATOR
+/// @todo make this thread-safe (lock when accessign batch allocator)
+class DefaultValueArrayAllocator : public ValueArrayAllocator
+{
+public: // overridden from ValueArrayAllocator
+   virtual ~DefaultValueArrayAllocator()
+   {
+   }
+
+   virtual ValueInternalArray *newArray()
+   {
+      ValueInternalArray *array = arraysAllocator_.allocate();
+      new (array) ValueInternalArray(); // placement new
+      return array;
+   }
+
+   virtual ValueInternalArray *newArrayCopy( const ValueInternalArray &other )
+   {
+      ValueInternalArray *array = arraysAllocator_.allocate();
+      new (array) ValueInternalArray( other ); // placement new
+      return array;
+   }
+
+   virtual void destructArray( ValueInternalArray *array )
+   {
+      if ( array )
+      {
+         array->~ValueInternalArray();
+         arraysAllocator_.release( array );
+      }
+   }
+
+   virtual void reallocateArrayPageIndex( Value **&indexes, 
+                                          ValueInternalArray::PageIndex &indexCount,
+                                          ValueInternalArray::PageIndex minNewIndexCount )
+   {
+      ValueInternalArray::PageIndex newIndexCount = (indexCount*3)/2 + 1;
+      if ( minNewIndexCount > newIndexCount )
+         newIndexCount = minNewIndexCount;
+      void *newIndexes = realloc( indexes, sizeof(Value*) * newIndexCount );
+      if ( !newIndexes )
+         throw std::bad_alloc();
+      indexCount = newIndexCount;
+      indexes = static_cast<Value **>( newIndexes );
+   }
+   virtual void releaseArrayPageIndex( Value **indexes, 
+                                       ValueInternalArray::PageIndex indexCount )
+   {
+      if ( indexes )
+         free( indexes );
+   }
+
+   virtual Value *allocateArrayPage()
+   {
+      return static_cast<Value *>( pagesAllocator_.allocate() );
+   }
+
+   virtual void releaseArrayPage( Value *value )
+   {
+      if ( value )
+         pagesAllocator_.release( value );
+   }
+private:
+   BatchAllocator<ValueInternalArray,1> arraysAllocator_;
+   BatchAllocator<Value,ValueInternalArray::itemsPerPage> pagesAllocator_;
+};
+#endif // #ifdef JSON_USE_SIMPLE_INTERNAL_ALLOCATOR
+
+static ValueArrayAllocator *&arrayAllocator()
+{
+   static DefaultValueArrayAllocator defaultAllocator;
+   static ValueArrayAllocator *arrayAllocator = &defaultAllocator;
+   return arrayAllocator;
+}
+
+static struct DummyArrayAllocatorInitializer {
+   DummyArrayAllocatorInitializer() 
+   {
+      arrayAllocator();      // ensure arrayAllocator() statics are initialized before main().
+   }
+} dummyArrayAllocatorInitializer;
+
+// //////////////////////////////////////////////////////////////////
+// class ValueInternalArray
+// //////////////////////////////////////////////////////////////////
+bool 
+ValueInternalArray::equals( const IteratorState &x, 
+                            const IteratorState &other )
+{
+   return x.array_ == other.array_  
+          &&  x.currentItemIndex_ == other.currentItemIndex_  
+          &&  x.currentPageIndex_ == other.currentPageIndex_;
+}
+
+
+void 
+ValueInternalArray::increment( IteratorState &it )
+{
+   JSON_ASSERT_MESSAGE( it.array_  &&
+      (it.currentPageIndex_ - it.array_->pages_)*itemsPerPage + it.currentItemIndex_
+      != it.array_->size_,
+      "ValueInternalArray::increment(): moving iterator beyond end" );
+   ++(it.currentItemIndex_);
+   if ( it.currentItemIndex_ == itemsPerPage )
+   {
+      it.currentItemIndex_ = 0;
+      ++(it.currentPageIndex_);
+   }
+}
+
+
+void 
+ValueInternalArray::decrement( IteratorState &it )
+{
+   JSON_ASSERT_MESSAGE( it.array_  &&  it.currentPageIndex_ == it.array_->pages_ 
+                        &&  it.currentItemIndex_ == 0,
+      "ValueInternalArray::decrement(): moving iterator beyond end" );
+   if ( it.currentItemIndex_ == 0 )
+   {
+      it.currentItemIndex_ = itemsPerPage-1;
+      --(it.currentPageIndex_);
+   }
+   else
+   {
+      --(it.currentItemIndex_);
+   }
+}
+
+
+Value &
+ValueInternalArray::unsafeDereference( const IteratorState &it )
+{
+   return (*(it.currentPageIndex_))[it.currentItemIndex_];
+}
+
+
+Value &
+ValueInternalArray::dereference( const IteratorState &it )
+{
+   JSON_ASSERT_MESSAGE( it.array_  &&
+      (it.currentPageIndex_ - it.array_->pages_)*itemsPerPage + it.currentItemIndex_
+      < it.array_->size_,
+      "ValueInternalArray::dereference(): dereferencing invalid iterator" );
+   return unsafeDereference( it );
+}
+
+void 
+ValueInternalArray::makeBeginIterator( IteratorState &it ) const
+{
+   it.array_ = const_cast<ValueInternalArray *>( this );
+   it.currentItemIndex_ = 0;
+   it.currentPageIndex_ = pages_;
+}
+
+
+void 
+ValueInternalArray::makeIterator( IteratorState &it, ArrayIndex index ) const
+{
+   it.array_ = const_cast<ValueInternalArray *>( this );
+   it.currentItemIndex_ = index % itemsPerPage;
+   it.currentPageIndex_ = pages_ + index / itemsPerPage;
+}
+
+
+void 
+ValueInternalArray::makeEndIterator( IteratorState &it ) const
+{
+   makeIterator( it, size_ );
+}
+
+
+ValueInternalArray::ValueInternalArray()
+   : pages_( 0 )
+   , size_( 0 )
+   , pageCount_( 0 )
+{
+}
+
+
+ValueInternalArray::ValueInternalArray( const ValueInternalArray &other )
+   : pages_( 0 )
+   , pageCount_( 0 )
+   , size_( other.size_ )
+{
+   PageIndex minNewPages = other.size_ / itemsPerPage;
+   arrayAllocator()->reallocateArrayPageIndex( pages_, pageCount_, minNewPages );
+   JSON_ASSERT_MESSAGE( pageCount_ >= minNewPages, 
+                        "ValueInternalArray::reserve(): bad reallocation" );
+   IteratorState itOther;
+   other.makeBeginIterator( itOther );
+   Value *value;
+   for ( ArrayIndex index = 0; index < size_; ++index, increment(itOther) )
+   {
+      if ( index % itemsPerPage == 0 )
+      {
+         PageIndex pageIndex = index / itemsPerPage;
+         value = arrayAllocator()->allocateArrayPage();
+         pages_[pageIndex] = value;
+      }
+      new (value) Value( dereference( itOther ) );
+   }
+}
+
+
+ValueInternalArray &
+ValueInternalArray::operator =( const ValueInternalArray &other )
+{
+   ValueInternalArray temp( other );
+   swap( temp );
+   return *this;
+}
+
+
+ValueInternalArray::~ValueInternalArray()
+{
+   // destroy all constructed items
+   IteratorState it;
+   IteratorState itEnd;
+   makeBeginIterator( it);
+   makeEndIterator( itEnd );
+   for ( ; !equals(it,itEnd); increment(it) )
+   {
+      Value *value = &dereference(it);
+      value->~Value();
+   }
+   // release all pages
+   PageIndex lastPageIndex = size_ / itemsPerPage;
+   for ( PageIndex pageIndex = 0; pageIndex < lastPageIndex; ++pageIndex )
+      arrayAllocator()->releaseArrayPage( pages_[pageIndex] );
+   // release pages index
+   arrayAllocator()->releaseArrayPageIndex( pages_, pageCount_ );
+}
+
+
+void 
+ValueInternalArray::swap( ValueInternalArray &other )
+{
+   Value **tempPages = pages_;
+   pages_ = other.pages_;
+   other.pages_ = tempPages;
+   ArrayIndex tempSize = size_;
+   size_ = other.size_;
+   other.size_ = tempSize;
+   PageIndex tempPageCount = pageCount_;
+   pageCount_ = other.pageCount_;
+   other.pageCount_ = tempPageCount;
+}
+
+void 
+ValueInternalArray::clear()
+{
+   ValueInternalArray dummy;
+   swap( dummy );
+}
+
+
+void 
+ValueInternalArray::resize( ArrayIndex newSize )
+{
+   if ( newSize == 0 )
+      clear();
+   else if ( newSize < size_ )
+   {
+      IteratorState it;
+      IteratorState itEnd;
+      makeIterator( it, newSize );
+      makeIterator( itEnd, size_ );
+      for ( ; !equals(it,itEnd); increment(it) )
+      {
+         Value *value = &dereference(it);
+         value->~Value();
+      }
+      PageIndex pageIndex = (newSize + itemsPerPage - 1) / itemsPerPage;
+      PageIndex lastPageIndex = size_ / itemsPerPage;
+      for ( ; pageIndex < lastPageIndex; ++pageIndex )
+         arrayAllocator()->releaseArrayPage( pages_[pageIndex] );
+      size_ = newSize;
+   }
+   else if ( newSize > size_ )
+      resolveReference( newSize );
+}
+
+
+void 
+ValueInternalArray::makeIndexValid( ArrayIndex index )
+{
+   // Need to enlarge page index ?
+   if ( index >= pageCount_ * itemsPerPage )
+   {
+      PageIndex minNewPages = (index + 1) / itemsPerPage;
+      arrayAllocator()->reallocateArrayPageIndex( pages_, pageCount_, minNewPages );
+      JSON_ASSERT_MESSAGE( pageCount_ >= minNewPages, "ValueInternalArray::reserve(): bad reallocation" );
+   }
+
+   // Need to allocate new pages ?
+   ArrayIndex nextPageIndex = 
+      (size_ % itemsPerPage) != 0 ? size_ - (size_%itemsPerPage) + itemsPerPage
+                                  : size_;
+   if ( nextPageIndex <= index )
+   {
+      PageIndex pageIndex = nextPageIndex / itemsPerPage;
+      PageIndex pageToAllocate = (index - nextPageIndex) / itemsPerPage + 1;
+      for ( ; pageToAllocate-- > 0; ++pageIndex )
+         pages_[pageIndex] = arrayAllocator()->allocateArrayPage();
+   }
+
+   // Initialize all new entries
+   IteratorState it;
+   IteratorState itEnd;
+   makeIterator( it, size_ );
+   size_ = index + 1;
+   makeIterator( itEnd, size_ );
+   for ( ; !equals(it,itEnd); increment(it) )
+   {
+      Value *value = &dereference(it);
+      new (value) Value(); // Construct a default value using placement new
+   }
+}
+
+Value &
+ValueInternalArray::resolveReference( ArrayIndex index )
+{
+   if ( index >= size_ )
+      makeIndexValid( index );
+   return pages_[index/itemsPerPage][index%itemsPerPage];
+}
+
+Value *
+ValueInternalArray::find( ArrayIndex index ) const
+{
+   if ( index >= size_ )
+      return 0;
+   return &(pages_[index/itemsPerPage][index%itemsPerPage]);
+}
+
+ValueInternalArray::ArrayIndex 
+ValueInternalArray::size() const
+{
+   return size_;
+}
+
+int 
+ValueInternalArray::distance( const IteratorState &x, const IteratorState &y )
+{
+   return indexOf(y) - indexOf(x);
+}
+
+
+ValueInternalArray::ArrayIndex 
+ValueInternalArray::indexOf( const IteratorState &iterator )
+{
+   if ( !iterator.array_ )
+      return ArrayIndex(-1);
+   return ArrayIndex(
+      (iterator.currentPageIndex_ - iterator.array_->pages_) * itemsPerPage 
+      + iterator.currentItemIndex_ );
+}
+
+
+int 
+ValueInternalArray::compare( const ValueInternalArray &other ) const
+{
+   int sizeDiff( size_ - other.size_ );
+   if ( sizeDiff != 0 )
+      return sizeDiff;
+   
+   for ( ArrayIndex index =0; index < size_; ++index )
+   {
+      int diff = pages_[index/itemsPerPage][index%itemsPerPage].compare( 
+         other.pages_[index/itemsPerPage][index%itemsPerPage] );
+      if ( diff != 0 )
+         return diff;
+   }
+   return 0;
+}
diff --git a/src/blackberry10/native/public/json_internalmap.inl b/src/blackberry10/native/public/json_internalmap.inl
new file mode 100644
index 0000000..29bcd03
--- /dev/null
+++ b/src/blackberry10/native/public/json_internalmap.inl
@@ -0,0 +1,634 @@
+// Copyright 2007-2010 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+/*
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+
+// included by json_value.cpp
+// everything is within Json namespace
+
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// class ValueInternalMap
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+
+/** \internal MUST be safely initialized using memset( this, 0, sizeof(ValueInternalLink) );
+   * This optimization is used by the fast allocator.
+   */
+ValueInternalLink::ValueInternalLink()
+   : previous_( 0 )
+   , next_( 0 )
+{
+}
+
+ValueInternalLink::~ValueInternalLink()
+{ 
+   for ( int index =0; index < itemPerLink; ++index )
+   {
+      if ( !items_[index].isItemAvailable() )
+      {
+         if ( !items_[index].isMemberNameStatic() )
+            free( keys_[index] );
+      }
+      else
+         break;
+   }
+}
+
+
+
+ValueMapAllocator::~ValueMapAllocator()
+{
+}
+
+#ifdef JSON_USE_SIMPLE_INTERNAL_ALLOCATOR
+class DefaultValueMapAllocator : public ValueMapAllocator
+{
+public: // overridden from ValueMapAllocator
+   virtual ValueInternalMap *newMap()
+   {
+      return new ValueInternalMap();
+   }
+
+   virtual ValueInternalMap *newMapCopy( const ValueInternalMap &other )
+   {
+      return new ValueInternalMap( other );
+   }
+
+   virtual void destructMap( ValueInternalMap *map )
+   {
+      delete map;
+   }
+
+   virtual ValueInternalLink *allocateMapBuckets( unsigned int size )
+   {
+      return new ValueInternalLink[size];
+   }
+
+   virtual void releaseMapBuckets( ValueInternalLink *links )
+   {
+      delete [] links;
+   }
+
+   virtual ValueInternalLink *allocateMapLink()
+   {
+      return new ValueInternalLink();
+   }
+
+   virtual void releaseMapLink( ValueInternalLink *link )
+   {
+      delete link;
+   }
+};
+#else
+/// @todo make this thread-safe (lock when accessign batch allocator)
+class DefaultValueMapAllocator : public ValueMapAllocator
+{
+public: // overridden from ValueMapAllocator
+   virtual ValueInternalMap *newMap()
+   {
+      ValueInternalMap *map = mapsAllocator_.allocate();
+      new (map) ValueInternalMap(); // placement new
+      return map;
+   }
+
+   virtual ValueInternalMap *newMapCopy( const ValueInternalMap &other )
+   {
+      ValueInternalMap *map = mapsAllocator_.allocate();
+      new (map) ValueInternalMap( other ); // placement new
+      return map;
+   }
+
+   virtual void destructMap( ValueInternalMap *map )
+   {
+      if ( map )
+      {
+         map->~ValueInternalMap();
+         mapsAllocator_.release( map );
+      }
+   }
+
+   virtual ValueInternalLink *allocateMapBuckets( unsigned int size )
+   {
+      return new ValueInternalLink[size];
+   }
+
+   virtual void releaseMapBuckets( ValueInternalLink *links )
+   {
+      delete [] links;
+   }
+
+   virtual ValueInternalLink *allocateMapLink()
+   {
+      ValueInternalLink *link = linksAllocator_.allocate();
+      memset( link, 0, sizeof(ValueInternalLink) );
+      return link;
+   }
+
+   virtual void releaseMapLink( ValueInternalLink *link )
+   {
+      link->~ValueInternalLink();
+      linksAllocator_.release( link );
+   }
+private:
+   BatchAllocator<ValueInternalMap,1> mapsAllocator_;
+   BatchAllocator<ValueInternalLink,1> linksAllocator_;
+};
+#endif
+
+static ValueMapAllocator *&mapAllocator()
+{
+   static DefaultValueMapAllocator defaultAllocator;
+   static ValueMapAllocator *mapAllocator = &defaultAllocator;
+   return mapAllocator;
+}
+
+static struct DummyMapAllocatorInitializer {
+   DummyMapAllocatorInitializer() 
+   {
+      mapAllocator();      // ensure mapAllocator() statics are initialized before main().
+   }
+} dummyMapAllocatorInitializer;
+
+
+
+// h(K) = value * K >> w ; with w = 32 & K prime w.r.t. 2^32.
+
+/*
+use linked list hash map. 
+buckets array is a container.
+linked list element contains 6 key/values. (memory = (16+4) * 6 + 4 = 124)
+value have extra state: valid, available, deleted
+*/
+
+
+ValueInternalMap::ValueInternalMap()
+   : buckets_( 0 )
+   , tailLink_( 0 )
+   , bucketsSize_( 0 )
+   , itemCount_( 0 )
+{
+}
+
+
+ValueInternalMap::ValueInternalMap( const ValueInternalMap &other )
+   : buckets_( 0 )
+   , tailLink_( 0 )
+   , bucketsSize_( 0 )
+   , itemCount_( 0 )
+{
+   reserve( other.itemCount_ );
+   IteratorState it;
+   IteratorState itEnd;
+   other.makeBeginIterator( it );
+   other.makeEndIterator( itEnd );
+   for ( ; !equals(it,itEnd); increment(it) )
+   {
+      bool isStatic;
+      const char *memberName = key( it, isStatic );
+      const Value &aValue = value( it );
+      resolveReference(memberName, isStatic) = aValue;
+   }
+}
+
+
+ValueInternalMap &
+ValueInternalMap::operator =( const ValueInternalMap &other )
+{
+   ValueInternalMap dummy( other );
+   swap( dummy );
+   return *this;
+}
+
+
+ValueInternalMap::~ValueInternalMap()
+{
+   if ( buckets_ )
+   {
+      for ( BucketIndex bucketIndex =0; bucketIndex < bucketsSize_; ++bucketIndex )
+      {
+         ValueInternalLink *link = buckets_[bucketIndex].next_;
+         while ( link )
+         {
+            ValueInternalLink *linkToRelease = link;
+            link = link->next_;
+            mapAllocator()->releaseMapLink( linkToRelease );
+         }
+      }
+      mapAllocator()->releaseMapBuckets( buckets_ );
+   }
+}
+
+
+void 
+ValueInternalMap::swap( ValueInternalMap &other )
+{
+   ValueInternalLink *tempBuckets = buckets_;
+   buckets_ = other.buckets_;
+   other.buckets_ = tempBuckets;
+   ValueInternalLink *tempTailLink = tailLink_;
+   tailLink_ = other.tailLink_;
+   other.tailLink_ = tempTailLink;
+   BucketIndex tempBucketsSize = bucketsSize_;
+   bucketsSize_ = other.bucketsSize_;
+   other.bucketsSize_ = tempBucketsSize;
+   BucketIndex tempItemCount = itemCount_;
+   itemCount_ = other.itemCount_;
+   other.itemCount_ = tempItemCount;
+}
+
+
+void 
+ValueInternalMap::clear()
+{
+   ValueInternalMap dummy;
+   swap( dummy );
+}
+
+
+ValueInternalMap::BucketIndex 
+ValueInternalMap::size() const
+{
+   return itemCount_;
+}
+
+bool 
+ValueInternalMap::reserveDelta( BucketIndex growth )
+{
+   return reserve( itemCount_ + growth );
+}
+
+bool 
+ValueInternalMap::reserve( BucketIndex newItemCount )
+{
+   if ( !buckets_  &&  newItemCount > 0 )
+   {
+      buckets_ = mapAllocator()->allocateMapBuckets( 1 );
+      bucketsSize_ = 1;
+      tailLink_ = &buckets_[0];
+   }
+//   BucketIndex idealBucketCount = (newItemCount + ValueInternalLink::itemPerLink) / ValueInternalLink::itemPerLink;
+   return true;
+}
+
+
+const Value *
+ValueInternalMap::find( const char *key ) const
+{
+   if ( !bucketsSize_ )
+      return 0;
+   HashKey hashedKey = hash( key );
+   BucketIndex bucketIndex = hashedKey % bucketsSize_;
+   for ( const ValueInternalLink *current = &buckets_[bucketIndex]; 
+         current != 0; 
+         current = current->next_ )
+   {
+      for ( BucketIndex index=0; index < ValueInternalLink::itemPerLink; ++index )
+      {
+         if ( current->items_[index].isItemAvailable() )
+            return 0;
+         if ( strcmp( key, current->keys_[index] ) == 0 )
+            return &current->items_[index];
+      }
+   }
+   return 0;
+}
+
+
+Value *
+ValueInternalMap::find( const char *key )
+{
+   const ValueInternalMap *constThis = this;
+   return const_cast<Value *>( constThis->find( key ) );
+}
+
+
+Value &
+ValueInternalMap::resolveReference( const char *key,
+                                    bool isStatic )
+{
+   HashKey hashedKey = hash( key );
+   if ( bucketsSize_ )
+   {
+      BucketIndex bucketIndex = hashedKey % bucketsSize_;
+      ValueInternalLink **previous = 0;
+      BucketIndex index;
+      for ( ValueInternalLink *current = &buckets_[bucketIndex]; 
+            current != 0; 
+            previous = &current->next_, current = current->next_ )
+      {
+         for ( index=0; index < ValueInternalLink::itemPerLink; ++index )
+         {
+            if ( current->items_[index].isItemAvailable() )
+               return setNewItem( key, isStatic, current, index );
+            if ( strcmp( key, current->keys_[index] ) == 0 )
+               return current->items_[index];
+         }
+      }
+   }
+
+   reserveDelta( 1 );
+   return unsafeAdd( key, isStatic, hashedKey );
+}
+
+
+void 
+ValueInternalMap::remove( const char *key )
+{
+   HashKey hashedKey = hash( key );
+   if ( !bucketsSize_ )
+      return;
+   BucketIndex bucketIndex = hashedKey % bucketsSize_;
+   for ( ValueInternalLink *link = &buckets_[bucketIndex]; 
+         link != 0; 
+         link = link->next_ )
+   {
+      BucketIndex index;
+      for ( index =0; index < ValueInternalLink::itemPerLink; ++index )
+      {
+         if ( link->items_[index].isItemAvailable() )
+            return;
+         if ( strcmp( key, link->keys_[index] ) == 0 )
+         {
+            doActualRemove( link, index, bucketIndex );
+            return;
+         }
+      }
+   }
+}
+
+void 
+ValueInternalMap::doActualRemove( ValueInternalLink *link, 
+                                  BucketIndex index,
+                                  BucketIndex bucketIndex )
+{
+   // find last item of the bucket and swap it with the 'removed' one.
+   // set removed items flags to 'available'.
+   // if last page only contains 'available' items, then desallocate it (it's empty)
+   ValueInternalLink *&lastLink = getLastLinkInBucket( index );
+   BucketIndex lastItemIndex = 1; // a link can never be empty, so start at 1
+   for ( ;   
+         lastItemIndex < ValueInternalLink::itemPerLink; 
+         ++lastItemIndex ) // may be optimized with dicotomic search
+   {
+      if ( lastLink->items_[lastItemIndex].isItemAvailable() )
+         break;
+   }
+   
+   BucketIndex lastUsedIndex = lastItemIndex - 1;
+   Value *valueToDelete = &link->items_[index];
+   Value *valueToPreserve = &lastLink->items_[lastUsedIndex];
+   if ( valueToDelete != valueToPreserve )
+      valueToDelete->swap( *valueToPreserve );
+   if ( lastUsedIndex == 0 )  // page is now empty
+   {  // remove it from bucket linked list and delete it.
+      ValueInternalLink *linkPreviousToLast = lastLink->previous_;
+      if ( linkPreviousToLast != 0 )   // can not deleted bucket link.
+      {
+         mapAllocator()->releaseMapLink( lastLink );
+         linkPreviousToLast->next_ = 0;
+         lastLink = linkPreviousToLast;
+      }
+   }
+   else
+   {
+      Value dummy;
+      valueToPreserve->swap( dummy ); // restore deleted to default Value.
+      valueToPreserve->setItemUsed( false );
+   }
+   --itemCount_;
+}
+
+
+ValueInternalLink *&
+ValueInternalMap::getLastLinkInBucket( BucketIndex bucketIndex )
+{
+   if ( bucketIndex == bucketsSize_ - 1 )
+      return tailLink_;
+   ValueInternalLink *&previous = buckets_[bucketIndex+1].previous_;
+   if ( !previous )
+      previous = &buckets_[bucketIndex];
+   return previous;
+}
+
+
+Value &
+ValueInternalMap::setNewItem( const char *key, 
+                              bool isStatic,
+                              ValueInternalLink *link, 
+                              BucketIndex index )
+{
+   char *duplicatedKey = valueAllocator()->makeMemberName( key );
+   ++itemCount_;
+   link->keys_[index] = duplicatedKey;
+   link->items_[index].setItemUsed();
+   link->items_[index].setMemberNameIsStatic( isStatic );
+   return link->items_[index]; // items already default constructed.
+}
+
+
+Value &
+ValueInternalMap::unsafeAdd( const char *key, 
+                             bool isStatic, 
+                             HashKey hashedKey )
+{
+   JSON_ASSERT_MESSAGE( bucketsSize_ > 0, "ValueInternalMap::unsafeAdd(): internal logic error." );
+   BucketIndex bucketIndex = hashedKey % bucketsSize_;
+   ValueInternalLink *&previousLink = getLastLinkInBucket( bucketIndex );
+   ValueInternalLink *link = previousLink;
+   BucketIndex index;
+   for ( index =0; index < ValueInternalLink::itemPerLink; ++index )
+   {
+      if ( link->items_[index].isItemAvailable() )
+         break;
+   }
+   if ( index == ValueInternalLink::itemPerLink ) // need to add a new page
+   {
+      ValueInternalLink *newLink = mapAllocator()->allocateMapLink();
+      index = 0;
+      link->next_ = newLink;
+      previousLink = newLink;
+      link = newLink;
+   }
+   return setNewItem( key, isStatic, link, index );
+}
+
+
+ValueInternalMap::HashKey 
+ValueInternalMap::hash( const char *key ) const
+{
+   HashKey hash = 0;
+   while ( *key )
+      hash += *key++ * 37;
+   return hash;
+}
+
+
+int 
+ValueInternalMap::compare( const ValueInternalMap &other ) const
+{
+   int sizeDiff( itemCount_ - other.itemCount_ );
+   if ( sizeDiff != 0 )
+      return sizeDiff;
+   // Strict order guaranty is required. Compare all keys FIRST, then compare values.
+   IteratorState it;
+   IteratorState itEnd;
+   makeBeginIterator( it );
+   makeEndIterator( itEnd );
+   for ( ; !equals(it,itEnd); increment(it) )
+   {
+      if ( !other.find( key( it ) ) )
+         return 1;
+   }
+
+   // All keys are equals, let's compare values
+   makeBeginIterator( it );
+   for ( ; !equals(it,itEnd); increment(it) )
+   {
+      const Value *otherValue = other.find( key( it ) );
+      int valueDiff = value(it).compare( *otherValue );
+      if ( valueDiff != 0 )
+         return valueDiff;
+   }
+   return 0;
+}
+
+
+void 
+ValueInternalMap::makeBeginIterator( IteratorState &it ) const
+{
+   it.map_ = const_cast<ValueInternalMap *>( this );
+   it.bucketIndex_ = 0;
+   it.itemIndex_ = 0;
+   it.link_ = buckets_;
+}
+
+
+void 
+ValueInternalMap::makeEndIterator( IteratorState &it ) const
+{
+   it.map_ = const_cast<ValueInternalMap *>( this );
+   it.bucketIndex_ = bucketsSize_;
+   it.itemIndex_ = 0;
+   it.link_ = 0;
+}
+
+
+bool 
+ValueInternalMap::equals( const IteratorState &x, const IteratorState &other )
+{
+   return x.map_ == other.map_  
+          &&  x.bucketIndex_ == other.bucketIndex_  
+          &&  x.link_ == other.link_
+          &&  x.itemIndex_ == other.itemIndex_;
+}
+
+
+void 
+ValueInternalMap::incrementBucket( IteratorState &iterator )
+{
+   ++iterator.bucketIndex_;
+   JSON_ASSERT_MESSAGE( iterator.bucketIndex_ <= iterator.map_->bucketsSize_,
+      "ValueInternalMap::increment(): attempting to iterate beyond end." );
+   if ( iterator.bucketIndex_ == iterator.map_->bucketsSize_ )
+      iterator.link_ = 0;
+   else
+      iterator.link_ = &(iterator.map_->buckets_[iterator.bucketIndex_]);
+   iterator.itemIndex_ = 0;
+}
+
+
+void 
+ValueInternalMap::increment( IteratorState &iterator )
+{
+   JSON_ASSERT_MESSAGE( iterator.map_, "Attempting to iterator using invalid iterator." );
+   ++iterator.itemIndex_;
+   if ( iterator.itemIndex_ == ValueInternalLink::itemPerLink )
+   {
+      JSON_ASSERT_MESSAGE( iterator.link_ != 0,
+         "ValueInternalMap::increment(): attempting to iterate beyond end." );
+      iterator.link_ = iterator.link_->next_;
+      if ( iterator.link_ == 0 )
+         incrementBucket( iterator );
+   }
+   else if ( iterator.link_->items_[iterator.itemIndex_].isItemAvailable() )
+   {
+      incrementBucket( iterator );
+   }
+}
+
+
+void 
+ValueInternalMap::decrement( IteratorState &iterator )
+{
+   if ( iterator.itemIndex_ == 0 )
+   {
+      JSON_ASSERT_MESSAGE( iterator.map_, "Attempting to iterate using invalid iterator." );
+      if ( iterator.link_ == &iterator.map_->buckets_[iterator.bucketIndex_] )
+      {
+         JSON_ASSERT_MESSAGE( iterator.bucketIndex_ > 0, "Attempting to iterate beyond beginning." );
+         --(iterator.bucketIndex_);
+      }
+      iterator.link_ = iterator.link_->previous_;
+      iterator.itemIndex_ = ValueInternalLink::itemPerLink - 1;
+   }
+}
+
+
+const char *
+ValueInternalMap::key( const IteratorState &iterator )
+{
+   JSON_ASSERT_MESSAGE( iterator.link_, "Attempting to iterate using invalid iterator." );
+   return iterator.link_->keys_[iterator.itemIndex_];
+}
+
+const char *
+ValueInternalMap::key( const IteratorState &iterator, bool &isStatic )
+{
+   JSON_ASSERT_MESSAGE( iterator.link_, "Attempting to iterate using invalid iterator." );
+   isStatic = iterator.link_->items_[iterator.itemIndex_].isMemberNameStatic();
+   return iterator.link_->keys_[iterator.itemIndex_];
+}
+
+
+Value &
+ValueInternalMap::value( const IteratorState &iterator )
+{
+   JSON_ASSERT_MESSAGE( iterator.link_, "Attempting to iterate using invalid iterator." );
+   return iterator.link_->items_[iterator.itemIndex_];
+}
+
+
+int 
+ValueInternalMap::distance( const IteratorState &x, const IteratorState &y )
+{
+   int offset = 0;
+   IteratorState it = x;
+   while ( !equals( it, y ) )
+      increment( it );
+   return offset;
+}
diff --git a/src/blackberry10/native/public/json_reader.cpp b/src/blackberry10/native/public/json_reader.cpp
new file mode 100644
index 0000000..039c3c5
--- /dev/null
+++ b/src/blackberry10/native/public/json_reader.cpp
@@ -0,0 +1,918 @@
+// Copyright 2007-2010 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+/*
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#include <json/reader.h>
+#include <json/value.h>
+#include <utility>
+#include <cstdio>
+#include <cassert>
+#include <cstring>
+#include <iostream>
+#include <stdexcept>
+
+#if _MSC_VER >= 1400 // VC++ 8.0
+#pragma warning( disable : 4996 )   // disable warning about strdup being deprecated.
+#endif
+
+namespace Json {
+
+// QNX is strict about declaring C symbols in the std namespace.
+#ifdef __QNXNTO__
+using std::memcpy;
+using std::sprintf;
+using std::sscanf;
+#endif
+
+// Implementation of class Features
+// ////////////////////////////////
+
+Features::Features()
+   : allowComments_( true )
+   , strictRoot_( false )
+{
+}
+
+
+Features 
+Features::all()
+{
+   return Features();
+}
+
+
+Features 
+Features::strictMode()
+{
+   Features features;
+   features.allowComments_ = false;
+   features.strictRoot_ = true;
+   return features;
+}
+
+// Implementation of class Reader
+// ////////////////////////////////
+
+
+static inline bool 
+in( Reader::Char c, Reader::Char c1, Reader::Char c2, Reader::Char c3, Reader::Char c4 )
+{
+   return c == c1  ||  c == c2  ||  c == c3  ||  c == c4;
+}
+
+static inline bool 
+in( Reader::Char c, Reader::Char c1, Reader::Char c2, Reader::Char c3, Reader::Char c4, Reader::Char c5 )
+{
+   return c == c1  ||  c == c2  ||  c == c3  ||  c == c4  ||  c == c5;
+}
+
+
+static bool 
+containsNewLine( Reader::Location begin, 
+                 Reader::Location end )
+{
+   for ( ;begin < end; ++begin )
+      if ( *begin == '\n'  ||  *begin == '\r' )
+         return true;
+   return false;
+}
+
+static std::string codePointToUTF8(unsigned int cp)
+{
+   std::string result;
+   
+   // based on description from http://en.wikipedia.org/wiki/UTF-8
+
+   if (cp <= 0x7f) 
+   {
+      result.resize(1);
+      result[0] = static_cast<char>(cp);
+   } 
+   else if (cp <= 0x7FF) 
+   {
+      result.resize(2);
+      result[1] = static_cast<char>(0x80 | (0x3f & cp));
+      result[0] = static_cast<char>(0xC0 | (0x1f & (cp >> 6)));
+   } 
+   else if (cp <= 0xFFFF) 
+   {
+      result.resize(3);
+      result[2] = static_cast<char>(0x80 | (0x3f & cp));
+      result[1] = 0x80 | static_cast<char>((0x3f & (cp >> 6)));
+      result[0] = 0xE0 | static_cast<char>((0xf & (cp >> 12)));
+   }
+   else if (cp <= 0x10FFFF) 
+   {
+      result.resize(4);
+      result[3] = static_cast<char>(0x80 | (0x3f & cp));
+      result[2] = static_cast<char>(0x80 | (0x3f & (cp >> 6)));
+      result[1] = static_cast<char>(0x80 | (0x3f & (cp >> 12)));
+      result[0] = static_cast<char>(0xF0 | (0x7 & (cp >> 18)));
+   }
+
+   return result;
+}
+
+
+// Class Reader
+// //////////////////////////////////////////////////////////////////
+
+Reader::Reader()
+   : features_( Features::all() )
+{
+}
+
+
+Reader::Reader( const Features &features )
+   : features_( features )
+{
+}
+
+
+bool
+Reader::parse( const std::string &document, 
+               Value &root,
+               bool collectComments )
+{
+   document_ = document;
+   const char *begin = document_.c_str();
+   const char *end = begin + document_.length();
+   return parse( begin, end, root, collectComments );
+}
+
+
+bool
+Reader::parse( std::istream& sin,
+               Value &root,
+               bool collectComments )
+{
+   //std::istream_iterator<char> begin(sin);
+   //std::istream_iterator<char> end;
+   // Those would allow streamed input from a file, if parse() were a
+   // template function.
+
+   // Since std::string is reference-counted, this at least does not
+   // create an extra copy.
+   std::string doc;
+   std::getline(sin, doc, (char)EOF);
+   return parse( doc, root, collectComments );
+}
+
+bool 
+Reader::parse( const char *beginDoc, const char *endDoc, 
+               Value &root,
+               bool collectComments )
+{
+   if ( !features_.allowComments_ )
+   {
+      collectComments = false;
+   }
+
+   begin_ = beginDoc;
+   end_ = endDoc;
+   collectComments_ = collectComments;
+   current_ = begin_;
+   lastValueEnd_ = 0;
+   lastValue_ = 0;
+   commentsBefore_ = "";
+   errors_.clear();
+   while ( !nodes_.empty() )
+      nodes_.pop();
+   nodes_.push( &root );
+   
+   bool successful = readValue();
+   Token token;
+   skipCommentTokens( token );
+   if ( collectComments_  &&  !commentsBefore_.empty() )
+      root.setComment( commentsBefore_, commentAfter );
+   if ( features_.strictRoot_ )
+   {
+      if ( !root.isArray()  &&  !root.isObject() )
+      {
+         // Set error location to start of doc, ideally should be first token found in doc
+         token.type_ = tokenError;
+         token.start_ = beginDoc;
+         token.end_ = endDoc;
+         addError( "A valid JSON document must be either an array or an object value.",
+                   token );
+         return false;
+      }
+   }
+   return successful;
+}
+
+
+bool
+Reader::readValue()
+{
+   Token token;
+   skipCommentTokens( token );
+   bool successful = true;
+
+   if ( collectComments_  &&  !commentsBefore_.empty() )
+   {
+      currentValue().setComment( commentsBefore_, commentBefore );
+      commentsBefore_ = "";
+   }
+
+
+   switch ( token.type_ )
+   {
+   case tokenObjectBegin:
+      successful = readObject( token );
+      break;
+   case tokenArrayBegin:
+      successful = readArray( token );
+      break;
+   case tokenNumber:
+      successful = decodeNumber( token );
+      break;
+   case tokenString:
+      successful = decodeString( token );
+      break;
+   case tokenTrue:
+      currentValue() = true;
+      break;
+   case tokenFalse:
+      currentValue() = false;
+      break;
+   case tokenNull:
+      currentValue() = Value();
+      break;
+   default:
+      return addError( "Syntax error: value, object or array expected.", token );
+   }
+
+   if ( collectComments_ )
+   {
+      lastValueEnd_ = current_;
+      lastValue_ = &currentValue();
+   }
+
+   return successful;
+}
+
+
+void 
+Reader::skipCommentTokens( Token &token )
+{
+   if ( features_.allowComments_ )
+   {
+      do
+      {
+         readToken( token );
+      }
+      while ( token.type_ == tokenComment );
+   }
+   else
+   {
+      readToken( token );
+   }
+}
+
+
+bool 
+Reader::expectToken( TokenType type, Token &token, const char *message )
+{
+   readToken( token );
+   if ( token.type_ != type )
+      return addError( message, token );
+   return true;
+}
+
+
+bool 
+Reader::readToken( Token &token )
+{
+   skipSpaces();
+   token.start_ = current_;
+   Char c = getNextChar();
+   bool ok = true;
+   switch ( c )
+   {
+   case '{':
+      token.type_ = tokenObjectBegin;
+      break;
+   case '}':
+      token.type_ = tokenObjectEnd;
+      break;
+   case '[':
+      token.type_ = tokenArrayBegin;
+      break;
+   case ']':
+      token.type_ = tokenArrayEnd;
+      break;
+   case '"':
+      token.type_ = tokenString;
+      ok = readString();
+      break;
+   case '/':
+      token.type_ = tokenComment;
+      ok = readComment();
+      break;
+   case '0':
+   case '1':
+   case '2':
+   case '3':
+   case '4':
+   case '5':
+   case '6':
+   case '7':
+   case '8':
+   case '9':
+   case '-':
+      token.type_ = tokenNumber;
+      readNumber();
+      break;
+   case 't':
+      token.type_ = tokenTrue;
+      ok = match( "rue", 3 );
+      break;
+   case 'f':
+      token.type_ = tokenFalse;
+      ok = match( "alse", 4 );
+      break;
+   case 'n':
+      token.type_ = tokenNull;
+      ok = match( "ull", 3 );
+      break;
+   case ',':
+      token.type_ = tokenArraySeparator;
+      break;
+   case ':':
+      token.type_ = tokenMemberSeparator;
+      break;
+   case 0:
+      token.type_ = tokenEndOfStream;
+      break;
+   default:
+      ok = false;
+      break;
+   }
+   if ( !ok )
+      token.type_ = tokenError;
+   token.end_ = current_;
+   return true;
+}
+
+
+void 
+Reader::skipSpaces()
+{
+   while ( current_ != end_ )
+   {
+      Char c = *current_;
+      if ( c == ' '  ||  c == '\t'  ||  c == '\r'  ||  c == '\n' )
+         ++current_;
+      else
+         break;
+   }
+}
+
+
+bool 
+Reader::match( Location pattern, 
+               int patternLength )
+{
+   if ( end_ - current_ < patternLength )
+      return false;
+   int index = patternLength;
+   while ( index-- )
+      if ( current_[index] != pattern[index] )
+         return false;
+   current_ += patternLength;
+   return true;
+}
+
+
+bool
+Reader::readComment()
+{
+   Location commentBegin = current_ - 1;
+   Char c = getNextChar();
+   bool successful = false;
+   if ( c == '*' )
+      successful = readCStyleComment();
+   else if ( c == '/' )
+      successful = readCppStyleComment();
+   if ( !successful )
+      return false;
+
+   if ( collectComments_ )
+   {
+      CommentPlacement placement = commentBefore;
+      if ( lastValueEnd_  &&  !containsNewLine( lastValueEnd_, commentBegin ) )
+      {
+         if ( c != '*'  ||  !containsNewLine( commentBegin, current_ ) )
+            placement = commentAfterOnSameLine;
+      }
+
+      addComment( commentBegin, current_, placement );
+   }
+   return true;
+}
+
+
+void 
+Reader::addComment( Location begin, 
+                    Location end, 
+                    CommentPlacement placement )
+{
+   assert( collectComments_ );
+   if ( placement == commentAfterOnSameLine )
+   {
+      assert( lastValue_ != 0 );
+      lastValue_->setComment( std::string( begin, end ), placement );
+   }
+   else
+   {
+      if ( !commentsBefore_.empty() )
+         commentsBefore_ += "\n";
+      commentsBefore_ += std::string( begin, end );
+   }
+}
+
+
+bool 
+Reader::readCStyleComment()
+{
+   while ( current_ != end_ )
+   {
+      Char c = getNextChar();
+      if ( c == '*'  &&  *current_ == '/' )
+         break;
+   }
+   return getNextChar() == '/';
+}
+
+
+bool 
+Reader::readCppStyleComment()
+{
+   while ( current_ != end_ )
+   {
+      Char c = getNextChar();
+      if (  c == '\r'  ||  c == '\n' )
+         break;
+   }
+   return true;
+}
+
+
+void 
+Reader::readNumber()
+{
+   while ( current_ != end_ )
+   {
+      if ( !(*current_ >= '0'  &&  *current_ <= '9')  &&
+           !in( *current_, '.', 'e', 'E', '+', '-' ) )
+         break;
+      ++current_;
+   }
+}
+
+bool
+Reader::readString()
+{
+   Char c = 0;
+   while ( current_ != end_ )
+   {
+      c = getNextChar();
+      if ( c == '\\' )
+         getNextChar();
+      else if ( c == '"' )
+         break;
+   }
+   return c == '"';
+}
+
+
+bool 
+Reader::readObject( Token &tokenStart )
+{
+   Token tokenName;
+   std::string name;
+   currentValue() = Value( objectValue );
+   while ( readToken( tokenName ) )
+   {
+      bool initialTokenOk = true;
+      while ( tokenName.type_ == tokenComment  &&  initialTokenOk )
+         initialTokenOk = readToken( tokenName );
+      if  ( !initialTokenOk )
+         break;
+      if ( tokenName.type_ == tokenObjectEnd  &&  name.empty() )  // empty object
+         return true;
+      if ( tokenName.type_ != tokenString )
+         break;
+      
+      name = "";
+      if ( !decodeString( tokenName, name ) )
+         return recoverFromError( tokenObjectEnd );
+
+      Token colon;
+      if ( !readToken( colon ) ||  colon.type_ != tokenMemberSeparator )
+      {
+         return addErrorAndRecover( "Missing ':' after object member name", 
+                                    colon, 
+                                    tokenObjectEnd );
+      }
+      Value &value = currentValue()[ name ];
+      nodes_.push( &value );
+      bool ok = readValue();
+      nodes_.pop();
+      if ( !ok ) // error already set
+         return recoverFromError( tokenObjectEnd );
+
+      Token comma;
+      if ( !readToken( comma )
+            ||  ( comma.type_ != tokenObjectEnd  &&  
+                  comma.type_ != tokenArraySeparator &&
+		  comma.type_ != tokenComment ) )
+      {
+         return addErrorAndRecover( "Missing ',' or '}' in object declaration", 
+                                    comma, 
+                                    tokenObjectEnd );
+      }
+      bool finalizeTokenOk = true;
+      while ( comma.type_ == tokenComment &&
+              finalizeTokenOk )
+         finalizeTokenOk = readToken( comma );
+      if ( comma.type_ == tokenObjectEnd )
+         return true;
+   }
+   return addErrorAndRecover( "Missing '}' or object member name", 
+                              tokenName, 
+                              tokenObjectEnd );
+}
+
+
+bool 
+Reader::readArray( Token &tokenStart )
+{
+   currentValue() = Value( arrayValue );
+   skipSpaces();
+   if ( *current_ == ']' ) // empty array
+   {
+      Token endArray;
+      readToken( endArray );
+      return true;
+   }
+   int index = 0;
+   while ( true )
+   {
+      Value &value = currentValue()[ index++ ];
+      nodes_.push( &value );
+      bool ok = readValue();
+      nodes_.pop();
+      if ( !ok ) // error already set
+         return recoverFromError( tokenArrayEnd );
+
+      Token token;
+      // Accept Comment after last item in the array.
+      ok = readToken( token );
+      while ( token.type_ == tokenComment  &&  ok )
+      {
+         ok = readToken( token );
+      }
+      bool badTokenType = ( token.type_ == tokenArraySeparator  &&  
+                            token.type_ == tokenArrayEnd );
+      if ( !ok  ||  badTokenType )
+      {
+         return addErrorAndRecover( "Missing ',' or ']' in array declaration", 
+                                    token, 
+                                    tokenArrayEnd );
+      }
+      if ( token.type_ == tokenArrayEnd )
+         break;
+   }
+   return true;
+}
+
+
+bool 
+Reader::decodeNumber( Token &token )
+{
+   bool isDouble = false;
+   for ( Location inspect = token.start_; inspect != token.end_; ++inspect )
+   {
+      isDouble = isDouble  
+                 ||  in( *inspect, '.', 'e', 'E', '+' )  
+                 ||  ( *inspect == '-'  &&  inspect != token.start_ );
+   }
+   if ( isDouble )
+      return decodeDouble( token );
+   Location current = token.start_;
+   bool isNegative = *current == '-';
+   if ( isNegative )
+      ++current;
+   Value::UInt threshold = (isNegative ? Value::UInt(-Value::minInt) 
+                                       : Value::maxUInt) / 10;
+   Value::UInt value = 0;
+   while ( current < token.end_ )
+   {
+      Char c = *current++;
+      if ( c < '0'  ||  c > '9' )
+         return addError( "'" + std::string( token.start_, token.end_ ) + "' is not a number.", token );
+      if ( value >= threshold )
+         return decodeDouble( token );
+      value = value * 10 + Value::UInt(c - '0');
+   }
+   if ( isNegative )
+      currentValue() = -Value::Int( value );
+   else if ( value <= Value::UInt(Value::maxInt) )
+      currentValue() = Value::Int( value );
+   else
+      currentValue() = value;
+   return true;
+}
+
+
+bool 
+Reader::decodeDouble( Token &token )
+{
+   double value = 0;
+   const int bufferSize = 32;
+   int count;
+   int length = int(token.end_ - token.start_);
+   if ( length <= bufferSize )
+   {
+      Char buffer[bufferSize];
+      memcpy( buffer, token.start_, length );
+      buffer[length] = 0;
+      count = sscanf( buffer, "%lf", &value );
+   }
+   else
+   {
+      std::string buffer( token.start_, token.end_ );
+      count = sscanf( buffer.c_str(), "%lf", &value );
+   }
+
+   if ( count != 1 )
+      return addError( "'" + std::string( token.start_, token.end_ ) + "' is not a number.", token );
+   currentValue() = value;
+   return true;
+}
+
+
+bool 
+Reader::decodeString( Token &token )
+{
+   std::string decoded;
+   if ( !decodeString( token, decoded ) )
+      return false;
+   currentValue() = decoded;
+   return true;
+}
+
+
+bool 
+Reader::decodeString( Token &token, std::string &decoded )
+{
+   decoded.reserve( token.end_ - token.start_ - 2 );
+   Location current = token.start_ + 1; // skip '"'
+   Location end = token.end_ - 1;      // do not include '"'
+   while ( current != end )
+   {
+      Char c = *current++;
+      if ( c == '"' )
+         break;
+      else if ( c == '\\' )
+      {
+         if ( current == end )
+            return addError( "Empty escape sequence in string", token, current );
+         Char escape = *current++;
+         switch ( escape )
+         {
+         case '"': decoded += '"'; break;
+         case '/': decoded += '/'; break;
+         case '\\': decoded += '\\'; break;
+         case 'b': decoded += '\b'; break;
+         case 'f': decoded += '\f'; break;
+         case 'n': decoded += '\n'; break;
+         case 'r': decoded += '\r'; break;
+         case 't': decoded += '\t'; break;
+         case 'u':
+            {
+               unsigned int unicode;
+               if ( !decodeUnicodeCodePoint( token, current, end, unicode ) )
+                  return false;
+               decoded += codePointToUTF8(unicode);
+            }
+            break;
+         default:
+            return addError( "Bad escape sequence in string", token, current );
+         }
+      }
+      else
+      {
+         decoded += c;
+      }
+   }
+   return true;
+}
+
+bool
+Reader::decodeUnicodeCodePoint( Token &token, 
+                                     Location &current, 
+                                     Location end, 
+                                     unsigned int &unicode )
+{
+
+   if ( !decodeUnicodeEscapeSequence( token, current, end, unicode ) )
+      return false;
+   if (unicode >= 0xD800 && unicode <= 0xDBFF)
+   {
+      // surrogate pairs
+      if (end - current < 6)
+         return addError( "additional six characters expected to parse unicode surrogate pair.", token, current );
+      unsigned int surrogatePair;
+      if (*(current++) == '\\' && *(current++)== 'u')
+      {
+         if (decodeUnicodeEscapeSequence( token, current, end, surrogatePair ))
+         {
+            unicode = 0x10000 + ((unicode & 0x3FF) << 10) + (surrogatePair & 0x3FF);
+         } 
+         else
+            return false;
+      } 
+      else
+         return addError( "expecting another \\u token to begin the second half of a unicode surrogate pair", token, current );
+   }
+   return true;
+}
+
+bool 
+Reader::decodeUnicodeEscapeSequence( Token &token, 
+                                     Location &current, 
+                                     Location end, 
+                                     unsigned int &unicode )
+{
+   if ( end - current < 4 )
+      return addError( "Bad unicode escape sequence in string: four digits expected.", token, current );
+   unicode = 0;
+   for ( int index =0; index < 4; ++index )
+   {
+      Char c = *current++;
+      unicode *= 16;
+      if ( c >= '0'  &&  c <= '9' )
+         unicode += c - '0';
+      else if ( c >= 'a'  &&  c <= 'f' )
+         unicode += c - 'a' + 10;
+      else if ( c >= 'A'  &&  c <= 'F' )
+         unicode += c - 'A' + 10;
+      else
+         return addError( "Bad unicode escape sequence in string: hexadecimal digit expected.", token, current );
+   }
+   return true;
+}
+
+
+bool 
+Reader::addError( const std::string &message, 
+                  Token &token,
+                  Location extra )
+{
+   ErrorInfo info;
+   info.token_ = token;
+   info.message_ = message;
+   info.extra_ = extra;
+   errors_.push_back( info );
+   return false;
+}
+
+
+bool 
+Reader::recoverFromError( TokenType skipUntilToken )
+{
+   int errorCount = int(errors_.size());
+   Token skip;
+   while ( true )
+   {
+      if ( !readToken(skip) )
+         errors_.resize( errorCount ); // discard errors caused by recovery
+      if ( skip.type_ == skipUntilToken  ||  skip.type_ == tokenEndOfStream )
+         break;
+   }
+   errors_.resize( errorCount );
+   return false;
+}
+
+
+bool 
+Reader::addErrorAndRecover( const std::string &message, 
+                            Token &token,
+                            TokenType skipUntilToken )
+{
+   addError( message, token );
+   return recoverFromError( skipUntilToken );
+}
+
+
+Value &
+Reader::currentValue()
+{
+   return *(nodes_.top());
+}
+
+
+Reader::Char 
+Reader::getNextChar()
+{
+   if ( current_ == end_ )
+      return 0;
+   return *current_++;
+}
+
+
+void 
+Reader::getLocationLineAndColumn( Location location,
+                                  int &line,
+                                  int &column ) const
+{
+   Location current = begin_;
+   Location lastLineStart = current;
+   line = 0;
+   while ( current < location  &&  current != end_ )
+   {
+      Char c = *current++;
+      if ( c == '\r' )
+      {
+         if ( *current == '\n' )
+            ++current;
+         lastLineStart = current;
+         ++line;
+      }
+      else if ( c == '\n' )
+      {
+         lastLineStart = current;
+         ++line;
+      }
+   }
+   // column & line start at 1
+   column = int(location - lastLineStart) + 1;
+   ++line;
+}
+
+
+std::string
+Reader::getLocationLineAndColumn( Location location ) const
+{
+   int line, column;
+   getLocationLineAndColumn( location, line, column );
+   char buffer[18+16+16+1];
+   sprintf( buffer, "Line %d, Column %d", line, column );
+   return buffer;
+}
+
+
+std::string 
+Reader::getFormatedErrorMessages() const
+{
+   std::string formattedMessage;
+   for ( Errors::const_iterator itError = errors_.begin();
+         itError != errors_.end();
+         ++itError )
+   {
+      const ErrorInfo &error = *itError;
+      formattedMessage += "* " + getLocationLineAndColumn( error.token_.start_ ) + "\n";
+      formattedMessage += "  " + error.message_ + "\n";
+      if ( error.extra_ )
+         formattedMessage += "See " + getLocationLineAndColumn( error.extra_ ) + " for detail.\n";
+   }
+   return formattedMessage;
+}
+
+
+std::istream& operator>>( std::istream &sin, Value &root )
+{
+    Json::Reader reader;
+    bool ok = reader.parse(sin, root, true);
+    //JSON_ASSERT( ok );
+    if (!ok) throw std::runtime_error(reader.getFormatedErrorMessages());
+    return sin;
+}
+
+
+} // namespace Json
diff --git a/src/blackberry10/native/public/json_value.cpp b/src/blackberry10/native/public/json_value.cpp
new file mode 100644
index 0000000..37bfb97
--- /dev/null
+++ b/src/blackberry10/native/public/json_value.cpp
@@ -0,0 +1,1753 @@
+// Copyright 2007-2010 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+/*
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+
+#include <iostream>
+#include <json/value.h>
+#include <json/writer.h>
+#include <utility>
+#include <stdexcept>
+#include <cstring>
+#include <cassert>
+#ifdef JSON_USE_CPPTL
+# include <cpptl/conststring.h>
+#endif
+#include <cstddef>    // size_t
+#ifndef JSON_USE_SIMPLE_INTERNAL_ALLOCATOR
+# include "json_batchallocator.h"
+#endif // #ifndef JSON_USE_SIMPLE_INTERNAL_ALLOCATOR
+
+#define JSON_ASSERT_UNREACHABLE assert( false )
+#define JSON_ASSERT( condition ) assert( condition );  // @todo <= change this into an exception throw
+#define JSON_ASSERT_MESSAGE( condition, message ) if (!( condition )) throw std::runtime_error( message );
+
+namespace Json {
+
+// QNX is strict about declaring C symbols in the std namespace.
+#ifdef __QNXNTO__
+using std::memcpy;
+using std::strchr;
+using std::strcmp;
+using std::strlen;
+#endif
+
+const Value Value::null;
+const Int Value::minInt = Int( ~(UInt(-1)/2) );
+const Int Value::maxInt = Int( UInt(-1)/2 );
+const UInt Value::maxUInt = UInt(-1);
+
+// A "safe" implementation of strdup. Allow null pointer to be passed. 
+// Also avoid warning on msvc80.
+//
+//inline char *safeStringDup( const char *czstring )
+//{
+//   if ( czstring )
+//   {
+//      const size_t length = (unsigned int)( strlen(czstring) + 1 );
+//      char *newString = static_cast<char *>( malloc( length ) );
+//      memcpy( newString, czstring, length );
+//      return newString;
+//   }
+//   return 0;
+//}
+//
+//inline char *safeStringDup( const std::string &str )
+//{
+//   if ( !str.empty() )
+//   {
+//      const size_t length = str.length();
+//      char *newString = static_cast<char *>( malloc( length + 1 ) );
+//      memcpy( newString, str.c_str(), length );
+//      newString[length] = 0;
+//      return newString;
+//   }
+//   return 0;
+//}
+
+ValueAllocator::~ValueAllocator()
+{
+}
+
+class DefaultValueAllocator : public ValueAllocator
+{
+public:
+   virtual ~DefaultValueAllocator()
+   {
+   }
+
+   virtual char *makeMemberName( const char *memberName )
+   {
+      return duplicateStringValue( memberName );
+   }
+
+   virtual void releaseMemberName( char *memberName )
+   {
+      releaseStringValue( memberName );
+   }
+
+   virtual char *duplicateStringValue( const char *value, 
+                                       unsigned int length = unknown )
+   {
+      //@todo invesgate this old optimization
+      //if ( !value  ||  value[0] == 0 )
+      //   return 0;
+
+      if ( length == unknown )
+         length = (unsigned int)strlen(value);
+      char *newString = static_cast<char *>( malloc( length + 1 ) );
+      memcpy( newString, value, length );
+      newString[length] = 0;
+      return newString;
+   }
+
+   virtual void releaseStringValue( char *value )
+   {
+      if ( value )
+         free( value );
+   }
+};
+
+static ValueAllocator *&valueAllocator()
+{
+   static DefaultValueAllocator defaultAllocator;
+   static ValueAllocator *valueAllocator = &defaultAllocator;
+   return valueAllocator;
+}
+
+static struct DummyValueAllocatorInitializer {
+   DummyValueAllocatorInitializer() 
+   {
+      valueAllocator();      // ensure valueAllocator() statics are initialized before main().
+   }
+} dummyValueAllocatorInitializer;
+
+
+
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// ValueInternals...
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+#ifdef JSON_VALUE_USE_INTERNAL_MAP
+# include "json_internalarray.inl"
+# include "json_internalmap.inl"
+#endif // JSON_VALUE_USE_INTERNAL_MAP
+
+# include "json_valueiterator.inl"
+
+
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// class Value::CommentInfo
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+
+
+Value::CommentInfo::CommentInfo()
+   : comment_( 0 )
+{
+}
+
+Value::CommentInfo::~CommentInfo()
+{
+   if ( comment_ )
+      valueAllocator()->releaseStringValue( comment_ );
+}
+
+
+void 
+Value::CommentInfo::setComment( const char *text )
+{
+   if ( comment_ )
+      valueAllocator()->releaseStringValue( comment_ );
+   JSON_ASSERT( text );
+   JSON_ASSERT_MESSAGE( text[0]=='\0' || text[0]=='/', "Comments must start with /");
+   // It seems that /**/ style comments are acceptable as well.
+   comment_ = valueAllocator()->duplicateStringValue( text );
+}
+
+
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// class Value::CZString
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+# ifndef JSON_VALUE_USE_INTERNAL_MAP
+
+// Notes: index_ indicates if the string was allocated when
+// a string is stored.
+
+Value::CZString::CZString( int index )
+   : cstr_( 0 )
+   , index_( index )
+{
+}
+
+Value::CZString::CZString( const char *cstr, DuplicationPolicy allocate )
+   : cstr_( allocate == duplicate ? valueAllocator()->makeMemberName(cstr) 
+                                  : cstr )
+   , index_( allocate )
+{
+}
+
+Value::CZString::CZString( const CZString &other )
+: cstr_( other.index_ != noDuplication &&  other.cstr_ != 0
+                ?  valueAllocator()->makeMemberName( other.cstr_ )
+                : other.cstr_ )
+   , index_( other.cstr_ ? (other.index_ == noDuplication ? noDuplication : duplicate)
+                         : other.index_ )
+{
+}
+
+Value::CZString::~CZString()
+{
+   if ( cstr_  &&  index_ == duplicate )
+      valueAllocator()->releaseMemberName( const_cast<char *>( cstr_ ) );
+}
+
+void 
+Value::CZString::swap( CZString &other )
+{
+   std::swap( cstr_, other.cstr_ );
+   std::swap( index_, other.index_ );
+}
+
+Value::CZString &
+Value::CZString::operator =( const CZString &other )
+{
+   CZString temp( other );
+   swap( temp );
+   return *this;
+}
+
+bool 
+Value::CZString::operator<( const CZString &other ) const 
+{
+   if ( cstr_ )
+      return strcmp( cstr_, other.cstr_ ) < 0;
+   return index_ < other.index_;
+}
+
+bool 
+Value::CZString::operator==( const CZString &other ) const 
+{
+   if ( cstr_ )
+      return strcmp( cstr_, other.cstr_ ) == 0;
+   return index_ == other.index_;
+}
+
+
+int 
+Value::CZString::index() const
+{
+   return index_;
+}
+
+
+const char *
+Value::CZString::c_str() const
+{
+   return cstr_;
+}
+
+bool 
+Value::CZString::isStaticString() const
+{
+   return index_ == noDuplication;
+}
+
+#endif // ifndef JSON_VALUE_USE_INTERNAL_MAP
+
+
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// class Value::Value
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+
+/*! \internal Default constructor initialization must be equivalent to:
+ * memset( this, 0, sizeof(Value) )
+ * This optimization is used in ValueInternalMap fast allocator.
+ */
+Value::Value( ValueType type )
+   : type_( type )
+   , allocated_( 0 )
+   , comments_( 0 )
+# ifdef JSON_VALUE_USE_INTERNAL_MAP
+   , itemIsUsed_( 0 )
+#endif
+{
+   switch ( type )
+   {
+   case nullValue:
+      break;
+   case intValue:
+   case uintValue:
+      value_.int_ = 0;
+      break;
+   case realValue:
+      value_.real_ = 0.0;
+      break;
+   case stringValue:
+      value_.string_ = 0;
+      break;
+#ifndef JSON_VALUE_USE_INTERNAL_MAP
+   case arrayValue:
+   case objectValue:
+      value_.map_ = new ObjectValues();
+      break;
+#else
+   case arrayValue:
+      value_.array_ = arrayAllocator()->newArray();
+      break;
+   case objectValue:
+      value_.map_ = mapAllocator()->newMap();
+      break;
+#endif
+   case booleanValue:
+      value_.bool_ = false;
+      break;
+   default:
+      JSON_ASSERT_UNREACHABLE;
+   }
+}
+
+
+Value::Value( Int value )
+   : type_( intValue )
+   , comments_( 0 )
+# ifdef JSON_VALUE_USE_INTERNAL_MAP
+   , itemIsUsed_( 0 )
+#endif
+{
+   value_.int_ = value;
+}
+
+
+Value::Value( UInt value )
+   : type_( uintValue )
+   , comments_( 0 )
+# ifdef JSON_VALUE_USE_INTERNAL_MAP
+   , itemIsUsed_( 0 )
+#endif
+{
+   value_.uint_ = value;
+}
+
+Value::Value( double value )
+   : type_( realValue )
+   , comments_( 0 )
+# ifdef JSON_VALUE_USE_INTERNAL_MAP
+   , itemIsUsed_( 0 )
+#endif
+{
+   value_.real_ = value;
+}
+
+Value::Value( const char *value )
+   : type_( stringValue )
+   , allocated_( true )
+   , comments_( 0 )
+# ifdef JSON_VALUE_USE_INTERNAL_MAP
+   , itemIsUsed_( 0 )
+#endif
+{
+   value_.string_ = valueAllocator()->duplicateStringValue( value );
+}
+
+
+Value::Value( const char *beginValue, 
+              const char *endValue )
+   : type_( stringValue )
+   , allocated_( true )
+   , comments_( 0 )
+# ifdef JSON_VALUE_USE_INTERNAL_MAP
+   , itemIsUsed_( 0 )
+#endif
+{
+   value_.string_ = valueAllocator()->duplicateStringValue( beginValue, 
+                                                            UInt(endValue - beginValue) );
+}
+
+
+Value::Value( const std::string &value )
+   : type_( stringValue )
+   , allocated_( true )
+   , comments_( 0 )
+# ifdef JSON_VALUE_USE_INTERNAL_MAP
+   , itemIsUsed_( 0 )
+#endif
+{
+   value_.string_ = valueAllocator()->duplicateStringValue( value.c_str(), 
+                                                            (unsigned int)value.length() );
+
+}
+
+Value::Value( const StaticString &value )
+   : type_( stringValue )
+   , allocated_( false )
+   , comments_( 0 )
+# ifdef JSON_VALUE_USE_INTERNAL_MAP
+   , itemIsUsed_( 0 )
+#endif
+{
+   value_.string_ = const_cast<char *>( value.c_str() );
+}
+
+
+# ifdef JSON_USE_CPPTL
+Value::Value( const CppTL::ConstString &value )
+   : type_( stringValue )
+   , allocated_( true )
+   , comments_( 0 )
+# ifdef JSON_VALUE_USE_INTERNAL_MAP
+   , itemIsUsed_( 0 )
+#endif
+{
+   value_.string_ = valueAllocator()->duplicateStringValue( value, value.length() );
+}
+# endif
+
+Value::Value( bool value )
+   : type_( booleanValue )
+   , comments_( 0 )
+# ifdef JSON_VALUE_USE_INTERNAL_MAP
+   , itemIsUsed_( 0 )
+#endif
+{
+   value_.bool_ = value;
+}
+
+
+Value::Value( const Value &other )
+   : type_( other.type_ )
+   , comments_( 0 )
+# ifdef JSON_VALUE_USE_INTERNAL_MAP
+   , itemIsUsed_( 0 )
+#endif
+{
+   switch ( type_ )
+   {
+   case nullValue:
+   case intValue:
+   case uintValue:
+   case realValue:
+   case booleanValue:
+      value_ = other.value_;
+      break;
+   case stringValue:
+      if ( other.value_.string_ )
+      {
+         value_.string_ = valueAllocator()->duplicateStringValue( other.value_.string_ );
+         allocated_ = true;
+      }
+      else
+         value_.string_ = 0;
+      break;
+#ifndef JSON_VALUE_USE_INTERNAL_MAP
+   case arrayValue:
+   case objectValue:
+      value_.map_ = new ObjectValues( *other.value_.map_ );
+      break;
+#else
+   case arrayValue:
+      value_.array_ = arrayAllocator()->newArrayCopy( *other.value_.array_ );
+      break;
+   case objectValue:
+      value_.map_ = mapAllocator()->newMapCopy( *other.value_.map_ );
+      break;
+#endif
+   default:
+      JSON_ASSERT_UNREACHABLE;
+   }
+   if ( other.comments_ )
+   {
+      comments_ = new CommentInfo[numberOfCommentPlacement];
+      for ( int comment =0; comment < numberOfCommentPlacement; ++comment )
+      {
+         const CommentInfo &otherComment = other.comments_[comment];
+         if ( otherComment.comment_ )
+            comments_[comment].setComment( otherComment.comment_ );
+      }
+   }
+}
+
+
+Value::~Value()
+{
+   switch ( type_ )
+   {
+   case nullValue:
+   case intValue:
+   case uintValue:
+   case realValue:
+   case booleanValue:
+      break;
+   case stringValue:
+      if ( allocated_ )
+         valueAllocator()->releaseStringValue( value_.string_ );
+      break;
+#ifndef JSON_VALUE_USE_INTERNAL_MAP
+   case arrayValue:
+   case objectValue:
+      delete value_.map_;
+      break;
+#else
+   case arrayValue:
+      arrayAllocator()->destructArray( value_.array_ );
+      break;
+   case objectValue:
+      mapAllocator()->destructMap( value_.map_ );
+      break;
+#endif
+   default:
+      JSON_ASSERT_UNREACHABLE;
+   }
+
+   if ( comments_ )
+      delete[] comments_;
+}
+
+Value &
+Value::operator=( const Value &other )
+{
+   Value temp( other );
+   swap( temp );
+   return *this;
+}
+
+void 
+Value::swap( Value &other )
+{
+   ValueType temp = type_;
+   type_ = other.type_;
+   other.type_ = temp;
+   std::swap( value_, other.value_ );
+   int temp2 = allocated_;
+   allocated_ = other.allocated_;
+   other.allocated_ = temp2;
+}
+
+ValueType 
+Value::type() const
+{
+   return type_;
+}
+
+
+int 
+Value::compare( const Value &other )
+{
+   /*
+   int typeDelta = other.type_ - type_;
+   switch ( type_ )
+   {
+   case nullValue:
+
+      return other.type_ == type_;
+   case intValue:
+      if ( other.type_.isNumeric()
+   case uintValue:
+   case realValue:
+   case booleanValue:
+      break;
+   case stringValue,
+      break;
+   case arrayValue:
+      delete value_.array_;
+      break;
+   case objectValue:
+      delete value_.map_;
+   default:
+      JSON_ASSERT_UNREACHABLE;
+   }
+   */
+   return 0;  // unreachable
+}
+
+bool 
+Value::operator <( const Value &other ) const
+{
+   int typeDelta = type_ - other.type_;
+   if ( typeDelta )
+      return typeDelta < 0 ? true : false;
+   switch ( type_ )
+   {
+   case nullValue:
+      return false;
+   case intValue:
+      return value_.int_ < other.value_.int_;
+   case uintValue:
+      return value_.uint_ < other.value_.uint_;
+   case realValue:
+      return value_.real_ < other.value_.real_;
+   case booleanValue:
+      return value_.bool_ < other.value_.bool_;
+   case stringValue:
+      return ( value_.string_ == 0  &&  other.value_.string_ )
+             || ( other.value_.string_  
+                  &&  value_.string_  
+                  && strcmp( value_.string_, other.value_.string_ ) < 0 );
+#ifndef JSON_VALUE_USE_INTERNAL_MAP
+   case arrayValue:
+   case objectValue:
+      {
+         int delta = int( value_.map_->size() - other.value_.map_->size() );
+         if ( delta )
+            return delta < 0;
+         return (*value_.map_) < (*other.value_.map_);
+      }
+#else
+   case arrayValue:
+      return value_.array_->compare( *(other.value_.array_) ) < 0;
+   case objectValue:
+      return value_.map_->compare( *(other.value_.map_) ) < 0;
+#endif
+   default:
+      JSON_ASSERT_UNREACHABLE;
+   }
+   return 0;  // unreachable
+}
+
+bool 
+Value::operator <=( const Value &other ) const
+{
+   return !(other > *this);
+}
+
+bool 
+Value::operator >=( const Value &other ) const
+{
+   return !(*this < other);
+}
+
+bool 
+Value::operator >( const Value &other ) const
+{
+   return other < *this;
+}
+
+bool 
+Value::operator ==( const Value &other ) const
+{
+   //if ( type_ != other.type_ )
+   // GCC 2.95.3 says:
+   // attempt to take address of bit-field structure member `Json::Value::type_'
+   // Beats me, but a temp solves the problem.
+   int temp = other.type_;
+   if ( type_ != temp )
+      return false;
+   switch ( type_ )
+   {
+   case nullValue:
+      return true;
+   case intValue:
+      return value_.int_ == other.value_.int_;
+   case uintValue:
+      return value_.uint_ == other.value_.uint_;
+   case realValue:
+      return value_.real_ == other.value_.real_;
+   case booleanValue:
+      return value_.bool_ == other.value_.bool_;
+   case stringValue:
+      return ( value_.string_ == other.value_.string_ )
+             || ( other.value_.string_  
+                  &&  value_.string_  
+                  && strcmp( value_.string_, other.value_.string_ ) == 0 );
+#ifndef JSON_VALUE_USE_INTERNAL_MAP
+   case arrayValue:
+   case objectValue:
+      return value_.map_->size() == other.value_.map_->size()
+             && (*value_.map_) == (*other.value_.map_);
+#else
+   case arrayValue:
+      return value_.array_->compare( *(other.value_.array_) ) == 0;
+   case objectValue:
+      return value_.map_->compare( *(other.value_.map_) ) == 0;
+#endif
+   default:
+      JSON_ASSERT_UNREACHABLE;
+   }
+   return 0;  // unreachable
+}
+
+bool 
+Value::operator !=( const Value &other ) const
+{
+   return !( *this == other );
+}
+
+const char *
+Value::asCString() const
+{
+   JSON_ASSERT( type_ == stringValue );
+   return value_.string_;
+}
+
+
+std::string 
+Value::asString() const
+{
+   switch ( type_ )
+   {
+   case nullValue:
+      return "";
+   case stringValue:
+      return value_.string_ ? value_.string_ : "";
+   case booleanValue:
+      return value_.bool_ ? "true" : "false";
+   case intValue:
+   case uintValue:
+   case realValue:
+   case arrayValue:
+   case objectValue:
+      JSON_ASSERT_MESSAGE( false, "Type is not convertible to string" );
+   default:
+      JSON_ASSERT_UNREACHABLE;
+   }
+   return ""; // unreachable
+}
+
+# ifdef JSON_USE_CPPTL
+CppTL::ConstString 
+Value::asConstString() const
+{
+   return CppTL::ConstString( asString().c_str() );
+}
+# endif
+
+Value::Int 
+Value::asInt() const
+{
+   switch ( type_ )
+   {
+   case nullValue:
+      return 0;
+   case intValue:
+      return value_.int_;
+   case uintValue:
+      JSON_ASSERT_MESSAGE( value_.uint_ < (unsigned)maxInt, "integer out of signed integer range" );
+      return value_.uint_;
+   case realValue:
+      JSON_ASSERT_MESSAGE( value_.real_ >= minInt  &&  value_.real_ <= maxInt, "Real out of signed integer range" );
+      return Int( value_.real_ );
+   case booleanValue:
+      return value_.bool_ ? 1 : 0;
+   case stringValue:
+   case arrayValue:
+   case objectValue:
+      JSON_ASSERT_MESSAGE( false, "Type is not convertible to int" );
+   default:
+      JSON_ASSERT_UNREACHABLE;
+   }
+   return 0; // unreachable;
+}
+
+Value::UInt 
+Value::asUInt() const
+{
+   switch ( type_ )
+   {
+   case nullValue:
+      return 0;
+   case intValue:
+      JSON_ASSERT_MESSAGE( value_.int_ >= 0, "Negative integer can not be converted to unsigned integer" );
+      return value_.int_;
+   case uintValue:
+      return value_.uint_;
+   case realValue:
+      JSON_ASSERT_MESSAGE( value_.real_ >= 0  &&  value_.real_ <= maxUInt,  "Real out of unsigned integer range" );
+      return UInt( value_.real_ );
+   case booleanValue:
+      return value_.bool_ ? 1 : 0;
+   case stringValue:
+   case arrayValue:
+   case objectValue:
+      JSON_ASSERT_MESSAGE( false, "Type is not convertible to uint" );
+   default:
+      JSON_ASSERT_UNREACHABLE;
+   }
+   return 0; // unreachable;
+}
+
+double 
+Value::asDouble() const
+{
+   switch ( type_ )
+   {
+   case nullValue:
+      return 0.0;
+   case intValue:
+      return value_.int_;
+   case uintValue:
+      return value_.uint_;
+   case realValue:
+      return value_.real_;
+   case booleanValue:
+      return value_.bool_ ? 1.0 : 0.0;
+   case stringValue:
+   case arrayValue:
+   case objectValue:
+      JSON_ASSERT_MESSAGE( false, "Type is not convertible to double" );
+   default:
+      JSON_ASSERT_UNREACHABLE;
+   }
+   return 0; // unreachable;
+}
+
+bool 
+Value::asBool() const
+{
+   switch ( type_ )
+   {
+   case nullValue:
+      return false;
+   case intValue:
+   case uintValue:
+      return value_.int_ != 0;
+   case realValue:
+      return value_.real_ != 0.0;
+   case booleanValue:
+      return value_.bool_;
+   case stringValue:
+      return value_.string_  &&  value_.string_[0] != 0;
+   case arrayValue:
+   case objectValue:
+      return value_.map_->size() != 0;
+   default:
+      JSON_ASSERT_UNREACHABLE;
+   }
+   return false; // unreachable;
+}
+
+
+bool 
+Value::isConvertibleTo( ValueType other ) const
+{
+   switch ( type_ )
+   {
+   case nullValue:
+      return true;
+   case intValue:
+      return ( other == nullValue  &&  value_.int_ == 0 )
+             || other == intValue
+             || ( other == uintValue  && value_.int_ >= 0 )
+             || other == realValue
+             || other == stringValue
+             || other == booleanValue;
+   case uintValue:
+      return ( other == nullValue  &&  value_.uint_ == 0 )
+             || ( other == intValue  && value_.uint_ <= (unsigned)maxInt )
+             || other == uintValue
+             || other == realValue
+             || other == stringValue
+             || other == booleanValue;
+   case realValue:
+      return ( other == nullValue  &&  value_.real_ == 0.0 )
+             || ( other == intValue  &&  value_.real_ >= minInt  &&  value_.real_ <= maxInt )
+             || ( other == uintValue  &&  value_.real_ >= 0  &&  value_.real_ <= maxUInt )
+             || other == realValue
+             || other == stringValue
+             || other == booleanValue;
+   case booleanValue:
+      return ( other == nullValue  &&  value_.bool_ == false )
+             || other == intValue
+             || other == uintValue
+             || other == realValue
+             || other == stringValue
+             || other == booleanValue;
+   case stringValue:
+      return other == stringValue
+             || ( other == nullValue  &&  (!value_.string_  ||  value_.string_[0] == 0) );
+   case arrayValue:
+      return other == arrayValue
+             ||  ( other == nullValue  &&  value_.map_->size() == 0 );
+   case objectValue:
+      return other == objectValue
+             ||  ( other == nullValue  &&  value_.map_->size() == 0 );
+   default:
+      JSON_ASSERT_UNREACHABLE;
+   }
+   return false; // unreachable;
+}
+
+
+/// Number of values in array or object
+Value::UInt 
+Value::size() const
+{
+   switch ( type_ )
+   {
+   case nullValue:
+   case intValue:
+   case uintValue:
+   case realValue:
+   case booleanValue:
+   case stringValue:
+      return 0;
+#ifndef JSON_VALUE_USE_INTERNAL_MAP
+   case arrayValue:  // size of the array is highest index + 1
+      if ( !value_.map_->empty() )
+      {
+         ObjectValues::const_iterator itLast = value_.map_->end();
+         --itLast;
+         return (*itLast).first.index()+1;
+      }
+      return 0;
+   case objectValue:
+      return Int( value_.map_->size() );
+#else
+   case arrayValue:
+      return Int( value_.array_->size() );
+   case objectValue:
+      return Int( value_.map_->size() );
+#endif
+   default:
+      JSON_ASSERT_UNREACHABLE;
+   }
+   return 0; // unreachable;
+}
+
+
+bool 
+Value::empty() const
+{
+   if ( isNull() || isArray() || isObject() )
+      return size() == 0u;
+   else
+      return false;
+}
+
+
+bool
+Value::operator!() const
+{
+   return isNull();
+}
+
+
+void 
+Value::clear()
+{
+   JSON_ASSERT( type_ == nullValue  ||  type_ == arrayValue  || type_ == objectValue );
+
+   switch ( type_ )
+   {
+#ifndef JSON_VALUE_USE_INTERNAL_MAP
+   case arrayValue:
+   case objectValue:
+      value_.map_->clear();
+      break;
+#else
+   case arrayValue:
+      value_.array_->clear();
+      break;
+   case objectValue:
+      value_.map_->clear();
+      break;
+#endif
+   default:
+      break;
+   }
+}
+
+void 
+Value::resize( UInt newSize )
+{
+   JSON_ASSERT( type_ == nullValue  ||  type_ == arrayValue );
+   if ( type_ == nullValue )
+      *this = Value( arrayValue );
+#ifndef JSON_VALUE_USE_INTERNAL_MAP
+   UInt oldSize = size();
+   if ( newSize == 0 )
+      clear();
+   else if ( newSize > oldSize )
+      (*this)[ newSize - 1 ];
+   else
+   {
+      for ( UInt index = newSize; index < oldSize; ++index )
+         value_.map_->erase( index );
+      assert( size() == newSize );
+   }
+#else
+   value_.array_->resize( newSize );
+#endif
+}
+
+
+Value &
+Value::operator[]( UInt index )
+{
+   JSON_ASSERT( type_ == nullValue  ||  type_ == arrayValue );
+   if ( type_ == nullValue )
+      *this = Value( arrayValue );
+#ifndef JSON_VALUE_USE_INTERNAL_MAP
+   CZString key( index );
+   ObjectValues::iterator it = value_.map_->lower_bound( key );
+   if ( it != value_.map_->end()  &&  (*it).first == key )
+      return (*it).second;
+
+   ObjectValues::value_type defaultValue( key, null );
+   it = value_.map_->insert( it, defaultValue );
+   return (*it).second;
+#else
+   return value_.array_->resolveReference( index );
+#endif
+}
+
+
+const Value &
+Value::operator[]( UInt index ) const
+{
+   JSON_ASSERT( type_ == nullValue  ||  type_ == arrayValue );
+   if ( type_ == nullValue )
+      return null;
+#ifndef JSON_VALUE_USE_INTERNAL_MAP
+   CZString key( index );
+   ObjectValues::const_iterator it = value_.map_->find( key );
+   if ( it == value_.map_->end() )
+      return null;
+   return (*it).second;
+#else
+   Value *value = value_.array_->find( index );
+   return value ? *value : null;
+#endif
+}
+
+
+Value &
+Value::operator[]( const char *key )
+{
+   return resolveReference( key, false );
+}
+
+
+Value &
+Value::resolveReference( const char *key, 
+                         bool isStatic )
+{
+   JSON_ASSERT( type_ == nullValue  ||  type_ == objectValue );
+   if ( type_ == nullValue )
+      *this = Value( objectValue );
+#ifndef JSON_VALUE_USE_INTERNAL_MAP
+   CZString actualKey( key, isStatic ? CZString::noDuplication 
+                                     : CZString::duplicateOnCopy );
+   ObjectValues::iterator it = value_.map_->lower_bound( actualKey );
+   if ( it != value_.map_->end()  &&  (*it).first == actualKey )
+      return (*it).second;
+
+   ObjectValues::value_type defaultValue( actualKey, null );
+   it = value_.map_->insert( it, defaultValue );
+   Value &value = (*it).second;
+   return value;
+#else
+   return value_.map_->resolveReference( key, isStatic );
+#endif
+}
+
+
+Value 
+Value::get( UInt index, 
+            const Value &defaultValue ) const
+{
+   const Value *value = &((*this)[index]);
+   return value == &null ? defaultValue : *value;
+}
+
+
+bool 
+Value::isValidIndex( UInt index ) const
+{
+   return index < size();
+}
+
+
+
+const Value &
+Value::operator[]( const char *key ) const
+{
+   JSON_ASSERT( type_ == nullValue  ||  type_ == objectValue );
+   if ( type_ == nullValue )
+      return null;
+#ifndef JSON_VALUE_USE_INTERNAL_MAP
+   CZString actualKey( key, CZString::noDuplication );
+   ObjectValues::const_iterator it = value_.map_->find( actualKey );
+   if ( it == value_.map_->end() )
+      return null;
+   return (*it).second;
+#else
+   const Value *value = value_.map_->find( key );
+   return value ? *value : null;
+#endif
+}
+
+
+Value &
+Value::operator[]( const std::string &key )
+{
+   return (*this)[ key.c_str() ];
+}
+
+
+const Value &
+Value::operator[]( const std::string &key ) const
+{
+   return (*this)[ key.c_str() ];
+}
+
+Value &
+Value::operator[]( const StaticString &key )
+{
+   return resolveReference( key, true );
+}
+
+
+# ifdef JSON_USE_CPPTL
+Value &
+Value::operator[]( const CppTL::ConstString &key )
+{
+   return (*this)[ key.c_str() ];
+}
+
+
+const Value &
+Value::operator[]( const CppTL::ConstString &key ) const
+{
+   return (*this)[ key.c_str() ];
+}
+# endif
+
+
+Value &
+Value::append( const Value &value )
+{
+   return (*this)[size()] = value;
+}
+
+
+Value 
+Value::get( const char *key, 
+            const Value &defaultValue ) const
+{
+   const Value *value = &((*this)[key]);
+   return value == &null ? defaultValue : *value;
+}
+
+
+Value 
+Value::get( const std::string &key,
+            const Value &defaultValue ) const
+{
+   return get( key.c_str(), defaultValue );
+}
+
+Value
+Value::removeMember( const char* key )
+{
+   JSON_ASSERT( type_ == nullValue  ||  type_ == objectValue );
+   if ( type_ == nullValue )
+      return null;
+#ifndef JSON_VALUE_USE_INTERNAL_MAP
+   CZString actualKey( key, CZString::noDuplication );
+   ObjectValues::iterator it = value_.map_->find( actualKey );
+   if ( it == value_.map_->end() )
+      return null;
+   Value old(it->second);
+   value_.map_->erase(it);
+   return old;
+#else
+   Value *value = value_.map_->find( key );
+   if (value){
+      Value old(*value);
+      value_.map_.remove( key );
+      return old;
+   } else {
+      return null;
+   }
+#endif
+}
+
+Value
+Value::removeMember( const std::string &key )
+{
+   return removeMember( key.c_str() );
+}
+
+# ifdef JSON_USE_CPPTL
+Value 
+Value::get( const CppTL::ConstString &key,
+            const Value &defaultValue ) const
+{
+   return get( key.c_str(), defaultValue );
+}
+# endif
+
+bool 
+Value::isMember( const char *key ) const
+{
+   const Value *value = &((*this)[key]);
+   return value != &null;
+}
+
+
+bool 
+Value::isMember( const std::string &key ) const
+{
+   return isMember( key.c_str() );
+}
+
+
+# ifdef JSON_USE_CPPTL
+bool 
+Value::isMember( const CppTL::ConstString &key ) const
+{
+   return isMember( key.c_str() );
+}
+#endif
+
+Value::Members 
+Value::getMemberNames() const
+{
+   JSON_ASSERT( type_ == nullValue  ||  type_ == objectValue );
+   if ( type_ == nullValue )
+       return Value::Members();
+   Members members;
+   members.reserve( value_.map_->size() );
+#ifndef JSON_VALUE_USE_INTERNAL_MAP
+   ObjectValues::const_iterator it = value_.map_->begin();
+   ObjectValues::const_iterator itEnd = value_.map_->end();
+   for ( ; it != itEnd; ++it )
+      members.push_back( std::string( (*it).first.c_str() ) );
+#else
+   ValueInternalMap::IteratorState it;
+   ValueInternalMap::IteratorState itEnd;
+   value_.map_->makeBeginIterator( it );
+   value_.map_->makeEndIterator( itEnd );
+   for ( ; !ValueInternalMap::equals( it, itEnd ); ValueInternalMap::increment(it) )
+      members.push_back( std::string( ValueInternalMap::key( it ) ) );
+#endif
+   return members;
+}
+//
+//# ifdef JSON_USE_CPPTL
+//EnumMemberNames
+//Value::enumMemberNames() const
+//{
+//   if ( type_ == objectValue )
+//   {
+//      return CppTL::Enum::any(  CppTL::Enum::transform(
+//         CppTL::Enum::keys( *(value_.map_), CppTL::Type<const CZString &>() ),
+//         MemberNamesTransform() ) );
+//   }
+//   return EnumMemberNames();
+//}
+//
+//
+//EnumValues 
+//Value::enumValues() const
+//{
+//   if ( type_ == objectValue  ||  type_ == arrayValue )
+//      return CppTL::Enum::anyValues( *(value_.map_), 
+//                                     CppTL::Type<const Value &>() );
+//   return EnumValues();
+//}
+//
+//# endif
+
+
+bool
+Value::isNull() const
+{
+   return type_ == nullValue;
+}
+
+
+bool 
+Value::isBool() const
+{
+   return type_ == booleanValue;
+}
+
+
+bool 
+Value::isInt() const
+{
+   return type_ == intValue;
+}
+
+
+bool 
+Value::isUInt() const
+{
+   return type_ == uintValue;
+}
+
+
+bool 
+Value::isIntegral() const
+{
+   return type_ == intValue  
+          ||  type_ == uintValue  
+          ||  type_ == booleanValue;
+}
+
+
+bool 
+Value::isDouble() const
+{
+   return type_ == realValue;
+}
+
+
+bool 
+Value::isNumeric() const
+{
+   return isIntegral() || isDouble();
+}
+
+
+bool 
+Value::isString() const
+{
+   return type_ == stringValue;
+}
+
+
+bool 
+Value::isArray() const
+{
+   return type_ == nullValue  ||  type_ == arrayValue;
+}
+
+
+bool 
+Value::isObject() const
+{
+   return type_ == nullValue  ||  type_ == objectValue;
+}
+
+
+void 
+Value::setComment( const char *comment,
+                   CommentPlacement placement )
+{
+   if ( !comments_ )
+      comments_ = new CommentInfo[numberOfCommentPlacement];
+   comments_[placement].setComment( comment );
+}
+
+
+void 
+Value::setComment( const std::string &comment,
+                   CommentPlacement placement )
+{
+   setComment( comment.c_str(), placement );
+}
+
+
+bool 
+Value::hasComment( CommentPlacement placement ) const
+{
+   return comments_ != 0  &&  comments_[placement].comment_ != 0;
+}
+
+std::string 
+Value::getComment( CommentPlacement placement ) const
+{
+   if ( hasComment(placement) )
+      return comments_[placement].comment_;
+   return "";
+}
+
+
+std::string 
+Value::toStyledString() const
+{
+   StyledWriter writer;
+   return writer.write( *this );
+}
+
+
+Value::const_iterator 
+Value::begin() const
+{
+   switch ( type_ )
+   {
+#ifdef JSON_VALUE_USE_INTERNAL_MAP
+   case arrayValue:
+      if ( value_.array_ )
+      {
+         ValueInternalArray::IteratorState it;
+         value_.array_->makeBeginIterator( it );
+         return const_iterator( it );
+      }
+      break;
+   case objectValue:
+      if ( value_.map_ )
+      {
+         ValueInternalMap::IteratorState it;
+         value_.map_->makeBeginIterator( it );
+         return const_iterator( it );
+      }
+      break;
+#else
+   case arrayValue:
+   case objectValue:
+      if ( value_.map_ )
+         return const_iterator( value_.map_->begin() );
+      break;
+#endif
+   default:
+      break;
+   }
+   return const_iterator();
+}
+
+Value::const_iterator 
+Value::end() const
+{
+   switch ( type_ )
+   {
+#ifdef JSON_VALUE_USE_INTERNAL_MAP
+   case arrayValue:
+      if ( value_.array_ )
+      {
+         ValueInternalArray::IteratorState it;
+         value_.array_->makeEndIterator( it );
+         return const_iterator( it );
+      }
+      break;
+   case objectValue:
+      if ( value_.map_ )
+      {
+         ValueInternalMap::IteratorState it;
+         value_.map_->makeEndIterator( it );
+         return const_iterator( it );
+      }
+      break;
+#else
+   case arrayValue:
+   case objectValue:
+      if ( value_.map_ )
+         return const_iterator( value_.map_->end() );
+      break;
+#endif
+   default:
+      break;
+   }
+   return const_iterator();
+}
+
+
+Value::iterator 
+Value::begin()
+{
+   switch ( type_ )
+   {
+#ifdef JSON_VALUE_USE_INTERNAL_MAP
+   case arrayValue:
+      if ( value_.array_ )
+      {
+         ValueInternalArray::IteratorState it;
+         value_.array_->makeBeginIterator( it );
+         return iterator( it );
+      }
+      break;
+   case objectValue:
+      if ( value_.map_ )
+      {
+         ValueInternalMap::IteratorState it;
+         value_.map_->makeBeginIterator( it );
+         return iterator( it );
+      }
+      break;
+#else
+   case arrayValue:
+   case objectValue:
+      if ( value_.map_ )
+         return iterator( value_.map_->begin() );
+      break;
+#endif
+   default:
+      break;
+   }
+   return iterator();
+}
+
+Value::iterator 
+Value::end()
+{
+   switch ( type_ )
+   {
+#ifdef JSON_VALUE_USE_INTERNAL_MAP
+   case arrayValue:
+      if ( value_.array_ )
+      {
+         ValueInternalArray::IteratorState it;
+         value_.array_->makeEndIterator( it );
+         return iterator( it );
+      }
+      break;
+   case objectValue:
+      if ( value_.map_ )
+      {
+         ValueInternalMap::IteratorState it;
+         value_.map_->makeEndIterator( it );
+         return iterator( it );
+      }
+      break;
+#else
+   case arrayValue:
+   case objectValue:
+      if ( value_.map_ )
+         return iterator( value_.map_->end() );
+      break;
+#endif
+   default:
+      break;
+   }
+   return iterator();
+}
+
+
+// class PathArgument
+// //////////////////////////////////////////////////////////////////
+
+PathArgument::PathArgument()
+   : kind_( kindNone )
+{
+}
+
+
+PathArgument::PathArgument( Value::UInt index )
+   : index_( index )
+   , kind_( kindIndex )
+{
+}
+
+
+PathArgument::PathArgument( const char *key )
+   : key_( key )
+   , kind_( kindKey )
+{
+}
+
+
+PathArgument::PathArgument( const std::string &key )
+   : key_( key.c_str() )
+   , kind_( kindKey )
+{
+}
+
+// class Path
+// //////////////////////////////////////////////////////////////////
+
+Path::Path( const std::string &path,
+            const PathArgument &a1,
+            const PathArgument &a2,
+            const PathArgument &a3,
+            const PathArgument &a4,
+            const PathArgument &a5 )
+{
+   InArgs in;
+   in.push_back( &a1 );
+   in.push_back( &a2 );
+   in.push_back( &a3 );
+   in.push_back( &a4 );
+   in.push_back( &a5 );
+   makePath( path, in );
+}
+
+
+void 
+Path::makePath( const std::string &path,
+                const InArgs &in )
+{
+   const char *current = path.c_str();
+   const char *end = current + path.length();
+   InArgs::const_iterator itInArg = in.begin();
+   while ( current != end )
+   {
+      if ( *current == '[' )
+      {
+         ++current;
+         if ( *current == '%' )
+            addPathInArg( path, in, itInArg, PathArgument::kindIndex );
+         else
+         {
+            Value::UInt index = 0;
+            for ( ; current != end && *current >= '0'  &&  *current <= '9'; ++current )
+               index = index * 10 + Value::UInt(*current - '0');
+            args_.push_back( index );
+         }
+         if ( current == end  ||  *current++ != ']' )
+            invalidPath( path, int(current - path.c_str()) );
+      }
+      else if ( *current == '%' )
+      {
+         addPathInArg( path, in, itInArg, PathArgument::kindKey );
+         ++current;
+      }
+      else if ( *current == '.' )
+      {
+         ++current;
+      }
+      else
+      {
+         const char *beginName = current;
+         while ( current != end  &&  !strchr( "[.", *current ) )
+            ++current;
+         args_.push_back( std::string( beginName, current ) );
+      }
+   }
+}
+
+
+void 
+Path::addPathInArg( const std::string &path, 
+                    const InArgs &in, 
+                    InArgs::const_iterator &itInArg, 
+                    PathArgument::Kind kind )
+{
+   if ( itInArg == in.end() )
+   {
+      // Error: missing argument %d
+   }
+   else if ( (*itInArg)->kind_ != kind )
+   {
+      // Error: bad argument type
+   }
+   else
+   {
+      args_.push_back( **itInArg );
+   }
+}
+
+
+void 
+Path::invalidPath( const std::string &path, 
+                   int location )
+{
+   // Error: invalid path.
+}
+
+
+const Value &
+Path::resolve( const Value &root ) const
+{
+   const Value *node = &root;
+   for ( Args::const_iterator it = args_.begin(); it != args_.end(); ++it )
+   {
+      const PathArgument &arg = *it;
+      if ( arg.kind_ == PathArgument::kindIndex )
+      {
+         if ( !node->isArray()  ||  node->isValidIndex( arg.index_ ) )
+         {
+            // Error: unable to resolve path (array value expected at position...
+         }
+         node = &((*node)[arg.index_]);
+      }
+      else if ( arg.kind_ == PathArgument::kindKey )
+      {
+         if ( !node->isObject() )
+         {
+            // Error: unable to resolve path (object value expected at position...)
+         }
+         node = &((*node)[arg.key_]);
+         if ( node == &Value::null )
+         {
+            // Error: unable to resolve path (object has no member named '' at position...)
+         }
+      }
+   }
+   return *node;
+}
+
+
+Value 
+Path::resolve( const Value &root, 
+               const Value &defaultValue ) const
+{
+   const Value *node = &root;
+   for ( Args::const_iterator it = args_.begin(); it != args_.end(); ++it )
+   {
+      const PathArgument &arg = *it;
+      if ( arg.kind_ == PathArgument::kindIndex )
+      {
+         if ( !node->isArray()  ||  node->isValidIndex( arg.index_ ) )
+            return defaultValue;
+         node = &((*node)[arg.index_]);
+      }
+      else if ( arg.kind_ == PathArgument::kindKey )
+      {
+         if ( !node->isObject() )
+            return defaultValue;
+         node = &((*node)[arg.key_]);
+         if ( node == &Value::null )
+            return defaultValue;
+      }
+   }
+   return *node;
+}
+
+
+Value &
+Path::make( Value &root ) const
+{
+   Value *node = &root;
+   for ( Args::const_iterator it = args_.begin(); it != args_.end(); ++it )
+   {
+      const PathArgument &arg = *it;
+      if ( arg.kind_ == PathArgument::kindIndex )
+      {
+         if ( !node->isArray() )
+         {
+            // Error: node is not an array at position ...
+         }
+         node = &((*node)[arg.index_]);
+      }
+      else if ( arg.kind_ == PathArgument::kindKey )
+      {
+         if ( !node->isObject() )
+         {
+            // Error: node is not an object at position...
+         }
+         node = &((*node)[arg.key_]);
+      }
+   }
+   return *node;
+}
+
+
+} // namespace Json
diff --git a/src/blackberry10/native/public/json_valueiterator.inl b/src/blackberry10/native/public/json_valueiterator.inl
new file mode 100644
index 0000000..9268d1a
--- /dev/null
+++ b/src/blackberry10/native/public/json_valueiterator.inl
@@ -0,0 +1,318 @@
+// Copyright 2007-2010 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+/*
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+// included by json_value.cpp
+// everything is within Json namespace
+
+
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// class ValueIteratorBase
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+
+ValueIteratorBase::ValueIteratorBase()
+#ifndef JSON_VALUE_USE_INTERNAL_MAP
+   : current_()
+   , isNull_( true )
+{
+}
+#else
+   : isArray_( true )
+   , isNull_( true )
+{
+   iterator_.array_ = ValueInternalArray::IteratorState();
+}
+#endif
+
+
+#ifndef JSON_VALUE_USE_INTERNAL_MAP
+ValueIteratorBase::ValueIteratorBase( const Value::ObjectValues::iterator &current )
+   : current_( current )
+   , isNull_( false )
+{
+}
+#else
+ValueIteratorBase::ValueIteratorBase( const ValueInternalArray::IteratorState &state )
+   : isArray_( true )
+{
+   iterator_.array_ = state;
+}
+
+
+ValueIteratorBase::ValueIteratorBase( const ValueInternalMap::IteratorState &state )
+   : isArray_( false )
+{
+   iterator_.map_ = state;
+}
+#endif
+
+Value &
+ValueIteratorBase::deref() const
+{
+#ifndef JSON_VALUE_USE_INTERNAL_MAP
+   return current_->second;
+#else
+   if ( isArray_ )
+      return ValueInternalArray::dereference( iterator_.array_ );
+   return ValueInternalMap::value( iterator_.map_ );
+#endif
+}
+
+
+void 
+ValueIteratorBase::increment()
+{
+#ifndef JSON_VALUE_USE_INTERNAL_MAP
+   ++current_;
+#else
+   if ( isArray_ )
+      ValueInternalArray::increment( iterator_.array_ );
+   ValueInternalMap::increment( iterator_.map_ );
+#endif
+}
+
+
+void 
+ValueIteratorBase::decrement()
+{
+#ifndef JSON_VALUE_USE_INTERNAL_MAP
+   --current_;
+#else
+   if ( isArray_ )
+      ValueInternalArray::decrement( iterator_.array_ );
+   ValueInternalMap::decrement( iterator_.map_ );
+#endif
+}
+
+
+ValueIteratorBase::difference_type 
+ValueIteratorBase::computeDistance( const SelfType &other ) const
+{
+#ifndef JSON_VALUE_USE_INTERNAL_MAP
+# ifdef JSON_USE_CPPTL_SMALLMAP
+   return current_ - other.current_;
+# else
+   // Iterator for null value are initialized using the default
+   // constructor, which initialize current_ to the default
+   // std::map::iterator. As begin() and end() are two instance 
+   // of the default std::map::iterator, they can not be compared.
+   // To allow this, we handle this comparison specifically.
+   if ( isNull_  &&  other.isNull_ )
+   {
+      return 0;
+   }
+
+
+   // Usage of std::distance is not portable (does not compile with Sun Studio 12 RogueWave STL,
+   // which is the one used by default).
+   // Using a portable hand-made version for non random iterator instead:
+   //   return difference_type( std::distance( current_, other.current_ ) );
+   difference_type myDistance = 0;
+   for ( Value::ObjectValues::iterator it = current_; it != other.current_; ++it )
+   {
+      ++myDistance;
+   }
+   return myDistance;
+# endif
+#else
+   if ( isArray_ )
+      return ValueInternalArray::distance( iterator_.array_, other.iterator_.array_ );
+   return ValueInternalMap::distance( iterator_.map_, other.iterator_.map_ );
+#endif
+}
+
+
+bool 
+ValueIteratorBase::isEqual( const SelfType &other ) const
+{
+#ifndef JSON_VALUE_USE_INTERNAL_MAP
+   if ( isNull_ )
+   {
+      return other.isNull_;
+   }
+   return current_ == other.current_;
+#else
+   if ( isArray_ )
+      return ValueInternalArray::equals( iterator_.array_, other.iterator_.array_ );
+   return ValueInternalMap::equals( iterator_.map_, other.iterator_.map_ );
+#endif
+}
+
+
+void 
+ValueIteratorBase::copy( const SelfType &other )
+{
+#ifndef JSON_VALUE_USE_INTERNAL_MAP
+   current_ = other.current_;
+#else
+   if ( isArray_ )
+      iterator_.array_ = other.iterator_.array_;
+   iterator_.map_ = other.iterator_.map_;
+#endif
+}
+
+
+Value 
+ValueIteratorBase::key() const
+{
+#ifndef JSON_VALUE_USE_INTERNAL_MAP
+   const Value::CZString czstring = (*current_).first;
+   if ( czstring.c_str() )
+   {
+      if ( czstring.isStaticString() )
+         return Value( StaticString( czstring.c_str() ) );
+      return Value( czstring.c_str() );
+   }
+   return Value( czstring.index() );
+#else
+   if ( isArray_ )
+      return Value( ValueInternalArray::indexOf( iterator_.array_ ) );
+   bool isStatic;
+   const char *memberName = ValueInternalMap::key( iterator_.map_, isStatic );
+   if ( isStatic )
+      return Value( StaticString( memberName ) );
+   return Value( memberName );
+#endif
+}
+
+
+UInt 
+ValueIteratorBase::index() const
+{
+#ifndef JSON_VALUE_USE_INTERNAL_MAP
+   const Value::CZString czstring = (*current_).first;
+   if ( !czstring.c_str() )
+      return czstring.index();
+   return Value::UInt( -1 );
+#else
+   if ( isArray_ )
+      return Value::UInt( ValueInternalArray::indexOf( iterator_.array_ ) );
+   return Value::UInt( -1 );
+#endif
+}
+
+
+const char *
+ValueIteratorBase::memberName() const
+{
+#ifndef JSON_VALUE_USE_INTERNAL_MAP
+   const char *name = (*current_).first.c_str();
+   return name ? name : "";
+#else
+   if ( !isArray_ )
+      return ValueInternalMap::key( iterator_.map_ );
+   return "";
+#endif
+}
+
+
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// class ValueConstIterator
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+
+ValueConstIterator::ValueConstIterator()
+{
+}
+
+
+#ifndef JSON_VALUE_USE_INTERNAL_MAP
+ValueConstIterator::ValueConstIterator( const Value::ObjectValues::iterator &current )
+   : ValueIteratorBase( current )
+{
+}
+#else
+ValueConstIterator::ValueConstIterator( const ValueInternalArray::IteratorState &state )
+   : ValueIteratorBase( state )
+{
+}
+
+ValueConstIterator::ValueConstIterator( const ValueInternalMap::IteratorState &state )
+   : ValueIteratorBase( state )
+{
+}
+#endif
+
+ValueConstIterator &
+ValueConstIterator::operator =( const ValueIteratorBase &other )
+{
+   copy( other );
+   return *this;
+}
+
+
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// class ValueIterator
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+
+ValueIterator::ValueIterator()
+{
+}
+
+
+#ifndef JSON_VALUE_USE_INTERNAL_MAP
+ValueIterator::ValueIterator( const Value::ObjectValues::iterator &current )
+   : ValueIteratorBase( current )
+{
+}
+#else
+ValueIterator::ValueIterator( const ValueInternalArray::IteratorState &state )
+   : ValueIteratorBase( state )
+{
+}
+
+ValueIterator::ValueIterator( const ValueInternalMap::IteratorState &state )
+   : ValueIteratorBase( state )
+{
+}
+#endif
+
+ValueIterator::ValueIterator( const ValueConstIterator &other )
+   : ValueIteratorBase( other )
+{
+}
+
+ValueIterator::ValueIterator( const ValueIterator &other )
+   : ValueIteratorBase( other )
+{
+}
+
+ValueIterator &
+ValueIterator::operator =( const SelfType &other )
+{
+   copy( other );
+   return *this;
+}
diff --git a/src/blackberry10/native/public/json_writer.cpp b/src/blackberry10/native/public/json_writer.cpp
new file mode 100644
index 0000000..ad3ff58
--- /dev/null
+++ b/src/blackberry10/native/public/json_writer.cpp
@@ -0,0 +1,855 @@
+// Copyright 2007-2010 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+/*
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#include <json/writer.h>
+#include <utility>
+#include <assert.h>
+#include <stdio.h>
+#include <string.h>
+#include <iostream>
+#include <sstream>
+#include <iomanip>
+
+#if _MSC_VER >= 1400 // VC++ 8.0
+#pragma warning( disable : 4996 )   // disable warning about strdup being deprecated.
+#endif
+
+namespace Json {
+
+static bool isControlCharacter(char ch)
+{
+   return ch > 0 && ch <= 0x1F;
+}
+
+static bool containsControlCharacter( const char* str )
+{
+   while ( *str ) 
+   {
+      if ( isControlCharacter( *(str++) ) )
+         return true;
+   }
+   return false;
+}
+static void uintToString( unsigned int value, 
+                          char *&current )
+{
+   *--current = 0;
+   do
+   {
+      *--current = (value % 10) + '0';
+      value /= 10;
+   }
+   while ( value != 0 );
+}
+
+std::string valueToString( Int value )
+{
+   char buffer[32];
+   char *current = buffer + sizeof(buffer);
+   bool isNegative = value < 0;
+   if ( isNegative )
+      value = -value;
+   uintToString( UInt(value), current );
+   if ( isNegative )
+      *--current = '-';
+   assert( current >= buffer );
+   return current;
+}
+
+
+std::string valueToString( UInt value )
+{
+   char buffer[32];
+   char *current = buffer + sizeof(buffer);
+   uintToString( value, current );
+   assert( current >= buffer );
+   return current;
+}
+
+std::string valueToString( double value )
+{
+   char buffer[32];
+#if defined(_MSC_VER) && defined(__STDC_SECURE_LIB__) // Use secure version with visual studio 2005 to avoid warning. 
+   sprintf_s(buffer, sizeof(buffer), "%#.16g", value); 
+#else	
+   sprintf(buffer, "%#.16g", value); 
+#endif
+   char* ch = buffer + strlen(buffer) - 1;
+   if (*ch != '0') return buffer; // nothing to truncate, so save time
+   while(ch > buffer && *ch == '0'){
+     --ch;
+   }
+   char* last_nonzero = ch;
+   while(ch >= buffer){
+     switch(*ch){
+     case '0':
+     case '1':
+     case '2':
+     case '3':
+     case '4':
+     case '5':
+     case '6':
+     case '7':
+     case '8':
+     case '9':
+       --ch;
+       continue;
+     case '.':
+       // Truncate zeroes to save bytes in output, but keep one.
+       *(last_nonzero+2) = '\0';
+       return buffer;
+     default:
+       return buffer;
+     }
+   }
+   return buffer;
+}
+
+
+std::string valueToString( bool value )
+{
+   return value ? "true" : "false";
+}
+
+std::string valueToQuotedString( const char *value )
+{
+   // Not sure how to handle unicode...
+   if (strpbrk(value, "\"\\\b\f\n\r\t") == NULL && !containsControlCharacter( value ))
+      return std::string("\"") + value + "\"";
+   // We have to walk value and escape any special characters.
+   // Appending to std::string is not efficient, but this should be rare.
+   // (Note: forward slashes are *not* rare, but I am not escaping them.)
+   unsigned maxsize = strlen(value)*2 + 3; // allescaped+quotes+NULL
+   std::string result;
+   result.reserve(maxsize); // to avoid lots of mallocs
+   result += "\"";
+   for (const char* c=value; *c != 0; ++c)
+   {
+      switch(*c)
+      {
+         case '\"':
+            result += "\\\"";
+            break;
+         case '\\':
+            result += "\\\\";
+            break;
+         case '\b':
+            result += "\\b";
+            break;
+         case '\f':
+            result += "\\f";
+            break;
+         case '\n':
+            result += "\\n";
+            break;
+         case '\r':
+            result += "\\r";
+            break;
+         case '\t':
+            result += "\\t";
+            break;
+         //case '/':
+            // Even though \/ is considered a legal escape in JSON, a bare
+            // slash is also legal, so I see no reason to escape it.
+            // (I hope I am not misunderstanding something.
+            // blep notes: actually escaping \/ may be useful in javascript to avoid </ 
+            // sequence.
+            // Should add a flag to allow this compatibility mode and prevent this 
+            // sequence from occurring.
+         default:
+            if ( isControlCharacter( *c ) )
+            {
+               std::ostringstream oss;
+               oss << "\\u" << std::hex << std::uppercase << std::setfill('0') << std::setw(4) << static_cast<int>(*c);
+               result += oss.str();
+            }
+            else
+            {
+               result += *c;
+            }
+            break;
+      }
+   }
+   result += "\"";
+   return result;
+}
+
+// Class Writer
+// //////////////////////////////////////////////////////////////////
+Writer::~Writer()
+{
+}
+
+
+// Class FastWriter
+// //////////////////////////////////////////////////////////////////
+
+FastWriter::FastWriter()
+   : yamlCompatiblityEnabled_( false )
+{
+}
+
+
+void 
+FastWriter::enableYAMLCompatibility()
+{
+   yamlCompatiblityEnabled_ = true;
+}
+
+
+std::string 
+FastWriter::write( const Value &root )
+{
+   document_ = "";
+   writeValue( root );
+   document_ += "\n";
+   return document_;
+}
+
+
+void 
+FastWriter::writeValue( const Value &value )
+{
+   switch ( value.type() )
+   {
+   case nullValue:
+      document_ += "null";
+      break;
+   case intValue:
+      document_ += valueToString( value.asInt() );
+      break;
+   case uintValue:
+      document_ += valueToString( value.asUInt() );
+      break;
+   case realValue:
+      document_ += valueToString( value.asDouble() );
+      break;
+   case stringValue:
+      document_ += valueToQuotedString( value.asCString() );
+      break;
+   case booleanValue:
+      document_ += valueToString( value.asBool() );
+      break;
+   case arrayValue:
+      {
+         document_ += "[";
+         int size = value.size();
+         for ( int index =0; index < size; ++index )
+         {
+            if ( index > 0 )
+               document_ += ",";
+            writeValue( value[index] );
+         }
+         document_ += "]";
+      }
+      break;
+   case objectValue:
+      {
+         Value::Members members( value.getMemberNames() );
+         document_ += "{";
+         for ( Value::Members::iterator it = members.begin(); 
+               it != members.end(); 
+               ++it )
+         {
+            const std::string &name = *it;
+            if ( it != members.begin() )
+               document_ += ",";
+            document_ += valueToQuotedString( name.c_str() );
+            document_ += yamlCompatiblityEnabled_ ? ": " 
+                                                  : ":";
+            writeValue( value[name] );
+         }
+         document_ += "}";
+      }
+      break;
+   }
+}
+
+
+// Class StyledWriter
+// //////////////////////////////////////////////////////////////////
+
+StyledWriter::StyledWriter()
+   : rightMargin_( 74 )
+   , indentSize_( 3 )
+{
+}
+
+
+std::string 
+StyledWriter::write( const Value &root )
+{
+   document_ = "";
+   addChildValues_ = false;
+   indentString_ = "";
+   writeCommentBeforeValue( root );
+   writeValue( root );
+   writeCommentAfterValueOnSameLine( root );
+   document_ += "\n";
+   return document_;
+}
+
+
+void 
+StyledWriter::writeValue( const Value &value )
+{
+   switch ( value.type() )
+   {
+   case nullValue:
+      pushValue( "null" );
+      break;
+   case intValue:
+      pushValue( valueToString( value.asInt() ) );
+      break;
+   case uintValue:
+      pushValue( valueToString( value.asUInt() ) );
+      break;
+   case realValue:
+      pushValue( valueToString( value.asDouble() ) );
+      break;
+   case stringValue:
+      pushValue( valueToQuotedString( value.asCString() ) );
+      break;
+   case booleanValue:
+      pushValue( valueToString( value.asBool() ) );
+      break;
+   case arrayValue:
+      writeArrayValue( value);
+      break;
+   case objectValue:
+      {
+         Value::Members members( value.getMemberNames() );
+         if ( members.empty() )
+            pushValue( "{}" );
+         else
+         {
+            writeWithIndent( "{" );
+            indent();
+            Value::Members::iterator it = members.begin();
+            while ( true )
+            {
+               const std::string &name = *it;
+               const Value &childValue = value[name];
+               writeCommentBeforeValue( childValue );
+               writeWithIndent( valueToQuotedString( name.c_str() ) );
+               document_ += " : ";
+               writeValue( childValue );
+               if ( ++it == members.end() )
+               {
+                  writeCommentAfterValueOnSameLine( childValue );
+                  break;
+               }
+               document_ += ",";
+               writeCommentAfterValueOnSameLine( childValue );
+            }
+            unindent();
+            writeWithIndent( "}" );
+         }
+      }
+      break;
+   }
+}
+
+
+void 
+StyledWriter::writeArrayValue( const Value &value )
+{
+   unsigned size = value.size();
+   if ( size == 0 )
+      pushValue( "[]" );
+   else
+   {
+      bool isArrayMultiLine = isMultineArray( value );
+      if ( isArrayMultiLine )
+      {
+         writeWithIndent( "[" );
+         indent();
+         bool hasChildValue = !childValues_.empty();
+         unsigned index =0;
+         while ( true )
+         {
+            const Value &childValue = value[index];
+            writeCommentBeforeValue( childValue );
+            if ( hasChildValue )
+               writeWithIndent( childValues_[index] );
+            else
+            {
+               writeIndent();
+               writeValue( childValue );
+            }
+            if ( ++index == size )
+            {
+               writeCommentAfterValueOnSameLine( childValue );
+               break;
+            }
+            document_ += ",";
+            writeCommentAfterValueOnSameLine( childValue );
+         }
+         unindent();
+         writeWithIndent( "]" );
+      }
+      else // output on a single line
+      {
+         assert( childValues_.size() == size );
+         document_ += "[ ";
+         for ( unsigned index =0; index < size; ++index )
+         {
+            if ( index > 0 )
+               document_ += ", ";
+            document_ += childValues_[index];
+         }
+         document_ += " ]";
+      }
+   }
+}
+
+
+bool 
+StyledWriter::isMultineArray( const Value &value )
+{
+   int size = value.size();
+   bool isMultiLine = size*3 >= rightMargin_ ;
+   childValues_.clear();
+   for ( int index =0; index < size  &&  !isMultiLine; ++index )
+   {
+      const Value &childValue = value[index];
+      isMultiLine = isMultiLine  ||
+                     ( (childValue.isArray()  ||  childValue.isObject())  &&  
+                        childValue.size() > 0 );
+   }
+   if ( !isMultiLine ) // check if line length > max line length
+   {
+      childValues_.reserve( size );
+      addChildValues_ = true;
+      int lineLength = 4 + (size-1)*2; // '[ ' + ', '*n + ' ]'
+      for ( int index =0; index < size  &&  !isMultiLine; ++index )
+      {
+         writeValue( value[index] );
+         lineLength += int( childValues_[index].length() );
+         isMultiLine = isMultiLine  &&  hasCommentForValue( value[index] );
+      }
+      addChildValues_ = false;
+      isMultiLine = isMultiLine  ||  lineLength >= rightMargin_;
+   }
+   return isMultiLine;
+}
+
+
+void 
+StyledWriter::pushValue( const std::string &value )
+{
+   if ( addChildValues_ )
+      childValues_.push_back( value );
+   else
+      document_ += value;
+}
+
+
+void 
+StyledWriter::writeIndent()
+{
+   if ( !document_.empty() )
+   {
+      char last = document_[document_.length()-1];
+      if ( last == ' ' )     // already indented
+         return;
+      if ( last != '\n' )    // Comments may add new-line
+         document_ += '\n';
+   }
+   document_ += indentString_;
+}
+
+
+void 
+StyledWriter::writeWithIndent( const std::string &value )
+{
+   writeIndent();
+   document_ += value;
+}
+
+
+void 
+StyledWriter::indent()
+{
+   indentString_ += std::string( indentSize_, ' ' );
+}
+
+
+void 
+StyledWriter::unindent()
+{
+   assert( int(indentString_.size()) >= indentSize_ );
+   indentString_.resize( indentString_.size() - indentSize_ );
+}
+
+
+void 
+StyledWriter::writeCommentBeforeValue( const Value &root )
+{
+   if ( !root.hasComment( commentBefore ) )
+      return;
+   document_ += normalizeEOL( root.getComment( commentBefore ) );
+   document_ += "\n";
+}
+
+
+void 
+StyledWriter::writeCommentAfterValueOnSameLine( const Value &root )
+{
+   if ( root.hasComment( commentAfterOnSameLine ) )
+      document_ += " " + normalizeEOL( root.getComment( commentAfterOnSameLine ) );
+
+   if ( root.hasComment( commentAfter ) )
+   {
+      document_ += "\n";
+      document_ += normalizeEOL( root.getComment( commentAfter ) );
+      document_ += "\n";
+   }
+}
+
+
+bool 
+StyledWriter::hasCommentForValue( const Value &value )
+{
+   return value.hasComment( commentBefore )
+          ||  value.hasComment( commentAfterOnSameLine )
+          ||  value.hasComment( commentAfter );
+}
+
+
+std::string 
+StyledWriter::normalizeEOL( const std::string &text )
+{
+   std::string normalized;
+   normalized.reserve( text.length() );
+   const char *begin = text.c_str();
+   const char *end = begin + text.length();
+   const char *current = begin;
+   while ( current != end )
+   {
+      char c = *current++;
+      if ( c == '\r' ) // mac or dos EOL
+      {
+         if ( *current == '\n' ) // convert dos EOL
+            ++current;
+         normalized += '\n';
+      }
+      else // handle unix EOL & other char
+         normalized += c;
+   }
+   return normalized;
+}
+
+
+// Class StyledStreamWriter
+// //////////////////////////////////////////////////////////////////
+
+StyledStreamWriter::StyledStreamWriter( std::string indentation )
+   : document_(NULL)
+   , rightMargin_( 74 )
+   , indentation_( indentation )
+{
+}
+
+
+void
+StyledStreamWriter::write( std::ostream &out, const Value &root )
+{
+   document_ = &out;
+   addChildValues_ = false;
+   indentString_ = "";
+   writeCommentBeforeValue( root );
+   writeValue( root );
+   writeCommentAfterValueOnSameLine( root );
+   *document_ << "\n";
+   document_ = NULL; // Forget the stream, for safety.
+}
+
+
+void 
+StyledStreamWriter::writeValue( const Value &value )
+{
+   switch ( value.type() )
+   {
+   case nullValue:
+      pushValue( "null" );
+      break;
+   case intValue:
+      pushValue( valueToString( value.asInt() ) );
+      break;
+   case uintValue:
+      pushValue( valueToString( value.asUInt() ) );
+      break;
+   case realValue:
+      pushValue( valueToString( value.asDouble() ) );
+      break;
+   case stringValue:
+      pushValue( valueToQuotedString( value.asCString() ) );
+      break;
+   case booleanValue:
+      pushValue( valueToString( value.asBool() ) );
+      break;
+   case arrayValue:
+      writeArrayValue( value);
+      break;
+   case objectValue:
+      {
+         Value::Members members( value.getMemberNames() );
+         if ( members.empty() )
+            pushValue( "{}" );
+         else
+         {
+            writeWithIndent( "{" );
+            indent();
+            Value::Members::iterator it = members.begin();
+            while ( true )
+            {
+               const std::string &name = *it;
+               const Value &childValue = value[name];
+               writeCommentBeforeValue( childValue );
+               writeWithIndent( valueToQuotedString( name.c_str() ) );
+               *document_ << " : ";
+               writeValue( childValue );
+               if ( ++it == members.end() )
+               {
+                  writeCommentAfterValueOnSameLine( childValue );
+                  break;
+               }
+               *document_ << ",";
+               writeCommentAfterValueOnSameLine( childValue );
+            }
+            unindent();
+            writeWithIndent( "}" );
+         }
+      }
+      break;
+   }
+}
+
+
+void 
+StyledStreamWriter::writeArrayValue( const Value &value )
+{
+   unsigned size = value.size();
+   if ( size == 0 )
+      pushValue( "[]" );
+   else
+   {
+      bool isArrayMultiLine = isMultineArray( value );
+      if ( isArrayMultiLine )
+      {
+         writeWithIndent( "[" );
+         indent();
+         bool hasChildValue = !childValues_.empty();
+         unsigned index =0;
+         while ( true )
+         {
+            const Value &childValue = value[index];
+            writeCommentBeforeValue( childValue );
+            if ( hasChildValue )
+               writeWithIndent( childValues_[index] );
+            else
+            {
+	       writeIndent();
+               writeValue( childValue );
+            }
+            if ( ++index == size )
+            {
+               writeCommentAfterValueOnSameLine( childValue );
+               break;
+            }
+            *document_ << ",";
+            writeCommentAfterValueOnSameLine( childValue );
+         }
+         unindent();
+         writeWithIndent( "]" );
+      }
+      else // output on a single line
+      {
+         assert( childValues_.size() == size );
+         *document_ << "[ ";
+         for ( unsigned index =0; index < size; ++index )
+         {
+            if ( index > 0 )
+               *document_ << ", ";
+            *document_ << childValues_[index];
+         }
+         *document_ << " ]";
+      }
+   }
+}
+
+
+bool 
+StyledStreamWriter::isMultineArray( const Value &value )
+{
+   int size = value.size();
+   bool isMultiLine = size*3 >= rightMargin_ ;
+   childValues_.clear();
+   for ( int index =0; index < size  &&  !isMultiLine; ++index )
+   {
+      const Value &childValue = value[index];
+      isMultiLine = isMultiLine  ||
+                     ( (childValue.isArray()  ||  childValue.isObject())  &&  
+                        childValue.size() > 0 );
+   }
+   if ( !isMultiLine ) // check if line length > max line length
+   {
+      childValues_.reserve( size );
+      addChildValues_ = true;
+      int lineLength = 4 + (size-1)*2; // '[ ' + ', '*n + ' ]'
+      for ( int index =0; index < size  &&  !isMultiLine; ++index )
+      {
+         writeValue( value[index] );
+         lineLength += int( childValues_[index].length() );
+         isMultiLine = isMultiLine  &&  hasCommentForValue( value[index] );
+      }
+      addChildValues_ = false;
+      isMultiLine = isMultiLine  ||  lineLength >= rightMargin_;
+   }
+   return isMultiLine;
+}
+
+
+void 
+StyledStreamWriter::pushValue( const std::string &value )
+{
+   if ( addChildValues_ )
+      childValues_.push_back( value );
+   else
+      *document_ << value;
+}
+
+
+void 
+StyledStreamWriter::writeIndent()
+{
+  /*
+    Some comments in this method would have been nice. ;-)
+
+   if ( !document_.empty() )
+   {
+      char last = document_[document_.length()-1];
+      if ( last == ' ' )     // already indented
+         return;
+      if ( last != '\n' )    // Comments may add new-line
+         *document_ << '\n';
+   }
+  */
+   *document_ << '\n' << indentString_;
+}
+
+
+void 
+StyledStreamWriter::writeWithIndent( const std::string &value )
+{
+   writeIndent();
+   *document_ << value;
+}
+
+
+void 
+StyledStreamWriter::indent()
+{
+   indentString_ += indentation_;
+}
+
+
+void 
+StyledStreamWriter::unindent()
+{
+   assert( indentString_.size() >= indentation_.size() );
+   indentString_.resize( indentString_.size() - indentation_.size() );
+}
+
+
+void 
+StyledStreamWriter::writeCommentBeforeValue( const Value &root )
+{
+   if ( !root.hasComment( commentBefore ) )
+      return;
+   *document_ << normalizeEOL( root.getComment( commentBefore ) );
+   *document_ << "\n";
+}
+
+
+void 
+StyledStreamWriter::writeCommentAfterValueOnSameLine( const Value &root )
+{
+   if ( root.hasComment( commentAfterOnSameLine ) )
+      *document_ << " " + normalizeEOL( root.getComment( commentAfterOnSameLine ) );
+
+   if ( root.hasComment( commentAfter ) )
+   {
+      *document_ << "\n";
+      *document_ << normalizeEOL( root.getComment( commentAfter ) );
+      *document_ << "\n";
+   }
+}
+
+
+bool 
+StyledStreamWriter::hasCommentForValue( const Value &value )
+{
+   return value.hasComment( commentBefore )
+          ||  value.hasComment( commentAfterOnSameLine )
+          ||  value.hasComment( commentAfter );
+}
+
+
+std::string 
+StyledStreamWriter::normalizeEOL( const std::string &text )
+{
+   std::string normalized;
+   normalized.reserve( text.length() );
+   const char *begin = text.c_str();
+   const char *end = begin + text.length();
+   const char *current = begin;
+   while ( current != end )
+   {
+      char c = *current++;
+      if ( c == '\r' ) // mac or dos EOL
+      {
+         if ( *current == '\n' ) // convert dos EOL
+            ++current;
+         normalized += '\n';
+      }
+      else // handle unix EOL & other char
+         normalized += c;
+   }
+   return normalized;
+}
+
+
+std::ostream& operator<<( std::ostream &sout, const Value &root )
+{
+   Json::StyledStreamWriter writer;
+   writer.write(sout, root);
+   return sout;
+}
+
+
+} // namespace Json
diff --git a/src/blackberry10/native/public/plugin.cpp b/src/blackberry10/native/public/plugin.cpp
new file mode 100644
index 0000000..2a20f5b
--- /dev/null
+++ b/src/blackberry10/native/public/plugin.cpp
@@ -0,0 +1,337 @@
+/*
+ * Copyright 2014 BlackBerry Limited.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "plugin.h"
+#include "tokenizer.h"
+
+#ifdef _WINDOWS
+#include <windows.h>
+BOOL APIENTRY DllMain( HANDLE hModule,
+                       DWORD ul_reason_for_call,
+                       LPVOID lpReserved )
+{
+    return TRUE;
+}
+#else
+#include <errno.h>
+#include <string.h>
+
+extern int errno;
+#endif
+
+SendPluginEv SendPluginEvent;
+
+string g_GetSysErrMsg( void )
+{
+    string strError = "Unknown";
+    // Problem loading
+#ifdef _WINDOWS
+    int nErrorCode = GetLastError();
+    LPTSTR s;
+    if ( ::FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
+    NULL, nErrorCode, 0, ( LPTSTR ) &s, 0, NULL ) )
+    {
+        strError = s;
+    }
+    else
+    {
+        char szBuf[ 20 ];
+        _snprintf_s( szBuf, _countof(szBuf), 19, "%d", nErrorCode );
+        strError = szBuf;
+    }
+#else
+    char szError[80];
+    if ( strerror_r( errno, szError, sizeof(szError)  ) )
+    {
+        strError = "no description found";
+    }
+    else
+    {
+        strError = szError;
+    }
+#endif
+    return strError;
+}
+
+void g_sleep( unsigned int mseconds )
+{
+#ifdef _WINDOWS
+    Sleep( mseconds );
+#else
+    usleep( mseconds * 1000 );
+#endif
+}
+
+string& g_trim( string& str )
+{
+    // Whitespace characters
+    char whspc[] = " \t\r\n\v\f";
+
+    // Whack off first part
+    size_t pos = str.find_first_not_of( whspc );
+
+    if ( pos != string::npos )
+        str.replace( 0, pos, "" );
+
+    // Whack off trailing stuff
+    pos = str.find_last_not_of( whspc );
+
+    if ( pos != string::npos )
+        str.replace( pos + 1, str.length() - pos, "" );
+
+    return str;
+}
+
+void g_tokenize( const string& str, const string& delimiters, vector<string>& tokens )
+{
+    tokenize( str, tokens, delimiters );
+}
+
+char* SetEventFunc( SendPluginEv funcPtr )
+{
+    static char * szObjList = onGetObjList();
+    SendPluginEvent = funcPtr;
+    return szObjList;
+}
+
+
+const int nMAXSIZE = 512;
+char* g_pszRetVal = NULL;
+
+//-----------------------------------------------------------
+// Map from an object Id to an object instance
+//-----------------------------------------------------------
+typedef std::map<string, JSExt*> StringToJExt_T;
+
+//-----------------------------------------------------------
+// Map from a browser context to an id mapping
+//-----------------------------------------------------------
+typedef std::map<void*, StringToJExt_T*> VoidToMap_T;
+
+VoidToMap_T g_context2Map;
+
+class GlobalSharedModule
+{
+
+public:
+    GlobalSharedModule( void )
+    {
+        g_pszRetVal = new char[ nMAXSIZE ];
+    }
+
+    ~GlobalSharedModule()
+    {
+        delete [] g_pszRetVal;
+
+        VoidToMap_T::iterator posMaps;
+
+        for ( posMaps = g_context2Map.begin(); posMaps != g_context2Map.end(); ++posMaps )
+        {
+            StringToJExt_T& id2Obj = *posMaps->second;
+            StringToJExt_T::iterator posMap;
+
+            for ( posMap = id2Obj.begin(); posMap != id2Obj.end(); ++posMap )
+            {
+                JSExt* pJSExt = posMap->second;
+
+                if ( pJSExt->CanDelete() )
+                {
+                    delete pJSExt;
+                }
+            }
+
+            id2Obj.erase( id2Obj.begin(), id2Obj.end() );
+        }
+
+        g_context2Map.erase( g_context2Map.begin(), g_context2Map.end() );
+    }
+};
+
+GlobalSharedModule g_sharedModule;
+
+char* g_str2global( const string& strRetVal )
+{
+    int nLen = strRetVal.size();
+
+    if ( nLen >= nMAXSIZE )
+    {
+        delete [] g_pszRetVal;
+        g_pszRetVal = new char[ nLen + 1 ];
+    }
+
+    else
+    {
+        // To minimaize the number of memory reallocations, the assumption
+        // is that in most times this will be the case
+        delete [] g_pszRetVal;
+        g_pszRetVal = new char[ nMAXSIZE ];
+    }
+
+    strcpy( g_pszRetVal, strRetVal.c_str() );
+    return g_pszRetVal;
+}
+
+bool g_unregisterObject( const string& strObjId, void* pContext )
+{
+    // Called by the plugin extension implementation
+    // if the extension handles the deletion of its object
+
+    StringToJExt_T * pID2Obj = NULL;
+
+    VoidToMap_T::iterator iter = g_context2Map.find( pContext );
+
+    if ( iter != g_context2Map.end() )
+    {
+        pID2Obj = iter->second;
+    }
+    else
+    {
+        return false;
+    }
+
+    StringToJExt_T& mapID2Obj = *pID2Obj;
+
+    StringToJExt_T::iterator r = mapID2Obj.find( strObjId );
+
+    if ( r == mapID2Obj.end() )
+    {
+        return false;
+    }
+
+    mapID2Obj.erase( strObjId );
+    return true;
+}
+
+char* InvokeFunction( const char* szCommand, void* pContext )
+{
+    StringToJExt_T * pID2Obj = NULL;
+
+    VoidToMap_T::iterator iter = g_context2Map.find( pContext );
+
+    if ( iter != g_context2Map.end() )
+    {
+        pID2Obj = iter->second;
+    }
+    else
+    {
+        pID2Obj = new StringToJExt_T;
+        g_context2Map[ pContext ] = pID2Obj;
+    }
+
+    StringToJExt_T& mapID2Obj = *pID2Obj;
+
+    string strFullCommand = szCommand;
+    vector<string> arParams;
+    g_tokenize( strFullCommand, " ", arParams );
+    string strCommand = arParams[ 0 ];
+    string strRetVal = szERROR;
+
+    if ( strCommand == szCREATE )
+    {
+        string strClassName = arParams[ 1 ];
+        string strObjId = arParams[ 2 ];
+
+        StringToJExt_T::iterator r = mapID2Obj.find( strObjId );
+
+        if ( r != mapID2Obj.end() )
+        {
+            strRetVal += strObjId;
+            strRetVal += " :Object already exists.";
+            return g_str2global( strRetVal );
+        }
+
+        JSExt* pJSExt = onCreateObject( strClassName, strObjId );
+
+        if ( pJSExt == NULL )
+        {
+            strRetVal += strObjId;
+            strRetVal += " :Unknown object type ";
+            strRetVal += strClassName;
+            return g_str2global( strRetVal );
+        }
+
+        pJSExt->m_pContext = pContext;
+        mapID2Obj[ strObjId ] = pJSExt;
+
+        strRetVal = szOK;
+        strRetVal += strObjId;
+        return g_str2global( strRetVal );
+    }
+    else
+    if ( strCommand == szINVOKE )
+    {
+        string strObjId = arParams[ 1 ];
+        string strMethod = arParams[ 2 ];
+
+        StringToJExt_T::iterator r = mapID2Obj.find( strObjId );
+
+        if ( r == mapID2Obj.end() )
+        {
+            strRetVal += strObjId;
+            strRetVal += " :No object found for id.";
+            return g_str2global( strRetVal );
+        }
+
+        JSExt* pJSExt = r->second;
+
+        size_t nLoc = strFullCommand.find( strObjId );
+
+        if ( nLoc == string::npos )
+        {
+            strRetVal += strObjId;
+            strRetVal += " :Internal InvokeMethod error.";
+            return g_str2global( strRetVal );
+        }
+
+        if ( strMethod == szDISPOSE )
+        {
+            StringToJExt_T::iterator r = mapID2Obj.find( strObjId );
+
+            if ( r == mapID2Obj.end() )
+            {
+                strRetVal = szERROR;
+                strRetVal += strObjId;
+                return g_str2global( strRetVal );
+            }
+
+            JSExt * pJSExt = mapID2Obj[ strObjId ];
+
+            if ( pJSExt->CanDelete() )
+            {
+                delete pJSExt;
+            }
+
+            mapID2Obj.erase( strObjId );
+            strRetVal = szOK;
+            strRetVal += strObjId;
+            return g_str2global( strRetVal );
+        }
+
+        size_t nSuffixLoc = nLoc + strObjId.size();
+        string strInvoke = strFullCommand.substr( nSuffixLoc );
+        strInvoke = g_trim( strInvoke );
+        strRetVal = pJSExt->InvokeMethod( strInvoke );
+        return g_str2global( strRetVal );
+    }
+
+    strRetVal += " :Unknown command ";
+    strRetVal += strCommand;
+    return g_str2global( strRetVal );
+}
+
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
diff --git a/src/blackberry10/native/public/plugin.h b/src/blackberry10/native/public/plugin.h
new file mode 100644
index 0000000..c9f0cbd
--- /dev/null
+++ b/src/blackberry10/native/public/plugin.h
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2014 BlackBerry Limited.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PLUGIN_H
+#define _PLUGIN_H
+
+#include <map>
+#include <string>
+#include <vector>
+#include <unistd.h>
+//#include "tokenizer.h"
+
+using namespace std;
+
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+//%% Functions exported by this DLL
+//%% Should always be only SetEventFunc and InvokeFunction
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+// g++ requires extern "C" otherwise the names of SetEventFunc and InvokeFunction
+// are mangled C++ style. MS Visual Studio doesn't seem to care though.
+extern "C"
+{
+    typedef void (*SendPluginEv)( const char* szEvent, void* pContext );
+    char* SetEventFunc(SendPluginEv funcPtr);
+    char* InvokeFunction( const char* szCommand, void* pContext );
+}
+
+// JNEXT Framework function of the form:
+// typedef void (*SendPluginEv)( const char* szEvent );
+// used to notify JavaScript of an asynchronous event
+extern SendPluginEv SendPluginEvent;
+
+/////////////////////////////////////////////////////////////////////////
+// Constants and methods common to all JNEXT extensions types
+/////////////////////////////////////////////////////////////////////////
+#define szERROR         "Error "
+#define szOK            "Ok "
+
+#define szDISPOSE       "Dispose"
+#define szINVOKE        "InvokeMethod"
+#define szCREATE        "CreateObj"
+
+/////////////////////////////////////////////////////////////////////////
+// Utility functions
+/////////////////////////////////////////////////////////////////////////
+string& g_trim( string& str );
+void g_tokenize(const string& str,const string& delimiters, vector<string>& tokens);
+char* g_str2static( const string& strRetVal );
+void g_sleep( unsigned int mseconds );
+bool g_unregisterObject( const string& strObjId, void* pContext );
+
+
+/////////////////////////////////////////////////////////////////////////
+// Abstract extension object
+/////////////////////////////////////////////////////////////////////////
+class JSExt
+{
+public:
+    virtual ~JSExt() {};
+    virtual string InvokeMethod( const string& strCommand ) = 0;
+    virtual bool CanDelete( void ) = 0;
+    virtual void TryDelete( void ) {}
+public:
+    void* m_pContext;
+};
+
+/////////////////////////////////////////////////////////////////////////
+// Callback functions to be implemented by the plugin implementation
+/////////////////////////////////////////////////////////////////////////
+extern char* onGetObjList( void );
+extern JSExt* onCreateObject( const string& strClassName, const string& strObjId );
+
+#endif
diff --git a/src/blackberry10/native/public/tokenizer.cpp b/src/blackberry10/native/public/tokenizer.cpp
new file mode 100644
index 0000000..4a39573
--- /dev/null
+++ b/src/blackberry10/native/public/tokenizer.cpp
@@ -0,0 +1,222 @@
+/************************************************************************
+The zlib/libpng License
+
+Copyright (c) 2006 Joerg Wiedenmann
+
+This software is provided 'as-is', without any express or implied warranty.
+In no event will the authors be held liable for any damages arising from
+the use of this software.
+
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it
+freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented;
+you must not claim that you wrote the original software.
+If you use this software in a product, an acknowledgment
+in the product documentation would be appreciated but is
+not required.
+
+2. Altered source versions must be plainly marked as such,
+and must not be misrepresented as being the original software.
+
+3. This notice may not be removed or altered from any source distribution.
+
+***********************************************************************/
+
+/********************************************************************
+	created:	2006-01-28
+	filename: 	tokenizer.cpp
+	author:		Jörg Wiedenmann
+	
+	purpose:	A tokenizer function which provides a very
+				customizable way of breaking up strings.
+
+	history:	2006-01-28, Original version
+				2006-03-04, Fixed a small parsing bug, thanks Elias.
+*********************************************************************/
+
+#include "tokenizer.h"
+
+using namespace std;
+
+void tokenize ( const string& str, vector<string>& result,
+			   const string& delimiters, const string& delimiters_preserve,
+			   const string& quote, const string& esc )
+{
+	// clear the vector
+	if ( false == result.empty() )
+	{
+		result.clear();
+	}
+
+	string::size_type pos = 0; // the current position (char) in the string
+	char ch = 0; // buffer for the current character
+	char delimiter = 0;	// the buffer for the delimiter char which
+							// will be added to the tokens if the delimiter
+							// is preserved
+	char current_quote = 0; // the char of the current open quote
+	bool quoted = false; // indicator if there is an open quote
+	string token;  // string buffer for the token
+	bool token_complete = false; // indicates if the current token is
+								 // read to be added to the result vector
+	string::size_type len = str.length();  // length of the input-string
+
+	// for every char in the input-string
+	while ( len > pos )
+	{
+		// get the character of the string and reset the delimiter buffer
+		ch = str.at(pos);
+		delimiter = 0;
+
+		// assume ch isn't a delimiter
+		bool add_char = true;
+
+		// check ...
+
+		// ... if the delimiter is an escaped character
+		bool escaped = false; // indicates if the next char is protected
+		if ( false == esc.empty() ) // check if esc-chars are  provided
+		{
+			if ( string::npos != esc.find_first_of(ch) )
+			{
+				// get the escaped char
+				++pos;
+				if ( pos < len ) // if there are more chars left
+				{
+					// get the next one
+					ch = str.at(pos);
+
+					// add the escaped character to the token
+					add_char = true;
+				}
+				else // cannot get any more characters
+				{
+					// don't add the esc-char
+					add_char = false;
+				}
+
+				// ignore the remaining delimiter checks
+				escaped = true;
+			}
+		}
+
+		// ... if the delimiter is a quote
+		if ( false == quote.empty() && false == escaped )
+		{
+			// if quote chars are provided and the char isn't protected
+			if ( string::npos != quote.find_first_of(ch) )
+			{
+				// if not quoted, set state to open quote and set
+				// the quote character
+				if ( false == quoted )
+				{
+					quoted = true;
+					current_quote = ch;
+
+					// don't add the quote-char to the token
+					add_char = false;
+				}
+				else // if quote is open already
+				{
+					// check if it is the matching character to close it
+					if ( current_quote == ch )
+					{
+						// close quote and reset the quote character
+						quoted = false;
+						current_quote = 0;
+
+						// don't add the quote-char to the token
+						add_char = false;
+					}
+				} // else
+			}
+		}
+
+		// ... if the delimiter isn't preserved
+		if ( false == delimiters.empty() && false == escaped &&
+			 false == quoted )
+		{
+			// if a delimiter is provided and the char isn't protected by
+			// quote or escape char
+			if ( string::npos != delimiters.find_first_of(ch) )
+			{
+				// if ch is a delimiter and the token string isn't empty
+				// the token is complete
+				if ( false == token.empty() ) // BUGFIX: 2006-03-04
+				{
+					token_complete = true;
+				}
+
+				// don't add the delimiter to the token
+				add_char = false;
+			}
+		}
+
+		// ... if the delimiter is preserved - add it as a token
+		bool add_delimiter = false;
+		if ( false == delimiters_preserve.empty() && false == escaped &&
+			 false == quoted )
+		{
+			// if a delimiter which will be preserved is provided and the
+			// char isn't protected by quote or escape char
+			if ( string::npos != delimiters_preserve.find_first_of(ch) )
+			{
+				// if ch is a delimiter and the token string isn't empty
+				// the token is complete
+				if ( false == token.empty() ) // BUGFIX: 2006-03-04
+				{
+					token_complete = true;
+				}
+
+				// don't add the delimiter to the token
+				add_char = false;
+
+				// add the delimiter
+				delimiter = ch;
+				add_delimiter = true;
+			}
+		}
+
+
+		// add the character to the token
+		if ( true == add_char )
+		{
+			// add the current char
+			token.push_back( ch );
+		}
+
+		// add the token if it is complete
+		if ( true == token_complete && false == token.empty() )
+		{
+			// add the token string
+			result.push_back( token );
+
+			// clear the contents
+			token.clear();
+
+			// build the next token
+			token_complete = false;
+		}
+
+		// add the delimiter
+		if ( true == add_delimiter )
+		{
+			// the next token is the delimiter
+			string delim_token;
+			delim_token.push_back( delimiter );
+			result.push_back( delim_token );
+
+			// REMOVED: 2006-03-04, Bugfix
+		}
+
+		// repeat for the next character
+		++pos;
+	} // while
+
+	// add the final token
+	if ( false == token.empty() )
+	{
+		result.push_back( token );
+	}
+}
diff --git a/src/blackberry10/native/public/tokenizer.h b/src/blackberry10/native/public/tokenizer.h
new file mode 100644
index 0000000..75f567c
--- /dev/null
+++ b/src/blackberry10/native/public/tokenizer.h
@@ -0,0 +1,55 @@
+/************************************************************************
+The zlib/libpng License
+
+Copyright (c) 2006 Joerg Wiedenmann
+
+This software is provided 'as-is', without any express or implied warranty.
+In no event will the authors be held liable for any damages arising from
+the use of this software.
+
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it
+freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented;
+	you must not claim that you wrote the original software.
+	If you use this software in a product, an acknowledgment
+	in the product documentation would be appreciated but is
+	not required.
+
+2. Altered source versions must be plainly marked as such,
+	and must not be misrepresented as being the original software.
+
+3. This notice may not be removed or altered from any source distribution.
+
+***********************************************************************/
+
+/********************************************************************
+	created:	2006-01-28
+	filename: 	tokenizer.cpp
+	author:		Jörg Wiedenmann
+
+	purpose:	A tokenizer function which provides a very
+				customizable way of breaking up strings.
+*********************************************************************/
+
+#include <vector>
+#include <string>
+using namespace std;
+
+// Function to break up a string into tokens
+//
+// Parameters:
+//-----------
+// str = the input string that will be tokenized
+// result = the tokens for str
+// delimiters = the delimiter characters
+// delimiters preserve = same as above, but the delimiter characters
+//		will be put into the result as a token
+// quote = characters to protect the enclosed characters
+// esc = characters to protect a single character
+//
+
+void tokenize ( const string& str, vector<string>& result,
+			const string& delimiters, const string& delimiters_preserve = "",
+			const string& quote = "\"", const string& esc = "\\" );
diff --git a/src/blackberry10/native/simulator/libGlobalization.so b/src/blackberry10/native/simulator/libGlobalization.so
new file mode 100755
index 0000000..0cdcafb
--- /dev/null
+++ b/src/blackberry10/native/simulator/libGlobalization.so
Binary files differ
diff --git a/src/blackberry10/native/src/globalization_js.cpp b/src/blackberry10/native/src/globalization_js.cpp
new file mode 100644
index 0000000..3bf0589
--- /dev/null
+++ b/src/blackberry10/native/src/globalization_js.cpp
@@ -0,0 +1,163 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <string>
+#include <sys/slog2.h>
+#include "globalization_js.hpp"
+#include "globalization_ndk.hpp"
+
+using namespace std;
+
+// This can be any 16 bit integer value. It is used only for our own
+// logs identification when calling slog2f().
+const unsigned short ID_G11N = 22549;
+
+void setupLogging()
+{
+    static bool inited = false;
+
+    if (inited)
+        return;
+
+    inited = true;
+
+    // Reset the log buffers in case this is after a fork. (If there were no log buffers, this does
+    // nothing.)
+    int rc = slog2_reset();
+    if (rc < 0) {
+        fprintf(stderr, "Globalization: Error resetting slog2 buffer!\n");
+        return;
+    }
+
+    // Set up default slog2 buffer
+    slog2_buffer_set_config_t bufferConfigSet;
+    bufferConfigSet.buffer_set_name = "Globalization";
+    bufferConfigSet.num_buffers = 1;
+    bufferConfigSet.verbosity_level = SLOG2_INFO;
+    bufferConfigSet.buffer_config[0].buffer_name = "default";
+    bufferConfigSet.buffer_config[0].num_pages = 8;
+
+    slog2_buffer_t bufferHandle;
+    rc = slog2_register(&bufferConfigSet, &bufferHandle, 0);
+    if (rc < 0) {
+        fprintf(stderr, "Globalization: Error registering slogger2 buffer!\n");
+        return;
+    }
+
+    slog2_set_default_buffer(bufferHandle);
+}
+
+/**
+ * Default constructor.
+ */
+GlobalizationJS::GlobalizationJS(const std::string& id) :
+		m_id(id) {
+	m_pGlobalizationController = new webworks::GlobalizationNDK(this);
+}
+
+/**
+ * GlobalizationJS destructor.
+ */
+GlobalizationJS::~GlobalizationJS() {
+	if (m_pGlobalizationController)
+		delete m_pGlobalizationController;
+}
+
+/**
+ * This method returns the list of objects implemented by this native
+ * extension.
+ */
+char* onGetObjList() {
+	static char name[] = "Globalization";
+	return name;
+}
+
+/**
+ * This method is used by JNext to instantiate the GlobalizationJS object when
+ * an object is created on the JavaScript server side.
+ */
+JSExt* onCreateObject(const string& className, const string& id) {
+	setupLogging();
+
+	slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationJS::onCreateObject(%s, %s)",
+			className.c_str(), id.c_str());
+
+	if (className == "Globalization") {
+		return new GlobalizationJS(id);
+	}
+
+	return NULL;
+}
+
+/**
+ * Method used by JNext to determine if the object can be deleted.
+ */
+bool GlobalizationJS::CanDelete() {
+	return true;
+}
+
+/**
+ * It will be called from JNext JavaScript side with passed string.
+ * This method implements the interface for the JavaScript to native binding
+ * for invoking native code. This method is triggered when JNext.invoke is
+ * called on the JavaScript side with this native objects id.
+ */
+string GlobalizationJS::InvokeMethod(const string& command) {
+	slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationJS::InvokeMethod(%s)", command.c_str());
+
+	// format must be: "command callbackId params"
+	size_t commandIndex = command.find_first_of(" ");
+	std::string strCommand = command.substr(0, commandIndex);
+	size_t callbackIndex = command.find_first_of(" ", commandIndex + 1);
+	std::string callbackId = command.substr(commandIndex + 1, callbackIndex - commandIndex - 1);
+	std::string arg = command.substr(callbackIndex + 1, command.length());
+
+	// based on the command given, run the appropriate method in globalizationndk.cpp
+    if (strCommand == "getPreferredLanguage") {
+        return m_pGlobalizationController->getPreferredLanguage();
+    } else if (strCommand == "getLocaleName") {
+        return m_pGlobalizationController->getLocaleName();
+    } else if (strCommand == "dateToString") {
+        return m_pGlobalizationController->dateToString(arg);
+    } else if (strCommand == "stringToDate") {
+        return m_pGlobalizationController->stringToDate(arg);
+    } else if (strCommand == "getDatePattern") {
+        return m_pGlobalizationController->getDatePattern(arg);
+    } else if (strCommand == "getDateNames") {
+        return m_pGlobalizationController->getDateNames(arg);
+    } else if (strCommand == "isDayLightSavingsTime") {
+        return m_pGlobalizationController->isDayLightSavingsTime(arg);
+    } else if (strCommand == "getFirstDayOfWeek") {
+        return m_pGlobalizationController->getFirstDayOfWeek();
+    } else if (strCommand == "numberToString") {
+        return m_pGlobalizationController->numberToString(arg);
+    } else if (strCommand == "stringToNumber") {
+        return m_pGlobalizationController->stringToNumber(arg);
+    } else if (strCommand == "getNumberPattern") {
+        return m_pGlobalizationController->getNumberPattern(arg);
+    } else if (strCommand == "getCurrencyPattern") {
+        return m_pGlobalizationController->getCurrencyPattern(arg);
+	}
+
+	strCommand.append(";");
+	strCommand.append(command);
+	return strCommand;
+}
+
+// Notifies JavaScript of an event
+void GlobalizationJS::NotifyEvent(const std::string& event) {
+	std::string eventString = m_id + " ";
+	eventString.append(event);
+	SendPluginEvent(eventString.c_str(), m_pContext);
+}
diff --git a/src/blackberry10/native/src/globalization_js.hpp b/src/blackberry10/native/src/globalization_js.hpp
new file mode 100644
index 0000000..2cfed2a
--- /dev/null
+++ b/src/blackberry10/native/src/globalization_js.hpp
@@ -0,0 +1,39 @@
+/*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#ifndef GlobalizationJS_HPP_
+#define GlobalizationJS_HPP_
+
+#include <string>
+#include "../public/plugin.h"
+#include "globalization_ndk.hpp"
+
+extern const unsigned short ID_G11N;
+
+class GlobalizationJS: public JSExt {
+
+public:
+    explicit GlobalizationJS(const std::string& id);
+    virtual ~GlobalizationJS();
+    virtual bool CanDelete();
+    virtual std::string InvokeMethod(const std::string& command);
+    void NotifyEvent(const std::string& event);
+
+private:
+    std::string m_id;
+    // Definition of a pointer to the actual native extension code
+    webworks::GlobalizationNDK *m_pGlobalizationController;
+};
+
+#endif /* GlobalizationJS_HPP_ */
diff --git a/src/blackberry10/native/src/globalization_ndk.cpp b/src/blackberry10/native/src/globalization_ndk.cpp
new file mode 100644
index 0000000..445d238
--- /dev/null
+++ b/src/blackberry10/native/src/globalization_ndk.cpp
@@ -0,0 +1,1173 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <ctime>
+#include <list>
+#include <memory>
+#include <string>
+#include <json/reader.h>
+#include <json/writer.h>
+#include <sys/slog2.h>
+#include <unicode/calendar.h>
+#include <unicode/datefmt.h>
+#include <unicode/decimfmt.h>
+#include <unicode/dtfmtsym.h>
+#include <unicode/smpdtfmt.h>
+#include "globalization_ndk.hpp"
+#include "globalization_js.hpp"
+
+/*
+ * The following constants are defined based on Cordova Globalization
+ * plugin definition. They should match exactly.
+ * https://github.com/apache/cordova-plugin-globalization/blob/master/doc/index.md
+*/
+const int UNKNOWN_ERROR = 0;
+const int FORMATTING_ERROR = 1;
+const int PARSING_ERROR = 2;
+const int PATTERN_ERROR = 3;
+
+namespace webworks {
+
+std::string errorInJson(int code, const std::string& message)
+{
+    Json::Value error;
+    error["code"] = code;
+    error["message"] = message;
+
+    Json::Value root;
+    root["error"] = error;
+
+    Json::FastWriter writer;
+    return writer.write(root);
+}
+
+std::string resultInJson(const std::string& value)
+{
+    Json::Value root;
+    root["result"] = value;
+
+    Json::FastWriter writer;
+    return writer.write(root);
+}
+
+// This is needed so resultInJson(const char*) will not be called into
+// resultInJson(bool) implicitly.
+static inline std::string resultInJson(const char* value)
+{
+    return resultInJson(std::string(value));
+}
+
+std::string resultInJson(bool value)
+{
+    Json::Value root;
+    root["result"] = value;
+
+    Json::FastWriter writer;
+    return writer.write(root);
+}
+
+std::string resultInJson(int value)
+{
+    Json::Value root;
+    root["result"] = value;
+
+    Json::FastWriter writer;
+    return writer.write(root);
+}
+
+std::string resultInJson(double value)
+{
+    Json::Value root;
+    root["result"] = value;
+
+    Json::FastWriter writer;
+    return writer.write(root);
+}
+
+std::string resultDateInJson(const UDate& date)
+{
+    UErrorCode status = U_ZERO_ERROR;
+    Calendar* cal = Calendar::createInstance(status);
+    if (!cal) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::resultInJson: failed to create Calendar instance: %d",
+                status);
+        return errorInJson(UNKNOWN_ERROR, "Failed to create Calendar instance!");
+    }
+    std::auto_ptr<Calendar> deleter(cal);
+
+    cal->setTime(date, status);
+    if (status != U_ZERO_ERROR && status != U_ERROR_WARNING_START) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::resultInJson: failed to setTime: %d",
+                status);
+        return errorInJson(UNKNOWN_ERROR, "Failed to set Calendar time!");
+    }
+
+    Json::Value result;
+    result["year"] = cal->get(UCAL_YEAR, status);
+    result["month"] = cal->get(UCAL_MONTH, status);
+    result["day"] = cal->get(UCAL_DAY_OF_MONTH, status);
+    result["hour"] = cal->get(UCAL_HOUR, status);
+    result["minute"] = cal->get(UCAL_MINUTE, status);
+    result["second"] = cal->get(UCAL_SECOND, status);
+    result["millisecond"] = cal->get(UCAL_MILLISECOND, status);
+
+    Json::Value root;
+    root["result"] = result;
+
+    Json::FastWriter writer;
+    return writer.write(root);
+}
+
+std::string resultInJson(const std::string& pattern, const std::string& timezone, int utc_offset, int dst_offset)
+{
+    Json::Value result;
+    result["pattern"] = pattern;
+    result["timezone"] = timezone;
+    result["utc_offset"] = utc_offset;
+    result["dst_offset"] = dst_offset;
+
+    Json::Value root;
+    root["result"] = result;
+
+    Json::FastWriter writer;
+    return writer.write(root);
+}
+
+std::string resultInJson(const std::string& pattern, const std::string& symbol, int fraction,
+        double rounding, const std::string& positive, const std::string& negative,
+        const std::string& decimal, const std::string& grouping)
+{
+    Json::Value result;
+    result["pattern"] = pattern;
+    result["symbol"] = symbol;
+    result["fraction"] = fraction;
+    result["rounding"] = rounding;
+    result["positive"] = positive;
+    result["negative"] = negative;
+    result["decimal"] = decimal;
+    result["grouping"] = grouping;
+
+    Json::Value root;
+    root["result"] = result;
+
+    Json::FastWriter writer;
+    return writer.write(root);
+}
+
+std::string resultInJson(const std::string& pattern, const std::string& code,
+        int fraction, double rounding,
+        const std::string& decimal, const std::string& grouping)
+{
+    Json::Value result;
+    result["pattern"] = pattern;
+    result["code"] = code;
+    result["fraction"] = fraction;
+    result["rounding"] = rounding;
+    result["decimal"] = decimal;
+    result["grouping"] = grouping;
+
+    Json::Value root;
+    root["result"] = result;
+
+    Json::FastWriter writer;
+    return writer.write(root);
+}
+
+std::string resultInJson(const std::list<std::string>& names)
+{
+    Json::Value result;
+    std::list<std::string>::const_iterator end = names.end();
+    std::list<std::string>::const_iterator iter = names.begin();
+    for (; iter != end; ++iter)
+        result.append(*iter);
+
+    Json::Value root;
+    root["result"] = result;
+
+    Json::FastWriter writer;
+    return writer.write(root);
+}
+
+
+GlobalizationNDK::GlobalizationNDK(GlobalizationJS *parent) {
+	m_pParent = parent;
+}
+
+GlobalizationNDK::~GlobalizationNDK() {
+}
+
+std::string GlobalizationNDK::getPreferredLanguage()
+{
+    const Locale& loc = Locale::getDefault();
+
+    UnicodeString disp;
+    loc.getDisplayLanguage(loc, disp);
+    if (disp.isEmpty())
+        return resultInJson("English"); // FIXME: what should be the default language?
+
+    std::string utf8;
+    disp.toUTF8String(utf8);
+    return resultInJson(utf8);
+}
+
+std::string GlobalizationNDK::getLocaleName()
+{
+    const Locale& loc = Locale::getDefault();
+    const char* name = loc.getName();
+    if (name)
+        return resultInJson(name);
+
+    const char* lang = loc.getLanguage();
+    if (!lang)
+        return resultInJson("en"); // FIXME: what should be the default language?
+
+    const char* country = loc.getCountry();
+    if (!country)
+        return resultInJson(lang);
+
+    return resultInJson(std::string(lang) + "_" + country);
+}
+
+static bool handleDateOptions(const Json::Value& options, DateFormat::EStyle& dateStyle, DateFormat::EStyle& timeStyle, std::string& error)
+{
+    // This is the default value when no options provided.
+    dateStyle = DateFormat::kShort;
+    timeStyle = DateFormat::kShort;
+
+    if (options.isNull())
+        return true;
+
+    if (!options.isObject()) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::handleDateOptions: invalid options format: %d",
+                options.type());
+        error = "Options is invalid!";
+        return false;
+    }
+
+    Json::Value flv = options["formatLength"];
+    if (!flv.isNull()) {
+        if (!flv.isString()) {
+            slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::handleDateOptions: invalid formatLength format: %d",
+                    flv.type());
+            error = "formatLength is invalid!";
+            return false;
+        }
+
+        std::string format = flv.asString();
+        if (format.empty()) {
+            slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::handleDateOptions: empty formatLength!");
+            error = "formatLength is empty!";
+            return false;
+        }
+
+        if (format == "full") {
+            dateStyle = DateFormat::kFull;
+            timeStyle = dateStyle;
+        } else if (format == "long") {
+            dateStyle = DateFormat::kLong;
+            timeStyle = dateStyle;
+        } else if (format == "medium") {
+            dateStyle = DateFormat::kMedium;
+            timeStyle = dateStyle;
+        } else if (format == "short") {
+            // Nothing to change here.
+        } else {
+            slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::handleDateOptions: unsupported formatLength: %s",
+                    format.c_str());
+            error = "Unsupported formatLength!";
+            return false;
+        }
+    }
+
+    Json::Value slv = options["selector"];
+    if (!slv.isNull()) {
+        if (!slv.isString()) {
+            slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::handleDateOptions: invalid selector format: %d",
+                    slv.type());
+            error = "selector is invalid!";
+            return false;
+        }
+
+        std::string selector = slv.asString();
+        if (selector.empty()) {
+            slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::handleDateOptions: empty selector!");
+            error = "selector is empty!";
+            return false;
+        }
+
+        if (selector == "date")
+            timeStyle = DateFormat::kNone;
+            // Nothing to change here
+        else if (selector == "time")
+            dateStyle = DateFormat::kNone;
+        else if (selector == "date and time") {
+            // Nothing to do here.
+        } else {
+            slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::handleDateOptions: unsupported selector: %s",
+                    selector.c_str());
+            error = "Unsupported selector!";
+            return false;
+        }
+    }
+
+    return true;
+}
+
+std::string GlobalizationNDK::dateToString(const std::string& args)
+{
+    if (args.empty())
+        return errorInJson(PARSING_ERROR, "No date provided!");
+
+    Json::Reader reader;
+    Json::Value root;
+    bool parse = reader.parse(args, root);
+
+    if (!parse) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::dateToString: invalid json data: %s",
+                args.c_str());
+        return errorInJson(PARSING_ERROR, "Parameters not valid json format!");
+    }
+
+    Json::Value date = root["date"];
+    if (date.isNull()) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::dateToString: no date provided.");
+        return errorInJson(PARSING_ERROR, "No date provided!");
+    }
+
+    if (!date.isDouble()) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::dateToString: date is not a Double: %d.",
+                date.type());
+        return errorInJson(PARSING_ERROR, "Date in wrong format!");
+    }
+
+    Json::Value options = root["options"];
+
+    DateFormat::EStyle dstyle, tstyle;
+    std::string error;
+
+    if (!handleDateOptions(options, dstyle, tstyle, error))
+        return errorInJson(PARSING_ERROR, error);
+
+    UErrorCode status = U_ZERO_ERROR;
+    const Locale& loc = Locale::getDefault();
+    DateFormat* df = DateFormat::createDateTimeInstance(dstyle, tstyle, loc);
+
+    if (!df) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::dateToString: unable to create DateFormat!");
+        return errorInJson(UNKNOWN_ERROR, "Unable to create DateFormat instance!");
+    }
+    std::auto_ptr<DateFormat> deleter(df);
+
+    UnicodeString result;
+    df->format(date.asDouble(), result);
+
+    std::string utf8;
+    result.toUTF8String(utf8);
+    return resultInJson(utf8);
+}
+
+std::string GlobalizationNDK::stringToDate(const std::string& args)
+{
+    if (args.empty())
+        return errorInJson(PARSING_ERROR, "No dateString provided!");
+
+    Json::Reader reader;
+    Json::Value root;
+    bool parse = reader.parse(args, root);
+
+    if (!parse) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::stringToDate: invalid json data: %s",
+                args.c_str());
+        return errorInJson(PARSING_ERROR, "Parameters not valid json format!");
+    }
+
+    Json::Value dateString = root["dateString"];
+    if (!dateString.isString()) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::stringToDate: invalid dateString type: %d",
+                dateString.type());
+        return errorInJson(PARSING_ERROR, "dateString not a string!");
+    }
+
+    std::string dateValue = dateString.asString();
+    if (dateValue.empty()) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::stringToDate: empty dateString.");
+        return errorInJson(PARSING_ERROR, "dateString is empty!");
+    }
+
+    Json::Value options = root["options"];
+
+    DateFormat::EStyle dstyle, tstyle;
+    std::string error;
+    if (!handleDateOptions(options, dstyle, tstyle, error))
+        return errorInJson(PARSING_ERROR, error);
+
+    const Locale& loc = Locale::getDefault();
+    DateFormat* df = DateFormat::createDateTimeInstance(dstyle, tstyle, loc);
+
+    if (!df) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::stringToDate: unable to create DateFormat instance!");
+        return errorInJson(UNKNOWN_ERROR, "Unable to create DateFormat instance!");
+    }
+    std::auto_ptr<DateFormat> deleter(df);
+
+    UnicodeString uDate = UnicodeString::fromUTF8(dateValue);
+    UErrorCode status = U_ZERO_ERROR;
+    UDate date = df->parse(uDate, status);
+
+    // Note: not sure why U_ERROR_WARNING_START is returned when parse succeeded.
+    if (status != U_ZERO_ERROR && status != U_ERROR_WARNING_START) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::stringToDate: DataFormat::parse error: %d: %s",
+                status, dateValue.c_str());
+        return errorInJson(PARSING_ERROR, "Failed to parse dateString!");
+    }
+
+    return resultDateInJson(date);
+}
+
+std::string GlobalizationNDK::getDatePattern(const std::string& args)
+{
+    DateFormat::EStyle dstyle = DateFormat::kShort, tstyle = DateFormat::kShort;
+
+    if (!args.empty()) {
+        Json::Reader reader;
+        Json::Value root;
+        bool parse = reader.parse(args, root);
+
+        if (!parse) {
+            slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::getDatePattern: invalid json data: %s",
+                    args.c_str());
+            return errorInJson(PARSING_ERROR, "Parameters not valid json format!");
+        }
+
+        Json::Value options = root["options"];
+
+        std::string error;
+        if (!handleDateOptions(options, dstyle, tstyle, error))
+            return errorInJson(PARSING_ERROR, error);
+    }
+
+    UErrorCode status = U_ZERO_ERROR;
+    const Locale& loc = Locale::getDefault();
+    DateFormat* df = DateFormat::createDateTimeInstance(dstyle, tstyle, loc);
+
+    if (!df) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::getDatePattern: unable to create DateFormat instance!");
+        return errorInJson(UNKNOWN_ERROR, "Unable to create DateFormat instance!");
+    }
+    std::auto_ptr<DateFormat> deleter(df);
+
+    if (df->getDynamicClassID() != SimpleDateFormat::getStaticClassID()) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::getDatePattern: DateFormat instance not SimpleDateFormat!");
+        return errorInJson(UNKNOWN_ERROR, "DateFormat instance not SimpleDateFormat!");
+    }
+
+    SimpleDateFormat* sdf = (SimpleDateFormat*) df;
+
+    UnicodeString pt;
+    sdf->toPattern(pt);
+    std::string ptUtf8;
+    pt.toUTF8String(ptUtf8);
+
+    const TimeZone& tz = sdf->getTimeZone();
+
+    UnicodeString tzName;
+    tz.getDisplayName(tzName);
+    std::string tzUtf8;
+    tzName.toUTF8String(tzUtf8);
+
+    int utc_offset = tz.getRawOffset() / 1000; // UTC_OFFSET in seconds.
+    int dst_offset = tz.getDSTSavings() / 1000; // DST_OFFSET in seconds;
+
+    return resultInJson(ptUtf8, tzUtf8, utc_offset, dst_offset);
+}
+
+enum ENamesType {
+    kNamesWide,
+    kNamesNarrow,
+    kNameWidthCount
+};
+
+enum ENamesItem {
+    kNamesMonths,
+    kNamesDays,
+    kNamesTypeCount
+};
+
+static bool handleNamesOptions(const Json::Value& options, ENamesType& type, ENamesItem& item, std::string& error)
+{
+    // This is the default value when no options provided.
+    type = kNamesWide;
+    item = kNamesMonths;
+
+    if (options.isNull())
+        return true;
+
+    if (!options.isObject()) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::handleNamesOptions: invalid options format: %d",
+                options.type());
+        error = "Options is invalid!";
+        return false;
+    }
+
+    Json::Value tv = options["type"];
+    if (!tv.isNull()) {
+        if (!tv.isString()) {
+            slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::handleNamesOptions: invalid type format: %d",
+                    tv.type());
+            error = "type is invalid!";
+            return false;
+        }
+
+        std::string tstr = tv.asString();
+        if (tstr.empty()) {
+            slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::handleNamesOptions: empty type!");
+            error = "type is empty!";
+            return false;
+        }
+
+        if (tstr == "narrow") {
+            type = kNamesNarrow;
+        } else if (tstr == "wide") {
+            // Nothing to change here.
+        } else {
+            slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::handleNamesOptions: unsupported type: %s",
+                    tstr.c_str());
+            error = "Unsupported type!";
+            return false;
+        }
+    }
+
+    Json::Value iv = options["item"];
+    if (!iv.isNull()) {
+        if (!iv.isString()) {
+            slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::handleNamesOptions: invalid item format: %d",
+                    iv.type());
+            error = "item is invalid!";
+            return false;
+        }
+
+        std::string istr = iv.asString();
+        if (istr.empty()) {
+            slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::handleNamesOptions: empty item!");
+            error = "item is empty!";
+            return false;
+        }
+
+        if (istr == "days") {
+            item = kNamesDays;
+        } else if (istr == "months") {
+            // Nothing to change here.
+        } else {
+            slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::handleNamesOptions: unsupported item: %s",
+                    istr.c_str());
+            error = "Unsupported item!";
+            return false;
+        }
+    }
+
+    return true;
+}
+
+std::string GlobalizationNDK::getDateNames(const std::string& args)
+{
+    ENamesType type = kNamesWide;
+    ENamesItem item = kNamesMonths;
+
+    if (!args.empty()) {
+        Json::Reader reader;
+        Json::Value root;
+        bool parse = reader.parse(args, root);
+
+        if (!parse) {
+            slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::getDateNames: invalid json data: %s",
+                    args.c_str());
+            return errorInJson(PARSING_ERROR, "Parameters not valid json format!");
+        }
+
+        Json::Value options = root["options"];
+
+        std::string error;
+        if (!handleNamesOptions(options, type, item, error))
+            return errorInJson(PARSING_ERROR, error);
+    }
+
+    int count;
+    const char* pattern;
+    DateFormat::EStyle dstyle;
+
+    // Check ICU SimpleDateFormat document for patterns for months and days.
+    // http://www.icu-project.org/apiref/icu4c/classicu_1_1SimpleDateFormat.html
+    if (item == kNamesMonths) {
+        count = 12;
+        if (type == kNamesWide) {
+            dstyle = DateFormat::kLong;
+            pattern = "MMMM";
+        } else {
+            dstyle = DateFormat::kShort;
+            pattern = "MMM";
+        }
+    } else {
+        count = 7;
+        if (type == kNamesWide) {
+            dstyle = DateFormat::kLong;
+            pattern = "eeee";
+        } else {
+            dstyle = DateFormat::kShort;
+            pattern = "eee";
+        }
+    }
+
+    UErrorCode status = U_ZERO_ERROR;
+    const Locale& loc = Locale::getDefault();
+    DateFormat* df = DateFormat::createDateInstance(dstyle, loc);
+
+    if (!df) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::getDateNames: unable to create DateFormat instance!");
+        return errorInJson(UNKNOWN_ERROR, "Unable to create DateFormat instance!");
+    }
+    std::auto_ptr<DateFormat> deleter(df);
+
+    if (df->getDynamicClassID() != SimpleDateFormat::getStaticClassID()) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::getDateNames: DateFormat instance not SimpleDateFormat!");
+        return errorInJson(UNKNOWN_ERROR, "DateFormat instance not SimpleDateFormat!");
+    }
+
+    SimpleDateFormat* sdf = (SimpleDateFormat*) df;
+    sdf->applyLocalizedPattern(UnicodeString(pattern, -1), status);
+
+    Calendar* cal = Calendar::createInstance(status);
+    if (!cal) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::getDateNames: unable to create Calendar instance: %x.",
+                status);
+        return errorInJson(UNKNOWN_ERROR, "Unable to create Calendar instance!");
+    }
+    std::auto_ptr<Calendar> caldeleter(cal);
+
+    UCalendarDaysOfWeek ud = cal->getFirstDayOfWeek(status);
+    if (status != U_ZERO_ERROR && status != U_ERROR_WARNING_START) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::getDateNames: failed to getFirstDayOfWeek: %d!",
+                status);
+        return errorInJson(PARSING_ERROR, "Failed to getFirstDayOfWeek!");
+    }
+
+    if (ud == UCAL_SUNDAY)
+        cal->set(2014, 0, 5);
+    else
+        cal->set(2014, 0, 6);
+
+    std::list<std::string> utf8Names;
+
+    for (int i = 0; i < count; ++i) {
+        UnicodeString ucs;
+        sdf->format(cal->getTime(status), ucs);
+
+        if (item == kNamesMonths)
+            cal->add(UCAL_MONTH, 1, status);
+        else
+            cal->add(UCAL_DAY_OF_MONTH, 1, status);
+
+        if (ucs.isEmpty())
+            continue;
+
+        std::string utf8;
+        ucs.toUTF8String(utf8);
+        utf8Names.push_back(utf8);
+    }
+
+    if (!utf8Names.size()) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::getDateNames: unable to get symbols: item: %d, type: %d.",
+                item, type);
+        return errorInJson(UNKNOWN_ERROR, "Unable to get symbols!");
+    }
+
+    return resultInJson(utf8Names);
+}
+
+std::string GlobalizationNDK::isDayLightSavingsTime(const std::string& args)
+{
+    if (args.empty()) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::isDayLightSavingsTime: no date provided.");
+        return errorInJson(UNKNOWN_ERROR, "No date is provided!");
+    }
+
+    Json::Reader reader;
+    Json::Value root;
+    bool parse = reader.parse(args, root);
+
+    if (!parse) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::isDayLightSavingsTime: invalid json data: %s",
+                args.c_str());
+        return errorInJson(PARSING_ERROR, "Parameters not valid json format!");
+    }
+
+    Json::Value dv = root["date"];
+
+    if (!dv.isNumeric()) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::isDayLightSavingsTime: invalid date format: %d",
+                dv.type());
+        return errorInJson(PARSING_ERROR, "Invalid date format!");
+    }
+
+    double date = dv.asDouble();
+
+    UErrorCode status = U_ZERO_ERROR;
+    SimpleDateFormat* sdf = new SimpleDateFormat(status);
+    if (!sdf) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::isDayLightSavingsTime: unable to create SimpleDateFormat instance: %d.",
+                status);
+        return errorInJson(UNKNOWN_ERROR, "Unable to create SimpleDateFormat instance!");
+    }
+
+    const TimeZone& tz = sdf->getTimeZone();
+    bool result = tz.inDaylightTime(date, status);
+
+    return resultInJson(result);
+}
+
+std::string GlobalizationNDK::getFirstDayOfWeek()
+{
+    UErrorCode status = U_ZERO_ERROR;
+    Calendar* cal = Calendar::createInstance(status);
+    if (!cal) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::getFirstDayOfWeek: failed to create Calendar instance: %d",
+                status);
+        return errorInJson(UNKNOWN_ERROR, "Failed to create Calendar instance!");
+    }
+
+    UCalendarDaysOfWeek d = cal->getFirstDayOfWeek(status);
+    if (status != U_ZERO_ERROR && status != U_ERROR_WARNING_START) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::getFirstDayOfWeek: failed to call getFirstDayOfWeek: %d",
+                status);
+        return errorInJson(UNKNOWN_ERROR, "Failed to call getFirstDayOfWeek!");
+    }
+
+    return resultInJson(d);
+}
+
+enum ENumberType {
+    kNumberDecimal,
+    kNumberCurrency,
+    kNumberPercent,
+    kNumberTypeCount
+};
+
+static bool handleNumberOptions(const Json::Value& options, ENumberType& type, std::string& error)
+{
+    if (options.isNull())
+        return true;
+
+    if (!options.isObject()) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::handleNumberOptions: invalid options type: %d",
+                options.type());
+        error = "Invalid options type!";
+        return false;
+    }
+
+    Json::Value tv = options["type"];
+    if (tv.isNull()) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::handleNumberOptions: No type found!");
+        error = "No type found!";
+        return false;
+    }
+
+    if (!tv.isString()) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::handleNumberOptions: Invalid type type: %d",
+                tv.type());
+        error = "Invalid type type!";
+        return false;
+    }
+
+    std::string tstr = tv.asString();
+    if (tstr.empty()) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::handleNumberOptions: Empty type!");
+        error = "Empty type!";
+        return false;
+    }
+
+    if (tstr == "currency") {
+        type = kNumberCurrency;
+    } else if (tstr == "percent") {
+        type = kNumberPercent;
+    } else if (tstr == "decimal") {
+        type = kNumberDecimal;
+    } else {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::handleNumberOptions: unsupported type: %s",
+                tstr.c_str());
+        error = "Unsupported type!";
+        return false;
+    }
+
+    return true;
+}
+
+std::string GlobalizationNDK::numberToString(const std::string& args)
+{
+    if (args.empty()) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::numberToString: no arguments provided!");
+        return errorInJson(UNKNOWN_ERROR, "No arguments provided!");
+    }
+
+    Json::Reader reader;
+    Json::Value root;
+    bool parse = reader.parse(args, root);
+
+    if (!parse) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::numberToString: invalid json data: %s",
+                args.c_str());
+        return errorInJson(PARSING_ERROR, "Invalid json data!");
+    }
+
+    Json::Value nv = root["number"];
+    if (nv.isNull()) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::numberToString: no number provided!");
+        return errorInJson(FORMATTING_ERROR, "No number provided!");
+    }
+
+    if (!nv.isNumeric()) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::numberToString: invalid number type: %d!",
+                nv.type());
+        return errorInJson(FORMATTING_ERROR, "Invalid number type!");
+    }
+
+    // This is the default value when no options provided.
+    ENumberType type = kNumberDecimal;
+
+    Json::Value options = root["options"];
+    std::string error;
+    if (!handleNumberOptions(options, type, error))
+        return errorInJson(PARSING_ERROR, error);
+
+    UErrorCode status = U_ZERO_ERROR;
+    NumberFormat* nf;
+    switch (type) {
+    case kNumberDecimal:
+    default:
+        nf = NumberFormat::createInstance(status);
+        break;
+    case kNumberCurrency:
+        nf = NumberFormat::createCurrencyInstance(status);
+        break;
+    case kNumberPercent:
+        nf = NumberFormat::createPercentInstance(status);
+        break;
+    }
+
+    if (!nf) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::numberToString: failed to create NumberFormat instance for type %d: %d",
+                status, type);
+        return errorInJson(UNKNOWN_ERROR, "Failed to create NumberFormat instance!");
+    }
+    std::auto_ptr<NumberFormat> deleter(nf);
+
+    UnicodeString result;
+    nf->format(nv.asDouble(), result);
+    std::string utf8;
+    result.toUTF8String(utf8);
+
+    return resultInJson(utf8);
+}
+
+std::string GlobalizationNDK::stringToNumber(const std::string& args)
+{
+    if (args.empty()) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::stringToNumber: no arguments provided!");
+        return errorInJson(PARSING_ERROR, "No arguments provided!");
+    }
+
+    Json::Reader reader;
+    Json::Value root;
+    bool parse = reader.parse(args, root);
+
+    if (!parse) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::stringToNumber: invalid json data: %s",
+                args.c_str());
+        return errorInJson(PARSING_ERROR, "Invalid json data!");
+    }
+
+    Json::Value sv = root["numberString"];
+    if (sv.isNull()) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::stringToNumber: no numberString provided!");
+        return errorInJson(FORMATTING_ERROR, "No numberString provided!");
+    }
+
+    if (!sv.isString()) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::stringToNumber: invalid numberString type: %d!",
+                sv.type());
+        return errorInJson(FORMATTING_ERROR, "Invalid numberString type!");
+    }
+
+    std::string str = sv.asString();
+    if (str.empty()) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::stringToNumber: empty numberString!");
+        return errorInJson(FORMATTING_ERROR, "Empty numberString!");
+    }
+
+    // This is the default value when no options provided.
+    ENumberType type = kNumberDecimal;
+
+    Json::Value options = root["options"];
+    std::string error;
+    if (!handleNumberOptions(options, type, error))
+        return errorInJson(PARSING_ERROR, error);
+
+    UErrorCode status = U_ZERO_ERROR;
+    NumberFormat* nf;
+    switch (type) {
+    case kNumberDecimal:
+    default:
+        nf = NumberFormat::createInstance(status);
+        break;
+    case kNumberCurrency:
+        nf = NumberFormat::createCurrencyInstance(status);
+        break;
+    case kNumberPercent:
+        nf = NumberFormat::createPercentInstance(status);
+        break;
+    }
+
+    if (!nf) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::stringToNumber: failed to create NumberFormat instance for type %d: %d",
+                status, type);
+        return errorInJson(UNKNOWN_ERROR, "Failed to create NumberFormat instance!");
+    }
+    std::auto_ptr<NumberFormat> deleter(nf);
+
+    UnicodeString uStr = UnicodeString::fromUTF8(str);
+    Formattable value;
+
+    if (type == kNumberCurrency) {
+         ParsePosition pos;
+         CurrencyAmount* ca = nf->parseCurrency(uStr, pos);
+         if (ca)
+             value = ca->getNumber();
+         else
+             nf->parse(uStr, value, status);
+    } else
+        nf->parse(uStr, value, status);
+
+    if (status != U_ZERO_ERROR && status != U_ERROR_WARNING_START) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::stringToNumber: failed (%d) to parse string: %s",
+                status, str.c_str());
+        return errorInJson(PARSING_ERROR, "Failed to parse string!");
+    }
+
+    if (!value.isNumeric()) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::stringToNumber: string is not numeric: %s",
+                str.c_str());
+        return errorInJson(FORMATTING_ERROR, "String is not numeric!");
+    }
+
+    return resultInJson(value.getDouble());
+}
+
+std::string GlobalizationNDK::getNumberPattern(const std::string& args)
+{
+    // This is the default value when no options provided.
+    ENumberType type = kNumberDecimal;
+
+    if (!args.empty()) {
+        Json::Reader reader;
+        Json::Value root;
+        bool parse = reader.parse(args, root);
+
+        if (!parse) {
+            slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::getNumberPattern: invalid json data: %s",
+                    args.c_str());
+            return errorInJson(PARSING_ERROR, "Invalid json data!");
+        }
+
+        Json::Value options = root["options"];
+        std::string error;
+        if (!handleNumberOptions(options, type, error))
+            return errorInJson(PARSING_ERROR, error);
+    }
+
+    std::string pattern, symbol, positive, negative, decimal, grouping;
+    int fraction;
+    double rounding;
+
+    UErrorCode status = U_ZERO_ERROR;
+    NumberFormat* nf;
+    switch (type) {
+    case kNumberDecimal:
+    default:
+        nf = NumberFormat::createInstance(status);
+        break;
+    case kNumberCurrency:
+        nf = NumberFormat::createCurrencyInstance(status);
+        break;
+    case kNumberPercent:
+        nf = NumberFormat::createPercentInstance(status);
+        break;
+    }
+
+    if (!nf) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::getNumberPattern: failed to create NumberFormat instance for type %d: %d",
+                status, type);
+        return errorInJson(UNKNOWN_ERROR, "Failed to create NumberFormat instance!");
+    }
+    std::auto_ptr<NumberFormat> deleter(nf);
+
+    if (nf->getDynamicClassID() != DecimalFormat::getStaticClassID()) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::getNumberPattern: DecimalFormat expected: %p != %p",
+                nf->getDynamicClassID(), DecimalFormat::getStaticClassID());
+        return errorInJson(UNKNOWN_ERROR, "DecimalFormat expected!");
+    }
+
+    DecimalFormat* df = (DecimalFormat*) nf;
+    const DecimalFormatSymbols* dfs = df->getDecimalFormatSymbols();
+    if (!dfs) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::getNumberPattern: unable to get DecimalFormatSymbols!");
+        return errorInJson(UNKNOWN_ERROR, "Failed to get DecimalFormatSymbols instance!");
+    }
+
+    UnicodeString ucs;
+
+    df->toPattern(ucs);
+    ucs.toUTF8String(pattern);
+    ucs.remove();
+
+    df->getPositivePrefix(ucs);
+    if (ucs.isEmpty())
+        df->getPositiveSuffix(ucs);
+    ucs.toUTF8String(positive);
+    ucs.remove();
+
+    df->getNegativePrefix(ucs);
+    if (ucs.isEmpty())
+        df->getNegativeSuffix(ucs);
+    ucs.toUTF8String(negative);
+    ucs.remove();
+
+    rounding = df->getRoundingIncrement();
+    fraction = df->getMaximumFractionDigits();
+
+    ucs = dfs->getSymbol(DecimalFormatSymbols::kDecimalSeparatorSymbol);
+    ucs.toUTF8String(decimal);
+    ucs.remove();
+
+    ucs = dfs->getSymbol(DecimalFormatSymbols::kGroupingSeparatorSymbol);
+    ucs.toUTF8String(grouping);
+    ucs.remove();
+
+    if (type == kNumberPercent)
+        ucs = dfs->getSymbol(DecimalFormatSymbols::kPercentSymbol);
+    else if (type == kNumberCurrency)
+        ucs = dfs->getSymbol(DecimalFormatSymbols::kCurrencySymbol);
+    else
+        ucs = dfs->getSymbol(DecimalFormatSymbols::kDigitSymbol);
+
+    ucs.toUTF8String(symbol);
+    ucs.remove();
+
+    return resultInJson(pattern, symbol, fraction, rounding, positive, negative, decimal, grouping);
+}
+
+std::string GlobalizationNDK::getCurrencyPattern(const std::string& args)
+{
+    if (args.empty()) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::getCurrencyPattern: no arguments provided!");
+        return errorInJson(UNKNOWN_ERROR, "No arguments provided!");
+    }
+
+    Json::Reader reader;
+    Json::Value root;
+    bool parse = reader.parse(args, root);
+
+    if (!parse) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::getCurrencyPattern: invalid json data: %s",
+                args.c_str());
+        return errorInJson(PARSING_ERROR, "Invalid json data!");
+    }
+
+    Json::Value ccv = root["currencyCode"];
+    if (ccv.isNull()) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::getCurrencyPattern: no currencyCode provided!");
+        return errorInJson(FORMATTING_ERROR, "No currencyCode provided!");
+    }
+
+    if (!ccv.isString()) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::getCurrencyPattern: invalid currencyCode type: %d!",
+                ccv.type());
+        return errorInJson(FORMATTING_ERROR, "Invalid currencyCode type!");
+    }
+
+    std::string cc = ccv.asString();
+    if (cc.empty()) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::getCurrencyPattern: empty currencyCode!");
+        return errorInJson(FORMATTING_ERROR, "Empty currencyCode!");
+    }
+
+    UnicodeString ucc = UnicodeString::fromUTF8(cc);
+    DecimalFormat* df = 0;
+    int count = 0;
+    const Locale* locs = Locale::getAvailableLocales(count);
+    for (int i = 0; i < count; ++i) {
+        UErrorCode status = U_ZERO_ERROR;
+        NumberFormat* nf = NumberFormat::createCurrencyInstance(*(locs + i), status);
+        if (!nf) {
+            slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::getCurrencyPattern: locale %d: unable to get NumberFormat instance!",
+                    i);
+            continue;
+        }
+        std::auto_ptr<NumberFormat> ndeleter(nf);
+
+        const UChar* currency = nf->getCurrency();
+        if (!currency) {
+            slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::getCurrencyPattern: locale %d: failed to getCurrency!",
+                    i);
+            continue;
+        }
+
+        if (!ucc.compare(currency, -1)) {
+            df = (DecimalFormat*) ndeleter.release();
+            break;
+        }
+    }
+
+    if (!df)
+        return errorInJson(UNKNOWN_ERROR, "Currency not supported!");
+
+    std::auto_ptr<DecimalFormat> deleter(df);
+
+    const DecimalFormatSymbols* dfs = df->getDecimalFormatSymbols();
+    if (!dfs) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::getCurrencyPattern: unable to get DecimalFormatSymbols!");
+        return errorInJson(UNKNOWN_ERROR, "Failed to get DecimalFormatSymbols!");
+    }
+
+    UnicodeString ucs;
+
+    std::string pattern;
+    df->toPattern(ucs);
+    ucs.toUTF8String(pattern);
+    ucs.remove();
+
+    int fraction = df->getMaximumFractionDigits();
+    double rounding = df->getRoundingIncrement();
+
+    std::string decimal;
+    ucs = dfs->getSymbol(DecimalFormatSymbols::kDecimalSeparatorSymbol);
+    ucs.toUTF8String(decimal);
+    ucs.remove();
+
+    std::string grouping;
+    ucs = dfs->getSymbol(DecimalFormatSymbols::kGroupingSeparatorSymbol);
+    ucs.toUTF8String(grouping);
+    ucs.remove();
+
+    return resultInJson(pattern, cc, fraction, rounding, decimal, grouping);
+}
+
+} /* namespace webworks */
diff --git a/src/blackberry10/native/src/globalization_ndk.hpp b/src/blackberry10/native/src/globalization_ndk.hpp
new file mode 100644
index 0000000..8e4fa6c
--- /dev/null
+++ b/src/blackberry10/native/src/globalization_ndk.hpp
@@ -0,0 +1,61 @@
+/*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#ifndef GLOBALIZATIONNDK_HPP_
+#define GLOBALIZATIONNDK_HPP_
+
+#include <string>
+
+class GlobalizationJS;
+
+namespace webworks {
+
+class GlobalizationNDK {
+public:
+	explicit GlobalizationNDK(GlobalizationJS *parent = NULL);
+	virtual ~GlobalizationNDK();
+
+	// The extension methods are defined here
+
+    std::string getPreferredLanguage();
+
+    std::string getLocaleName();
+
+    std::string dateToString(const std::string& args);
+
+    std::string stringToDate(const std::string& args);
+
+    std::string getDatePattern(const std::string& args);
+
+    std::string getDateNames(const std::string& args);
+
+    std::string isDayLightSavingsTime(const std::string& args);
+
+    std::string getFirstDayOfWeek();
+
+    std::string numberToString(const std::string& args);
+
+    std::string stringToNumber(const std::string& args);
+
+    std::string getNumberPattern(const std::string& args);
+
+    std::string getCurrencyPattern(const std::string& args);
+
+private:
+	GlobalizationJS *m_pParent;
+};
+
+} // namespace webworks
+
+#endif /* GLOBALIZATIONNDK_H_ */
diff --git a/src/firefoxos/GlobalizationProxy.js b/src/firefoxos/GlobalizationProxy.js
new file mode 100644
index 0000000..dd8944e
--- /dev/null
+++ b/src/firefoxos/GlobalizationProxy.js
@@ -0,0 +1,248 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+var GlobalizationError = require('./GlobalizationError');
+
+var l10n_loaded = new Event('l10n_loaded');
+var l10n_ready = new Event('l10n_ready');
+
+document.addEventListener('l10n_loaded', function() {
+  navigator.mozL10n.ready(function() {
+    document.dispatchEvent(l10n_ready);
+  });
+});
+
+function loadFile(elementName, attributes, callback) {
+    var e = document.createElement(elementName);
+    for (var attrName in attributes) {
+      if(attributes.hasOwnProperty(attrName)) {
+        e.setAttribute(attrName, attributes[attrName]);
+      }
+    }
+    e.onreadystatechange = e.onload = function() {
+        var state = e.readyState;
+        if (!callback.done && (!state || /loaded|complete/.test(state))) {
+            callback.done = true;
+            callback();
+        }
+    };
+    document.head.appendChild(e);
+}
+
+function loadDependencies() {
+  // Adding globalization file to the HEAD section
+  // <link rel="resource" type="application/l10n" href="locales/date.ini" />
+
+  loadFile('link', {
+    'rel': 'resource', 
+    'type': 'application/l10n', 
+    'href': 'locales/date.ini'}, function() {});
+  loadFile('script', {
+    'type': 'text/javascript',
+    'src': 'js/l10n.js'},
+    function() {
+      loadFile('script', {
+        'type': 'text/javascript',
+        'src': 'js/l10n_date.js'},
+        function() {
+          document.dispatchEvent(l10n_loaded);
+        });
+    });
+}
+
+loadDependencies();
+
+function getPreferredLanguage(successCB, errorCB) {
+    // WARNING: this isn't perfect - there is a difference between UI language
+    // and preferred language, however it doesn't happen too often.
+    document.addEventListener('l10n_ready', function() {
+      successCB({value: navigator.mozL10n.language.code});
+    });
+}
+
+function getLocaleName(successCB, errorCB) {
+    document.addEventListener('l10n_ready', function() {
+      successCB(navigator.mozL10n.language.code);
+    });
+}
+
+function dateToString(successCB, errorCB, params) {
+    var date = new Date(params[0].date);
+    var options = params[0].options;
+
+    document.addEventListener('l10n_ready', function() {
+      var f = new navigator.mozL10n.DateTimeFormat();
+      successCB({'value': _getStringFromDate(f, date, options)});
+    });
+
+    function _getStringFromDate(f, date, options) {
+        var format = navigator.mozL10n.get('shortDateTimeFormat');
+        if (options) {
+          if (options.selector == 'date') {
+            return f.localeDateString(date);
+          }
+          if (options.selector == 'time') {
+            return f.localeTimeString(date);
+          }
+          if (options.formatLength != 'short') {
+            format = navigator.mozL10n.get('dateTimeFormat');
+            return f.localeString(date, format);
+          }
+          if (options.selector == 'time') {
+            return f.localeTimeString(date, format);
+          }
+        }
+        var d = f.localeDateString(date);
+        var t = f.localeTimeString(date);
+        return d + ' ' + t;
+    }
+}
+
+function stringToDate(successCB, errorCB, params) {
+    var date;
+    var dateString = params[0].dateString;
+    var options = params[0].options;
+    try {
+      date = new Date(dateString);
+    } catch(e) {  
+      console.log("Cordova, stringToDate, An error occurred " + e.message);
+      return errorCB(GlobalizationError(
+            GlobalizationError.PARSING_ERROR, e.message));
+    } 
+    if (!date || date == 'Invalid Date') {
+      console.log("Cordova, stringToDate, Invalid Date: " + dateString);
+      return errorCB(GlobalizationError(
+            GlobalizationError.PARSING_ERROR, 'Invalid Date (' + dateString + ')'));
+    }
+
+    var dateObj = {
+      'year': date.getFullYear(),
+      'month': date.getMonth(),
+      'day': date.getDay() 
+    };
+    var timeObj = {
+      'hour': date.getHours(),
+      'minute': date.getMinutes(),
+      'second': date.getSeconds(),
+      'millisecond': date.getMilliseconds() 
+    };
+    if (options) {
+      if (options.selector == 'date') {
+        return successCB(dateObj);
+      }
+      if (options.selector == 'time') {
+        return successCB(timeObj);
+      }
+    }
+    for (var i in timeObj) {
+      if (timeObj.hasOwnProperty(i)) {
+        dateObj[i] = timeObj[i];
+      }
+    }
+    successCB(dateObj);
+}
+
+function getDatePattern(successCB, failureCB, options) {
+    failureCB(GlobalizationError.UNKNOWN_ERROR, 'unsupported');
+}
+
+function getDateNames(successCB, failureCB, params) {
+  document.addEventListener('l10n_ready', function() {
+    var version = 'long';
+    var item = 'month';
+    var first = 0;
+    var options = params[0].options;
+    if (options) {
+      if (options.type == 'narrow') {
+        version = 'short';
+      } else if (options.type == 'genitive' && options.item == 'months') {
+        version = options.type;
+      } 
+      if (options.item == 'days') {
+        item = 'weekday';
+        first = parseInt(navigator.mozL10n.get('weekStartsOnMonday'));
+      }
+    }
+    var limit = (item == 'month') ? 11 : 6;
+
+    var arr = [];
+    for (var i = first; i <= first + limit; i++) {
+        arr.push(navigator.mozL10n.get(item + '-' + i % (limit + 1) + '-' + version));
+    }
+    successCB({'value': arr});
+  });
+}
+
+Date.prototype.stdTimezoneOffset = function() {
+    // Return the standard timezone offset (usually 0 or -600)
+    var jan = new Date(this.getFullYear(), 0, 1);
+    var jul = new Date(this.getFullYear(), 6, 1);
+    return Math.max(jan.getTimezoneOffset(), jul.getTimezoneOffset());
+};
+
+Date.prototype.isDayLightSavingsTime = function() {
+    return this.getTimezoneOffset() < this.stdTimezoneOffset();
+};
+
+function isDayLightSavingsTime(successCB, failureCB, params) {
+    var date = new Date(params[0].date);
+    successCB({'dst': date.isDayLightSavingsTime()});
+}
+
+function getFirstDayOfWeek(successCB, failureCB) {
+  document.addEventListener('l10n_ready', function() {
+    var firstDay = navigator.mozL10n.get('weekStartsOnMonday');
+    successCB({'value': parseInt(firstDay)});
+  });
+}
+
+function numberToString(number, successCB, failureCB) {
+    failureCB(GlobalizationError.UNKNOWN_ERROR, 'unsupported');
+}
+
+function stringToNumber(numberString, successCB, failureCB, options) {
+    failureCB(GlobalizationError.UNKNOWN_ERROR, 'unsupported');
+}
+
+function getNumberPattern(successCB, failureCB, options) {
+    failureCB(GlobalizationError.UNKNOWN_ERROR, 'unsupported');
+}
+
+function getCurrencyPattern(currencyCode, successCB, failureCB) {
+    failureCB(GlobalizationError.UNKNOWN_ERROR, 'unsupported');
+}
+
+var Globalization = {
+    getLocaleName: getLocaleName,
+    getPreferredLanguage: getPreferredLanguage,
+    dateToString: dateToString,
+    stringToDate: stringToDate,
+    getDatePattern: getDatePattern,
+    getDateNames: getDateNames,
+    isDayLightSavingsTime: isDayLightSavingsTime,
+    getFirstDayOfWeek: getFirstDayOfWeek,
+    numberToString: numberToString,
+    stringToNumber: stringToNumber,
+    getNumberPattern: getNumberPattern,
+    getCurrencyPattern: getCurrencyPattern
+};
+
+require("cordova/exec/proxy").add("Globalization", Globalization);
diff --git a/src/ios/CDVGlobalization.m b/src/ios/CDVGlobalization.m
index 8a07c8e..5afa700 100644
--- a/src/ios/CDVGlobalization.m
+++ b/src/ios/CDVGlobalization.m
@@ -40,6 +40,22 @@
     NSString* language = [[NSLocale preferredLanguages] objectAtIndex:0];
 
     if (language) {
+        //Format to match other devices
+        if(language.length <= 2) {
+            NSLocale* locale = [NSLocale currentLocale];
+            NSRange underscoreIndex = [[locale localeIdentifier] rangeOfString:@"_" options:NSBackwardsSearch];
+            NSRange atSignIndex = [[locale localeIdentifier] rangeOfString:@"@"];
+            //If localeIdentifier did not contain @, i.e. did not have calendar other than Gregoarian selected
+            if(atSignIndex.length == 0)
+                language = [NSString stringWithFormat:@"%@%@", language, [[locale localeIdentifier] substringFromIndex:underscoreIndex.location]];
+            else {
+                NSRange localeRange = NSMakeRange(underscoreIndex.location, atSignIndex.location-underscoreIndex.location);
+                language = [NSString stringWithFormat:@"%@%@", language, [[locale localeIdentifier] substringWithRange:localeRange]];
+            }
+        }
+        
+        language = [language stringByReplacingOccurrencesOfString:@"_" withString:@"-"];
+
         NSDictionary* dictionary = [NSDictionary dictionaryWithObject:language forKey:@"value"];
 
         result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK
@@ -63,7 +79,9 @@
     NSLocale* locale = [NSLocale currentLocale];
 
     if (locale) {
-        dictionary = [NSDictionary dictionaryWithObject:[locale localeIdentifier] forKey:@"value"];
+        NSString *localeIdentifier = [[locale localeIdentifier] stringByReplacingOccurrencesOfString:@"_" withString:@"-"];
+
+        dictionary = [NSDictionary dictionaryWithObject:localeIdentifier forKey:@"value"];
 
         result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dictionary];
     } else {
diff --git a/www/firefoxos/l10n.js b/www/firefoxos/l10n.js
new file mode 100644
index 0000000..5a735a0
--- /dev/null
+++ b/www/firefoxos/l10n.js
@@ -0,0 +1,1616 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+
+(function(window, undefined) {
+  'use strict';
+
+  /* jshint validthis:true */
+  function L10nError(message, id, loc) {
+    this.name = 'L10nError';
+    this.message = message;
+    this.id = id;
+    this.loc = loc;
+  }
+  L10nError.prototype = Object.create(Error.prototype);
+  L10nError.prototype.constructor = L10nError;
+
+
+  /* jshint browser:true */
+
+  var io = {
+    load: function load(url, callback, sync) {
+      var xhr = new XMLHttpRequest();
+
+      if (xhr.overrideMimeType) {
+        xhr.overrideMimeType('text/plain');
+      }
+
+      xhr.open('GET', url, !sync);
+
+      xhr.addEventListener('load', function io_load(e) {
+        if (e.target.status === 200 || e.target.status === 0) {
+          callback(null, e.target.responseText);
+        } else {
+          callback(new L10nError('Not found: ' + url));
+        }
+      });
+      xhr.addEventListener('error', callback);
+      xhr.addEventListener('timeout', callback);
+
+      // the app: protocol throws on 404, see https://bugzil.la/827243
+      try {
+        xhr.send(null);
+      } catch (e) {
+        callback(new L10nError('Not found: ' + url));
+      }
+    },
+
+    loadJSON: function loadJSON(url, callback) {
+      var xhr = new XMLHttpRequest();
+
+      if (xhr.overrideMimeType) {
+        xhr.overrideMimeType('application/json');
+      }
+
+      xhr.open('GET', url);
+
+      xhr.responseType = 'json';
+      xhr.addEventListener('load', function io_loadjson(e) {
+        if (e.target.status === 200 || e.target.status === 0) {
+          callback(null, e.target.response);
+        } else {
+          callback(new L10nError('Not found: ' + url));
+        }
+      });
+      xhr.addEventListener('error', callback);
+      xhr.addEventListener('timeout', callback);
+
+      // the app: protocol throws on 404, see https://bugzil.la/827243
+      try {
+        xhr.send(null);
+      } catch (e) {
+        callback(new L10nError('Not found: ' + url));
+      }
+    }
+  };
+
+  function EventEmitter() {}
+
+  EventEmitter.prototype.emit = function ee_emit() {
+    if (!this._listeners) {
+      return;
+    }
+
+    var args = Array.prototype.slice.call(arguments);
+    var type = args.shift();
+    if (!this._listeners[type]) {
+      return;
+    }
+
+    var typeListeners = this._listeners[type].slice();
+    for (var i = 0; i < typeListeners.length; i++) {
+      typeListeners[i].apply(this, args);
+    }
+  };
+
+  EventEmitter.prototype.addEventListener = function ee_add(type, listener) {
+    if (!this._listeners) {
+      this._listeners = {};
+    }
+    if (!(type in this._listeners)) {
+      this._listeners[type] = [];
+    }
+    this._listeners[type].push(listener);
+  };
+
+  EventEmitter.prototype.removeEventListener = function ee_rm(type, listener) {
+    if (!this._listeners) {
+      return;
+    }
+
+    var typeListeners = this._listeners[type];
+    var pos = typeListeners.indexOf(listener);
+    if (pos === -1) {
+      return;
+    }
+
+    typeListeners.splice(pos, 1);
+  };
+
+
+  function getPluralRule(lang) {
+    var locales2rules = {
+      'af': 3,
+      'ak': 4,
+      'am': 4,
+      'ar': 1,
+      'asa': 3,
+      'az': 0,
+      'be': 11,
+      'bem': 3,
+      'bez': 3,
+      'bg': 3,
+      'bh': 4,
+      'bm': 0,
+      'bn': 3,
+      'bo': 0,
+      'br': 20,
+      'brx': 3,
+      'bs': 11,
+      'ca': 3,
+      'cgg': 3,
+      'chr': 3,
+      'cs': 12,
+      'cy': 17,
+      'da': 3,
+      'de': 3,
+      'dv': 3,
+      'dz': 0,
+      'ee': 3,
+      'el': 3,
+      'en': 3,
+      'eo': 3,
+      'es': 3,
+      'et': 3,
+      'eu': 3,
+      'fa': 0,
+      'ff': 5,
+      'fi': 3,
+      'fil': 4,
+      'fo': 3,
+      'fr': 5,
+      'fur': 3,
+      'fy': 3,
+      'ga': 8,
+      'gd': 24,
+      'gl': 3,
+      'gsw': 3,
+      'gu': 3,
+      'guw': 4,
+      'gv': 23,
+      'ha': 3,
+      'haw': 3,
+      'he': 2,
+      'hi': 4,
+      'hr': 11,
+      'hu': 0,
+      'id': 0,
+      'ig': 0,
+      'ii': 0,
+      'is': 3,
+      'it': 3,
+      'iu': 7,
+      'ja': 0,
+      'jmc': 3,
+      'jv': 0,
+      'ka': 0,
+      'kab': 5,
+      'kaj': 3,
+      'kcg': 3,
+      'kde': 0,
+      'kea': 0,
+      'kk': 3,
+      'kl': 3,
+      'km': 0,
+      'kn': 0,
+      'ko': 0,
+      'ksb': 3,
+      'ksh': 21,
+      'ku': 3,
+      'kw': 7,
+      'lag': 18,
+      'lb': 3,
+      'lg': 3,
+      'ln': 4,
+      'lo': 0,
+      'lt': 10,
+      'lv': 6,
+      'mas': 3,
+      'mg': 4,
+      'mk': 16,
+      'ml': 3,
+      'mn': 3,
+      'mo': 9,
+      'mr': 3,
+      'ms': 0,
+      'mt': 15,
+      'my': 0,
+      'nah': 3,
+      'naq': 7,
+      'nb': 3,
+      'nd': 3,
+      'ne': 3,
+      'nl': 3,
+      'nn': 3,
+      'no': 3,
+      'nr': 3,
+      'nso': 4,
+      'ny': 3,
+      'nyn': 3,
+      'om': 3,
+      'or': 3,
+      'pa': 3,
+      'pap': 3,
+      'pl': 13,
+      'ps': 3,
+      'pt': 3,
+      'rm': 3,
+      'ro': 9,
+      'rof': 3,
+      'ru': 11,
+      'rwk': 3,
+      'sah': 0,
+      'saq': 3,
+      'se': 7,
+      'seh': 3,
+      'ses': 0,
+      'sg': 0,
+      'sh': 11,
+      'shi': 19,
+      'sk': 12,
+      'sl': 14,
+      'sma': 7,
+      'smi': 7,
+      'smj': 7,
+      'smn': 7,
+      'sms': 7,
+      'sn': 3,
+      'so': 3,
+      'sq': 3,
+      'sr': 11,
+      'ss': 3,
+      'ssy': 3,
+      'st': 3,
+      'sv': 3,
+      'sw': 3,
+      'syr': 3,
+      'ta': 3,
+      'te': 3,
+      'teo': 3,
+      'th': 0,
+      'ti': 4,
+      'tig': 3,
+      'tk': 3,
+      'tl': 4,
+      'tn': 3,
+      'to': 0,
+      'tr': 0,
+      'ts': 3,
+      'tzm': 22,
+      'uk': 11,
+      'ur': 3,
+      've': 3,
+      'vi': 0,
+      'vun': 3,
+      'wa': 4,
+      'wae': 3,
+      'wo': 0,
+      'xh': 3,
+      'xog': 3,
+      'yo': 0,
+      'zh': 0,
+      'zu': 3
+    };
+
+    // utility functions for plural rules methods
+    function isIn(n, list) {
+      return list.indexOf(n) !== -1;
+    }
+    function isBetween(n, start, end) {
+      return typeof n === typeof start && start <= n && n <= end;
+    }
+
+    // list of all plural rules methods:
+    // map an integer to the plural form name to use
+    var pluralRules = {
+      '0': function() {
+        return 'other';
+      },
+      '1': function(n) {
+        if ((isBetween((n % 100), 3, 10))) {
+          return 'few';
+        }
+        if (n === 0) {
+          return 'zero';
+        }
+        if ((isBetween((n % 100), 11, 99))) {
+          return 'many';
+        }
+        if (n === 2) {
+          return 'two';
+        }
+        if (n === 1) {
+          return 'one';
+        }
+        return 'other';
+      },
+      '2': function(n) {
+        if (n !== 0 && (n % 10) === 0) {
+          return 'many';
+        }
+        if (n === 2) {
+          return 'two';
+        }
+        if (n === 1) {
+          return 'one';
+        }
+        return 'other';
+      },
+      '3': function(n) {
+        if (n === 1) {
+          return 'one';
+        }
+        return 'other';
+      },
+      '4': function(n) {
+        if ((isBetween(n, 0, 1))) {
+          return 'one';
+        }
+        return 'other';
+      },
+      '5': function(n) {
+        if ((isBetween(n, 0, 2)) && n !== 2) {
+          return 'one';
+        }
+        return 'other';
+      },
+      '6': function(n) {
+        if (n === 0) {
+          return 'zero';
+        }
+        if ((n % 10) === 1 && (n % 100) !== 11) {
+          return 'one';
+        }
+        return 'other';
+      },
+      '7': function(n) {
+        if (n === 2) {
+          return 'two';
+        }
+        if (n === 1) {
+          return 'one';
+        }
+        return 'other';
+      },
+      '8': function(n) {
+        if ((isBetween(n, 3, 6))) {
+          return 'few';
+        }
+        if ((isBetween(n, 7, 10))) {
+          return 'many';
+        }
+        if (n === 2) {
+          return 'two';
+        }
+        if (n === 1) {
+          return 'one';
+        }
+        return 'other';
+      },
+      '9': function(n) {
+        if (n === 0 || n !== 1 && (isBetween((n % 100), 1, 19))) {
+          return 'few';
+        }
+        if (n === 1) {
+          return 'one';
+        }
+        return 'other';
+      },
+      '10': function(n) {
+        if ((isBetween((n % 10), 2, 9)) && !(isBetween((n % 100), 11, 19))) {
+          return 'few';
+        }
+        if ((n % 10) === 1 && !(isBetween((n % 100), 11, 19))) {
+          return 'one';
+        }
+        return 'other';
+      },
+      '11': function(n) {
+        if ((isBetween((n % 10), 2, 4)) && !(isBetween((n % 100), 12, 14))) {
+          return 'few';
+        }
+        if ((n % 10) === 0 ||
+            (isBetween((n % 10), 5, 9)) ||
+            (isBetween((n % 100), 11, 14))) {
+          return 'many';
+        }
+        if ((n % 10) === 1 && (n % 100) !== 11) {
+          return 'one';
+        }
+        return 'other';
+      },
+      '12': function(n) {
+        if ((isBetween(n, 2, 4))) {
+          return 'few';
+        }
+        if (n === 1) {
+          return 'one';
+        }
+        return 'other';
+      },
+      '13': function(n) {
+        if ((isBetween((n % 10), 2, 4)) && !(isBetween((n % 100), 12, 14))) {
+          return 'few';
+        }
+        if (n !== 1 && (isBetween((n % 10), 0, 1)) ||
+            (isBetween((n % 10), 5, 9)) ||
+            (isBetween((n % 100), 12, 14))) {
+          return 'many';
+        }
+        if (n === 1) {
+          return 'one';
+        }
+        return 'other';
+      },
+      '14': function(n) {
+        if ((isBetween((n % 100), 3, 4))) {
+          return 'few';
+        }
+        if ((n % 100) === 2) {
+          return 'two';
+        }
+        if ((n % 100) === 1) {
+          return 'one';
+        }
+        return 'other';
+      },
+      '15': function(n) {
+        if (n === 0 || (isBetween((n % 100), 2, 10))) {
+          return 'few';
+        }
+        if ((isBetween((n % 100), 11, 19))) {
+          return 'many';
+        }
+        if (n === 1) {
+          return 'one';
+        }
+        return 'other';
+      },
+      '16': function(n) {
+        if ((n % 10) === 1 && n !== 11) {
+          return 'one';
+        }
+        return 'other';
+      },
+      '17': function(n) {
+        if (n === 3) {
+          return 'few';
+        }
+        if (n === 0) {
+          return 'zero';
+        }
+        if (n === 6) {
+          return 'many';
+        }
+        if (n === 2) {
+          return 'two';
+        }
+        if (n === 1) {
+          return 'one';
+        }
+        return 'other';
+      },
+      '18': function(n) {
+        if (n === 0) {
+          return 'zero';
+        }
+        if ((isBetween(n, 0, 2)) && n !== 0 && n !== 2) {
+          return 'one';
+        }
+        return 'other';
+      },
+      '19': function(n) {
+        if ((isBetween(n, 2, 10))) {
+          return 'few';
+        }
+        if ((isBetween(n, 0, 1))) {
+          return 'one';
+        }
+        return 'other';
+      },
+      '20': function(n) {
+        if ((isBetween((n % 10), 3, 4) || ((n % 10) === 9)) && !(
+            isBetween((n % 100), 10, 19) ||
+            isBetween((n % 100), 70, 79) ||
+            isBetween((n % 100), 90, 99)
+            )) {
+          return 'few';
+        }
+        if ((n % 1000000) === 0 && n !== 0) {
+          return 'many';
+        }
+        if ((n % 10) === 2 && !isIn((n % 100), [12, 72, 92])) {
+          return 'two';
+        }
+        if ((n % 10) === 1 && !isIn((n % 100), [11, 71, 91])) {
+          return 'one';
+        }
+        return 'other';
+      },
+      '21': function(n) {
+        if (n === 0) {
+          return 'zero';
+        }
+        if (n === 1) {
+          return 'one';
+        }
+        return 'other';
+      },
+      '22': function(n) {
+        if ((isBetween(n, 0, 1)) || (isBetween(n, 11, 99))) {
+          return 'one';
+        }
+        return 'other';
+      },
+      '23': function(n) {
+        if ((isBetween((n % 10), 1, 2)) || (n % 20) === 0) {
+          return 'one';
+        }
+        return 'other';
+      },
+      '24': function(n) {
+        if ((isBetween(n, 3, 10) || isBetween(n, 13, 19))) {
+          return 'few';
+        }
+        if (isIn(n, [2, 12])) {
+          return 'two';
+        }
+        if (isIn(n, [1, 11])) {
+          return 'one';
+        }
+        return 'other';
+      }
+    };
+
+    // return a function that gives the plural form name for a given integer
+    var index = locales2rules[lang.replace(/-.*$/, '')];
+    if (!(index in pluralRules)) {
+      return function() { return 'other'; };
+    }
+    return pluralRules[index];
+  }
+
+
+
+
+  var parsePatterns;
+
+  function parse(ctx, source) {
+    var ast = {};
+
+    if (!parsePatterns) {
+      parsePatterns = {
+        comment: /^\s*#|^\s*$/,
+        entity: /^([^=\s]+)\s*=\s*(.+)$/,
+        multiline: /[^\\]\\$/,
+        macro: /\{\[\s*(\w+)\(([^\)]*)\)\s*\]\}/i,
+        unicode: /\\u([0-9a-fA-F]{1,4})/g,
+        entries: /[\r\n]+/,
+        controlChars: /\\([\\\n\r\t\b\f\{\}\"\'])/g
+      };
+    }
+
+    var entries = source.split(parsePatterns.entries);
+    for (var i = 0; i < entries.length; i++) {
+      var line = entries[i];
+
+      if (parsePatterns.comment.test(line)) {
+        continue;
+      }
+
+      while (parsePatterns.multiline.test(line) && i < entries.length) {
+        line = line.slice(0, -1) + entries[++i].trim();
+      }
+
+      var entityMatch = line.match(parsePatterns.entity);
+      if (entityMatch) {
+        try {
+          parseEntity(entityMatch[1], entityMatch[2], ast);
+        } catch (e) {
+          if (ctx) {
+            ctx._emitter.emit('error', e);
+          } else {
+            throw e;
+          }
+        }
+      }
+    }
+    return ast;
+  }
+
+  function setEntityValue(id, attr, key, value, ast) {
+    var obj = ast;
+    var prop = id;
+
+    if (attr) {
+      if (!(id in obj)) {
+        obj[id] = {};
+      }
+      if (typeof(obj[id]) === 'string') {
+        obj[id] = {'_': obj[id]};
+      }
+      obj = obj[id];
+      prop = attr;
+    }
+
+    if (!key) {
+      obj[prop] = value;
+      return;
+    }
+
+    if (!(prop in obj)) {
+      obj[prop] = {'_': {}};
+    } else if (typeof(obj[prop]) === 'string') {
+      obj[prop] = {'_index': parseMacro(obj[prop]), '_': {}};
+    }
+    obj[prop]._[key] = value;
+  }
+
+  function parseEntity(id, value, ast) {
+    var name, key;
+
+    var pos = id.indexOf('[');
+    if (pos !== -1) {
+      name = id.substr(0, pos);
+      key = id.substring(pos + 1, id.length - 1);
+    } else {
+      name = id;
+      key = null;
+    }
+
+    var nameElements = name.split('.');
+
+    if (nameElements.length > 2) {
+      throw new Error('Error in ID: "' + name + '".' +
+                      ' Nested attributes are not supported.');
+    }
+
+    var attr;
+    if (nameElements.length > 1) {
+      name = nameElements[0];
+      attr = nameElements[1];
+    } else {
+      attr = null;
+    }
+
+    setEntityValue(name, attr, key, unescapeString(value), ast);
+  }
+
+  function unescapeControlCharacters(str) {
+    return str.replace(parsePatterns.controlChars, '$1');
+  }
+
+  function unescapeUnicode(str) {
+    return str.replace(parsePatterns.unicode, function(match, token) {
+      return unescape('%u' + '0000'.slice(token.length) + token);
+    });
+  }
+
+  function unescapeString(str) {
+    if (str.lastIndexOf('\\') !== -1) {
+      str = unescapeControlCharacters(str);
+    }
+    return unescapeUnicode(str);
+  }
+
+  function parseMacro(str) {
+    var match = str.match(parsePatterns.macro);
+    if (!match) {
+      throw new L10nError('Malformed macro');
+    }
+    return [match[1], match[2]];
+  }
+
+
+
+  var MAX_PLACEABLE_LENGTH = 2500;
+  var MAX_PLACEABLES = 100;
+  var rePlaceables = /\{\{\s*(.+?)\s*\}\}/g;
+
+  function Entity(id, node, env) {
+    this.id = id;
+    this.env = env;
+    // the dirty guard prevents cyclic or recursive references from other
+    // Entities; see Entity.prototype.resolve
+    this.dirty = false;
+    if (typeof node === 'string') {
+      this.value = node;
+    } else {
+      // it's either a hash or it has attrs, or both
+      for (var key in node) {
+        if (node.hasOwnProperty(key) && key[0] !== '_') {
+          if (!this.attributes) {
+            this.attributes = {};
+          }
+          this.attributes[key] = new Entity(this.id + '.' + key, node[key],
+                                            env);
+        }
+      }
+      this.value = node._ || null;
+      this.index = node._index;
+    }
+  }
+
+  Entity.prototype.resolve = function E_resolve(ctxdata) {
+    if (this.dirty) {
+      return undefined;
+    }
+
+    this.dirty = true;
+    var val;
+    // if resolve fails, we want the exception to bubble up and stop the whole
+    // resolving process;  however, we still need to clean up the dirty flag
+    try {
+      val = resolve(ctxdata, this.env, this.value, this.index);
+    } finally {
+      this.dirty = false;
+    }
+    return val;
+  };
+
+  Entity.prototype.toString = function E_toString(ctxdata) {
+    try {
+      return this.resolve(ctxdata);
+    } catch (e) {
+      return undefined;
+    }
+  };
+
+  Entity.prototype.valueOf = function E_valueOf(ctxdata) {
+    if (!this.attributes) {
+      return this.toString(ctxdata);
+    }
+
+    var entity = {
+      value: this.toString(ctxdata),
+      attributes: {}
+    };
+
+    for (var key in this.attributes) {
+      if (this.attributes.hasOwnProperty(key)) {
+        entity.attributes[key] = this.attributes[key].toString(ctxdata);
+      }
+    }
+
+    return entity;
+  };
+
+  function subPlaceable(ctxdata, env, match, id) {
+    if (ctxdata && ctxdata.hasOwnProperty(id) &&
+        (typeof ctxdata[id] === 'string' ||
+         (typeof ctxdata[id] === 'number' && !isNaN(ctxdata[id])))) {
+      return ctxdata[id];
+    }
+
+    if (env.hasOwnProperty(id)) {
+      if (!(env[id] instanceof Entity)) {
+        env[id] = new Entity(id, env[id], env);
+      }
+      var value = env[id].resolve(ctxdata);
+      if (typeof value === 'string') {
+        // prevent Billion Laughs attacks
+        if (value.length >= MAX_PLACEABLE_LENGTH) {
+          throw new L10nError('Too many characters in placeable (' +
+                              value.length + ', max allowed is ' +
+                              MAX_PLACEABLE_LENGTH + ')');
+        }
+        return value;
+      }
+    }
+    return match;
+  }
+
+  function interpolate(ctxdata, env, str) {
+    var placeablesCount = 0;
+    var value = str.replace(rePlaceables, function(match, id) {
+      // prevent Quadratic Blowup attacks
+      if (placeablesCount++ >= MAX_PLACEABLES) {
+        throw new L10nError('Too many placeables (' + placeablesCount +
+                            ', max allowed is ' + MAX_PLACEABLES + ')');
+      }
+      return subPlaceable(ctxdata, env, match, id);
+    });
+    placeablesCount = 0;
+    return value;
+  }
+
+  function resolve(ctxdata, env, expr, index) {
+    if (typeof expr === 'string') {
+      return interpolate(ctxdata, env, expr);
+    }
+
+    if (typeof expr === 'boolean' ||
+        typeof expr === 'number' ||
+        !expr) {
+      return expr;
+    }
+
+    // otherwise, it's a dict
+
+    if (index && ctxdata && ctxdata.hasOwnProperty(index[1])) {
+      var argValue = ctxdata[index[1]];
+
+      // special cases for zero, one, two if they are defined on the hash
+      if (argValue === 0 && 'zero' in expr) {
+        return resolve(ctxdata, env, expr.zero);
+      }
+      if (argValue === 1 && 'one' in expr) {
+        return resolve(ctxdata, env, expr.one);
+      }
+      if (argValue === 2 && 'two' in expr) {
+        return resolve(ctxdata, env, expr.two);
+      }
+
+      var selector = env.__plural(argValue);
+      if (expr.hasOwnProperty(selector)) {
+        return resolve(ctxdata, env, expr[selector]);
+      }
+    }
+
+    // if there was no index or no selector was found, try 'other'
+    if ('other' in expr) {
+      return resolve(ctxdata, env, expr.other);
+    }
+
+    return undefined;
+  }
+
+  function compile(env, ast) {
+    env = env || {};
+    for (var id in ast) {
+      if (ast.hasOwnProperty(id)) {
+        env[id] = new Entity(id, ast[id], env);
+      }
+    }
+    return env;
+  }
+
+
+
+  function Locale(id, ctx) {
+    this.id = id;
+    this.ctx = ctx;
+    this.isReady = false;
+    this.entries = {
+      __plural: getPluralRule(id)
+    };
+  }
+
+  Locale.prototype.getEntry = function L_getEntry(id) {
+    /* jshint -W093 */
+
+    var entries = this.entries;
+
+    if (!entries.hasOwnProperty(id)) {
+      return undefined;
+    }
+
+    if (entries[id] instanceof Entity) {
+      return entries[id];
+    }
+
+    return entries[id] = new Entity(id, entries[id], entries);
+  };
+
+  Locale.prototype.build = function L_build(callback) {
+    var sync = !callback;
+    var ctx = this.ctx;
+    var self = this;
+
+    var l10nLoads = ctx.resLinks.length;
+
+    function onL10nLoaded(err) {
+      if (err) {
+        ctx._emitter.emit('error', err);
+      }
+      if (--l10nLoads <= 0) {
+        self.isReady = true;
+        if (callback) {
+          callback();
+        }
+      }
+    }
+
+    if (l10nLoads === 0) {
+      onL10nLoaded();
+      return;
+    }
+
+    function onJSONLoaded(err, json) {
+      if (!err && json) {
+        self.addAST(json);
+      }
+      onL10nLoaded(err);
+    }
+
+    function onPropLoaded(err, source) {
+      if (!err && source) {
+        var ast = parse(ctx, source);
+        self.addAST(ast);
+      }
+      onL10nLoaded(err);
+    }
+
+
+    for (var i = 0; i < ctx.resLinks.length; i++) {
+      var path = ctx.resLinks[i].replace('{{locale}}', this.id);
+      var type = path.substr(path.lastIndexOf('.') + 1);
+
+      switch (type) {
+        case 'json':
+          io.loadJSON(path, onJSONLoaded, sync);
+          break;
+        case 'properties':
+          io.load(path, onPropLoaded, sync);
+          break;
+      }
+    }
+  };
+
+  Locale.prototype.addAST = function(ast) {
+    for (var id in ast) {
+      if (ast.hasOwnProperty(id)) {
+        this.entries[id] = ast[id];
+      }
+    }
+  };
+
+  Locale.prototype.getEntity = function(id, ctxdata) {
+    var entry = this.getEntry(id);
+
+    if (!entry) {
+      return null;
+    }
+    return entry.valueOf(ctxdata);
+  };
+
+
+
+  function Context(id) {
+
+    this.id = id;
+    this.isReady = false;
+    this.isLoading = false;
+
+    this.supportedLocales = [];
+    this.resLinks = [];
+    this.locales = {};
+
+    this._emitter = new EventEmitter();
+
+
+    // Getting translations
+
+    function getWithFallback(id) {
+      /* jshint -W084 */
+
+      if (!this.isReady) {
+        throw new L10nError('Context not ready');
+      }
+
+      var cur = 0;
+      var loc;
+      var locale;
+      while (loc = this.supportedLocales[cur]) {
+        locale = this.getLocale(loc);
+        if (!locale.isReady) {
+          // build without callback, synchronously
+          locale.build(null);
+        }
+        var entry = locale.getEntry(id);
+        if (entry === undefined) {
+          cur++;
+          warning.call(this, new L10nError(id + ' not found in ' + loc, id,
+                                           loc));
+          continue;
+        }
+        return entry;
+      }
+
+      error.call(this, new L10nError(id + ' not found', id));
+      return null;
+    }
+
+    this.get = function get(id, ctxdata) {
+      var entry = getWithFallback.call(this, id);
+      if (entry === null) {
+        return '';
+      }
+
+      return entry.toString(ctxdata) || '';
+    };
+
+    this.getEntity = function getEntity(id, ctxdata) {
+      var entry = getWithFallback.call(this, id);
+      if (entry === null) {
+        return null;
+      }
+
+      return entry.valueOf(ctxdata);
+    };
+
+
+    // Helpers
+
+    this.getLocale = function getLocale(code) {
+      /* jshint -W093 */
+
+      var locales = this.locales;
+      if (locales[code]) {
+        return locales[code];
+      }
+
+      return locales[code] = new Locale(code, this);
+    };
+
+
+    // Getting ready
+
+    function negotiate(available, requested, defaultLocale) {
+      if (available.indexOf(requested[0]) === -1 ||
+          requested[0] === defaultLocale) {
+        return [defaultLocale];
+      } else {
+        return [requested[0], defaultLocale];
+      }
+    }
+
+    function freeze(supported) {
+      var locale = this.getLocale(supported[0]);
+      if (locale.isReady) {
+        setReady.call(this, supported);
+      } else {
+        locale.build(setReady.bind(this, supported));
+      }
+    }
+
+    function setReady(supported) {
+      this.supportedLocales = supported;
+      this.isReady = true;
+      this._emitter.emit('ready');
+    }
+
+    this.requestLocales = function requestLocales() {
+      if (this.isLoading && !this.isReady) {
+        throw new L10nError('Context not ready');
+      }
+
+      this.isLoading = true;
+      var requested = Array.prototype.slice.call(arguments);
+
+      var supported = negotiate(requested.concat('en-US'), requested, 'en-US');
+      freeze.call(this, supported);
+    };
+
+
+    // Events
+
+    this.addEventListener = function addEventListener(type, listener) {
+      this._emitter.addEventListener(type, listener);
+    };
+
+    this.removeEventListener = function removeEventListener(type, listener) {
+      this._emitter.removeEventListener(type, listener);
+    };
+
+    this.ready = function ready(callback) {
+      if (this.isReady) {
+        setTimeout(callback);
+      }
+      this.addEventListener('ready', callback);
+    };
+
+    this.once = function once(callback) {
+      /* jshint -W068 */
+      if (this.isReady) {
+        setTimeout(callback);
+        return;
+      }
+
+      var callAndRemove = (function() {
+        this.removeEventListener('ready', callAndRemove);
+        callback();
+      }).bind(this);
+      this.addEventListener('ready', callAndRemove);
+    };
+
+
+    // Errors
+
+    function warning(e) {
+      this._emitter.emit('warning', e);
+      return e;
+    }
+
+    function error(e) {
+      this._emitter.emit('error', e);
+      return e;
+    }
+  }
+
+
+
+  var DEBUG = false;
+  var isPretranslated = false;
+  var rtlList = ['ar', 'he', 'fa', 'ps', 'qps-plocm', 'ur'];
+  var nodeObserver = false;
+
+  var moConfig = {
+    attributes: true,
+    characterData: false,
+    childList: true,
+    subtree: true,
+    attributeFilter: ['data-l10n-id', 'data-l10n-args']
+  };
+
+  // Public API
+
+  navigator.mozL10n = {
+    ctx: new Context(),
+    get: function get(id, ctxdata) {
+      return navigator.mozL10n.ctx.get(id, ctxdata);
+    },
+    localize: function localize(element, id, args) {
+      return localizeElement.call(navigator.mozL10n, element, id, args);
+    },
+    translate: function () {
+      // XXX: Remove after removing obsolete calls. Bugs 992473 and 1020136
+    },
+    translateFragment: function (fragment) {
+      return translateFragment.call(navigator.mozL10n, fragment);
+    },
+    setAttributes: setL10nAttributes,
+    getAttributes: getL10nAttributes,
+    ready: function ready(callback) {
+      return navigator.mozL10n.ctx.ready(callback);
+    },
+    once: function once(callback) {
+      return navigator.mozL10n.ctx.once(callback);
+    },
+    get readyState() {
+      return navigator.mozL10n.ctx.isReady ? 'complete' : 'loading';
+    },
+    language: {
+      set code(lang) {
+        navigator.mozL10n.ctx.requestLocales(lang);
+      },
+      get code() {
+        return navigator.mozL10n.ctx.supportedLocales[0];
+      },
+      get direction() {
+        return getDirection(navigator.mozL10n.ctx.supportedLocales[0]);
+      }
+    },
+    _getInternalAPI: function() {
+      return {
+        Error: L10nError,
+        Context: Context,
+        Locale: Locale,
+        Entity: Entity,
+        getPluralRule: getPluralRule,
+        rePlaceables: rePlaceables,
+        getTranslatableChildren:  getTranslatableChildren,
+        translateDocument: translateDocument,
+        loadINI: loadINI,
+        fireLocalizedEvent: fireLocalizedEvent,
+        parse: parse,
+        compile: compile
+      };
+    }
+  };
+
+  navigator.mozL10n.ctx.ready(onReady.bind(navigator.mozL10n));
+
+  if (DEBUG) {
+    navigator.mozL10n.ctx.addEventListener('error', console.error);
+    navigator.mozL10n.ctx.addEventListener('warning', console.warn);
+  }
+
+  function getDirection(lang) {
+    return (rtlList.indexOf(lang) >= 0) ? 'rtl' : 'ltr';
+  }
+
+  var readyStates = {
+    'loading': 0,
+    'interactive': 1,
+    'complete': 2
+  };
+
+  function waitFor(state, callback) {
+    state = readyStates[state];
+    if (readyStates[document.readyState] >= state) {
+      callback();
+      return;
+    }
+
+    document.addEventListener('readystatechange', function l10n_onrsc() {
+      if (readyStates[document.readyState] >= state) {
+        document.removeEventListener('readystatechange', l10n_onrsc);
+        callback();
+      }
+    });
+  }
+
+  if (window.document) {
+    isPretranslated = (document.documentElement.lang === navigator.language);
+
+    // this is a special case for netError bug; see https://bugzil.la/444165
+    if (document.documentElement.dataset.noCompleteBug) {
+      pretranslate.call(navigator.mozL10n);
+      return;
+    }
+
+
+    if (isPretranslated) {
+      waitFor('interactive', function() {
+        window.setTimeout(initResources.bind(navigator.mozL10n));
+      });
+    } else {
+      if (document.readyState === 'complete') {
+        window.setTimeout(initResources.bind(navigator.mozL10n));
+      } else {
+        waitFor('interactive', pretranslate.bind(navigator.mozL10n));
+      }
+    }
+
+  }
+
+  function pretranslate() {
+    /* jshint -W068 */
+    if (inlineLocalization.call(this)) {
+      waitFor('interactive', (function() {
+        window.setTimeout(initResources.bind(this));
+      }).bind(this));
+    } else {
+      initResources.call(this);
+    }
+  }
+
+  function inlineLocalization() {
+    var script = document.documentElement
+                         .querySelector('script[type="application/l10n"]' +
+                         '[lang="' + navigator.language + '"]');
+    if (!script) {
+      return false;
+    }
+
+    var locale = this.ctx.getLocale(navigator.language);
+    // the inline localization is happenning very early, when the ctx is not
+    // yet ready and when the resources haven't been downloaded yet;  add the
+    // inlined JSON directly to the current locale
+    locale.addAST(JSON.parse(script.innerHTML));
+    // localize the visible DOM
+    var l10n = {
+      ctx: locale,
+      language: {
+        code: locale.id,
+        direction: getDirection(locale.id)
+      }
+    };
+    translateDocument.call(l10n);
+
+    // the visible DOM is now pretranslated
+    isPretranslated = true;
+    return true;
+  }
+
+  function initResources() {
+    var resLinks = document.head
+                           .querySelectorAll('link[type="application/l10n"]');
+    var iniLinks = [];
+
+    for (var i = 0; i < resLinks.length; i++) {
+      var link = resLinks[i];
+      var url = link.getAttribute('href');
+      var type = url.substr(url.lastIndexOf('.') + 1);
+      if (type === 'ini') {
+        iniLinks.push(url);
+      }
+      this.ctx.resLinks.push(url);
+    }
+
+    var iniLoads = iniLinks.length;
+    if (iniLoads === 0) {
+      initLocale.call(this);
+      return;
+    }
+
+    function onIniLoaded(err) {
+      if (err) {
+        this.ctx._emitter.emit('error', err);
+      }
+      if (--iniLoads === 0) {
+        initLocale.call(this);
+      }
+    }
+
+    for (i = 0; i < iniLinks.length; i++) {
+      loadINI.call(this, iniLinks[i], onIniLoaded.bind(this));
+    }
+  }
+
+  function initLocale() {
+    this.ctx.requestLocales(navigator.language);
+    window.addEventListener('languagechange', function l10n_langchange() {
+      navigator.mozL10n.language.code = navigator.language;
+    });
+  }
+
+  function localizeMutations(mutations) {
+    var mutation;
+
+    for (var i = 0; i < mutations.length; i++) {
+      mutation = mutations[i];
+      if (mutation.type === 'childList') {
+        var addedNode;
+
+        for (var j = 0; j < mutation.addedNodes.length; j++) {
+          addedNode = mutation.addedNodes[j];
+
+          if (addedNode.nodeType !== Node.ELEMENT_NODE) {
+            continue;
+          }
+
+          if (addedNode.childElementCount) {
+            translateFragment.call(this, addedNode);
+          } else if (addedNode.hasAttribute('data-l10n-id')) {
+            translateElement.call(this, addedNode);
+          }
+        }
+      }
+
+      if (mutation.type === 'attributes') {
+        translateElement.call(this, mutation.target);
+      }
+    }
+  }
+
+  function onMutations(mutations, self) {
+    self.disconnect();
+    localizeMutations.call(this, mutations);
+    self.observe(document, moConfig);
+  }
+
+  function onReady() {
+    if (!isPretranslated) {
+      translateDocument.call(this);
+    }
+    isPretranslated = false;
+
+    if (!nodeObserver) {
+      nodeObserver = new MutationObserver(onMutations.bind(this));
+      nodeObserver.observe(document, moConfig);
+    }
+
+    fireLocalizedEvent.call(this);
+  }
+
+  function fireLocalizedEvent() {
+    var event = new CustomEvent('localized', {
+      'bubbles': false,
+      'cancelable': false,
+      'detail': {
+        'language': this.ctx.supportedLocales[0]
+      }
+    });
+    window.dispatchEvent(event);
+  }
+
+  /* jshint -W104 */
+
+  function loadINI(url, callback) {
+    var ctx = this.ctx;
+    io.load(url, function(err, source) {
+      var pos = ctx.resLinks.indexOf(url);
+
+      if (err) {
+        // remove the ini link from resLinks
+        ctx.resLinks.splice(pos, 1);
+        return callback(err);
+      }
+
+      if (!source) {
+        ctx.resLinks.splice(pos, 1);
+        return callback(new Error('Empty file: ' + url));
+      }
+
+      var patterns = parseINI(source, url).resources.map(function(x) {
+        return x.replace('en-US', '{{locale}}');
+      });
+      ctx.resLinks.splice.apply(ctx.resLinks, [pos, 1].concat(patterns));
+      callback();
+    });
+  }
+
+  function relativePath(baseUrl, url) {
+    if (url[0] === '/') {
+      return url;
+    }
+
+    var dirs = baseUrl.split('/')
+      .slice(0, -1)
+      .concat(url.split('/'))
+      .filter(function(path) {
+        return path !== '.';
+      });
+
+    return dirs.join('/');
+  }
+
+  var iniPatterns = {
+    'section': /^\s*\[(.*)\]\s*$/,
+    'import': /^\s*@import\s+url\((.*)\)\s*$/i,
+    'entry': /[\r\n]+/
+  };
+
+  function parseINI(source, iniPath) {
+    var entries = source.split(iniPatterns.entry);
+    var locales = ['en-US'];
+    var genericSection = true;
+    var uris = [];
+    var match;
+
+    for (var i = 0; i < entries.length; i++) {
+      var line = entries[i];
+      // we only care about en-US resources
+      if (genericSection && iniPatterns['import'].test(line)) {
+        match = iniPatterns['import'].exec(line);
+        var uri = relativePath(iniPath, match[1]);
+        uris.push(uri);
+        continue;
+      }
+
+      // but we need the list of all locales in the ini, too
+      if (iniPatterns.section.test(line)) {
+        genericSection = false;
+        match = iniPatterns.section.exec(line);
+        locales.push(match[1]);
+      }
+    }
+    return {
+      locales: locales,
+      resources: uris
+    };
+  }
+
+  /* jshint -W104 */
+
+  function translateDocument() {
+    document.documentElement.lang = this.language.code;
+    document.documentElement.dir = this.language.direction;
+    translateFragment.call(this, document.documentElement);
+  }
+
+  function translateFragment(element) {
+    if (element.hasAttribute('data-l10n-id')) {
+      translateElement.call(this, element);
+    }
+
+    var nodes = getTranslatableChildren(element);
+    for (var i = 0; i < nodes.length; i++ ) {
+      translateElement.call(this, nodes[i]);
+    }
+  }
+
+  function setL10nAttributes(element, id, args) {
+    element.setAttribute('data-l10n-id', id);
+    if (args) {
+      element.setAttribute('data-l10n-args', JSON.stringify(args));
+    }
+  }
+
+  function getL10nAttributes(element) {
+    return {
+      id: element.getAttribute('data-l10n-id'),
+      args: JSON.parse(element.getAttribute('data-l10n-args'))
+    };
+  }
+
+  function getTranslatableChildren(element) {
+    return element ? element.querySelectorAll('*[data-l10n-id]') : [];
+  }
+
+  function localizeElement(element, id, args) {
+    if (!id) {
+      element.removeAttribute('data-l10n-id');
+      element.removeAttribute('data-l10n-args');
+      setTextContent(element, '');
+      return;
+    }
+
+    element.setAttribute('data-l10n-id', id);
+    if (args && typeof args === 'object') {
+      element.setAttribute('data-l10n-args', JSON.stringify(args));
+    } else {
+      element.removeAttribute('data-l10n-args');
+    }
+  }
+
+  function translateElement(element) {
+    var l10n = getL10nAttributes(element);
+
+    if (!l10n.id) {
+      return false;
+    }
+
+    var entity = this.ctx.getEntity(l10n.id, l10n.args);
+
+    if (!entity) {
+      return false;
+    }
+
+    if (typeof entity === 'string') {
+      setTextContent(element, entity);
+      return true;
+    }
+
+    if (entity.value) {
+      setTextContent(element, entity.value);
+    }
+
+    for (var key in entity.attributes) {
+      if (entity.attributes.hasOwnProperty(key)) {
+        var attr = entity.attributes[key];
+        if (key === 'ariaLabel') {
+          element.setAttribute('aria-label', attr);
+        } else if (key === 'innerHTML') {
+          // XXX: to be removed once bug 994357 lands
+          element.innerHTML = attr;
+        } else {
+          element.setAttribute(key, attr);
+        }
+      }
+    }
+
+    return true;
+  }
+
+  function setTextContent(element, text) {
+    // standard case: no element children
+    if (!element.firstElementChild) {
+      element.textContent = text;
+      return;
+    }
+
+    // this element has element children: replace the content of the first
+    // (non-blank) child textNode and clear other child textNodes
+    var found = false;
+    var reNotBlank = /\S/;
+    for (var child = element.firstChild; child; child = child.nextSibling) {
+      if (child.nodeType === Node.TEXT_NODE &&
+          reNotBlank.test(child.nodeValue)) {
+        if (found) {
+          child.nodeValue = '';
+        } else {
+          child.nodeValue = text;
+          found = true;
+        }
+      }
+    }
+    // if no (non-empty) textNode is found, insert a textNode before the
+    // element's first child.
+    if (!found) {
+      element.insertBefore(document.createTextNode(text), element.firstChild);
+    }
+  }
+
+})(this);
diff --git a/www/firefoxos/l10n_date.js b/www/firefoxos/l10n_date.js
new file mode 100644
index 0000000..8c09d38
--- /dev/null
+++ b/www/firefoxos/l10n_date.js
@@ -0,0 +1,198 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+
+'use strict';
+
+/**
+ * This lib relies on `l10n.js' to implement localizable date/time strings.
+ *
+ * The proposed `DateTimeFormat' object should provide all the features that are
+ * planned for the `Intl.DateTimeFormat' constructor, but the API does not match
+ * exactly the ES-i18n draft.
+ *   - https://bugzilla.mozilla.org/show_bug.cgi?id=769872
+ *   - http://wiki.ecmascript.org/doku.php?id=globalization:specification_drafts
+ *
+ * Besides, this `DateTimeFormat' object provides two features that aren't
+ * planned in the ES-i18n spec:
+ *   - a `toLocaleFormat()' that really works (i.e. fully translated);
+ *   - a `fromNow()' method to handle relative dates ("pretty dates").
+ *
+ * WARNING: this library relies on the non-standard `toLocaleFormat()' method,
+ * which is specific to Firefox -- no other browser is supported.
+ */
+
+navigator.mozL10n.DateTimeFormat = function(locales, options) {
+  var _ = navigator.mozL10n.get;
+
+  // https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/toLocaleFormat
+  function localeFormat(d, format) {
+    var tokens = format.match(/(%E.|%O.|%.)/g);
+
+    for (var i = 0; tokens && i < tokens.length; i++) {
+      var value = '';
+
+      // http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+      switch (tokens[i]) {
+        // localized day/month names
+        case '%a':
+          value = _('weekday-' + d.getDay() + '-short');
+          break;
+        case '%A':
+          value = _('weekday-' + d.getDay() + '-long');
+          break;
+        case '%b':
+        case '%h':
+          value = _('month-' + d.getMonth() + '-short');
+          break;
+        case '%B':
+          value = _('month-' + d.getMonth() + '-long');
+          break;
+        case '%Eb':
+          value = _('month-' + d.getMonth() + '-genitive');
+          break;
+
+        // like %H, but in 12-hour format and without any leading zero
+        case '%I':
+          value = d.getHours() % 12 || 12;
+          break;
+
+        // like %d, without any leading zero
+        case '%e':
+          value = d.getDate();
+          break;
+
+        // %p: 12 hours format (AM/PM)
+        case '%p':
+          value = d.getHours() < 12 ? _('time_am') : _('time_pm');
+          break;
+
+        // localized date/time strings
+        case '%c':
+        case '%x':
+        case '%X':
+          // ensure the localized format string doesn't contain any %c|%x|%X
+          var tmp = _('dateTimeFormat_' + tokens[i]);
+          if (tmp && !(/(%c|%x|%X)/).test(tmp)) {
+            value = localeFormat(d, tmp);
+          }
+          break;
+
+        // other tokens don't require any localization
+      }
+
+      format = format.replace(tokens[i], value || d.toLocaleFormat(tokens[i]));
+    }
+
+    return format;
+  }
+
+  /**
+   * Returns the parts of a number of seconds
+   */
+  function relativeParts(seconds) {
+    seconds = Math.abs(seconds);
+    var descriptors = {};
+    var units = [
+      'years', 86400 * 365,
+      'months', 86400 * 30,
+      'weeks', 86400 * 7,
+      'days', 86400,
+      'hours', 3600,
+      'minutes', 60
+    ];
+
+    if (seconds < 60) {
+      return {
+        minutes: Math.round(seconds / 60)
+      };
+    }
+
+    for (var i = 0, uLen = units.length; i < uLen; i += 2) {
+      var value = units[i + 1];
+      if (seconds >= value) {
+        descriptors[units[i]] = Math.floor(seconds / value);
+        seconds -= descriptors[units[i]] * value;
+      }
+    }
+    return descriptors;
+  }
+
+  /**
+   * Returns a translated string which respresents the
+   * relative time before or after a date.
+   * @param {String|Date} time before/after the currentDate.
+   * @param {String} useCompactFormat whether to use a compact display format.
+   * @param {Number} maxDiff returns a formatted date if the diff is greater.
+   */
+  function prettyDate(time, useCompactFormat, maxDiff) {
+    maxDiff = maxDiff || 86400 * 10; // default = 10 days
+
+    switch (time.constructor) {
+      case String: // timestamp
+        time = parseInt(time);
+        break;
+      case Date:
+        time = time.getTime();
+        break;
+    }
+
+    var secDiff = (Date.now() - time) / 1000;
+    if (isNaN(secDiff)) {
+      return _('incorrectDate');
+    }
+
+    if (Math.abs(secDiff) > 60) {
+      // round milliseconds up if difference is over 1 minute so the result is
+      // closer to what the user would expect (1h59m59s300ms diff should return
+      // "in 2 hours" instead of "in an hour")
+      secDiff = secDiff > 0 ? Math.ceil(secDiff) : Math.floor(secDiff);
+    }
+
+    if (secDiff > maxDiff) {
+      return localeFormat(new Date(time), '%x');
+    }
+
+    var f = useCompactFormat ? '-short' : '-long';
+    var parts = relativeParts(secDiff);
+
+    var affix = secDiff >= 0 ? '-ago' : '-until';
+    for (var i in parts) {
+      return _(i + affix + f, { value: parts[i]});
+    }
+  }
+
+  // API
+  return {
+    localeDateString: function localeDateString(d) {
+      return localeFormat(d, '%x');
+    },
+    localeTimeString: function localeTimeString(d) {
+      return localeFormat(d, '%X');
+    },
+    localeString: function localeString(d) {
+      return localeFormat(d, '%c');
+    },
+    localeFormat: localeFormat,
+    fromNow: prettyDate,
+    relativeParts: relativeParts
+  };
+};
diff --git a/www/firefoxos/locales/date.ar.properties b/www/firefoxos/locales/date.ar.properties
new file mode 100644
index 0000000..ddf117f
--- /dev/null
+++ b/www/firefoxos/locales/date.ar.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = الأحد
+weekday-1-long = الإثنين
+weekday-2-long = الثلاثاء
+weekday-3-long = الأربعاء
+weekday-4-long = الخميس
+weekday-5-long = الجمعة
+weekday-6-long = السبت
+
+weekday-0-short = أحد
+weekday-1-short = إثنين
+weekday-2-short = ثلاثاء
+weekday-3-short = أربعاء
+weekday-4-short = خميس
+weekday-5-short = جمعة
+weekday-6-short = سبت
+
+# Month names
+
+month-0-long  = يناير
+month-1-long  = فبراير
+month-2-long  = مارس
+month-3-long  = أبريل
+month-4-long  = مايو
+month-5-long  = يونيو
+month-6-long  = يوليو
+month-7-long  = أغسطس
+month-8-long  = سبتمبر
+month-9-long  = أكتوبر
+month-10-long = نوفمبر
+month-11-long = ديسمبر
+
+month-0-genitive  = يناير
+month-1-genitive  = فبراير
+month-2-genitive  = مارس
+month-3-genitive  = أبريل
+month-4-genitive  = مايو
+month-5-genitive  = يونيو
+month-6-genitive  = يوليو
+month-7-genitive  = أغسطس
+month-8-genitive  = سبتمبر
+month-9-genitive  = أكتوبر
+month-10-genitive = نوفمبر
+month-11-genitive = ديسمبر
+
+month-0-short  = يناير
+month-1-short  = فبراير
+month-2-short  = مارس
+month-3-short  = ابريل
+month-4-short  = مايو
+month-5-short  = يونيو
+month-6-short  = يوليو
+month-7-short  = أغسطس
+month-8-short  = سبتمبر
+month-9-short  = أكتوبر
+month-10-short = نوفمبر
+month-11-short = ديسمبر
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = الآن
+minutes-ago-long[one]   = منذ دقيقة
+minutes-ago-long[two]   = منذ دقيقتين
+minutes-ago-long[few]   = منذ {{value}} دقائق
+minutes-ago-long[many]  = منذ {{value}} دقيقة
+minutes-ago-long[other] = منذ {{value}} دقيقة
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = الآن
+hours-ago-long[one]   = منذ ساعة
+hours-ago-long[two]   = منذ ساعتين
+hours-ago-long[few]   = قبل {{value}} ساعات
+hours-ago-long[many]  = قبل {{value}} ساعة
+hours-ago-long[other] = قبل {{value}} ساعة
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = اليوم
+days-ago-long[one]   = الأمس
+days-ago-long[two]   = منذ يومين
+days-ago-long[few]   = منذ {{value}} أيام
+days-ago-long[many]  = منذ {{value}} يوم
+days-ago-long[other] = منذ {{value}} يوم
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = هذا الأسبوع
+weeks-ago-long[one]   = الأسبوع الماضي
+weeks-ago-long[two]   = منذ أسبوعين
+weeks-ago-long[few]   = منذ {{value}} أسابيع
+weeks-ago-long[many]  = منذ {{value}} أسبوع
+weeks-ago-long[other] = منذ {{value}} أسبوع
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = هذا الشهر
+months-ago-long[one]   = الشهر الماضي
+months-ago-long[two]   = منذ شهرين
+months-ago-long[few]   = منذ {{value}} أشهر
+months-ago-long[many]  = منذ {{value}} شهر
+months-ago-long[other] = منذ {{value}} شهر
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = هذه السنة
+years-ago-long[one]   = السنة الماضية
+years-ago-long[two]   = منذ سنتين
+years-ago-long[few]   = منذ {{value}} سنوات
+years-ago-long[many]  = منذ {{value}} سنة
+years-ago-long[other] = منذ {{value}} سنة
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = الآن
+minutes-until-long[one]   = خلال دقيقة
+minutes-until-long[two]   = خلال دقيقتين
+minutes-until-long[few]   = خلال {{value}} دقائق
+minutes-until-long[many]  = خلال {{value}} دقيقة
+minutes-until-long[other] = خلال {{value}} دقيقة
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = الآن
+hours-until-long[one]   = خلال ساعة
+hours-until-long[two]   = خلال ساعتين
+hours-until-long[few]   = خلال {{value}} ساعات
+hours-until-long[many]  = خلال {{value}} ساعة
+hours-until-long[other] = خلال {{value}} ساعة
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = اليوم
+days-until-long[one]   = غداً
+days-until-long[two]   = خلال يومين
+days-until-long[few]   = خلال {{value}} أيام
+days-until-long[many]  = خلال {{value}} يوم
+days-until-long[other] = خلال {{value}} يوم
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = هذا الأسبوع
+weeks-until-long[one]   = الأسبوع القادم
+weeks-until-long[two]   = خلال أسبوعين
+weeks-until-long[few]   = خلال {{value}} أسابيع
+weeks-until-long[many]  = خلال {{value}} أسبوع
+weeks-until-long[other] = خلال {{value}} أسبوع
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = هذا الشهر
+months-until-long[one]   = الشهر القادم
+months-until-long[two]   = خلال شهرين
+months-until-long[few]   = خلال {{value}} أشهر
+months-until-long[many]  = خلال {{value}} شهر
+months-until-long[other] = خلال {{value}} شهر
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = هذه السنة
+years-until-long[one]   = السنة القادمة
+years-until-long[two]   = خلال سنتين
+years-until-long[few]   = خلال {{value}} سنوات
+years-until-long[many]  = خلال {{value}} سنة
+years-until-long[other] = خلال {{value}} سنة
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = الآن
+minutes-ago-short[other] = منذ {{value}} دقيقة
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = الآن
+hours-ago-short[other] = منذ {{value}} س
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = اليوم
+days-ago-short[other] = منذ {{value}} ي
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = الآن
+minutes-until-short[other] = خلال {{value}} د
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = الآن
+hours-until-short[other] = خلال {{value}} س
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = اليوم
+days-until-short[other] = خلال {{value}} ي
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (تاريخ غير صحيح)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a %b %e %Y %I:%M:%S %p
+dateTimeFormat_%x = %m/%d/%Y
+dateTimeFormat_%X = %I:%M:%S %p
+
+shortTimeFormat = %I:%M %p
+shortDateTimeFormat = %x %I:%M %p
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 0
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = ص
+time_pm = م
diff --git a/www/firefoxos/locales/date.as.properties b/www/firefoxos/locales/date.as.properties
new file mode 100644
index 0000000..fe70c83
--- /dev/null
+++ b/www/firefoxos/locales/date.as.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = দেওবাৰ
+weekday-1-long = সোমবাৰ
+weekday-2-long = মঙ্গলবাৰ
+weekday-3-long = বুধবাৰ
+weekday-4-long = বৃহস্পতিবাৰ
+weekday-5-long = শুক্ৰবাৰ
+weekday-6-long = শনিবাৰ
+
+weekday-0-short = দেও
+weekday-1-short = সোম
+weekday-2-short = মঙ্গল
+weekday-3-short = বুধ
+weekday-4-short = বৃহষ্পতি
+weekday-5-short = শুক্ৰ
+weekday-6-short = শনি
+
+# Month names
+
+month-0-long  = জানুৱাৰী
+month-1-long  = ফেব্ৰুৱাৰী
+month-2-long  = মাৰ্চ
+month-3-long  = এপ্ৰিল
+month-4-long  = মে'
+month-5-long  = জুন
+month-6-long  = জুলাই
+month-7-long  = আগষ্ট
+month-8-long  = চেপ্তেম্বৰ
+month-9-long  = অক্টোবৰ
+month-10-long = নভেম্বৰ
+month-11-long = ডিচেম্বৰ
+
+month-0-genitive  = জানুৱাৰী
+month-1-genitive  = ফেব্ৰুৱাৰী
+month-2-genitive  = মাৰ্চ
+month-3-genitive  = এপ্ৰিল
+month-4-genitive  = মে'
+month-5-genitive  = জুন
+month-6-genitive  = জুলাই
+month-7-genitive  = আগষ্ট
+month-8-genitive  = চেপ্তেম্বৰ
+month-9-genitive  = অক্টোবৰ
+month-10-genitive = নভেম্বৰ
+month-11-genitive = ডিচেম্বৰ
+
+month-0-short  = জান
+month-1-short  = ফেব
+month-2-short  = মাৰ্চ
+month-3-short  = এপ্ৰি
+month-4-short  = মে
+month-5-short  = জুন
+month-6-short  = জুল
+month-7-short  = আগ
+month-8-short  = চেপ
+month-9-short  = অক্ট
+month-10-short = নৱেম্বৰ
+month-11-short = ডিচেম্বৰ
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = এই মাত্ৰ
+minutes-ago-long[one]   = এক মিনিট পূৰ্বে
+minutes-ago-long[two]   = {{value}} মিনিট আগত
+minutes-ago-long[few]   = {{value}} মিনিট আগত
+minutes-ago-long[many]  = {{value}} মিনিট আগত
+minutes-ago-long[other] = {{value}} মিনিট আগত
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = এইমাত্ৰ
+hours-ago-long[one]   = এক ঘন্টা আগত
+hours-ago-long[two]   = {{value}} ঘন্টা আগত
+hours-ago-long[few]   = {{value}} ঘন্টা আগত
+hours-ago-long[many]  = {{value}} ঘন্টা আগত
+hours-ago-long[other] = {{value}} ঘন্টা আগত
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = আজি
+days-ago-long[one]   = কালি
+days-ago-long[two]   = {{value}} দিন আগত
+days-ago-long[few]   = {{value}} দিন আগত
+days-ago-long[many]  = {{value}} দিন আগত
+days-ago-long[other] = {{value}} দিন আগত
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = এই সপ্তাহ
+weeks-ago-long[one]   = যোৱা সপ্তাহ
+weeks-ago-long[two]   = {{value}} সপ্তাহ আগত
+weeks-ago-long[few]   = {{value}} সপ্তাহ আগত
+weeks-ago-long[many]  = {{value}} সপ্তাহ আগত
+weeks-ago-long[other] = {{value}} সপ্তাহ আগত
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = এই মাহ
+months-ago-long[one]   = যোৱা মাহ
+months-ago-long[two]   = {{value}} মাহ আগত
+months-ago-long[few]   = {{value}} মাহ আগত
+months-ago-long[many]  = {{value}} মাহ আগত
+months-ago-long[other] = {{value}} মাহ আগত
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = এই বছৰ
+years-ago-long[one]   = যোৱা বছৰ
+years-ago-long[two]   = {{value}} বছৰ আগত
+years-ago-long[few]   = {{value}} বছৰ আগত
+years-ago-long[many]  = {{value}} বছৰ আগত
+years-ago-long[other] = {{value}} বছৰ আগত
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = এতিয়া
+minutes-until-long[one]   = এক মিনিটত
+minutes-until-long[two]   = {{value}} মিনিটত
+minutes-until-long[few]   = {{value}} মিনিটত
+minutes-until-long[many]  = {{value}} মিনিটত
+minutes-until-long[other] = {{value}} মিনিটত
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = এতিয়া
+hours-until-long[one]   = এঘণ্টাত
+hours-until-long[two]   = {{value}} ঘণ্টাত
+hours-until-long[few]   = {{value}} ঘণ্টাত
+hours-until-long[many]  = {{value}} ঘণ্টাত
+hours-until-long[other] = {{value}} ঘণ্টাত
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = আজি
+days-until-long[one]   = কাইলৈ
+days-until-long[two]   = {{value}} দিনত
+days-until-long[few]   = {{value}} দিনত
+days-until-long[many]  = {{value}} দিনত
+days-until-long[other] = {{value}} দিনত
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = এই সপ্তাহ
+weeks-until-long[one]   = অহা সপ্তাহ
+weeks-until-long[two]   = {{value}} সপ্তাহত
+weeks-until-long[few]   = {{value}} সপ্তাহত
+weeks-until-long[many]  = {{value}} সপ্তাহত
+weeks-until-long[other] = {{value}} সপ্তাহত
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = এই মাহ
+months-until-long[one]   = অহা মাহ
+months-until-long[two]   = {{value}} মাহত
+months-until-long[few]   = {{value}} মাহত
+months-until-long[many]  = {{value}} মাহত
+months-until-long[other] = {{value}} মাহত
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = এই বছৰ
+years-until-long[one]   = অহা বছৰ
+years-until-long[two]   = {{value}} বছৰত
+years-until-long[few]   = {{value}} বছৰত
+years-until-long[many]  = {{value}} বছৰত
+years-until-long[other] = {{value}} বছৰত
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = এই মাত্ৰ
+minutes-ago-short[other] = {{value}}m আগত
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = এই মাত্ৰ
+hours-ago-short[other] = {{value}}h আগত
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = আজি
+days-ago-short[other] = {{value}}d আগত
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = এতিয়া
+minutes-until-short[other] = {{value}}m ত
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = এতিয়া
+hours-until-short[other] = {{value}}h ত
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = আজি
+days-until-short[other] = {{value}}d ত
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (ভুল তাৰিখ)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a %b %e %Y %I:%M:%S %p
+dateTimeFormat_%x = %m/%d/%Y
+dateTimeFormat_%X = %I:%M:%S %p
+
+shortTimeFormat = %I:%M %p
+shortDateTimeFormat = %x %I:%M %p
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 0
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = AM
+time_pm = PM
diff --git a/www/firefoxos/locales/date.ast.properties b/www/firefoxos/locales/date.ast.properties
new file mode 100644
index 0000000..47a069d
--- /dev/null
+++ b/www/firefoxos/locales/date.ast.properties
@@ -0,0 +1,173 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = domingu
+weekday-1-long = llunes
+weekday-2-long = martes
+weekday-3-long = miércoles
+weekday-4-long = xueves
+weekday-5-long = vienres
+weekday-6-long = sábadu
+
+weekday-0-short = dom.
+weekday-1-short = llu.
+weekday-2-short = mar.
+weekday-3-short = mié.
+weekday-4-short = xue.
+weekday-5-short = vie.
+weekday-6-short = sáb.
+
+# Month names
+
+month-0-long  = xineru
+month-1-long  = febreru
+month-2-long  = marzu
+month-3-long  = abril
+month-4-long  = mayu
+month-5-long  = xunu
+month-6-long  = xunetu
+month-7-long  = agostu
+month-8-long  = setiembre
+month-9-long  = ochobre
+month-10-long = payares
+month-11-long = avientu
+
+month-0-genitive  = de xineru
+month-1-genitive  = de febreru
+month-2-genitive  = de marzu
+month-3-genitive  = d'abril
+month-4-genitive  = de mayu
+month-5-genitive  = de xunu
+month-6-genitive  = de xunetu
+month-7-genitive  = d'agostu
+month-8-genitive  = de setiembre
+month-9-genitive  = d'ochobre
+month-10-genitive = de payares
+month-11-genitive = d'avientu
+
+month-0-short  = xin.
+month-1-short  = feb.
+month-2-short  = mzu.
+month-3-short  = abr.
+month-4-short  = myu.
+month-5-short  = xun.
+month-6-short  = xnt.
+month-7-short  = ago.
+month-8-short  = set.
+month-9-short  = och.
+month-10-short = pay.
+month-11-short = avi.
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutesAgo-long={[ plural(m) ]}
+minutesAgo-long[zero]  = agora mesmo
+minutesAgo-long[one]   = fai un minutu
+minutesAgo-long[two]   = fai {{m}} minutos
+minutesAgo-long[few]   = fai {{m}} minutos
+minutesAgo-long[many]  = fai {{m}} minutos
+minutesAgo-long[other] = fai {{m}} minutos
+
+hoursAgo-long={[ plural(h) ]}
+hoursAgo-long[zero]  = agora mesmo
+hoursAgo-long[one]   = fai una hora
+hoursAgo-long[two]   = fai {{h}} hores
+hoursAgo-long[few]   = fai {{h}} hores
+hoursAgo-long[many]  = fai {{h}} hores
+hoursAgo-long[other] = fai {{h}} hores
+
+daysAgo-long={[ plural(d) ]}
+daysAgo-long[zero]  = güei
+daysAgo-long[one]   = ayeri
+daysAgo-long[two]   = fai {{d}} díes
+daysAgo-long[few]   = fai {{d}} díes
+daysAgo-long[many]  = fai {{d}} díes
+daysAgo-long[other] = fai {{d}} díes
+
+inMinutes-long={[ plural(m) ]}
+inMinutes-long[zero]  = agora
+inMinutes-long[one]   = nun minutu
+inMinutes-long[two]   = en {{m}} minutos
+inMinutes-long[few]   = en {{m}} minutos
+inMinutes-long[many]  = en {{m}} minutos
+inMinutes-long[other] = en {{m}} minutos
+
+inHours-long={[ plural(h) ]}
+inHours-long[zero]  = agora
+inHours-long[one]   = nuna hora
+inHours-long[two]   = en {{h}} hores
+inHours-long[few]   = en {{h}} hores
+inHours-long[many]  = en {{h}} hores
+inHours-long[other] = en {{h}} hores
+
+inDays-long={[ plural(d) ]}
+inDays-long[zero]  = güei
+inDays-long[one]   = mañana
+inDays-long[two]   = en {{d}} díes
+inDays-long[few]   = en {{d}} díes
+inDays-long[many]  = en {{d}} díes
+inDays-long[other] = en {{d}} díes
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutesAgo-short={[ plural(m) ]}
+minutesAgo-short[zero]  = agora mesmo
+minutesAgo-short[other] = fai {{m}} min
+
+hoursAgo-short={[ plural(h) ]}
+hoursAgo-short[zero]  = agora mesmo
+hoursAgo-short[other] = fai {{h}} h
+
+daysAgo-short={[ plural(d) ]}
+daysAgo-short[zero]  = güei
+daysAgo-short[other] = fai {{d}} d
+
+inMinutes-short={[ plural(m) ]}
+inMinutes-short[zero]  = agora
+inMinutes-short[other] = en {{m}} min
+
+inHours-short={[ plural(h) ]}
+inHours-short[zero]  = agora
+inHours-short[other] = en {{h}} h
+
+inDays-short={[ plural(d) ]}
+inDays-short[zero]  = güei
+inDays-short[other] = en {{d}} d
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (data incorreuta)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a, %e de %b, %Y %H:%M:%S
+dateTimeFormat_%x = %d/%m/%Y
+dateTimeFormat_%X = %H:%M:%S
+
+shortTimeFormat = %H:%M
+shortDateTimeFormat = %x %H:%M %p
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 1
diff --git a/www/firefoxos/locales/date.bg.properties b/www/firefoxos/locales/date.bg.properties
new file mode 100644
index 0000000..d3742ba
--- /dev/null
+++ b/www/firefoxos/locales/date.bg.properties
@@ -0,0 +1,222 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = Неделя
+weekday-1-long = Понеделник
+weekday-2-long = Вторник
+weekday-3-long = Сряда
+weekday-4-long = Четвъртък
+weekday-5-long = Петък
+weekday-6-long = Събота
+
+weekday-0-short = Нед
+weekday-1-short = Пон
+weekday-2-short = Вт
+weekday-3-short = Ср
+weekday-4-short = Чет
+weekday-5-short = Пет
+weekday-6-short = Съб
+
+# Month names
+
+month-0-long  = Януари
+month-1-long  = Февруари
+month-2-long  = Maрт
+month-3-long  = Aприл
+month-4-long  = Май
+month-5-long  = Юни
+month-6-long  = Юли
+month-7-long  = Август
+month-8-long  = Септември
+month-9-long  = Oктомври
+month-10-long = Ноември
+month-11-long = Декември
+
+month-0-genitive  = Януари
+month-1-genitive  = Февруари
+month-2-genitive  = Maрт
+month-3-genitive  = Aприл
+month-4-genitive  = Май
+month-5-genitive  = Юни
+month-6-genitive  = Юли
+month-7-genitive  = Август
+month-8-genitive  = Септември
+month-9-genitive  = Oктомври
+month-10-genitive = Ноември
+month-11-genitive = Декември
+
+month-0-short  = Ян
+month-1-short  = Фев
+month-2-short  = Мар
+month-3-short  = Апр
+month-4-short  = Май
+month-5-short  = Юни
+month-6-short  = Юли
+month-7-short  = Авг
+month-8-short  = Сеп
+month-9-short  = Окт
+month-10-short = Ное
+month-11-short = Дек
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = в момента
+minutes-ago-long[one]   = преди минута
+minutes-ago-long[two]   = преди {{value}} минути
+minutes-ago-long[few]   = преди {{value}} минути
+minutes-ago-long[many]  = преди {{value}} минути
+minutes-ago-long[other] = преди {{value}} минути
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = в момента
+hours-ago-long[one]   = преди час
+hours-ago-long[two]   = преди {{value}} часа
+hours-ago-long[few]   = преди {{value}} часа
+hours-ago-long[many]  = преди {{value}} часа
+hours-ago-long[other] = преди {{value}} часа
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = днес
+days-ago-long[one]   = вчера
+days-ago-long[two]   = преди {{value}} дни
+days-ago-long[few]   = преди {{value}} дни
+days-ago-long[many]  = преди {{value}} дни
+days-ago-long[other] = преди {{value}} дни
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = тази седмица
+weeks-ago-long[one]   = миналата седмица
+weeks-ago-long[two]   = преди {{value}} седмици
+weeks-ago-long[few]   = преди {{value}} седмици
+weeks-ago-long[many]  = преди {{value}} седмици
+weeks-ago-long[other] = преди {{value}} седмици
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = този месец
+months-ago-long[one]   = миналия месец
+months-ago-long[two]   = преди {{value}} месеца
+months-ago-long[few]   = преди {{value}} месеца
+months-ago-long[many]  = преди {{value}} месеца
+months-ago-long[other] = преди {{value}} месеца
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = тази година
+years-ago-long[one]   = миналата година
+years-ago-long[two]   = преди {{value}} години
+years-ago-long[few]   = преди {{value}} години
+years-ago-long[many]  = преди {{value}} години
+years-ago-long[other] = преди {{value}} години
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = now
+minutes-until-long[one]   = in a minute
+minutes-until-long[two]   = in {{value}} minutes
+minutes-until-long[few]   = in {{value}} minutes
+minutes-until-long[many]  = in {{value}} minutes
+minutes-until-long[other] = in {{value}} minutes
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = сега
+hours-until-long[one]   = до един час
+hours-until-long[two]   = след {{value}} часа
+hours-until-long[few]   = след {{value}} часа
+hours-until-long[many]  = след {{value}} часа
+hours-until-long[other] = след {{value}} часа
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = днес
+days-until-long[one]   = утре
+days-until-long[two]   = след {{value}} дни
+days-until-long[few]   = след {{value}} дни
+days-until-long[many]  = след {{value}} дни
+days-until-long[other] = след {{value}} дни
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = тази седмица
+weeks-until-long[one]   = другата седмица
+weeks-until-long[two]   = след {{value}} седмици
+weeks-until-long[few]   = след {{value}} седмици
+weeks-until-long[many]  = след {{value}} седмици
+weeks-until-long[other] = след {{value}} седмици
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = този месец
+months-until-long[one]   = другия месец
+months-until-long[two]   = след {{value}} месеца
+months-until-long[few]   = след {{value}} месеца
+months-until-long[many]  = след {{value}} месеца
+months-until-long[other] = след {{value}} месеца
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = тази година
+years-until-long[one]   = следващата година
+years-until-long[two]   = след {{value}} години
+years-until-long[few]   = след {{value}} години
+years-until-long[many]  = след {{value}} години
+years-until-long[other] = след {{value}} години
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = в момента
+minutes-ago-short[other] = преди {{value}}мин.
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = в момента
+hours-ago-short[other] = преди {{value}}ч.
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = днес
+days-ago-short[other] = преди {{value}}дни
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = сега
+minutes-until-short[other] = след {{value}}мин.
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = сега
+hours-until-short[other] = след {{value}}ч.
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = днес
+days-until-short[other] = след {{value}}дни
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (невалидна дата)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a, %e %b %Y %H:%M:%S
+dateTimeFormat_%x = %d %m %Y
+dateTimeFormat_%X = %H:%M:%S
+
+shortTimeFormat = %H:%M
+shortDateTimeFormat = %x %H:%M
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 1
diff --git a/www/firefoxos/locales/date.bn-BD.properties b/www/firefoxos/locales/date.bn-BD.properties
new file mode 100644
index 0000000..555c3af
--- /dev/null
+++ b/www/firefoxos/locales/date.bn-BD.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = রবিবার
+weekday-1-long = সোমবার
+weekday-2-long = মঙ্গলবার
+weekday-3-long = বুধবার
+weekday-4-long = বৃহস্পতিবার
+weekday-5-long = শুক্রবার
+weekday-6-long = শনিবার
+
+weekday-0-short = রবি
+weekday-1-short = সোম
+weekday-2-short = মঙ্গল
+weekday-3-short = বুধ
+weekday-4-short = বৃহঃ
+weekday-5-short = শুক্র
+weekday-6-short = শনি
+
+# Month names
+
+month-0-long  = জানুয়ারি
+month-1-long  = ফেব্রুয়ারি
+month-2-long  = মার্চ
+month-3-long  = এপ্রিল
+month-4-long  = মে
+month-5-long  = জুন
+month-6-long  = জুলাই
+month-7-long  = আগস্ট
+month-8-long  = সেপ্টেম্বর
+month-9-long  = অক্টোবর
+month-10-long = নভেম্বর
+month-11-long = ডিসেম্বর
+
+month-0-genitive  = জানুয়ারি
+month-1-genitive  = ফেব্রুয়ারি
+month-2-genitive  = মার্চ
+month-3-genitive  = এপ্রিল
+month-4-genitive  = মে
+month-5-genitive  = জুন
+month-6-genitive  = জুলাই
+month-7-genitive  = আগস্ট
+month-8-genitive  = সেপ্টেম্বর
+month-9-genitive  = অক্টোবর
+month-10-genitive = নভেম্বর
+month-11-genitive = ডিসেম্বর
+
+month-0-short  = জানু
+month-1-short  = ফেব্রু
+month-2-short  = মার্চ
+month-3-short  = এপ্রিল
+month-4-short  = মে
+month-5-short  = জুন
+month-6-short  = জুলাই
+month-7-short  = আগস্ট
+month-8-short  = সেপ্ট
+month-9-short  = অক্টো
+month-10-short = নভে
+month-11-short = ডিসে
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = এইমাত্র
+minutes-ago-long[one]   = ১ মিনিট পূর্বে
+minutes-ago-long[two]   = {{value}} মিনিট পূর্বে
+minutes-ago-long[few]   = {{value}} মিনিট পূর্বে
+minutes-ago-long[many]  = {{value}} মিনিট পূর্বে
+minutes-ago-long[other] = {{value}} মিনিট পূর্বে
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = এইমাত্র
+hours-ago-long[one]   = ১ ঘন্টা পূর্বে
+hours-ago-long[two]   = {{value}} ঘন্টা পূর্বে
+hours-ago-long[few]   = {{value}} ঘন্টা পূর্বে
+hours-ago-long[many]  = {{value}} ঘন্টা পূর্বে
+hours-ago-long[other] = {{value}} ঘন্টা পূর্বে
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = আজ
+days-ago-long[one]   = গতকাল
+days-ago-long[two]   = {{value}} দিন পূর্বে
+days-ago-long[few]   = {{value}} দিন পূর্বে
+days-ago-long[many]  = {{value}} দিন পূর্বে
+days-ago-long[other] = {{value}} দিন পূর্বে
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = এই সপ্তাহে
+weeks-ago-long[one]   = গত সপ্তাহ
+weeks-ago-long[two]   = {{value}} সপ্তাহ পূর্বে
+weeks-ago-long[few]   = {{value}} সপ্তাহ পূর্বে
+weeks-ago-long[many]  = {{value}} সপ্তাহ পূর্বে
+weeks-ago-long[other] = {{value}} সপ্তাহ পূর্বে
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = চলতি মাস
+months-ago-long[one]   = গত মাস
+months-ago-long[two]   = {{value}} মাস পূর্বে
+months-ago-long[few]   = {{value}} মাস পূর্বে
+months-ago-long[many]  = {{value}} মাস পূর্বে
+months-ago-long[other] = {{value}} মাস পূর্বে
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = এই বছর
+years-ago-long[one]   = গত বছর
+years-ago-long[two]   = {{value}} বছর আগে
+years-ago-long[few]   = {{value}} বছর পূর্বে
+years-ago-long[many]  = {{value}} বছর পূর্বে
+years-ago-long[other] = {{value}} বছর পূর্বে
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = এখন
+minutes-until-long[one]   = এক মিনিটের মধ্যে
+minutes-until-long[two]   = {{value}} মিনিটের মধ্যে
+minutes-until-long[few]   = {{value}} মিনিটের মধ্যে
+minutes-until-long[many]  = {{value}} মিনিটের মধ্যে
+minutes-until-long[other] = {{value}} মিনিটের মধ্যে
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = এখন
+hours-until-long[one]   = এক ঘন্টার মধ্যে
+hours-until-long[two]   = {{value}} ঘন্টার মধ্যে
+hours-until-long[few]   = {{value}} ঘন্টার মধ্যে
+hours-until-long[many]  = {{value}} ঘন্টার মধ্যে
+hours-until-long[other] = {{value}} ঘন্টার মধ্যে
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = আজ
+days-until-long[one]   = আগামীকাল
+days-until-long[two]   = {{value}} দিনের মধ্যে
+days-until-long[few]   = {{value}} দিনের মধ্যে
+days-until-long[many]  = {{value}} দিনের মধ্যে
+days-until-long[other] = {{value}} দিনের মধ্যে
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = এই সপ্তাহ
+weeks-until-long[one]   = পরবর্তী সপ্তাহ
+weeks-until-long[two]   = {{value}} সপ্তাহের মধ্যে
+weeks-until-long[few]   = {{value}} সপ্তাহের মধ্যে
+weeks-until-long[many]  = {{value}} সপ্তাহের মধ্যে
+weeks-until-long[other] = {{value}} সপ্তাহের মধ্যে
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = এই মাস
+months-until-long[one]   = পরবর্তী মাস
+months-until-long[two]   = {{value}} মাসের মধ্যে
+months-until-long[few]   = {{value}} মাসের মধ্যে
+months-until-long[many]  = {{value}} মাসের মধ্যে
+months-until-long[other] = {{value}} মাসের মধ্যে
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = এই বছর
+years-until-long[one]   = আগামী বছর
+years-until-long[two]   = {{value}} বছরের মধ্যে
+years-until-long[few]   = {{value}} বছরের মধ্যে
+years-until-long[many]  = {{value}} বছরের মধ্যে
+years-until-long[other] = {{value}} বছরের মধ্যে
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = এইমাত্র
+minutes-ago-short[other] = {{value}}মি. পূর্বে
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = এইমাত্র
+hours-ago-short[other] = {{value}}ঘন্টা পূর্বে
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = আজ
+days-ago-short[other] = {{value}}দিন পূর্বে
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = এখন
+minutes-until-short[other] = {{value}} মিনিটের মধ্যে
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = এখন
+hours-until-short[other] = {{value}}ঘন্টার মধ্যে
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = আজ
+days-until-short[other] = {{value}}দিনের মধ্যে
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (ভুল তারিখ)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a %b %e %Y %I:%M:%S %p
+dateTimeFormat_%x = %m/%d/%Y
+dateTimeFormat_%X = %I:%M:%S %p
+
+shortTimeFormat = %I:%M %p
+shortDateTimeFormat = %x %I:%M %p
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 0
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = AM
+time_pm = PM
diff --git a/www/firefoxos/locales/date.bn-IN.properties b/www/firefoxos/locales/date.bn-IN.properties
new file mode 100644
index 0000000..606e4a3
--- /dev/null
+++ b/www/firefoxos/locales/date.bn-IN.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = রবিবার
+weekday-1-long = সোমবার
+weekday-2-long = মঙ্গলবার
+weekday-3-long = বুধবার
+weekday-4-long = বৃহস্পতিবার
+weekday-5-long = শুক্রবার
+weekday-6-long = শনিবার
+
+weekday-0-short = রবি
+weekday-1-short = সোম
+weekday-2-short = মঙ্গল
+weekday-3-short = বুধ
+weekday-4-short = বৃহস্পতি
+weekday-5-short = শুক্র
+weekday-6-short = শনি
+
+# Month names
+
+month-0-long  = জানুয়ারী
+month-1-long  = ফেব্রুয়ারী
+month-2-long  = মার্চ
+month-3-long  = এপ্রিল
+month-4-long  = মে
+month-5-long  = জুন
+month-6-long  = জুলাই
+month-7-long  = অগাস্ট
+month-8-long  = সেপ্টেম্বর
+month-9-long  = অক্টোবর
+month-10-long = নভেম্বর
+month-11-long = ডিসেম্বর
+
+month-0-genitive  = জানুয়ারী
+month-1-genitive  = ফেব্রুয়ারী
+month-2-genitive  = মার্চ
+month-3-genitive  = এপ্রিল
+month-4-genitive  = মে
+month-5-genitive  = জুন
+month-6-genitive  = জুলাই
+month-7-genitive  = অগাস্ট
+month-8-genitive  = সেপ্টেম্বর
+month-9-genitive  = অক্টোবর
+month-10-genitive = নভেম্বর
+month-11-genitive = ডিসেম্বর
+
+month-0-short  = জানুয়ারী
+month-1-short  = ফেব্রুয়ারী
+month-2-short  = মার্চ
+month-3-short  = এপ্রিল
+month-4-short  = মে
+month-5-short  = জুন
+month-6-short  = জুলাই
+month-7-short  = অগাস্ট
+month-8-short  = সেপ্টেম্বর
+month-9-short  = অক্টোবর
+month-10-short = নভেম্বর
+month-11-short = ডিসেম্বর
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = এইমাত্র
+minutes-ago-long[one]   = এক মিনিট পূর্বে
+minutes-ago-long[two]   = {{value}} মিনিট পূর্বে
+minutes-ago-long[few]   = {{value}} মিনিট পূর্বে
+minutes-ago-long[many]  = {{value}} মিনিট পূর্বে
+minutes-ago-long[other] = {{value}} মিনিট পূর্বে
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = এই মুহূর্তে
+hours-ago-long[one]   = 1 ঘন্টা পূর্বে
+hours-ago-long[two]   = {{value}} ঘন্টা পূর্বে
+hours-ago-long[few]   = {{value}} ঘন্টা পূর্বে
+hours-ago-long[many]  = {{value}} ঘন্টা পূর্বে
+hours-ago-long[other] = {{value}} ঘন্টা পূর্বে
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = আজ
+days-ago-long[one]   = গতকাল
+days-ago-long[two]   = {{value}} দিন পূর্বে
+days-ago-long[few]   = {{value}} দিন পূর্বে
+days-ago-long[many]  = {{value}} দিন পূর্বে
+days-ago-long[other] = {{value}} দিন পূর্বে
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = এই সপ্তাহ
+weeks-ago-long[one]   = গত সপ্তাহে
+weeks-ago-long[two]   = {{value}} সপ্তাহ পূর্বে
+weeks-ago-long[few]   = {{value}} সপ্তাহ পূর্বে
+weeks-ago-long[many]  = {{value}} সপ্তাহ পূর্বে
+weeks-ago-long[other] = {{value}} সপ্তাহ পূর্বে
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = বর্তমান মাস
+months-ago-long[one]   = শেষ মাস
+months-ago-long[two]   = {{value}} মাস পূর্বে
+months-ago-long[few]   = {{value}} মাস পূর্বে
+months-ago-long[many]  = {{value}} মাস পূর্বে
+months-ago-long[other] = {{value}} মাস পূর্বে
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = এই বছর
+years-ago-long[one]   = শেষ বছর
+years-ago-long[two]   = {{value}} দিন পূর্বে
+years-ago-long[few]   = {{value}} দিন পূর্বে
+years-ago-long[many]  = {{value}} দিন পূর্বে
+years-ago-long[other] = {{value}} দিন পূর্বে
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = এখন
+minutes-until-long[one]   = এক মিনিটে
+minutes-until-long[two]   = {{value}} মিনিটে
+minutes-until-long[few]   = {{value}} মিনিটে
+minutes-until-long[many]  = {{value}} মিনিটে
+minutes-until-long[other] = {{value}} মিনিটে
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = এখন
+hours-until-long[one]   = এক ঘন্টার মধ্যে
+hours-until-long[two]   = {{value}} ঘন্টায়
+hours-until-long[few]   = {{value}} ঘন্টায়
+hours-until-long[many]  = {{value}} ঘন্টায়
+hours-until-long[other] = {{value}} ঘন্টায়
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = আজ
+days-until-long[one]   = আগামীকাল
+days-until-long[two]   = {{value}} দিনে
+days-until-long[few]   = {{value}} দিনে
+days-until-long[many]  = {{value}} বছরে
+days-until-long[other] = {{value}} দিনে
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = এই সপ্তাহে
+weeks-until-long[one]   = আগামী সপ্তাহে
+weeks-until-long[two]   = {{value}} সপ্তাহে
+weeks-until-long[few]   = {{value}} সপ্তাহে
+weeks-until-long[many]  = {{value}} সপ্তাহে
+weeks-until-long[other] = {{value}} সপ্তাহে
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = বর্তমান মাস
+months-until-long[one]   = পরবর্তী মাস
+months-until-long[two]   = {{value}} মাসে
+months-until-long[few]   = {{value}} মাসে
+months-until-long[many]  = {{value}} মাসে
+months-until-long[other] = {{value}} মাসে
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = এই বছরে
+years-until-long[one]   = পরবর্তী বৎসর
+years-until-long[two]   = {{value}} বছরে
+years-until-long[few]   = {{value}} বছরে
+years-until-long[many]  = {{value}} বছরে
+years-until-long[other] = {{value}} বছরে
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = এইমাত্র
+minutes-ago-short[other] = {{value}} পূর্বে
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = এইমাত্র
+hours-ago-short[other] = {{value}}h পূর্বে
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = আজ
+days-ago-short[other] = {{value}} দিন পূর্বে
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = এখন
+minutes-until-short[other] = in {{value}}m
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = এখন
+hours-until-short[other] = {{value}} ঘন্টায়
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = আজ
+days-until-short[other] = {{value}} দিনে
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (incorrect date)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a %b %e %Y %I:%M:%S %p
+dateTimeFormat_%x = %m/%d/%Y
+dateTimeFormat_%X = %I:%M:%S %p
+
+shortTimeFormat = %I:%M %p
+shortDateTimeFormat = %x %I:%M %p
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 0
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = AM
+time_pm = PM
diff --git a/www/firefoxos/locales/date.ca.properties b/www/firefoxos/locales/date.ca.properties
new file mode 100644
index 0000000..b18d4f4
--- /dev/null
+++ b/www/firefoxos/locales/date.ca.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = diumenge
+weekday-1-long = dilluns
+weekday-2-long = dimarts
+weekday-3-long = dimecres
+weekday-4-long = dijous
+weekday-5-long = divendres
+weekday-6-long = dissabte
+
+weekday-0-short = dg
+weekday-1-short = dl
+weekday-2-short = dt
+weekday-3-short = dc
+weekday-4-short = dj
+weekday-5-short = dv
+weekday-6-short = ds
+
+# Month names
+
+month-0-long  = gener
+month-1-long  = febrer
+month-2-long  = març
+month-3-long  = abril
+month-4-long  = maig
+month-5-long  = juny
+month-6-long  = juliol
+month-7-long  = agost
+month-8-long  = setembre
+month-9-long  = octubre
+month-10-long = novembre
+month-11-long = desembre
+
+month-0-genitive  = de gener
+month-1-genitive  = de febrer
+month-2-genitive  = de març
+month-3-genitive  = d'abril
+month-4-genitive  = de maig
+month-5-genitive  = de juny
+month-6-genitive  = de juliol
+month-7-genitive  = d'agost
+month-8-genitive  = de setembre
+month-9-genitive  = d'octubre
+month-10-genitive = de novembre
+month-11-genitive = de desembre
+
+month-0-short  = gen
+month-1-short  = febr
+month-2-short  = març
+month-3-short  = abr
+month-4-short  = maig
+month-5-short  = juny
+month-6-short  = jul
+month-7-short  = ag
+month-8-short  = set
+month-9-short  = oct
+month-10-short = nov
+month-11-short = des
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = ara
+minutes-ago-long[one]   = fa un minut
+minutes-ago-long[two]   = fa {{value}} minuts
+minutes-ago-long[few]   = fa {{value}} minuts
+minutes-ago-long[many]  = fa {{value}} minuts
+minutes-ago-long[other] = fa {{value}} minuts
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = ara
+hours-ago-long[one]   = fa una hora
+hours-ago-long[two]   = fa {{value}} hores
+hours-ago-long[few]   = fa {{value}} hores
+hours-ago-long[many]  = fa {{value}} hores
+hours-ago-long[other] = fa {{value}} hores
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = avui
+days-ago-long[one]   = ahir
+days-ago-long[two]   = fa {{value}} dies
+days-ago-long[few]   = fa {{value}} dies
+days-ago-long[many]  = fa {{value}} dies
+days-ago-long[other] = fa {{value}} dies
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = aquesta setmana
+weeks-ago-long[one]   = la setmana passada
+weeks-ago-long[two]   = fa {{value}} setmanes
+weeks-ago-long[few]   = fa {{value}} setmanes
+weeks-ago-long[many]  = fa {{value}} setmanes
+weeks-ago-long[other] = fa {{value}} setmanes
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = aquest mes
+months-ago-long[one]   = el mes passat
+months-ago-long[two]   = fa {{value}} mesos
+months-ago-long[few]   = fa {{value}} mesos
+months-ago-long[many]  = fa {{value}} mesos
+months-ago-long[other] = fa {{value}} mesos
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = enguany
+years-ago-long[one]   = l'any passat
+years-ago-long[two]   = fa {{value}} anys
+years-ago-long[few]   = fa {{value}} anys
+years-ago-long[many]  = fa {{value}} anys
+years-ago-long[other] = fa {{value}} anys
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = ara
+minutes-until-long[one]   = d'aquí un minut
+minutes-until-long[two]   = d'aquí {{value}} minuts
+minutes-until-long[few]   = d'aquí {{value}} minuts
+minutes-until-long[many]  = d'aquí {{value}} minuts
+minutes-until-long[other] = d'aquí {{value}} minuts
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = ara
+hours-until-long[one]   = d'aquí una hora
+hours-until-long[two]   = d'aquí {{value}} hores
+hours-until-long[few]   = d'aquí {{value}} hores
+hours-until-long[many]  = d'aquí {{value}} hores
+hours-until-long[other] = d'aquí {{value}} hores
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = avui
+days-until-long[one]   = demà
+days-until-long[two]   = d'aquí {{value}} dies
+days-until-long[few]   = d'aquí {{value}} dies
+days-until-long[many]  = d'aquí {{value}} dies
+days-until-long[other] = d'aquí {{value}} dies
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = aquesta setmana
+weeks-until-long[one]   = la setmana que ve
+weeks-until-long[two]   = d'aquí {{value}} setmanes
+weeks-until-long[few]   = d'aquí {{value}} setmanes
+weeks-until-long[many]  = d'aquí {{value}} setmanes
+weeks-until-long[other] = d'aquí {{value}} setmanes
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = aquest mes
+months-until-long[one]   = el mes que ve
+months-until-long[two]   = d'aquí {{value}} mesos
+months-until-long[few]   = d'aquí {{value}} mesos
+months-until-long[many]  = d'aquí {{value}} mesos
+months-until-long[other] = d'aquí {{value}} mesos
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = enguany
+years-until-long[one]   = l'any que ve
+years-until-long[two]   = d'aquí {{value}} anys
+years-until-long[few]   = d'aquí {{value}} anys
+years-until-long[many]  = d'aquí {{value}} anys
+years-until-long[other] = d'aquí {{value}} anys
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = ara
+minutes-ago-short[other] = fa {{value}} m
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = ara
+hours-ago-short[other] = fa {{value}} h
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = avui
+days-ago-short[other] = fa {{value}} d
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = ara
+minutes-until-short[other] = d'aquí {{value}} m
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = ara
+hours-until-short[other] = d'aquí {{value}} h
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = avui
+days-until-short[other] = d'aquí {{value}} d
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (data no vàlida)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a %e %Eb, %Y %H:%M:%S
+dateTimeFormat_%x = %d/%m/%Y
+dateTimeFormat_%X = %H:%M:%S
+
+shortTimeFormat = %H:%M
+shortDateTimeFormat = %x %H:%M
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 1
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = am
+time_pm = pm
diff --git a/www/firefoxos/locales/date.cs.properties b/www/firefoxos/locales/date.cs.properties
new file mode 100644
index 0000000..af994f7
--- /dev/null
+++ b/www/firefoxos/locales/date.cs.properties
@@ -0,0 +1,225 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = Neděle
+weekday-1-long = Pondělí
+weekday-2-long = Úterý
+weekday-3-long = Středa
+weekday-4-long = Čtvrtek
+weekday-5-long = Pátek
+weekday-6-long = Sobota
+
+weekday-0-short = Ne
+weekday-1-short = Po
+weekday-2-short = Út
+weekday-3-short = St
+weekday-4-short = Čt
+weekday-5-short = Pá
+weekday-6-short = So
+
+# Month names
+
+month-0-long = Leden
+month-1-long = Únor
+month-2-long = Březen
+month-3-long = Duben
+month-4-long = Květen
+month-5-long = Červen
+month-6-long = Červenec
+month-7-long = Srpen
+month-8-long = Září
+month-9-long = Říjen
+month-10-long = Listopad
+month-11-long = Prosinec
+
+month-0-genitive  = Leden
+month-1-genitive  = Únor
+month-2-genitive  = Březen
+month-3-genitive  = Duben
+month-4-genitive  = Květen
+month-5-genitive  = Červen
+month-6-genitive  = Červenec
+month-7-genitive  = Srpen
+month-8-genitive  = Září
+month-9-genitive  = Říjen
+month-10-genitive = Listopad
+month-11-genitive = Prosinec
+
+month-0-short = leden
+month-1-short = únor
+month-2-short = březen
+month-3-short = duben
+month-4-short = květen
+month-5-short = červen
+month-6-short = červenec
+month-7-short = srpen
+month-8-short = září
+month-9-short = říjen
+month-10-short = listopad
+month-11-short = prosinec
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero] = právě teď
+minutes-ago-long[one] = před minutou
+minutes-ago-long[two] = před 2 minutami
+minutes-ago-long[few] = před {{value}} minutami
+minutes-ago-long[many] = před {{value}} minutami
+minutes-ago-long[other] = před {{value}} minutami
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero] = právě teď
+hours-ago-long[one] = před hodinou
+hours-ago-long[two] = před 2 hodinami
+hours-ago-long[few] = před {{value}} hodinami
+hours-ago-long[many] = před {{value}} hodinami
+hours-ago-long[other] = před {{value}} hodinami
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero] = dnes
+days-ago-long[one] = včera
+days-ago-long[two] = předevčírem
+days-ago-long[few] = před {{value}} dny
+days-ago-long[many] = před {{value}} dny
+days-ago-long[other] = před {{value}} dny
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = tento týden
+weeks-ago-long[one]   = minutý týden
+weeks-ago-long[two]   = před {{value}} týdny
+weeks-ago-long[few]   = před {{value}} týdny
+weeks-ago-long[many]  = před {{value}} týdny
+weeks-ago-long[other] = před {{value}} týdny
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = tento měsíc
+months-ago-long[one]   = minulý měsíc
+months-ago-long[two]   = před {{value}} měsíci
+months-ago-long[few]   = před {{value}} měsíci
+months-ago-long[many]  = před {{value}} měsíci
+months-ago-long[other] = před {{value}} měsíci
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = tento rok
+years-ago-long[one]   = minulý rok
+years-ago-long[two]   = před {{value}} roky
+years-ago-long[few]   = před {{value}} roky
+years-ago-long[many]  = před {{value}} roky
+years-ago-long[other] = před {{value}} roky
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero] = nyní
+minutes-until-long[one] = za minutu
+minutes-until-long[two] = za 2 minuty
+minutes-until-long[few] = za {{value}} minuty
+minutes-until-long[many] = za {{value}} minut
+minutes-until-long[other] = za {{value}} minut
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero] = nyní
+hours-until-long[one] = za hodinu
+hours-until-long[two] = za 2 hodiny
+hours-until-long[few] = za {{value}} hodiny
+hours-until-long[many] = za {{value}} hodin
+hours-until-long[other] = za {{value}} hodin
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero] = dnes
+days-until-long[one] = zítra
+days-until-long[two] = pozítří
+days-until-long[few] = za {{value}} dny
+days-until-long[many] = za {{value}} dnů
+days-until-long[other] = za {{value}} dnů
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = tento týden
+weeks-until-long[one]   = příští týden
+weeks-until-long[two]   = za {{value}} týdny
+weeks-until-long[few]   = za {{value}} týdny
+weeks-until-long[many]  = za {{value}} týdnů
+weeks-until-long[other] = za {{value}} týdnů
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = tento měsíc
+months-until-long[one]   = příští měsíc
+months-until-long[two]   = za {{value}} měsíce
+months-until-long[few]   = za {{value}} měsíce
+months-until-long[many]  = za {{value}} měsíců
+months-until-long[other] = za {{value}} měsíců
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = tento rok
+years-until-long[one]   = příští rok
+years-until-long[two]   = za {{value}} roky
+years-until-long[few]   = za {{value}} roky
+years-until-long[many]  = za {{value}} roků
+years-until-long[other] = za {{value}} roků
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero] = právě teď
+minutes-ago-short[other] = před {{value}} min
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero] = právě teď
+hours-ago-short[other] = před {{value}} hod
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero] = dnes
+days-ago-short[other] = před {{value}} dny
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero] = nyní
+minutes-until-short[other] = za {{value}} min
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero] = nyní
+hours-until-short[other] = za {{value}} hod
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero] = dnes
+days-until-short[other] = za {{value}} dny
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate =(neplatné datum)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a %e. %b %Y %H:%M:%S
+dateTimeFormat_%x = %e. %m. %Y
+dateTimeFormat_%X = %H:%M:%S
+
+shortTimeFormat = %H:%M
+shortDateTimeFormat = %x %H:%M
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 1
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = AM
+time_pm = PM
diff --git a/www/firefoxos/locales/date.cy.properties b/www/firefoxos/locales/date.cy.properties
new file mode 100644
index 0000000..f440f75
--- /dev/null
+++ b/www/firefoxos/locales/date.cy.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = Dydd Sul
+weekday-1-long = Dydd Llun
+weekday-2-long = Dydd Mawrth
+weekday-3-long = Dydd Mercher
+weekday-4-long = Dydd Iau
+weekday-5-long = Dydd Gwener
+weekday-6-long = Dydd Sadwrn
+
+weekday-0-short = Sul
+weekday-1-short = Llu
+weekday-2-short = Maw
+weekday-3-short = Mer
+weekday-4-short = Iau
+weekday-5-short = Gwe
+weekday-6-short = Sad
+
+# Month names
+
+month-0-long  = Ionawr
+month-1-long  = Chwefror
+month-2-long  = Mawrth
+month-3-long  = Ebrill
+month-4-long  = Mai
+month-5-long  = Mehefin
+month-6-long  = Gorffennaf
+month-7-long  = Awst
+month-8-long  = Medi
+month-9-long  = Hydref
+month-10-long = Tachwedd
+month-11-long = Rhagfyr
+
+month-0-genitive  = Ionawr
+month-1-genitive  = Chwefror
+month-2-genitive  = Mawrth
+month-3-genitive  = Ebrill
+month-4-genitive  = Mai
+month-5-genitive  = Mehefin
+month-6-genitive  = Gorffennaf
+month-7-genitive  = Awst
+month-8-genitive  = Medi
+month-9-genitive  = Hydref
+month-10-genitive = Tachwedd
+month-11-genitive = Rhagfyr
+
+month-0-short  = Ion
+month-1-short  = Chw
+month-2-short  = Maw
+month-3-short  = Eb
+month-4-short  = Mai
+month-5-short  = Meh
+month-6-short  = Gor
+month-7-short  = Aws
+month-8-short  = Med
+month-9-short  = Hyd
+month-10-short = Tac
+month-11-short = Rhag
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = newydd fod
+minutes-ago-long[one]   = munud yn ôl
+minutes-ago-long[two]   = {{value}} munud yn ôl
+minutes-ago-long[few]   = {{value}} munud yn ôl
+minutes-ago-long[many]  = {{value}} munud yn ôl
+minutes-ago-long[other] = {{value}} munud yn ôl
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = newydd fod
+hours-ago-long[one]   = awr yn ôl
+hours-ago-long[two]   = {{value}} awr yn ôl
+hours-ago-long[few]   = {{value}} awr yn ôl
+hours-ago-long[many]  = {{value}} awr yn ôl
+hours-ago-long[other] = {{value}} awr yn ôl
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = heddiw
+days-ago-long[one]   = ddoe
+days-ago-long[two]   = {{value}} diwrnod yn ôl
+days-ago-long[few]   = {{value}} diwrnod yn ôl
+days-ago-long[many]  = {{value}} diwrnod yn ôl
+days-ago-long[other] = {{value}} diwrnod yn ôl
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = wythnos yma
+weeks-ago-long[one]   = wythnos diwethaf
+weeks-ago-long[two]   = {{value}} wythnos yn ôl
+weeks-ago-long[few]   = {{value}} wythnos yn ôl
+weeks-ago-long[many]  = {{value}} wythnos yn ôl
+weeks-ago-long[other] = {{value}} wythnos yn ôl
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = mis yma
+months-ago-long[one]   = mis diwethaf
+months-ago-long[two]   = {{value}} mis yn ôl
+months-ago-long[few]   = {{value}} mis yn ôl
+months-ago-long[many]  = {{value}} mis yn ôl
+months-ago-long[other] = {{value}} mis yn ôl
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = eleni
+years-ago-long[one]   = llynedd
+years-ago-long[two]   = {{value}} blwyddyn yn ôl
+years-ago-long[few]   = {{value}} blwyddyn yn ôl
+years-ago-long[many]  = {{value}} blwyddyn yn ôl
+years-ago-long[other] = {{value}} blwyddyn yn ôl
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = nawr
+minutes-until-long[one]   = mewn munud
+minutes-until-long[two]   = ymhen {{value}} munud
+minutes-until-long[few]   = ymhen {{value}} munud
+minutes-until-long[many]  = ymhen {{value}} munud
+minutes-until-long[other] = ymhen {{value}} munud
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = nawr
+hours-until-long[one]   = ymhen awr
+hours-until-long[two]   = ymhen {{value}} awr
+hours-until-long[few]   = ymhen {{value}} awr
+hours-until-long[many]  = ymhen {{value}} awr
+hours-until-long[other] = ymhen {{value}} awr
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = heddiw
+days-until-long[one]   = yfory
+days-until-long[two]   = ymhen {{value}} diwrnod
+days-until-long[few]   = ymhen {{value}} diwrnod
+days-until-long[many]  = ymhen {{value}} diwrnod
+days-until-long[other] = ymhen {{value}} diwrnod
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = wythnos yma
+weeks-until-long[one]   = wythnos nesaf
+weeks-until-long[two]   = ymhen {{value}} wythnos
+weeks-until-long[few]   = ymhen {{value}} wythnos
+weeks-until-long[many]  = ymhen {{value}} wythnos
+weeks-until-long[other] = ymhen {{value}} wythnos
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = mis yma
+months-until-long[one]   = mis nesaf
+months-until-long[two]   = ymhen {{value}} mis
+months-until-long[few]   = ymhen {{value}} mis
+months-until-long[many]  = ymhen {{value}} mis
+months-until-long[other] = ymhen {{value}} mis
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = eleni
+years-until-long[one]   = blwyddyn nesaf
+years-until-long[two]   = ymhen {{value}} blwyddyn
+years-until-long[few]   = ymhen {{value}} blwyddyn
+years-until-long[many]  = ymhen {{value}} blwyddyn
+years-until-long[other] = ymhen {{value}} blwyddyn
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = newydd fod
+minutes-ago-short[other] = {{value}}m yn ôl
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = newydd fod
+hours-ago-short[other] = {{value}}a yn ôl
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = heddiw
+days-ago-short[other] = {{value}}d yn ôl
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = nawr
+minutes-until-short[other] = ymhen {{value}}m
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = nawr
+hours-until-short[other] = ymhen {{value}}a
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = heddiw
+days-until-short[other] = ymhen {{value}}d
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (dyddiad anghywir)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a %b %e %Y %I:%M:%S %p
+dateTimeFormat_%x = %m/%d/%Y
+dateTimeFormat_%X = %I:%M:%S %p
+
+shortTimeFormat = %I:%M %p
+shortDateTimeFormat = %x %I:%M %p
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 0
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = AM
+time_pm = PM
diff --git a/www/firefoxos/locales/date.da.properties b/www/firefoxos/locales/date.da.properties
new file mode 100644
index 0000000..b6bc026
--- /dev/null
+++ b/www/firefoxos/locales/date.da.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = Søndag
+weekday-1-long = Mandag
+weekday-2-long = Tirsdag
+weekday-3-long = Onsdag
+weekday-4-long = Torsdag
+weekday-5-long = Fredag
+weekday-6-long = Lørdag
+
+weekday-0-short = Søn
+weekday-1-short = Man
+weekday-2-short = Tir
+weekday-3-short = Ons
+weekday-4-short = Tor
+weekday-5-short = Fre
+weekday-6-short = Lør
+
+# Month names
+
+month-0-long  = Januar
+month-1-long  = Februar
+month-2-long  = Marts
+month-3-long  = April
+month-4-long  = Maj
+month-5-long  = Juni
+month-6-long  = Juli
+month-7-long  = August
+month-8-long  = September
+month-9-long  = Oktober
+month-10-long = November
+month-11-long = December
+
+month-0-genitive  = januar
+month-1-genitive  = februar
+month-2-genitive  = marts
+month-3-genitive  = april
+month-4-genitive  = maj
+month-5-genitive  = juni
+month-6-genitive  = juli
+month-7-genitive  = august
+month-8-genitive  = september
+month-9-genitive  = oktober
+month-10-genitive = november
+month-11-genitive = december
+
+month-0-short  = Jan
+month-1-short  = Feb
+month-2-short  = Mar
+month-3-short  = Apr
+month-4-short  = Maj
+month-5-short  = Jun
+month-6-short  = Jul
+month-7-short  = Aug
+month-8-short  = Sep
+month-9-short  = Okt
+month-10-short = Nov
+month-11-short = Dec
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = nu
+minutes-ago-long[one]   = for et minut siden
+minutes-ago-long[two]   = for {{value}} minutter siden
+minutes-ago-long[few]   = for {{value}} minutter siden
+minutes-ago-long[many]  = for {{value}} minutter siden
+minutes-ago-long[other] = for {{value}} minutter siden
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = nu
+hours-ago-long[one]   = for en time siden
+hours-ago-long[two]   = for {{value}} timer siden
+hours-ago-long[few]   = for {{value}} timer siden
+hours-ago-long[many]  = for {{value}} timer siden
+hours-ago-long[other] = for {{value}} timer siden
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = i dag
+days-ago-long[one]   = i går
+days-ago-long[two]   = for {{value}} dage siden
+days-ago-long[few]   = for {{value}} dage siden
+days-ago-long[many]  = for {{value}} dage siden
+days-ago-long[other] = for {{value}} dage siden
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = denne uge
+weeks-ago-long[one]   = sidste uge
+weeks-ago-long[two]   = for {{value}} uger siden
+weeks-ago-long[few]   = for {{value}} uger siden
+weeks-ago-long[many]  = for {{value}} uger siden
+weeks-ago-long[other] = for {{value}} uger siden
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = denne måned
+months-ago-long[one]   = sidste måned
+months-ago-long[two]   = for {{value}} måneder siden
+months-ago-long[few]   = for {{value}} måneder siden
+months-ago-long[many]  = for {{value}} måneder siden
+months-ago-long[other] = for {{value}} måneder siden
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = dette år
+years-ago-long[one]   = sidste år
+years-ago-long[two]   = for {{value}} år siden
+years-ago-long[few]   = for {{value}} år siden
+years-ago-long[many]  = for {{value}} år siden
+years-ago-long[other] = for {{value}} år siden
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = nu
+minutes-until-long[one]   = om et minut
+minutes-until-long[two]   = om {{value}} minutter
+minutes-until-long[few]   = om {{value}} minutter
+minutes-until-long[many]  = om {{value}} minutter
+minutes-until-long[other] = om {{value}} minutter
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = nu
+hours-until-long[one]   = om en time
+hours-until-long[two]   = om {{value}} timer
+hours-until-long[few]   = om {{value}} timer
+hours-until-long[many]  = om {{value}} timer
+hours-until-long[other] = om {{value}} timer
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = i dag
+days-until-long[one]   = i morgen
+days-until-long[two]   = om {{value}} dage
+days-until-long[few]   = om {{value}} dage
+days-until-long[many]  = om {{value}} dage
+days-until-long[other] = om {{value}} dage
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = denne uge
+weeks-until-long[one]   = næste uge
+weeks-until-long[two]   = om {{value}} uger
+weeks-until-long[few]   = om {{value}} uger
+weeks-until-long[many]  = om {{value}} uger
+weeks-until-long[other] = om {{value}} uger
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = denne måned
+months-until-long[one]   = næste måned
+months-until-long[two]   = om {{value}} måneder
+months-until-long[few]   = om {{value}} måneder
+months-until-long[many]  = om {{value}} måneder
+months-until-long[other] = om {{value}} måneder
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = i år
+years-until-long[one]   = næste år
+years-until-long[two]   = om {{value}} år
+years-until-long[few]   = om {{value}} år
+years-until-long[many]  = om {{value}} år
+years-until-long[other] = om {{value}} år
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = nu
+minutes-ago-short[other] = {{value}}m siden
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = nu
+hours-ago-short[other] = {{value}}t siden
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = i dag
+days-ago-short[other] = {{value}}d siden
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = nu
+minutes-until-short[other] = om {{value}}m
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = nu
+hours-until-short[other] = om {{value}}t
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = i dag
+days-until-short[other] = om {{value}}d
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (forkert dato)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a d. %e. %b %Y %H:%M:%S
+dateTimeFormat_%x = %d-%m-%Y
+dateTimeFormat_%X = %H:%M:%S
+
+shortTimeFormat = %H:%M
+shortDateTimeFormat = %x %H:%M
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 1
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = AM
+time_pm = PM
diff --git a/www/firefoxos/locales/date.de.properties b/www/firefoxos/locales/date.de.properties
new file mode 100644
index 0000000..7c5adf2
--- /dev/null
+++ b/www/firefoxos/locales/date.de.properties
@@ -0,0 +1,259 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = Sonntag
+weekday-1-long = Montag
+weekday-2-long = Dienstag
+weekday-3-long = Mittwoch
+weekday-4-long = Donnerstag
+weekday-5-long = Freitag
+weekday-6-long = Samstag
+
+weekday-0-short = So
+weekday-1-short = Mo
+weekday-2-short = Di
+weekday-3-short = Mi
+weekday-4-short = Do
+weekday-5-short = Fr
+weekday-6-short = Sa
+
+# Month names
+
+month-0-long  = Januar
+month-1-long  = Februar
+month-2-long  = März
+month-3-long  = April
+month-4-long  = Mai
+month-5-long  = Juni
+month-6-long  = Juli
+month-7-long  = August
+month-8-long  = September
+month-9-long  = Oktober
+month-10-long = November
+month-11-long = Dezember
+
+month-0-genitive  = Januar
+month-1-genitive  = Februar
+month-2-genitive  = März
+month-3-genitive  = April
+month-4-genitive  = Mai
+month-5-genitive  = Juni
+month-6-genitive  = Juli
+month-7-genitive  = August
+month-8-genitive  = September
+month-9-genitive  = Oktober
+month-10-genitive = November
+month-11-genitive = Dezember
+
+month-0-short  = Jan
+month-1-short  = Feb
+month-2-short  = Mär
+month-3-short  = Apr
+month-4-short  = Mai
+month-5-short  = Jun
+month-6-short  = Jul
+month-7-short  = Aug
+month-8-short  = Sep
+month-9-short  = Okt
+month-10-short = Nov
+month-11-short = Dez
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = gerade eben
+minutes-ago-long[one]   = vor 1 Minute
+minutes-ago-long[two]   = vor {{value}} Minuten
+minutes-ago-long[few]   = vor {{value}} Minuten
+minutes-ago-long[many]  = vor {{value}} Minuten
+minutes-ago-long[other] = vor {{value}} Minuten
+
+hours-ago-long={[ plural(value) ]}
+# DE: NOTUSED
+hours-ago-long[zero]  = gerade eben
+hours-ago-long[one]   = vor 1 Stunde
+hours-ago-long[two]   = vor {{value}} Stunden
+hours-ago-long[few]   = vor {{value}} Stunden
+hours-ago-long[many]  = vor {{value}} Stunden
+hours-ago-long[other] = vor {{value}} Stunden
+
+days-ago-long={[ plural(value) ]}
+# DE: NOTUSED
+days-ago-long[zero]  = heute
+days-ago-long[one]   = gestern
+days-ago-long[two]   = vor {{value}} Tagen
+days-ago-long[few]   = vor {{value}} Tagen
+days-ago-long[many]  = vor {{value}} Tagen
+days-ago-long[other] = vor {{value}} Tagen
+
+weeks-ago-long={[ plural(value) ]}
+# DE: NOTUSED
+weeks-ago-long[zero]  = diese Woche
+weeks-ago-long[one]   = letzte Woche
+# DE: NOTUSED
+weeks-ago-long[two]   = vor {{value}} Wochen
+# DE: NOTUSED
+weeks-ago-long[few]   = vor {{value}} Wochen
+# DE: NOTUSED
+weeks-ago-long[many]  = vor {{value}} Wochen
+# DE: NOTUSED
+weeks-ago-long[other] = vor {{value}} Wochen
+
+months-ago-long={[ plural(value) ]}
+# DE: NOTUSED
+months-ago-long[zero]  = diesen Monat
+# DE: NOTUSED
+months-ago-long[one]   = letzten Monat
+# DE: NOTUSED
+months-ago-long[two]   = vor {{value}} Monaten
+# DE: NOTUSED
+months-ago-long[few]   = vor {{value}} Monaten
+# DE: NOTUSED
+months-ago-long[many]  = vor {{value}} Monaten
+# DE: NOTUSED
+months-ago-long[other] = vor {{value}} Monaten
+
+years-ago-long={[ plural(value) ]}
+# DE: NOTUSED
+years-ago-long[zero]  = dieses Jahr
+# DE: NOTUSED
+years-ago-long[one]   = letztes Jahr
+# DE: NOTUSED
+years-ago-long[two]   = vor {{value}} Jahren
+# DE: NOTUSED
+years-ago-long[few]   = vor {{value}} Jahren
+# DE: NOTUSED
+years-ago-long[many]  = vor {{value}} Jahren
+# DE: NOTUSED
+years-ago-long[other] = vor {{value}} Jahren
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = jetzt
+minutes-until-long[one]   = in 1 Minute
+minutes-until-long[two]   = in {{value}} Minuten
+minutes-until-long[few]   = in {{value}} Minuten
+minutes-until-long[many]  = in {{value}} Minuten
+minutes-until-long[other] = in {{value}} Minuten
+
+hours-until-long={[ plural(value) ]}
+# DE: NOTUSED
+hours-until-long[zero]  = jetzt
+hours-until-long[one]   = in einer Stunde
+hours-until-long[two]   = in {{value}} Stunden
+hours-until-long[few]   = in {{value}} Stunden
+hours-until-long[many]  = in {{value}} Stunden
+hours-until-long[other] = in {{value}} Stunden
+
+days-until-long={[ plural(value) ]}
+# DE: NOTUSED
+days-until-long[zero]  = heute
+days-until-long[one]   = morgen
+days-until-long[two]   = in {{value}} Tagen
+days-until-long[few]   = in {{value}} Tagen
+days-until-long[many]  = in {{value}} Tagen
+days-until-long[other] = in {{value}} Tagen
+
+weeks-until-long={[ plural(value) ]}
+# DE: NOTUSED
+weeks-until-long[zero]  = diese Woche
+weeks-until-long[one]   = nächste Woche
+weeks-until-long[two]   = in {{value}} Wochen
+weeks-until-long[few]   = in {{value}} Wochen
+# DE: NOTUSED
+weeks-until-long[many]  = in {{value}} Wochen
+# DE: NOTUSED
+weeks-until-long[other] = in {{value}} Wochen
+
+months-until-long={[ plural(value) ]}
+# DE: NOTUSED
+months-until-long[zero]  = diesen Monat
+months-until-long[one]   = nächsten Monat
+months-until-long[two]   = in {{value}} Monaten
+months-until-long[few]   = in {{value}} Monaten
+months-until-long[many]  = in {{value}} Monaten
+months-until-long[other] = in {{value}} Monaten
+
+years-until-long={[ plural(value) ]}
+# DE: NOTUSED
+years-until-long[zero]  = dieses Jahr
+years-until-long[one]   = nächstes Jahr
+years-until-long[two]   = in {{value}} Jahren
+years-until-long[few]   = in {{value}} Jahren
+years-until-long[many]  = in {{value}} Jahren
+years-until-long[other] = in {{value}} Jahren
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = jetzt
+# DE: "min" is too long for the last sync interval string of the E-Mail app
+minutes-ago-short[other] = vor {{value}} m
+
+hours-ago-short={[ plural(value) ]}
+# DE: NOTUSED
+hours-ago-short[zero]  = jetzt
+hours-ago-short[other] = vor {{value}} h
+
+days-ago-short={[ plural(value) ]}
+# DE: NOTUSED
+days-ago-short[zero]  = heute
+days-ago-short[other] = vor {{value}} d
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = jetzt
+minutes-until-short[other] = in {{value}} m
+
+hours-until-short={[ plural(value) ]}
+# DE: NOTUSED
+hours-until-short[zero]  = jetzt
+hours-until-short[other] = in {{value}} h
+
+days-until-short={[ plural(value) ]}
+# DE: NOTUSED
+days-until-short[zero]  = heute
+days-until-short[other] = in {{value}} d
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (ungültiges Datum)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a, %e. %b %Y %H:%M:%S
+dateTimeFormat_%x = %d.%m.%Y
+dateTimeFormat_%X = %H:%M:%S
+
+shortTimeFormat = %H:%M
+shortDateTimeFormat = %x %H:%M
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 1
+
+# Localize “AM" and "PM" used in %p format for time
+# DE: NOTUSED
+time_am = AM
+# DE: NOTUSED
+time_pm = PM
diff --git a/www/firefoxos/locales/date.el.properties b/www/firefoxos/locales/date.el.properties
new file mode 100644
index 0000000..83bb7b5
--- /dev/null
+++ b/www/firefoxos/locales/date.el.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = Κυριακή
+weekday-1-long = Δευτέρα
+weekday-2-long = Τρίτη
+weekday-3-long = Τετάρτη
+weekday-4-long = Πέμπτη
+weekday-5-long = Παρασκευή
+weekday-6-long = Σάββατο
+
+weekday-0-short = Κυρ
+weekday-1-short = Δευ
+weekday-2-short = Τρι
+weekday-3-short = Τετ
+weekday-4-short = Πεμ
+weekday-5-short = Παρ
+weekday-6-short = Σαβ
+
+# Month names
+
+month-0-long  = Ιανουάριος
+month-1-long  = Φεβρουάριος
+month-2-long  = Μάρτιος
+month-3-long  = Απρίλιος
+month-4-long  = Μάιος
+month-5-long  = Ιούνιος
+month-6-long  = Ιούλιος
+month-7-long  = Αύγουστος
+month-8-long  = Σεπτέμβριος
+month-9-long  = Οκτώβριος
+month-10-long = Νοέμβριος
+month-11-long = Δεκέμβριος
+
+month-0-genitive  = Ιανουαρίου
+month-1-genitive  = Φεβρουαρίου
+month-2-genitive  = Μαρτίου
+month-3-genitive  = Απριλίου
+month-4-genitive  = Μαΐου
+month-5-genitive  = Ιουνίου
+month-6-genitive  = Ιουλίου
+month-7-genitive  = Αυγούστου
+month-8-genitive  = Σεπτεμβρίου
+month-9-genitive  = Οκτωβρίου
+month-10-genitive = Νοεμβρίου
+month-11-genitive = Δεκεμβρίου
+
+month-0-short  = Ιαν
+month-1-short  = Φεβ
+month-2-short  = Μαρ
+month-3-short  = Απρ
+month-4-short  = Μάι
+month-5-short  = Ιουν
+month-6-short  = Ιουλ
+month-7-short  = Αυγ
+month-8-short  = Σεπ
+month-9-short  = Οκτ
+month-10-short = Νοε
+month-11-short = Δεκ
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = μόλις τώρα
+minutes-ago-long[one]   = πριν από ένα λεπτό
+minutes-ago-long[two]   = πριν από {{value}} λεπτά
+minutes-ago-long[few]   = πριν από {{value}} λεπτά
+minutes-ago-long[many]  = πριν από {{value}} λεπτά
+minutes-ago-long[other] = πριν από {{value}} λεπτά
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = μόλις τώρα
+hours-ago-long[one]   = πριν από μία ώρα
+hours-ago-long[two]   = πριν από {{value}} ώρες
+hours-ago-long[few]   = πριν από {{value}} ώρες
+hours-ago-long[many]  = πριν από {{value}} ώρες
+hours-ago-long[other] = πριν από {{value}} ώρες
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = σήμερα
+days-ago-long[one]   = χθες
+days-ago-long[two]   = πριν από {{value}} ημέρες
+days-ago-long[few]   = πριν από {{value}} ημέρες
+days-ago-long[many]  = πριν από {{value}} ημέρες
+days-ago-long[other] = πριν από {{value}} ημέρες
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = αυτή την εβδομάδα
+weeks-ago-long[one]   = την τελευταία εβδομάδα
+weeks-ago-long[two]   = πριν από {{value}} εβδομάδες
+weeks-ago-long[few]   = πριν από {{value}} εβδομάδες
+weeks-ago-long[many]  = πριν από {{value}} εβδομάδες
+weeks-ago-long[other] = πριν από {{value}} εβδομάδες
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = αυτό τον μήνα
+months-ago-long[one]   = τον τελευταίο μήνα
+months-ago-long[two]   = πριν από {{value}} μήνες
+months-ago-long[few]   = πριν από {{value}} μήνες
+months-ago-long[many]  = πριν από {{value}} μήνες
+months-ago-long[other] = πριν από {{value}} μήνες
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = αυτό το έτος
+years-ago-long[one]   = το περασμένο έτος
+years-ago-long[two]   = πριν από {{value}} χρόνια
+years-ago-long[few]   = πριν από {{value}} χρόνια
+years-ago-long[many]  = πριν από {{value}} χρόνια
+years-ago-long[other] = πριν από {{value}} χρόνια
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = τώρα
+minutes-until-long[one]   = σε ένα λεπτό
+minutes-until-long[two]   = σε {{value}} λεπτά
+minutes-until-long[few]   = σε {{value}} λεπτά
+minutes-until-long[many]  = σε {{value}} λεπτά
+minutes-until-long[other] = σε {{value}} λεπτά
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = τώρα
+hours-until-long[one]   = σε μία ώρα
+hours-until-long[two]   = σε {{value}} ώρες
+hours-until-long[few]   = σε {{value}} ώρες
+hours-until-long[many]  = σε {{value}} ώρες
+hours-until-long[other] = σε {{value}} ώρες
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = σήμερα
+days-until-long[one]   = αύριο
+days-until-long[two]   = σε {{value}} ημέρες
+days-until-long[few]   = σε {{value}} ημέρες
+days-until-long[many]  = σε {{value}} ημέρες
+days-until-long[other] = σε {{value}} ημέρες
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = αυτή την εβδομάδα
+weeks-until-long[one]   = την επόμενη εβδομάδα
+weeks-until-long[two]   = σε {{value}} εβδομάδες
+weeks-until-long[few]   = σε {{value}} εβδομάδες
+weeks-until-long[many]  = σε {{value}} εβδομάδες
+weeks-until-long[other] = σε {{value}} εβδομάδες
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = αυτό τον μήνα
+months-until-long[one]   = στον επόμενο μήνα
+months-until-long[two]   = σε {{value}} μήνες
+months-until-long[few]   = σε {{value}} μήνες
+months-until-long[many]  = σε {{value}} μήνες
+months-until-long[other] = σε {{value}} μήνες
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = αυτό το έτος
+years-until-long[one]   = επόμενο έτος
+years-until-long[two]   = σε {{value}} έτη
+years-until-long[few]   = σε {{value}} έτη
+years-until-long[many]  = σε {{value}} έτη
+years-until-long[other] = σε {{value}} έτη
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = τώρα
+minutes-ago-short[other] = πριν {{value}}′
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = τώρα
+hours-ago-short[other] = πριν {{value}} ώρ.
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = σήμερα
+days-ago-short[other] = πριν {{value}} ημ.
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = τώρα
+minutes-until-short[other] = σε {{value}}′
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = τώρα
+hours-until-short[other] = σε {{value}} ώρ.
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = σήμερα
+days-until-short[other] = σε {{value}} ημ.
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (λάθος ημερομηνία)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a, %e %Eb %Y, %H:%M:%S
+dateTimeFormat_%x = %d/%m/%Y
+dateTimeFormat_%X = %H:%M:%S
+
+shortTimeFormat = %H:%M
+shortDateTimeFormat = %x %H:%M
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 0
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = πμ
+time_pm = μμ
diff --git a/www/firefoxos/locales/date.en-GB.properties b/www/firefoxos/locales/date.en-GB.properties
new file mode 100644
index 0000000..499da96
--- /dev/null
+++ b/www/firefoxos/locales/date.en-GB.properties
@@ -0,0 +1,222 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = Sunday
+weekday-1-long = Monday
+weekday-2-long = Tuesday
+weekday-3-long = Wednesday
+weekday-4-long = Thursday
+weekday-5-long = Friday
+weekday-6-long = Saturday
+
+weekday-0-short = Sun
+weekday-1-short = Mon
+weekday-2-short = Tue
+weekday-3-short = Wed
+weekday-4-short = Thu
+weekday-5-short = Fri
+weekday-6-short = Sat
+
+# Month names
+
+month-0-long  = January
+month-1-long  = February
+month-2-long  = March
+month-3-long  = April
+month-4-long  = May
+month-5-long  = June
+month-6-long  = July
+month-7-long  = August
+month-8-long  = September
+month-9-long  = October
+month-10-long = November
+month-11-long = December
+
+month-0-genitive  = January
+month-1-genitive  = February
+month-2-genitive  = March
+month-3-genitive  = April
+month-4-genitive  = May
+month-5-genitive  = June
+month-6-genitive  = July
+month-7-genitive  = August
+month-8-genitive  = September
+month-9-genitive  = October
+month-10-genitive = November
+month-11-genitive = December
+
+month-0-short  = Jan
+month-1-short  = Feb
+month-2-short  = Mar
+month-3-short  = Apr
+month-4-short  = May
+month-5-short  = Jun
+month-6-short  = Jul
+month-7-short  = Aug
+month-8-short  = Sep
+month-9-short  = Oct
+month-10-short = Nov
+month-11-short = Dec
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = just now
+minutes-ago-long[one]   = a minute ago
+minutes-ago-long[two]   = {{value}} minutes ago
+minutes-ago-long[few]   = {{value}} minutes ago
+minutes-ago-long[many]  = {{value}} minutes ago
+minutes-ago-long[other] = {{value}} minutes ago
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = just now
+hours-ago-long[one]   = an hour ago
+hours-ago-long[two]   = {{value}} hours ago
+hours-ago-long[few]   = {{value}} hours ago
+hours-ago-long[many]  = {{value}} hours ago
+hours-ago-long[other] = {{value}} hours ago
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = today
+days-ago-long[one]   = yesterday
+days-ago-long[two]   = {{value}} days ago
+days-ago-long[few]   = {{value}} days ago
+days-ago-long[many]  = {{value}} days ago
+days-ago-long[other] = {{value}} days ago
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = this week
+weeks-ago-long[one]   = last week
+weeks-ago-long[two]   = {{value}} weeks ago
+weeks-ago-long[few]   = {{value}} weeks ago
+weeks-ago-long[many]  = {{value}} weeks ago
+weeks-ago-long[other] = {{value}} weeks ago
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = this month
+months-ago-long[one]   = last month
+months-ago-long[two]   = {{value}} months ago
+months-ago-long[few]   = {{value}} months ago
+months-ago-long[many]  = {{value}} months ago
+months-ago-long[other] = {{value}} months ago
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = this year
+years-ago-long[one]   = last year
+years-ago-long[two]   = {{value}} years ago
+years-ago-long[few]   = {{value}} years ago
+years-ago-long[many]  = {{value}} years ago
+years-ago-long[other] = {{value}} years ago
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = now
+minutes-until-long[one]   = in a minute
+minutes-until-long[two]   = in {{value}} minutes
+minutes-until-long[few]   = in {{value}} minutes
+minutes-until-long[many]  = in {{value}} minutes
+minutes-until-long[other] = in {{value}} minutes
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = now
+hours-until-long[one]   = in an hour
+hours-until-long[two]   = in {{value}} hours
+hours-until-long[few]   = in {{value}} hours
+hours-until-long[many]  = in {{value}} hours
+hours-until-long[other] = in {{value}} hours
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = today
+days-until-long[one]   = tomorrow
+days-until-long[two]   = in {{value}} days
+days-until-long[few]   = in {{value}} days
+days-until-long[many]  = in {{value}} days
+days-until-long[other] = in {{value}} days
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = this week
+weeks-until-long[one]   = next week
+weeks-until-long[two]   = in {{value}} weeks
+weeks-until-long[few]   = in {{value}} weeks
+weeks-until-long[many]  = in {{value}} weeks
+weeks-until-long[other] = in {{value}} weeks
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = this month
+months-until-long[one]   = next month
+months-until-long[two]   = in {{value}} months
+months-until-long[few]   = in {{value}} months
+months-until-long[many]  = in {{value}} months
+months-until-long[other] = in {{value}} months
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = this year
+years-until-long[one]   = next year
+years-until-long[two]   = in {{value}} years
+years-until-long[few]   = in {{value}} years
+years-until-long[many]  = in {{value}} years
+years-until-long[other] = in {{value}} years
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = just now
+minutes-ago-short[other] = {{value}}m ago
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = just now
+hours-ago-short[other] = {{value}}h ago
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = today
+days-ago-short[other] = {{value}}d ago
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = now
+minutes-until-short[other] = in {{value}}m
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = now
+hours-until-short[other] = in {{value}}h
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = today
+days-until-short[other] = in {{value}}d
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (incorrect date)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a %e %b %Y %I:%M:%S %p
+dateTimeFormat_%x = %d/%m/%Y
+dateTimeFormat_%X = %I:%M:%S %p
+
+shortTimeFormat = %I:%M %p
+shortDateTimeFormat = %x %I:%M %p
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 0
diff --git a/www/firefoxos/locales/date.en-US.properties b/www/firefoxos/locales/date.en-US.properties
new file mode 100644
index 0000000..233fbb2
--- /dev/null
+++ b/www/firefoxos/locales/date.en-US.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = Sunday
+weekday-1-long = Monday
+weekday-2-long = Tuesday
+weekday-3-long = Wednesday
+weekday-4-long = Thursday
+weekday-5-long = Friday
+weekday-6-long = Saturday
+
+weekday-0-short = Sun
+weekday-1-short = Mon
+weekday-2-short = Tue
+weekday-3-short = Wed
+weekday-4-short = Thu
+weekday-5-short = Fri
+weekday-6-short = Sat
+
+# Month names
+
+month-0-long  = January
+month-1-long  = February
+month-2-long  = March
+month-3-long  = April
+month-4-long  = May
+month-5-long  = June
+month-6-long  = July
+month-7-long  = August
+month-8-long  = September
+month-9-long  = October
+month-10-long = November
+month-11-long = December
+
+month-0-genitive  = January
+month-1-genitive  = February
+month-2-genitive  = March
+month-3-genitive  = April
+month-4-genitive  = May
+month-5-genitive  = June
+month-6-genitive  = July
+month-7-genitive  = August
+month-8-genitive  = September
+month-9-genitive  = October
+month-10-genitive = November
+month-11-genitive = December
+
+month-0-short  = Jan
+month-1-short  = Feb
+month-2-short  = Mar
+month-3-short  = Apr
+month-4-short  = May
+month-5-short  = Jun
+month-6-short  = Jul
+month-7-short  = Aug
+month-8-short  = Sep
+month-9-short  = Oct
+month-10-short = Nov
+month-11-short = Dec
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = just now
+minutes-ago-long[one]   = a minute ago
+minutes-ago-long[two]   = {{value}} minutes ago
+minutes-ago-long[few]   = {{value}} minutes ago
+minutes-ago-long[many]  = {{value}} minutes ago
+minutes-ago-long[other] = {{value}} minutes ago
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = just now
+hours-ago-long[one]   = an hour ago
+hours-ago-long[two]   = {{value}} hours ago
+hours-ago-long[few]   = {{value}} hours ago
+hours-ago-long[many]  = {{value}} hours ago
+hours-ago-long[other] = {{value}} hours ago
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = today
+days-ago-long[one]   = yesterday
+days-ago-long[two]   = {{value}} days ago
+days-ago-long[few]   = {{value}} days ago
+days-ago-long[many]  = {{value}} days ago
+days-ago-long[other] = {{value}} days ago
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = this week
+weeks-ago-long[one]   = last week
+weeks-ago-long[two]   = {{value}} weeks ago
+weeks-ago-long[few]   = {{value}} weeks ago
+weeks-ago-long[many]  = {{value}} weeks ago
+weeks-ago-long[other] = {{value}} weeks ago
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = this month
+months-ago-long[one]   = last month
+months-ago-long[two]   = {{value}} months ago
+months-ago-long[few]   = {{value}} months ago
+months-ago-long[many]  = {{value}} months ago
+months-ago-long[other] = {{value}} months ago
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = this year
+years-ago-long[one]   = last year
+years-ago-long[two]   = {{value}} years ago
+years-ago-long[few]   = {{value}} years ago
+years-ago-long[many]  = {{value}} years ago
+years-ago-long[other] = {{value}} years ago
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = now
+minutes-until-long[one]   = in a minute
+minutes-until-long[two]   = in {{value}} minutes
+minutes-until-long[few]   = in {{value}} minutes
+minutes-until-long[many]  = in {{value}} minutes
+minutes-until-long[other] = in {{value}} minutes
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = now
+hours-until-long[one]   = in an hour
+hours-until-long[two]   = in {{value}} hours
+hours-until-long[few]   = in {{value}} hours
+hours-until-long[many]  = in {{value}} hours
+hours-until-long[other] = in {{value}} hours
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = today
+days-until-long[one]   = tomorrow
+days-until-long[two]   = in {{value}} days
+days-until-long[few]   = in {{value}} days
+days-until-long[many]  = in {{value}} days
+days-until-long[other] = in {{value}} days
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = this week
+weeks-until-long[one]   = next week
+weeks-until-long[two]   = in {{value}} weeks
+weeks-until-long[few]   = in {{value}} weeks
+weeks-until-long[many]  = in {{value}} weeks
+weeks-until-long[other] = in {{value}} weeks
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = this month
+months-until-long[one]   = next month
+months-until-long[two]   = in {{value}} months
+months-until-long[few]   = in {{value}} months
+months-until-long[many]  = in {{value}} months
+months-until-long[other] = in {{value}} months
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = this year
+years-until-long[one]   = next year
+years-until-long[two]   = in {{value}} years
+years-until-long[few]   = in {{value}} years
+years-until-long[many]  = in {{value}} years
+years-until-long[other] = in {{value}} years
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = just now
+minutes-ago-short[other] = {{value}}m ago
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = just now
+hours-ago-short[other] = {{value}}h ago
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = today
+days-ago-short[other] = {{value}}d ago
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = now
+minutes-until-short[other] = in {{value}}m
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = now
+hours-until-short[other] = in {{value}}h
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = today
+days-until-short[other] = in {{value}}d
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (incorrect date)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a %b %e %Y %I:%M:%S %p
+dateTimeFormat_%x = %m/%d/%Y
+dateTimeFormat_%X = %I:%M:%S %p
+
+shortTimeFormat = %I:%M %p
+shortDateTimeFormat = %x %I:%M %p
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 0
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = AM
+time_pm = PM
diff --git a/www/firefoxos/locales/date.eo.properties b/www/firefoxos/locales/date.eo.properties
new file mode 100644
index 0000000..10545d8
--- /dev/null
+++ b/www/firefoxos/locales/date.eo.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = Dimanĉo
+weekday-1-long = Lundo
+weekday-2-long = Mardo
+weekday-3-long = Merkredo
+weekday-4-long = Ĵaŭdo
+weekday-5-long = Vendredo
+weekday-6-long = Sabato
+
+weekday-0-short = Dim
+weekday-1-short = Lun
+weekday-2-short = Mar
+weekday-3-short = Mer
+weekday-4-short = Ĵaŭ
+weekday-5-short = Ven
+weekday-6-short = Sab
+
+# Month names
+
+month-0-long  = Januaro
+month-1-long  = Februaro
+month-2-long  = Marto
+month-3-long  = Aprilo
+month-4-long  = Majo
+month-5-long  = Junio
+month-6-long  = Julio
+month-7-long  = Aŭgusto
+month-8-long  = Septembro
+month-9-long  = Oktobro
+month-10-long = Novembro
+month-11-long = Decembro
+
+month-0-genitive  = Januaro
+month-1-genitive  = Februaro
+month-2-genitive  = Marto
+month-3-genitive  = Aprilo
+month-4-genitive  = Maj
+month-5-genitive  = Junio
+month-6-genitive  = Julio
+month-7-genitive  = Aŭgusto
+month-8-genitive  = Septembro
+month-9-genitive  = Oktobro
+month-10-genitive = Novembro
+month-11-genitive = Decembro
+
+month-0-short  = Jan
+month-1-short  = Feb
+month-2-short  = Mar
+month-3-short  = Apr
+month-4-short  = Maj
+month-5-short  = Jun
+month-6-short  = Jul
+month-7-short  = Aŭg
+month-8-short  = Sep
+month-9-short  = Okt
+month-10-short = Nov
+month-11-short = Dec
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = ĵus
+minutes-ago-long[one]   = antaŭ minuto
+minutes-ago-long[two]   = antaŭ {{value}} minutoj
+minutes-ago-long[few]   = antaŭ {{value}} minutoj
+minutes-ago-long[many]  = antaŭ {{value}} minutoj
+minutes-ago-long[other] = antaŭ {{value}} minutoj
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = ĵus
+hours-ago-long[one]   = antaŭ horo
+hours-ago-long[two]   = antaŭ {{value}} horoj
+hours-ago-long[few]   = antaŭ {{value}} horoj
+hours-ago-long[many]  = antaŭ {{value}} horoj
+hours-ago-long[other] = antaŭ {{value}} horoj
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = hodiaŭ
+days-ago-long[one]   = hieraŭ
+days-ago-long[two]   = antaŭ {{value}} tagoj
+days-ago-long[few]   = antaŭ {{value}} tagoj
+days-ago-long[many]  = antaŭ {{value}} tagoj
+days-ago-long[other] = antaŭ {{value}} tagoj
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = tiu ĉi semajno
+weeks-ago-long[one]   = lasta semajno
+weeks-ago-long[two]   = antaŭ {{value}} semajnoj
+weeks-ago-long[few]   = antaŭ {{value}} semajnoj
+weeks-ago-long[many]  = antaŭ {{value}} semajnoj
+weeks-ago-long[other] = antaŭ {{value}} semajnoj
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = tiu ĉi monato
+months-ago-long[one]   = lasta monato
+months-ago-long[two]   = antaŭ {{value}} monatoj
+months-ago-long[few]   = antaŭ {{value}} monatoj
+months-ago-long[many]  = antaŭ {{value}} monatoj
+months-ago-long[other] = antaŭ {{value}} monatoj
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = tiu ĉi jaro
+years-ago-long[one]   = lasta jaro
+years-ago-long[two]   = antaŭ {{value}} jaroj
+years-ago-long[few]   = antaŭ {{value}} jaroj
+years-ago-long[many]  = antaŭ {{value}} jaroj
+years-ago-long[other] = antaŭ {{value}} jaroj
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = nun
+minutes-until-long[one]   = post minuto
+minutes-until-long[two]   = post {{value}} minutoj
+minutes-until-long[few]   = post {{value}} minutoj
+minutes-until-long[many]  = post {{value}} minutoj
+minutes-until-long[other] = post {{value}} minutoj
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = nun
+hours-until-long[one]   = post horo
+hours-until-long[two]   = post {{value}} horoj
+hours-until-long[few]   = post {{value}} horoj
+hours-until-long[many]  = post {{value}} horoj
+hours-until-long[other] = post {{value}} horoj
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = hodiaŭ
+days-until-long[one]   = morgaŭ
+days-until-long[two]   = post {{value}} tagoj
+days-until-long[few]   = post {{value}} tagoj
+days-until-long[many]  = post {{value}} tagoj
+days-until-long[other] = post {{value}} tagoj
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = tiu ĉi semajno
+weeks-until-long[one]   = venonta semajno
+weeks-until-long[two]   = post {{value}} semajnoj
+weeks-until-long[few]   = post {{value}} semajnoj
+weeks-until-long[many]  = post {{value}} semajnoj
+weeks-until-long[other] = post {{value}} semajnoj
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = tiu ĉi monato
+months-until-long[one]   = venonta monato
+months-until-long[two]   = post {{value}} monatoj
+months-until-long[few]   = post {{value}} monatoj
+months-until-long[many]  = post {{value}} monatoj
+months-until-long[other] = post {{value}} monatoj
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = tiu ĉi jaro
+years-until-long[one]   = venonta jaro
+years-until-long[two]   = post {{value}} jaroj
+years-until-long[few]   = post {{value}} jaroj
+years-until-long[many]  = post {{value}} jaroj
+years-until-long[other] = post {{value}} jaroj
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = ĵus
+minutes-ago-short[other] = antaŭ {{value}}m
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = ĵus
+hours-ago-short[other] = antaŭ {{value}}h
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = hodiaŭ
+days-ago-short[other] = antaŭ {{value}}t
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = nun
+minutes-until-short[other] = post {{value}}m
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = nun
+hours-until-short[other] = post {{value}}h
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = nun
+days-until-short[other] = post {{value}}t
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (malĝusta dato)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a %b %e %Y %H:%M:%S
+dateTimeFormat_%x = %Y.%m.%d
+dateTimeFormat_%X = %H:%M:%S
+
+shortTimeFormat = %H:%M
+shortDateTimeFormat = %x %H:%M
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 0
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = AM
+time_pm = PM
diff --git a/www/firefoxos/locales/date.es.properties b/www/firefoxos/locales/date.es.properties
new file mode 100644
index 0000000..3273a90
--- /dev/null
+++ b/www/firefoxos/locales/date.es.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = domingo
+weekday-1-long = lunes
+weekday-2-long = martes
+weekday-3-long = miércoles
+weekday-4-long = jueves
+weekday-5-long = viernes
+weekday-6-long = sábado
+
+weekday-0-short = do.
+weekday-1-short = lu.
+weekday-2-short = ma.
+weekday-3-short = mi.
+weekday-4-short = ju.
+weekday-5-short = vi.
+weekday-6-short = sá.
+
+# Month names
+
+month-0-long  = enero
+month-1-long  = febrero
+month-2-long  = marzo
+month-3-long  = abril
+month-4-long  = mayo
+month-5-long  = junio
+month-6-long  = julio
+month-7-long  = agosto
+month-8-long  = septiembre
+month-9-long  = octubre
+month-10-long = noviembre
+month-11-long = diciembre
+
+month-0-genitive  = enero
+month-1-genitive  = febrero
+month-2-genitive  = marzo
+month-3-genitive  = abril
+month-4-genitive  = mayo
+month-5-genitive  = junio
+month-6-genitive  = julio
+month-7-genitive  = agosto
+month-8-genitive  = septiembre
+month-9-genitive  = octubre
+month-10-genitive = noviembre
+month-11-genitive = diciembre
+
+month-0-short  = ene.
+month-1-short  = feb.
+month-2-short  = mar.
+month-3-short  = abr.
+month-4-short  = may.
+month-5-short  = jun.
+month-6-short  = jul.
+month-7-short  = ago.
+month-8-short  = sep.
+month-9-short  = oct.
+month-10-short = nov.
+month-11-short = dic.
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = ahora
+minutes-ago-long[one]   = hace un minuto
+minutes-ago-long[two]   = hace {{value}} minutos
+minutes-ago-long[few]   = hace {{value}} minutos
+minutes-ago-long[many]  = hace {{value}} minutos
+minutes-ago-long[other] = hace {{value}} minutos
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = ahora
+hours-ago-long[one]   = hace una hora
+hours-ago-long[two]   = hace {{value}} horas
+hours-ago-long[few]   = hace {{value}} horas
+hours-ago-long[many]  = hace {{value}} horas
+hours-ago-long[other] = hace {{value}} horas
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = hoy
+days-ago-long[one]   = ayer
+days-ago-long[two]   = hace {{value}} días
+days-ago-long[few]   = hace {{value}} días
+days-ago-long[many]  = hace {{value}} días
+days-ago-long[other] = hace {{value}} días
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = esta semana
+weeks-ago-long[one]   = la semana pasada
+weeks-ago-long[two]   = hace {{value}} semanas
+weeks-ago-long[few]   = hace {{value}} semanas
+weeks-ago-long[many]  = hace {{value}} semanas
+weeks-ago-long[other] = hace {{value}} semanas
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = este mes
+months-ago-long[one]   = el último mes
+months-ago-long[two]   = hace {{value}} meses
+months-ago-long[few]   = hace {{value}} meses
+months-ago-long[many]  = hace {{value}} meses
+months-ago-long[other] = hace {{value}} meses
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = este año
+years-ago-long[one]   = último año
+years-ago-long[two]   = hace {{value}} años
+years-ago-long[few]   = hace {{value}} años
+years-ago-long[many]  = hace {{value}} años
+years-ago-long[other] = hace {{value}} años
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = ahora
+minutes-until-long[one]   = en un minuto
+minutes-until-long[two]   = en {{value}} minutos
+minutes-until-long[few]   = en {{value}} minutos
+minutes-until-long[many]  = en {{value}} minutos
+minutes-until-long[other] = en {{value}} minutos
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = ahora
+hours-until-long[one]   = en una hora
+hours-until-long[two]   = en {{value}} horas
+hours-until-long[few]   = en {{value}} horas
+hours-until-long[many]  = en {{value}} horas
+hours-until-long[other] = en {{value}} horas
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = hoy
+days-until-long[one]   = mañana
+days-until-long[two]   = en {{value}} días
+days-until-long[few]   = en {{value}} días
+days-until-long[many]  = en {{value}} días
+days-until-long[other] = en {{value}} días
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = esta semana
+weeks-until-long[one]   = la próxima semana
+weeks-until-long[two]   = en {{value}} semanas
+weeks-until-long[few]   = en {{value}} semanas
+weeks-until-long[many]  = en {{value}} semanas
+weeks-until-long[other] = en {{value}} semanas
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = este mes
+months-until-long[one]   = próximo mes
+months-until-long[two]   = en {{value}} meses
+months-until-long[few]   = en {{value}} meses
+months-until-long[many]  = en {{value}} meses
+months-until-long[other] = en {{value}} meses
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = este año
+years-until-long[one]   = próximo año
+years-until-long[two]   = en {{value}} años
+years-until-long[few]   = en {{value}} años
+years-until-long[many]  = en {{value}} años
+years-until-long[other] = en {{value}} años
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = ahora
+minutes-ago-short[other] = hace {{value}} m
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = ahora
+hours-ago-short[other] = hace {{value}} h
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = hoy
+days-ago-short[other] = hace {{value}} d
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = ahora
+minutes-until-short[other] = en {{value}} m
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = ahora
+hours-until-short[other] = en {{value}} h
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = hoy
+days-until-short[other] = en {{value}} d
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (fecha incorrecta)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a, %e de %b, %Y %H:%M:%S
+dateTimeFormat_%x = %d/%m/%Y
+dateTimeFormat_%X = %H:%M:%S
+
+shortTimeFormat = %H:%M
+shortDateTimeFormat = %x %H:%M %p
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 1
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = AM
+time_pm = PM
diff --git a/www/firefoxos/locales/date.et.properties b/www/firefoxos/locales/date.et.properties
new file mode 100644
index 0000000..e233038
--- /dev/null
+++ b/www/firefoxos/locales/date.et.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = pühapäev
+weekday-1-long = esmaspäev
+weekday-2-long = teisipäev
+weekday-3-long = kolmapäev
+weekday-4-long = neljapäev
+weekday-5-long = reede
+weekday-6-long = laupäev
+
+weekday-0-short = P
+weekday-1-short = E
+weekday-2-short = T
+weekday-3-short = K
+weekday-4-short = N
+weekday-5-short = R
+weekday-6-short = L
+
+# Month names
+
+month-0-long  = jaanuar
+month-1-long  = veebruar
+month-2-long  = märts
+month-3-long  = aprill
+month-4-long  = mai
+month-5-long  = juuni
+month-6-long  = juuli
+month-7-long  = august
+month-8-long  = september
+month-9-long  = oktoober
+month-10-long = november
+month-11-long = detsember
+
+month-0-genitive  = jaanuari
+month-1-genitive  = veebruari
+month-2-genitive  = märtsi
+month-3-genitive  = aprilli
+month-4-genitive  = mai
+month-5-genitive  = juuni
+month-6-genitive  = juuli
+month-7-genitive  = augusti
+month-8-genitive  = septembri
+month-9-genitive  = oktoobri
+month-10-genitive = novembri
+month-11-genitive = detsembri
+
+month-0-short  = jaan
+month-1-short  = veebr
+month-2-short  = märts
+month-3-short  = apr
+month-4-short  = mai
+month-5-short  = juun
+month-6-short  = juul
+month-7-short  = aug
+month-8-short  = sept
+month-9-short  = okt
+month-10-short = nov
+month-11-short = dets
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = äsja
+minutes-ago-long[one]   = minut tagasi
+minutes-ago-long[two]   = {{value}} minutit tagasi
+minutes-ago-long[few]   = {{value}} minutit tagasi
+minutes-ago-long[many]  = {{value}} minutit tagasi
+minutes-ago-long[other] = {{value}} minutit tagasi
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = äsja
+hours-ago-long[one]   = tund tagasi
+hours-ago-long[two]   = {{value}} tundi tagasi
+hours-ago-long[few]   = {{value}} tundi tagasi
+hours-ago-long[many]  = {{value}} tundi tagasi
+hours-ago-long[other] = {{value}} tundi tagasi
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = täna
+days-ago-long[one]   = eile
+days-ago-long[two]   = {{value}} päeva tagasi
+days-ago-long[few]   = {{value}} päeva tagasi
+days-ago-long[many]  = {{value}} päeva tagasi
+days-ago-long[other] = {{value}} päeva tagasi
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = sel nädalal
+weeks-ago-long[one]   = eelmisel nädalal
+weeks-ago-long[two]   = {{value}} nädalat tagasi
+weeks-ago-long[few]   = {{value}} nädalat tagasi
+weeks-ago-long[many]  = {{value}} nädalat tagasi
+weeks-ago-long[other] = {{value}} nädalat tagasi
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = sel kuul
+months-ago-long[one]   = eelmisel kuul
+months-ago-long[two]   = {{value}} kuud tagasi
+months-ago-long[few]   = {{value}} kuud tagasi
+months-ago-long[many]  = {{value}} kuud tagasi
+months-ago-long[other] = {{value}} kuud tagasi
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = sel aastal
+years-ago-long[one]   = eelmisel aastal
+years-ago-long[two]   = {{value}} aastat tagasi
+years-ago-long[few]   = {{value}} aastat tagasi
+years-ago-long[many]  = {{value}} aastat tagasi
+years-ago-long[other] = {{value}} aastat tagasi
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = kohe
+minutes-until-long[one]   = minuti aja pärast
+minutes-until-long[two]   = {{value}} minuti pärast
+minutes-until-long[few]   = {{value}} minuti pärast
+minutes-until-long[many]  = {{value}} minuti pärast
+minutes-until-long[other] = {{value}} minuti pärast
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = kohe
+hours-until-long[one]   = tunni aja pärast
+hours-until-long[two]   = {{value}} tunni pärast
+hours-until-long[few]   = {{value}} tunni pärast
+hours-until-long[many]  = {{value}} tunni pärast
+hours-until-long[other] = {{value}} tunni pärast
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = täna
+days-until-long[one]   = homme
+days-until-long[two]   = {{value}} päeva pärast
+days-until-long[few]   = {{value}} päeva pärast
+days-until-long[many]  = {{value}} päeva pärast
+days-until-long[other] = {{value}} päeva pärast
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = sel nädalal
+weeks-until-long[one]   = järgmisel nädalal
+weeks-until-long[two]   = {{value}} nädala pärast
+weeks-until-long[few]   = {{value}} nädala pärast
+weeks-until-long[many]  = {{value}} nädala pärast
+weeks-until-long[other] = {{value}} nädala pärast
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = sel kuul
+months-until-long[one]   = järgmisel kuul
+months-until-long[two]   = {{value}} kuu pärast
+months-until-long[few]   = {{value}} kuu pärast
+months-until-long[many]  = {{value}} kuu pärast
+months-until-long[other] = {{value}} kuu pärast
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = sel aastal
+years-until-long[one]   = järgmisel aastal
+years-until-long[two]   = {{value}} aasta pärast
+years-until-long[few]   = {{value}} aasta pärast
+years-until-long[many]  = {{value}} aasta pärast
+years-until-long[other] = {{value}} aasta pärast
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = äsja
+minutes-ago-short[other] = {{value}}m tagasi
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = äsja
+hours-ago-short[other] = {{value}}t tagasi
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = täna
+days-ago-short[other] = {{value}}p tagasi
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = kohe
+minutes-until-short[other] = {{value}}m pärast
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = kohe
+hours-until-short[other] = {{value}}t pärast
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = täna
+days-until-short[other] = {{value}}p pärast
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (vigane kuupäev)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %A, %e. %B %Y %H:%M:%S
+dateTimeFormat_%x = %d.%m.%Y
+dateTimeFormat_%X = %H:%M:%S
+
+shortTimeFormat = %H:%M
+shortDateTimeFormat = %x %H:%M
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 1
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = e.l.
+time_pm = p.l.
diff --git a/www/firefoxos/locales/date.eu.properties b/www/firefoxos/locales/date.eu.properties
new file mode 100644
index 0000000..b3104f2
--- /dev/null
+++ b/www/firefoxos/locales/date.eu.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = igandea
+weekday-1-long = astelehena
+weekday-2-long = asteartea
+weekday-3-long = asteazkena
+weekday-4-long = osteguna
+weekday-5-long = ostirala
+weekday-6-long = larunbata
+
+weekday-0-short = ig.
+weekday-1-short = al.
+weekday-2-short = ar.
+weekday-3-short = az.
+weekday-4-short = og.
+weekday-5-short = or.
+weekday-6-short = lr.
+
+# Month names
+
+month-0-long  = urtarrila
+month-1-long  = otsaila
+month-2-long  = martxoa
+month-3-long  = apirila
+month-4-long  = maiatza
+month-5-long  = ekaina
+month-6-long  = uztaila
+month-7-long  = abuztua
+month-8-long  = iraila
+month-9-long  = urria
+month-10-long = azaroa
+month-11-long = abendua
+
+month-0-genitive  = urtarrila
+month-1-genitive  = otsaila
+month-2-genitive  = martxoa
+month-3-genitive  = apirila
+month-4-genitive  = maiatza
+month-5-genitive  = ekaina
+month-6-genitive  = uztaila
+month-7-genitive  = abuztua
+month-8-genitive  = iraila
+month-9-genitive  = urria
+month-10-genitive = azaroa
+month-11-genitive = abendua
+
+month-0-short  = urt
+month-1-short  = ots
+month-2-short  = mar
+month-3-short  = api
+month-4-short  = mai
+month-5-short  = eka
+month-6-short  = uzt
+month-7-short  = abu
+month-8-short  = ira
+month-9-short  = urr
+month-10-short = aza
+month-11-short = abe
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = orain
+minutes-ago-long[one]   = duela minutu bat
+minutes-ago-long[two]   = duela {{value}} minutu
+minutes-ago-long[few]   = duela {{value}} minutu
+minutes-ago-long[many]  = duela {{value}} minutu
+minutes-ago-long[other] = duela {{value}} minutu
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = orain
+hours-ago-long[one]   = duela ordubete
+hours-ago-long[two]   = duela {{value}} ordu
+hours-ago-long[few]   = duela {{value}} ordu
+hours-ago-long[many]  = duela {{value}} ordu
+hours-ago-long[other] = duela {{value}} ordu
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = gaur
+days-ago-long[one]   = atzo
+days-ago-long[two]   = herenegun
+days-ago-long[few]   = duela {{value}} egun
+days-ago-long[many]  = duela {{value}} egun
+days-ago-long[other] = duela {{value}} egun
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = aste honetan
+weeks-ago-long[one]   = azken astean
+weeks-ago-long[two]   = duela {{value}} aste
+weeks-ago-long[few]   = duela {{value}} aste
+weeks-ago-long[many]  = duela {{value}} aste
+weeks-ago-long[other] = duela {{value}} aste
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = hilabete honetan
+months-ago-long[one]   = azken hilabetean
+months-ago-long[two]   = duela {{value}} hilabete
+months-ago-long[few]   = duela {{value}} hilabete
+months-ago-long[many]  = duela {{value}} hilabete
+months-ago-long[other] = duela {{value}} hilabete
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = aurten
+years-ago-long[one]   = iaz
+years-ago-long[two]   = duela {{value}} urte
+years-ago-long[few]   = duela {{value}} urte
+years-ago-long[many]  = duela {{value}} urte
+years-ago-long[other] = duela {{value}} urte
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = orain
+minutes-until-long[one]   = minutu barru
+minutes-until-long[two]   = {{value}} minutu barru
+minutes-until-long[few]   = {{value}} minutu barru
+minutes-until-long[many]  = {{value}} minutu barru
+minutes-until-long[other] = {{value}} minutu barru
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = orain
+hours-until-long[one]   = ordubete barru
+hours-until-long[two]   = {{value}} ordu barru
+hours-until-long[few]   = {{value}} ordu barru
+hours-until-long[many]  = {{value}} ordu barru
+hours-until-long[other] = {{value}} ordu barru
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = gaur
+days-until-long[one]   = bihar
+days-until-long[two]   = etzi
+days-until-long[few]   = {{value}} egun barru
+days-until-long[many]  = {{value}} egun barru
+days-until-long[other] = {{value}} egun barru
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = aste honetan
+weeks-until-long[one]   = hurrengo astean
+weeks-until-long[two]   = {{value}} aste barru
+weeks-until-long[few]   = {{value}} aste barru
+weeks-until-long[many]  = {{value}} aste barru
+weeks-until-long[other] = {{value}} aste barru
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = hil honetan
+months-until-long[one]   = hurrengo hilean
+months-until-long[two]   = {{value}} hilabete barru
+months-until-long[few]   = {{value}} hilabete barru
+months-until-long[many]  = {{value}} hilabete barru
+months-until-long[other] = {{value}} hilabete barru
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = aurten
+years-until-long[one]   = hurrengo urtean
+years-until-long[two]   = {{value}} urte barru
+years-until-long[few]   = {{value}} urte barru
+years-until-long[many]  = {{value}} urte barru
+years-until-long[other] = {{value}} urte barru
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = orain
+minutes-ago-short[other] = duela {{value}}m
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = orain
+hours-ago-short[other] = duela {{value}}h
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = gaur
+days-ago-short[other] = duela {{value}}eg.
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = orain
+minutes-until-short[other] = {{value}}m barru
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = orain
+hours-until-short[other] = {{value}}h barru
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = gaur
+days-until-short[other] = {{value}}eg. barru
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (data okerra)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a, %Y.eko %Bren %ea %H:%M:%S
+dateTimeFormat_%x = %Y/%m/%d
+dateTimeFormat_%X = %H:%M:%S
+
+shortTimeFormat = %H:%M
+shortDateTimeFormat = %x %H:%M
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 1
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = AM
+time_pm = PM
diff --git a/www/firefoxos/locales/date.ff.properties b/www/firefoxos/locales/date.ff.properties
new file mode 100644
index 0000000..69fafc7
--- /dev/null
+++ b/www/firefoxos/locales/date.ff.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = Dewo
+weekday-1-long = Aaɓnde
+weekday-2-long = Mawbaare
+weekday-3-long = Njeslaare
+weekday-4-long = Naasaande
+weekday-5-long = Mawnde
+weekday-6-long = Hoore-biir
+
+weekday-0-short = Dew
+weekday-1-short = Aaɓ
+weekday-2-short = Maw
+weekday-3-short = Nje
+weekday-4-short = Naa
+weekday-5-short = Mde
+weekday-6-short = Hoo
+
+# Month names
+
+month-0-long  = Siilo
+month-1-long  = Colte
+month-2-long  = Mbooy
+month-3-long  = Seeɗto
+month-4-long  = Duujal
+month-5-long  = Korse
+month-6-long  = Morso
+month-7-long  = Juko
+month-8-long  = Siilto
+month-9-long  = Yarkomaa
+month-10-long = Jolal
+month-11-long = Bowte
+
+month-0-genitive  = Siilo
+month-1-genitive  = Colte
+month-2-genitive  = Mbooy
+month-3-genitive  = Seeɗto
+month-4-genitive  = Duu
+month-5-genitive  = Korse
+month-6-genitive  = Morso
+month-7-genitive  = Juko
+month-8-genitive  = Siilto
+month-9-genitive  = Yarkomaa
+month-10-genitive = Jolal
+month-11-genitive = Bowte
+
+month-0-short  = Sii
+month-1-short  = Col
+month-2-short  = Mbo
+month-3-short  = See
+month-4-short  = Duu
+month-5-short  = Kor
+month-6-short  = Mor
+month-7-short  = Juk
+month-8-short  = Sto
+month-9-short  = Yar
+month-10-short = Jol
+month-11-short = Bow
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = jooni-jooni
+minutes-ago-long[one]   = waɗi hojom
+minutes-ago-long[two]   = waɗii hojomaaji {{value}}
+minutes-ago-long[few]   = waɗii hojomaaji {{value}}
+minutes-ago-long[many]  = waɗii hojomaaji {{value}}
+minutes-ago-long[other] = waɗii hojomaaji {{value}}
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = jooni-jooni
+hours-ago-long[one]   = waɗii waktu
+hours-ago-long[two]   = waɗii waktuuji {{value}}
+hours-ago-long[few]   = waɗii waktuuji {{value}}
+hours-ago-long[many]  = waɗii waktuuji {{value}}
+hours-ago-long[other] = waɗii waktuuji {{value}}
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = hannde
+days-ago-long[one]   = haŋki
+days-ago-long[two]   = waɗii balɗe {{value}}
+days-ago-long[few]   = waɗii balɗe {{value}}
+days-ago-long[many]  = waɗii balɗe {{value}}
+days-ago-long[other] = waɗii balɗe {{value}}
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = ndee yontere
+weeks-ago-long[one]   = yontere ɓennunde
+weeks-ago-long[two]   = waɗii jonte {{value}}
+weeks-ago-long[few]   = waɗii jonte {{value}}
+weeks-ago-long[many]  = waɗii jonte {{value}}
+weeks-ago-long[other] = waɗii jonte {{value}}
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = nduu lewru
+months-ago-long[one]   = lewru ɓennundu
+months-ago-long[two]   = waɗii lebbi {{value}}
+months-ago-long[few]   = waɗii lebbi {{value}}
+months-ago-long[many]  = waɗii lebbi {{value}}
+months-ago-long[other] = waɗii lebbi {{value}}
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = ndee hitaande
+years-ago-long[one]   = hitaande ɓennunde
+years-ago-long[two]   = waɗii duuɓi {{value}}
+years-ago-long[few]   = waɗii duuɓi {{value}}
+years-ago-long[many]  = waɗii duuɓi {{value}}
+years-ago-long[other] = waɗii duuɓi {{value}}
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = jooni
+minutes-until-long[one]   = hoƴom gooto
+minutes-until-long[two]   = ɗoo e hojomaaji {{value}}
+minutes-until-long[few]   = ɗoo e hojomaaji {{value}}
+minutes-until-long[many]  = ɗoo e hojomaaji {{value}}
+minutes-until-long[other] = ɗoo e hojomaaji {{value}}
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = jooni
+hours-until-long[one]   = ɗoo e waktu
+hours-until-long[two]   = ɗoo e waktuuji {{value}}
+hours-until-long[few]   = ɗoo e waktuuji {{value}}
+hours-until-long[many]  = ɗoo e waktuuji {{value}}
+hours-until-long[other] = ɗoo e waktuuji {{value}}
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = hannde
+days-until-long[one]   = janngo
+days-until-long[two]   = ɗoo e balɗe {{value}}
+days-until-long[few]   = ɗoo e balɗe {{value}}
+days-until-long[many]  = ɗoo e balɗe {{value}}
+days-until-long[other] = ɗoo e balɗe {{value}}
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = ndee yontere
+weeks-until-long[one]   = yontere aroore
+weeks-until-long[two]   = ɗoo e jonte {{value}}
+weeks-until-long[few]   = ɗoo e jonte {{value}}
+weeks-until-long[many]  = ɗoo e jonte {{value}}
+weeks-until-long[other] = ɗoo e jonte {{value}}
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = nduu lewru
+months-until-long[one]   = lewru arooru
+months-until-long[two]   = ɗoo e lebbi {{value}}
+months-until-long[few]   = ɗoo e lebbi {{value}}
+months-until-long[many]  = ɗoo e lebbi {{value}}
+months-until-long[other] = ɗoo e lebbi {{value}}
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = ndee hitaande
+years-until-long[one]   = hitaande aroore
+years-until-long[two]   = ɗoo e duuɓi {{value}}
+years-until-long[few]   = ɗoo e duuɓi {{value}}
+years-until-long[many]  = ɗoo e duuɓi {{value}}
+years-until-long[other] = ɗoo e duuɓi {{value}}
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = jooni-jooni
+minutes-ago-short[other] = waɗii h{{value}}
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = jooni-jooni
+hours-ago-short[other] = waɗii w{{value}}
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = hannde
+days-ago-short[other] = waɗii ñ{{value}}
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = jooni
+minutes-until-short[other] = ɗoo e h{{value}}
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = jooni
+hours-until-short[other] = ɗoo e w{{value}}
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = hannde
+days-until-short[other] = ɗoo e b{{value}}
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (ñalngu feewaani)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a %e %b %Y %H:%M:%S
+dateTimeFormat_%x = %d/%m/%Y
+dateTimeFormat_%X = %H:%M:%S
+
+shortTimeFormat = %H:%M
+shortDateTimeFormat = %x %H:%M
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 0
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = AM
+time_pm = PM
diff --git a/www/firefoxos/locales/date.fr.properties b/www/firefoxos/locales/date.fr.properties
new file mode 100644
index 0000000..677e6ad
--- /dev/null
+++ b/www/firefoxos/locales/date.fr.properties
@@ -0,0 +1,225 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = Dimanche
+weekday-1-long = Lundi
+weekday-2-long = Mardi
+weekday-3-long = Mercredi
+weekday-4-long = Jeudi
+weekday-5-long = Vendredi
+weekday-6-long = Samedi
+
+weekday-0-short = dim
+weekday-1-short = lun
+weekday-2-short = mar
+weekday-3-short = mer
+weekday-4-short = jeu
+weekday-5-short = ven
+weekday-6-short = sam
+
+# Month names
+
+month-0-long  = Janvier
+month-1-long  = Février
+month-2-long  = Mars
+month-3-long  = Avril
+month-4-long  = Mai
+month-5-long  = Juin
+month-6-long  = Juillet
+month-7-long  = Août
+month-8-long  = Septembre
+month-9-long  = Octobre
+month-10-long = Novembre
+month-11-long = Décembre
+
+month-0-genitive  = janvier
+month-1-genitive  = février
+month-2-genitive  = mars
+month-3-genitive  = avril
+month-4-genitive  = mai
+month-5-genitive  = juin
+month-6-genitive  = juillet
+month-7-genitive  = août
+month-8-genitive  = septembre
+month-9-genitive  = octobre
+month-10-genitive = novembre
+month-11-genitive = décembre
+
+month-0-short  = jan.
+month-1-short  = fév.
+month-2-short  = mars
+month-3-short  = avr.
+month-4-short  = mai
+month-5-short  = juin
+month-6-short  = juil.
+month-7-short  = août
+month-8-short  = sep.
+month-9-short  = oct.
+month-10-short = nov.
+month-11-short = déc.
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = à l’instant
+minutes-ago-long[one]   = il y a {{value}} minute
+minutes-ago-long[two]   = il y a {{value}} minutes
+minutes-ago-long[few]   = il y a {{value}} minutes
+minutes-ago-long[many]  = il y a {{value}} minutes
+minutes-ago-long[other] = il y a {{value}} minutes
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = à l’instant
+hours-ago-long[one]   = il y a {{value}} heure
+hours-ago-long[two]   = il y a {{value}} heures
+hours-ago-long[few]   = il y a {{value}} heures
+hours-ago-long[many]  = il y a {{value}} heures
+hours-ago-long[other] = il y a {{value}} heures
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = aujourd’hui
+days-ago-long[one]   = hier
+days-ago-long[two]   = il y a {{value}} jours
+days-ago-long[few]   = il y a {{value}} jours
+days-ago-long[many]  = il y a {{value}} jours
+days-ago-long[other] = il y a {{value}} jours
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = cette semaine
+weeks-ago-long[one]   = la semaine dernière
+weeks-ago-long[two]   = il y a {{value}} semaines
+weeks-ago-long[few]   = il y a {{value}} semaines
+weeks-ago-long[many]  = il y a {{value}} semaines
+weeks-ago-long[other] = il y a {{value}} semaines
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = ce mois-ci
+months-ago-long[one]   = le mois dernier
+months-ago-long[two]   = il y a {{value}} mois
+months-ago-long[few]   = il y a {{value}} mois
+months-ago-long[many]  = il y a {{value}} mois
+months-ago-long[other] = il y a {{value}} mois
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = cette année
+years-ago-long[one]   = l’année dernière
+years-ago-long[two]   = il y a {{value}} ans
+years-ago-long[few]   = il y a {{value}} ans
+years-ago-long[many]  = il y a {{value}} ans
+years-ago-long[other] = il y a {{value}} ans
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = maintenant
+minutes-until-long[one]   = dans {{value}} minute
+minutes-until-long[two]   = dans {{value}} minutes
+minutes-until-long[few]   = dans {{value}} minutes
+minutes-until-long[many]  = dans {{value}} minutes
+minutes-until-long[other] = dans {{value}} minutes
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = maintenant
+hours-until-long[one]   = dans {{value}} heure
+hours-until-long[two]   = dans {{value}} heures
+hours-until-long[few]   = dans {{value}} heures
+hours-until-long[many]  = dans {{value}} heures
+hours-until-long[other] = dans {{value}} heures
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = aujourd’hui
+days-until-long[one]   = demain
+days-until-long[two]   = dans {{value}} jours
+days-until-long[few]   = dans {{value}} jours
+days-until-long[many]  = dans {{value}} jours
+days-until-long[other] = dans {{value}} jours
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = cette semaine
+weeks-until-long[one]   = la semaine prochaine
+weeks-until-long[two]   = dans {{value}} semaines
+weeks-until-long[few]   = dans {{value}} semaines
+weeks-until-long[many]  = dans {{value}} semaines
+weeks-until-long[other] = dans {{value}} semaines
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = ce mois-ci
+months-until-long[one]   = le mois prochain
+months-until-long[two]   = dans {{value}} mois
+months-until-long[few]   = dans {{value}} mois
+months-until-long[many]  = dans {{value}} mois
+months-until-long[other] = dans {{value}} mois
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = cette année
+years-until-long[one]   = l’année prochaine
+years-until-long[two]   = dans {{value}} ans
+years-until-long[few]   = dans {{value}} ans
+years-until-long[many]  = dans {{value}} ans
+years-until-long[other] = dans {{value}} ans
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ -ago ≠ 35 feet -ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = à l’instant
+minutes-ago-short[other] = il y a {{value}} min
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = à l’instant
+hours-ago-short[other] = il y a {{value}}h
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = aujourd’hui
+days-ago-short[other] = il y a {{value}}j
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = maintenant
+minutes-until-short[other] = dans {{value}}m
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = maintenant
+hours-until-short[other] = dans {{value}}h
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = aujourd’hui
+days-until-short[other] = dans {{value}}j
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate=(date incorrecte)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a %e %b %Y %H:%M:%S
+dateTimeFormat_%x = %d/%m/%Y
+dateTimeFormat_%X = %H:%M:%S
+
+shortTimeFormat = %H:%M
+shortDateTimeFormat = %x %H:%M
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 1
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = AM
+time_pm = PM
diff --git a/www/firefoxos/locales/date.fy-NL.properties b/www/firefoxos/locales/date.fy-NL.properties
new file mode 100644
index 0000000..982539f
--- /dev/null
+++ b/www/firefoxos/locales/date.fy-NL.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = snein
+weekday-1-long = moandei
+weekday-2-long = tiisdei
+weekday-3-long = woansdei
+weekday-4-long = tongersdei
+weekday-5-long = freed
+weekday-6-long = sneon
+
+weekday-0-short = snei
+weekday-1-short = moa
+weekday-2-short = tii
+weekday-3-short = woa
+weekday-4-short = ton
+weekday-5-short = fre
+weekday-6-short = sneo
+
+# Month names
+
+month-0-long  = jannewaris
+month-1-long  = febrewaris
+month-2-long  = maart
+month-3-long  = april
+month-4-long  = maaie
+month-5-long  = juny
+month-6-long  = july
+month-7-long  = augustus
+month-8-long  = septimber
+month-9-long  = oktober
+month-10-long = novimber
+month-11-long = desimber
+
+month-0-genitive  = jannewaris
+month-1-genitive  = febrewaris
+month-2-genitive  = maart
+month-3-genitive  = april
+month-4-genitive  = maaie
+month-5-genitive  = juny
+month-6-genitive  = july
+month-7-genitive  = augustus
+month-8-genitive  = septimber
+month-9-genitive  = oktober
+month-10-genitive = novimber
+month-11-genitive = desimber
+
+month-0-short  = jan
+month-1-short  = feb
+month-2-short  = mrt
+month-3-short  = apr
+month-4-short  = maa
+month-5-short  = jun
+month-6-short  = jul
+month-7-short  = aug
+month-8-short  = sep
+month-9-short  = okt
+month-10-short = nov
+month-11-short = des
+
+# Relative time ("pretty dates")
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = krektlyn
+minutes-ago-long[one]   = ien minút lyn
+minutes-ago-long[two] = {{value}} minuten lyn
+minutes-ago-long[few] = {{value}} minuten lyn
+minutes-ago-long[many] = {{value}} minuten lyn
+minutes-ago-long[other] = {{value}} minuten lyn
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = krektlyn
+hours-ago-long[one]   = ien oere lyn
+hours-ago-long[two] = {{value}} oeren lyn
+hours-ago-long[few] = {{value}} oeren lyn
+hours-ago-long[many] = {{value}} oeren lyn
+hours-ago-long[other] = {{value}} oeren lyn
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = hjoed
+days-ago-long[one]   = juster
+days-ago-long[two] = {{value}} dagen lyn
+days-ago-long[few] = {{value}} dagen lyn
+days-ago-long[many] = {{value}} dagen lyn
+days-ago-long[other] = {{value}} dagen lyn
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = dizze wike
+weeks-ago-long[one]   = ferline wike
+weeks-ago-long[two]   = {{value}} wiken lyn
+weeks-ago-long[few]   = {{value}} wiken lyn
+weeks-ago-long[many]  = {{value}} wiken lyn
+weeks-ago-long[other] = {{value}} wiken lyn
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = dizze moanne
+months-ago-long[one]   = ferline moanne
+months-ago-long[two]   = {{value}} moannen lyn
+months-ago-long[few]   = {{value}} moannen lyn
+months-ago-long[many]  = {{value}} moannen lyn
+months-ago-long[other] = {{value}} moannen lyn
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = dit jier
+years-ago-long[one]   = ferline jier
+years-ago-long[two]   = {{value}} jier lyn
+years-ago-long[few]   = {{value}} jier lyn
+years-ago-long[many]  = {{value}} jier lyn
+years-ago-long[other] = {{value}} jier lyn
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = n
+minutes-until-long[one]   = daliks
+minutes-until-long[two]   = oer {{value}} minuten
+minutes-until-long[few]   = oer {{value}} minuten
+minutes-until-long[many]  = oer {{value}} minuten
+minutes-until-long[other] = oer {{value}} minuten
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = no
+hours-until-long[one]   = oer in oer
+hours-until-long[two]   = oer {{value}} oeren
+hours-until-long[few]   = oer {{value}} oeren
+hours-until-long[many]  = oer {{value}} oeren
+hours-until-long[other] = oer {{value}} oeren
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = hjoed
+days-until-long[one]   = moarn
+days-until-long[two]   = oer {{value}} dagen
+days-until-long[few]   = oer {{value}} dagen
+days-until-long[many]  = oer {{value}} dagen
+days-until-long[other] = oer {{value}} dagen
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = dizze wike
+weeks-until-long[one]   = folgjende wike
+weeks-until-long[two]   = oer {{value}} wiken
+weeks-until-long[few]   = oer {{value}} wiken
+weeks-until-long[many]  = oer {{value}} wiken
+weeks-until-long[other] = oer {{value}} wiken
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = dizze moanne
+months-until-long[one]   = folgjende moanne
+months-until-long[two]   = oer {{value}} moannen
+months-until-long[few]   = oer {{value}} moannen
+months-until-long[many]  = oer {{value}} moannen
+months-until-long[other] = oer {{value}} moannen
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = dit jier
+years-until-long[one]   = folgjend jier
+years-until-long[two]   = oer {{value}} jier
+years-until-long[few]   = oer {{value}} jier
+years-until-long[many]  = oer {{value}} jier
+years-until-long[other] = oer {{value}} jier
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = krektlyn
+minutes-ago-short[other] = {{value}}m lyn
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = krektlyn
+hours-ago-short[other] = {{value}}o lyn
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = hjoed
+days-ago-short[other] = {{value}}d lyn
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = no
+minutes-until-short[other] = oer {{value}}m
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = no
+hours-until-short[other] = oer {{value}}h
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = hjoed
+days-until-short[other] = oer {{value}}d
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (ynkorrekte datum)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a %e %b %Y %H:%M:%S
+dateTimeFormat_%x = %d-%m-%Y
+dateTimeFormat_%X = %H:%M:%S
+
+shortTimeFormat = %H:%M
+shortDateTimeFormat = %x %H:%M
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 1
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = AM
+time_pm = PM
diff --git a/www/firefoxos/locales/date.ga-IE.properties b/www/firefoxos/locales/date.ga-IE.properties
new file mode 100644
index 0000000..cd568e6
--- /dev/null
+++ b/www/firefoxos/locales/date.ga-IE.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = Domhnach
+weekday-1-long = Luan
+weekday-2-long = Máirt
+weekday-3-long = Céadaoin
+weekday-4-long = Déardaoin
+weekday-5-long = Aoine
+weekday-6-long = Satharn
+
+weekday-0-short = Domh
+weekday-1-short = Luan
+weekday-2-short = Máir
+weekday-3-short = Céad
+weekday-4-short = Déar
+weekday-5-short = Aoin
+weekday-6-short = Sath
+
+# Month names
+
+month-0-long  = Eanáir
+month-1-long  = Feabhra
+month-2-long  = Márta
+month-3-long  = Aibreán
+month-4-long  = Bealtaine
+month-5-long  = Meitheamh
+month-6-long  = Iúil
+month-7-long  = Lúnasa
+month-8-long  = Meán Fómhair
+month-9-long  = Deireadh Fómhair
+month-10-long = Samhain
+month-11-long = Nollaig
+
+month-0-genitive  = Eanáir
+month-1-genitive  = Feabhra
+month-2-genitive  = Márta
+month-3-genitive  = Aibreán
+month-4-genitive  = Bealtaine
+month-5-genitive  = Meitheamh
+month-6-genitive  = Iúil
+month-7-genitive  = Lúnasa
+month-8-genitive  = Meán Fómhair
+month-9-genitive  = Deireadh Fómhair
+month-10-genitive = Samhain
+month-11-genitive = Nollaig
+
+month-0-short  = Ean
+month-1-short  = Fea
+month-2-short  = Már
+month-3-short  = Aib
+month-4-short  = Bea
+month-5-short  = Mei
+month-6-short  = Iúi
+month-7-short  = Lún
+month-8-short  = MFó
+month-9-short  = DFó
+month-10-short = Sam
+month-11-short = Nol
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = anois beag
+minutes-ago-long[one]   = nóiméad ó shin
+minutes-ago-long[two]   = {{value}} nóiméad ó shin
+minutes-ago-long[few]   = {{value}} nóiméad ó shin
+minutes-ago-long[many]  = {{value}} nóiméad ó shin
+minutes-ago-long[other] = {{value}} nóiméad ó shin
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = anois beag
+hours-ago-long[one]   = uair an chloig ó shin
+hours-ago-long[two]   = {{value}} uair an chloig ó shin
+hours-ago-long[few]   = {{value}} huaire an chloig ó shin
+hours-ago-long[many]  = {{value}} n-uaire an chloig ó shin
+hours-ago-long[other] = {{value}} uair an chloig ó shin
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = inniu
+days-ago-long[one]   = inné
+days-ago-long[two]   = {{value}} lá ó shin
+days-ago-long[few]   = {{value}} lá ó shin
+days-ago-long[many]  = {{value}} lá ó shin
+days-ago-long[other] = {{value}} lá ó shin
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = an tseachtain seo
+weeks-ago-long[one]   = an tseachtain seo caite
+weeks-ago-long[two]   = {{value}} sheachtain ó shin
+weeks-ago-long[few]   = {{value}} seachtaine ó shin
+weeks-ago-long[many]  = {{value}} seachtaine ó shin
+weeks-ago-long[other] = {{value}} seachtain ó shin
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = an mhí seo
+months-ago-long[one]   = an mhí seo caite
+months-ago-long[two]   = {{value}} mhí ó shin
+months-ago-long[few]   = {{value}} mhí ó shin
+months-ago-long[many]  = {{value}} mí ó shin
+months-ago-long[other] = {{value}} mí ó shin
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = i mbliana
+years-ago-long[one]   = anuraidh
+years-ago-long[two]   = {{value}} bhliain ó shin
+years-ago-long[few]   = {{value}} bliana ó shin
+years-ago-long[many]  = {{value}} mbliana ó shin
+years-ago-long[other] = {{value}} bliain ó shin
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = anois
+minutes-until-long[one]   = i gceann nóiméid
+minutes-until-long[two]   = i gceann {{value}} nóiméid
+minutes-until-long[few]   = i gceann {{value}} nóiméid
+minutes-until-long[many]  = i gceann {{value}} nóiméid
+minutes-until-long[other] = i gceann {{value}} nóiméid
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = anois
+hours-until-long[one]   = i gceann uair an chloig
+hours-until-long[two]   = i gceann {{value}} uair an chloig
+hours-until-long[few]   = i gceann {{value}} huaire an chloig
+hours-until-long[many]  = i gceann {{value}} n-uaire an chloig
+hours-until-long[other] = i gceann {{value}} uair an chloig
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = inniu
+days-until-long[one]   = amárach
+days-until-long[two]   = i gceann {{value}} lae
+days-until-long[few]   = i gceann {{value}} lae
+days-until-long[many]  = i gceann {{value}} lae
+days-until-long[other] = i gceann {{value}} lae
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = an tseachtain seo
+weeks-until-long[one]   = an tseachtain seo chugainn
+weeks-until-long[two]   = i gceann {{value}} sheachtaine
+weeks-until-long[few]   = i gceann {{value}} seachtaine
+weeks-until-long[many]  = i gceann {{value}} seachtaine
+weeks-until-long[other] = i gceann {{value}} seachtaine
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = an mhí seo
+months-until-long[one]   = an mhí seo chugainn
+months-until-long[two]   = i gceann {{value}} mhíosa
+months-until-long[few]   = i gceann {{value}} mhíosa
+months-until-long[many]  = i gceann {{value}} míosa
+months-until-long[other] = i gceann {{value}} míosa
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = an bhliain seo
+years-until-long[one]   = an bhliain seo chugainn
+years-until-long[two]   = i gceann {{value}} bhliana
+years-until-long[few]   = i gceann {{value}} bliana
+years-until-long[many]  = i gceann {{value}} mbliana
+years-until-long[other] = i gceann {{value}} bliana
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = anois beag
+minutes-ago-short[other] = {{value}}n ó shin
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = anois beag
+hours-ago-short[other] = {{value}}u ó shin
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = inniu
+days-ago-short[other] = {{value}}l ó shin
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = anois
+minutes-until-short[other] = i gceann {{value}}n
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = anois
+hours-until-short[other] = i gceann {{value}}u
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = inniu
+days-until-short[other] = i gceann {{value}}l
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (dáta mícheart)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a %e %b %Y %I:%M:%S %p
+dateTimeFormat_%x = %d/%m/%Y
+dateTimeFormat_%X = %I:%M:%S %p
+
+shortTimeFormat = %I:%M %p
+shortDateTimeFormat = %x %I:%M %p
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 0
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = rn
+time_pm = in
diff --git a/www/firefoxos/locales/date.gd.properties b/www/firefoxos/locales/date.gd.properties
new file mode 100644
index 0000000..de1305b
--- /dev/null
+++ b/www/firefoxos/locales/date.gd.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = DiDòmhnaich
+weekday-1-long = DiLuain
+weekday-2-long = DiMàirt
+weekday-3-long = DiCiadain
+weekday-4-long = DiarDaoin
+weekday-5-long = DihAoine
+weekday-6-long = DiSathairne
+
+weekday-0-short = DiD
+weekday-1-short = DiL
+weekday-2-short = DiM
+weekday-3-short = DiC
+weekday-4-short = Diar
+weekday-5-short = Dih
+weekday-6-short = DiS
+
+# Month names
+
+month-0-long  = Faoilleach
+month-1-long  = Gearran
+month-2-long  = Màrt
+month-3-long  = Giblean
+month-4-long  = Cèitean
+month-5-long  = Ògmhios
+month-6-long  = Iuchar
+month-7-long  = Lùnastal
+month-8-long  = Sultain
+month-9-long  = Dàmhair
+month-10-long = Samhain
+month-11-long = Dùbhlachd
+
+month-0-genitive  = Faoilleach
+month-1-genitive  = Gearran
+month-2-genitive  = Màrt
+month-3-genitive  = Giblean
+month-4-genitive  = Cèitean
+month-5-genitive  = Ògmhios
+month-6-genitive  = Iuchar
+month-7-genitive  = Lùnastal
+month-8-genitive  = Sultain
+month-9-genitive  = Dàmhair
+month-10-genitive = Samhain
+month-11-genitive = Dùbhlachd
+
+month-0-short  = Faoi
+month-1-short  = Gearr
+month-2-short  = Màrt
+month-3-short  = Gibl
+month-4-short  = Cèit
+month-5-short  = Ògmh
+month-6-short  = Iuch
+month-7-short  = Lùna
+month-8-short  = Sult
+month-9-short  = Dàmh
+month-10-short = Samh
+month-11-short = Dùbh
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = an-dràsta fhèin
+minutes-ago-long[one]   = mionaid air ais
+minutes-ago-long[two]   = {{value}} mhionaid air ais
+minutes-ago-long[few]   = {{value}} mionaidean air ais
+minutes-ago-long[many]  = {{value}} mionaid air ais
+minutes-ago-long[other] = {{value}} mionaid air ais
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = an-dràsta fhèin
+hours-ago-long[one]   = uair a thìde air ais
+hours-ago-long[two]   = {{value}} uair air ais
+hours-ago-long[few]   = {{value}} uairean air ais
+hours-ago-long[many]  = {{value}} uair air ais
+hours-ago-long[other] = {{value}} uair air ais
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = an-diugh
+days-ago-long[one]   = an-dè
+days-ago-long[two]   = {{value}} latha air ais
+days-ago-long[few]   = {{value}} làithean air ais
+days-ago-long[many]  = {{value}} latha air ais
+days-ago-long[other] = {{value}} latha air ais
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = an t-seachdain-sa
+weeks-ago-long[one]   = an t-seachdain seo chaidh
+weeks-ago-long[two]   = {{value}} sheachdain air ais
+weeks-ago-long[few]   = {{value}} seachdainean air ais
+weeks-ago-long[many]  = {{value}} seachdain air ais
+weeks-ago-long[other] = {{value}} seachdain air ais
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = am mìos seo
+months-ago-long[one]   = am mìos seo chaidh
+months-ago-long[two]   = {{value}} mhìos air ais
+months-ago-long[few]   = {{value}} mìosan air ais
+months-ago-long[many]  = {{value}} mìos air ais
+months-ago-long[other] = {{value}} mìos air ais
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = am bliadhna
+years-ago-long[one]   = an-uiridh
+years-ago-long[two]   = {{value}} bhliadhna air ais
+years-ago-long[few]   = {{value}} bliadhna air ais
+years-ago-long[many]  = {{value}} bliadhna air ais
+years-ago-long[other] = {{value}} bliadhna air ais
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = an-dràsta
+minutes-until-long[one]   = ann am mionaid
+minutes-until-long[two]   = ann an {{value}} mhionaid
+minutes-until-long[few]   = ann an {{value}} mionaidean
+minutes-until-long[many]  = ann an {{value}} mionaid
+minutes-until-long[other] = ann an {{value}} mionaid
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = an-dràsta
+hours-until-long[one]   = ann an uair a thìde
+hours-until-long[two]   = ann an {{value}} uair
+hours-until-long[few]   = ann an {{value}} uairean
+hours-until-long[many]  = ann an {{value}} uair
+hours-until-long[other] = ann an {{value}} uair
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = an-diugh
+days-until-long[one]   = a-màireach
+days-until-long[two]   = ann an {{value}} latha
+days-until-long[few]   = ann an {{value}} làithean7
+days-until-long[many]  = ann an {{value}} latha
+days-until-long[other] = ann an {{value}} latha
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = an t-seachdain-sa
+weeks-until-long[one]   = an ath-sheachdain
+weeks-until-long[two]   = ann an {{value}} sheachdain
+weeks-until-long[few]   = ann an {{value}} seachdainean
+weeks-until-long[many]  = ann an {{value}} seachdain
+weeks-until-long[other] = ann an {{value}} seachdain
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = am mìos seo
+months-until-long[one]   = an ath-mhìos
+months-until-long[two]   = ann an {{value}} mhìos
+months-until-long[few]   = ann an {{value}} mìosan
+months-until-long[many]  = ann an {{value}} mìos
+months-until-long[other] = ann an {{value}} mìos
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = am bliadhna
+years-until-long[one]   = an ath-bhliadhna
+years-until-long[two]   = ann an {{value}} bhliadhna
+years-until-long[few]   = ann an {{value}} bliadhna
+years-until-long[many]  = ann an {{value}} bliadhna
+years-until-long[other] = ann an {{value}} bliadhna
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = an-dràsta fhèin
+minutes-ago-short[other] = {{value}} m. air ais
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = an-dràsta fhèin
+hours-ago-short[other] = {{value}} u. air ais
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = an-diugh
+days-ago-short[other] = {{value}} l. air ais
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = an-dràsta
+minutes-until-short[other] = ann an {{value}} m.
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = an-dràsta
+hours-until-short[other] = ann an {{value}} u.
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = an-diugh
+days-until-short[other] = ann an {{value}} l.
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (ceann-là cearr)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %%e a %b %Y %I:%M:%S %p
+dateTimeFormat_%x = %d/%m/%Y
+dateTimeFormat_%X = %I:%M:%S %p
+
+shortTimeFormat = %I:%M %p
+shortDateTimeFormat = %x %I:%M %p
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 0
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = m
+time_pm = f
diff --git a/www/firefoxos/locales/date.gl.properties b/www/firefoxos/locales/date.gl.properties
new file mode 100644
index 0000000..1268848
--- /dev/null
+++ b/www/firefoxos/locales/date.gl.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long= Domingo
+weekday-1-long= Luns
+weekday-2-long= Martes
+weekday-3-long= Mércores
+weekday-4-long= Xoves
+weekday-5-long= Venres
+weekday-6-long= Sábado
+
+weekday-0-short= Dom
+weekday-1-short= Lun
+weekday-2-short= Mar
+weekday-3-short= Mer
+weekday-4-short= Xov
+weekday-5-short= Ven
+weekday-6-short= Sab
+
+# Month names
+
+month-0-long= Xaneiro
+month-1-long= Febreiro
+month-2-long= Marzo
+month-3-long= Abril
+month-4-long= Maio
+month-5-long= Xuño
+month-6-long= Xullo
+month-7-long= Agosto
+month-8-long= Setembro
+month-9-long= Outubro
+month-10-long= Novembro
+month-11-long= Decembro
+
+month-0-genitive= Xaneiro
+month-1-genitive= Febreiro
+month-2-genitive= Marzo
+month-3-genitive= Abril
+month-4-genitive= Maio
+month-5-genitive= Xuño
+month-6-genitive= Xullo
+month-7-genitive= Agosto
+month-8-genitive= Setembro
+month-9-genitive= Outubro
+month-10-genitive= Novembro
+month-11-genitive= Decembro
+
+month-0-short= Xan
+month-1-short= Feb
+month-2-short= Mar
+month-3-short= Abr
+month-4-short= Maio
+month-5-short= Xun
+month-6-short= Xul
+month-7-short= Ago
+month-8-short= Set
+month-9-short= Out
+month-10-short= Nov
+month-11-short= Dec
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]= xusto agora
+minutes-ago-long[one]= hai un minuto
+minutes-ago-long[two]= hai {{value}} minutos
+minutes-ago-long[few]= hai {{value}} minutos
+minutes-ago-long[many]= hai {{value}} minutos
+minutes-ago-long[other]= hai {{value}} minutos
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]= xusto agora
+hours-ago-long[one]= hai unha hora
+hours-ago-long[two]= hai {{value}} horas
+hours-ago-long[few]= hai {{value}} horas
+hours-ago-long[many]= hai {{value}} horas
+hours-ago-long[other]= hai {{value}} horas
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]= hoxe
+days-ago-long[one]= onte
+days-ago-long[two]= hai {{value}} días
+days-ago-long[few]= hai {{value}} días
+days-ago-long[many]= hai {{value}} días
+days-ago-long[other]= hai {{value}} días
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]= esta semana
+weeks-ago-long[one]= a semana pasada
+weeks-ago-long[two]= hai {{value}} semanas
+weeks-ago-long[few]= hai {{value}} semanas
+weeks-ago-long[many]= hai {{value}} semanas
+weeks-ago-long[other]= hai {{value}} semanas
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]= Este mes
+months-ago-long[one]= o mes pasado
+months-ago-long[two]= hai {{value}} meses
+months-ago-long[few]= hai {{value}} meses
+months-ago-long[many]= hai {{value}} meses
+months-ago-long[other]= hai {{value}} meses
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]= este ano
+years-ago-long[one]= o ano pasado
+years-ago-long[two]= hai {{value}} anos
+years-ago-long[few]= hai {{value}} anos
+years-ago-long[many]= hai {{value}} anos
+years-ago-long[other]= hai {{value}} anos
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]= agora
+minutes-until-long[one]= nun minuto
+minutes-until-long[two]= en {{value}} minutos
+minutes-until-long[few]= en {{value}} minutos
+minutes-until-long[many]= en {{value}} minutos
+minutes-until-long[other]= en {{value}} minutos
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]= agora
+hours-until-long[one]= nunha hora
+hours-until-long[two]= en {{value}} horas
+hours-until-long[few]= en {{value}} horas
+hours-until-long[many]= en {{value}} horas
+hours-until-long[other]= en {{value}} horas
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]= hoxe
+days-until-long[one]= mañá
+days-until-long[two]= en {{value}} días
+days-until-long[few]= en {{value}} días
+days-until-long[many]= en {{value}} días
+days-until-long[other]= en {{value}} días
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]= esta semana
+weeks-until-long[one]= a semana que ven
+weeks-until-long[two]= en {{value}} semanas
+weeks-until-long[few]= en {{value}} semanas
+weeks-until-long[many]= en {{value}} semanas
+weeks-until-long[other]= en {{value}} semanas
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]= Este mes
+months-until-long[one]= o mes que ven
+months-until-long[two]= en {{value}} meses
+months-until-long[few]= en {{value}} meses
+months-until-long[many]= en {{value}} meses
+months-until-long[other]= en {{value}} meses
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]= este ano
+years-until-long[one]= o ano que ven
+years-until-long[two]= en {{value}} anos
+years-until-long[few]= en {{value}} anos
+years-until-long[many]= en {{value}} anos
+years-until-long[other]= en {{value}} anos
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]= xusto agora
+minutes-ago-short[other]= hai {{value}}min
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]= xusto agora
+hours-ago-short[other]= hai {{value}}h
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]= hoxe
+days-ago-short[other]= hai {{value}}d
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]= agora
+minutes-until-short[other]= en {{value}}min
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]= agora
+hours-until-short[other]= en {{value}}h
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]= hoxe
+days-until-short[other]= en {{value}}d
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate= (data incorrecta)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c= %a, %e de %b, %Y %H:%M:%S
+dateTimeFormat_%x= %d/%m/%Y
+dateTimeFormat_%X= %H:%M:%S
+
+shortTimeFormat= %H:%M
+shortDateTimeFormat= %x %H:%M %p
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday= 1
+
+# Localize “AM" and "PM" used in %p format for time
+time_am= AM
+time_pm= PM
diff --git a/www/firefoxos/locales/date.gu.properties b/www/firefoxos/locales/date.gu.properties
new file mode 100644
index 0000000..9078768
--- /dev/null
+++ b/www/firefoxos/locales/date.gu.properties
@@ -0,0 +1,205 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+weekday-0-long=રવિવાર
+weekday-1-long=સોમવાર
+weekday-2-long=મંગળવાર
+weekday-3-long=બુધવાર
+weekday-4-long=ગુરુવાર
+weekday-5-long=શુક્રવાર
+weekday-6-long=શનિવાર
+weekday-0-short=રવિ
+weekday-1-short=સોમ
+weekday-2-short=મંગળ
+weekday-3-short=બુધ
+weekday-4-short=ગુરુ
+weekday-5-short=શુક્ર
+weekday-6-short=શનિ
+month-0-long=જાન્યુઆરી
+month-1-long=ફેબ્રુઆરી
+month-2-long=માર્ચ
+month-3-long=એપ્રિલ
+# 
+# Month names
+month-4-long=મે
+month-5-long=જૂન
+month-6-long=જુલાઇ
+month-7-long=ઑગસ્ટ
+month-8-long=સપ્ટેમ્બર
+month-9-long=ઑક્ટોબર
+month-10-long=નવેમ્બર
+month-11-long=ડિસેમ્બર
+month-0-genitive=જાન્યુઆરી
+month-1-genitive=ફેબ્રુઆરી
+month-2-genitive=માર્ચ
+month-3-genitive=એપ્રિલ
+month-4-genitive=મે
+month-5-genitive=જૂન
+month-6-genitive=જુલાઇ
+month-7-genitive=ઑગસ્ટ
+month-8-genitive=સપ્ટેમ્બર
+month-9-genitive=ઑક્ટોબર
+month-10-genitive=નવેમ્બર
+month-11-genitive=ડિસેમ્બર
+month-0-short=જાન
+month-1-short=ફેબ
+month-2-short=માર્ચ
+month-3-short=એપ્રિલ
+month-4-short=મે
+month-5-short=જુન
+month-6-short=જુલાઇ
+month-7-short=ઑગસ્ટ
+month-8-short=સેપ્ટેમ્બર
+month-9-short=ઑક્ટો
+month-10-short=નવેમ્બર
+month-11-short=ડિસેમ્બર
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]=હમણાં જ
+# 
+# Relative time ("pretty dates"), normal/long variant
+minutes-ago-long[one]=૧ મિનિટ પહેલા
+minutes-ago-long[two]={{value}} મિનિટો પહેલા
+minutes-ago-long[few]={{value}} મિનિટો પહેલા
+minutes-ago-long[many]={{value}} મિનિટો પહેલા
+minutes-ago-long[other]={{value}} મિનિટો પહેલા
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]=હમણાં જ
+hours-ago-long[one]=૧ કલાક પહેલા
+hours-ago-long[two]={{value}} કલાક પહેલા
+hours-ago-long[few]={{value}} કલાક પહેલા
+hours-ago-long[many]={{value}} કલાક પહેલા
+hours-ago-long[other]={{value}} કલાક પહેલા
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]=આજે
+days-ago-long[one]=ગઇ કાલે
+days-ago-long[two]={{value}} દિવસો પહેલા
+days-ago-long[few]={{value}} દિવસો પહેલા
+days-ago-long[many]={{value}} દિવસો પહેલા
+days-ago-long[other]={{value}} દિવસો પહેલા
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]=આ અઠવાડિયે
+weeks-ago-long[one]=છેલ્લા અઠવાડિયે
+weeks-ago-long[two]={{value}} અઠવાડિયા પહેલા
+weeks-ago-long[few]={{value}} અઠવાડિયા પહેલા
+weeks-ago-long[many]={{value}} અઠવાડિયા પહેલા
+weeks-ago-long[other]={{value}} અઠવાડિયા પહેલા
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]=આ મહિનો
+months-ago-long[one]=છેલ્લો મહિનો
+months-ago-long[two]={{value}} મહિના પહેલા
+months-ago-long[few]={{value}} મહિના પહેલા
+months-ago-long[many]={{value}} મહિના પહેલા
+months-ago-long[other]={{value}} મહિના પહેલા
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]=આ વર્ષ
+years-ago-long[one]=છેલ્લું વર્ષ
+years-ago-long[two]={{value}} વર્ષ પહેલા
+years-ago-long[few]={{value}} વર્ષ પહેલા
+years-ago-long[many]={{value}} વર્ષ પહેલા
+years-ago-long[other]={{value}} વર્ષ પહેલા
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]=હમણાં
+minutes-until-long[one]=મિનિટમાં
+minutes-until-long[two]={{value}} મિનિટોમાં
+minutes-until-long[few]={{value}} મિનિટોમાં
+minutes-until-long[many]={{value}} મિનિટોમાં
+minutes-until-long[other]={{value}} મિનિટોમાં
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]=હમણાં
+hours-until-long[one]=કલાકમાં
+hours-until-long[two]={{value}} કલાકમાં
+hours-until-long[few]={{value}} કલાકમાં
+hours-until-long[many]={{value}} કલાકમાં
+hours-until-long[other]={{value}} કલાકમાં
+days-until-long={[ plural(value) ]}
+days-until-long[zero]=આજે
+days-until-long[one]=આવતી કાલે
+days-until-long[two]={{value}} દિવસોમાં
+days-until-long[few]={{value}} દિવસોમાં
+days-until-long[many]={{value}} દિવસોમાં
+days-until-long[other]={{value}} દિવસોમાં
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]=આ અઠવાડિયે
+weeks-until-long[one]=આગળના અઠવાડિયે
+weeks-until-long[two]={{value}} અઠવાડિયામાં
+weeks-until-long[few]={{value}} અઠવાડિયામાં
+weeks-until-long[many]={{value}} અઠવાડિયામાં
+weeks-until-long[other]={{value}} અઠવાડિયામાં
+months-until-long={[ plural(value) ]}
+months-until-long[zero]=આ મહિનો
+months-until-long[one]=આગળનો મહિનો
+months-until-long[two]={{value}} મહિનામાં
+months-until-long[few]={{value}} મહિનામાં
+months-until-long[many]={{value}} મહિનામાં
+months-until-long[other]={{value}} મહિનામાં
+years-until-long={[ plural(value) ]}
+years-until-long[zero]=આ વર્ષ
+years-until-long[one]=આગળનું વર્ષ
+years-until-long[two]={{value}} વર્ષોમાં
+years-until-long[few]={{value}} વર્ષોમાં
+years-until-long[many]={{value}} વર્ષોમાં
+years-until-long[other]={{value}} વર્ષોમાં
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]=હમણાં જ
+minutes-ago-short[other]={{value}}m પહેલા
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]=હમણાં જ
+hours-ago-short[other]={{value}}h પહેલા
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]=આજે
+days-ago-short[other]={{value}}d પહેલા
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]=હમણાં
+minutes-until-short[other]={{value}}m માં
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]=હમણાં
+hours-until-short[other]={{value}}h માં
+days-until-short={[ plural(value) ]}
+days-until-short[zero]=આજે
+days-until-short[other]={{value}}d માં
+# 
+# 
+# 
+# 
+# 
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (\u2019) can be used to represent minutes for most
+# locales, but we use \u201Cm\u201D instead for the English locale to prevent a possible
+# confusion (35\u2019 ago \u2260 35 feet ago).
+# 
+# 
+# 
+# 
+# 
+# 
+# 
+# Relative time ("pretty dates"), unexpected error
+incorrectDate=(ખોટી તારીખ)
+# 
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+dateTimeFormat_%c=%a %b %e %Y %I:%M:%S %p
+dateTimeFormat_%x=%m/%d/%Y
+dateTimeFormat_%X=%I:%M:%S %p
+shortTimeFormat=%I:%M %p
+shortDateTimeFormat=%x %I:%M %p
+weekStartsOnMonday=0
+time_am=AM
+time_pm=PM
diff --git a/www/firefoxos/locales/date.he.properties b/www/firefoxos/locales/date.he.properties
new file mode 100644
index 0000000..955903e
--- /dev/null
+++ b/www/firefoxos/locales/date.he.properties
@@ -0,0 +1,109 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = ראשון
+weekday-1-long = שני
+weekday-2-long = שלישי
+weekday-3-long = רביעי
+weekday-4-long = חמישי
+weekday-5-long = שישי
+weekday-6-long = שבת
+
+weekday-0-short = א׳
+weekday-1-short = ב׳
+weekday-2-short = ג׳
+weekday-3-short = ד׳
+weekday-4-short = ה׳
+weekday-5-short = ו׳
+weekday-6-short = ש׳
+
+# Month names
+
+month-0-long  = ינואר
+month-1-long  = פברואר
+month-2-long  = מרץ
+month-3-long  = אפריל
+month-4-long  = מאי
+month-5-long  = יוני
+month-6-long  = יולי
+month-7-long  = אוגוסט
+month-8-long  = ספטמבר
+month-9-long  = אוקטובר
+month-10-long = נובמבר
+month-11-long = דצמבר
+
+month-0-short  = ינו׳
+month-1-short  = פבר׳
+month-2-short  = מרץ
+month-3-short  = אפר׳
+month-4-short  = מאי
+month-5-short  = יוני
+month-6-short  = יולי
+month-7-short  = אוג׳
+month-8-short  = ספט׳
+month-9-short  = אוק׳
+month-10-short = נוב׳
+month-11-short = דצמ׳
+
+# Relative time ("pretty dates")
+
+minutesAgo={[ plural(m) ]}
+minutesAgo[zero]  = עכשיו
+minutesAgo[one]   = לפני דקה
+minutesAgo[other] = לפני {{m}} דקות
+
+hoursAgo={[ plural(h) ]}
+hoursAgo[zero]  = עכשיו
+hoursAgo[one]   = לפני שעה
+hoursAgo[other] = לפני {{h}} שעות
+
+daysAgo={[ plural(d) ]}
+daysAgo[zero]  = היום
+daysAgo[one]   = אתמול
+daysAgo[other] = לפני {{d}} ימים
+
+inMinutes={[ plural(m) ]}
+inMinutes[zero]  = עכשיו
+inMinutes[one]   = בעוד דקה
+inMinutes[other] = בעוד {{m}} דקות
+
+inHours={[ plural(h) ]}
+inHours[zero]  = עכשיו
+inHours[one]   = בעוד שעה
+inHours[other] = בעוד {{h}} שעות
+
+inDays={[ plural(d) ]}
+inDays[zero]  = היום
+inDays[one]   = מחר
+inDays[other] = בעוד {{d}} ימים
+
+incorrectDate=(תאריך שגוי)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = יום %a, %e ב%B %Y %H:%M:%S
+dateTimeFormat_%x = %d.%m.%Y
+dateTimeFormat_%X = %H:%M:%S
+
+shortTimeFormat = %H:%M
+shortDateTimeFormat = %x %H:%M
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 0
\ No newline at end of file
diff --git a/www/firefoxos/locales/date.hi-IN.properties b/www/firefoxos/locales/date.hi-IN.properties
new file mode 100644
index 0000000..e140229
--- /dev/null
+++ b/www/firefoxos/locales/date.hi-IN.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = रविवार
+weekday-1-long = सोमवार
+weekday-2-long = मंगलवार
+weekday-3-long = बुधवार
+weekday-4-long = गुरूवार
+weekday-5-long = शुक्रवार
+weekday-6-long = शनिवार
+
+weekday-0-short = रवि
+weekday-1-short = सोम
+weekday-2-short = मंगल
+weekday-3-short = बुध
+weekday-4-short = गुरू
+weekday-5-short = शुक्र
+weekday-6-short = शनि
+
+# Month names
+
+month-0-long  = जनवरी
+month-1-long  = फ़रवरी
+month-2-long  = मार्च
+month-3-long  = अप्रैल
+month-4-long  = मई
+month-5-long  = जून
+month-6-long  = जुलाई
+month-7-long  = अगस्त
+month-8-long  = सितम्बर
+month-9-long  = अक्तूबर
+month-10-long = नवंबर
+month-11-long = दिसंबर
+
+month-0-genitive  = जनवरी
+month-1-genitive  = फ़रवरी
+month-2-genitive  = मार्च
+month-3-genitive  = अप्रैल
+month-4-genitive  = मई
+month-5-genitive  = जून
+month-6-genitive  = जुलाई
+month-7-genitive  = अगस्त
+month-8-genitive  = सितम्बर
+month-9-genitive  = अक्तूबर
+month-10-genitive = नवम्बर
+month-11-genitive = दिसम्बर
+
+month-0-short  = जनवरी
+month-1-short  = फरवरी
+month-2-short  = मार्च
+month-3-short  = अप्रेल
+month-4-short  = मई
+month-5-short  = जून
+month-6-short  = जुलाई
+month-7-short  = अगस्त
+month-8-short  = सितम्बर
+month-9-short  = अक्टूबर
+month-10-short = नवम्बर
+month-11-short = दिसम्बर
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = बस अब
+minutes-ago-long[one]   = एक मिनट पहले
+minutes-ago-long[two]   = {{value}} मिनटों पहले
+minutes-ago-long[few]   = {{value}} मिनटों पहले
+minutes-ago-long[many]  = {{value}} मिनटों पहले
+minutes-ago-long[other] = {{value}} मिनटों पहले
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = बस अब
+hours-ago-long[one]   = एक घंटा पहले
+hours-ago-long[two]   = {{value}} घंटे पहले
+hours-ago-long[few]   = {{value}} घंटे पहले
+hours-ago-long[many]  = {{value}} घंटे पहले
+hours-ago-long[other] = {{value}} घंटे पहले
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = आज
+days-ago-long[one]   = गतदिवस
+days-ago-long[two]   = {{value}} दिन पहले
+days-ago-long[few]   = {{value}} दिन पहले
+days-ago-long[many]  = {{value}} दिन पहले
+days-ago-long[other] = {{value}} दिन पहले
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = इस सप्ताह
+weeks-ago-long[one]   = पिछले सप्ताह
+weeks-ago-long[two]   = {{value}} हफ्ते पहले
+weeks-ago-long[few]   = {{value}} हफ्ते पहले
+weeks-ago-long[many]  = {{value}} हफ्ते पहले
+weeks-ago-long[other] = {{value}} हफ्ते पहले
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = इस महीने
+months-ago-long[one]   = पिछले महीने
+months-ago-long[two]   = {{value}} महीनों पहले
+months-ago-long[few]   = {{value}} महीनों पहले
+months-ago-long[many]  = {{value}} महीनों पहले
+months-ago-long[other] = {{value}} महीनों पहले
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = इस वर्ष
+years-ago-long[one]   = पिछले वर्ष
+years-ago-long[two]   = {{value}} सालों पहले
+years-ago-long[few]   = {{value}} सालों पहले
+years-ago-long[many]  = {{value}} सालों पहले
+years-ago-long[other] = {{value}} सालों पहले
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = अभी
+minutes-until-long[one]   = एक मिनट में
+minutes-until-long[two]   = {{value}} मिनटों में
+minutes-until-long[few]   = {{value}} मिनटों में
+minutes-until-long[many]  = {{value}} मिनटों में
+minutes-until-long[other] = {{value}} मिनटों में
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = अभी
+hours-until-long[one]   = एक घंटे में
+hours-until-long[two]   = {{value}} घंटों में
+hours-until-long[few]   = {{value}} घंटों में
+hours-until-long[many]  = {{value}} घंटों में
+hours-until-long[other] = {{value}} घंटों में
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = आज
+days-until-long[one]   = कल
+days-until-long[two]   = {{value}} दिन में
+days-until-long[few]   = {{value}} दिन में
+days-until-long[many]  = {{value}} दिन में
+days-until-long[other] = {{value}} दिन में
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = इस सप्ताह
+weeks-until-long[one]   = अगले सप्ताह
+weeks-until-long[two]   = {{value}} हफ़्तों में
+weeks-until-long[few]   = {{value}} हफ़्तों में
+weeks-until-long[many]  = {{value}} हफ़्तों में
+weeks-until-long[other] = {{value}} हफ़्तों में
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = इस महीने
+months-until-long[one]   = अगले महीने
+months-until-long[two]   = {{value}} महीनों में
+months-until-long[few]   = {{value}} महीनों में
+months-until-long[many]  = {{value}} महीनों में
+months-until-long[other] = {{value}} महीनों में
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = इस वर्ष
+years-until-long[one]   = अगले वर्ष
+years-until-long[two]   = {{value}} सालों में
+years-until-long[few]   = {{value}} सालों में
+years-until-long[many]  = {{value}} सालों में
+years-until-long[other] = {{value}} सालों में
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = अभी-अभी
+minutes-ago-short[other] = {{value}}मि पहले
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = अभी-अभी
+hours-ago-short[other] = {{value}}घं पहले
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = आज
+days-ago-short[other] = {{value}}दि पहले
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = अभी
+minutes-until-short[other] = {{value}}मि में
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = अभी
+hours-until-short[other] = {{value}}घं में
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = आज
+days-until-short[other] = {{value}}दि में
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (गलत तारीख)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a %b %e %Y %I:%M:%S %p
+dateTimeFormat_%x = %m/%d/%Y
+dateTimeFormat_%X = %I:%M:%S %p
+
+shortTimeFormat = %I:%M %p
+shortDateTimeFormat = %x %I:%M %p
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 0
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = पूर्वाह्न
+time_pm = अपराह्न
diff --git a/www/firefoxos/locales/date.hr.properties b/www/firefoxos/locales/date.hr.properties
new file mode 100644
index 0000000..5350e93
--- /dev/null
+++ b/www/firefoxos/locales/date.hr.properties
@@ -0,0 +1,224 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = Nedjelja
+weekday-1-long = Ponedjeljak
+weekday-2-long = Utorak
+weekday-3-long = Srijeda
+weekday-4-long = Četvrtak
+weekday-5-long = Petak
+weekday-6-long = Subota
+
+weekday-0-short = Ned
+weekday-1-short = Pon
+weekday-2-short = Uto
+weekday-3-short = Sri
+weekday-4-short = Čet
+weekday-5-short = Pet
+weekday-6-short = Sub
+
+# Month names
+
+month-0-long  = Siječanj
+month-1-long  = Veljača
+month-2-long  = Ožujak
+month-3-long  = Travanj
+month-4-long  = Svibanj
+month-5-long  = Lipanj
+month-6-long  = Srpanj
+month-7-long  = Kolovoz
+month-8-long  = Rujan
+month-9-long  = Listopad
+month-10-long = Studeni
+month-11-long = Prosinac
+
+month-0-genitive  = Siječnja
+month-1-genitive  = Veljače
+month-2-genitive  = Ožujka
+month-3-genitive  = Travnja
+month-4-genitive  = Svibnja
+month-5-genitive  = Lipnja
+month-6-genitive  = Srpnja
+month-7-genitive  = Kolovoza
+month-8-genitive  = Rujna
+month-9-genitive  = Listopada
+month-10-genitive = Studenoga
+month-11-genitive = Prosinca
+
+month-0-short  = Sij
+month-1-short  = Velj
+month-2-short  = Ožu
+month-3-short  = Tra
+month-4-short  = Svi
+month-5-short  = Lip
+month-6-short  = Srp
+month-7-short  = Kol
+month-8-short  = Ruj
+month-9-short  = Lis
+month-10-short = Stu
+month-11-short = Pro
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = upravo
+minutes-ago-long[one]   = prije minutu
+minutes-ago-long[two]   = prije {{value}} minute
+minutes-ago-long[few]   = prije {{value}} minutes
+minutes-ago-long[many]  = prije {{value}} minuta
+minutes-ago-long[other] = prije {{value}} minuta
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = upravo
+hours-ago-long[one]   = prije sat vremena
+hours-ago-long[two]   = prije {{value}} sata
+hours-ago-long[few]   = prije {{value}} sati
+hours-ago-long[many]  = prije {{value}} sati
+hours-ago-long[other] = prije {{value}} sati
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = danas
+days-ago-long[one]   = jučer
+days-ago-long[two]   = prije {{value}} dana
+days-ago-long[few]   = prije {{value}} dana
+days-ago-long[many]  = prije {{value}} dana
+days-ago-long[other] = prije {{value}} dana
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = ovaj tjedan
+weeks-ago-long[one]   = prošli tjedan
+weeks-ago-long[two]   = prije {{value}} tjedna
+weeks-ago-long[few]   = prije {{value}} tjedana
+weeks-ago-long[many]  = prije {{value}} tjedana
+weeks-ago-long[other] = prije {{value}} tjedana
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = ovaj mjesec
+months-ago-long[one]   = prošli mjesec
+months-ago-long[two]   = prije {{value}} mjeseca
+months-ago-long[few]   = prije {{value}} mjeseci
+months-ago-long[many]  = prije {{value}} mjeseci
+months-ago-long[other] = prije {{value}} mjeseci
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = ove godine
+years-ago-long[one]   = prošle godine
+years-ago-long[two]   = prije {{value}} godine
+years-ago-long[few]   = prije {{value}} godina
+years-ago-long[many]  = prije {{value}} godina
+years-ago-long[other] = prije {{value}} godina
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = upravo
+minutes-until-long[one]   = za minutu
+minutes-until-long[two]   = za {{value}} minute
+minutes-until-long[few]   = za {{value}} minuta
+minutes-until-long[many]  = za {{value}} minuta
+minutes-until-long[other] = za {{value}} minuta
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = upravo
+hours-until-long[one]   = za sat vremena
+hours-until-long[two]   = za {{value}} sata
+hours-until-long[few]   = za {{value}} sati
+hours-until-long[many]  = za {{value}} sati
+hours-until-long[other] = za {{value}} sati
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = danas
+days-until-long[one]   = sutra
+days-until-long[two]   = za {{value}} dana
+days-until-long[few]   = za {{value}} dana
+days-until-long[many]  = za {{value}} dana
+days-until-long[other] = za {{value}} dana
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = ovaj tjedan
+weeks-until-long[one]   = idući tjedan
+weeks-until-long[two]   = za {{value}} tjedna
+weeks-until-long[few]   = za {{value}} tjedana
+weeks-until-long[many]  = za {{value}} tjedana
+weeks-until-long[other] = za {{value}} tjedana
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = ovaj mjesec
+months-until-long[one]   = idući mjesec
+months-until-long[two]   = za {{value}} mjeseca
+months-until-long[few]   = za {{value}} mjeseci
+months-until-long[many]  = za {{value}} mjeseci
+months-until-long[other] = za {{value}} mjeseci
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = ove godine
+years-until-long[one]   = iduće godine
+years-until-long[two]   = za {{value}} godine
+years-until-long[few]   = za {{value}} godina
+years-until-long[many]  = za {{value}} godina
+years-until-long[other] = za {{value}} godina
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = upravo
+minutes-ago-short[other] = prije {{value}}m
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = upravo
+hours-ago-short[other] = prije {{value}}s
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = danas
+days-ago-short[other] = prije {{value}}d
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = sada
+minutes-until-short[other] = za {{value}}m
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = sada
+hours-until-short[other] = za {{value}}s
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = danas
+days-until-short[other] = za {{value}}d
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (netočan datum)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a %e %b %Y %H:%M:%S
+dateTimeFormat_%x = %d.%m.%Y
+dateTimeFormat_%X = %H:%M:%S
+
+shortTimeFormat = %H:%M
+shortDateTimeFormat = %x %H:%M
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 1
+
+# Localize “AM" and "PM" used in %p format for time
diff --git a/www/firefoxos/locales/date.hu.properties b/www/firefoxos/locales/date.hu.properties
new file mode 100644
index 0000000..40b5f2f
--- /dev/null
+++ b/www/firefoxos/locales/date.hu.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = Vasárnap
+weekday-1-long = Hétfő
+weekday-2-long = Kedd
+weekday-3-long = Szerda
+weekday-4-long = Csütörtök
+weekday-5-long = Péntek
+weekday-6-long = Szombat
+
+weekday-0-short = Va.
+weekday-1-short = Hé.
+weekday-2-short = Ke.
+weekday-3-short = Sze.
+weekday-4-short = Csü.
+weekday-5-short = Pé.
+weekday-6-short = Szo.
+
+# Month names
+
+month-0-long  = Január
+month-1-long  = Február
+month-2-long  = Március
+month-3-long  = Április
+month-4-long  = Május
+month-5-long  = Június
+month-6-long  = Július
+month-7-long  = Augusztus
+month-8-long  = Szeptember
+month-9-long  = Október
+month-10-long = November
+month-11-long = December
+
+month-0-genitive  = Január
+month-1-genitive  = Február
+month-2-genitive  = Március
+month-3-genitive  = Április
+month-4-genitive  = Május
+month-5-genitive  = Június
+month-6-genitive  = Július
+month-7-genitive  = Augusztus
+month-8-genitive  = Szeptember
+month-9-genitive  = Október
+month-10-genitive = November
+month-11-genitive = December
+
+month-0-short  = Jan
+month-1-short  = Feb
+month-2-short  = Már
+month-3-short  = Ápr
+month-4-short  = Máj
+month-5-short  = Jún
+month-6-short  = Júl
+month-7-short  = Aug
+month-8-short  = Szep
+month-9-short  = Okt
+month-10-short = Nov
+month-11-short = Dec
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = épp most
+minutes-ago-long[one]   = egy perccel ezelőtt
+minutes-ago-long[two]   = {{value}} perccel ezelőtt
+minutes-ago-long[few]   = {{value}} perccel ezelőtt
+minutes-ago-long[many]  = {{value}} perccel ezelőtt
+minutes-ago-long[other] = {{value}} perccel ezelőtt
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = épp most
+hours-ago-long[one]   = egy órája
+hours-ago-long[two]   = {{value}} órával ezelőtt
+hours-ago-long[few]   = {{value}} órával ezelőtt
+hours-ago-long[many]  = {{value}} órával ezelőtt
+hours-ago-long[other] = {{value}} órával ezelőtt
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = ma
+days-ago-long[one]   = tegnap
+days-ago-long[two]   = {{value}} nappal ezelőtt
+days-ago-long[few]   = {{value}} nappal ezelőtt
+days-ago-long[many]  = {{value}} nappal ezelőtt
+days-ago-long[other] = {{value}} nappal ezelőtt
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = ez a hét
+weeks-ago-long[one]   = múlt hét
+weeks-ago-long[two]   = {{value}} héttel ezelőtt
+weeks-ago-long[few]   = {{value}} héttel ezelőtt
+weeks-ago-long[many]  = {{value}} héttel ezelőtt
+weeks-ago-long[other] = {{value}} héttel ezelőtt
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = ez a hónap
+months-ago-long[one]   = előző hónap
+months-ago-long[two]   = {{value}} hónappal ezelőtt
+months-ago-long[few]   = {{value}} hónappal ezelőtt
+months-ago-long[many]  = {{value}} hónappal ezelőtt
+months-ago-long[other] = {{value}} hónappal ezelőtt
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = ez az év
+years-ago-long[one]   = tavaly
+years-ago-long[two]   = {{value}} évvel ezelőtt
+years-ago-long[few]   = {{value}} évvel ezelőtt
+years-ago-long[many]  = {{value}} évvel ezelőtt
+years-ago-long[other] = {{value}} évvel ezelőtt
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = most
+minutes-until-long[one]   = egy percen belül
+minutes-until-long[two]   = {{value}} percen belül
+minutes-until-long[few]   = {{value}} percen belül
+minutes-until-long[many]  = {{value}} percen belül
+minutes-until-long[other] = {{value}} percen belül
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = most
+hours-until-long[one]   = egy órán belül
+hours-until-long[two]   = {{value}} órán belül
+hours-until-long[few]   = {{value}} órán belül
+hours-until-long[many]  = {{value}} órán belül
+hours-until-long[other] = {{value}} órán belül
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = ma
+days-until-long[one]   = holnap
+days-until-long[two]   = {{value}} napon belül
+days-until-long[few]   = {{value}} napon belül
+days-until-long[many]  = {{value}} napon belül
+days-until-long[other] = {{value}} napon belül
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = ez a hét
+weeks-until-long[one]   = következő hét
+weeks-until-long[two]   = {{value}} héten belül
+weeks-until-long[few]   = {{value}} héten belül
+weeks-until-long[many]  = {{value}} héten belül
+weeks-until-long[other] = {{value}} héten belül
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = ez a hónap
+months-until-long[one]   = következő hónap
+months-until-long[two]   = {{value}} héten belül
+months-until-long[few]   = {{value}} héten belül
+months-until-long[many]  = {{value}} héten belül
+months-until-long[other] = {{value}} héten belül
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = ez az év
+years-until-long[one]   = következő év
+years-until-long[two]   = {{value}} éven belül
+years-until-long[few]   = {{value}} éven belül
+years-until-long[many]  = {{value}} éven belül
+years-until-long[other] = {{value}} éven belül
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = épp most
+minutes-ago-short[other] = {{value}}p ezelőtt
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = épp most
+hours-ago-short[other] = {{value}}ó ezelőtt
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = ma
+days-ago-short[other] = {{value}}n ezelőtt
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = most
+minutes-until-short[other] = {{value}} percen belül
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = most
+hours-until-short[other] = {{value}} órán belül
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = ma
+days-until-short[other] = {{value}} napon belül
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (helytelen dátum)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %Y. %b %d %a %H:%M:%S
+dateTimeFormat_%x = %Y. %m. %d.
+dateTimeFormat_%X = %H:%M:%S
+
+shortTimeFormat = %H:%M
+shortDateTimeFormat = %x %H:%M
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 0
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = DE
+time_pm = DU
diff --git a/www/firefoxos/locales/date.id.properties b/www/firefoxos/locales/date.id.properties
new file mode 100644
index 0000000..2c454fc
--- /dev/null
+++ b/www/firefoxos/locales/date.id.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = Minggu
+weekday-1-long = Senin
+weekday-2-long = Selasa
+weekday-3-long = Rabu
+weekday-4-long = Kamis
+weekday-5-long = Jumat
+weekday-6-long = Sabtu
+
+weekday-0-short = Min
+weekday-1-short = Sen
+weekday-2-short = Sel
+weekday-3-short = Rab
+weekday-4-short = Kam
+weekday-5-short = Jum
+weekday-6-short = Sab
+
+# Month names
+
+month-0-long  = Januari
+month-1-long  = Februari
+month-2-long  = Maret
+month-3-long  = April
+month-4-long  = Mei
+month-5-long  = Juni
+month-6-long  = Juli
+month-7-long  = Agustus
+month-8-long  = September
+month-9-long  = Oktober
+month-10-long = November
+month-11-long = Desember
+
+month-0-genitive  = Januari
+month-1-genitive  = Februari
+month-2-genitive  = Maret
+month-3-genitive  = April
+month-4-genitive  = Mei
+month-5-genitive  = Juni
+month-6-genitive  = Juli
+month-7-genitive  = Agustus
+month-8-genitive  = September
+month-9-genitive  = Oktober
+month-10-genitive = November
+month-11-genitive = Desember
+
+month-0-short  = Jan
+month-1-short  = Feb
+month-2-short  = Mar
+month-3-short  = Apr
+month-4-short  = Mei
+month-5-short  = Jun
+month-6-short  = Jul
+month-7-short  = Ags
+month-8-short  = Sep
+month-9-short  = Okt
+month-10-short = Nov
+month-11-short = Des
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = baru saja
+minutes-ago-long[one]   = semenit yang lalu
+minutes-ago-long[two]   = {{value}} menit lalu
+minutes-ago-long[few]   = {{value}} menit lalu
+minutes-ago-long[many]  = {{value}} menit lalu
+minutes-ago-long[other] = {{value}} menit lalu
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = baru saja
+hours-ago-long[one]   = sejam yang lalu
+hours-ago-long[two]   = {{value}} jam lalu
+hours-ago-long[few]   = {{value}} jam lalu
+hours-ago-long[many]  = {{value}} jam lalu
+hours-ago-long[other] = {{value}} jam lalu
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = hari ini
+days-ago-long[one]   = kemarin
+days-ago-long[two]   = {{value}} hari lalu
+days-ago-long[few]   = {{value}} hari lalu
+days-ago-long[many]  = {{value}} hari lalu
+days-ago-long[other] = {{value}} hari lalu
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = minggu ini
+weeks-ago-long[one]   = minggu lalu
+weeks-ago-long[two]   = {{value}} minggu lalu
+weeks-ago-long[few]   = {{value}} minggu lalu
+weeks-ago-long[many]  = {{value}} minggu lalu
+weeks-ago-long[other] = {{value}} minggu lalu
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = bulan ini
+months-ago-long[one]   = bulan lalu
+months-ago-long[two]   = {{value}} bulan lalu
+months-ago-long[few]   = {{value}} bulan lalu
+months-ago-long[many]  = {{value}} bulan lalu
+months-ago-long[other] = {{value}} bulan lalu
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = tahun ini
+years-ago-long[one]   = tahun lalu
+years-ago-long[two]   = {{value}} tahun lalu
+years-ago-long[few]   = {{value}} tahun lalu
+years-ago-long[many]  = {{value}} tahun lalu
+years-ago-long[other] = {{value}} tahun lalu
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = sekarang
+minutes-until-long[one]   = semenit lagi
+minutes-until-long[two]   = dalam {{value}} menit
+minutes-until-long[few]   = dalam {{value}} menit
+minutes-until-long[many]  = dalam {{value}} menit
+minutes-until-long[other] = dalam {{value}} menit
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = sekarang
+hours-until-long[one]   = sejam lagi
+hours-until-long[two]   = dalam {{value}} jam
+hours-until-long[few]   = dalam {{value}} jam
+hours-until-long[many]  = dalam {{value}} jam
+hours-until-long[other] = dalam {{value}} jam
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = hari ini
+days-until-long[one]   = besok
+days-until-long[two]   = dalam {{value}} hari
+days-until-long[few]   = dalam {{value}} hari
+days-until-long[many]  = dalam {{value}} hari
+days-until-long[other] = dalam {{value}} hari
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = minggu ini
+weeks-until-long[one]   = minggu depan
+weeks-until-long[two]   = dalam {{value}} minggu
+weeks-until-long[few]   = dalam {{value}} minggu
+weeks-until-long[many]  = dalam {{value}} minggu
+weeks-until-long[other] = dalam {{value}} minggu
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = bulan ini
+months-until-long[one]   = bulan depan
+months-until-long[two]   = dalam {{value}} bulan
+months-until-long[few]   = dalam {{value}} bulan
+months-until-long[many]  = dalam {{value}} bulan
+months-until-long[other] = dalam {{value}} bulan
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = tahun ini
+years-until-long[one]   = tahun depan
+years-until-long[two]   = dalam {{value}} tahun
+years-until-long[few]   = dalam {{value}} tahun
+years-until-long[many]  = dalam {{value}} tahun
+years-until-long[other] = dalam {{value}} tahun
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = baru saja
+minutes-ago-short[other] = {{value}}m lalu
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = baru saja
+hours-ago-short[other] = {{value}} jam lalu
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = hari ini
+days-ago-short[other] = {{value}} hari lalu
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = sekarang
+minutes-until-short[other] = dalam {{value}}m
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = sekarang
+hours-until-short[other] = dalam {{value}} jam
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = hari ini
+days-until-short[other] = dalam {{value}} hari
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (tanggal salah)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a, %e %b %Y %H.%M.%S
+dateTimeFormat_%x = %d/%m/%Y
+dateTimeFormat_%X = %H.%M.%S
+
+shortTimeFormat = %H.%M
+shortDateTimeFormat = %x %H.%M
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 0
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = AM
+time_pm = PM
diff --git a/www/firefoxos/locales/date.ini b/www/firefoxos/locales/date.ini
new file mode 100644
index 0000000..00678f0
--- /dev/null
+++ b/www/firefoxos/locales/date.ini
@@ -0,0 +1,227 @@
+; Licensed to the Apache Software Foundation (ASF) under one
+; or more contributor license agreements.  See the NOTICE file
+; distributed with this work for additional information
+; regarding copyright ownership.  The ASF licenses this file
+; to you under the Apache License, Version 2.0 (the
+; "License"); you may not use this file except in compliance
+; with the License.  You may obtain a copy of the License at
+;
+;   http://www.apache.org/licenses/LICENSE-2.0
+;
+; Unless required by applicable law or agreed to in writing,
+; software distributed under the License is distributed on an
+; "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+; KIND, either express or implied.  See the License for the
+; specific language governing permissions and limitations
+; under the License.
+
+
+@import url(date.en-US.properties)
+
+[ar]
+@import url(date.ar.properties)
+
+[as]
+@import url(date.as.properties)
+
+[ast]
+@import url(date.ast.properties)
+
+[bg]
+@import url(date.bg.properties)
+
+[bn-BD]
+@import url(date.bn-BD.properties)
+
+[bn-IN]
+@import url(date.bn-IN.properties)
+
+[ca]
+@import url(date.ca.properties)
+
+[cs]
+@import url(date.cs.properties)
+
+[cy]
+@import url(date.cy.properties)
+
+[da]
+@import url(date.da.properties)
+
+[de]
+@import url(date.de.properties)
+
+[el]
+@import url(date.el.properties)
+
+[en-GB]
+@import url(date.en-GB.properties)
+
+[en-US]
+@import url(date.en-US.properties)
+
+[eo]
+@import url(date.eo.properties)
+
+[es]
+@import url(date.es.properties)
+
+[et]
+@import url(date.et.properties)
+
+[eu]
+@import url(date.eu.properties)
+
+[ff]
+@import url(date.ff.properties)
+
+[fr]
+@import url(date.fr.properties)
+
+[fy-NL]
+@import url(date.fy-NL.properties)
+
+[ga-IE]
+@import url(date.ga-IE.properties)
+
+[gd]
+@import url(date.gd.properties)
+
+[gl]
+@import url(date.gl.properties)
+
+[gu]
+@import url(date.gu.properties)
+
+[he]
+@import url(date.he.properties)
+
+[hi-IN]
+@import url(date.hi-IN.properties)
+
+[hr]
+@import url(date.hr.properties)
+
+[hu]
+@import url(date.hu.properties)
+
+[id]
+@import url(date.id.properties)
+
+[it]
+@import url(date.it.properties)
+
+[ja]
+@import url(date.ja.properties)
+
+[km]
+@import url(date.km.properties)
+
+[kn]
+@import url(date.kn.properties)
+
+[ko]
+@import url(date.ko.properties)
+
+[lij]
+@import url(date.lij.properties)
+
+[mk]
+@import url(date.mk.properties)
+
+[ml]
+@import url(date.ml.properties)
+
+[ms]
+@import url(date.ms.properties)
+
+[nb-NO]
+@import url(date.nb-NO.properties)
+
+[ne-NP]
+@import url(date.ne-NP.properties)
+
+[nl]
+@import url(date.nl.properties)
+
+[or]
+@import url(date.or.properties)
+
+[pa]
+@import url(date.pa.properties)
+
+[pl]
+@import url(date.pl.properties)
+
+[pt-BR]
+@import url(date.pt-BR.properties)
+
+[ro]
+@import url(date.ro.properties)
+
+[ru]
+@import url(date.ru.properties)
+
+[si]
+@import url(date.si.properties)
+
+[sk]
+@import url(date.sk.properties)
+
+[sl]
+@import url(date.sl.properties)
+
+[sq]
+@import url(date.sq.properties)
+
+[sr-Cyrl]
+@import url(date.sr-Cyrl.properties)
+
+[sr-Latn]
+@import url(date.sr-Latn.properties)
+
+[sv-SE]
+@import url(date.sv-SE.properties)
+
+[te]
+@import url(date.te.properties)
+
+[th]
+@import url(date.th.properties)
+
+[tr]
+@import url(date.tr.properties)
+
+[ur]
+@import url(date.ur.properties)
+
+[vi]
+@import url(date.vi.properties)
+
+[zh-CN]
+@import url(date.zh-CN.properties)
+
+[zh-TW]
+@import url(date.zh-TW.properties)
+
+[lt]
+@import url(date.lt.properties)
+
+[mr]
+@import url(date.mr.properties)
+
+[ta]
+@import url(date.ta.properties)
+
+[xh]
+@import url(date.xh.properties)
+
+[sw]
+@import url(date.sw.properties)
+
+[mai]
+@import url(date.mai.properties)
+
+[son]
+@import url(date.son.properties)
+
diff --git a/www/firefoxos/locales/date.it.properties b/www/firefoxos/locales/date.it.properties
new file mode 100644
index 0000000..05e4e5a
--- /dev/null
+++ b/www/firefoxos/locales/date.it.properties
@@ -0,0 +1,178 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+weekday-0-long = domenica
+weekday-1-long = lunedì
+weekday-2-long = martedì
+weekday-3-long = mercoledì
+weekday-4-long = giovedì
+weekday-5-long = venerdì
+weekday-6-long = sabato
+weekday-0-short = dom
+weekday-1-short = lun
+weekday-2-short = mar
+weekday-3-short = mer
+weekday-4-short = gio
+weekday-5-short = ven
+weekday-6-short = sab
+month-0-long = gennaio
+month-1-long = febbraio
+month-2-long = marzo
+month-3-long = aprile
+month-4-long = maggio
+month-5-long = giugno
+month-6-long = luglio
+month-7-long = agosto
+month-8-long = settembre
+month-9-long = ottobre
+month-10-long = novembre
+month-11-long = dicembre
+month-0-genitive = gennaio
+month-1-genitive = febbraio
+month-2-genitive = marzo
+month-3-genitive = aprile
+month-4-genitive = maggio
+month-5-genitive = giugno
+month-6-genitive = luglio
+month-7-genitive = agosto
+month-8-genitive = settembre
+month-9-genitive = ottobre
+month-10-genitive = novembre
+month-11-genitive = dicembre
+month-0-short = gen
+month-1-short = feb
+month-2-short = mar
+month-3-short = apr
+month-4-short = mag
+month-5-short = giu
+month-6-short = lug
+month-7-short = ago
+month-8-short = set
+month-9-short = ott
+month-10-short = nov
+month-11-short = dic
+minutes-ago-long = {[ plural(value) ]}
+minutes-ago-long[zero] = adesso
+minutes-ago-long[one] = un minuto fa
+minutes-ago-long[two] = {{value}} minuti fa
+minutes-ago-long[few] = {{value}} minuti fa
+minutes-ago-long[many] = {{value}} minuti fa
+minutes-ago-long[other] = {{value}} minuti fa
+hours-ago-long = {[ plural(value) ]}
+hours-ago-long[zero] = adesso
+hours-ago-long[one] = un’ora fa
+hours-ago-long[two] = {{value}} ore fa
+hours-ago-long[few] = {{value}} ore fa
+hours-ago-long[many] = {{value}} ore fa
+hours-ago-long[other] = {{value}} ore fa
+days-ago-long = {[ plural(value) ]}
+days-ago-long[zero] = oggi
+days-ago-long[one] = ieri
+days-ago-long[two] = {{value}} giorni fa
+days-ago-long[few] = {{value}} giorni fa
+days-ago-long[many] = {{value}} giorni fa
+days-ago-long[other] = {{value}} giorni fa
+weeks-ago-long = {[ plural(value) ]}
+weeks-ago-long[zero] = questa settimana
+weeks-ago-long[one] = settimana scorsa
+weeks-ago-long[two] = {{value}} settimane fa
+weeks-ago-long[few] = {{value}} settimane fa
+weeks-ago-long[many] = {{value}} settimane fa
+weeks-ago-long[other] = {{value}} settimane fa
+months-ago-long = {[ plural(value) ]}
+months-ago-long[zero] = questo mese
+months-ago-long[one] = mese scorso
+months-ago-long[two] = {{value}} mesi fa
+months-ago-long[few] = {{value}} mesi fa
+months-ago-long[many] = {{value}} mesi fa
+months-ago-long[other] = {{value}} mesi fa
+years-ago-long = {[ plural(value) ]}
+years-ago-long[zero] = quest’anno
+years-ago-long[one] = anno scorso
+years-ago-long[two] = {{value}} anni fa
+years-ago-long[few] = {{value}} anni fa
+years-ago-long[many] = {{value}} anni fa
+years-ago-long[other] = {{value}} anni fa
+minutes-until-long = {[ plural(value) ]}
+minutes-until-long[zero] = adesso
+minutes-until-long[one] = tra un minuto
+minutes-until-long[two] = tra {{value}} minuti
+minutes-until-long[few] = tra {{value}} minuti
+minutes-until-long[many] = tra {{value}} minuti
+minutes-until-long[other] = tra {{value}} minuti
+hours-until-long = {[ plural(value) ]}
+hours-until-long[zero] = adesso
+hours-until-long[one] = tra un’ora
+hours-until-long[two] = tra {{value}} ore
+hours-until-long[few] = tra {{value}} ore
+hours-until-long[many] = tra {{value}} ore
+hours-until-long[other] = tra {{value}} ore
+days-until-long = {[ plural(value) ]}
+days-until-long[zero] = oggi
+days-until-long[one] = domani
+days-until-long[two] = tra {{value}} giorni
+days-until-long[few] = tra {{value}} giorni
+days-until-long[many] = tra {{value}} giorni
+days-until-long[other] = tra {{value}} giorni
+weeks-until-long = {[ plural(value) ]}
+weeks-until-long[zero] = questa settimana
+weeks-until-long[one] = prossima settimana
+weeks-until-long[two] = tra {{value}} settimane
+weeks-until-long[few] = tra {{value}} settimane
+weeks-until-long[many] = tra {{value}} settimane
+weeks-until-long[other] = tra {{value}} settimane
+months-until-long = {[ plural(value) ]}
+months-until-long[zero] = questo mese
+months-until-long[one] = prossimo mese
+months-until-long[two] = in {{value}} mesi
+months-until-long[few] = tra {{value}} mesi
+months-until-long[many] = tra {{value}} mesi
+months-until-long[other] = in {{value}} mesi
+years-until-long = {[ plural(value) ]}
+years-until-long[zero] = quest’anno
+years-until-long[one] = prossimo anno
+years-until-long[two] = tra {{value}} anni
+years-until-long[few] = tra {{value}} anni
+years-until-long[many] = tra {{value}} anni
+years-until-long[other] = tra {{value}} anni
+minutes-ago-short = {[ plural(value) ]}
+minutes-ago-short[zero] = adesso
+minutes-ago-short[other] = {{value}}m fa
+hours-ago-short = {[ plural(value) ]}
+hours-ago-short[zero] = adesso
+hours-ago-short[other] = {{value}}h fa
+days-ago-short = {[ plural(value) ]}
+days-ago-short[zero] = oggi
+days-ago-short[other] = {{value}}g fa
+minutes-until-short = {[ plural(value) ]}
+minutes-until-short[zero] = adesso
+minutes-until-short[other] = tra {{value}}m
+hours-until-short = {[ plural(value) ]}
+hours-until-short[zero] = adesso
+hours-until-short[other] = tra {{value}}h
+days-until-short = {[ plural(value) ]}
+days-until-short[zero] = oggi
+days-until-short[other] = tra {{value}}d
+incorrectDate = (data errata)
+dateTimeFormat_%c = %a %e %b %Y %H:%M:%S
+dateTimeFormat_%x = %d/%m/%Y
+dateTimeFormat_%X = %H:%M:%S
+shortTimeFormat = %H:%M
+shortDateTimeFormat = %x %H:%M
+weekStartsOnMonday = 1
+time_am = AM
+time_pm = PM
diff --git a/www/firefoxos/locales/date.ja.properties b/www/firefoxos/locales/date.ja.properties
new file mode 100644
index 0000000..20b5128
--- /dev/null
+++ b/www/firefoxos/locales/date.ja.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = 日曜日
+weekday-1-long = 月曜日
+weekday-2-long = 火曜日
+weekday-3-long = 水曜日
+weekday-4-long = 木曜日
+weekday-5-long = 金曜日
+weekday-6-long = 土曜日
+
+weekday-0-short = 日
+weekday-1-short = 月
+weekday-2-short = 火
+weekday-3-short = 水
+weekday-4-short = 木
+weekday-5-short = 金
+weekday-6-short = 土
+
+# Month names
+
+month-0-long  = 1月
+month-1-long  = 2月
+month-2-long  = 3月
+month-3-long  = 4月
+month-4-long  = 5月
+month-5-long  = 6月
+month-6-long  = 7月
+month-7-long  = 8月
+month-8-long  = 9月
+month-9-long  = 10月
+month-10-long = 11月
+month-11-long = 12月
+
+month-0-genitive  = 1月
+month-1-genitive  = 2月
+month-2-genitive  = 3月
+month-3-genitive  = 4月
+month-4-genitive  = 5月
+month-5-genitive  = 6月
+month-6-genitive  = 7月
+month-7-genitive  = 8月
+month-8-genitive  = 9月
+month-9-genitive  = 10月
+month-10-genitive = 11月
+month-11-genitive = 12月
+
+month-0-short  = 1月
+month-1-short  = 2月
+month-2-short  = 3月
+month-3-short  = 4月
+month-4-short  = 5月
+month-5-short  = 6月
+month-6-short  = 7月
+month-7-short  = 8月
+month-8-short  = 9月
+month-9-short  = 10月
+month-10-short = 11月
+month-11-short = 12月
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = 1分以内
+minutes-ago-long[one]   = 1分前
+minutes-ago-long[two]   = {{value}}分前
+minutes-ago-long[few]   = {{value}}分前
+minutes-ago-long[many]  = {{value}}分前
+minutes-ago-long[other] = {{value}}分前
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = 1時間以内
+hours-ago-long[one]   = 1時間前
+hours-ago-long[two]   = {{value}}時間前
+hours-ago-long[few]   = {{value}}時間前
+hours-ago-long[many]  = {{value}}時間前
+hours-ago-long[other] = {{value}}時間前
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = 今日
+days-ago-long[one]   = 昨日
+days-ago-long[two]   = {{value}}日前
+days-ago-long[few]   = {{value}}日前
+days-ago-long[many]  = {{value}}日前
+days-ago-long[other] = {{value}}日前
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = 今週
+weeks-ago-long[one]   = 先週
+weeks-ago-long[two]   = {{value}}週間前
+weeks-ago-long[few]   = {{value}}週間前
+weeks-ago-long[many]  = {{value}}週間前
+weeks-ago-long[other] = {{value}}週間前
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = 今月
+months-ago-long[one]   = 先月
+months-ago-long[two]   = {{value}}か月前
+months-ago-long[few]   = {{value}}か月前
+months-ago-long[many]  = {{value}}か月前
+months-ago-long[other] = {{value}}か月前
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = 今年
+years-ago-long[one]   = 昨年
+years-ago-long[two]   = {{value}}年前
+years-ago-long[few]   = {{value}}年前
+years-ago-long[many]  = {{value}}年前
+years-ago-long[other] = {{value}}年前
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = 1分以内
+minutes-until-long[one]   = 1分後
+minutes-until-long[two]   = {{value}}分後
+minutes-until-long[few]   = {{value}}分後
+minutes-until-long[many]  = {{value}}分後
+minutes-until-long[other] = {{value}}分後
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = 1時間以内
+hours-until-long[one]   = 1時間後
+hours-until-long[two]   = {{value}}時間後
+hours-until-long[few]   = {{value}}時間後
+hours-until-long[many]  = {{value}}時間後
+hours-until-long[other] = {{value}}時間後
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = 今日
+days-until-long[one]   = 明日
+days-until-long[two]   = {{value}}日後
+days-until-long[few]   = {{value}}日後
+days-until-long[many]  = {{value}}日後
+days-until-long[other] = {{value}}日後
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = 今週
+weeks-until-long[one]   = 来週
+weeks-until-long[two]   = {{value}}週間後
+weeks-until-long[few]   = {{value}}週間後
+weeks-until-long[many]  = {{value}}週間後
+weeks-until-long[other] = {{value}}週間後
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = 今月
+months-until-long[one]   = 来月
+months-until-long[two]   = {{value}}か月後
+months-until-long[few]   = {{value}}か月後
+months-until-long[many]  = {{value}}か月後
+months-until-long[other] = {{value}}か月後
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = 今年
+years-until-long[one]   = 来年
+years-until-long[two]   = {{value}}年後
+years-until-long[few]   = {{value}}年後
+years-until-long[many]  = {{value}}年後
+years-until-long[other] = {{value}}年後
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = 直前
+minutes-ago-short[other] = {{value}}分前
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = 数分前
+hours-ago-short[other] = {{value}}時間前
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = 今日
+days-ago-short[other] = {{value}}日前
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = 直後
+minutes-until-short[other] = {{value}}分後
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = 数分後
+hours-until-short[other] = {{value}}時間後
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = 今日
+days-until-short[other] = {{value}}日後
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (日付が不正です)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+## %R の使用不可 Bug 794662
+# 24 時間表記: %Y年%b%e日(%a) %H:%M:%S
+dateTimeFormat_%c = %Y年%b%e日(%a) %p%I:%M:%S
+dateTimeFormat_%x = %Y/%m/%d
+dateTimeFormat_%X = %p%I:%M:%S
+
+shortTimeFormat = %p%I:%M
+shortDateTimeFormat = %x %p%I:%M
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 0
+
+# Localize "AM" and "PM" used in %p format for time
+time_am = 午前
+time_pm = 午後
diff --git a/www/firefoxos/locales/date.km.properties b/www/firefoxos/locales/date.km.properties
new file mode 100644
index 0000000..00a5d4a
--- /dev/null
+++ b/www/firefoxos/locales/date.km.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = អាទិត្យ
+weekday-1-long = ច័ន្ទ
+weekday-2-long = អង្គារ
+weekday-3-long = ពុធ
+weekday-4-long = ព្រហស្បតិ៍
+weekday-5-long = សុក្រ
+weekday-6-long = សៅរ៍
+
+weekday-0-short = អាទិត្យ
+weekday-1-short = ច័ន្ទ
+weekday-2-short = អង្គារ
+weekday-3-short = ពុធ
+weekday-4-short = ព្រហស្បតិ៍
+weekday-5-short = សុក្រ
+weekday-6-short = សៅរ៍
+
+# Month names
+
+month-0-long  = មករា
+month-1-long  = កុម្ភៈ
+month-2-long  = មីនា
+month-3-long  = មេសា
+month-4-long  = ឧសភា
+month-5-long  = មិថុនា
+month-6-long  = កក្កដា
+month-7-long  = សីហា
+month-8-long  = កញ្ញា
+month-9-long  = តុលា
+month-10-long = វិច្ឆិកា
+month-11-long = ធ្នូ
+
+month-0-genitive  = មករា
+month-1-genitive  = កុម្ភៈ
+month-2-genitive  = មីនា
+month-3-genitive  = មេសា
+month-4-genitive  = ឧសភា
+month-5-genitive  = មិថុនា
+month-6-genitive  = កក្កដា
+month-7-genitive  = សីហា
+month-8-genitive  = កញ្ញា
+month-9-genitive  = តុលា
+month-10-genitive = វិច្ឆិកា
+month-11-genitive = ធ្នូ
+
+month-0-short  = មករា
+month-1-short  = កុម្ភៈ
+month-2-short  = មីនា
+month-3-short  = មេសា
+month-4-short  = ឧសភា
+month-5-short  = មិថុនា
+month-6-short  = កក្កដា
+month-7-short  = សីហា
+month-8-short  = កញ្ញា
+month-9-short  = តុលា
+month-10-short = វិច្ឆិកា
+month-11-short = ធ្នូ
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = អម្បាញ់មិញនេះ
+minutes-ago-long[one]   = មួយ​នាទី​មុន
+minutes-ago-long[two]   = {{value}} នាទី​មុន
+minutes-ago-long[few]   = {{value}} នាទី​មុន
+minutes-ago-long[many]  = {{value}} នាទី​មុន
+minutes-ago-long[other] = {{value}} នាទី​មុន
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = អម្បាញ់មិញនេះ
+hours-ago-long[one]   = មួយ​ម៉ោង​មុន
+hours-ago-long[two]   = {{value}} ម៉ោង​មុន
+hours-ago-long[few]   = {{value}} ម៉ោង​មុន
+hours-ago-long[many]  = {{value}} ម៉ោង​មុន
+hours-ago-long[other] = {{value}} ម៉ោង​មុន
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = ថ្ងៃ​នេះ
+days-ago-long[one]   = ម្សិលមិញ
+days-ago-long[two]   = {{value}} ថ្ងៃ​មុន
+days-ago-long[few]   = {{value}} ថ្ងៃ​មុន
+days-ago-long[many]  = {{value}} ថ្ងៃ​មុន
+days-ago-long[other] = {{value}} ថ្ងៃ​មុន
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = សប្ដាហ៍​នេះ
+weeks-ago-long[one]   = សប្ដាហ៍​មុន
+weeks-ago-long[two]   = {{value}} សប្ដាហ៍​មុន
+weeks-ago-long[few]   = {{value}} សប្ដាហ៍​មុន
+weeks-ago-long[many]  = {{value}} សប្ដាហ៍​មុន
+weeks-ago-long[other] = {{value}} សប្ដាហ៍​មុន
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = ខែ​នេះ
+months-ago-long[one]   = ខែ​មុន
+months-ago-long[two]   = {{value}} ខែ​មុន
+months-ago-long[few]   = {{value}} ខែ​មុន
+months-ago-long[many]  = {{value}} ខែ​មុន
+months-ago-long[other] = {{value}} ខែ​មុន
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = ឆ្នាំនេះ
+years-ago-long[one]   = ឆ្នាំ​មុន
+years-ago-long[two]   = {{value}} ឆ្នាំ​មុន
+years-ago-long[few]   = {{value}} ឆ្នាំ​មុន
+years-ago-long[many]  = {{value}} ឆ្នាំ​មុន
+years-ago-long[other] = {{value}} ឆ្នាំ​មុន
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = ឥឡូវ
+minutes-until-long[one]   = ក្នុង​ពេល​មួយ​នាទី
+minutes-until-long[two]   = ក្នុង​ពេល {{value}} នាទី
+minutes-until-long[few]   = ក្នុង​ពេល {{value}} នាទី
+minutes-until-long[many]  = ក្នុង​ពេល​ {{value}} នាទី​
+minutes-until-long[other] = ក្នុង​ពេល {{value}} នាទី
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = ឥឡូវ
+hours-until-long[one]   = ក្នុង​រយៈពេល​១​ម៉ោង
+hours-until-long[two]   = ក្នុង​ពេល​​ {{value}} ម៉ោង
+hours-until-long[few]   = ក្នុង​ពេល​​ {{value}} ម៉ោង
+hours-until-long[many]  = ក្នុង​ពេល​​ {{value}} ម៉ោង
+hours-until-long[other] = ក្នុង​ពេល​​ {{value}} ម៉ោង
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = ថ្ងៃ​នេះ
+days-until-long[one]   = ថ្ងៃស្អែក
+days-until-long[two]   = ក្នុង​ពេល​​ {{value}} ថ្ងៃ
+days-until-long[few]   = ក្នុង​ពេល​​ {{value}} ថ្ងៃ
+days-until-long[many]  = ក្នុង​ពេល​​ {{value}} ថ្ងៃ
+days-until-long[other] = ក្នុង​ពេល​​ {{value}} ថ្ងៃ
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = សប្ដាហ៍​នេះ
+weeks-until-long[one]   = សប្ដាហ៍​ក្រោយ
+weeks-until-long[two]   = ក្នុង​ពេល {{value}} សប្ដាហ៍
+weeks-until-long[few]   = ក្នុង​ពេល {{value}} សប្ដាហ៍
+weeks-until-long[many]  = ក្នុង​ពេល {{value}} សប្ដាហ៍
+weeks-until-long[other] = ក្នុង​ពេល {{value}} សប្ដាហ៍
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = ខែ​នេះ
+months-until-long[one]   = ខែ​ក្រោយ
+months-until-long[two]   = ក្នុង​ពេល {{value}} ខែ
+months-until-long[few]   = ក្នុង​ពេល {{value}} ខែ
+months-until-long[many]  = ក្នុង​ពេល {{value}} ខែ
+months-until-long[other] = ក្នុង​ពេល {{value}} ខែ
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = ឆ្នាំនេះ
+years-until-long[one]   = ឆ្នាំ​ក្រោយ
+years-until-long[two]   = ក្នុង​ពេល {{value}} ឆ្នាំ
+years-until-long[few]   = ក្នុង​ពេល {{value}} ឆ្នាំ
+years-until-long[many]  = ក្នុង​ពេល {{value}} ឆ្នាំ
+years-until-long[other] = ក្នុង​ពេល {{value}} ឆ្នាំ
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = អម្បាញ់មិញនេះ
+minutes-ago-short[other] = {{value}}នាទី​មុន
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = អម្បាញ់មិញនេះ
+hours-ago-short[other] = {{value}}ម៉ោង​មុន
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = ថ្ងៃ​នេះ
+days-ago-short[other] = {{value}}ថ្ងៃ​មុន
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = ឥឡូវ
+minutes-until-short[other] = ក្នុង​ពេល {{value}}នាទី
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = ឥឡូវ
+hours-until-short[other] = ក្នុង​ពេល {{value}}ម៉ោង
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = ថ្ងៃ​នេះ
+days-until-short[other] = ក្នុង​ពេល {{value}}ថ្ងៃ
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (កាលបរិច្ឆេទ​មិន​ត្រឹមត្រូវ)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a %b %e %Y %I:%M:%S %p
+dateTimeFormat_%x = %m/%d/%Y
+dateTimeFormat_%X = %I:%M:%S %p
+
+shortTimeFormat = %I:%M %p
+shortDateTimeFormat = %x %I:%M %p
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 0
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = ព្រឹក
+time_pm = PM
diff --git a/www/firefoxos/locales/date.kn.properties b/www/firefoxos/locales/date.kn.properties
new file mode 100644
index 0000000..3acf623
--- /dev/null
+++ b/www/firefoxos/locales/date.kn.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = ಭಾನುವಾರ
+weekday-1-long = ಸೋಮವಾರ
+weekday-2-long = ಮಂಗಳವಾರ
+weekday-3-long = ಬುಧವಾರ
+weekday-4-long = ಗುರುವಾರ
+weekday-5-long = ಶುಕ್ರವಾರ
+weekday-6-long = ಶನಿವಾರ
+
+weekday-0-short = ಭಾನು
+weekday-1-short = ಸೋಮ
+weekday-2-short = ಮಂಗಳ
+weekday-3-short = ಬುಧ
+weekday-4-short = ಗುರು
+weekday-5-short = ಶುಕ್ರ
+weekday-6-short = ಶನಿ
+
+# Month names
+
+month-0-long  = ಜನವರಿ
+month-1-long  = ಫೆಬ್ರವರಿ
+month-2-long  = ಮಾರ್ಚ್
+month-3-long  = ಏಪ್ರಿಲ್
+month-4-long  = ಮೇ
+month-5-long  = ಜೂನ್
+month-6-long  = ಜುಲೈ
+month-7-long  = ಆಗಸ್ಟ್‍
+month-8-long  = ಸಪ್ಟೆಂಬರ್
+month-9-long  = ಅಕ್ಟೋಬರ್
+month-10-long = ನವೆಂಬರ್
+month-11-long = ಡಿಸೆಂಬರ್
+
+month-0-genitive  = ಜನವರಿ
+month-1-genitive  = ಫೆಬ್ರವರಿ
+month-2-genitive  = ಮಾರ್ಚ್
+month-3-genitive  = ಮಾರ್ಚ್
+month-4-genitive  = ಮೇ
+month-5-genitive  = ಜೂನ್
+month-6-genitive  = ಜುಲೈ
+month-7-genitive  = ಆಗಸ್ಟ್‍
+month-8-genitive  = ಸಪ್ಟೆಂಬರ್
+month-9-genitive  = ಅಕ್ಟೋಬರ್
+month-10-genitive = ನವೆಂಬರ್
+month-11-genitive = ಡಿಸೆಂಬರ್
+
+month-0-short  = ಜನ
+month-1-short  = ಫೆಬ್ರ
+month-2-short  = ಮಾರ್ಚ್
+month-3-short  = ಏಪ್ರಿ
+month-4-short  = ಮೇ
+month-5-short  = ಜೂನ್
+month-6-short  = ಜುಲೈ
+month-7-short  = ಆಗಸ್ಟ್
+month-8-short  = ಸೆಪ್ಟೆ
+month-9-short  = ಅಕ್ಟೋ
+month-10-short = ನವೆಂ
+month-11-short = ಡಿಸೆಂ
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = ಈಗಷ್ಟೆ
+minutes-ago-long[one]   = ಒಂದು ನಿಮಿಷದ ಹಿಂದೆ
+minutes-ago-long[two]   = {{value}} ನಿಮಿಷಗಳ ಹಿಂದೆ
+minutes-ago-long[few]   = {{value}} ನಿಮಿಷಗಳ ಹಿಂದೆ
+minutes-ago-long[many]  = {{value}} ನಿಮಿಷಗಳ ಹಿಂದೆ
+minutes-ago-long[other] = {{value}} ನಿಮಿಷಗಳ ಹಿಂದೆ
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = ಈಗಷ್ಟೆ
+hours-ago-long[one]   = ಒಂದು ಗಂಟೆಯ ಹಿಂದೆ
+hours-ago-long[two]   = {{value}} ಗಂಟೆಗಳ ಹಿಂದೆ
+hours-ago-long[few]   = {{value}} ಗಂಟೆಗಳ ಹಿಂದೆ
+hours-ago-long[many]  = {{value}} ಗಂಟೆಗಳ ಹಿಂದೆ
+hours-ago-long[other] = {{value}} ಗಂಟೆಗಳ ಹಿಂದೆ
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = ಇಂದು
+days-ago-long[one]   = ನಿನ್ನೆ
+days-ago-long[two]   = {{value}} ದಿನಗಳ ಹಿಂದೆ
+days-ago-long[few]   = {{value}} ದಿನಗಳ ಹಿಂದೆ
+days-ago-long[many]  = {{value}} ದಿನಗಳ ಹಿಂದೆ
+days-ago-long[other] = {{value}} ದಿನಗಳ ಹಿಂದೆ
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = ಈ ವಾರ
+weeks-ago-long[one]   = ಹಿಂದಿನ ವಾರ
+weeks-ago-long[two]   = {{value}} ವಾರಗಳ ಹಿಂದೆ
+weeks-ago-long[few]   = {{value}} ವಾರಗಳ ಹಿಂದೆ
+weeks-ago-long[many]  = {{value}} ವಾರಗಳ ಹಿಂದೆ
+weeks-ago-long[other] = {{value}} ವಾರಗಳ ಹಿಂದೆ
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = ಈ ತಿಂಗಳು
+months-ago-long[one]   = ಹಿಂದಿನ ತಿಂಗಳು
+months-ago-long[two]   = {{value}} ತಿಂಗಳುಗಳ ಹಿಂದೆ
+months-ago-long[few]   = {{value}} ತಿಂಗಳುಗಳ ಹಿಂದೆ
+months-ago-long[many]  = {{value}} ತಿಂಗಳುಗಳ ಹಿಂದೆ
+months-ago-long[other] = {{value}} ತಿಂಗಳುಗಳ ಹಿಂದೆ
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = ಈ ವರ್ಷ
+years-ago-long[one]   = ಹಿಂದಿನ ವರ್ಷ
+years-ago-long[two]   = {{value}} ವರ್ಷಗಳ ಹಿಂದೆ
+years-ago-long[few]   = {{value}} ವರ್ಷಗಳ ಹಿಂದೆ
+years-ago-long[many]  = {{value}} ವರ್ಷಗಳ ಹಿಂದೆ
+years-ago-long[other] = {{value}} ವರ್ಷಗಳ ಹಿಂದೆ
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = ಈಗ
+minutes-until-long[one]   = ಒಂದು ನಿಮಿಷದಲ್ಲಿ
+minutes-until-long[two]   = {{value}} ನಿಮಿಷಗಳಲ್ಲಿ
+minutes-until-long[few]   = {{value}} ನಿಮಿಷಗಳಲ್ಲಿ
+minutes-until-long[many]  = {{value}} ನಿಮಿಷಗಳಲ್ಲಿ
+minutes-until-long[other] = {{value}} ನಿಮಿಷಗಳಲ್ಲಿ
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = ಈಗ
+hours-until-long[one]   = ಒಂದು ಗಂಟೆಯಲ್ಲಿ
+hours-until-long[two]   = {{value}} ಗಂಟೆಗಳಲ್ಲಿ
+hours-until-long[few]   = {{value}} ಗಂಟೆಗಳಲ್ಲಿ
+hours-until-long[many]  = {{value}} ಗಂಟೆಗಳಲ್ಲಿ
+hours-until-long[other] = {{value}} ಗಂಟೆಗಳಲ್ಲಿ
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = ಇಂದು
+days-until-long[one]   = ನಾಳೆ
+days-until-long[two]   = {{value}} ದಿನಗಳಲ್ಲಿ
+days-until-long[few]   = {{value}} ದಿನಗಳಲ್ಲಿ
+days-until-long[many]  = {{value}} ದಿನಗಳಲ್ಲಿ
+days-until-long[other] = {{value}} ದಿನಗಳಲ್ಲಿ
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = ಈ ವಾರ
+weeks-until-long[one]   = ಮುಂದಿನ ವಾರ
+weeks-until-long[two]   = {{value}} ವಾರಗಳಲ್ಲಿ
+weeks-until-long[few]   = {{value}} ವಾರಗಳಲ್ಲಿ
+weeks-until-long[many]  = {{value}} ವಾರಗಳಲ್ಲಿ
+weeks-until-long[other] = {{value}} ವಾರಗಳಲ್ಲಿ
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = ಈ ತಿಂಗಳು
+months-until-long[one]   = ಮುಂದಿನ ತಿಂಗಳು
+months-until-long[two]   = {{value}} ತಿಂಗಳಲ್ಲಿ
+months-until-long[few]   = {{value}} ತಿಂಗಳಲ್ಲಿ
+months-until-long[many]  = {{value}} ತಿಂಗಳಲ್ಲಿ
+months-until-long[other] = {{value}} ತಿಂಗಳಲ್ಲಿ
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = ಈ ವರ್ಷ
+years-until-long[one]   = ಮುಂದಿನ ವರ್ಷ
+years-until-long[two]   = {{value}} ವರ್ಷಗಳಲ್ಲಿ
+years-until-long[few]   = {{value}} ವರ್ಷಗಳಲ್ಲಿ
+years-until-long[many]  = {{value}} ವರ್ಷಗಳಲ್ಲಿ
+years-until-long[other] = {{value}} ವರ್ಷಗಳಲ್ಲಿ
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = ಈಗಷ್ಟೆ
+minutes-ago-short[other] = {{value}}ನಿ ಹಿಂದೆ
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = ಈಗಷ್ಟೆ
+hours-ago-short[other] = {{value}}ಗಂ ಹಿಂದೆ
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = ಇಂದು
+days-ago-short[other] = {{value}}ದಿ ಹಿಂದೆ
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = ಈಗ
+minutes-until-short[other] = {{value}}ನಿ ಗಳಲ್ಲಿ
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = ಈಗ
+hours-until-short[other] = {{value}}h ನಲ್ಲಿ
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = ಇಂದು
+days-until-short[other] = {{value}}ದಿನಗಳಲ್ಲಿ
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (ತಪ್ಪಾದ ದಿನಾಂಕ)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a %b %e %Y %I:%M:%S %p
+dateTimeFormat_%x = %m/%d/%Y
+dateTimeFormat_%X = %I:%M:%S %p
+
+shortTimeFormat = %I:%M %p
+shortDateTimeFormat = %x %I:%M %p
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 0
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = AM
+time_pm = PM
diff --git a/www/firefoxos/locales/date.ko.properties b/www/firefoxos/locales/date.ko.properties
new file mode 100644
index 0000000..e45c76d
--- /dev/null
+++ b/www/firefoxos/locales/date.ko.properties
@@ -0,0 +1,225 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = 일요일
+weekday-1-long = 월요일
+weekday-2-long = 화요일
+weekday-3-long = 수요일
+weekday-4-long = 목요일
+weekday-5-long = 금요일
+weekday-6-long = 토요일
+
+weekday-0-short = 일
+weekday-1-short = 월
+weekday-2-short = 화
+weekday-3-short = 수
+weekday-4-short = 목
+weekday-5-short = 금
+weekday-6-short = 토
+
+# Month names
+
+month-0-long  = 1월
+month-1-long  = 2월
+month-2-long  = 3월
+month-3-long  = 4월
+month-4-long  = 5월
+month-5-long  = 6월
+month-6-long  = 7월
+month-7-long  = 8월
+month-8-long  = 9월
+month-9-long  = 10월
+month-10-long = 11월
+month-11-long = 12월
+
+month-0-genitive  = 1월
+month-1-genitive  = 2월
+month-2-genitive  = 3월
+month-3-genitive  = 4월
+month-4-genitive  = 5월
+month-5-genitive  = 6월
+month-6-genitive  = 7월
+month-7-genitive  = 8월
+month-8-genitive  = 9월
+month-9-genitive  = 10월
+month-10-genitive = 11월
+month-11-genitive = 12월
+
+month-0-short  = 1월
+month-1-short  = 2월
+month-2-short  = 3월
+month-3-short  = 4월
+month-4-short  = 5월
+month-5-short  = 6월
+month-6-short  = 7월
+month-7-short  = 8월
+month-8-short  = 9월
+month-9-short  = 10월
+month-10-short = 11월
+month-11-short = 12월
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = 지금
+minutes-ago-long[one]   = 1분 전
+minutes-ago-long[two]   = {{value}}분 전
+minutes-ago-long[few]   = {{value}}분 전
+minutes-ago-long[many]  = {{value}}분 전
+minutes-ago-long[other] = {{value}}분 전
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = 지금
+hours-ago-long[one]   = 1시간 전
+hours-ago-long[two]   = {{value}}시간 전
+hours-ago-long[few]   = {{value}}시간 전
+hours-ago-long[many]  = {{value}}시간 전
+hours-ago-long[other] = {{value}}시간 전
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = 오늘
+days-ago-long[one]   = 어제
+days-ago-long[two]   = {{value}}일 전
+days-ago-long[few]   = {{value}}일 전
+days-ago-long[many]  = {{value}}일 전
+days-ago-long[other] = {{value}}일 전
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = 이번 주
+weeks-ago-long[one]   = 지난 주
+weeks-ago-long[two]   = {{value}}주 전
+weeks-ago-long[few]   = {{value}}주 전
+weeks-ago-long[many]  = {{value}}주 전
+weeks-ago-long[other] = {{value}}주 전
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = 이번 달
+months-ago-long[one]   = 지난 달
+months-ago-long[two]   = {{value}}개월 전
+months-ago-long[few]   = {{value}}개월 전
+months-ago-long[many]  = {{value}}개월 전
+months-ago-long[other] = {{value}}개월 전
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = 올해
+years-ago-long[one]   = 작년
+years-ago-long[two]   = {{value}}년 전
+years-ago-long[few]   = {{value}}년 전
+years-ago-long[many]  = {{value}}년 전
+years-ago-long[other] = {{value}}년 전
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = 지금
+minutes-until-long[one]   = 1분 후
+minutes-until-long[two]   = {{value}}분 후
+minutes-until-long[few]   = {{value}}분 후
+minutes-until-long[many]  = {{value}}분 후
+minutes-until-long[other] = {{value}}분 후
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = 지금
+hours-until-long[one]   = 한 시간 후
+hours-until-long[two]   = {{value}}시간 후
+hours-until-long[few]   = {{value}}시간 후
+hours-until-long[many]  = {{value}}시간 후
+hours-until-long[other] = {{value}}시간 후
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = 오늘
+days-until-long[one]   = 내일
+days-until-long[two]   = {{value}}일 후
+days-until-long[few]   = {{value}}일 후
+days-until-long[many]  = {{value}}일 후
+days-until-long[other] = {{value}}일 후
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = 이번 주
+weeks-until-long[one]   = 다음 주
+weeks-until-long[two]   = {{value}}주 후
+weeks-until-long[few]   = {{value}}주 후
+weeks-until-long[many]  = {{value}}주 후
+weeks-until-long[other] = {{value}}주 후
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = 이번 달
+months-until-long[one]   = 다음 달
+months-until-long[two]   = {{value}}개월 후
+months-until-long[few]   = {{value}}개월 후
+months-until-long[many]  = {{value}}개월 후
+months-until-long[other] = {{value}}개월 후
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = 올해
+years-until-long[one]   = 내년
+years-until-long[two]   = {{value}}년 후
+years-until-long[few]   = {{value}}년 후
+years-until-long[many]  = {{value}}년 후
+years-until-long[other] = {{value}}년 후
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = 지금
+minutes-ago-short[other] = {{value}}분 전
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = 지금
+hours-ago-short[other] = {{value}}시간 전
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = 오늘
+days-ago-short[other] = {{value}}일 전
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = 지금
+minutes-until-short[other] = {{value}}분 후
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = 지금
+hours-until-short[other] = {{value}}시간 후
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = 오늘
+days-until-short[other] = {{value}}일 후
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate=(잘못된 날짜)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %Y년 %B %e일 %a %I:%M:%S %p
+dateTimeFormat_%x = %Y/%m/%d
+dateTimeFormat_%X = %I:%M:%S %p
+
+shortTimeFormat = %I:%M %p
+shortDateTimeFormat = %x %I:%M %p
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 0
+
+# Localize "AM" and "PM" used in %p format for time
+time_am = 오전
+time_pm = 오후
diff --git a/www/firefoxos/locales/date.lij.properties b/www/firefoxos/locales/date.lij.properties
new file mode 100644
index 0000000..b051133
--- /dev/null
+++ b/www/firefoxos/locales/date.lij.properties
@@ -0,0 +1,149 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+weekday-0-long = Doménega
+weekday-1-long = Lunedì
+weekday-2-long = Martedì
+weekday-3-long = Mercoledì
+weekday-4-long = Zéuggia
+weekday-5-long = Venerdì
+weekday-6-long = Sàbbo
+weekday-0-short = Dom
+weekday-1-short = Lun
+weekday-2-short = Mar
+weekday-3-short = Mer
+weekday-4-short = Zéu
+weekday-5-short = Ven
+weekday-6-short = Sab
+month-0-genitive  = Zenâ
+month-1-genitive  = Frevâ
+month-2-genitive  = Màrso
+month-3-genitive  = Arvî
+month-4-genitive  = Màzzo
+month-5-genitive  = Zùgno
+month-6-genitive  = Lùggio
+month-7-genitive  = Agósto
+month-8-genitive  = Seténbre
+month-9-genitive  = Òtôbre
+month-10-genitive = Novénbre
+month-11-genitive = Dexénbre
+month-0-long = Zenâ
+month-1-long = Frevâ
+month-2-long = Màrso
+month-3-long = Arvî
+month-4-long = Màzzo
+month-5-long = Zùgno
+month-6-long = Lùggio
+month-7-long = Agósto
+month-8-long = Seténbre
+month-9-long = Òtôbre
+month-10-long = Novénbre
+month-11-long = Dexénbre
+month-0-short = Zen
+month-1-short = Fre
+month-2-short = Màr
+month-3-short = Arv
+month-4-short = Maz
+month-5-short = Zùg
+month-6-short = Lùg
+month-7-short = Ago
+month-8-short = Set
+month-9-short = Òtô
+month-10-short = Nov
+month-11-short = Dex
+
+minutesAgo-long={[ plural(m) ]}
+minutesAgo-long[zero]  = òua
+minutesAgo-long[one]   = un menûto fa
+minutesAgo-long[two]   = {{m}} menûti fa
+minutesAgo-long[few]   = {{m}} menûti fa
+minutesAgo-long[many]  = {{m}} menûti fa
+minutesAgo-long[other] = {{m}} menûti fa
+
+minutesAgo-short={[ plural(m) ]}
+minutesAgo-short[zero]  = òua
+minutesAgo-short[other] = {{m}}’ fa
+
+hoursAgo-long={[ plural(h) ]}
+hoursAgo-long[zero]  = òua
+hoursAgo-long[one]   = un'ôa fa
+hoursAgo-long[two]   = {{h}} ôe fa
+hoursAgo-long[few]   = {{h}} ôe fa
+hoursAgo-long[many]  = {{h}} ôe fa
+hoursAgo-long[other] = {{h}} ôe fa
+
+hoursAgo-short={[ plural(h) ]}
+hoursAgo-short[zero]  = òua
+hoursAgo-short[other] = {{h}}ôe fa
+
+daysAgo-long={[ plural(d) ]}
+daysAgo-long[zero]  = ancheu
+daysAgo-long[one]   = vêi
+daysAgo-long[two]   = {{d}} giórni fa
+daysAgo-long[few]   = {{d}} giórni fa
+daysAgo-long[many]  = {{d}} giórni fa
+daysAgo-long[other] = {{d}} giórni fa
+
+daysAgo-short={[ plural(d) ]}
+daysAgo-short[zero]  = ancheu
+daysAgo-short[other] = {{d}}g fa
+
+inMinutes-long={[ plural(m) ]}
+inMinutes-long[zero]  = òua
+inMinutes-long[one]   = tra un menûto
+inMinutes-long[two]   = tra {{m}} menûti
+inMinutes-long[few]   = tra {{m}} menûti
+inMinutes-long[many]  = tra {{m}} menûti
+inMinutes-long[other] = tra {{m}} menûti
+
+inMinutes-short={[ plural(m) ]}
+inMinutes-short[zero]  = òua
+inMinutes-short[other] = fra {{m}}’
+
+inHours-long={[ plural(h) ]}
+inHours-long[zero]  = òua
+inHours-long[one]   = tra un’ôa
+inHours-long[two]   = tra {{h}} ôe
+inHours-long[few]   = tra {{h}} ôe
+inHours-long[many]  = tra {{h}} ôe
+inHours-long[other] = tra {{h}} ôe
+
+inHours-short={[ plural(h) ]}
+inHours-short[zero]  = òua
+inHours-short[other] = tra {{h}}ôe
+
+inDays-long={[ plural(d) ]}
+inDays-long[zero]  = ancheu
+inDays-long[one]   = domàn
+inDays-long[two]   = tra {{d}} giórni
+inDays-long[few]   = tra {{d}} giórni
+inDays-long[many]  = tra {{d}} giórni
+inDays-long[other] = tra {{d}} giórni
+
+inDays-short={[ plural(d) ]}
+inDays-short[zero]  = ancheu
+inDays-short[other] = tra {{d}}g
+
+incorrectDate = (dæta sbaliâ)
+dateTimeFormat_%c = %a %e %b %Y %H:%M:%S
+dateTimeFormat_%x = %d/%m/%Y
+dateTimeFormat_%X = %H:%M:%S
+shortTimeFormat = %I:%M %p
+shortDateTimeFormat = %x %I:%M %p
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 1
diff --git a/www/firefoxos/locales/date.lt.properties b/www/firefoxos/locales/date.lt.properties
new file mode 100644
index 0000000..ea7eb27
--- /dev/null
+++ b/www/firefoxos/locales/date.lt.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = Sekmadienis
+weekday-1-long = Pirmadienis
+weekday-2-long = Antradienis
+weekday-3-long = Trečiadienis
+weekday-4-long = Ketvirtadienis
+weekday-5-long = Penktadienis
+weekday-6-long = Šeštadienis
+
+weekday-0-short = Sk
+weekday-1-short = Pr
+weekday-2-short = An
+weekday-3-short = Tr
+weekday-4-short = Kt
+weekday-5-short = Pn
+weekday-6-short = Št
+
+# Month names
+
+month-0-long  = sausis
+month-1-long  = vasaris
+month-2-long  = kovas
+month-3-long  = balandis
+month-4-long  = gegužė
+month-5-long  = birželis
+month-6-long  = liepa
+month-7-long  = rugpjūtis
+month-8-long  = rugsėjis
+month-9-long  = spalis
+month-10-long = lapkritis
+month-11-long = gruodis
+
+month-0-genitive  = sausio
+month-1-genitive  = vasario
+month-2-genitive  = kovo
+month-3-genitive  = balandžio
+month-4-genitive  = gegužės
+month-5-genitive  = birželio
+month-6-genitive  = liepos
+month-7-genitive  = rugpjūčio
+month-8-genitive  = rugsėjo
+month-9-genitive  = spalio
+month-10-genitive = lapkričio
+month-11-genitive = gruodžio
+
+month-0-short  = Sau
+month-1-short  = Vas
+month-2-short  = Kov
+month-3-short  = Bal
+month-4-short  = Geg
+month-5-short  = Bir
+month-6-short  = Lie
+month-7-short  = Rgp
+month-8-short  = Rgs
+month-9-short  = Spa
+month-10-short = Lap
+month-11-short = Grd
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = ką tik
+minutes-ago-long[one]   = prieš {{value}} minutę
+minutes-ago-long[two]   = prieš {{value}} minutes
+minutes-ago-long[few]   = prieš {{value}} minutes
+minutes-ago-long[many]  = prieš {{value}} minučių
+minutes-ago-long[other] = prieš {{value}} minučių
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = ką tik
+hours-ago-long[one]   = prieš {{value}} valandą
+hours-ago-long[two]   = prieš {{value}} valandas
+hours-ago-long[few]   = prieš {{value}} valandas
+hours-ago-long[many]  = prieš {{value}} valandų
+hours-ago-long[other] = prieš {{value}} valandų
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = šiandien
+days-ago-long[one]   = vakar
+days-ago-long[two]   = prieš {{value}} dienas
+days-ago-long[few]   = prieš {{value}} dienas
+days-ago-long[many]  = prieš {{value}} dienų
+days-ago-long[other] = prieš {{value}} dienų
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = šią savaitę
+weeks-ago-long[one]   = praėjusią savaitę
+weeks-ago-long[two]   = prieš {{value}} savaites
+weeks-ago-long[few]   = prieš {{value}} savaites
+weeks-ago-long[many]  = prieš {{value}} savaičių
+weeks-ago-long[other] = prieš {{value}} savaičių
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = šį mėnesį
+months-ago-long[one]   = praėjusį mėnesį
+months-ago-long[two]   = prieš {{value}} mėnesius
+months-ago-long[few]   = prieš {{value}} mėnesius
+months-ago-long[many]  = prieš {{value}} mėnesių
+months-ago-long[other] = prieš {{value}} mėnesių
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = šiemet
+years-ago-long[one]   = prieš {{value}} metus
+years-ago-long[two]   = prieš {{value}} metus
+years-ago-long[few]   = prieš {{value}} metus
+years-ago-long[many]  = prieš {{value}} metų
+years-ago-long[other] = prieš {{value}} metų
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = dabar
+minutes-until-long[one]   = už {{value}} minutės
+minutes-until-long[two]   = už {{value}} minučių
+minutes-until-long[few]   = už {{value}} minučių
+minutes-until-long[many]  = už {{value}} minučių
+minutes-until-long[other] = už {{value}} minučių
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = dabar
+hours-until-long[one]   = už {{value}} valandos
+hours-until-long[two]   = už {{value}} valandų
+hours-until-long[few]   = už {{value}} valandų
+hours-until-long[many]  = už {{value}} valandų
+hours-until-long[other] = už {{value}} valandų
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = šiandien
+days-until-long[one]   = rytoj
+days-until-long[two]   = už {{value}} dienų
+days-until-long[few]   = už {{value}} dienų
+days-until-long[many]  = už {{value}} dienų
+days-until-long[other] = už {{value}} dienų
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = šią savaitę
+weeks-until-long[one]   = kitą savaitę
+weeks-until-long[two]   = už {{value}} savaičių
+weeks-until-long[few]   = už {{value}} savaičių
+weeks-until-long[many]  = už {{value}} savaičių
+weeks-until-long[other] = už {{value}} savaičių
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = šį mėnesį
+months-until-long[one]   = kitą mėnesį
+months-until-long[two]   = už {{value}} mėnesių
+months-until-long[few]   = už {{value}} mėnesių
+months-until-long[many]  = už {{value}} mėnesių
+months-until-long[other] = už {{value}} mėnesių
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = šiemet
+years-until-long[one]   = kitais metais
+years-until-long[two]   = už {{value}} metų
+years-until-long[few]   = už {{value}} metų
+years-until-long[many]  = už {{value}} metų
+years-until-long[other] = už {{value}} metų
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = ką tik
+minutes-ago-short[other] = prieš {{value}} min.
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = ką tik
+hours-ago-short[other] = prieš {{value}} val.
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = šiandien
+days-ago-short[other] = prieš {{value}} d.
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = dabar
+minutes-until-short[other] = už {{value}} min.
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = dabar
+hours-until-short[other] = už {{value}} val.
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = šiandien
+days-until-short[other] = už {{value}} d.
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (negalima data)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %Y m. %Eb %e d. %H:%M:%S
+dateTimeFormat_%x = %Y-%m-%d
+dateTimeFormat_%X = %H:%M:%S
+
+shortTimeFormat = %H:%M
+shortDateTimeFormat = %x %H:%M
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 1
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = priešpiet
+time_pm = popiet
diff --git a/www/firefoxos/locales/date.mai.properties b/www/firefoxos/locales/date.mai.properties
new file mode 100644
index 0000000..9862af8
--- /dev/null
+++ b/www/firefoxos/locales/date.mai.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = रविवार
+weekday-1-long = सोमवार\u0020
+weekday-2-long = मंगलवार
+weekday-3-long = बुधवार
+weekday-4-long = बृहस्पतिवार
+weekday-5-long = शुक्रवार
+weekday-6-long = शनिवार
+
+weekday-0-short = सोम
+weekday-1-short = सोम
+weekday-2-short = मंगल
+weekday-3-short = बुध
+weekday-4-short = गुरू
+weekday-5-short = शुक्र
+weekday-6-short = शनि
+
+# Month names
+
+month-0-long  = जनवरी
+month-1-long  = फ़रवरी
+month-2-long  = मार्च
+month-3-long  = अप्रैल
+month-4-long  = मई
+month-5-long  = जून
+month-6-long  = जुलाई
+month-7-long  = अगस्त
+month-8-long  = सितम्बर
+month-9-long  = अक्तूबर
+month-10-long = नवंबर
+month-11-long = दिसंबर
+
+month-0-genitive  = जनवरी
+month-1-genitive  = फ़रवरी
+month-2-genitive  = मार्च
+month-3-genitive  = अप्रैल
+month-4-genitive  = मई
+month-5-genitive  = जून
+month-6-genitive  = जुलाई
+month-7-genitive  = अगस्त
+month-8-genitive  = सितम्बर
+month-9-genitive  = अक्तूबर
+month-10-genitive = नवम्बर
+month-11-genitive = दिसम्बर
+
+month-0-short  = जनवरी
+month-1-short  = फरवरी
+month-2-short  = मार्च
+month-3-short  = अप्रै
+month-4-short  = मई
+month-5-short  = जून
+month-6-short  = जुलाई
+month-7-short  = अगस्त
+month-8-short  = सितम्बर
+month-9-short  = अक्टूबर
+month-10-short = नवम्बर
+month-11-short = दिसम्बर
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = अखन-तुरंत
+minutes-ago-long[one]   = एकटा मिनट पहिने
+minutes-ago-long[two]   = {{value}} मिनट पहिने
+minutes-ago-long[few]   = {{value}} मिनट पहिने
+minutes-ago-long[many]  = {{value}} मिनट पहिने
+minutes-ago-long[other] = {{value}} मिनट पहिने
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = अखन-तुरंत
+hours-ago-long[one]   = एक घंटा पहिने
+hours-ago-long[two]   = {{value}} घंटा पहिने
+hours-ago-long[few]   = {{value}} घंटा पहिने
+hours-ago-long[many]  = {{value}} घंटा पहिने
+hours-ago-long[other] = {{value}} घंटा पहिने
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = आइ
+days-ago-long[one]   = काल्हि
+days-ago-long[two]   = {{value}} दिन पहिने
+days-ago-long[few]   = {{value}} दिन पहिने
+days-ago-long[many]  = {{value}} दिन पहिने
+days-ago-long[other] = {{value}} दिन पहिने
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = ई सप्ताह
+weeks-ago-long[one]   = पछिला सप्ताह
+weeks-ago-long[two]   = {{value}} हफ्ता पहिने
+weeks-ago-long[few]   = {{value}} हफ्ते पहिने
+weeks-ago-long[many]  = {{value}} हफ्ते पहिने
+weeks-ago-long[other] = {{value}} हफ्ते पहिने
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = ई महिना
+months-ago-long[one]   = पछिला महिना
+months-ago-long[two]   = {{value}} महिना पहिने
+months-ago-long[few]   = {{value}} महिना पहिने
+months-ago-long[many]  = {{value}} महिना पहिने
+months-ago-long[other] = {{value}} महिना पहिने
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = ई वर्ष
+years-ago-long[one]   = पछिला वर्ष
+years-ago-long[two]   = {{value}} साल पहिने
+years-ago-long[few]   = {{value}} साल पहिने
+years-ago-long[many]  = {{value}} साल पहिने
+years-ago-long[other] = {{value}} साल पहिने
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = अखन
+minutes-until-long[one]   = एक मिनट मे
+minutes-until-long[two]   = {{value}} मिनट मे
+minutes-until-long[few]   = {{value}} मिनट मे
+minutes-until-long[many]  = {{value}} मिनट मे
+minutes-until-long[other] = {{value}} मिनट मे
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = अखन
+hours-until-long[one]   = एक घंटा मे
+hours-until-long[two]   = {{value}} घंटा मे
+hours-until-long[few]   = {{value}} घंटा मे
+hours-until-long[many]  = {{value}} घंटा मे
+hours-until-long[other] = {{value}} घंटा मे
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = आइ
+days-until-long[one]   = काल्हि
+days-until-long[two]   = {{value}} दिन मे
+days-until-long[few]   = {{value}} दिन मे
+days-until-long[many]  = {{value}} दिन मे
+days-until-long[other] = {{value}} दिन मे
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = ई सप्ताह
+weeks-until-long[one]   = अगिला सप्ताह
+weeks-until-long[two]   = {{value}} हफ्ता मे
+weeks-until-long[few]   = {{value}} हफ्ता मे
+weeks-until-long[many]  = {{value}} हफ्ता मे
+weeks-until-long[other] = {{value}} हफ्ता मे
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = ई महिना
+months-until-long[one]   = अगिला महिना
+months-until-long[two]   = {{value}} महिना मे
+months-until-long[few]   = {{value}} महिना मे
+months-until-long[many]  = {{value}} महिना मे
+months-until-long[other] = {{value}} महिना मे
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = ई वर्ष
+years-until-long[one]   = अगिला वर्ष
+years-until-long[two]   = {{value}} साल मे
+years-until-long[few]   = {{value}} साल मे
+years-until-long[many]  = {{value}} साल मे
+years-until-long[other] = {{value}} साल मे
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = अखन-तुरंत
+minutes-ago-short[other] = {{value}}मि पहिने
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = अखन-तुरंत
+hours-ago-short[other] = {{value}}घं पहिने
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = आइ
+days-ago-short[other] = {{value}}दि पहिने
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = अखन
+minutes-until-short[other] = {{value}}मि मे
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = अखन
+hours-until-short[other] = {{value}}घं मे
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = आइ
+days-until-short[other] = {{value}}दि मे
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (गलत तारीख)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a %b %e %Y %I:%M:%S %p
+dateTimeFormat_%x = %m/%d/%Y
+dateTimeFormat_%X = %I:%M:%S %p
+
+shortTimeFormat = %I:%M %p
+shortDateTimeFormat = %x %I:%M %p
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 0
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = AM
+time_pm = PM
diff --git a/www/firefoxos/locales/date.mk.properties b/www/firefoxos/locales/date.mk.properties
new file mode 100644
index 0000000..1709e35
--- /dev/null
+++ b/www/firefoxos/locales/date.mk.properties
@@ -0,0 +1,227 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = Недела
+weekday-1-long = Понеделник
+weekday-2-long = Вторник
+weekday-3-long = Среда
+weekday-4-long = Четврток
+weekday-5-long = Петок
+weekday-6-long = Сабота
+
+weekday-0-short = Нед
+weekday-1-short = Пон
+weekday-2-short = Вто
+weekday-3-short = Сре
+weekday-4-short = Чет
+weekday-5-short = Пет
+weekday-6-short = Саб
+
+# Month names
+
+month-0-long  = јануари
+month-1-long  = февруари
+month-2-long  = март
+month-3-long  = април
+month-4-long  = мај
+month-5-long  = јуни
+month-6-long  = јули
+month-7-long  = август
+month-8-long  = септември
+month-9-long  = октомври
+month-10-long = ноември
+month-11-long = декември
+
+month-0-genitive  = јануари
+month-1-genitive  = февруари
+month-2-genitive  = март
+month-3-genitive  = април
+month-4-genitive  = мај
+month-5-genitive  = јуни
+month-6-genitive  = јули
+month-7-genitive  = август
+month-8-genitive  = септември
+month-9-genitive  = октомври
+month-10-genitive = ноември
+month-11-genitive = декември
+
+month-0-short  = јан
+month-1-short  = фев
+month-2-short  = мар
+month-3-short  = апр
+month-4-short  = мај
+month-5-short  = јун
+month-6-short  = јул
+month-7-short  = авг
+month-8-short  = сеп
+month-9-short  = окт
+month-10-short = ное
+month-11-short = дек
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = сега
+minutes-ago-long[one]   = пред една минута
+minutes-ago-long[two]   = пред {{value}} минути
+minutes-ago-long[few]   = пред {{value}} минути
+minutes-ago-long[many]  = пред {{value}} минути
+minutes-ago-long[other] = пред {{value}} минути
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = сега
+hours-ago-long[one]   = пред еден час
+hours-ago-long[two]   = пред {{value}} часа
+hours-ago-long[few]   = пред {{value}} часа
+hours-ago-long[many]  = пред {{value}} часови
+hours-ago-long[other] = пред {{value}} часови
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = денес
+days-ago-long[one]   = вчера
+days-ago-long[two]   = пред {{value}} дена
+days-ago-long[few]   = пред {{value}} дена
+days-ago-long[many]  = пред {{value}} денови
+days-ago-long[other] = пред {{value}} денови
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = оваа недела
+weeks-ago-long[one]   = минатата недела
+weeks-ago-long[two]   = пред {{value}} недели
+weeks-ago-long[few]   = пред {{value}} недели
+weeks-ago-long[many]  = пред {{value}} недели
+weeks-ago-long[other] = пред {{value}} недели
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = овој месец
+months-ago-long[one]   = минатиот месец
+months-ago-long[two]   = пред {{value}} месеци
+months-ago-long[few]   = пред {{value}} месеци
+months-ago-long[many]  = пред {{value}} месеци
+months-ago-long[other] = пред {{value}} месеци
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = оваа година
+years-ago-long[one]   = минатата година
+years-ago-long[two]   = пред {{value}} години
+years-ago-long[few]   = пред {{value}} години
+years-ago-long[many]  = пред {{value}} години
+years-ago-long[other] = пред {{value}} години
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = сега
+minutes-until-long[one]   = за една минута
+minutes-until-long[two]   = за {{value}} минути
+minutes-until-long[few]   = за {{value}} минути
+minutes-until-long[many]  = за {{value}} минути
+minutes-until-long[other] = за {{value}} минути
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = сега
+hours-until-long[one]   = за еден час
+hours-until-long[two]   = за {{value}} часа
+hours-until-long[few]   = за {{value}} часа
+hours-until-long[many]  = за {{value}} часови
+hours-until-long[other] = за {{value}} часови
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = денес
+days-until-long[one]   = утре
+days-until-long[two]   = за {{value}} дена
+days-until-long[few]   = за {{value}} дена
+days-until-long[many]  = за {{value}} денови
+days-until-long[other] = за {{value}} денови
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = оваа седмица
+weeks-until-long[one]   = следната седмица
+weeks-until-long[two]   = за {{value}} седмици
+weeks-until-long[few]   = за {{value}} седмици
+weeks-until-long[many]  = за {{value}} седмици
+weeks-until-long[other] = за {{value}} седмици
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = овој месец
+months-until-long[one]   = следниот месец
+months-until-long[two]   = за {{value}} месеци
+months-until-long[few]   = за {{value}} месеци
+months-until-long[many]  = за {{value}} месеци
+months-until-long[other] = за {{value}} месеци
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = оваа година
+years-until-long[one]   = следната година
+years-until-long[two]   = за {{value}} години
+years-until-long[few]   = за {{value}} години
+years-until-long[many]  = за {{value}} години
+years-until-long[other] = за {{value}} години
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = сега
+minutes-ago-short[other] = пред {{value}}m
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = сега
+hours-ago-short[other] = пред {{value}}h
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = денес
+days-ago-short[other] = пред {{value}}d
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = сега
+minutes-until-short[other] = за {{value}}m
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = сега
+hours-until-short[other] = за {{value}}h
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = денес
+days-until-short[other] = за {{value}}d
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (неточен датум)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a %b %e %Y %H:%M:%S
+dateTimeFormat_%x = %d/%m/%Y
+dateTimeFormat_%X = %H:%M:%S
+
+shortTimeFormat = %H:%M
+shortDateTimeFormat = %x %H:%M
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 1
+
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = AM
+time_pm = PM
diff --git a/www/firefoxos/locales/date.ml.properties b/www/firefoxos/locales/date.ml.properties
new file mode 100644
index 0000000..c17d920
--- /dev/null
+++ b/www/firefoxos/locales/date.ml.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = ഞായര്‍
+weekday-1-long = തിങ്കള്‍
+weekday-2-long = ചൊവ്വ
+weekday-3-long = ബുധന്‍
+weekday-4-long = വ്യാഴം
+weekday-5-long = വെള്ളി
+weekday-6-long = ശനി
+
+weekday-0-short = ഞാ
+weekday-1-short = തി
+weekday-2-short = ചൊ
+weekday-3-short = ബു
+weekday-4-short = വ്യാ
+weekday-5-short = വെ
+weekday-6-short = ശനി
+
+# Month names
+
+month-0-long  = ജനുവരി
+month-1-long  = ഫെബ്രുവരി
+month-2-long  = മാര്‍ച്ച്
+month-3-long  = ഏപ്രില്‍
+month-4-long  = മെയ്
+month-5-long  = ജൂണ്‍
+month-6-long  = ജൂലൈ
+month-7-long  = ആഗസ്റ്റ്
+month-8-long  = സെപ്റ്റംബര്‍
+month-9-long  = ഒക്ടോബര്‍
+month-10-long = നവംബ‌ര്‍
+month-11-long = ഡിസംബ‌ര്‍
+
+month-0-genitive  = ജനുവരി
+month-1-genitive  = ഫെബ്രുവരി
+month-2-genitive  = മാര്‍ച്ച്
+month-3-genitive  = ഏപ്രില്‍
+month-4-genitive  = മെയ്
+month-5-genitive  = ജൂണ്‍
+month-6-genitive  = ജൂലൈ
+month-7-genitive  = ആഗസ്റ്റ്
+month-8-genitive  = സെപ്റ്റംബര്‍
+month-9-genitive  = ഒക്ടോബർ
+month-10-genitive = നവംബ‌ര്‍
+month-11-genitive = ഡിസംബ‌ര്‍
+
+month-0-short  = ജനു
+month-1-short  = ഫെബ്
+month-2-short  = മാര്‍
+month-3-short  = ഏപ്രി
+month-4-short  = മെയ്
+month-5-short  = ജൂണ്‍
+month-6-short  = ജൂലൈ
+month-7-short  = ആഗ
+month-8-short  = സെപ്
+month-9-short  = ഒക്ടോ
+month-10-short = നവം
+month-11-short = ഡിസം
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = ദാ ഇപ്പോള്‍
+minutes-ago-long[one]   = ഒരു മിനിറ്റ് മുമ്പു്
+minutes-ago-long[two]   = {{value}} മിനുട്ടുകള്‍ക്ക് മുമ്പു്
+minutes-ago-long[few]   = {{value}} മിനുട്ടുകള്‍ക്ക് മുമ്പു്
+minutes-ago-long[many]  = {{value}} മിനുട്ടുകള്‍ക്ക് മുമ്പു്
+minutes-ago-long[other] = {{value}} മിനുട്ടുകള്‍ക്ക് മുമ്പു്
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = ഇപ്പോള്‍ തന്നെ
+hours-ago-long[one]   = ഒരു മണിക്കൂര്‍ മുമ്പു്
+hours-ago-long[two]   = {{value}} മണിക്കൂറുകള്‍ക്കു് മുമ്പു്
+hours-ago-long[few]   = {{value}} മണിക്കൂറുകള്‍ക്കു് മുമ്പു്
+hours-ago-long[many]  = {{value}} മണിക്കൂറുകള്‍ക്കു് മുമ്പു്
+hours-ago-long[other] = {{value}} മണിക്കൂറുകള്‍ക്കു് മുമ്പു്
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = ഇന്നു്
+days-ago-long[one]   = ഇന്നലെ
+days-ago-long[two]   = {{value}} ദിവസങ്ങള്‍ക്കു് മുമ്പു്
+days-ago-long[few]   = {{value}} ദിവസങ്ങള്‍ക്കു് മുമ്പു്
+days-ago-long[many]  = {{value}} ദിവസങ്ങള്‍ക്കു് മുമ്പു്
+days-ago-long[other] = {{value}} ദിവസങ്ങള്‍ക്കു് മുമ്പു്
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = ഈ ആഴ്ച
+weeks-ago-long[one]   = കഴിഞ്ഞ ആഴ്ച
+weeks-ago-long[two]   = {{value}} ആഴ്ചയ്ക്കു് മുമ്പു്
+weeks-ago-long[few]   = {{value}} ആഴ്ചയ്ക്കു് മുമ്പു്
+weeks-ago-long[many]  = {{value}} ആഴ്ചകള്‍ക്കു മുമ്പു്
+weeks-ago-long[other] = {{value}} ആഴ്ചകള്‍ക്കു മുമ്പു്
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = ഈ മാസം
+months-ago-long[one]   = കഴിഞ്ഞ മാസം
+months-ago-long[two]   = {{value}} മാസങ്ങള്‍ക്കു് മുമ്പു്
+months-ago-long[few]   = {{value}} മാസങ്ങള്‍ക്കു് മുമ്പു്
+months-ago-long[many]  = {{value}} മാസങ്ങള്‍ക്കു് മുമ്പു്
+months-ago-long[other] = {{value}} മാസങ്ങള്‍ക്കു് മുമ്പു്
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = ഈ വര്‍ഷം
+years-ago-long[one]   = കഴിഞ്ഞ വര്‍ഷം
+years-ago-long[two]   = {{value}} കൊല്ലത്തിനു മുമ്പു്
+years-ago-long[few]   = {{value}} വര്‍ഷത്തിനു മുമ്പു്
+years-ago-long[many]  = {{value}} വര്‍ഷങ്ങള്‍ക്കു് മുമ്പു്
+years-ago-long[other] = {{value}} വര്‍ഷങ്ങള്‍ക്കു് മുമ്പു്
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = ഇപ്പോള്‍
+minutes-until-long[one]   = ഉടന്‍
+minutes-until-long[two]   = {{value}} മിനിറ്റിനുള്ളില്‍
+minutes-until-long[few]   = {{value}} മിനിറ്റുകള്‍ക്കുള്ളില്‍
+minutes-until-long[many]  = {{value}} മിനിറ്റുകള്‍ക്കുള്ളില്‍
+minutes-until-long[other] = {{value}} മിനിറ്റുകള്‍ക്കുള്ളില്‍
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = ഇപ്പോള്‍
+hours-until-long[one]   = ഒരു മണിക്കൂറിനുള്ളില്‍
+hours-until-long[two]   = {{value}} മണിക്കൂറിനുള്ളില്‍
+hours-until-long[few]   = {{value}} മണിക്കൂറിനുള്ളില്‍
+hours-until-long[many]  = {{value}} മണിക്കൂറുകള്‍ക്കുള്ളില്‍
+hours-until-long[other] = {{value}} മണിക്കൂറുകള്‍ക്കുള്ളില്‍
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = ഇന്നു്
+days-until-long[one]   = നാളെ
+days-until-long[two]   = {{value}} ദിവസത്തിനുള്ളില്‍
+days-until-long[few]   = {{value}} ദിവസങ്ങൾക്കുള്ളില്‍
+days-until-long[many]  = {{value}} ദിവസത്തിനുള്ളില്‍
+days-until-long[other] = {{value}} ദിവസങ്ങള്‍ക്കുള്ളില്‍
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = ഈ ആഴ്ച
+weeks-until-long[one]   = അടുത്ത ആഴ്ച
+weeks-until-long[two]   = {{value}} ആഴ്ചകൾക്കുള്ളില്‍
+weeks-until-long[few]   = {{value}} ആഴ്ചയ്ക്കുള്ളില്‍
+weeks-until-long[many]  = {{value}} ആഴ്ചകള്‍ക്കുള്ളില്‍
+weeks-until-long[other] = {{value}} ആഴ്ചകള്‍ക്കുള്ളില്‍
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = ഈ മാസം
+months-until-long[one]   = അടുത്ത മാസം
+months-until-long[two]   = {{value}} മാസത്തിനുള്ളില്‍
+months-until-long[few]   = {{value}} മാസത്തിനുള്ളില്‍
+months-until-long[many]  = {{value}} മാസങ്ങള്‍ക്കുള്ളില്‍
+months-until-long[other] = {{value}} മാസങ്ങള്‍ക്കുള്ളില്‍
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = ഈ വര്‍ഷം
+years-until-long[one]   = അടുത്ത വര്‍ഷം
+years-until-long[two]   = {{value}} വര്‍ഷത്തിനുള്ളില്‍
+years-until-long[few]   = {{value}} വര്‍ഷത്തിനുള്ളില്‍
+years-until-long[many]  = {{value}} വര്‍ഷങ്ങള്‍ക്കുള്ളില്‍
+years-until-long[other] = {{value}} വര്‍ഷങ്ങള്‍ക്കുള്ളില്‍
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = ദാ ഇപ്പോള്‍
+minutes-ago-short[other] = {{value}}മി മുമ്പു്
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = ഇപ്പോള്‍
+hours-ago-short[other] = {{value}}മണി മുമ്പു്
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = ഇന്നു്
+days-ago-short[other] = {{value}}ദി മുമ്പു്
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = ഇപ്പോള്‍
+minutes-until-short[other] = {{value}}മിനുട്ടിൽ
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = ഇപ്പോള്‍
+hours-until-short[other] = {{value}} മണിക്കൂറില്‍
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = ഇന്നു്
+days-until-short[other] = {{value}}ദിവസത്തില്‍
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (തെറ്റായ തീയതി)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a %b %e %Y %I:%M:%S %p
+dateTimeFormat_%x = %m/%d/%Y
+dateTimeFormat_%X = %I:%M:%S %p
+
+shortTimeFormat = %I:%M %p
+shortDateTimeFormat = %x %I:%M %p
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 1
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = AM
+time_pm = PM
diff --git a/www/firefoxos/locales/date.mr.properties b/www/firefoxos/locales/date.mr.properties
new file mode 100644
index 0000000..2409340
--- /dev/null
+++ b/www/firefoxos/locales/date.mr.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = रविवार
+weekday-1-long = सोमवार
+weekday-2-long = मंगळवार
+weekday-3-long = बुधवार
+weekday-4-long = गुरूवार
+weekday-5-long = शुक्रवार
+weekday-6-long = शनिवार
+
+weekday-0-short = रवि
+weekday-1-short = सोम
+weekday-2-short = मंगळ
+weekday-3-short = बुध
+weekday-4-short = गुरु
+weekday-5-short = शुक्र
+weekday-6-short = शनि
+
+# Month names
+
+month-0-long  = जानेवारी
+month-1-long  = फेब्रुवारी
+month-2-long  = मार्च
+month-3-long  = एप्रिल
+month-4-long  = मे
+month-5-long  = जून
+month-6-long  = जुलै
+month-7-long  = ऑगस्ट
+month-8-long  = सप्टेंबर
+month-9-long  = ऑक्टोबर
+month-10-long = नोव्हेंबर
+month-11-long = डिसेंबर
+
+month-0-genitive  = जानेवारी
+month-1-genitive  = फेब्रुवारी
+month-2-genitive  = मार्च
+month-3-genitive  = एप्रिल
+month-4-genitive  = मे
+month-5-genitive  = जून
+month-6-genitive  = जुलै
+month-7-genitive  = ऑगस्ट
+month-8-genitive  = सप्टेंबर
+month-9-genitive  = ऑक्टोबर
+month-10-genitive = नोव्हेंबर
+month-11-genitive = डिसेंबर
+
+month-0-short  = जाने
+month-1-short  = फेब्रु
+month-2-short  = मार्च
+month-3-short  = एप्रि
+month-4-short  = मे
+month-5-short  = जून
+month-6-short  = जुलै
+month-7-short  = ऑग
+month-8-short  = सप्टें
+month-9-short  = ऑक्टो
+month-10-short = नोव्हें
+month-11-short = डिसें
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = आत्ताच
+minutes-ago-long[one]   = एक मिनिटापूर्वी
+minutes-ago-long[two]   = {{value}} मिनिटांपूर्वी
+minutes-ago-long[few]   = {{value}} मिनिटांपूर्वी
+minutes-ago-long[many]  = {{value}} मिनिटांपूर्वी
+minutes-ago-long[other] = {{value}} मिनिटांपूर्वी
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = आत्ताच
+hours-ago-long[one]   = एक तासापूर्वी
+hours-ago-long[two]   = {{value}} तासांपूर्वी
+hours-ago-long[few]   = {{value}} तासांपूर्वी
+hours-ago-long[many]  = {{value}} तासांपूर्वी
+hours-ago-long[other] = {{value}} तासांपूर्वी
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = आज
+days-ago-long[one]   = काल
+days-ago-long[two]   = {{value}} दिवसांपूर्वी
+days-ago-long[few]   = {{value}} दिवसांपूर्वी
+days-ago-long[many]  = {{value}} दिवसांपूर्वी
+days-ago-long[other] = {{value}} दिवसांपूर्वी
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = या आठवड्यात
+weeks-ago-long[one]   = मागील आठवड्यात
+weeks-ago-long[two]   = {{value}} आठवड्यांपूर्वी
+weeks-ago-long[few]   = {{value}} आठवड्यांपूर्वी
+weeks-ago-long[many]  = {{value}} आठवड्यांपूर्वी
+weeks-ago-long[other] = {{value}} आठवड्यांपूर्वी
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = या महिन्यात
+months-ago-long[one]   = मागील महिन्यात
+months-ago-long[two]   = {{value}} महिन्यांपूर्वी
+months-ago-long[few]   = {{value}} महिन्यांपूर्वी
+months-ago-long[many]  = {{value}} महिन्यांपूर्वी
+months-ago-long[other] = {{value}} महिन्यांपूर्वी
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = या वर्षी
+years-ago-long[one]   = मागील वर्षी
+years-ago-long[two]   = {{value}} वर्षांपूर्वी
+years-ago-long[few]   = {{value}} वर्षांपूर्वी
+years-ago-long[many]  = {{value}} वर्षांपूर्वी
+years-ago-long[other] = {{value}} वर्षांपूर्वी
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = आता
+minutes-until-long[one]   = एका मिनिटात
+minutes-until-long[two]   = {{value}} मिनिटांत
+minutes-until-long[few]   = {{value}} मिनिटांत
+minutes-until-long[many]  = {{value}} मिनिटांत
+minutes-until-long[other] = {{value}} मिनिटांत
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = आता
+hours-until-long[one]   = तासाभरात
+hours-until-long[two]   = {{value}} तासांत
+hours-until-long[few]   = {{value}} तासांत
+hours-until-long[many]  = {{value}} तासांत
+hours-until-long[other] = {{value}} तासांत
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = आज
+days-until-long[one]   = उद्या
+days-until-long[two]   = {{value}} दिवसांत
+days-until-long[few]   = {{value}} दिवसांत
+days-until-long[many]  = {{value}} दिवसांत
+days-until-long[other] = {{value}} दिवसांत
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = या आठवड्यात
+weeks-until-long[one]   = पुढील आठवड्यात
+weeks-until-long[two]   = {{value}} आठवड्यांत
+weeks-until-long[few]   = {{value}} आठवड्यांत
+weeks-until-long[many]  = {{value}} आठवड्यांत
+weeks-until-long[other] = {{value}} आठवड्यांत
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = या महिन्यात
+months-until-long[one]   = पुढील महिन्यात
+months-until-long[two]   = {{value}} महिन्यांत
+months-until-long[few]   = {{value}} महिन्यांत
+months-until-long[many]  = {{value}} महिन्यांत
+months-until-long[other] = {{value}} महिन्यांत
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = या वर्षी
+years-until-long[one]   = पुढील वर्षी
+years-until-long[two]   = {{value}} वर्षांत
+years-until-long[few]   = {{value}} वर्षांत
+years-until-long[many]  = {{value}} वर्षांत
+years-until-long[other] = {{value}} वर्षांत
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = आत्ताच
+minutes-ago-short[other] = {{value}}मि पूर्वी
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = आत्ताच
+hours-ago-short[other] = {{value}}ता पूर्वी
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = आज
+days-ago-short[other] = {{value}}दि पूर्वी
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = आता
+minutes-until-short[other] = {{value}}मि मध्ये
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = आता
+hours-until-short[other] = {{value}}ता त
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = आज
+days-until-short[other] = {{value}}दि मध्ये
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (चुकीचा दिनांक)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a %b %e %Y %I:%M:%S %p
+dateTimeFormat_%x = %m/%d/%Y
+dateTimeFormat_%X = %I:%M:%S %p
+
+shortTimeFormat = %I:%M %p
+shortDateTimeFormat = %x %I:%M %p
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 0
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = AM
+time_pm = PM
diff --git a/www/firefoxos/locales/date.ms.properties b/www/firefoxos/locales/date.ms.properties
new file mode 100644
index 0000000..b6c39da
--- /dev/null
+++ b/www/firefoxos/locales/date.ms.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = Ahad
+weekday-1-long = Isnin
+weekday-2-long = Selasa
+weekday-3-long = Rabu
+weekday-4-long = Khamis
+weekday-5-long = Jumaat
+weekday-6-long = Sabtu
+
+weekday-0-short = Ahad
+weekday-1-short = Isnin
+weekday-2-short = Selasa
+weekday-3-short = Rabu
+weekday-4-short = Khamis
+weekday-5-short = Jumaat
+weekday-6-short = Sabtu
+
+# Month names
+
+month-0-long  = Januari
+month-1-long  = Februari
+month-2-long  = Mac
+month-3-long  = April
+month-4-long  = Mei
+month-5-long  = Jun
+month-6-long  = Julai
+month-7-long  = Ogos
+month-8-long  = September
+month-9-long  = Oktober
+month-10-long = November
+month-11-long = Disember
+
+month-0-genitive  = Januari
+month-1-genitive  = Februari
+month-2-genitive  = Mac
+month-3-genitive  = April
+month-4-genitive  = Mei
+month-5-genitive  = Jun
+month-6-genitive  = Julai
+month-7-genitive  = Ogos
+month-8-genitive  = September
+month-9-genitive  = Oktober
+month-10-genitive = November
+month-11-genitive = Disember
+
+month-0-short  = Jan
+month-1-short  = Feb
+month-2-short  = Mac
+month-3-short  = Apr
+month-4-short  = Mei
+month-5-short  = Jun
+month-6-short  = Jul
+month-7-short  = Ogos
+month-8-short  = Sep
+month-9-short  = Okt
+month-10-short = Nov
+month-11-short = Dis
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = sebentar tadi
+minutes-ago-long[one]   = satu minit lalu
+minutes-ago-long[two]   = {{value}} minit lalu
+minutes-ago-long[few]   = {{value}} minit lalu
+minutes-ago-long[many]  = {{value}} minit lalu
+minutes-ago-long[other] = {{value}} minit lalu
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = sebentar tadi
+hours-ago-long[one]   = sejam yang lalu
+hours-ago-long[two]   = {{value}} jam lalu
+hours-ago-long[few]   = {{value}} jam lalu
+hours-ago-long[many]  = {{value}} jam lalu
+hours-ago-long[other] = {{value}} jam lalu
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = hari ini
+days-ago-long[one]   = semalam
+days-ago-long[two]   = {{value}} hari lalu
+days-ago-long[few]   = {{value}} hari lalu
+days-ago-long[many]  = {{value}} hari lalu
+days-ago-long[other] = {{value}} hari lalu
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = minggu ini
+weeks-ago-long[one]   = minggu lalu
+weeks-ago-long[two]   = {{value}} minggu lalu
+weeks-ago-long[few]   = {{value}} minggu lalu
+weeks-ago-long[many]  = {{value}} minggu lalu
+weeks-ago-long[other] = {{value}} minggu lalu
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = bulan ini
+months-ago-long[one]   = bulan lalu
+months-ago-long[two]   = {{value}} bulan lalu
+months-ago-long[few]   = {{value}} bulan lalu
+months-ago-long[many]  = {{value}} minit lalu
+months-ago-long[other] = {{value}} minit lalu
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = tahun ini
+years-ago-long[one]   = tahun lalu
+years-ago-long[two]   = {{value}} tahun lalu
+years-ago-long[few]   = {{value}} tahun lalu
+years-ago-long[many]  = {{value}} tahun lalu
+years-ago-long[other] = {{value}} tahun lalu
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = sekarang
+minutes-until-long[one]   = dalam satu minit
+minutes-until-long[two]   = dalam {{value}} minit
+minutes-until-long[few]   = dalam {{value}} minit
+minutes-until-long[many]  = dalam {{value}} minit
+minutes-until-long[other] = dalam {{value}} minit
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = sekarang
+hours-until-long[one]   = dalam satu jam
+hours-until-long[two]   = dalam {{value}} jam
+hours-until-long[few]   = dalam {{value}} jam
+hours-until-long[many]  = dalam {{value}} jam
+hours-until-long[other] = dalam {{value}} jam
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = hari ini
+days-until-long[one]   = esok
+days-until-long[two]   = dalam {{value}} hari
+days-until-long[few]   = dalam {{value}} hari
+days-until-long[many]  = dalam {{value}} hari
+days-until-long[other] = dalam {{value}} hari
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = minggu ini
+weeks-until-long[one]   = minggu depan
+weeks-until-long[two]   = dalam {{value}} minggu
+weeks-until-long[few]   = dalam {{value}} minggu
+weeks-until-long[many]  = dalam {{value}} minggu
+weeks-until-long[other] = dalam {{value}} minggu
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = bulan ini
+months-until-long[one]   = bulan depan
+months-until-long[two]   = dalam {{value}} bulan
+months-until-long[few]   = dalam {{value}} bulan
+months-until-long[many]  = dalam {{value}} bulan
+months-until-long[other] = dalam {{value}} bulan
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = tahun ini
+years-until-long[one]   = tahun depan
+years-until-long[two]   = dalam {{value}} tahun
+years-until-long[few]   = dalam {{value}} tahun
+years-until-long[many]  = dalam {{value}} tahun
+years-until-long[other] = dalam {{value}} tahun
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = sebentar tadi
+minutes-ago-short[other] = {{value}} minit lalu
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = sebentar tadi
+hours-ago-short[other] = {{value}} jam lalu
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = hari ini
+days-ago-short[other] = {{value}} hari lalu
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = sekarang
+minutes-until-short[other] = dalam {{value}} minit
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = sekarang
+hours-until-short[other] = dalam {{value}} jam
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = hari ini
+days-until-short[other] = dalam {{value}} hari
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (tarikh tidak betul)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a %b %e %Y %I:%M:%S %p
+dateTimeFormat_%x = %m/%d/%Y
+dateTimeFormat_%X = %I:%M:%S %p
+
+shortTimeFormat = %I:%M %p
+shortDateTimeFormat = %x %I:%M %p
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 0
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = PG
+time_pm = PTG
diff --git a/www/firefoxos/locales/date.nb-NO.properties b/www/firefoxos/locales/date.nb-NO.properties
new file mode 100644
index 0000000..a0b1a1c
--- /dev/null
+++ b/www/firefoxos/locales/date.nb-NO.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = Søndag
+weekday-1-long = Mandag
+weekday-2-long = Tirsdag
+weekday-3-long = Onsdag
+weekday-4-long = Torsdag
+weekday-5-long = Fredag
+weekday-6-long = Lørdag
+
+weekday-0-short = Søn
+weekday-1-short = Man
+weekday-2-short = Tir
+weekday-3-short = Ons
+weekday-4-short = Tor
+weekday-5-short = Fre
+weekday-6-short = Lør
+
+# Month names
+
+month-0-long  = Januar
+month-1-long  = Februar
+month-2-long  = Mars
+month-3-long  = April
+month-4-long  = Mai
+month-5-long  = Juni
+month-6-long  = Juli
+month-7-long  = August
+month-8-long  = September
+month-9-long  = Oktober
+month-10-long = November
+month-11-long = Desember
+
+month-0-genitive  = Januar
+month-1-genitive  = Februar
+month-2-genitive  = Mars
+month-3-genitive  = April
+month-4-genitive  = Mai
+month-5-genitive  = Juni
+month-6-genitive  = Juli
+month-7-genitive  = August
+month-8-genitive  = September
+month-9-genitive  = Oktober
+month-10-genitive = November
+month-11-genitive = Desember
+
+month-0-short  = Jan
+month-1-short  = Feb
+month-2-short  = Mar
+month-3-short  = Apr
+month-4-short  = Mai
+month-5-short  = Jun
+month-6-short  = Jul
+month-7-short  = Aug
+month-8-short  = Sep
+month-9-short  = Okt
+month-10-short = Nov
+month-11-short = Des
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = akkurat nå
+minutes-ago-long[one]   = ett minutt siden
+minutes-ago-long[two]   = {{value}} minutt siden
+minutes-ago-long[few]   = {{value}} minutt siden
+minutes-ago-long[many]  = {{value}} minutt siden
+minutes-ago-long[other] = {{value}} minutt siden
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = akkurat nå
+hours-ago-long[one]   = en time siden
+hours-ago-long[two]   = {{value}} timer siden
+hours-ago-long[few]   = {{value}} timer siden
+hours-ago-long[many]  = {{value}} timer siden
+hours-ago-long[other] = {{value}} timer siden
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = i dag
+days-ago-long[one]   = i går
+days-ago-long[two]   = {{value}} dager siden
+days-ago-long[few]   = {{value}} dager siden
+days-ago-long[many]  = {{value}} dager siden
+days-ago-long[other] = {{value}} dager siden
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = denne uken
+weeks-ago-long[one]   = forrige uke
+weeks-ago-long[two]   = {{value}} uker siden
+weeks-ago-long[few]   = {{value}} uker siden
+weeks-ago-long[many]  = {{value}} uker siden
+weeks-ago-long[other] = {{value}} uker siden
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = denne måneden
+months-ago-long[one]   = forrige måned
+months-ago-long[two]   = {{value}} måneder siden
+months-ago-long[few]   = {{value}} måneder siden
+months-ago-long[many]  = {{value}} måneder siden
+months-ago-long[other] = {{value}} måneder siden
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = i år
+years-ago-long[one]   = i fjor
+years-ago-long[two]   = {{value}} år siden
+years-ago-long[few]   = {{value}} år siden
+years-ago-long[many]  = {{value}} år siden
+years-ago-long[other] = {{value}} år siden
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = nå
+minutes-until-long[one]   = om ett minutt
+minutes-until-long[two]   = om {{value}} minutt
+minutes-until-long[few]   = om {{value}} minutt
+minutes-until-long[many]  = om {{value}} minutt
+minutes-until-long[other] = om {{value}} minutt
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = nå
+hours-until-long[one]   = om en time
+hours-until-long[two]   = om {{value}} timer
+hours-until-long[few]   = om {{value}} timer
+hours-until-long[many]  = om {{value}} timer
+hours-until-long[other] = om {{value}} timer
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = i dag
+days-until-long[one]   = i morgen
+days-until-long[two]   = om {{value}} dager
+days-until-long[few]   = om {{value}} dager
+days-until-long[many]  = om {{value}} dager
+days-until-long[other] = om {{value}} dager
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = denne uken
+weeks-until-long[one]   = neste uke
+weeks-until-long[two]   = om {{value}} uker
+weeks-until-long[few]   = om {{value}} uker
+weeks-until-long[many]  = om {{value}} uker
+weeks-until-long[other] = om {{value}} uker
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = denne måneden
+months-until-long[one]   = neste måned
+months-until-long[two]   = om {{value}} måneder
+months-until-long[few]   = om {{value}} måneder
+months-until-long[many]  = om {{value}} måneder
+months-until-long[other] = om {{value}} måneder
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = i år
+years-until-long[one]   = neste år
+years-until-long[two]   = om {{value}} år
+years-until-long[few]   = om {{value}} år
+years-until-long[many]  = om {{value}} år
+years-until-long[other] = om {{value}} år
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = akkurat nå
+minutes-ago-short[other] = {{value}}m siden
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = akkurat nå
+hours-ago-short[other] = {{value}}t siden
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = i dag
+days-ago-short[other] = {{value}}d siden
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = nå
+minutes-until-short[other] = om {{value}}m
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = nå
+hours-until-short[other] = om {{value}}h
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = i dag
+days-until-short[other] = om {{value}}d
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (feil dato)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a, %e. %b %Y %H:%M:%S
+dateTimeFormat_%x = %d.%m.%Y 
+dateTimeFormat_%X = %H:%M:%S
+
+shortTimeFormat = %H:%M
+shortDateTimeFormat = %x %H:%M
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 1
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = AM
+time_pm = PM
\ No newline at end of file
diff --git a/www/firefoxos/locales/date.ne-NP.properties b/www/firefoxos/locales/date.ne-NP.properties
new file mode 100644
index 0000000..437dcb2
--- /dev/null
+++ b/www/firefoxos/locales/date.ne-NP.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = आइतबार
+weekday-1-long = सोमबार
+weekday-2-long = मंगलबार
+weekday-3-long = बुधबार
+weekday-4-long = बिहिबार
+weekday-5-long = शुक्रबार
+weekday-6-long = शनिबार
+
+weekday-0-short = आइत
+weekday-1-short = सोम
+weekday-2-short = मङ्गल
+weekday-3-short = बुध
+weekday-4-short = बिहि
+weekday-5-short = शुक्र
+weekday-6-short = शनि
+
+# Month names
+
+month-0-long  = जनवरी
+month-1-long  = फेब्रुअरी
+month-2-long  = ंमार्च
+month-3-long  = अप्रिल
+month-4-long  = मे
+month-5-long  = जुन
+month-6-long  = जुलाई
+month-7-long  = अगस्ट
+month-8-long  = सेप्टेम्बर
+month-9-long  = अक्टोबर
+month-10-long = नोभेम्बर
+month-11-long = डिसेम्बर
+
+month-0-genitive  = जनवरी
+month-1-genitive  = फेब्रुअरी
+month-2-genitive  = ंमार्च
+month-3-genitive  = अप्रिल
+month-4-genitive  = मे
+month-5-genitive  = जुन
+month-6-genitive  = जुलाई
+month-7-genitive  = अगस्ट
+month-8-genitive  = सेप्टेम्बर
+month-9-genitive  = अक्टोबर
+month-10-genitive = नोभेम्बर
+month-11-genitive = डिसेम्बर
+
+month-0-short  = जन
+month-1-short  = फेब
+month-2-short  = मार्च
+month-3-short  = अप्रिल
+month-4-short  = मे
+month-5-short  = जुन
+month-6-short  = जुलाई
+month-7-short  = अगस्ट
+month-8-short  = सेप्टेम्वर
+month-9-short  = अक्टुवर
+month-10-short = नोभेम्वर
+month-11-short = डिसेम्वर
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = भर्खरै
+minutes-ago-long[one]   = एक मिनेट अगाडि
+minutes-ago-long[two]   = {{value}} मिनेट अगाडि
+minutes-ago-long[few]   = {{value}} मिनेट अगाडि
+minutes-ago-long[many]  = {{value}} मिनेट अगाडि
+minutes-ago-long[other] = {{value}} मिनेट अगाडि
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = भर्खरै
+hours-ago-long[one]   = एक घन्टा अगाडि
+hours-ago-long[two]   = {{value}} घण्टा अगाडि
+hours-ago-long[few]   = {{value}} घण्टा अगाडि
+hours-ago-long[many]  = {{value}} घण्टा अगाडि
+hours-ago-long[other] = {{value}} घण्टा अगाडि
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = आज
+days-ago-long[one]   = हिजो
+days-ago-long[two]   = {{value}} दिन अगाडि
+days-ago-long[few]   = {{value}} दिन अगाडि
+days-ago-long[many]  = {{value}} दिन अगाडि
+days-ago-long[other] = {{value}} दिन अगाडि
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = यो हप्ता
+weeks-ago-long[one]   = गएको हप्ता
+weeks-ago-long[two]   = {{value}} हप्ता अगाडि
+weeks-ago-long[few]   = {{value}} हप्ता अगाडि
+weeks-ago-long[many]  = {{value}} हप्ता अगाडि
+weeks-ago-long[other] = {{value}} हप्ता अगाडि
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = यो महिना
+months-ago-long[one]   = गएको महिना
+months-ago-long[two]   = {{value}} महिना अगाडि
+months-ago-long[few]   = {{value}} महिना अगाडि
+months-ago-long[many]  = {{value}} महिना अगाडि
+months-ago-long[other] = {{value}} महिना अगाडि
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = यो वर्ष
+years-ago-long[one]   = अघिल्लो वर्ष
+years-ago-long[two]   = {{value}} वर्ष अगाडि
+years-ago-long[few]   = {{value}} वर्ष अगाडि
+years-ago-long[many]  = {{value}} वर्ष अगाडि
+years-ago-long[other] = {{value}} वर्ष अगाडि
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = अहिले
+minutes-until-long[one]   = एक मिनेटमा
+minutes-until-long[two]   = {{value}} मिनेटमा
+minutes-until-long[few]   = {{value}} मिनेटमा
+minutes-until-long[many]  = {{value}} मिनेटमा
+minutes-until-long[other] = {{value}} मिनेटमा
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = अहिले
+hours-until-long[one]   = एक घण्टामा
+hours-until-long[two]   = {{value}} घण्टामा
+hours-until-long[few]   = {{value}} घण्टामा
+hours-until-long[many]  = {{value}} घण्टामा
+hours-until-long[other] = {{value}} घण्टामा
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = आज
+days-until-long[one]   = भोलि
+days-until-long[two]   = {{value}} दिनमा
+days-until-long[few]   = {{value}} दिनमा
+days-until-long[many]  = {{value}} दिनमा
+days-until-long[other] = {{value}} दिनमा
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = यो हप्ता
+weeks-until-long[one]   = पछिल्लो हप्ता
+weeks-until-long[two]   = {{value}} हप्तामा
+weeks-until-long[few]   = {{value}} हप्तामा
+weeks-until-long[many]  = {{value}} हप्तामा
+weeks-until-long[other] = {{value}} हप्तामा
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = यस महिना
+months-until-long[one]   = पछिल्लो महिना
+months-until-long[two]   = {{value}} महिनामा
+months-until-long[few]   = {{value}} महिनामा
+months-until-long[many]  = {{value}} महिनामा
+months-until-long[other] = {{value}} महिनामा
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = यस बर्ष
+years-until-long[one]   = आर्को बर्ष
+years-until-long[two]   = {{value}} बर्षमा
+years-until-long[few]   = {{value}} बर्षमा
+years-until-long[many]  = {{value}} वर्षमा
+years-until-long[other] = {{value}} वर्षमा
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = भर्खरै
+minutes-ago-short[other] = {{value}}मिनेट अघि
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = भर्खरै
+hours-ago-short[other] = {{value}}घण्टा अघि
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = आज
+days-ago-short[other] = {{value}}दिन अघि
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = अहिले
+minutes-until-short[other] = {{value}}मिनेटमा
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = अहिले
+hours-until-short[other] = {{value}}घण्टामा
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = आज
+days-until-short[other] = {{value}}दिनमा
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (गलत मिति)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a %b %e %Y %I:%M:%S %p
+dateTimeFormat_%x = %m/%d/%Y
+dateTimeFormat_%X = %I:%M:%S %p
+
+shortTimeFormat = %I:%M %p
+shortDateTimeFormat = %x %I:%M %p
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 0
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = ए एम
+time_pm = पी एम
diff --git a/www/firefoxos/locales/date.nl.properties b/www/firefoxos/locales/date.nl.properties
new file mode 100644
index 0000000..b912c31
--- /dev/null
+++ b/www/firefoxos/locales/date.nl.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = zondag
+weekday-1-long = maandag
+weekday-2-long = dinsdag
+weekday-3-long = woensdag
+weekday-4-long = donderdag
+weekday-5-long = vrijdag
+weekday-6-long = zaterdag
+
+weekday-0-short = zon
+weekday-1-short = maa
+weekday-2-short = din
+weekday-3-short = woe
+weekday-4-short = don
+weekday-5-short = vrij
+weekday-6-short = zat
+
+# Month names
+
+month-0-long  = januari
+month-1-long  = februari
+month-2-long  = maart
+month-3-long  = april
+month-4-long  = mei
+month-5-long  = juni
+month-6-long  = juli
+month-7-long  = augustus
+month-8-long  = september
+month-9-long  = oktober
+month-10-long = november
+month-11-long = december
+
+month-0-genitive  = januari
+month-1-genitive  = februari
+month-2-genitive  = maart
+month-3-genitive  = april
+month-4-genitive  = mei
+month-5-genitive  = juni
+month-6-genitive  = juli
+month-7-genitive  = augustus
+month-8-genitive  = september
+month-9-genitive  = oktober
+month-10-genitive = november
+month-11-genitive = december
+
+month-0-short  = jan
+month-1-short  = feb
+month-2-short  = mrt
+month-3-short  = apr
+month-4-short  = mei
+month-5-short  = jun
+month-6-short  = jul
+month-7-short  = aug
+month-8-short  = sep
+month-9-short  = okt
+month-10-short = nov
+month-11-short = dec
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = zojuist
+minutes-ago-long[one]   = een minuut geleden
+minutes-ago-long[two]   = {{value}} minuten geleden
+minutes-ago-long[few]   = {{value}} minuten geleden
+minutes-ago-long[many]  = {{value}} minuten geleden
+minutes-ago-long[other] = {{value}} minuten geleden
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = zojuist
+hours-ago-long[one]   = een uur geleden
+hours-ago-long[two]   = {{value}} uur geleden
+hours-ago-long[few]   = {{value}} uur geleden
+hours-ago-long[many]  = {{value}} uur geleden
+hours-ago-long[other] = {{value}} uur geleden
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = vandaag
+days-ago-long[one]   = gisteren
+days-ago-long[two]   = {{value}} dagen geleden
+days-ago-long[few]   = {{value}} dagen geleden
+days-ago-long[many]  = {{value}} dagen geleden
+days-ago-long[other] = {{value}} dagen geleden
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = deze week
+weeks-ago-long[one]   = vorige week
+weeks-ago-long[two]   = {{value}} weken geleden
+weeks-ago-long[few]   = {{value}} weken geleden
+weeks-ago-long[many]  = {{value}} weken geleden
+weeks-ago-long[other] = {{value}} weken geleden
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = deze maand
+months-ago-long[one]   = vorige maand
+months-ago-long[two]   = {{value}} maanden geleden
+months-ago-long[few]   = {{value}} maanden geleden
+months-ago-long[many]  = {{value}} maanden geleden
+months-ago-long[other] = {{value}} maanden geleden
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = dit jaar
+years-ago-long[one]   = vorig jaar
+years-ago-long[two]   = {{value}} jaar geleden
+years-ago-long[few]   = {{value}} jaar geleden
+years-ago-long[many]  = {{value}} jaar geleden
+years-ago-long[other] = {{value}} jaar geleden
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = nu
+minutes-until-long[one]   = zo meteen
+minutes-until-long[two]   = over {{value}} minuten
+minutes-until-long[few]   = over {{value}} minuten
+minutes-until-long[many]  = over {{value}} minuten
+minutes-until-long[other] = over {{value}} minuten
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = nu
+hours-until-long[one]   = over een uur
+hours-until-long[two]   = over {{value}} uur
+hours-until-long[few]   = over {{value}} uur
+hours-until-long[many]  = over {{value}} uur
+hours-until-long[other] = over {{value}} uur
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = vandaag
+days-until-long[one]   = morgen
+days-until-long[two]   = over {{value}} dagen
+days-until-long[few]   = over {{value}} dagen
+days-until-long[many]  = over {{value}} dagen
+days-until-long[other] = over {{value}} dagen
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = deze week
+weeks-until-long[one]   = volgende week
+weeks-until-long[two]   = over {{value}} weken
+weeks-until-long[few]   = over {{value}} weken
+weeks-until-long[many]  = over {{value}} weken
+weeks-until-long[other] = over {{value}} weken
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = deze maand
+months-until-long[one]   = volgende maand
+months-until-long[two]   = over {{value}} maanden
+months-until-long[few]   = over {{value}} maanden
+months-until-long[many]  = over {{value}} maanden
+months-until-long[other] = over {{value}} maanden
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = dit jaar
+years-until-long[one]   = volgend jaar
+years-until-long[two]   = over {{value}} jaar
+years-until-long[few]   = over {{value}} jaar
+years-until-long[many]  = over {{value}} jaar
+years-until-long[other] = over {{value}} jaar
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = zojuist
+minutes-ago-short[other] = {{value}}m geleden
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = zojuist
+hours-ago-short[other] = {{value}}h geleden
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = vandaag
+days-ago-short[other] = {{value}}d geleden
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = nu
+minutes-until-short[other] = over {{value}}m
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = nu
+hours-until-short[other] = over {{value}}h
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = vandaag
+days-until-short[other] = over {{value}}d
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (onjuiste datum)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a %e %b %Y %H:%M:%S
+dateTimeFormat_%x = %d-%m-%Y
+dateTimeFormat_%X = %H:%M:%S
+
+shortTimeFormat = %H:%M
+shortDateTimeFormat = %x %H:%M
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 1
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = AM
+time_pm = PM
diff --git a/www/firefoxos/locales/date.or.properties b/www/firefoxos/locales/date.or.properties
new file mode 100644
index 0000000..5b50717
--- /dev/null
+++ b/www/firefoxos/locales/date.or.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = ରବିବାର
+weekday-1-long = ସୋମବାର
+weekday-2-long = ମଙ୍ଗଳବାର
+weekday-3-long = ବୁଧବାର
+weekday-4-long = ଗୁରୁବାର
+weekday-5-long = ଶୁକ୍ରବାର
+weekday-6-long = ଶନିବାର
+
+weekday-0-short = ରବି
+weekday-1-short = ସୋମ
+weekday-2-short = ମଙ୍ଗଳ
+weekday-3-short = ବୁଧ
+weekday-4-short = ଗୁରୁ
+weekday-5-short = ଶୁକ୍ର
+weekday-6-short = ଶନି
+
+# Month names
+
+month-0-long  = ଜାନୁଆରୀ
+month-1-long  = ଫେବୃୟାରୀ
+month-2-long  = ମାର୍ଚ୍ଚ
+month-3-long  = ଏପ୍ରିଲ
+month-4-long  = ମଇ
+month-5-long  = ଜୁନ
+month-6-long  = ଜୁଲାଇ
+month-7-long  = ଅଗଷ୍ଟ
+month-8-long  = ସେପ୍ଟେମ୍ବର
+month-9-long  = ଅକ୍ଟୋବର
+month-10-long = ନଭେମ୍ବର
+month-11-long = ଡିସେମ୍ବର
+
+month-0-genitive  = ଜାନୁଆରୀ
+month-1-genitive  = ଫେବ୍ରୁଆରୀ
+month-2-genitive  = ମାର୍ଚ
+month-3-genitive  = ଅପ୍ରେଲ
+month-4-genitive  = ମେ
+month-5-genitive  = ଜୁନ
+month-6-genitive  = ଜୁଲାଇ
+month-7-genitive  = ଅଗଷ୍ଟ
+month-8-genitive  = ସେପ୍ଟେମ୍ବର
+month-9-genitive  = ଅକ୍ଟୋବର
+month-10-genitive = ନଭେମ୍ବର
+month-11-genitive = ଡିସେମ୍ବର
+
+month-0-short  = ଜାନୁଆରୀ
+month-1-short  = ଫେବ୍ରୁଆରୀ
+month-2-short  = ମାର୍ଚ୍ଚ
+month-3-short  = ଅପ୍ରେଲ
+month-4-short  = ମେ
+month-5-short  = ଜୁନ
+month-6-short  = ଜୁଲାଇ
+month-7-short  = ଅଗଷ୍ଟ
+month-8-short  = ସେପ୍ଟେମ୍ବର
+month-9-short  = ଅକ୍ଟୋବର
+month-10-short = ନଭେମ୍ବର
+month-11-short = ଡିସେମ୍ବର
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = ବର୍ତ୍ତମାନ
+minutes-ago-long[one]   = ଗୋଟିଏ ମିନିଟ ପୂର୍ବରୁ
+minutes-ago-long[two]   = {{value}} ମିନିଟ ପୂର୍ବରୁ
+minutes-ago-long[few]   = {{value}} ମିନିଟ ପୂର୍ବରୁ
+minutes-ago-long[many]  = {{value}} ମିନିଟ ପୂର୍ବରୁ
+minutes-ago-long[other] = {{value}} ମିନିଟ ପୂର୍ବରୁ
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = ବର୍ତ୍ତମାନ
+hours-ago-long[one]   = ଗୋଟିଏ ଘଣ୍ଟା ପୂର୍ବରୁ
+hours-ago-long[two]   = {{value}} ଘଣ୍ଟା ପୂର୍ବରୁ
+hours-ago-long[few]   = {{value}} ଘଣ୍ଟା ଆଗରୁ
+hours-ago-long[many]  = {{value}} ଘଣ୍ଟା ଆଗରୁ
+hours-ago-long[other] = {{value}} ଘଣ୍ଟା ଆଗରୁ
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = ଆଜି
+days-ago-long[one]   = ଗତକାଲି
+days-ago-long[two]   = {{value}} ଦିନ ଆଗରୁ
+days-ago-long[few]   = {{value}} ଦିନ ଆଗରୁ
+days-ago-long[many]  = {{value}} ଦିନ ଆଗରୁ
+days-ago-long[other] = {{value}}ଦିନ ଆଗରୁ
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = ଏହି ସପ୍ତାହ
+weeks-ago-long[one]   = ଗତ ସପ୍ତାହ
+weeks-ago-long[two]   = {{value}} ସପ୍ତାହ ପୂର୍ବରୁ
+weeks-ago-long[few]   = {{value}} ସପ୍ତାହ ପୂର୍ବରୁ
+weeks-ago-long[many]  = {{value}} ସପ୍ତାହ ପୂର୍ବରୁ
+weeks-ago-long[other] = {{value}} ସପ୍ତାହ ପୂର୍ବରୁ
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = ଏହି ମାସ
+months-ago-long[one]   = ଗତ ମାସ
+months-ago-long[two]   = {{value}} ମାସ ଆଗରୁ
+months-ago-long[few]   = {{value}}ମାସ ଆଗରୁ
+months-ago-long[many]  = {{value}}ମାସ ଆଗରୁ
+months-ago-long[other] = {{value}}ମାସ ଆଗରୁ
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = ଏହି ବର୍ଷ
+years-ago-long[one]   = ଗତ ବର୍ଷ
+years-ago-long[two]   = {{value}}ବର୍ଷ ଆଗରୁ
+years-ago-long[few]   = {{value}}ବର୍ଷ ଆଗରୁ
+years-ago-long[many]  = {{value}}ବର୍ଷ ଆଗରୁ
+years-ago-long[other] = {{value}}ବର୍ଷ ଆଗରୁ
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = ବର୍ତ୍ତମାନ
+minutes-until-long[one]   = ଗୋଟିଏ ମିନିଟରେ
+minutes-until-long[two]   = {{value}} ମିନିଟରେ
+minutes-until-long[few]   = {{value}} ମିନିଟରେ
+minutes-until-long[many]  = {{value}} ମିନିଟରେ
+minutes-until-long[other] = {{value}} ମିନିଟରେ
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = ବର୍ତ୍ତମାନ
+hours-until-long[one]   = ଘଣ୍ଟାକ ଭିତରେ
+hours-until-long[two]   = {{value}} ଘଣ୍ଟାରେ
+hours-until-long[few]   = {{value}} ଘଣ୍ଟାରେ
+hours-until-long[many]  = {{value}} ଘଣ୍ଟାରେ
+hours-until-long[other] = {{value}} ଘଣ୍ଟାରେ
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = ଆଜି
+days-until-long[one]   = ଆସନ୍ତାକାଲି
+days-until-long[two]   = {{value}} ଦିନରେ
+days-until-long[few]   = {{value}} ଦିନରେ
+days-until-long[many]  = {{value}} ଦିନରେ
+days-until-long[other] = {{value}} ଦିନରେ
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = ଏହି ସପ୍ତାହ
+weeks-until-long[one]   = ଆସନ୍ତା ସପ୍ତାହ
+weeks-until-long[two]   = {{value}} ସପ୍ତାହରେ
+weeks-until-long[few]   = {{value}} ସପ୍ତାହରେ
+weeks-until-long[many]  = {{value}} ସପ୍ତାହରେ
+weeks-until-long[other] = {{value}} ସପ୍ତାହରେ
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = ଏହି ମାସ
+months-until-long[one]   = ଆସନ୍ତା ମାସ
+months-until-long[two]   = {{value}} ମାସରେ
+months-until-long[few]   = {{value}} ମାସରେ
+months-until-long[many]  = {{value}} ମାସରେ
+months-until-long[other] = {{value}} ମାସରେ
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = ଏହି ବର୍ଷ
+years-until-long[one]   = ଆସନ୍ତା ବର୍ଷ
+years-until-long[two]   = {{value}} ବର୍ଷରେ
+years-until-long[few]   = {{value}} ବର୍ଷରେ
+years-until-long[many]  = {{value}} ବର୍ଷରେ
+years-until-long[other] = {{value}} ବର୍ଷରେ
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = ଏହିକ୍ଷଣି
+minutes-ago-short[other] = {{value}} ମିନିଟ ଆଗରୁ
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = ଏହି କ୍ଷଣି
+hours-ago-short[other] = {{value}}ଘଣ୍ଟା ଆଗରୁ
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = ଆଜି
+days-ago-short[other] = {{value}}ଦିନ ଆଗରୁ
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = ବର୍ତ୍ତମାନ
+minutes-until-short[other] = {{value}} ମାସରେ
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = ବର୍ତ୍ତମାନ
+hours-until-short[other] = {{value}} ଘଣ୍ଟାରେ
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = ଆଜି
+days-until-short[other] = {{value}} ଦିନରେ
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (ଭୁଲ ତାରିଖ)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a %b %e %Y %I:%M:%S %p
+dateTimeFormat_%x = %m/%d/%Y
+dateTimeFormat_%X = %I:%M:%S %p
+
+shortTimeFormat = %I:%M %p
+shortDateTimeFormat = %x %I:%M %p
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = ୦
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = AM
+time_pm = PM
diff --git a/www/firefoxos/locales/date.pa.properties b/www/firefoxos/locales/date.pa.properties
new file mode 100644
index 0000000..2a84533
--- /dev/null
+++ b/www/firefoxos/locales/date.pa.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = ਐਤਵਾਰ
+weekday-1-long = ਸੋਮਵਾਰ
+weekday-2-long = ਮੰਗਲਵਾਰ
+weekday-3-long = ਬੁੱਧਵਾਰ
+weekday-4-long = ਵੀਰਵਾਰ
+weekday-5-long = ਸ਼ੁੱਕਰਵਾਰ
+weekday-6-long = ਸ਼ਨਿੱਚਰਵਾਰ
+
+weekday-0-short = ਐਤ
+weekday-1-short = ਸੋਮ
+weekday-2-short = ਮੰਗਲ
+weekday-3-short = ਬੁੱਧ
+weekday-4-short = ਵੀਰ
+weekday-5-short = ਸ਼ੁੱਕਰ
+weekday-6-short = ਸ਼ਨਿੱ
+
+# Month names
+
+month-0-long  = ਜਨਵਰੀ
+month-1-long  = ਫਰਵਰੀ
+month-2-long  = ਮਾਰਚ
+month-3-long  = ਅਪਰੈਲ
+month-4-long  = ਮਈ
+month-5-long  = ਜੂਨ
+month-6-long  = ਜੁਲਾਈ
+month-7-long  = ਅਗਸਤ
+month-8-long  = ਸਤੰਬਰ
+month-9-long  = ਅਕਤੂਬਰ
+month-10-long = ਨਵੰਬਰ
+month-11-long = ਦਸੰਬਰ
+
+month-0-genitive  = ਜਨਵਰੀ
+month-1-genitive  = ਫਰਵਰੀ
+month-2-genitive  = ਮਾਰਚ
+month-3-genitive  = ਅਪਰੈਲ
+month-4-genitive  = ਮਈ
+month-5-genitive  = ਜੂਨ
+month-6-genitive  = ਜੁਲਾਈ
+month-7-genitive  = ਅਗਸਤ
+month-8-genitive  = ਸਤੰਬਰ
+month-9-genitive  = ਅਕਤੂਬਰ
+month-10-genitive = ਨਵੰਬਰ
+month-11-genitive = ਦਸੰਬਰ
+
+month-0-short  = ਜਨ
+month-1-short  = ਫਰ
+month-2-short  = ਮਾਰ
+month-3-short  = ਅਪ
+month-4-short  = ਮਈ
+month-5-short  = ਜੂਨ
+month-6-short  = ਜੁਲਾ
+month-7-short  = ਅਗ
+month-8-short  = ਸਤੰ
+month-9-short  = ਅਕਤੂ
+month-10-short = ਨਵੰ
+month-11-short = ਦਸੰ
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = ਹੁਣੇ ਹੀਂ
+minutes-ago-long[one]   = ਮਿੰਟ ਕੁ ਪਹਿਲਾਂ
+minutes-ago-long[two]   = {{value}} ਮਿੰਟ ਪਹਿਲਾਂ
+minutes-ago-long[few]   = {{value}} ਮਿੰਟ ਪਹਿਲਾਂ
+minutes-ago-long[many]  = {{value}} ਮਿੰਟ ਪਹਿਲਾਂ
+minutes-ago-long[other] = {{value}}  ਮਿੰਟ ਪਹਿਲਾਂ
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = ਹੁਣੇ ਹੀ
+hours-ago-long[one]   = ਘੰਟਾ ਪਹਿਲਾਂ
+hours-ago-long[two]   = {{value}} ਘੰਟੇ ਪਹਿਲਾਂ
+hours-ago-long[few]   = {{value}} ਘੰਟੇ ਪਹਿਲਾਂ
+hours-ago-long[many]  = {{value}} ਘੰਟੇ ਪਹਿਲਾਂ
+hours-ago-long[other] = {{value}} ਘੰਟੇ ਪਹਿਲਾਂ
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = ਅੱਜ
+days-ago-long[one]   = ਕੱਲ੍ਹ
+days-ago-long[two]   = {{value}} ਦਿਨ ਪਹਿਲਾਂ
+days-ago-long[few]   = {{value}} ਦਿਨ ਪਹਿਲਾਂ
+days-ago-long[many]  = {{value}} ਦਿਨ ਪਹਿਲਾਂ
+days-ago-long[other] = {{value}} ਦਿਨ ਪਹਿਲਾਂ
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = ਇਹ ਹਫ਼ਤੇ
+weeks-ago-long[one]   = ਪਿਛਲੇ ਹਫ਼ਤੇ
+weeks-ago-long[two]   = {{value}} ਹਫ਼ਤੇ ਪਹਿਲਾਂ
+weeks-ago-long[few]   = {{value}} ਹਫ਼ਤੇ ਪਹਿਲਾਂ
+weeks-ago-long[many]  = {{value}} ਹਫ਼ਤੇ ਪਹਿਲਾਂ
+weeks-ago-long[other] = {{value}} ਹਫ਼ਤੇ ਪਹਿਲਾਂ
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = ਇਹ ਮਹੀਨੇ
+months-ago-long[one]   = ਪਿਛਲੇ ਮਹੀਨੇ
+months-ago-long[two]   = {{value}} ਮਹੀਨੇ ਪਹਿਲਾਂ
+months-ago-long[few]   = {{value}} ਮਹੀਨੇ ਪਹਿਲਾਂ
+months-ago-long[many]  = {{value}} ਮਹੀਨੇ ਪਹਿਲਾਂ
+months-ago-long[other] = {{value}} ਮਹੀਨੇ ਪਹਿਲਾਂ
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = ਇਹ ਸਾਲ
+years-ago-long[one]   = ਪਿਛਲੇ ਸਾਲ
+years-ago-long[two]   = {{value}} ਸਾਲ ਪਹਿਲਾਂ
+years-ago-long[few]   = {{value}} ਸਾਲ ਪਹਿਲਾਂ
+years-ago-long[many]  = {{value}} ਸਾਲ ਪਹਿਲਾਂ
+years-ago-long[other] = {{value}} ਸਾਲ ਪਹਿਲਾਂ
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = ਹੁਣ
+minutes-until-long[one]   = ਮਿੰਟ ਵਿੱਚ
+minutes-until-long[two]   = {{value}} ਮਿੰਟਾਂ ਵਿੱਚ
+minutes-until-long[few]   = {{value}} ਮਿੰਟਾਂ ਵਿੱਚ
+minutes-until-long[many]  = {{value}} ਮਿੰਟਾਂ ਵਿੱਚ
+minutes-until-long[other] = {{value}} ਮਿੰਟਾਂ ਵਿੱਚ
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = ਹੁਣ
+hours-until-long[one]   = ਇੱਕ ਘੰਟੇ ਵਿੱਚ
+hours-until-long[two]   = {{value}} ਘੰਟਿਆਂ ਵਿੱਚ
+hours-until-long[few]   = {{value}} ਘੰਟਿਆਂ ਵਿੱਚ
+hours-until-long[many]  = {{value}} ਘੰਟਿਆਂ ਵਿੱਚ
+hours-until-long[other] = {{value}} ਘੰਟਿਆਂ ਵਿੱਚ
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = ਅੱਜ
+days-until-long[one]   = ਭਲਕੇ
+days-until-long[two]   = {{value}} ਦਿਨਾਂ ਵਿੱਚ
+days-until-long[few]   = {{value}} ਦਿਨਾਂ ਵਿੱਚ
+days-until-long[many]  = {{value}} ਦਿਨਾਂ ਵਿੱਚ
+days-until-long[other] = {{value}} ਦਿਨਾਂ ਵਿੱਚ
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = ਇਸ ਹਫ਼ਤੇ
+weeks-until-long[one]   = ਅਗਲੇ ਹਫ਼ਤੇ
+weeks-until-long[two]   = {{value}} ਹਫ਼ਤਿਆਂ ਵਿੱਚ
+weeks-until-long[few]   = {{value}} ਹਫ਼ਤਿਆਂ ਵਿੱਚ
+weeks-until-long[many]  = {{value}} ਹਫ਼ਤਿਆਂ ਵਿੱਚ
+weeks-until-long[other] = {{value}} ਹਫ਼ਤਿਆਂ ਵਿੱਚ
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = ਇਸ ਮਹੀਨੇ
+months-until-long[one]   = ਅਗਲੇ ਮਹੀਨੇ
+months-until-long[two]   =  {{value}} ਮਹੀਨਿਆਂ ਵਿੱਚ
+months-until-long[few]   =  {{value}} ਮਹੀਨਿਆਂ ਵਿੱਚ
+months-until-long[many]  =  {{value}} ਮਹੀਨਿਆਂ ਵਿੱਚ
+months-until-long[other] =  {{value}} ਮਹੀਨਿਆਂ ਵਿੱਚ
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = ਇਸ ਸਾਲ
+years-until-long[one]   = ਅਗਲੇ ਸਾਲ
+years-until-long[two]   =  {{value}} ਸਾਲਾਂ ਵਿੱਚ
+years-until-long[few]   =  {{value}} ਸਾਲਾਂ ਵਿੱਚ
+years-until-long[many]  =  {{value}} ਸਾਲਾਂ ਵਿੱਚ
+years-until-long[other] =  {{value}} ਸਾਲਾਂ ਵਿੱਚ
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = ਹੁਣੇ ਹੀ
+minutes-ago-short[other] = {{value}}ਮਿੰ ਪਹਿਲਾਂ
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = ਹੁਣੇ ਹੀਂ
+hours-ago-short[other] = {{value}}ਘੰ ਪਹਿਲਾਂ
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = ਅੱਜ
+days-ago-short[other] = {{value}}ਦਿ ਪਹਿਲਾਂ
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = ਹੁਣ
+minutes-until-short[other] = {{value}}ਮਿੰ ਵਿੱਚ
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = ਹੁਣ
+hours-until-short[other] = {{value}}ਘੰ ਵਿੱਚ
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = ਅੱਜ
+days-until-short[other] = {{value}}ਦਿ ਵਿੱਚ
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (ਗਲਤ ਮਿਤੀ)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a %e %b  %Y %I:%M:%S %p
+dateTimeFormat_%x = %d/%m/%Y
+dateTimeFormat_%X = %I:%M:%S %p
+
+shortTimeFormat = %I:%M %p
+shortDateTimeFormat = %x %I:%M %p
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 1
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = ਸਵੇਰੇ
+time_pm = ਸ਼ਾਮ
\ No newline at end of file
diff --git a/www/firefoxos/locales/date.pl.properties b/www/firefoxos/locales/date.pl.properties
new file mode 100644
index 0000000..592d2bb
--- /dev/null
+++ b/www/firefoxos/locales/date.pl.properties
@@ -0,0 +1,205 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+weekday-0-long=Niedziela
+weekday-1-long=Poniedziałek
+weekday-2-long=Wtorek
+weekday-3-long=Środa
+weekday-4-long=Czwartek
+weekday-5-long=Piątek
+weekday-6-long=Sobota
+
+weekday-0-short=Nd
+weekday-1-short=Pn
+weekday-2-short=Wt
+weekday-3-short=Śr
+weekday-4-short=Cz
+weekday-5-short=Pt
+weekday-6-short=Sb
+
+month-0-long=Styczeń
+month-1-long=Luty
+month-2-long=Marzec
+month-3-long=Kwiecień
+month-4-long=Maj
+month-5-long=Czerwiec
+month-6-long=Lipiec
+month-7-long=Sierpień
+month-8-long=Wrzesień
+month-9-long=Październik
+month-10-long=Listopad
+month-11-long=Grudzień
+
+month-0-genitive=stycznia
+month-1-genitive=lutego
+month-2-genitive=marca
+month-3-genitive=kwietnia
+month-4-genitive=maja
+month-5-genitive=czerwca
+month-6-genitive=lipca
+month-7-genitive=sierpnia
+month-8-genitive=września
+month-9-genitive=października
+month-10-genitive=listopada
+month-11-genitive=grudnia
+
+month-0-short=sty
+month-1-short=lut
+month-2-short=mar
+month-3-short=kwi
+month-4-short=maj
+month-5-short=cze
+month-6-short=lip
+month-7-short=sie
+month-8-short=wrz
+month-9-short=paź
+month-10-short=lis
+month-11-short=gru
+
+minutes-ago-long={[plural(value)]}
+minutes-ago-long[zero]=w tym momencie
+minutes-ago-long[one]=przed minutą
+minutes-ago-long[two]=dwie minuty temu
+minutes-ago-long[few]={{value}} minuty temu
+minutes-ago-long[many]={{value}} minut temu
+minutes-ago-long[other]={{value}} minut temu
+
+hours-ago-long={[plural(value)]}
+hours-ago-long[zero]=w tej godzinie
+hours-ago-long[one]=godzinę temu
+hours-ago-long[two]=dwie godziny temu
+hours-ago-long[few]={{value}} godziny temu
+hours-ago-long[many]={{value}} godzin temu
+hours-ago-long[other]={{value}} godzin temu
+
+days-ago-long={[plural(value)]}
+days-ago-long[zero]=dzisiaj
+days-ago-long[one]=wczoraj
+days-ago-long[two]=przedwczoraj
+days-ago-long[few]={{value}} dni temu
+days-ago-long[many]={{value}} dni temu
+days-ago-long[other]={{value}} dni temu
+
+weeks-ago-long={[plural(value)]}
+weeks-ago-long[zero]=w tym tygodniu
+weeks-ago-long[one]=w zeszłym tygodniu
+weeks-ago-long[two]=dwa tygodnie temu
+weeks-ago-long[few]={{value}} tygodnie temu
+weeks-ago-long[many]={{value}} tygodni temu
+weeks-ago-long[other]={{value}} tygodni temu
+
+months-ago-long={[plural(value)]}
+months-ago-long[zero]=w tym miesiącu
+months-ago-long[one]=w zeszłym miesiącu
+months-ago-long[two]=dwa miesiące temu
+months-ago-long[few]={{value}} miesiące temu
+months-ago-long[many]={{value}} miesięcy temu
+months-ago-long[other]={{value}} miesięcy temu
+
+years-ago-long={[plural(value)]}
+years-ago-long[zero]=w tym roku
+years-ago-long[one]=w zeszłym roku
+years-ago-long[two]=dwa lata temu
+years-ago-long[few]={{value}} lata temu
+years-ago-long[many]={{value}} lat temu
+years-ago-long[other]={{value}} lat temu
+
+minutes-until-long={[plural(value)]}
+minutes-until-long[zero]=teraz
+minutes-until-long[one]=za minutę
+minutes-until-long[two]=za dwie minuty
+minutes-until-long[few]=za {{value}} minuty
+minutes-until-long[many]=za {{value}} minut
+minutes-until-long[other]=za {{value}} minut
+
+hours-until-long={[plural(value)]}
+hours-until-long[zero]=teraz
+hours-until-long[one]=za godzinę
+hours-until-long[two]=za dwie godziny
+hours-until-long[few]=za {{value}} godziny
+hours-until-long[many]=za {{value}} godzin
+hours-until-long[other]=za {{value}} godzin
+
+days-until-long={[plural(value)]}
+days-until-long[zero]=dzisiaj
+days-until-long[one]=jutro
+days-until-long[two]=za dwa dni
+days-until-long[few]=za {{value}} dni
+days-until-long[many]=za {{value}} dni
+days-until-long[other]=za {{value}} dni
+
+weeks-until-long={[plural(value)]}
+weeks-until-long[zero]=w tym tygodniu
+weeks-until-long[one]=w przyszłym tygodniu
+weeks-until-long[two]=za dwa tygodnie
+weeks-until-long[few]=za {{value}} tygodnie
+weeks-until-long[many]=za {{value}} tygodni
+weeks-until-long[other]=za {{value}} tygodni
+
+months-until-long={[plural(value)]}
+months-until-long[zero]=w tym miesiącu
+months-until-long[one]=w przyszłym miesiącu
+months-until-long[two]=za dwa miesiące
+months-until-long[few]=za {{value}} miesiące
+months-until-long[many]=za {{value}} miesięcy
+months-until-long[other]=za {{value}} miesięcy
+
+years-until-long={[plural(value)]}
+years-until-long[zero]=w tym roku
+years-until-long[one]=w przyszłym roku
+years-until-long[two]=za dwa lata
+years-until-long[few]=za {{value}} lata
+years-until-long[many]=za {{value}} lat
+years-until-long[other]=za {{value}} lat
+
+minutes-ago-short={[plural(value)]}
+minutes-ago-short[zero]=teraz
+minutes-ago-short[other]={{value}} min temu
+
+hours-ago-short={[plural(value)]}
+hours-ago-short[zero]=teraz
+hours-ago-short[other]={{value}} godz. temu
+
+days-ago-short={[plural(value)]}
+days-ago-short[zero]=dzisiaj
+days-ago-short[other]={{value}} dni temu
+
+minutes-until-short={[plural(value)]}
+minutes-until-short[zero]=teraz
+minutes-until-short[other]=za {{value}} min
+
+hours-until-short={[plural(value)]}
+hours-until-short[zero]=teraz
+hours-until-short[other]=za {{value}} godz.
+
+days-until-short={[plural(value)]}
+days-until-short[zero]=dzisiaj
+days-until-short[other]=za {{value}} dni
+
+incorrectDate=(nieprawidłowa data)
+
+dateTimeFormat_%c=%a, %e %b %Y, %H:%M:%S
+dateTimeFormat_%x=%e.%m.%Y
+dateTimeFormat_%X=%H:%M:%S
+
+shortTimeFormat=%H:%M
+shortDateTimeFormat=%x %H:%M
+
+weekStartsOnMonday=1
+
+time_am=
+time_pm=
diff --git a/www/firefoxos/locales/date.pt-BR.properties b/www/firefoxos/locales/date.pt-BR.properties
new file mode 100644
index 0000000..aec5d63
--- /dev/null
+++ b/www/firefoxos/locales/date.pt-BR.properties
@@ -0,0 +1,222 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = Domingo
+weekday-1-long = Segunda-feira
+weekday-2-long = Terça-feira
+weekday-3-long = Quarta-feira
+weekday-4-long = Quinta-feira
+weekday-5-long = Sexta-feira
+weekday-6-long = Sábado
+
+weekday-0-short = Dom
+weekday-1-short = Seg
+weekday-2-short = Ter
+weekday-3-short = Qua
+weekday-4-short = Qui
+weekday-5-short = Sex
+weekday-6-short = Sáb
+
+# Month names
+
+month-0-long  = Janeiro
+month-1-long  = Fevereiro
+month-2-long  = Março
+month-3-long  = Abril
+month-4-long  = Maio
+month-5-long  = Junho
+month-6-long  = Julho
+month-7-long  = Agosto
+month-8-long  = Setembro
+month-9-long  = Outubro
+month-10-long = Novembro
+month-11-long = Dezembro
+
+month-0-genitive  = Janeiro
+month-1-genitive  = Fevereiro
+month-2-genitive  = Março
+month-3-genitive  = Abril
+month-4-genitive  = Maio
+month-5-genitive  = Junho
+month-6-genitive  = Julho
+month-7-genitive  = Agosto
+month-8-genitive  = Setembro
+month-9-genitive  = Outubro
+month-10-genitive = Novembro
+month-11-genitive = Dezembro
+
+month-0-short  = Jan
+month-1-short  = Fev
+month-2-short  = Mar
+month-3-short  = Abr
+month-4-short  = Mai
+month-5-short  = Jun
+month-6-short  = Jul
+month-7-short  = Ago
+month-8-short  = Set
+month-9-short  = Out
+month-10-short = Nov
+month-11-short = Dez
+
+# Relative time ("pretty dates")
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = há pouco
+minutes-ago-long[one]   = um minuto atrás
+minutes-ago-long[two]   = {{value}} minutos atrás
+minutes-ago-long[few]   = {{value}} minutos atrás
+minutes-ago-long[many]  = {{value}} minutos atrás
+minutes-ago-long[other] = {{value}} minutos atrás
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = há pouco
+hours-ago-long[one]   = uma hora atrás
+hours-ago-long[two]   = {{value}} horas atrás
+hours-ago-long[few]   = {{value}} horas atrás
+hours-ago-long[many]  = {{value}} horas atrás
+hours-ago-long[other] = {{value}} horas atrás
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = hoje
+days-ago-long[one]   = ontem
+days-ago-long[two]   = {{value}} dias atrás
+days-ago-long[few]   = {{value}} dias atrás
+days-ago-long[many]  = {{value}} dias atrás
+days-ago-long[other] = {{value}} dias atrás
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = esta semana
+weeks-ago-long[one]   = semana passada
+weeks-ago-long[two]   = {{value}} semanas atrás
+weeks-ago-long[few]   = {{value}} semanas atrás
+weeks-ago-long[many]  = {{value}} semanas atrás
+weeks-ago-long[other] = {{value}} semanas atrás
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = este mês
+months-ago-long[one]   = mês passado
+months-ago-long[two]   = {{value}} meses atrás
+months-ago-long[few]   = {{value}} meses atrás
+months-ago-long[many]  = {{value}} meses atrás
+months-ago-long[other] = {{value}} meses atrás
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = este ano
+years-ago-long[one]   = ano passado
+years-ago-long[two]   = {{value}} anos atrás
+years-ago-long[few]   = {{value}} anos atrás
+years-ago-long[many]  = {{value}} anos atrás
+years-ago-long[other] = {{value}} anos atrás
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = agora
+minutes-until-long[one]   = em um minuto
+minutes-until-long[two]   = em {{value}} minutos
+minutes-until-long[few]   = em {{value}} minutos
+minutes-until-long[many]  = em {{value}} minutos
+minutes-until-long[other] = em {{value}} minutos
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = agora
+hours-until-long[one]   = em uma hora
+hours-until-long[two]   = em {{value}} horas
+hours-until-long[few]   = em {{value}} horas
+hours-until-long[many]  = em {{value}} horas
+hours-until-long[other] = em {{value}} horas
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = hoje
+days-until-long[one]   = amanhã
+days-until-long[two]   = em {{value}} dias
+days-until-long[few]   = em {{value}} dias
+days-until-long[many]  = em {{value}} dias
+days-until-long[other] = em {{value}} dias
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = esta semana
+weeks-until-long[one]   = semana que vem
+weeks-until-long[two]   = em {{value}} semanas
+weeks-until-long[few]   = em {{value}} semanas
+weeks-until-long[many]  = em {{value}} semanas
+weeks-until-long[other] = em {{value}} semanas
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = este mês
+months-until-long[one]   = mês que vem
+months-until-long[two]   = em {{value}} meses
+months-until-long[few]   = em {{value}} meses
+months-until-long[many]  = em {{value}} meses
+months-until-long[other] = em {{value}} meses
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = este ano
+years-until-long[one]   = ano que vem
+years-until-long[two]   = em {{value}} anos
+years-until-long[few]   = em {{value}} anos
+years-until-long[many]  = em {{value}} anos
+years-until-long[other] = em {{value}} anos
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = há pouco
+minutes-ago-short[other] = {{value}}min atrás
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = há pouco
+hours-ago-short[other] = {{value}}h atrás
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = hoje
+days-ago-short[other] = {{value}}d atrás
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = agora
+minutes-until-short[other] = em {{value}}min
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = agora
+hours-until-short[other] = em {{value}}h
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = hoje
+days-until-short[other] = em {{value}}d
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (data incorreta)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %A, %e de %B de %Y %Hh %Mmin %Ss
+dateTimeFormat_%x = %d/%m/%Y
+dateTimeFormat_%X = %Hh %Mmin %Ss
+
+shortTimeFormat = %Hh%M
+shortDateTimeFormat = %x %Hh%M
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 0
diff --git a/www/firefoxos/locales/date.ro.properties b/www/firefoxos/locales/date.ro.properties
new file mode 100644
index 0000000..c0de751
--- /dev/null
+++ b/www/firefoxos/locales/date.ro.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = duminică
+weekday-1-long = luni
+weekday-2-long = marți
+weekday-3-long = miercuri
+weekday-4-long = joi
+weekday-5-long = vineri
+weekday-6-long = sâmbătă
+
+weekday-0-short = dum
+weekday-1-short = lun
+weekday-2-short = mar
+weekday-3-short = mie
+weekday-4-short = joi
+weekday-5-short = vin
+weekday-6-short = sâm
+
+# Month names
+
+month-0-long  = ianuarie
+month-1-long  = februarie
+month-2-long  = martie
+month-3-long  = aprilie
+month-4-long  = mai
+month-5-long  = iunie
+month-6-long  = iulie
+month-7-long  = august
+month-8-long  = septembrie
+month-9-long  = octombrie
+month-10-long = noiembrie
+month-11-long = decembrie
+
+month-0-genitive  = ianuarie
+month-1-genitive  = februarie
+month-2-genitive  = martie
+month-3-genitive  = aprilie
+month-4-genitive  = mai
+month-5-genitive  = iunie
+month-6-genitive  = iulie
+month-7-genitive  = august
+month-8-genitive  = septembrie
+month-9-genitive  = octombrie
+month-10-genitive = noiembrie
+month-11-genitive = decembrie
+
+month-0-short  = ian
+month-1-short  = feb
+month-2-short  = mar
+month-3-short  = apr
+month-4-short  = mai
+month-5-short  = iun
+month-6-short  = iul
+month-7-short  = aug
+month-8-short  = sep
+month-9-short  = oct
+month-10-short = noi
+month-11-short = dec
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = chiar acum
+minutes-ago-long[one]   = acum un minut
+minutes-ago-long[two]   = acum {{value}} minute
+minutes-ago-long[few]   = acum {{value}} minute
+minutes-ago-long[many]  = acum {{value}} minute
+minutes-ago-long[other] = acum {{value}} minute
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = chiar acum
+hours-ago-long[one]   = acum cu o oră
+hours-ago-long[two]   = acum {{value}} ore
+hours-ago-long[few]   = acum {{value}} ore
+hours-ago-long[many]  = acum {{value}} ore
+hours-ago-long[other] = acum {{value}} ore
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = astăzi
+days-ago-long[one]   = ieri
+days-ago-long[two]   = acum {{value}} zile
+days-ago-long[few]   = acum {{value}} zile
+days-ago-long[many]  = acum {{value}} zile
+days-ago-long[other] = acum {{value}} zile
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = săptămâna aceasta
+weeks-ago-long[one]   = săptămâna trecută
+weeks-ago-long[two]   = acum {{value}} săptămâni
+weeks-ago-long[few]   = acum {{value}} săptămâni
+weeks-ago-long[many]  = acum {{value}} săptămâni
+weeks-ago-long[other] = acum {{value}} săptămâni
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = luna aceasta
+months-ago-long[one]   = luna trecută
+months-ago-long[two]   = acum {{value}} luni
+months-ago-long[few]   = acum {{value}} luni
+months-ago-long[many]  = acum {{value}} luni
+months-ago-long[other] = acum {{value}} luni
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = anul acesta
+years-ago-long[one]   = anul trecut
+years-ago-long[two]   = acum {{value}} ani
+years-ago-long[few]   = acum {{value}} ani
+years-ago-long[many]  = acum {{value}} ani
+years-ago-long[other] = acum {{value}} ani
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = acum
+minutes-until-long[one]   = într-un minut
+minutes-until-long[two]   = în {{value}} minute
+minutes-until-long[few]   = în {{value}} minute
+minutes-until-long[many]  = în {{value}} minute
+minutes-until-long[other] = în {{value}} minute
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = acum
+hours-until-long[one]   = într-o oră
+hours-until-long[two]   = în {{value}} ore
+hours-until-long[few]   = în {{value}} ore
+hours-until-long[many]  = în {{value}} ore
+hours-until-long[other] = în {{value}} ore
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = astăzi
+days-until-long[one]   = mâine
+days-until-long[two]   = în {{value}} zile
+days-until-long[few]   = în {{value}} zile
+days-until-long[many]  = în {{value}} zile
+days-until-long[other] = în {{value}} zile
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = săptămâna aceasta
+weeks-until-long[one]   = săptămâna următoare
+weeks-until-long[two]   = în {{value}} săptămâni
+weeks-until-long[few]   = în {{value}} săptămâni
+weeks-until-long[many]  = în {{value}} săptămâni
+weeks-until-long[other] = în {{value}} săptămâni
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = luna aceasta
+months-until-long[one]   = luna următoare
+months-until-long[two]   = în {{value}} luni
+months-until-long[few]   = în {{value}} luni
+months-until-long[many]  = în {{value}} luni
+months-until-long[other] = în {{value}} luni
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = anul acesta
+years-until-long[one]   = anul următor
+years-until-long[two]   = în {{value}} ani
+years-until-long[few]   = în {{value}} ani
+years-until-long[many]  = în {{value}} ani
+years-until-long[other] = în {{value}} ani
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = chiar acum
+minutes-ago-short[other] = acum {{value}} min.
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = chiar acum
+hours-ago-short[other] = acum {{value}}h
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = astăzi
+days-ago-short[other] = acum {{value}}z
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = acum
+minutes-until-short[other] = în {{value}}m
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = acum
+hours-until-short[other] = în {{value}}h
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = astăzi
+days-until-short[other] = în {{value}}z
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (dată incorectă)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a, %e %b %Y %H:%M:%S
+dateTimeFormat_%x = %d/%m/%Y
+dateTimeFormat_%X = %H:%M:%S
+
+shortTimeFormat = %H:%M
+shortDateTimeFormat = %x %H:%M
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 0
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = AM
+time_pm = PM
diff --git a/www/firefoxos/locales/date.ru.properties b/www/firefoxos/locales/date.ru.properties
new file mode 100644
index 0000000..8d9d241
--- /dev/null
+++ b/www/firefoxos/locales/date.ru.properties
@@ -0,0 +1,178 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+weekday-0-long = Воскресенье
+weekday-1-long = Понедельник
+weekday-2-long = Вторник
+weekday-3-long = Среда
+weekday-4-long = Четверг
+weekday-5-long = Пятница
+weekday-6-long = Суббота
+weekday-0-short = Вс
+weekday-1-short = Пн
+weekday-2-short = Вт
+weekday-3-short = Ср
+weekday-4-short = Чт
+weekday-5-short = Пт
+weekday-6-short = Сб
+month-0-long = Январь
+month-1-long = Февраль
+month-2-long = Март
+month-3-long = Апрель
+month-4-long = Май
+month-5-long = Июнь
+month-6-long = Июль
+month-7-long = Август
+month-8-long = Сентябрь
+month-9-long = Октябрь
+month-10-long = Ноябрь
+month-11-long = Декабрь
+month-0-genitive = января
+month-1-genitive = февраля
+month-2-genitive = марта
+month-3-genitive = апреля
+month-4-genitive = мая
+month-5-genitive = июня
+month-6-genitive = июля
+month-7-genitive = августа
+month-8-genitive = сентября
+month-9-genitive = октября
+month-10-genitive = ноября
+month-11-genitive = декабря
+month-0-short = Январь
+month-1-short = Февраль
+month-2-short = Март
+month-3-short = Апрель
+month-4-short = Май
+month-5-short = Июнь
+month-6-short = Июль
+month-7-short = Август
+month-8-short = Сентябрь
+month-9-short = Октябрь
+month-10-short = Ноябрь
+month-11-short = Декабрь
+minutes-ago-long = {[ plural(value) ]}
+minutes-ago-long[zero] = прямо сейчас
+minutes-ago-long[one] = {{value}} минуту назад
+minutes-ago-long[two] = {{value}} минуты назад
+minutes-ago-long[few] = {{value}} минуты назад
+minutes-ago-long[many] = {{value}} минут назад
+minutes-ago-long[other] = {{value}} минут назад
+hours-ago-long = {[ plural(value) ]}
+hours-ago-long[zero] = прямо сейчас
+hours-ago-long[one] = {{value}} час назад
+hours-ago-long[two] = {{value}} часа назад
+hours-ago-long[few] = {{value}} часа назад
+hours-ago-long[many] = {{value}} часов назад
+hours-ago-long[other] = {{value}} часов назад
+days-ago-long = {[ plural(value) ]}
+days-ago-long[zero] = сегодня
+days-ago-long[one] = {{value}} день назад
+days-ago-long[two] = {{value}} дня назад
+days-ago-long[few] = {{value}} дня назад
+days-ago-long[many] = {{value}} дней назад
+days-ago-long[other] = {{value}} дней назад
+weeks-ago-long = {[ plural(value) ]}
+weeks-ago-long[zero] = эта неделя
+weeks-ago-long[one] = {{value}} неделя назад
+weeks-ago-long[two] = {{value}} недели назад
+weeks-ago-long[few] = {{value}} недели назад
+weeks-ago-long[many] = {{value}} недель назад
+weeks-ago-long[other] = {{value}} недель назад
+months-ago-long = {[ plural(value) ]}
+months-ago-long[zero] = этот месяц
+months-ago-long[one] = {{value}} месяц назад
+months-ago-long[two] = {{value}} месяца назад
+months-ago-long[few] = {{value}} месяца назад
+months-ago-long[many] = {{value}} месяцев назад
+months-ago-long[other] = {{value}} месяцев назад
+years-ago-long = {[ plural(value) ]}
+years-ago-long[zero] = этот год
+years-ago-long[one] = {{value}} год назад
+years-ago-long[two] = {{value}} года назад
+years-ago-long[few] = {{value}} года назад
+years-ago-long[many] = {{value}} лет назад
+years-ago-long[other] = {{value}} лет назад
+minutes-until-long = {[ plural(value) ]}
+minutes-until-long[zero] = сейчас
+minutes-until-long[one] = через {{value}} минуту
+minutes-until-long[two] = через {{value}} минуты
+minutes-until-long[few] = через {{value}} минуты
+minutes-until-long[many] = через {{value}} минут
+minutes-until-long[other] = через {{value}} минут
+hours-until-long = {[ plural(value) ]}
+hours-until-long[zero] = сейчас
+hours-until-long[one] = через {{value}} час
+hours-until-long[two] = через {{value}} часа
+hours-until-long[few] = через {{value}} часа
+hours-until-long[many] = через {{value}} часов
+hours-until-long[other] = через {{value}} часов
+days-until-long = {[ plural(value) ]}
+days-until-long[zero] = сегодня
+days-until-long[one] = через {{value}} день
+days-until-long[two] = через {{value}} дня
+days-until-long[few] = через {{value}} дня
+days-until-long[many] = через {{value}} дней
+days-until-long[other] = через {{value}} дней
+weeks-until-long = {[ plural(value) ]}
+weeks-until-long[zero] = эта неделя
+weeks-until-long[one] = через {{value}} неделю
+weeks-until-long[two] = через {{value}} недели
+weeks-until-long[few] = через {{value}} недели
+weeks-until-long[many] = через {{value}} недель
+weeks-until-long[other] = через {{value}} недель
+months-until-long = {[ plural(value) ]}
+months-until-long[zero] = этот месяц
+months-until-long[one] = через {{value}} месяц
+months-until-long[two] = через {{value}} месяца
+months-until-long[few] = через {{value}} месяца
+months-until-long[many] = через {{value}} месяцев
+months-until-long[other] = через {{value}} месяцев
+years-until-long = {[ plural(value) ]}
+years-until-long[zero] = этот год
+years-until-long[one] = через {{value}} год
+years-until-long[two] = через {{value}} года
+years-until-long[few] = через {{value}} года
+years-until-long[many] = через {{value}} лет
+years-until-long[other] = через {{value}} лет
+minutes-ago-short = {[ plural(value) ]}
+minutes-ago-short[zero] = сейчас
+minutes-ago-short[other] = {{value}}м назад
+hours-ago-short = {[ plural(value) ]}
+hours-ago-short[zero] = сейчас
+hours-ago-short[other] = {{value}}ч назад
+days-ago-short = {[ plural(value) ]}
+days-ago-short[zero] = сегодня
+days-ago-short[other] = {{value}}д назад
+minutes-until-short = {[ plural(value) ]}
+minutes-until-short[zero] = сейчас
+minutes-until-short[other] = через {{value}}м
+hours-until-short = {[ plural(value) ]}
+hours-until-short[zero] = сейчас
+hours-until-short[other] = через {{value}}ч
+days-until-short = {[ plural(value) ]}
+days-until-short[zero] = сегодня
+days-until-short[other] = через {{value}}д
+incorrectDate = (некорректная дата)
+dateTimeFormat_%c = %a, %e %Eb %Y, %H:%M:%S
+dateTimeFormat_%x = %d.%m.%Y
+dateTimeFormat_%X = %H:%M:%S
+shortTimeFormat = %H:%M
+shortDateTimeFormat = %x %H:%M
+weekStartsOnMonday = 1
+time_am = AM
+time_pm = PM
diff --git a/www/firefoxos/locales/date.si.properties b/www/firefoxos/locales/date.si.properties
new file mode 100644
index 0000000..8790754
--- /dev/null
+++ b/www/firefoxos/locales/date.si.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = ඉරිදා
+weekday-1-long = සඳුදා
+weekday-2-long = අඟහරුවාදා
+weekday-3-long = බදාද
+weekday-4-long = බ්‍රහස්පතින්දා
+weekday-5-long = සිකුරාදා
+weekday-6-long = සෙනසුරාදා
+
+weekday-0-short = ඉරිදා
+weekday-1-short = සඳුදා
+weekday-2-short = අඟ
+weekday-3-short = බදාදා
+weekday-4-short = බ්‍රහස්
+weekday-5-short = සිකු
+weekday-6-short = සෙන
+
+# Month names
+
+month-0-long  = ජනවාරි
+month-1-long  = පෙබරවාරි
+month-2-long  = මාර්තු
+month-3-long  = අප්‍රේල්
+month-4-long  = මැයි
+month-5-long  = ජූනි
+month-6-long  = ජූලි
+month-7-long  = අගෝස්තු
+month-8-long  = සැප්තැම්බර්
+month-9-long  = ඔක්තෝම්බර්
+month-10-long = නොවැම්බර්
+month-11-long = දෙසැම්බර්
+
+month-0-genitive  = ජනවාරි
+month-1-genitive  = පෙබරවාරි
+month-2-genitive  = මාර්තු
+month-3-genitive  = අප්‍රේල්
+month-4-genitive  = මැයි
+month-5-genitive  = ජූනි
+month-6-genitive  = ජූලි
+month-7-genitive  = අගෝස්තු
+month-8-genitive  = සැප්තැම්බර්
+month-9-genitive  = ඔක්තෝම්බර්
+month-10-genitive = නොවැම්බර්
+month-11-genitive = දෙසැම්බර්
+
+month-0-short  = ජන
+month-1-short  = පෙබ
+month-2-short  = මාර්තු
+month-3-short  = අපේල්
+month-4-short  = මැයි
+month-5-short  = ජූනි
+month-6-short  = ජූලි
+month-7-short  = අගෝ
+month-8-short  = සැප්
+month-9-short  = ඔක්
+month-10-short = නොවැ
+month-11-short = දෙසැ
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = මේ මොහොතේ
+minutes-ago-long[one]   = මිනිත්තුවකට පෙර
+minutes-ago-long[two]   = මිනිත්තු {{m}} කට පෙර
+minutes-ago-long[few]   = මිනිත්තු {{m}} කට පෙර
+minutes-ago-long[many]  = මිනිත්තු {{m}} කට පෙර
+minutes-ago-long[other] = මිනිත්තු {{m}} කට පෙර
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = මේ මොහොතේ
+hours-ago-long[one]   = පැයකට පෙර
+hours-ago-long[two]   = මිනිත්තු {{m}} කට පෙර
+hours-ago-long[few]   = මිනිත්තු {{m}} කට පෙර
+hours-ago-long[many]  = මිනිත්තු {{m}} කට පෙර
+hours-ago-long[other] = මිනිත්තු {{m}} කට පෙර
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = අද
+days-ago-long[one]   = ඊයේ\u0020
+days-ago-long[two]   = දින{{m}} කට පෙර
+days-ago-long[few]   = දින {{m}} කට පෙර
+days-ago-long[many]  = සති{{value}} කට පෙර
+days-ago-long[other] = දින {{m}} කට පෙර
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = මේ සතියෙ
+weeks-ago-long[one]   = අවසන් සතියේ
+weeks-ago-long[two]   = සති {{value}} කට පෙර
+weeks-ago-long[few]   = සති {{m}} කට පෙර
+weeks-ago-long[many]  = මිනිත්තු {{m}} කට පෙර
+weeks-ago-long[other] = මිනිත්තු {{m}} කට පෙර
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = මෙම මස
+months-ago-long[one]   = පසුගිය මාසය
+months-ago-long[two]   = මිනිත්තු {{m}} කට පෙර
+months-ago-long[few]   = මිනිත්තු {{m}} කට පෙර
+months-ago-long[many]  = මිනිත්තු {{m}} කට පෙර
+months-ago-long[other] = වසර  {{m}} කට පෙර
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = මේ වසරේ
+years-ago-long[one]   = පසුගිය වසර
+years-ago-long[two]   = වසර {{m}} කට පෙර
+years-ago-long[few]   = වසර {{m}} කට පෙර
+years-ago-long[many]  = වසර {{value}} කට පෙර
+years-ago-long[other] = විනාඩි {{value}} කින්
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = දැන්
+minutes-until-long[one]   = මිනිත්තුවකින්
+minutes-until-long[two]   = විනාඩි {{m}} කින්
+minutes-until-long[few]   = විනාඩි {{value}} කින්
+minutes-until-long[many]  = විනාඩි {{value}} කින්
+minutes-until-long[other] = විනාඩි {{m}} කින්
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = දැන්
+hours-until-long[one]   = පැයකින්
+hours-until-long[two]   = පැය{{value}} කින්
+hours-until-long[few]   = පැය {{value}} කින්
+hours-until-long[many]  = පැය {{value}} කින්
+hours-until-long[other] = පැය {{value}} කින්
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = අද
+days-until-long[one]   = හෙට
+days-until-long[two]   = දින{{value}} කින්
+days-until-long[few]   = විනාඩි {{m}} කින්
+days-until-long[many]  = විනාඩි {{m}} කින්
+days-until-long[other] = විනාඩි {{m}} කින්
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = මේ සතියෙ
+weeks-until-long[one]   = ලබන සතියෙ
+weeks-until-long[two]   = විනාඩි {{m}} කින්
+weeks-until-long[few]   = විනාඩි {{m}} කින්
+weeks-until-long[many]  = විනාඩි {{m}} කින්
+weeks-until-long[other] = සති {{value}} කින්
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = මෙම මස
+months-until-long[one]   = මීළඟ මාසය
+months-until-long[two]   = මාස {{value}} කින්
+months-until-long[few]   = විනාඩි {{m}} කින්
+months-until-long[many]  = විනාඩි {{m}} කින්
+months-until-long[other] = විනාඩි {{m}} කින්
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = මේ වසරේ
+years-until-long[one]   = මීළඟ වසර
+years-until-long[two]   = වසර {{m}} කින්
+years-until-long[few]   = වසර {{m}} කින්
+years-until-long[many]  = වසර {{m}} කින්
+years-until-long[other] = වසර {{value}} කින්
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = මේ මොහොතේ
+minutes-ago-short[other] = මි {{value}}ට පෙර
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = මේ මොහොතේ
+hours-ago-short[other] = පැය {{value}}කට පෙර
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = අද
+days-ago-short[other] = දින {{value}} පෙර
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = දැන්
+minutes-until-short[other] = {{value}}මි ඇතුලත
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = දැන්
+hours-until-short[other] = {{value}}පැය කින්
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = අද
+days-until-short[other] = දින {{value}}ක් ඇතුලත
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (වැරදි දිනයකි)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a %b %e %Y %I:%M:%S %p
+dateTimeFormat_%x = %m/%d/%Y
+dateTimeFormat_%X = %I:%M:%S %p
+
+shortTimeFormat = %I:%M %p
+shortDateTimeFormat = %x %I:%M %p
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 0
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = පෙ.ව.
+time_pm = ප.ව.
diff --git a/www/firefoxos/locales/date.sk.properties b/www/firefoxos/locales/date.sk.properties
new file mode 100644
index 0000000..03d38ef
--- /dev/null
+++ b/www/firefoxos/locales/date.sk.properties
@@ -0,0 +1,225 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = Nedeľa
+weekday-1-long = Pondelok
+weekday-2-long = Utorok
+weekday-3-long = Streda
+weekday-4-long = Štvrtok
+weekday-5-long = Piatok
+weekday-6-long = Sobota
+
+weekday-0-short = Ne
+weekday-1-short = Po
+weekday-2-short = Ut
+weekday-3-short = St
+weekday-4-short = Št
+weekday-5-short = Pi
+weekday-6-short = So
+
+# Month names
+
+month-0-long  = Január
+month-1-long  = Február
+month-2-long  = Marec
+month-3-long  = Apríl
+month-4-long  = Máj
+month-5-long  = Jún
+month-6-long  = Júl
+month-7-long  = August
+month-8-long  = September
+month-9-long  = Október
+month-10-long = November
+month-11-long = December
+
+month-0-genitive  = januára
+month-1-genitive  = februára
+month-2-genitive  = marca
+month-3-genitive  = apríla
+month-4-genitive  = mája
+month-5-genitive  = júna
+month-6-genitive  = júla
+month-7-genitive  = augusta
+month-8-genitive  = septembra
+month-9-genitive  = októbra
+month-10-genitive = novembra
+month-11-genitive = decembra
+
+month-0-short  = jan
+month-1-short  = feb
+month-2-short  = mar
+month-3-short  = apr
+month-4-short  = máj
+month-5-short  = jún
+month-6-short  = júl
+month-7-short  = aug
+month-8-short  = sep
+month-9-short  = okt
+month-10-short = nov
+month-11-short = dec
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = teraz
+minutes-ago-long[one]   = pred minútou
+minutes-ago-long[two]   = pred {{value}} minútami
+minutes-ago-long[few]   = pred {{value}} minútami
+minutes-ago-long[many]  = pred {{value}} minútami
+minutes-ago-long[other] = pred {{value}} minútami
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = teraz
+hours-ago-long[one]   = pred hodinou
+hours-ago-long[two]   = pred {{value}} hodinami
+hours-ago-long[few]   = pred {{value}} hodinami
+hours-ago-long[many]  = pred {{value}} hodinami
+hours-ago-long[other] = pred {{value}} hodinami
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = dnes
+days-ago-long[one]   = včera
+days-ago-long[two]   = pred {{value}} dňami
+days-ago-long[few]   = pred {{value}} dňami
+days-ago-long[many]  = pred {{value}} dňami
+days-ago-long[other] = pred {{value}} dňami
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = tento týždeň
+weeks-ago-long[one]   = minulý týždeň
+weeks-ago-long[two]   = pred {{value}} týždňami
+weeks-ago-long[few]   = pred {{value}} týždňami
+weeks-ago-long[many]  = pred {{value}} týždňami
+weeks-ago-long[other] = pred {{value}} týždňami
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = tento mesiac
+months-ago-long[one]   = minulý mesiac
+months-ago-long[two]   = pred {{value}} mesiacmi
+months-ago-long[few]   = pred {{value}} mesiacmi
+months-ago-long[many]  = pred {{value}} mesiacmi
+months-ago-long[other] = pred {{value}} mesiacmi
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = tento rok
+years-ago-long[one]   = minulý rok
+years-ago-long[two]   = pred {{value}} rokmi
+years-ago-long[few]   = pred {{value}} rokmi
+years-ago-long[many]  = pred {{value}} rokmi
+years-ago-long[other] = pred {{value}} rokmi
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = teraz
+minutes-until-long[one]   = o minútu
+minutes-until-long[two]   = o {{value}} minúty
+minutes-until-long[few]   = o {{value}} minúty
+minutes-until-long[many]  = o {{value}} minút
+minutes-until-long[other] = o {{value}} minút
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = teraz
+hours-until-long[one]   = o hodinu
+hours-until-long[two]   = o {{value}} hodiny
+hours-until-long[few]   = o {{value}} hodiny
+hours-until-long[many]  = o {{value}} hodín
+hours-until-long[other] = o {{value}} hodín
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = dnes
+days-until-long[one]   = zajtra
+days-until-long[two]   = o {{value}} dni
+days-until-long[few]   = o {{value}} dni
+days-until-long[many]  = o {{value}} dní
+days-until-long[other] = o {{value}} dní
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = tento týždeň
+weeks-until-long[one]   = budúci týždeň
+weeks-until-long[two]   = o {{value}} týždne
+weeks-until-long[few]   = o {{value}} týždne
+weeks-until-long[many]  = o {{value}} týždňov
+weeks-until-long[other] = o {{value}} týždňov
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = tento mesiac
+months-until-long[one]   = budúci mesiac
+months-until-long[two]   = o {{value}} mesiace
+months-until-long[few]   = o {{value}} mesiace
+months-until-long[many]  = o {{value}} mesiacov
+months-until-long[other] = o {{value}} mesiacov
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = tento rok
+years-until-long[one]   = budúci rok
+years-until-long[two]   = o {{value}} roky
+years-until-long[few]   = o {{value}} roky
+years-until-long[many]  = o {{value}} rokov
+years-until-long[other] = o {{value}} rokov
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = teraz
+minutes-ago-short[other] = pred {{value}}m
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = teraz
+hours-ago-short[other] = pred {{value}}h
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = dnes
+days-ago-short[other] = pred {{value}}d
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = teraz
+minutes-until-short[other] = o {{value}}m
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = teraz
+hours-until-short[other] = o {{value}}h
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = dnes
+days-until-short[other] = o {{value}}d
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (neplatný dátum)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a, %e. %b %Y %H:%M:%S
+dateTimeFormat_%x = %d.%m.%Y
+dateTimeFormat_%X = %H:%M:%S
+
+shortTimeFormat = %H:%M
+shortDateTimeFormat = %x %H:%M
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 1
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = AM
+time_pm = PM
diff --git a/www/firefoxos/locales/date.sl.properties b/www/firefoxos/locales/date.sl.properties
new file mode 100644
index 0000000..a54e737
--- /dev/null
+++ b/www/firefoxos/locales/date.sl.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = Nedelja
+weekday-1-long = Ponedeljek
+weekday-2-long = Torek
+weekday-3-long = Sreda
+weekday-4-long = Četrtek
+weekday-5-long = Petek
+weekday-6-long = Sobota
+
+weekday-0-short = Ned
+weekday-1-short = Pon
+weekday-2-short = Tor
+weekday-3-short = Sre
+weekday-4-short = Čet
+weekday-5-short = Pet
+weekday-6-short = Sob
+
+# Month names
+
+month-0-long  = Januar
+month-1-long  = Februar
+month-2-long  = Marec
+month-3-long  = April
+month-4-long  = Maj
+month-5-long  = Junij
+month-6-long  = Julij
+month-7-long  = Avgust
+month-8-long  = September
+month-9-long  = Oktober
+month-10-long = November
+month-11-long = December
+
+month-0-genitive  = Januar
+month-1-genitive  = Februar
+month-2-genitive  = Marec
+month-3-genitive  = April
+month-4-genitive  = Maj
+month-5-genitive  = Junij
+month-6-genitive  = Julij
+month-7-genitive  = Avgust
+month-8-genitive  = September
+month-9-genitive  = Oktober
+month-10-genitive = November
+month-11-genitive = December
+
+month-0-short  = Jan
+month-1-short  = Feb
+month-2-short  = Mar
+month-3-short  = Apr
+month-4-short  = Maj
+month-5-short  = Jun
+month-6-short  = Jul
+month-7-short  = Avg
+month-8-short  = Sep
+month-9-short  = Okt
+month-10-short = Nov
+month-11-short = Dec
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = zdaj
+minutes-ago-long[one]   = pred minuto
+minutes-ago-long[two]   = pred {{value}} minutama
+minutes-ago-long[few]   = pred {{value}} minutami
+minutes-ago-long[many]  = pred {{value}} minutami
+minutes-ago-long[other] = pred {{value}} minutami
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = zdaj
+hours-ago-long[one]   = pred eno uro
+hours-ago-long[two]   = pred {{value}} urama
+hours-ago-long[few]   = pred {{value}} urami
+hours-ago-long[many]  = pred {{value}} urami
+hours-ago-long[other] = pred {{value}} urami
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = danes
+days-ago-long[one]   = včeraj
+days-ago-long[two]   = pred {{value}} dnevoma
+days-ago-long[few]   = pred {{value}} dnevi
+days-ago-long[many]  = pred {{value}} dnevi
+days-ago-long[other] = pred {{value}} dnevi
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = ta teden
+weeks-ago-long[one]   = prejšnji teden
+weeks-ago-long[two]   = pred {{value}} tednoma
+weeks-ago-long[few]   = pred {{value}} tedni
+weeks-ago-long[many]  = pred {{value}} tedni
+weeks-ago-long[other] = pred {{value}} tedni
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = ta mesec
+months-ago-long[one]   = prejšnji mesec
+months-ago-long[two]   = pred {{value}} mescema
+months-ago-long[few]   = pred {{value}} mesci
+months-ago-long[many]  = pred {{value}} mesci
+months-ago-long[other] = pred {{value}} mesci
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = letos
+years-ago-long[one]   = lansko leto
+years-ago-long[two]   = pred {{value}} letoma
+years-ago-long[few]   = pred {{value}} leti
+years-ago-long[many]  = pred {{value}} leti
+years-ago-long[other] = pred {{value}} leti
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = zdaj
+minutes-until-long[one]   = čez minuto
+minutes-until-long[two]   = čez {{value}} minuti
+minutes-until-long[few]   = čez {{value}} minute
+minutes-until-long[many]  = čez {{value}} minut
+minutes-until-long[other] = čez {{value}} minut
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = zdaj
+hours-until-long[one]   = čez eno uro
+hours-until-long[two]   = čez {{value}} uri
+hours-until-long[few]   = čez {{value}} ure
+hours-until-long[many]  = čez {{value}} ur
+hours-until-long[other] = čez {{value}} ur
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = danes
+days-until-long[one]   = jutri
+days-until-long[two]   = čez {{value}} dni
+days-until-long[few]   = čez {{value}} dni
+days-until-long[many]  = čez {{value}} dni
+days-until-long[other] = čez {{value}} dni
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = ta teden
+weeks-until-long[one]   = naslednji teden
+weeks-until-long[two]   = čez {{value}} tedna
+weeks-until-long[few]   = čez {{value}} tedne
+weeks-until-long[many]  = čez {{value}} tednov
+weeks-until-long[other] = čez {{value}} tednov
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = ta mesec
+months-until-long[one]   = naslednji mesec
+months-until-long[two]   = čez {{value}} mesca
+months-until-long[few]   = čez {{value}} mesce
+months-until-long[many]  = čez {{value}} mescev
+months-until-long[other] = čez {{value}} mescev
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = letos
+years-until-long[one]   = naslednje leto
+years-until-long[two]   = čez {{value}} leti
+years-until-long[few]   = čez {{value}} leta
+years-until-long[many]  = čez {{value}} let
+years-until-long[other] = čez {{value}} let
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = zdaj
+minutes-ago-short[other] = pred {{value}} m
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = zdaj
+hours-ago-short[other] = pred {{value}} h
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = danes
+days-ago-short[other] = pred {{value}} d
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = zdaj
+minutes-until-short[other] = čez {{value}} m
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = zdaj
+hours-until-short[other] = čez {{value}} h
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = danes
+days-until-short[other] = čez {{value}} d
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (napačen datum)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a, %e. %b %Y %H:%M:%S
+dateTimeFormat_%x = %H:%M:%S
+dateTimeFormat_%X = %H:%M:%S
+
+shortTimeFormat = %H:%M
+shortDateTimeFormat = %x %H:%M
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 1
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = AM
+time_pm = PM
diff --git a/www/firefoxos/locales/date.son.properties b/www/firefoxos/locales/date.son.properties
new file mode 100644
index 0000000..dbea4d0
--- /dev/null
+++ b/www/firefoxos/locales/date.son.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = Alhadi
+weekday-1-long = Atinni
+weekday-2-long = Atalaata
+weekday-3-long = Alarba
+weekday-4-long = Alhamiisa
+weekday-5-long = Alzuma
+weekday-6-long = Asibti
+
+weekday-0-short = Ald
+weekday-1-short = Atn
+weekday-2-short = Atl
+weekday-3-short = Alb
+weekday-4-short = Alh
+weekday-5-short = Alz
+weekday-6-short = Ast
+
+# Month names
+
+month-0-long  = Žanwiye
+month-1-long  = Fewiriye
+month-2-long  = Marsi
+month-3-long  = Awiril
+month-4-long  = Me
+month-5-long  = Žuweŋ
+month-6-long  = Žuyye
+month-7-long  = Ut
+month-8-long  = Sektanbur
+month-9-long  = Oktoobur
+month-10-long = Noowanbur
+month-11-long = Deesanbur
+
+month-0-genitive  = Žanwiye
+month-1-genitive  = Fewiriye
+month-2-genitive  = Marsi
+month-3-genitive  = Awiril
+month-4-genitive  = Me
+month-5-genitive  = Žuweŋ
+month-6-genitive  = Žuyye
+month-7-genitive  = Ut
+month-8-genitive  = Sektanbur
+month-9-genitive  = Oktoobur
+month-10-genitive = Noowanbur
+month-11-genitive = Deesanbur
+
+month-0-short  = Žan
+month-1-short  = Few
+month-2-short  = Mar
+month-3-short  = Awi
+month-4-short  = Me
+month-5-short  = Žuw
+month-6-short  = Žuy
+month-7-short  = Ut
+month-8-short  = Sek
+month-9-short  = Okt
+month-10-short = Now
+month-11-short = Des
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = sohõda
+minutes-ago-long[one]   = za miniti foo
+minutes-ago-long[two]   = za miniti {{value}}
+minutes-ago-long[few]   = za miniti {{value}}
+minutes-ago-long[many]  = za miniti {{value}}
+minutes-ago-long[other] = za miniti {{value}}
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = sohõda
+hours-ago-long[one]   = za guuru foo
+hours-ago-long[two]   = za guuru {{value}}
+hours-ago-long[few]   = za guuru {{value}}
+hours-ago-long[many]  = za guuru {{value}}
+hours-ago-long[other] = za guuru {{value}}
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = hõ
+days-ago-long[one]   = bi
+days-ago-long[two]   = za zaari {{value}}
+days-ago-long[few]   = za zaari {{value}}
+days-ago-long[many]  = za zaari {{value}}
+days-ago-long[other] = za zaari {{value}}
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = jirbiyyaa woo
+weeks-ago-long[one]   = jirbiyye koraa
+weeks-ago-long[two]   = a ga too jirbiyye {{value}}
+weeks-ago-long[few]   = a ga too jirbiyye {{value}}
+weeks-ago-long[many]  = a ga too jirbiyye {{value}}
+weeks-ago-long[other] = a ga too jirbiyye {{value}}
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = handoo woo
+months-ago-long[one]   = handu koraa
+months-ago-long[two]   = a ga too handu {{value}}
+months-ago-long[few]   = a ga too handu {{value}}
+months-ago-long[many]  = a ga too handu {{value}}
+months-ago-long[other] = a ga too handu {{value}}
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = haraŋ
+years-ago-long[one]   = manna
+years-ago-long[two]   = a ga too jiiri {{value}}
+years-ago-long[few]   = a ga too jiiri {{value}}
+years-ago-long[many]  = a ga too jiiri {{value}}
+years-ago-long[other] = a ga too jiiri {{value}}
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = sohõ
+minutes-until-long[one]   = miniti foo ra
+minutes-until-long[two]   = miniti {{value}} ra
+minutes-until-long[few]   = miniti {{value}} ra
+minutes-until-long[many]  = miniti {{value}} ra
+minutes-until-long[other] = za miniti {{value}}
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = sohõ
+hours-until-long[one]   = guuru foo ra
+hours-until-long[two]   = guuru {{value}} ra
+hours-until-long[few]   = guuru {{value}} ra
+hours-until-long[many]  = guuru {{value}} ra
+hours-until-long[other] = guuru {{value}} ra
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = hõ
+days-until-long[one]   = suba
+days-until-long[two]   = zaari {{value}} ra
+days-until-long[few]   = zaari {{value}} ra
+days-until-long[many]  = zaari {{value}} ra
+days-until-long[other] = zaari {{value}} ra
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = jirbiyyaa woo
+weeks-until-long[one]   = hiino heboo
+weeks-until-long[two]   = jirbiyye {{value}} ra
+weeks-until-long[few]   = jirbiyye {{value}} ra
+weeks-until-long[many]  = jirbiyye {{value}} ra
+weeks-until-long[other] = jirbiyye {{value}} ra
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = handoo woo
+months-until-long[one]   = hiino handoo
+months-until-long[two]   = handu {{value}} ra
+months-until-long[few]   = handu {{value}} ra
+months-until-long[many]  = handu {{value}} ra
+months-until-long[other] = handu {{value}} ra
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = haraŋ
+years-until-long[one]   = yeeši
+years-until-long[two]   = jiiri {{value}} ra
+years-until-long[few]   = jiiri {{value}} ra
+years-until-long[many]  = jiiri {{value}} ra
+years-until-long[other] = jiiri {{value}} ra
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = sohõda
+minutes-ago-short[other] = za m{{value}}
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = sohõda
+hours-ago-short[other] = za g{{value}}
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = hõ
+days-ago-short[other] = za z{{value}}
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = sohõ
+minutes-until-short[other] = m{{value}} ra
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = sohõ
+hours-until-short[other] = guuru {{value}} ra
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = hõ
+days-until-short[other] = z{{value}} ra
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (han laalo)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a %b %e %Y %I:%M:%S %p
+dateTimeFormat_%x = %m/%d/%Y
+dateTimeFormat_%X = %I:%M:%S %p
+
+shortTimeFormat = %I:%M %p
+shortDateTimeFormat = %x %I:%M %p
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 0
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = Weete
+time_pm = Wiciri
diff --git a/www/firefoxos/locales/date.sq.properties b/www/firefoxos/locales/date.sq.properties
new file mode 100644
index 0000000..cd60bd7
--- /dev/null
+++ b/www/firefoxos/locales/date.sq.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = E diel
+weekday-1-long = E hënë
+weekday-2-long = E martë
+weekday-3-long = E mërkurë
+weekday-4-long = E enjte
+weekday-5-long = E premte
+weekday-6-long = E shtunë
+
+weekday-0-short = Die
+weekday-1-short = Hën
+weekday-2-short = Mar
+weekday-3-short = Mër
+weekday-4-short = Enj
+weekday-5-short = Pre
+weekday-6-short = Sht
+
+# Month names
+
+
+month-0-long  = Janar
+month-1-long  = Shkurt
+month-2-long  = Mars
+month-3-long  = Prill
+month-4-long  = Maj
+month-5-long  = Qershor
+month-6-long  = Korrik
+month-7-long  = Gusht
+month-8-long  = Shtator
+month-9-long  = Tetor
+month-10-long = Nëntor
+month-11-long = Dhjetor
+
+month-0-genitive  = të Janarit
+month-1-genitive  = të Shkurtit
+month-2-genitive  = të Marsit
+month-3-genitive  = të Prillit
+month-4-genitive  = të Majit
+month-5-genitive  = të Qershorit
+month-6-genitive  = të Korrikut
+month-7-genitive  = të Gushtit
+month-8-genitive  = të Shtatorit
+month-9-genitive  = të Tetorit
+month-10-genitive = të Nëntorit
+month-11-genitive = të Dhjetorit
+
+month-0-short  = Jan
+month-1-short  = Shk
+month-2-short  = Mar
+month-3-short  = Pri
+month-4-short  = Maj
+month-5-short  = Qer
+month-6-short  = Kor
+month-7-short  = Gus
+month-8-short  = Sht
+month-9-short  = Tet
+month-10-short = Nën
+month-11-short = Dhj
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = mu tani
+minutes-ago-long[one]   = një minutë më parë
+minutes-ago-long[two]   = {{value}} minuta më parë
+minutes-ago-long[few]   = {{value}} minuta më parë
+minutes-ago-long[many]  = {{value}} minuta më parë
+minutes-ago-long[other] = {{value}} minuta më parë
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = mu tani
+hours-ago-long[one]   = një orë më parë
+hours-ago-long[two]   = {{value}} orë më parë
+hours-ago-long[few]   = {{value}} orë më parë
+hours-ago-long[many]  = {{value}} orë më parë
+hours-ago-long[other] = {{value}} orë më parë
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = sot
+days-ago-long[one]   = dje
+days-ago-long[two]   = {{value}} ditë më parë
+days-ago-long[few]   = {{value}} ditë më parë
+days-ago-long[many]  = {{value}} ditë më parë
+days-ago-long[other] = {{value}} ditë më parë
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = këtë javë
+weeks-ago-long[one]   = javën e kaluar
+weeks-ago-long[two]   = {{value}} javë më parë
+weeks-ago-long[few]   = {{value}} javë më parë
+weeks-ago-long[many]  = {{value}} javë më parë
+weeks-ago-long[other] = {{value}} javë më parë
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = këtë muaj
+months-ago-long[one]   = muajin e kaluar
+months-ago-long[two]   = {{value}} muaj më parë
+months-ago-long[few]   = {{value}} muaj më parë
+months-ago-long[many]  = {{value}} muaj më parë
+months-ago-long[other] = {{value}} muaj më parë
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = këtë vit
+years-ago-long[one]   = vitin e kaluar
+years-ago-long[two]   = {{value}} vite më parë
+years-ago-long[few]   = {{value}} vite më parë
+years-ago-long[many]  = {{value}} vite më parë
+years-ago-long[other] = {{value}} vite më parë
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = tani
+minutes-until-long[one]   = për një minutë
+minutes-until-long[two]   = për {{value}} minuta
+minutes-until-long[few]   = për {{value}} minuta
+minutes-until-long[many]  = për {{value}} minuta
+minutes-until-long[other] = për {{value}} minuta
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = tani
+hours-until-long[one]   = për një orë
+hours-until-long[two]   = për {{value}} orë
+hours-until-long[few]   = për {{value}} orë
+hours-until-long[many]  = për {{value}} orë
+hours-until-long[other] = për {{value}} orë
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = sot
+days-until-long[one]   = nesër
+days-until-long[two]   = për {{value}} ditë
+days-until-long[few]   = për {{value}} ditë
+days-until-long[many]  = për {{value}} ditë
+days-until-long[other] = për {{value}} ditë
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = këtë javë
+weeks-until-long[one]   = javën pasuese
+weeks-until-long[two]   = për {{value}} javë
+weeks-until-long[few]   = për {{value}} javë
+weeks-until-long[many]  = për {{value}} javë
+weeks-until-long[other] = për {{value}} javë
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = këtë muaj
+months-until-long[one]   = muajin pasues
+months-until-long[two]   = për {{value}} muaj
+months-until-long[few]   = për {{value}} muaj
+months-until-long[many]  = për {{value}} muaj
+months-until-long[other] = për {{value}} muaj
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = këtë vit
+years-until-long[one]   = vitin pasues
+years-until-long[two]   = për {{value}} vjet
+years-until-long[few]   = për {{value}} vjet
+years-until-long[many]  = për {{value}} vjet
+years-until-long[other] = për {{value}} vjet
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = mu tani
+minutes-ago-short[other] = {{value}}m më parë
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = mu tani
+hours-ago-short[other] = {{value}}h më parë
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = sot
+days-ago-short[other] = {{value}}d më parë
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = tani
+minutes-until-short[other] = për {{value}}m
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = tani
+hours-until-short[other] = për {{value}}h
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = sot
+days-until-short[other] = për {{value}}d
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (datë e pasaktë)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a %e %b %Y %I:%M:%S %p
+dateTimeFormat_%x = %m/%d/%Y
+dateTimeFormat_%X = %I:%M:%S %p
+
+shortTimeFormat = %I:%M %p
+shortDateTimeFormat = %x %I:%M %p
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 0
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = AM
+time_pm = PM
diff --git a/www/firefoxos/locales/date.sr-Cyrl.properties b/www/firefoxos/locales/date.sr-Cyrl.properties
new file mode 100644
index 0000000..499dde4
--- /dev/null
+++ b/www/firefoxos/locales/date.sr-Cyrl.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = Недеља
+weekday-1-long = Понедељак
+weekday-2-long = Уторак
+weekday-3-long = Среда
+weekday-4-long = Четвртак
+weekday-5-long = Петак
+weekday-6-long = Субота
+
+weekday-0-short = Нед
+weekday-1-short = Пон
+weekday-2-short = Уто
+weekday-3-short = Сре
+weekday-4-short = Чет
+weekday-5-short = Пет
+weekday-6-short = Суб
+
+# Month names
+
+month-0-long  = јануар
+month-1-long  = фебруар
+month-2-long  = март
+month-3-long  = април
+month-4-long  = мај
+month-5-long  = јун
+month-6-long  = јул
+month-7-long  = август
+month-8-long  = септембар
+month-9-long  = октобар
+month-10-long = новембар
+month-11-long = децембар
+
+month-0-genitive  = јануара
+month-1-genitive  = фебруара
+month-2-genitive  = марта
+month-3-genitive  = априла
+month-4-genitive  = маја
+month-5-genitive  = јуна
+month-6-genitive  = јула
+month-7-genitive  = августа
+month-8-genitive  = септембра
+month-9-genitive  = октобра
+month-10-genitive = новембра
+month-11-genitive = децембра
+
+month-0-short  = јан
+month-1-short  = феб
+month-2-short  = мар
+month-3-short  = апр
+month-4-short  = мај
+month-5-short  = јун
+month-6-short  = јул
+month-7-short  = авг
+month-8-short  = сеп
+month-9-short  = окт
+month-10-short = нов
+month-11-short = дец
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = управо
+minutes-ago-long[one]   = пре минут
+minutes-ago-long[two]   = пре {{value}} минута
+minutes-ago-long[few]   = пре {{value}} минута
+minutes-ago-long[many]  = пре {{value}} минута
+minutes-ago-long[other] = пре {{value}} минута
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = управо
+hours-ago-long[one]   = пре сат времена
+hours-ago-long[two]   = пре {{value}} сата
+hours-ago-long[few]   = пре {{value}} сати
+hours-ago-long[many]  = пре {{value}} сати
+hours-ago-long[other] = пре {{value}} сати
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = данас
+days-ago-long[one]   = јуче
+days-ago-long[two]   = пре {{value}} дана
+days-ago-long[few]   = пре {{value}} дана
+days-ago-long[many]  = пре {{value}} дана
+days-ago-long[other] = пре {{value}} дана
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = ове недеље
+weeks-ago-long[one]   = прошле недеље
+weeks-ago-long[two]   = пре {{value}} недеље
+weeks-ago-long[few]   = пре {{value}} недеља
+weeks-ago-long[many]  = пре {{value}} недеља
+weeks-ago-long[other] = пре {{value}} недеља
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = овог месеца
+months-ago-long[one]   = прошлог месеца
+months-ago-long[two]   = пре {{value}} месеца
+months-ago-long[few]   = пре {{value}} месеци
+months-ago-long[many]  = пре {{value}} месеци
+months-ago-long[other] = пре {{value}} месеци
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = ове године
+years-ago-long[one]   = прошле године
+years-ago-long[two]   = пре {{value}} године
+years-ago-long[few]   = пре {{value}} година
+years-ago-long[many]  = пре {{value}} година
+years-ago-long[other] = пре {{value}} година
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = управо
+minutes-until-long[one]   = за један минут
+minutes-until-long[two]   = за {{value}} минута
+minutes-until-long[few]   = за {{value}} минута
+minutes-until-long[many]  = за {{value}} минута
+minutes-until-long[other] = за {{value}} минута
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = управо
+hours-until-long[one]   = за сат времена
+hours-until-long[two]   = за {{value}} сата
+hours-until-long[few]   = за {{value}} сати
+hours-until-long[many]  = за {{value}} сати
+hours-until-long[other] = за {{value}} сати
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = данас
+days-until-long[one]   = сутра
+days-until-long[two]   = за {{value}} дана
+days-until-long[few]   = за {{value}} дана
+days-until-long[many]  = за {{value}} дана
+days-until-long[other] = за {{value}} дана
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = ове недеље
+weeks-until-long[one]   = следеће недеље
+weeks-until-long[two]   = за {{value}} недеље
+weeks-until-long[few]   = за {{value}} недеља
+weeks-until-long[many]  = за {{value}} недеља
+weeks-until-long[other] = за {{value}} недеља
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = овог месеца
+months-until-long[one]   = следећег месеца
+months-until-long[two]   = за {{value}} месеца
+months-until-long[few]   = за {{value}} месеци
+months-until-long[many]  = за {{value}} месеци
+months-until-long[other] = за {{value}} месеци
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = ове године
+years-until-long[one]   = следеће године
+years-until-long[two]   = за {{value}} године
+years-until-long[few]   = за {{value}} година
+years-until-long[many]  = за {{value}} година
+years-until-long[other] = за {{value}} година
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = управо
+minutes-ago-short[other] = пре {{value}}м
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = управо
+hours-ago-short[other] = пре {{value}}с
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = данас
+days-ago-short[other] = пре {{value}}д
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = управо
+minutes-until-short[other] = за {{value}}м
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = управо
+hours-until-short[other] = за {{value}}с
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = данас
+days-until-short[other] = за {{value}}д
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (нетачан датум)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a %e %b %Y %H:%M:%S
+dateTimeFormat_%x = %d.%m.%Y
+dateTimeFormat_%X = %H:%M:%S
+
+shortTimeFormat = %H:%M
+shortDateTimeFormat = %x %H:%M
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 1
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = AM
+time_pm = PM
diff --git a/www/firefoxos/locales/date.sr-Latn.properties b/www/firefoxos/locales/date.sr-Latn.properties
new file mode 100644
index 0000000..48441df
--- /dev/null
+++ b/www/firefoxos/locales/date.sr-Latn.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = Nedelja
+weekday-1-long = Ponedeljak
+weekday-2-long = Utorak
+weekday-3-long = Sreda
+weekday-4-long = Četvrtak
+weekday-5-long = Petak
+weekday-6-long = Subota
+
+weekday-0-short = Ned
+weekday-1-short = Pon
+weekday-2-short = Uto
+weekday-3-short = Sre
+weekday-4-short = Čet
+weekday-5-short = Pet
+weekday-6-short = Sub
+
+# Month names
+
+month-0-long  = januar
+month-1-long  = februar
+month-2-long  = mart
+month-3-long  = april
+month-4-long  = maj
+month-5-long  = jun
+month-6-long  = jul
+month-7-long  = avgust
+month-8-long  = septembar
+month-9-long  = oktobar
+month-10-long = novembar
+month-11-long = decembar
+
+month-0-genitive  = januara
+month-1-genitive  = februara
+month-2-genitive  = marta
+month-3-genitive  = aprila
+month-4-genitive  = maja
+month-5-genitive  = juna
+month-6-genitive  = jula
+month-7-genitive  = avgusta
+month-8-genitive  = septembra
+month-9-genitive  = oktobra
+month-10-genitive = novembra
+month-11-genitive = decembra
+
+month-0-short  = jan
+month-1-short  = feb
+month-2-short  = mar
+month-3-short  = apr
+month-4-short  = maj
+month-5-short  = jun
+month-6-short  = jul
+month-7-short  = avg
+month-8-short  = sep
+month-9-short  = okt
+month-10-short = nov
+month-11-short = dec
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = upravo
+minutes-ago-long[one]   = pre minut
+minutes-ago-long[two]   = pre {{value}} minuta
+minutes-ago-long[few]   = pre {{value}} minuta
+minutes-ago-long[many]  = pre {{value}} minuta
+minutes-ago-long[other] = pre {{value}} minuta
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = upravo
+hours-ago-long[one]   = pre sat vremena
+hours-ago-long[two]   = pre {{value}} sata
+hours-ago-long[few]   = pre {{value}} sati
+hours-ago-long[many]  = pre {{value}} sati
+hours-ago-long[other] = pre {{value}} sati
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = danas
+days-ago-long[one]   = juče
+days-ago-long[two]   = pre {{value}} dana
+days-ago-long[few]   = pre {{value}} dana
+days-ago-long[many]  = pre {{value}} dana
+days-ago-long[other] = pre {{value}} dana
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = ove nedelje
+weeks-ago-long[one]   = prošle nedelje
+weeks-ago-long[two]   = pre {{value}} nedelje
+weeks-ago-long[few]   = pre {{value}} nedelja
+weeks-ago-long[many]  = pre {{value}} nedelja
+weeks-ago-long[other] = pre {{value}} nedelja
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = ovog meseca
+months-ago-long[one]   = prošlog meseca
+months-ago-long[two]   = pre {{value}} meseca
+months-ago-long[few]   = pre {{value}} meseci
+months-ago-long[many]  = pre {{value}} meseci
+months-ago-long[other] = pre {{value}} meseci
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = ove godine
+years-ago-long[one]   = prošle godine
+years-ago-long[two]   = pre {{value}} godine
+years-ago-long[few]   = pre {{value}} godina
+years-ago-long[many]  = pre {{value}} godina
+years-ago-long[other] = pre {{value}} godina
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = upravo
+minutes-until-long[one]   = za jedan minut
+minutes-until-long[two]   = za {{value}} minuta
+minutes-until-long[few]   = za {{value}} minuta
+minutes-until-long[many]  = za {{value}} minuta
+minutes-until-long[other] = za {{value}} minuta
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = upravo
+hours-until-long[one]   = za sat vremena
+hours-until-long[two]   = za {{value}} sata
+hours-until-long[few]   = za {{value}} sati
+hours-until-long[many]  = za {{value}} sati
+hours-until-long[other] = za {{value}} sati
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = danas
+days-until-long[one]   = sutra
+days-until-long[two]   = za {{value}} dana
+days-until-long[few]   = za {{value}} dana
+days-until-long[many]  = za {{value}} dana
+days-until-long[other] = za {{value}} dana
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = ove nedelje
+weeks-until-long[one]   = sledeće nedelje
+weeks-until-long[two]   = za {{value}} nedelje
+weeks-until-long[few]   = za {{value}} nedelja
+weeks-until-long[many]  = za {{value}} nedelja
+weeks-until-long[other] = za {{value}} nedelja
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = ovog meseca
+months-until-long[one]   = sledećeg meseca
+months-until-long[two]   = za {{value}} meseca
+months-until-long[few]   = za {{value}} meseci
+months-until-long[many]  = za {{value}} meseci
+months-until-long[other] = za {{value}} meseci
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = ove godine
+years-until-long[one]   = sledeće godine
+years-until-long[two]   = za {{value}} godine
+years-until-long[few]   = za {{value}} godina
+years-until-long[many]  = za {{value}} godina
+years-until-long[other] = za {{value}} godina
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = upravo
+minutes-ago-short[other] = pre {{value}}m
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = upravo
+hours-ago-short[other] = pre {{value}}s
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = danas
+days-ago-short[other] = pre {{value}}d
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = upravo
+minutes-until-short[other] = za {{value}}m
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = upravo
+hours-until-short[other] = za {{value}}s
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = danas
+days-until-short[other] = za {{value}}d
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (netačan datum)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a %e %b %Y %H:%M:%S
+dateTimeFormat_%x = %d.%m.%Y
+dateTimeFormat_%X = %H:%M:%S
+
+shortTimeFormat = %H:%M
+shortDateTimeFormat = %x %H:%M
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 1
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = AM
+time_pm = PM
diff --git a/www/firefoxos/locales/date.sv-SE.properties b/www/firefoxos/locales/date.sv-SE.properties
new file mode 100644
index 0000000..671ccc4
--- /dev/null
+++ b/www/firefoxos/locales/date.sv-SE.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = Söndag
+weekday-1-long = Måndag
+weekday-2-long = Tisdag
+weekday-3-long = Onsdag
+weekday-4-long = Torsdag
+weekday-5-long = Fredag
+weekday-6-long = Lördag
+
+weekday-0-short = Sön
+weekday-1-short = Mån
+weekday-2-short = Tis
+weekday-3-short = Ons
+weekday-4-short = Tor
+weekday-5-short = Fre
+weekday-6-short = Lör
+
+# Month names
+
+month-0-long  = Januari
+month-1-long  = Februari
+month-2-long  = Mars
+month-3-long  = April
+month-4-long  = Maj
+month-5-long  = Juni
+month-6-long  = Juli
+month-7-long  = Augusti
+month-8-long  = September
+month-9-long  = Oktober
+month-10-long = November
+month-11-long = December
+
+month-0-genitive  = Januari
+month-1-genitive  = Februari
+month-2-genitive  = Mars
+month-3-genitive  = April
+month-4-genitive  = Maj
+month-5-genitive  = Juni
+month-6-genitive  = Juli
+month-7-genitive  = Augusti
+month-8-genitive  = September
+month-9-genitive  = Oktober
+month-10-genitive = November
+month-11-genitive = December
+
+month-0-short  = Jan
+month-1-short  = Feb
+month-2-short  = Mar
+month-3-short  = Apr
+month-4-short  = Maj
+month-5-short  = Jun
+month-6-short  = Jul
+month-7-short  = Aug
+month-8-short  = Sep
+month-9-short  = Okt
+month-10-short = Nov
+month-11-short = Dec
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = nyss
+minutes-ago-long[one]   = en minut sen
+minutes-ago-long[two]   = {{value}} minuter sen
+minutes-ago-long[few]   = {{value}} minuter sen
+minutes-ago-long[many]  = {{value}} minuter sen
+minutes-ago-long[other] = {{value}} minuter sen
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = nyss
+hours-ago-long[one]   = en timme sen
+hours-ago-long[two]   = {{value}} timmar sen
+hours-ago-long[few]   = {{value}} timmar sen
+hours-ago-long[many]  = {{value}} timmar sen
+hours-ago-long[other] = {{value}} timmar sen
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = idag
+days-ago-long[one]   = igår
+days-ago-long[two]   = {{value}} dagar sen
+days-ago-long[few]   = {{value}} dagar sen
+days-ago-long[many]  = {{value}} dagar sen
+days-ago-long[other] = {{value}} dagar sen
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = denna vecka
+weeks-ago-long[one]   = förra veckan
+weeks-ago-long[two]   = {{value}} veckor sen
+weeks-ago-long[few]   = {{value}} veckor sen
+weeks-ago-long[many]  = {{value}} veckor sen
+weeks-ago-long[other] = {{value}} veckor sen
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = denna månad
+months-ago-long[one]   = förra månaden
+months-ago-long[two]   = {{value}} månader sen
+months-ago-long[few]   = {{value}} månader sen
+months-ago-long[many]  = {{value}} månader sen
+months-ago-long[other] = {{value}} månader sen
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = detta år
+years-ago-long[one]   = förra året
+years-ago-long[two]   = {{value}} år sen
+years-ago-long[few]   = {{value}} år sen
+years-ago-long[many]  = {{value}} år sen
+years-ago-long[other] = {{value}} år sen
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = nu
+minutes-until-long[one]   = om en minut
+minutes-until-long[two]   = om {{value}} minuter
+minutes-until-long[few]   = om {{value}} minuter
+minutes-until-long[many]  = om {{value}} minuter
+minutes-until-long[other] = om {{value}} minuter
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = nu
+hours-until-long[one]   = om en timme
+hours-until-long[two]   = om {{value}} timmar
+hours-until-long[few]   = om {{value}} timmar
+hours-until-long[many]  = om {{value}} timmar
+hours-until-long[other] = om {{value}} timmar
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = idag
+days-until-long[one]   = imorgon
+days-until-long[two]   = om {{value}} dagar
+days-until-long[few]   = om {{value}} dagar
+days-until-long[many]  = om {{value}} dagar
+days-until-long[other] = om {{value}} dagar
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = denna vecka
+weeks-until-long[one]   = nästa vecka
+weeks-until-long[two]   = om {{value}} veckor
+weeks-until-long[few]   = om {{value}} veckor
+weeks-until-long[many]  = om {{value}} veckor
+weeks-until-long[other] = om {{value}} veckor
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = denna månad
+months-until-long[one]   = nästa månad
+months-until-long[two]   = om {{value}} månader
+months-until-long[few]   = om {{value}} månader
+months-until-long[many]  = om {{value}} månader
+months-until-long[other] = om {{value}} månader
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = detta år
+years-until-long[one]   = nästa år
+years-until-long[two]   = om {{value}} år
+years-until-long[few]   = om {{value}} år
+years-until-long[many]  = om {{value}} år
+years-until-long[other] = om {{value}} år
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = nyss
+minutes-ago-short[other] = {{value}}min sen
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = nyss
+hours-ago-short[other] = {{value}}tim. sen
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = idag
+days-ago-short[other] = {{value}}dygn sen
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = nu
+minutes-until-short[other] = om {{value}}min
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = nu
+hours-until-short[other] = om {{value}}tim.
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = idag
+days-until-short[other] = om {{value}}dygn
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (felaktigt datum)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a %e %b %Y %H:%M:%S
+dateTimeFormat_%x = %d/%m/%Y
+dateTimeFormat_%X = %H:%M:%S
+
+shortTimeFormat = %H:%M
+shortDateTimeFormat = %x %H:%M
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 1
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = AM
+time_pm = PM
diff --git a/www/firefoxos/locales/date.sw.properties b/www/firefoxos/locales/date.sw.properties
new file mode 100644
index 0000000..3e42ded
--- /dev/null
+++ b/www/firefoxos/locales/date.sw.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = Jumapili
+weekday-1-long = Jumatatu
+weekday-2-long = Jumanne
+weekday-3-long = Jumatano
+weekday-4-long = Alhamisi
+weekday-5-long = Ijumaa
+weekday-6-long = Jumamosi
+
+weekday-0-short = Jumapili
+weekday-1-short = Jumatatu
+weekday-2-short = Jumanne
+weekday-3-short = Jumatano
+weekday-4-short = Alhamisi
+weekday-5-short = Ijumaa
+weekday-6-short = Jumamosi
+
+# Month names
+
+month-0-long  = Januari
+month-1-long  = Februari
+month-2-long  = Machi
+month-3-long  = Aprili
+month-4-long  = Mei
+month-5-long  = Juni
+month-6-long  = Julai
+month-7-long  = Agosti
+month-8-long  = Septemba
+month-9-long  = Oktoba
+month-10-long = Novemba
+month-11-long = Desemba
+
+month-0-genitive  = Januari
+month-1-genitive  = Februari
+month-2-genitive  = Machi
+month-3-genitive  = Aprili
+month-4-genitive  = Mei
+month-5-genitive  = Juni
+month-6-genitive  = Julai
+month-7-genitive  = Agosti
+month-8-genitive  = Septemba
+month-9-genitive  = Oktoba
+month-10-genitive = Novemba
+month-11-genitive = Desemba
+
+month-0-short  = Januari
+month-1-short  = Februari
+month-2-short  = Machi
+month-3-short  = Aprili
+month-4-short  = Mei
+month-5-short  = Juni
+month-6-short  = Julai
+month-7-short  = Agosti
+month-8-short  = Septemba
+month-9-short  = Oktoba
+month-10-short = Novemba
+month-11-short = Desemba
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = Sasa hivi
+minutes-ago-long[one]   = dakika moja iliyopita
+minutes-ago-long[two]   = dakika {{value}} zilizopita
+minutes-ago-long[few]   = dakika {{value}} zilizopita
+minutes-ago-long[many]  = dakika {{value}} zilizopita
+minutes-ago-long[other] = dakika {{value}} zilizopita
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = sasa hivi
+hours-ago-long[one]   = lisaa limoja lililopita
+hours-ago-long[two]   = saa {{value}} zilizopita
+hours-ago-long[few]   = saa {{value}} zilizopita
+hours-ago-long[many]  = saa {{value}} zilizopita
+hours-ago-long[other] = saa {{value}} zilizopita
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = leo
+days-ago-long[one]   = jana
+days-ago-long[two]   = siku {{value}} zilizopita
+days-ago-long[few]   = siku {{value}} zilizopita
+days-ago-long[many]  = siku {{value}} zilizopita
+days-ago-long[other] = siku {{value}} zilizopita
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = wiki hii
+weeks-ago-long[one]   = wiki iliyopita
+weeks-ago-long[two]   = wiki {{value}} zilizopita
+weeks-ago-long[few]   = wiki {{value}} zilizopita
+weeks-ago-long[many]  = wiki {{value}} zilizopita
+weeks-ago-long[other] = wiki {{value}} zilizopita
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = mwezi huu
+months-ago-long[one]   = mwezi uliopita
+months-ago-long[two]   = miezi {{value}} iliyopita
+months-ago-long[few]   = miezi {{value}} iliyopita
+months-ago-long[many]  = miezi {{value}} iliyopita
+months-ago-long[other] = miezi {{value}} iliyopita
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = mwaka huu
+years-ago-long[one]   = mwaka uliopita
+years-ago-long[two]   = miaka {{value} iliyopita
+years-ago-long[few]   = miaka {{value} iliyopita
+years-ago-long[many]  = miaka {{value} iliyopita
+years-ago-long[other] = miaka {{value} iliyopita
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = saasa
+minutes-until-long[one]   = katika dakika moja
+minutes-until-long[two]   = katika dakika {{value}}
+minutes-until-long[few]   = katika dakika {{value}}
+minutes-until-long[many]  = katika dakika {{value}}
+minutes-until-long[other] = katika dakika {{value}}
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = sasa
+hours-until-long[one]   = katika lisaa
+hours-until-long[two]   = katika saa {{value}}
+hours-until-long[few]   = katika saa {{value}}
+hours-until-long[many]  = katika saa {{value}}
+hours-until-long[other] = katika saa {{value}}
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = leo
+days-until-long[one]   = kesho
+days-until-long[two]   = katika siku {{value}}
+days-until-long[few]   = katika siku {{value}}
+days-until-long[many]  = katika siku {{value}}
+days-until-long[other] = katika siku {{value}}
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = wiki hii
+weeks-until-long[one]   = wiki ifuatayo
+weeks-until-long[two]   = katika wiki {{value}}
+weeks-until-long[few]   = katika wiki {{value}}
+weeks-until-long[many]  = katika wiki {{value}}
+weeks-until-long[other] = katika wiki {{value}}
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = mwezi huu
+months-until-long[one]   = mwezi ujao
+months-until-long[two]   = katika miezi {{value}}
+months-until-long[few]   = katika miezi {{value}}
+months-until-long[many]  = katika miezi {{value}}
+months-until-long[other] = katika miezi {{value}}
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = mwaka huu
+years-until-long[one]   = mwaka ujao
+years-until-long[two]   = katika miaka {{value}}
+years-until-long[few]   = katika miaka {{value}}
+years-until-long[many]  = katika miaka {{value}}
+years-until-long[other] = katika miaka {{value}}
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = sasa hivi
+minutes-ago-short[other] = mwezi{{value}} uliopita
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = sasa hivi
+hours-ago-short[other] = saa{{value}} iliyopita
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = leo
+days-ago-short[other] = siku{{value}} iliyopita
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = sasa
+minutes-until-short[other] = katika mwezi{{value}}
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = sasa
+hours-until-short[other] = katika saa{{value}}
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = {[ plural(value) ]}
+days-until-short[other] = katika siku{{value}}
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (tarehe isio sahihu)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a %b %e %Y %I:%M:%S %p
+dateTimeFormat_%x = %m/%d/%Y
+dateTimeFormat_%X = %I:%M:%S %p
+
+shortTimeFormat = %I:%M %p
+shortDateTimeFormat = %x %I:%M %p
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 0
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = AM
+time_pm = PM
diff --git a/www/firefoxos/locales/date.ta.properties b/www/firefoxos/locales/date.ta.properties
new file mode 100644
index 0000000..2843d12
--- /dev/null
+++ b/www/firefoxos/locales/date.ta.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = ஞாயிற்றுக்கிழமை
+weekday-1-long = திங்கட்கிழமை
+weekday-2-long = செவ்வாய்கிழமை
+weekday-3-long = புதன்கிழமை
+weekday-4-long = வியாழக்கிழமை
+weekday-5-long = வெள்ளி
+weekday-6-long = சனிக்கிழமை
+
+weekday-0-short = ஞா
+weekday-1-short = தி
+weekday-2-short = செ
+weekday-3-short = பு
+weekday-4-short = வி
+weekday-5-short = வெ
+weekday-6-short = ச
+
+# Month names
+
+month-0-long  = சனவரி
+month-1-long  = பிப்ரவரி
+month-2-long  = மார்ச்
+month-3-long  = ஏப்ரல்
+month-4-long  = மே
+month-5-long  = சூன்
+month-6-long  = சூலை
+month-7-long  = ஆகஸ்டு
+month-8-long  = செப்டம்பர்
+month-9-long  = அக்டோபர்
+month-10-long = நவம்பர்
+month-11-long = திசம்பர்
+
+month-0-genitive  = சனவரி
+month-1-genitive  = பிப்ரவரி
+month-2-genitive  = மார்ச்
+month-3-genitive  = ஏப்ரல்
+month-4-genitive  = மே
+month-5-genitive  = சூன்
+month-6-genitive  = சூலை
+month-7-genitive  = ஆகஸ்டு
+month-8-genitive  = செப்டம்பர்
+month-9-genitive  = அக்டோபர்
+month-10-genitive = நவம்பர்
+month-11-genitive = திசம்பர்
+
+month-0-short  = சன
+month-1-short  = பிப்
+month-2-short  = மார்
+month-3-short  = ஏப்
+month-4-short  = மே
+month-5-short  = சூன்
+month-6-short  = சூலை
+month-7-short  = ஆக
+month-8-short  = செப்
+month-9-short  = அக்
+month-10-short = நவ
+month-11-short = டிச
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = சற்று முன்
+minutes-ago-long[one]   = ஒரு நிமிடத்திற்கு முன்
+minutes-ago-long[two]   = {{value}} நிமிடங்களுக்கு முன்
+minutes-ago-long[few]   = {{value}} நிமிடங்களுக்கு முன்
+minutes-ago-long[many]  = {{value}} நிமிடங்களுக்கு முன்
+minutes-ago-long[other] = {{value}} நிமிடங்களுக்கு முன்
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = சற்று முன்
+hours-ago-long[one]   = ஒரு மணி நேரத்திற்கு முன்
+hours-ago-long[two]   = {{value}} மணி நேரத்திற்கு முன்
+hours-ago-long[few]   = {{value}} மணி நேரத்திற்கு முன்
+hours-ago-long[many]  = {{value}} மணி நேரத்திற்கு முன்
+hours-ago-long[other] = {{value}} மணி நேரத்திற்கு முன்
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = இன்று
+days-ago-long[one]   = நேற்று
+days-ago-long[two]   = {{value}} நாட்களுக்கு முன்
+days-ago-long[few]   = {{value}} நாட்களுக்கு முன்
+days-ago-long[many]  = {{value}} நாட்களுக்கு முன்
+days-ago-long[other] = {{value}} நாட்களுக்கு முன்
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = இந்த வாரம்
+weeks-ago-long[one]   = கடந்த வாரம்
+weeks-ago-long[two]   = {{value}} வாரங்களுக்கு முன்
+weeks-ago-long[few]   = {{value}} வாரங்களுக்கு முன்
+weeks-ago-long[many]  = {{value}} வாரங்களுக்கு முன்
+weeks-ago-long[other] = {{value}} வாரங்களுக்கு முன்
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = இந்த மாதம்
+months-ago-long[one]   = கடந்த மாதம்
+months-ago-long[two]   = {{value}} மாதங்களுக்கு முன்
+months-ago-long[few]   = {{value}} மாதங்களுக்கு முன்
+months-ago-long[many]  = {{value}} மாதங்களுக்கு முன்
+months-ago-long[other] = {{value}} மாதங்களுக்கு முன்
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = இந்த வருடம்
+years-ago-long[one]   = கடந்த வருடம்
+years-ago-long[two]   = {{value}} வருடங்களுக்கு முன்
+years-ago-long[few]   = {{value}} வருடங்களுக்கு முன்
+years-ago-long[many]  = {{value}} வருடங்களுக்கு முன்
+years-ago-long[other] = {{value}} வருடங்களுக்கு முன்
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = தற்ப்போது
+minutes-until-long[one]   = ஒரு நிமிடத்தில்
+minutes-until-long[two]   = {{value}} நிமிடங்களில்
+minutes-until-long[few]   = {{value}} நிமிடங்களில்
+minutes-until-long[many]  = {{value}} நிமிடங்களில்
+minutes-until-long[other] = {{value}} நிமிடங்களில்
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = தற்ப்போது
+hours-until-long[one]   = ஒரு மணி நேரத்தில்
+hours-until-long[two]   = {{value}} மணி நேரம்
+hours-until-long[few]   = {{value}} மணி நேரம்
+hours-until-long[many]  = {{value}} மணி நேரம்
+hours-until-long[other] = {{value}} மணி நேரம்
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = இன்று
+days-until-long[one]   = நாளை
+days-until-long[two]   = {{value}} நாட்களில்
+days-until-long[few]   = {{value}} நாட்களில்
+days-until-long[many]  = {{value}} நாட்களில்
+days-until-long[other] = {{value}} நாட்களில்
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = இந்த வாரம்
+weeks-until-long[one]   = அடுத்த வாரம்
+weeks-until-long[two]   = {{value}} வாரங்களில்
+weeks-until-long[few]   = {{value}} வாரங்களில்
+weeks-until-long[many]  = {{value}} வாரங்களில்
+weeks-until-long[other] = {{value}} வாரங்களில்
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = இந்த மாதம்
+months-until-long[one]   = அடுத்த மாதம்
+months-until-long[two]   = {{value}} மாதங்களில்
+months-until-long[few]   = {{value}} மாதங்களில்
+months-until-long[many]  = {{value}} மாதங்களில்
+months-until-long[other] = {{value}} மாதங்களில்
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = இவ்வருடம்
+years-until-long[one]   = அடுத்த ஆண்டு
+years-until-long[two]   = {{value}} வருடங்களில்
+years-until-long[few]   = {{value}} வருடங்களில்
+years-until-long[many]  = {{value}} வருடங்களில்
+years-until-long[other] = {{value}} வருடங்களில்
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = சற்று முன்
+minutes-ago-short[other] = {{value}} நிமிடத்திற்கு முன்
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = சற்று முன்
+hours-ago-short[other] = {{value}}h மணிக்கு முன்
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = இன்று
+days-ago-short[other] = {{value}} நாளுக்கு முன்
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = இப்பொது
+minutes-until-short[other] = {{value}} நிமிடத்தில்
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = இப்போது
+hours-until-short[other] = {{value}} மணி நேரத்தில்
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = இன்று
+days-until-short[other] = {{value}} நாளில்
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (தவறான தேதி)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a %b %e %Y %I:%M:%S %p
+dateTimeFormat_%x = %m/%d/%Y
+dateTimeFormat_%X = %I:%M:%S %p
+
+shortTimeFormat = %I:%M %p
+shortDateTimeFormat = %x %I:%M %p
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 0
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = முப
+time_pm = பிப
diff --git a/www/firefoxos/locales/date.te.properties b/www/firefoxos/locales/date.te.properties
new file mode 100644
index 0000000..a0c8b27
--- /dev/null
+++ b/www/firefoxos/locales/date.te.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = ఆదివారం
+weekday-1-long = సోమవారం
+weekday-2-long = మంగళవారం
+weekday-3-long = బుధవారం
+weekday-4-long = గురువారం
+weekday-5-long = శుక్రవారం
+weekday-6-long = శనివారం
+
+weekday-0-short = ఆది
+weekday-1-short = సోమ
+weekday-2-short = మం
+weekday-3-short = బుధ
+weekday-4-short = గురు
+weekday-5-short = శుక్ర
+weekday-6-short = శని
+
+# Month names
+
+month-0-long  = జనవరి
+month-1-long  = ఫిబ్రవరి
+month-2-long  = మార్చి
+month-3-long  = ఏప్రిల్
+month-4-long  = మే
+month-5-long  = జూన్
+month-6-long  = జూలై
+month-7-long  = ఆగష్టు
+month-8-long  = సెప్టెంబర్
+month-9-long  = అక్టోబర్
+month-10-long = నవంబర్
+month-11-long = డిసెంబర్
+
+month-0-genitive  = జనవరి
+month-1-genitive  = ఫిబ్రవరి
+month-2-genitive  = మార్చి
+month-3-genitive  = ఏప్రిల్
+month-4-genitive  = మే
+month-5-genitive  = జూన్
+month-6-genitive  = జూలై
+month-7-genitive  = ఆగస్ట్
+month-8-genitive  = సెప్టెంబర్
+month-9-genitive  = అక్టోబర్
+month-10-genitive = నవంబర్
+month-11-genitive = డిసెంబర్
+
+month-0-short  = జన
+month-1-short  = ఫిబ్ర
+month-2-short  = మార్చి
+month-3-short  = ఏప్రిల్
+month-4-short  = మే
+month-5-short  = జూన్
+month-6-short  = జూలై
+month-7-short  = ఆగష్టు
+month-8-short  = సెప్టెం
+month-9-short  = అక్టో
+month-10-short = నవం
+month-11-short = డిసెం
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = ఇప్పుడే
+minutes-ago-long[one]   = నిముషం క్రితం
+minutes-ago-long[two]   = {{value}} నిమిషాల క్రితం
+minutes-ago-long[few]   = {{value}} నిమిషాల క్రితం
+minutes-ago-long[many]  = {{value}} నిమిషాల క్రితం
+minutes-ago-long[other] = {{value}} నిమిషాల క్రితం
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = ఇప్పుడే
+hours-ago-long[one]   = ఒక గంట క్రితం
+hours-ago-long[two]   = {{value}} గంటల క్రితం
+hours-ago-long[few]   = {{value}} గంటల క్రితం
+hours-ago-long[many]  = {{value}} గంటల క్రితం
+hours-ago-long[other] = {{value}} గంటల క్రితం
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = నేడు
+days-ago-long[one]   = నిన్న
+days-ago-long[two]   = {{value}} రోజుల క్రితం
+days-ago-long[few]   = {{value}} రోజుల క్రితం
+days-ago-long[many]  = {{value}} రోజుల క్రితం
+days-ago-long[other] = {{value}} రోజుల క్రితం
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = ఈ వారం
+weeks-ago-long[one]   = పోయిన వారం
+weeks-ago-long[two]   = {{value}} వారాల క్రితం
+weeks-ago-long[few]   = {{value}} వారాల క్రితం
+weeks-ago-long[many]  = {{value}} వారాల క్రితం
+weeks-ago-long[other] = {{value}} వారాల క్రితం
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = ఈ నెల
+months-ago-long[one]   = పోయిన నెల
+months-ago-long[two]   = {{value}} నెలల క్రితం
+months-ago-long[few]   = {{value}} నెలల క్రితం
+months-ago-long[many]  = {{value}} నెలల క్రితం
+months-ago-long[other] = {{value}} నెలల క్రితం
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = ఈ ఏడు
+years-ago-long[one]   = నిరుడు
+years-ago-long[two]   = {{value}} ఏళ్ళ క్రితం
+years-ago-long[few]   = {{value}} ఏళ్ళ క్రితం
+years-ago-long[many]  = {{value}} ఏళ్ళ క్రితం
+years-ago-long[other] = {{value}} ఏళ్ళ క్రితం
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = ఇప్పుడే
+minutes-until-long[one]   = ఒక నిమిషంలో
+minutes-until-long[two]   = {{value}} నిమిషాలలో
+minutes-until-long[few]   = {{value}} నిమిషాలలో
+minutes-until-long[many]  = {{value}} నిమిషాలలో
+minutes-until-long[other] = {{value}} నిమిషాలలో
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = ఇప్పుడే
+hours-until-long[one]   = ఒక గంటలో
+hours-until-long[two]   = {{value}} గంటలలో
+hours-until-long[few]   = {{value}} గంటలలో
+hours-until-long[many]  = {{value}} గంటలలో
+hours-until-long[other] = {{value}} గంటలలో
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = నేడు
+days-until-long[one]   = రేపు
+days-until-long[two]   = {{value}} రోజులలో
+days-until-long[few]   = {{value}} రోజులలో
+days-until-long[many]  = {{value}} రోజులలో
+days-until-long[other] = {{value}} రోజులలో
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = ఈ వారం
+weeks-until-long[one]   = వచ్చే వారం
+weeks-until-long[two]   = {{value}} వారాలలో
+weeks-until-long[few]   = {{value}} వారాలలో
+weeks-until-long[many]  = {{value}} వారాలలో
+weeks-until-long[other] = {{value}} వారాలలో
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = ఈ నెల
+months-until-long[one]   = వచ్చే నెల
+months-until-long[two]   = {{value}} నెలలలో
+months-until-long[few]   = {{value}} నెలలలో
+months-until-long[many]  = {{value}} నెలలలో
+months-until-long[other] = {{value}} నెలలలో
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = ఈ ఏడు
+years-until-long[one]   = వచ్చే ఏడు
+years-until-long[two]   = {{value}} సంవత్సరాల్లో
+years-until-long[few]   = {{value}} సంవత్సరాల్లో
+years-until-long[many]  = {{value}} సంవత్సరాల్లో
+years-until-long[other] = {{value}} సంవత్సరాల్లో
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = ఇప్పుడే
+minutes-ago-short[other] = {{value}}ని క్రితం
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = ఇప్పుడే
+hours-ago-short[other] = {{value}}గం క్రితం
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = నేడు
+days-ago-short[other] = {{value}}రో క్రితం
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = ఇప్పుడు
+minutes-until-short[other] = {{value}}ని లో
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = ఇప్పుడు
+hours-until-short[other] = {{value}}గం లో
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = నేడు
+days-until-short[other] = {{value}}రో లో
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (చెల్లని తేదీ)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a %b %e %Y %I:%M:%S %p
+dateTimeFormat_%x = %d/%m/%Y
+dateTimeFormat_%X = %I:%M:%S %p
+
+shortTimeFormat = %I:%M %p
+shortDateTimeFormat = %x %I:%M %p
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 0
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = తొలి
+time_pm = మలి
diff --git a/www/firefoxos/locales/date.th.properties b/www/firefoxos/locales/date.th.properties
new file mode 100644
index 0000000..7b4b028
--- /dev/null
+++ b/www/firefoxos/locales/date.th.properties
@@ -0,0 +1,68 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = อาทิตย์
+weekday-6-long = เสาร์
+
+
+# Month names
+
+
+
+
+# Relative time ("pretty dates"), normal/long variant
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+
+
+
+
+
+
+# Relative time ("pretty dates"), unexpected error
+
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+
+shortTimeFormat = %H:%M
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+
+# Localize “AM" and "PM" used in %p format for time
diff --git a/www/firefoxos/locales/date.tr.properties b/www/firefoxos/locales/date.tr.properties
new file mode 100644
index 0000000..84228a7
--- /dev/null
+++ b/www/firefoxos/locales/date.tr.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = Pazar
+weekday-1-long = Pazartesi
+weekday-2-long = Salı
+weekday-3-long = Çarşamba
+weekday-4-long = Perşembe
+weekday-5-long = Cuma
+weekday-6-long = Cumartesi
+
+weekday-0-short = Pzr
+weekday-1-short = Pzt
+weekday-2-short = Sal
+weekday-3-short = Çar
+weekday-4-short = Per
+weekday-5-short = Cum
+weekday-6-short = Cmt
+
+# Month names
+
+month-0-long  = Ocak
+month-1-long  = Şubat
+month-2-long  = Mart
+month-3-long  = Nisan
+month-4-long  = Mayıs
+month-5-long  = Haziran
+month-6-long  = Temmuz
+month-7-long  = Ağustos
+month-8-long  = Eylül
+month-9-long  = Ekim
+month-10-long = Kasım
+month-11-long = Aralık
+
+month-0-genitive  = Ocak
+month-1-genitive  = Şubat
+month-2-genitive  = Mart
+month-3-genitive  = Nisan
+month-4-genitive  = Mayıs
+month-5-genitive  = Haziran
+month-6-genitive  = Temmuz
+month-7-genitive  = Ağustos
+month-8-genitive  = Eylül
+month-9-genitive  = Ekim
+month-10-genitive = Kasım
+month-11-genitive = Aralık
+
+month-0-short  = Oca
+month-1-short  = Şub
+month-2-short  = Mar
+month-3-short  = Nis
+month-4-short  = May
+month-5-short  = Haz
+month-6-short  = Tem
+month-7-short  = Ağu
+month-8-short  = Eyl
+month-9-short  = Eki
+month-10-short = Kas
+month-11-short = Ara
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = biraz önce
+minutes-ago-long[one]   = bir dakika önce
+minutes-ago-long[two]   = {{value}} dakika önce
+minutes-ago-long[few]   = {{value}} dakika önce
+minutes-ago-long[many]  = {{value}} dakika önce
+minutes-ago-long[other] = {{value}} dakika önce
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = biraz önce
+hours-ago-long[one]   = bir saat önce
+hours-ago-long[two]   = {{value}} saat önce
+hours-ago-long[few]   = {{value}} saat önce
+hours-ago-long[many]  = {{value}} saat önce
+hours-ago-long[other] = {{value}} saat önce
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = bugün
+days-ago-long[one]   = dün
+days-ago-long[two]   = {{value}} gün önce
+days-ago-long[few]   = {{value}} gün önce
+days-ago-long[many]  = {{value}} gün önce
+days-ago-long[other] = {{value}} gün önce
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = bu hafta
+weeks-ago-long[one]   = geçen hafta
+weeks-ago-long[two]   = {{value}} hafta önce
+weeks-ago-long[few]   = {{value}} hafta önce
+weeks-ago-long[many]  = {{value}} hafta önce
+weeks-ago-long[other] = {{value}} hafta önce
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = bu ay
+months-ago-long[one]   = geçen ay
+months-ago-long[two]   = {{value}} ay önce
+months-ago-long[few]   = {{value}} ay önce
+months-ago-long[many]  = {{value}} ay önce
+months-ago-long[other] = {{value}} ay önce
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = bu yıl
+years-ago-long[one]   = geçen yıl
+years-ago-long[two]   = {{value}} yıl önce
+years-ago-long[few]   = {{value}} yıl önce
+years-ago-long[many]  = {{value}} yıl önce
+years-ago-long[other] = {{value}} yıl önce
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = şimdi
+minutes-until-long[one]   = bir dakika önce
+minutes-until-long[two]   = {{value}} dakika içinde
+minutes-until-long[few]   = {{value}} dakika içinde
+minutes-until-long[many]  = {{value}} dakika içinde
+minutes-until-long[other] = {{value}} dakika içinde
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = şimdi
+hours-until-long[one]   = bir saat içinde
+hours-until-long[two]   = {{value}} saat içinde
+hours-until-long[few]   = {{value}} saat içinde
+hours-until-long[many]  = {{value}} saat içinde
+hours-until-long[other] = {{value}} saat içinde
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = bugün
+days-until-long[one]   = dün
+days-until-long[two]   = {{value}} gün içinde
+days-until-long[few]   = {{value}} gün içinde
+days-until-long[many]  = {{value}} gün içinde
+days-until-long[other] = {{value}} gün içinde
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = bu hafta
+weeks-until-long[one]   = gelecek hafta
+weeks-until-long[two]   = {{value}} hafta içinde
+weeks-until-long[few]   = {{value}} hafta içinde
+weeks-until-long[many]  = {{value}} hafta içinde
+weeks-until-long[other] = {{value}} hafta içinde
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = bu ay
+months-until-long[one]   = gelecek ay
+months-until-long[two]   = {{value}} ay içinde
+months-until-long[few]   = {{value}} ay içinde
+months-until-long[many]  = {{value}} ay içinde
+months-until-long[other] = {{value}} ay içinde
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = bu yıl
+years-until-long[one]   = gelecek yıl
+years-until-long[two]   = {{value}} yıl içinde
+years-until-long[few]   = {{value}} yıl içinde
+years-until-long[many]  = {{value}} yıl içinde
+years-until-long[other] = {{value}} yıl içinde
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = biraz önce
+minutes-ago-short[other] = {{value}} dk önce
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = biraz önce
+hours-ago-short[other] = {{value}} saat önce
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = bugün
+days-ago-short[other] = {{value}} gün önce
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = şimdi
+minutes-until-short[other] = {{value}} dk içinde
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = şimdi
+hours-until-short[other] = {{value}} saat içinde
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = bugün
+days-until-short[other] = {{value}} gün içinde
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (geçersiz tarih)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %e %b %Y %a %H:%M:%S
+dateTimeFormat_%x = %d/%m/%Y
+dateTimeFormat_%X = %H:%M:%S
+
+shortTimeFormat = %H:%M
+shortDateTimeFormat = %x %H:%M
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 1
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = ÖÖ
+time_pm = ÖS
diff --git a/www/firefoxos/locales/date.ur.properties b/www/firefoxos/locales/date.ur.properties
new file mode 100644
index 0000000..c162c16
--- /dev/null
+++ b/www/firefoxos/locales/date.ur.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = اتوار
+weekday-1-long = سوموار
+weekday-2-long = منگل
+weekday-3-long = بدھ
+weekday-4-long = جمعرات
+weekday-5-long = جمعہ
+weekday-6-long = ہفتہ
+
+weekday-0-short = اتوار
+weekday-1-short = سوموار
+weekday-2-short = منگل
+weekday-3-short = بدھ
+weekday-4-short = جمعرات
+weekday-5-short = جمعہ
+weekday-6-short = ہفتہ
+
+# Month names
+
+month-0-long  = جنوری
+month-1-long  = فروری
+month-2-long  = مارچ
+month-3-long  = اپریل
+month-4-long  = مئی
+month-5-long  = جون
+month-6-long  = جولائی
+month-7-long  = اگست
+month-8-long  = ستمبر
+month-9-long  = اکتوبر
+month-10-long = نومبر
+month-11-long = دسمبر
+
+month-0-genitive  = جنوری
+month-1-genitive  = فروری
+month-2-genitive  = مارچ
+month-3-genitive  = اپریل
+month-4-genitive  = مئی
+month-5-genitive  = جون
+month-6-genitive  = جولائی
+month-7-genitive  = اگست
+month-8-genitive  = ستمبر
+month-9-genitive  = اکتوبر
+month-10-genitive = نومبر
+month-11-genitive = دسمبر
+
+month-0-short  = جنوری
+month-1-short  = فروری
+month-2-short  = مارچ
+month-3-short  = اپریل
+month-4-short  = مئی
+month-5-short  = جون
+month-6-short  = جولائی
+month-7-short  = اگست
+month-8-short  = ستمبر
+month-9-short  = اکتوبر
+month-10-short = نومبر
+month-11-short = دسمبر
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ (plural(value ]}
+minutes-ago-long[zero]  = بلکل ابھی
+minutes-ago-long[one]   = ایک منٹ پہلے
+minutes-ago-long[two]   = {{value}} منٹ پہلے
+minutes-ago-long[few]   = {{value}} منٹ پہلے
+minutes-ago-long[many]  = {{value}} منٹ قبل
+minutes-ago-long[other] = {{value}} منٹ قبل
+
+hours-ago-long={[ (plural(value ]}
+hours-ago-long[zero]  = بلکل ابھی
+hours-ago-long[one]   = ایک گھنٹہ قبل
+hours-ago-long[two]   = {{value}} گھنٹے قبل
+hours-ago-long[few]   = {{value}} گھنٹے قبل
+hours-ago-long[many]  = {{value}} گھنٹے قبل
+hours-ago-long[other] = {{value}} گھنٹے پہلے
+
+days-ago-long={[ (plural(value ]}
+days-ago-long[zero]  = آج
+days-ago-long[one]   = گزرا کل
+days-ago-long[two]   = {{value}} دن پہلے
+days-ago-long[few]   = {{value}} دن پہلے
+days-ago-long[many]  = {{value}} دن پہلے
+days-ago-long[other] = {{value}} دن پہلے
+
+weeks-ago-long={[ (plural(value ]}
+weeks-ago-long[zero]  = اس ہفتے
+weeks-ago-long[one]   = گزشتہ ہفتہ
+weeks-ago-long[two]   = {{value}} ہفتے پہلے
+weeks-ago-long[few]   = {{value}} ہفتے پہلے
+weeks-ago-long[many]  = {{value}} ہفتے پہلے
+weeks-ago-long[other] = {{value}} ہفتے پہلے
+
+months-ago-long={[ (plural(value ]}
+months-ago-long[zero]  = اس ماہ
+months-ago-long[one]   = پچھلا مہینہ
+months-ago-long[two]   = {{value}} مہینے پہلے
+months-ago-long[few]   = {{value}} مہینے پہلے
+months-ago-long[many]  = {{value}} مہینے پہلے
+months-ago-long[other] = {{value}} مہینے پہلے
+
+years-ago-long={[ (plural(value ]}
+years-ago-long[zero]  = اس سال
+years-ago-long[one]   = گزشتہ برس
+years-ago-long[two]   = {{value}} سال پہلے
+years-ago-long[few]   = {{value}} سال پہلے
+years-ago-long[many]  = {{value}} سال پہلے
+years-ago-long[other] = {{value}} سال پہلے
+
+minutes-until-long={[ (plural(value ]}
+minutes-until-long[zero]  = اس وقت
+minutes-until-long[one]   = ایک منٹ میں
+minutes-until-long[two]   = {{value}} منٹ میں
+minutes-until-long[few]   = {{value}} منٹ میں
+minutes-until-long[many]  = {{value}} منٹ میں
+minutes-until-long[other] = {{value}} منٹ میں
+
+hours-until-long={[ (plural(value ]}
+hours-until-long[zero]  = ابھی
+hours-until-long[one]   = ایک گھنٹے میں
+hours-until-long[two]   = {{value}} گھنٹوں میں
+hours-until-long[few]   = {{value}} گھنٹوں میں\u0020
+hours-until-long[many]  = {{value}} گھنٹوں میں
+hours-until-long[other] = {{value}} گھنٹوں میں
+
+days-until-long={[ (plural(value ]}
+days-until-long[zero]  = آج
+days-until-long[one]   = کل
+days-until-long[two]   = {{value}} دنوں میں
+days-until-long[few]   = {{value}} دنوں میں
+days-until-long[many]  = {{value}} دنوں میں
+days-until-long[other] = {{value}} دنوں میں
+
+weeks-until-long={[ (plural(value ]}
+weeks-until-long[zero]  = اس ہفتے
+weeks-until-long[one]   = اگلے ہفتے
+weeks-until-long[two]   = {{value}} دنوں میں
+weeks-until-long[few]   = {{value}} ہفتوں میں
+weeks-until-long[many]  = {{value}} ہفتوں میں\u0020
+weeks-until-long[other] = {{value}} ہفتوں میں
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = اس ماہ
+months-until-long[one]   = اگلے ماہ
+months-until-long[two]   = {{value}} ماہ میں
+months-until-long[few]   = {{value}} ماہ میں
+months-until-long[many]  = {{value}} ماہ میں
+months-until-long[other] = {{value}} ماہ میں
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = اس سال
+years-until-long[one]   = اس سال
+years-until-long[two]   = {{value}} سالوں میں
+years-until-long[few]   = {{value}} سالوں میں
+years-until-long[many]  = {{value}} سالوں میں
+years-until-long[other] = {{value}} سالوں میں
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = بلکل ابھی
+minutes-ago-short[other] = {{value}} منٹ پہلے
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = بلکل ابھی
+hours-ago-short[other] = {{value}} گھنٹے پہلے
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = آج
+days-ago-short[other] = {{value}} دن قبل
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = اس وقت
+minutes-until-short[other] = {{value}}m میں
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = اس وقت
+hours-until-short[other] = {{value}}h میں
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = آج
+days-until-short[other] = {{value}}d میں
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (غلط تاریخ)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a %b %e %Y %I:%M:%S %p
+dateTimeFormat_%x = %m/%d/%Y
+dateTimeFormat_%X = %I:%M:%S %p
+
+shortTimeFormat = %I:%M %p
+shortDateTimeFormat = %x %I:%M %p
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 0
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = AM
+time_pm = PM
diff --git a/www/firefoxos/locales/date.vi.properties b/www/firefoxos/locales/date.vi.properties
new file mode 100644
index 0000000..b981a39
--- /dev/null
+++ b/www/firefoxos/locales/date.vi.properties
@@ -0,0 +1,224 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = chủ nhật
+weekday-1-long = Thứ hai
+weekday-2-long = Thứ ba
+weekday-3-long = Thứ tư
+weekday-4-long = Thứ năm
+weekday-5-long = Thứ sáu
+weekday-6-long = Thứ bảy
+
+weekday-0-short = CN
+weekday-1-short = T2
+weekday-2-short = T3
+weekday-3-short = T4
+weekday-4-short = T5
+weekday-5-short = T6
+weekday-6-short = T7
+
+# Month names
+
+month-0-long  = Tháng một
+month-1-long  = Tháng hai
+month-2-long  = Tháng ba
+month-3-long  = Tháng tư
+month-4-long  = Tháng năm
+month-5-long  = Tháng sáu
+month-6-long  = Tháng bảy
+month-7-long  = Tháng tám
+month-8-long  = Tháng chín
+month-9-long  = Tháng mười
+month-10-long = Tháng mười một
+month-11-long = Tháng mười hai
+
+month-0-genitive  = Tháng một
+month-1-genitive  = Tháng hai
+month-2-genitive  = Tháng ba
+month-3-genitive  = Tháng tư
+month-4-genitive  = Tháng năm
+month-5-genitive  = Tháng Sáu
+month-6-genitive  = Tháng bảy
+month-7-genitive  = Tháng tám
+month-8-genitive  = Tháng chín
+month-9-genitive  = Tháng mười
+month-10-genitive = Tháng mười một
+month-11-genitive = Tháng mười hai
+
+month-0-short  = Th1
+month-1-short  = Th2
+month-2-short  = Th3
+month-3-short  = Th4
+month-4-short  = Th5
+month-5-short  = Th6
+month-6-short  = Th7
+month-7-short  = Th8
+month-8-short  = Th9
+month-9-short  = Th10
+month-10-short = Th11
+month-11-short = Th12
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = vừa xong
+minutes-ago-long[one]   = một phút trước
+minutes-ago-long[two]   = {{value}} phút trước
+minutes-ago-long[few]   = {{value}} phút trước
+minutes-ago-long[many]  = {{value}} phút trước
+minutes-ago-long[other] = {{value}} phút trước
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = vừa xong
+hours-ago-long[one]   = một giờ trước
+hours-ago-long[two]   = {{value}} giờ trước
+hours-ago-long[few]   = {{value}} giờ trước
+hours-ago-long[many]  = {{value}} giờ trước
+hours-ago-long[other] = {{value}} giờ trước
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = hôm nay
+days-ago-long[one]   = hôm qua
+days-ago-long[two]   = {{value}} ngày trước
+days-ago-long[few]   = {{value}} ngày trước
+days-ago-long[many]  = {{value}} ngày trước
+days-ago-long[other] = {{value}} ngày trước
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = tuần này
+weeks-ago-long[one]   = tuần trước
+weeks-ago-long[two]   = {{value}} tuần trước
+weeks-ago-long[few]   = {{value}} tuần trước
+weeks-ago-long[many]  = {{value}} tuần trước
+weeks-ago-long[other] = {{value}} tuần trước
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = tháng này
+months-ago-long[one]   = tháng trước
+months-ago-long[two]   = {{value}} tháng trước
+months-ago-long[few]   = {{value}} tháng trước
+months-ago-long[many]  = {{value}} tháng trước
+months-ago-long[other] = {{value}} tháng trước
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = năm nay
+years-ago-long[one]   = năm ngoái
+years-ago-long[two]   = {{value}} năm trước
+years-ago-long[few]   = {{value}} năm trước
+years-ago-long[many]  = {{value}} năm trước
+years-ago-long[other] = {{value}} năm trước
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = bây giờ
+minutes-until-long[one]   = trong một phút
+minutes-until-long[two]   = trong {{value}} phút
+minutes-until-long[few]   = trong {{value}} phút
+minutes-until-long[many]  = trong {{value}} phút
+minutes-until-long[other] = trong {{value}} phút
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = bây giờ
+hours-until-long[one]   = trong một giờ
+hours-until-long[two]   = trong {{value}} giờ
+hours-until-long[few]   = trong {{value}} giờ
+hours-until-long[many]  = trong {{value}} giờ
+hours-until-long[other] = trong {{value}} giờ
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = hôm nay
+days-until-long[one]   = ngày mai
+days-until-long[two]   = trong {{value}} ngày
+days-until-long[few]   = trong {{value}} ngày
+days-until-long[many]  = trong {{value}} ngày
+days-until-long[other] = trong {{value}} ngày
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = tuần này
+weeks-until-long[one]   = tuần sau
+weeks-until-long[two]   = trong {{value}} tuần
+weeks-until-long[few]   = trong {{value}} tuần
+weeks-until-long[many]  = trong {{value}} tuần
+weeks-until-long[other] = trong {{value}} tuần
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = tháng này
+months-until-long[one]   = tháng sau
+months-until-long[two]   = trong {{value}} tháng
+months-until-long[few]   = trong {{value}} tháng
+months-until-long[many]  = trong {{value}} tháng
+months-until-long[other] = trong {{value}} tháng
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = năm nay
+years-until-long[one]   = năm sau
+years-until-long[two]   = trong {{value}} năm
+years-until-long[few]   = trong {{value}} năm
+years-until-long[many]  = trong {{value}} năm
+years-until-long[other] = trong {{value}} năm
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = vừa xong
+minutes-ago-short[other] = {{value}}p trước
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = vừa xong
+hours-ago-short[other] = {{value}}h trước
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = hôm nay
+days-ago-short[other] = {{value}}ng trước
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = bây giờ
+minutes-until-short[other] = trong {{value}}p
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = bây giờ
+hours-until-short[other] = trong {{value}}h
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = hôm nay
+days-until-short[other] = trong {{value}}ng
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (sai ngày)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a, ngày %e %b năm %Y %I:%M:%S %p
+dateTimeFormat_%x = %d/%m/%Y
+dateTimeFormat_%X = %I:%M:%S %p
+
+shortTimeFormat = %I:%M %p
+shortDateTimeFormat = %x %I:%M %p
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 1
+
+# Localize “AM" and "PM" used in %p format for time
diff --git a/www/firefoxos/locales/date.xh.properties b/www/firefoxos/locales/date.xh.properties
new file mode 100644
index 0000000..32f1949
--- /dev/null
+++ b/www/firefoxos/locales/date.xh.properties
@@ -0,0 +1,224 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = Cawa
+weekday-1-long = Mvulo
+weekday-2-long = Lwesibini
+weekday-3-long = Lwesithathu
+weekday-4-long = Lwesine
+weekday-5-long = Lwesihlanu
+weekday-6-long = Mgqibelo
+
+weekday-0-short = Caw
+weekday-1-short = Mv
+weekday-2-short = Lwesib
+weekday-3-short = Lwesith
+weekday-4-short = Lwesin
+weekday-5-short = Lwesihl
+weekday-6-short = Mgq
+
+# Month names
+
+month-0-long  = Januwari
+month-1-long  = Febhuwari
+month-2-long  = Matshi
+month-3-long  = Epreli
+month-4-long  = Meyi
+month-5-long  = uJuni
+month-6-long  = Julayi
+month-7-long  = Agasti
+month-8-long  = Septemba
+month-9-long  = Okhthobha
+month-10-long = Novemba
+month-11-long = Disemba
+
+month-0-genitive  = Januwari
+month-1-genitive  = Febhuwari
+month-2-genitive  = Matshi
+month-3-genitive  = Epreli
+month-4-genitive  = Meyi
+month-5-genitive  = uJuni
+month-6-genitive  = Julayi
+month-7-genitive  = Agasti
+month-8-genitive  = Septemba
+month-9-genitive  = Okhthobha
+month-10-genitive = Novemba
+month-11-genitive = Disemba
+
+month-0-short  = Jan
+month-1-short  = Feb
+month-2-short  = Mat
+month-3-short  = Apr
+month-4-short  = Meyi
+month-5-short  = uJun
+month-6-short  = Jul
+month-7-short  = Agas
+month-8-short  = Sep
+month-9-short  = Okt
+month-10-short = Nov
+month-11-short = Dis
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = nje ngoku
+minutes-ago-long[one]   = umzuzu ogqithileyo
+minutes-ago-long[two]   = imizuzu e-{{value}} egqithileyo
+minutes-ago-long[few]   = imizuzu e-{{value}} egqithileyo
+minutes-ago-long[many]  = imizuzu e-{{value}} egqithileyo
+minutes-ago-long[other] = imizuzu e-{{value}} egqithileyo
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = nje ngoku
+hours-ago-long[one]   = kwiyure egqithileyo
+hours-ago-long[two]   = iiyure ezi-{{value}} ezigqithileyo
+hours-ago-long[few]   = iiyure ezi-{{value}} ezigqithileyo
+hours-ago-long[many]  = iiyure ezi-{{value}} ezigqithileyo
+hours-ago-long[other] = iiyure ezi-{{value}} ezigqithileyo
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = namhlanje
+days-ago-long[one]   = izolo
+days-ago-long[two]   = iintsuku ezi-{{value}} ezigqithileyo
+days-ago-long[few]   = iintsuku ezi-{{value}} ezigqithileyo
+days-ago-long[many]  = iintsuku ezi-{{value}} ezigqithileyo
+days-ago-long[other] = iintsuku ezi-{{value}} ezigqithileyo
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = kule veki
+weeks-ago-long[one]   = kwiveki ephelileyo
+weeks-ago-long[two]   = iiveki ezi-{{value}} ezigqithileyo
+weeks-ago-long[few]   = iiveki ezi-{{value}} ezigqithileyo
+weeks-ago-long[many]  = iiveki ezi-{{value}} ezigqithileyo
+weeks-ago-long[other] = iiveki ezi-{{value}} ezigqithileyo
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = kule nyanga
+months-ago-long[one]   = kwinyanga ephelileyo
+months-ago-long[two]   = iinyanga ezi-{{value}} ezigqithileyo
+months-ago-long[few]   = iinyanga ezi-{{value}} ezigqithileyo
+months-ago-long[many]  = iinyanga ezi-{{value}} ezigqithileyo
+months-ago-long[other] = iinyanga ezi-{{value}} ezigqithileyo
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = kulo nyaka
+years-ago-long[one]   = kunyaka ophelileyo
+years-ago-long[two]   = iminyaka e-{{value}} egqithileyo
+years-ago-long[few]   = iminyaka e-{{value}} egqithileyo
+years-ago-long[many]  = iminyaka e-{{value}} egqithileyo
+years-ago-long[other] = iminyaka e-{{value}} egqithileyo
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = ngoku
+minutes-until-long[one]   = emzuzwini
+minutes-until-long[two]   = kwimizuzu e-{{value}}
+minutes-until-long[few]   = kwimizuzu e-{{value}}
+minutes-until-long[many]  = kwimizuzu e-{{value}}
+minutes-until-long[other] = kwimizuzu e-{{value}}
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = ngoku
+hours-until-long[one]   = kwiyure
+hours-until-long[two]   = kwiiyure ezi-{{value}}
+hours-until-long[few]   = kwiiyure ezi-{{value}}
+hours-until-long[many]  = kwiiyure ezi-{{value}}
+hours-until-long[other] = kwiiyure ezi-{{value}}
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = namhlanje
+days-until-long[one]   = ngomso
+days-until-long[two]   = kwiintsuku ezi-{{value}}
+days-until-long[few]   = kwiintsuku ezi-{{value}}
+days-until-long[many]  = kwiintsuku ezi-{{value}}
+days-until-long[other] = kwiintsuku ezi-{{value}}
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = kule veki
+weeks-until-long[one]   = kwiveki ezayo
+weeks-until-long[two]   = kwiiveki ezi-{{value}}
+weeks-until-long[few]   = kwiiveki ezi-{{value}}
+weeks-until-long[many]  = kwiiveki ezi-{{value}}
+weeks-until-long[other] = kwiiveki ezi-{{value}}
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = kule nyanga
+months-until-long[one]   = kwinyanga ezayo
+months-until-long[two]   = kwiinyanga ezi-{{value}}
+months-until-long[few]   = kwiinyanga ezi-{{value}}
+months-until-long[many]  = kwiinyanga ezi-{{value}}
+months-until-long[other] = kwiinyanga ezi-{{value}}
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = kulo nyaka
+years-until-long[one]   = kunyaka ozayo
+years-until-long[two]   = kwiminyaka e-{{value}}
+years-until-long[few]   = kwiminyaka e-{{value}}
+years-until-long[many]  = kwiminyaka e-{{value}}
+years-until-long[other] = kwiminyaka e-{{value}}
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = nje ngoku
+minutes-ago-short[other] = kwi-{{value}}m egqithileyo
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = nje ngoku
+hours-ago-short[other] = kwi-{{value}}h egqithileyo
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = namhlanje
+days-ago-short[other] = kwi-{{value}}d egqithileyo
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = ngoku
+minutes-until-short[other] = kwi-{{value}}m
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = ngoku
+hours-until-short[other] = kwi-{{value}}h
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = namhlanje
+days-until-short[other] = kwi-{{value}}d
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (umhla ongachananga)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %a %b %e %Y %I:%M:%S %p
+dateTimeFormat_%x = %m/%d/%Y
+dateTimeFormat_%X = %I:%M:%S %p
+
+shortTimeFormat = %I:%M %p
+shortDateTimeFormat = %x %I:%M %p
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 0
+
+# Localize “AM" and "PM" used in %p format for time
diff --git a/www/firefoxos/locales/date.zh-CN.properties b/www/firefoxos/locales/date.zh-CN.properties
new file mode 100644
index 0000000..a1488c1
--- /dev/null
+++ b/www/firefoxos/locales/date.zh-CN.properties
@@ -0,0 +1,226 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = 星期日
+weekday-1-long = 星期一
+weekday-2-long = 星期二
+weekday-3-long = 星期三
+weekday-4-long = 星期四
+weekday-5-long = 星期五
+weekday-6-long = 星期六
+
+weekday-0-short = 周日
+weekday-1-short = 周一
+weekday-2-short = 周二
+weekday-3-short = 周三
+weekday-4-short = 周四
+weekday-5-short = 周五
+weekday-6-short = 周六
+
+# Month names
+
+month-0-long  = 1 月
+month-1-long  = 2 月
+month-2-long  = 3 月
+month-3-long  = 4 月
+month-4-long  = 5 月
+month-5-long  = 6 月
+month-6-long  = 7 月
+month-7-long  = 8 月
+month-8-long  = 9 月
+month-9-long  = 10 月
+month-10-long = 11 月
+month-11-long = 12 月
+
+month-0-genitive  = 一月
+month-1-genitive  = 二月
+month-2-genitive  = 三月
+month-3-genitive  = 四月
+month-4-genitive  = 五月
+month-5-genitive  = 六月
+month-6-genitive  = 七月
+month-7-genitive  = 八月
+month-8-genitive  = 九月
+month-9-genitive  = 十月
+month-10-genitive = 十一月
+month-11-genitive = 十二月
+
+month-0-short  = 1 月
+month-1-short  = 2 月
+month-2-short  = 3 月
+month-3-short  = 4 月
+month-4-short  = 5 月
+month-5-short  = 6 月
+month-6-short  = 7 月
+month-7-short  = 8 月
+month-8-short  = 9 月
+month-9-short  = 10 月
+month-10-short = 11 月
+month-11-short = 12 月
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = 刚才
+minutes-ago-long[one]   = 1 分钟前
+minutes-ago-long[two]   = {{ value }} 分钟前
+minutes-ago-long[few]   = {{ value }} 分钟前
+minutes-ago-long[many]  = {{ value }} 分钟前
+minutes-ago-long[other] = {{ value }} 分钟前
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = 刚才
+hours-ago-long[one]   = 1 小时前
+hours-ago-long[two]   = {{ value }} 小时前
+hours-ago-long[few]   = {{ value }} 小时前
+hours-ago-long[many]  = {{ value }} 小时前
+hours-ago-long[other] = {{ value }} 小时前
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = 今天
+days-ago-long[one]   = 昨天
+days-ago-long[two]   = {{value}} 天前
+days-ago-long[few]   = {{value}} 天前
+days-ago-long[many]  = {{value}} 天前
+days-ago-long[other] = {{value}} 天前
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = 本周
+weeks-ago-long[one]   = 上周
+weeks-ago-long[two]   = {{value}} 周前
+weeks-ago-long[few]   = {{value}} 周前
+weeks-ago-long[many]  = {{value}} 周前
+weeks-ago-long[other] = {{value}} 周前
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = 本月
+months-ago-long[one]   = 上月
+months-ago-long[two]   = {{value}} 个月前
+months-ago-long[few]   = {{value}} 个月前
+months-ago-long[many]  = {{value}} 个月前
+months-ago-long[other] = {{value}} 个月前
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = 今年
+years-ago-long[one]   = 去年
+years-ago-long[two]   = {{value}} 年前
+years-ago-long[few]   = {{value}} 年前
+years-ago-long[many]  = {{value}} 年前
+years-ago-long[other] = {{value}} 年前
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = 现在
+minutes-until-long[one]   = 1 分钟内
+minutes-until-long[two]   = 剩{{value}}分钟
+minutes-until-long[few]   = 剩{{value}}分钟
+minutes-until-long[many]  = 剩{{value}}分钟
+minutes-until-long[other] = 剩{{value}}分钟
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = 现在
+hours-until-long[one]   = 1 小时内
+hours-until-long[two]   = 剩{{value}}小时
+hours-until-long[few]   = 剩{{value}}小时
+hours-until-long[many]  = 剩{{value}}小时
+hours-until-long[other] = 剩{{value}}小时
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = 今天
+days-until-long[one]   = 明天
+days-until-long[two]   = 剩{{value}}天
+days-until-long[few]   = 剩{{value}}天
+days-until-long[many]  = 剩{{value}}天
+days-until-long[other] = 剩{{value}}天
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = 本周
+weeks-until-long[one]   = 下周
+weeks-until-long[two]   = 剩{{value}}周
+weeks-until-long[few]   = 剩{{value}}周
+weeks-until-long[many]  = 剩{{value}}周
+weeks-until-long[other] = 剩{{value}}周
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = 本月
+months-until-long[one]   = 下月
+months-until-long[two]   = 剩{{value}}个月
+months-until-long[few]   = 剩{{value}}个月
+months-until-long[many]  = 剩{{value}}个月
+months-until-long[other] = 剩{{value}}个月
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = 今年
+years-until-long[one]   = 明年
+years-until-long[two]   = 剩{{value}}年
+years-until-long[few]   = 剩{{value}}年
+years-until-long[many]  = 剩{{value}}年
+years-until-long[other] = 剩{{value}}年
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = 刚才
+minutes-ago-short[other] = {{value}} 分钟前
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = 刚才
+hours-ago-short[other] = {{value}}小时前
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = 今天
+days-ago-short[other] = {{value}} 天前
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = 现在
+minutes-until-short[other] = 剩{{value}}分钟
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = 现在
+hours-until-short[other] = 剩{{value}}小时
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = 今天
+days-until-short[other] = 剩{{value}}天
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (日期不正确)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %Y 年 %b %e 日 %a %H:%M:%S
+dateTimeFormat_%x = %Y/%m/%d
+dateTimeFormat_%X = %H:%M:%S
+
+shortTimeFormat = %H:%M
+shortDateTimeFormat = %x %H:%M
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 0
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = 上午
+time_pm = 下午
diff --git a/www/firefoxos/locales/date.zh-TW.properties b/www/firefoxos/locales/date.zh-TW.properties
new file mode 100644
index 0000000..0774a58
--- /dev/null
+++ b/www/firefoxos/locales/date.zh-TW.properties
@@ -0,0 +1,227 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Day names
+
+weekday-0-long = 星期日
+weekday-1-long = 星期一
+weekday-2-long = 星期二
+weekday-3-long = 星期三
+weekday-4-long = 星期四
+weekday-5-long = 星期五
+weekday-6-long = 星期六
+
+weekday-0-short = 週日
+weekday-1-short = 週一
+weekday-2-short = 週二
+weekday-3-short = 週三
+weekday-4-short = 週四
+weekday-5-short = 週五
+weekday-6-short = 週六
+
+# Month names
+
+month-0-long  = 一月
+month-1-long  = 二月
+month-2-long  = 三月
+month-3-long  = 四月
+month-4-long  = 五月
+month-5-long  = 六月
+month-6-long  = 七月
+month-7-long  = 八月
+month-8-long  = 九月
+month-9-long  = 十月
+month-10-long = 十一月
+month-11-long = 十二月
+
+month-0-genitive  = 1 月
+month-1-genitive  = 2 月
+month-2-genitive  = 3 月
+month-3-genitive  = 4 月
+month-4-genitive  = 5 月
+month-5-genitive  = 6 月
+month-6-genitive  = 7 月
+month-7-genitive  = 8 月
+month-8-genitive  = 9 月
+month-9-genitive  = 10 月
+month-10-genitive = 11 月
+month-11-genitive = 12 月
+
+month-0-short  = 1 月
+month-1-short  = 2 月
+month-2-short  = 3 月
+month-3-short  = 4 月
+month-4-short  = 5 月
+month-5-short  = 6 月
+month-6-short  = 7 月
+month-7-short  = 8 月
+month-8-short  = 9 月
+month-9-short  = 10 月
+month-10-short = 11 月
+month-11-short = 12 月
+
+# Relative time ("pretty dates"), normal/long variant
+
+minutes-ago-long={[ plural(value) ]}
+minutes-ago-long[zero]  = 剛剛
+minutes-ago-long[one]   = 1 分鐘前
+minutes-ago-long[two]   = {{value}} 分鐘前
+minutes-ago-long[few]   = {{value}} 分鐘前
+minutes-ago-long[many]  = {{value}} 分鐘前
+minutes-ago-long[other] = {{value}} 分鐘前
+
+hours-ago-long={[ plural(value) ]}
+hours-ago-long[zero]  = 剛剛
+hours-ago-long[one]   = 1 小時前
+hours-ago-long[two]   = {{value}} 小時前
+hours-ago-long[few]   = {{value}} 小時前
+hours-ago-long[many]  = {{value}} 小時前
+hours-ago-long[other] = {{value}} 小時前
+
+days-ago-long={[ plural(value) ]}
+days-ago-long[zero]  = 今天
+days-ago-long[one]   = 昨天
+days-ago-long[two]   = {{value}} 天前
+days-ago-long[few]   = {{value}} 天前
+days-ago-long[many]  = {{value}} 天前
+days-ago-long[other] = {{value}} 天前
+
+weeks-ago-long={[ plural(value) ]}
+weeks-ago-long[zero]  = 本週
+weeks-ago-long[one]   = 上週
+weeks-ago-long[two]   = {{value}} 週前
+weeks-ago-long[few]   = {{value}} 週前
+weeks-ago-long[many]  = {{value}} 週前
+weeks-ago-long[other] = {{value}} 週前
+
+months-ago-long={[ plural(value) ]}
+months-ago-long[zero]  = 本月
+months-ago-long[one]   = 上月
+months-ago-long[two]   = {{value}} 月前
+months-ago-long[few]   = {{value}} 月前
+months-ago-long[many]  = {{value}} 月前
+months-ago-long[other] = {{value}} 月前
+
+years-ago-long={[ plural(value) ]}
+years-ago-long[zero]  = 今年
+years-ago-long[one]   = 去年
+years-ago-long[two]   = {{value}} 年前
+years-ago-long[few]   = {{value}} 年前
+years-ago-long[many]  = {{value}} 年前
+years-ago-long[other] = {{value}} 年前
+
+minutes-until-long={[ plural(value) ]}
+minutes-until-long[zero]  = 現在
+minutes-until-long[one]   = 1 分鐘內
+minutes-until-long[two]   = {{value}} 分鐘內
+minutes-until-long[few]   = {{value}} 分鐘內
+minutes-until-long[many]  = {{value}} 分鐘內
+minutes-until-long[other] = {{value}} 分鐘內
+
+hours-until-long={[ plural(value) ]}
+hours-until-long[zero]  = 現在
+hours-until-long[one]   = 1 小時內
+hours-until-long[two]   = {{value}} 小時前
+hours-until-long[few]   = {{value}} 小時前
+hours-until-long[many]  = {{value}} 小時前
+hours-until-long[other] = {{value}} 小時前
+
+days-until-long={[ plural(value) ]}
+days-until-long[zero]  = 今天
+days-until-long[one]   = 明天
+days-until-long[two]   = {{value}} 天內
+days-until-long[few]   = {{value}} 天內
+days-until-long[many]  = {{value}} 天內
+days-until-long[other] = {{value}} 天內
+
+weeks-until-long={[ plural(value) ]}
+weeks-until-long[zero]  = 本週
+weeks-until-long[one]   = 下週
+weeks-until-long[two]   = {{value}} 週內
+weeks-until-long[few]   = {{value}} 週內
+weeks-until-long[many]  = {{value}} 週內
+weeks-until-long[other] = {{value}} 週內
+
+months-until-long={[ plural(value) ]}
+months-until-long[zero]  = 本月
+months-until-long[one]   = 下月
+months-until-long[two]   = {{value}} 月內
+months-until-long[few]   = {{value}} 月內
+months-until-long[many]  = {{value}} 月內
+months-until-long[other] = {{value}} 月內
+
+years-until-long={[ plural(value) ]}
+years-until-long[zero]  = 今年
+years-until-long[one]   = 明年
+years-until-long[two]   = {{value}} 年內
+years-until-long[few]   = {{value}} 年內
+years-until-long[many]  = {{value}} 年內
+years-until-long[other] = {{value}} 年內
+
+
+# Relative time ("pretty dates"), short variant
+# LOCALIZATION NOTE: the time unit should be as short as possible,
+# and the whole string should not exceed a length of ~10 latin characters.
+# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
+# locales, but we use “m” instead for the English locale to prevent a possible
+# confusion (35’ ago ≠ 35 feet ago).
+
+minutes-ago-short={[ plural(value) ]}
+minutes-ago-short[zero]  = 剛剛
+minutes-ago-short[other] = {{value}} 分前
+
+hours-ago-short={[ plural(value) ]}
+hours-ago-short[zero]  = 剛剛
+hours-ago-short[other] = {{value}} 時前
+
+days-ago-short={[ plural(value) ]}
+days-ago-short[zero]  = 今天
+days-ago-short[other] = {{value}} 天前
+
+minutes-until-short={[ plural(value) ]}
+minutes-until-short[zero]  = 現在
+minutes-until-short[other] = {{value}} 分內
+
+hours-until-short={[ plural(value) ]}
+hours-until-short[zero]  = 現在
+hours-until-short[other] = {{value}} 時內
+
+days-until-short={[ plural(value) ]}
+days-until-short[zero]  = 今天
+days-until-short[other] = {{value}} 天內
+
+# Relative time ("pretty dates"), unexpected error
+
+incorrectDate = (日期不正確)
+
+# Date/Time format
+# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+
+dateTimeFormat_%c = %Y年%b%d日 %a %p %I:%M:%S
+dateTimeFormat_%x = %Y/%m/%d
+dateTimeFormat_%X = %p %I:%M:%S
+
+shortTimeFormat = %p %I:%M
+shortDateTimeFormat = %x %p %I:%M
+
+# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
+weekStartsOnMonday = 1
+
+# Localize “AM" and "PM" used in %p format for time
+time_am = 上午
+time_pm = 下午
+