mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-20 07:17:32 +09:00
Move Add-on SDK source to toolkit/jetpack
This commit is contained in:
parent
0a03067ee3
commit
23b67db438
993 changed files with 484 additions and 100663 deletions
|
|
@ -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;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue