Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: i18n.js

Issue 6432313504169984: Issue 1663 - Various Firefox-related changes of the first-run page (Closed)
Patch Set: Addressed comments Created Jan. 7, 2015, 4:31 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « firstRun.js ('k') | messageResponder.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: i18n.js
===================================================================
--- a/i18n.js
+++ b/i18n.js
@@ -10,95 +10,43 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>.
*/
-var i18n;
+// This variable should no longer be necessary once options.js in Chrome
+// accesses ext.i18n directly.
+var i18n = ext.i18n;
-if (typeof ext != "undefined")
+if (ext.i18n.getMessage("@@ui_locale"))
{
- i18n = ext.i18n;
-
document.documentElement.lang = ext.i18n.getMessage("@@ui_locale").replace(/_/g, "-");
document.documentElement.dir = ext.i18n.getMessage("@@bidi_dir");
}
else
{
- // Using Firefox' approach on i18n instead
-
- // Randomize URI to work around bug 719376
- var pageName = location.pathname.replace(/.*\//, '').replace(/\..*?$/, '');
- var stringBundle = Services.strings.createBundle("chrome://adblockplus/locale/" + pageName +
- ".properties?" + Math.random());
-
- function getI18nMessage(key)
+ // Getting UI locale cannot be done synchronously on Firefox, requires
+ // messaging the background page.
+ ext.backgroundPage.sendMessage({
+ type: "app.get",
+ what: "localeInfo"
+ }, function(localeInfo)
{
- return {
- "message": stringBundle.GetStringFromName(key)
- };
- }
-
- i18n = (function()
- {
- function getText(message, args)
- {
- var text = message.message;
- var placeholders = message.placeholders;
-
- if (!args || !placeholders)
- return text;
-
- for (var key in placeholders)
- {
- var content = placeholders[key].content;
- if (!content)
- continue;
-
- var index = parseInt(content.slice(1), 10);
- if (isNaN(index))
- continue;
-
- var replacement = args[index - 1];
- if (typeof replacement === "undefined")
- continue;
-
- text = text.split("$" + key + "$").join(replacement);
- }
- return text;
- }
-
- return {
- getMessage: function(key, args)
- {
- try{
- var message = getI18nMessage(key);
- return getText(message, args);
- }
- catch(e)
- {
- Cu.reportError(e);
- return "Missing translation: " + key;
- }
- }
- };
- })();
-
- var Utils = require("utils").Utils;
- document.documentElement.lang = Utils.appLocale;
- document.documentElement.dir = Utils.chromeRegistry.isLocaleRTL("adblockplus") ? "rtl" : "ltr";
+ document.documentElement.lang = localeInfo.locale;
+ document.documentElement.dir = localeInfo.isRTL ? "rtl" : "ltr";
+ });
}
// Inserts i18n strings into matching elements. Any inner HTML already in the element is
// parsed as JSON and used as parameters to substitute into placeholders in the i18n
// message.
-i18n.setElementText = function(element, stringName, arguments)
+ext.i18n.setElementText = function(element, stringName, arguments)
{
function processString(str, element)
{
var match = /^(.*?)<(a|strong)>(.*?)<\/\2>(.*)$/.exec(str);
if (match)
{
processString(match[1], element);
@@ -109,17 +57,17 @@ i18n.setElementText = function(element,
processString(match[4], element);
}
else
element.appendChild(document.createTextNode(str));
}
while (element.lastChild)
element.removeChild(element.lastChild);
- processString(i18n.getMessage(stringName, arguments), element);
+ processString(ext.i18n.getMessage(stringName, arguments), element);
}
// Loads i18n strings
function loadI18nStrings()
{
var nodes = document.querySelectorAll("[class^='i18n_']");
for(var i = 0; i < nodes.length; i++)
{
@@ -128,17 +76,17 @@ function loadI18nStrings()
if (arguments.length == 0)
arguments = null;
var className = node.className;
if (className instanceof SVGAnimatedString)
className = className.animVal;
var stringName = className.split(/\s/)[0].substring(5);
- i18n.setElementText(node, stringName, arguments);
+ ext.i18n.setElementText(node, stringName, arguments);
}
}
// Provides a more readable string of the current date and time
function i18n_timeDateStrings(when)
{
var d = new Date(when);
var timeString = d.toLocaleTimeString();
« no previous file with comments | « firstRun.js ('k') | messageResponder.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld