UNPKG

3.15 kBJavaScriptView Raw
1var _ = require('lodash');
2var async = require('async');
3var i18n = require('i18next');
4var Uri = require('jsUri');
5var log = require('./lib/log');
6var app = require('./app');
7var settings = require('./config/settings');
8var sha1 = require('sha1');
9
10var query_params = (function(qs) {
11 qs = String(qs || '');
12 if (qs[0] !== '?') {
13 qs = '?' + qs;
14 }
15 var uri = new Uri(qs);
16 var obj = _.reduce(uri.queryPairs, function(obj, item) {
17 var key = item[0], value = item[1];
18 obj[key] = decodeURIComponent(value);
19 return obj;
20 }, {});
21
22 return obj;
23}(window.root.location.search)) || {};
24
25// https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie
26function cookie_get(key) {
27 if ( ! key) {
28 return null;
29 }
30 return decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*" + encodeURIComponent(key).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=\\s*([^;]*).*$)|^.*$"), "$1")) || null;
31}
32
33function registerI18nHelpers(i18n) {
34 i18n = i18n || {};
35 i18n._ = function() {
36 var args = Array.prototype.slice.call(arguments);
37 if (_.size(args) === 0 || _.isEmpty(args[0])) {
38 i18n.t.apply(i18n, args);
39 return;
40 }
41
42 var value = args[0];
43 var options = args[1] || {};
44 var key = sha1(value);
45 args[0] = value;
46
47 options.defaultValue = value;
48
49 return i18n.t(key, options);
50 };
51}
52
53async.series([
54 // i18next
55 function i18next_init(next) {
56 var lng;
57
58 registerI18nHelpers(i18n);
59
60 // 1. query string: lang=en
61 lng = query_params[settings.i18next.detectLngQS] || '';
62
63 // 2. cookie
64 lng = lng || (function(lng) {
65 if (settings.i18next.useCookie) {
66 return cookie_get(settings.i18next.cookieName);
67 }
68 return lng;
69 }(lng));
70
71 // 3. Using 'lang' attribute on the html element
72 lng = lng || $('html').attr('lang');
73
74 // Lowercase countryCode in requests
75 lng = (lng || '').toLowerCase();
76
77 if (settings.supportedLngs.indexOf(lng) >= 0) {
78 settings.i18next.lng = lng;
79 } else {
80 settings.i18next.lng = settings.i18next.fallbackLng || settings.supportedLngs[0];
81 }
82
83 i18n.init(settings.i18next, function(t) {
84 next();
85 });
86 },
87 // logger
88 function log_init(next) {
89 var log_level = query_params['log_level'] || settings.log.level;
90 var log_logger = query_params['log_logger'] || settings.log.logger;
91 var log_prefix = query_params['log_prefix'] || settings.log.prefix;
92
93 log.setLevel(log_level);
94 log.setLogger(log_logger);
95 log.setPrefix(log_prefix);
96
97 var msg = [
98 'version=' + settings.version,
99 'webroot=' + settings.webroot,
100 'cdn=' + settings.cdn
101 ];
102 log.debug(msg.join(','));
103
104 next();
105 }
106], function(err, results) {
107
108 var loading = document.getElementById('loading');
109 if (loading) {
110 loading.style.display = 'none';
111 }
112
113 app.run();
114});