123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- "use strict";
- (function (window) {
- let gL10nData = null;
- let gLanguage = "";
- let gExternalLocalizerServices = null;
- let gReadyState = "loading";
-
- function getL10nData(key) {
- gL10nData ||= gExternalLocalizerServices.getStrings();
- const data = gL10nData?.[key];
- if (!data) {
- console.warn("[l10n] #" + key + " missing for [" + gLanguage + "]");
- }
- return data;
- }
-
- function substArguments(text, args) {
- if (!args) {
- return text;
- }
- return text.replace(/\{\{\s*(\w+)\s*\}\}/g, function (all, name) {
- return name in args ? args[name] : "{{" + name + "}}";
- });
- }
-
- function translateString(key, args, fallback) {
- var i = key.lastIndexOf(".");
- var name, property;
- if (i >= 0) {
- name = key.substring(0, i);
- property = key.substring(i + 1);
- } else {
- name = key;
- property = "textContent";
- }
- var data = getL10nData(name);
- var value = (data && data[property]) || fallback;
- if (!value) {
- return "{{" + key + "}}";
- }
- return substArguments(value, args);
- }
-
- function translateElement(element) {
- if (!element || !element.dataset) {
- return;
- }
-
- var key = element.dataset.l10nId;
- var data = getL10nData(key);
- if (!data) {
- return;
- }
-
-
- var args;
- if (element.dataset.l10nArgs) {
- try {
- args = JSON.parse(element.dataset.l10nArgs);
- } catch (e) {
- console.warn("[l10n] could not parse arguments for #" + key + "");
- }
- }
-
-
- for (var k in data) {
- element[k] = substArguments(data[k], args);
- }
- }
-
- function translateFragment(element) {
- element = element || document.querySelector("html");
-
- var children = element.querySelectorAll("*[data-l10n-id]");
- var elementCount = children.length;
- for (var i = 0; i < elementCount; i++) {
- translateElement(children[i]);
- }
-
- if (element.dataset.l10nId) {
- translateElement(element);
- }
- }
-
- document.mozL10n = {
-
- get: translateString,
-
- getLanguage() {
- return gLanguage;
- },
-
- getDirection() {
-
-
- var rtlList = ["ar", "he", "fa", "ps", "ur"];
-
- var shortCode = gLanguage.split("-")[0];
- return rtlList.includes(shortCode) ? "rtl" : "ltr";
- },
- getReadyState() {
- return gReadyState;
- },
- setExternalLocalizerServices(externalLocalizerServices) {
- gExternalLocalizerServices = externalLocalizerServices;
- gLanguage = gExternalLocalizerServices.getLocale();
- gReadyState = "complete";
- },
-
- translate: translateFragment,
- };
- })(this);
|