[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [snowflake/master] Hook up localized messages.json to website
commit f6517f60ce82cfbcdd7f2b894638ded4accfc129
Author: Cecylia Bocovich <cohosh@xxxxxxxxxxxxxx>
Date: Tue Oct 8 18:00:43 2019 -0400
Hook up localized messages.json to website
Right now we use the navigator language to determine localization and
replace the website contents with translated strings.
---
proxy/make.js | 2 ++
proxy/static/index.html | 5 +++--
proxy/static/index.js | 60 +++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 65 insertions(+), 2 deletions(-)
diff --git a/proxy/make.js b/proxy/make.js
index bbaf0ca..defcf1f 100755
--- a/proxy/make.js
+++ b/proxy/make.js
@@ -94,6 +94,8 @@ task('build', 'build the snowflake proxy', function() {
execSync(`cp -r ${STATIC}/ ${outDir}/`);
copyTranslations(outDir);
concatJS(outDir, 'badge', 'embed.js', availableLangs());
+ writeFileSync(`${outDir}/index.js`, availableLangs(), 'utf8');
+ execSync(`cat ${STATIC}/index.js >> ${outDir}/index.js`);
console.log('Snowflake prepared.');
});
diff --git a/proxy/static/index.html b/proxy/static/index.html
index ae17d42..3aa254b 100644
--- a/proxy/static/index.html
+++ b/proxy/static/index.html
@@ -1,5 +1,5 @@
<!doctype html>
-<html lang="en">
+<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
@@ -18,7 +18,7 @@
<p class="diagram"><img src="https://trac.torproject.org/projects/tor/raw-attachment/wiki/doc/Snowflake/snowflake-schematic.png" alt="Diagram" /></p>
- <p data-mdgid="__MSG_websiteIntro__">Snowflake is a system to defeat internet censorship. People who are
+ <p data-msgid="__MSG_websiteIntro__">Snowflake is a system to defeat internet censorship. People who are
censored can use Snowflake to access the internet. Their connection goes
through Snowflake proxies, which are run by volunteers. For more detailed
information about how Snowflake works see our
@@ -96,5 +96,6 @@
</section>
</section>
+ <script src="index.js"></script>
</body>
</html>
diff --git a/proxy/static/index.js b/proxy/static/index.js
new file mode 100644
index 0000000..599b533
--- /dev/null
+++ b/proxy/static/index.js
@@ -0,0 +1,60 @@
+class Messages {
+ constructor(json) {
+ this.json = json;
+ }
+ getMessage(m, ...rest) {
+ if (this.json.hasOwnProperty(m)) {
+ let message = this.json[m].message;
+ return message.replace(/\$(\d+)/g, (...args) => {
+ return rest[Number(args[1]) - 1];
+ });
+ }
+ }
+}
+
+
+defaultLang = "en_US";
+
+var getLang = function() {
+ let lang = navigator.language || defaultLang;
+ lang = lang.replace(/-/g, '_');
+ if (availableLangs.has(lang)) {
+ return lang;
+ }
+ lang = lang.split('_')[0];
+ if (availableLangs.has(lang)) {
+ return lang;
+ }
+ return defaultLang;
+}
+
+var fill = function(n, func) {
+ switch(n.nodeType) {
+ case 1: // Node.ELEMENT_NODE
+ const m = /^__MSG_([^_]*)__$/.exec(n.dataset.msgid);
+ if (m) {
+ val = func(m[1]);
+ if (val != undefined) {
+ n.innerHTML = val
+ }
+ }
+ n.childNodes.forEach(c => fill(c, func));
+ break;
+ }
+}
+
+console.log("Fetching", `./_locales/${getLang()}/messages.json`);
+
+fetch(`./_locales/${getLang()}/messages.json`)
+ .then((res) => {
+ if (!res.ok) { return; }
+ return res.json();
+ })
+ .then((json) => {
+ messages = new Messages(json);
+ console.log("Filling document body");
+ fill(document.body, (m) => {
+ console.log("Filling ", m);
+ return messages.getMessage(m);
+ });
+ });
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits