aboutsummaryrefslogtreecommitdiff
path: root/tools/addon-sdk-1.5/packages/addon-kit/lib/l10n.js
diff options
context:
space:
mode:
Diffstat (limited to 'tools/addon-sdk-1.5/packages/addon-kit/lib/l10n.js')
-rw-r--r--tools/addon-sdk-1.5/packages/addon-kit/lib/l10n.js126
1 files changed, 0 insertions, 126 deletions
diff --git a/tools/addon-sdk-1.5/packages/addon-kit/lib/l10n.js b/tools/addon-sdk-1.5/packages/addon-kit/lib/l10n.js
deleted file mode 100644
index 1bd7e57..0000000
--- a/tools/addon-sdk-1.5/packages/addon-kit/lib/l10n.js
+++ /dev/null
@@ -1,126 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-"use strict";
-
-let prefs = require("preferences-service");
-let { Cc, Ci } = require("chrome");
-
-let globalHash = {};
-
-exports.get = function get(k) {
-
- // For now, we only accept a "string" as first argument
- // TODO: handle plural forms in gettext pattern
- if (typeof k !== "string")
- throw new Error("First argument of localization method should be a string");
-
- // Get translation from big hashmap or default to hard coded string:
- let localized = globalHash[k] || k;
-
- // # Simplest usecase:
- // // String hard coded in source code:
- // _("Hello world")
- // // Identifier of a key stored in properties file
- // _("helloString")
- if (arguments.length <= 1)
- return localized;
-
- let args = arguments;
-
- if (typeof localized == "object" && "other" in localized) {
- // # Plural form:
- // // Strings hard coded in source code:
- // _(["One download", "%d downloads"], 10);
- // // Identifier of a key stored in properties file
- // _("downloadNumber", 0);
- let n = arguments[1];
- let pluralForm = "other";
- // TODO: Make this rule specific to each language
- if (n <= 1)
- pluralForm = "one";
- localized = localized[pluralForm];
- // Simulate a string with one placeholder:
- args = [null, n];
- }
-
- // # String with placeholders:
- // // Strings hard coded in source code:
- // _("Hello %s", username)
- // // Identifier of a key stored in properties file
- // _("helloString", username)
- // * We supports `%1s`, `%2s`, ... pattern in order to change arguments order
- // in translation.
- // * In case of plural form, we has `%d` instead of `%s`.
- let offset = 1;
- localized = localized.replace(/%(\d*)(s|d)/g, function (v, n) {
- let rv = args[n != "" ? n : offset];
- offset++;
- return rv;
- });
-
- return localized;
-}
-
-function readURI(uri) {
- let request = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"].
- createInstance(Ci.nsIXMLHttpRequest);
- request.open('GET', uri, false);
- request.overrideMimeType('text/plain');
- request.send();
- return request.responseText;
-}
-
-// Returns URI of the best locales file to use from the XPI
-// Reproduce platform algorithm, see `LanguagesMatch` and
-// `nsChromeRegistryChrome::nsProviderArray::GetProvider` functions:
-// http://mxr.mozilla.org/mozilla-central/source/chrome/src/nsChromeRegistryChrome.cpp#93
-// TODO: Implement a better matching algorithm using "intl.accept_languages"
-// and following: http://tools.ietf.org/html/rfc4647#page-14
-function searchAddonLocaleFile(preferred) {
- // Get URI for the addon root folder:
- let rootURI = require("@packaging").rootURI;
-
- // Read localization manifest file that contains list of available languages
- let localesManifest = JSON.parse(readURI(rootURI + "locales.json"));
- let locales = localesManifest.locales;
-
- let localeFile = null;
- // Select exact matching first
- if (locales.indexOf(preferred) != -1) {
- localeFile = preferred;
- }
- // Then ignore yy in "xx-yy" pattern.
- // Ex: accept "fr-FR", if `preferred` is "fr"
- else {
- let prefix = preferred.replace(/-.*$/, "");
- for each(let filename in locales) {
- if (filename.indexOf(prefix + "-") == 0) {
- localeFile = filename;
- break;
- }
- }
- }
- if (!localeFile)
- return null;
-
- return rootURI + "locale/" + localeFile + ".json";
-}
-
-function init() {
- // First, search for a locale file:
- let preferred = prefs.get("general.useragent.locale", "en-US");
- let localeURI = searchAddonLocaleFile(preferred);
- if (!localeURI)
- return;
-
- let manifestJSON = readURI(localeURI);
- let manifest = JSON.parse(manifestJSON);
-
- // Locale files only contains one big JSON object that is used as
- // an hashtable of: "key to translate" => "translated key"
- // TODO: We are likely to change this in order to be able to overload
- // a specific key translation. For a specific package, module or line?
- globalHash = manifest;
-}
-init();