summaryrefslogtreecommitdiffstats
path: root/addon-sdk/source/lib/sdk/l10n.js
diff options
context:
space:
mode:
Diffstat (limited to 'addon-sdk/source/lib/sdk/l10n.js')
-rw-r--r--addon-sdk/source/lib/sdk/l10n.js91
1 files changed, 0 insertions, 91 deletions
diff --git a/addon-sdk/source/lib/sdk/l10n.js b/addon-sdk/source/lib/sdk/l10n.js
deleted file mode 100644
index db5a9d7b6..000000000
--- a/addon-sdk/source/lib/sdk/l10n.js
+++ /dev/null
@@ -1,91 +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";
-
-module.metadata = {
- "stability": "stable"
-};
-
-const json = require("./l10n/json/core");
-const { get: getKey } = require("./l10n/core");
-const properties = require("./l10n/properties/core");
-const { getRulesForLocale } = require("./l10n/plural-rules");
-
-// Retrieve the plural mapping function
-var pluralMappingFunction = getRulesForLocale(json.language()) ||
- getRulesForLocale("en");
-
-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");
- let n = arguments[1];
-
- // Get translation from big hashmap or default to hard coded string:
- let localized = getKey(k, n) || 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 = Array.slice(arguments);
- let placeholders = [null, ...args.slice(typeof(n) === "number" ? 2 : 1)];
-
- 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];
-
- // First handle simple universal forms that may not be mandatory
- // for each language, (i.e. not different than 'other' form,
- // but still usefull for better phrasing)
- // For example 0 in english is the same form than 'other'
- // but we accept 'zero' form if specified in localization file
- if (n === 0 && "zero" in localized)
- localized = localized["zero"];
- else if (n === 1 && "one" in localized)
- localized = localized["one"];
- else if (n === 2 && "two" in localized)
- localized = localized["two"];
- else {
- let pluralForm = pluralMappingFunction(n);
- if (pluralForm in localized)
- localized = localized[pluralForm];
- else // Fallback in case of error: missing plural form
- localized = localized["other"];
- }
-
- // 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;
- if (placeholders.length > 1) {
- args = placeholders;
- }
-
- localized = localized.replace(/%(\d*)[sd]/g, (v, n) => {
- let rv = args[n != "" ? n : offset];
- offset++;
- return rv;
- });
-
- return localized;
-}