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. 12, 2012, 1:11 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
Index: i18n.js
===================================================================
new file mode 100644
--- /dev/null
+++ b/i18n.js
@@ -0,0 +1,96 @@
+/*
+ * 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;
Wladimir Palant 2012/10/12 15:04:02 "Uncaught exception: message is undefined". You mi
Felix Dahlke 2012/10/16 14:20:01 Done.
+
+ if (!args)
Wladimir Palant 2012/10/12 15:04:02 if (!args || !message.placeholders) I think, other
Felix Dahlke 2012/10/16 14:20:01 You're right, done.
+ return text;
+
+ var placeholders = message.placeholders;
+ for (var key in placeholders)
+ {
+ var content = placeholders[key].content;
+ if (!content)
+ continue;
+
+ var index = parseInt(content.slice(1));
Wladimir Palant 2012/10/12 15:04:02 parseInt(..., 10) please.
Felix Dahlke 2012/10/16 14:20:01 Not again! :) Done.
+ 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 = getText(messages[key], args);
+ if (!message)
+ return "Missing translation: " + key;
Wladimir Palant 2012/10/12 15:04:02 Actually, missing translations are currently quite
Felix Dahlke 2012/10/16 14:20:01 Done, see my changes and comments to background.js
+ return message;
+ }
+ };
+})();
+
+// 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);
+ }
+}
+
+function i18n_time(h, m) {
+ var locale = i18n.getMessage("@@ui_locale");
Wladimir Palant 2012/10/12 15:04:02 @@ui_locale is a special string that isn't part of
Felix Dahlke 2012/10/16 14:20:01 Done.
+ if(m < 10)
+ m = "0" + m;
+ if(locale == "fr") {
+ return h + "h" + m;
+ } else {
+ var ampm = "a.m.";
+ if(h >= 12) {
+ h -= 12;
+ ampm = "p.m.";
+ }
+ if(h == 0)
+ h = 12;
+ return(h + ":" + m + " " + ampm);
+ }
+}
+
+// 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);

Powered by Google App Engine
This is Rietveld