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

Unified Diff: i18n.js

Issue 8560083: adblockplusopera: Port UI code from Chrome (Closed)
Patch Set: Created Oct. 18, 2012, 1:26 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
« background.js ('K') | « help/help.js ('k') | icons/abp-128.png » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: i18n.js
===================================================================
new file mode 100644
--- /dev/null
+++ b/i18n.js
@@ -0,0 +1,78 @@
+/*
+ * This Source Code is subject to the terms of the Mozilla Public License
+ * version 2.0 (the "License"). You can obtain a copy of the License at
+ * http://mozilla.org/MPL/2.0/.
+ */
+
+var 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)
+ {
+ var messages = opera.extension.bgProcess.i18nMessages;
+ var message = messages[key];
+ if (!message)
+ return "Missing translation: " + key;
+ return getText(message, args);
+ }
+ };
+})();
+
+// Loads and 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.
+function loadI18nStrings() {
+ var nodes = document.querySelectorAll("[class^='i18n_']");
+ for(var i = 0; i < nodes.length; i++) {
+ var arguments = JSON.parse("[" + nodes[i].textContent + "]");
+ var className = nodes[i].className;
+ var stringName = className.split(/\s/)[0].substring(5);
+ var prop = "innerHTML" in nodes[i] ? "innerHTML" : "textContent";
+ if(arguments.length > 0)
+ nodes[i][prop] = i18n.getMessage(stringName, arguments);
+ else
+ nodes[i][prop] = i18n.getMessage(stringName);
+ }
+}
+
+// Provides a more readable string of the current date and time
+function i18n_timeDateStrings(when) {
+ var d = new Date(when);
+ var timeString = d.toLocaleTimeString();
+
+ var now = new Date();
+ if (d.toDateString() == now.toDateString())
+ return [timeString];
+ else
+ return [timeString, d.toLocaleDateString()];
+}
+
+// Fill in the strings as soon as possible
+window.addEventListener("DOMContentLoaded", loadI18nStrings, true);
« background.js ('K') | « help/help.js ('k') | icons/abp-128.png » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld