mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-17 03:01:08 +01:00
init
This commit is contained in:
2
public/language/TODO
Normal file
2
public/language/TODO
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
For now, language packs will be stored here. Eventually, will be moved to server side to allow for npm installability.
|
||||||
|
When that happens, server code will generate compressed JSON language files in this folder.
|
||||||
3
public/language/en/global.json
Normal file
3
public/language/en/global.json
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"home": "Home"
|
||||||
|
}
|
||||||
8
public/language/en/login.json
Normal file
8
public/language/en/login.json
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"login": "Login",
|
||||||
|
"username": "Username",
|
||||||
|
"password": "Password",
|
||||||
|
"remember_me": "Remember Me?",
|
||||||
|
"forgot_password": "Forgot Password?",
|
||||||
|
"alternative_logins": "Alternative Logins"
|
||||||
|
}
|
||||||
12
public/src/language.js
Normal file
12
public/src/language.js
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
(function (module) {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
})('undefined' === typeof module ? {
|
||||||
|
module: {
|
||||||
|
exports: {}
|
||||||
|
}
|
||||||
|
} : module);
|
||||||
@@ -180,7 +180,10 @@
|
|||||||
else
|
else
|
||||||
template_data['relative_path'] = RELATIVE_PATH;
|
template_data['relative_path'] = RELATIVE_PATH;
|
||||||
|
|
||||||
document.getElementById('content').innerHTML = templates[tpl_url].parse(template_data);
|
|
||||||
|
translator.translate(templates[tpl_url].parse(template_data), function (translatedTemplate) {
|
||||||
|
document.getElementById('content').innerHTML = translatedTemplate;
|
||||||
|
});
|
||||||
|
|
||||||
jQuery('#content [template-variable]').each(function (index, element) {
|
jQuery('#content [template-variable]').each(function (index, element) {
|
||||||
var value = null;
|
var value = null;
|
||||||
|
|||||||
75
public/src/translator.js
Normal file
75
public/src/translator.js
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
(function (module) {
|
||||||
|
"use strict";
|
||||||
|
/*global RELATIVE_PATH*/
|
||||||
|
|
||||||
|
var translator = {},
|
||||||
|
loaded = {};
|
||||||
|
|
||||||
|
module.exports = translator;
|
||||||
|
|
||||||
|
|
||||||
|
translator.load = function (file, callback) {
|
||||||
|
if (loaded[file]) {
|
||||||
|
callback(loaded[file]);
|
||||||
|
} else {
|
||||||
|
var timestamp = new Date().getTime(); //debug
|
||||||
|
|
||||||
|
jQuery.getJSON(RELATIVE_PATH + '/language/en/' + file + '.json?v=' + timestamp, function (language) {
|
||||||
|
loaded[file] = language;
|
||||||
|
callback(language);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
translator.translate = function (data, callback) {
|
||||||
|
var keys = data.match(/\[\[.*?\]\]/g),
|
||||||
|
loading = 0;
|
||||||
|
|
||||||
|
|
||||||
|
for (var key in keys) {
|
||||||
|
if (keys.hasOwnProperty(key)) {
|
||||||
|
var parsedKey = keys[key].replace('[[', '').replace(']]', '').split(':'),
|
||||||
|
languageFile = parsedKey[0];
|
||||||
|
|
||||||
|
parsedKey = parsedKey[1];
|
||||||
|
|
||||||
|
if (loaded[languageFile]) {
|
||||||
|
data = data.replace(keys[key], loaded[file][parsedKey]);
|
||||||
|
} else {
|
||||||
|
loading++;
|
||||||
|
|
||||||
|
(function (languageKey, parsedKey) {
|
||||||
|
translator.load(languageFile, function (languageData) {
|
||||||
|
data = data.replace(languageKey, languageData[parsedKey]);
|
||||||
|
loading--;
|
||||||
|
checkComplete();
|
||||||
|
});
|
||||||
|
}(keys[key], parsedKey));
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
checkComplete();
|
||||||
|
}
|
||||||
|
|
||||||
|
function checkComplete() {
|
||||||
|
|
||||||
|
if (loading === 0) {
|
||||||
|
callback(data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
if ('undefined' !== typeof window) {
|
||||||
|
window.translator = module.exports;
|
||||||
|
}
|
||||||
|
|
||||||
|
})('undefined' === typeof module ? {
|
||||||
|
module: {
|
||||||
|
exports: {}
|
||||||
|
}
|
||||||
|
} : module);
|
||||||
@@ -24,6 +24,7 @@
|
|||||||
</script>
|
</script>
|
||||||
<script src="{relative_path}/src/templates.js"></script>
|
<script src="{relative_path}/src/templates.js"></script>
|
||||||
<script src="{relative_path}/src/ajaxify.js"></script>
|
<script src="{relative_path}/src/ajaxify.js"></script>
|
||||||
|
<script src="{relative_path}/src/translator.js"></script>
|
||||||
<script src="{relative_path}/src/jquery.form.js"></script>
|
<script src="{relative_path}/src/jquery.form.js"></script>
|
||||||
<script src="{relative_path}/src/utils.js"></script>
|
<script src="{relative_path}/src/utils.js"></script>
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<ol class="breadcrumb">
|
<ol class="breadcrumb">
|
||||||
<li itemscope="itemscope" itemtype="http://data-vocabulary.org/Breadcrumb">
|
<li itemscope="itemscope" itemtype="http://data-vocabulary.org/Breadcrumb">
|
||||||
<a href="/" itemprop="url"><span itemprop="title">Home</span></a>
|
<a href="/" itemprop="url"><span itemprop="title">[[global:home]]</span></a>
|
||||||
</li>
|
</li>
|
||||||
<li class="active" itemscope="itemscope" itemtype="http://data-vocabulary.org/Breadcrumb">
|
<li class="active" itemscope="itemscope" itemtype="http://data-vocabulary.org/Breadcrumb">
|
||||||
<span itemprop="title">Login</span>
|
<span itemprop="title">[[login:login]]</span>
|
||||||
</li>
|
</li>
|
||||||
</ol>
|
</ol>
|
||||||
|
|
||||||
@@ -13,18 +13,18 @@
|
|||||||
<div class="well well-lg">
|
<div class="well well-lg">
|
||||||
<div class="alert alert-danger" id="login-error-notify" style="display:none">
|
<div class="alert alert-danger" id="login-error-notify" style="display:none">
|
||||||
<button type="button" class="close" data-dismiss="alert">×</button>
|
<button type="button" class="close" data-dismiss="alert">×</button>
|
||||||
<strong>Failed Login Attempt</strong> <p></p>
|
<strong>[[login:failed_login_attempt]]</strong> <p></p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<form class="form-horizontal" role="form">
|
<form class="form-horizontal" role="form">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="username" class="col-lg-2 control-label">Username</label>
|
<label for="username" class="col-lg-2 control-label">[[login:username]]</label>
|
||||||
<div class="col-lg-10">
|
<div class="col-lg-10">
|
||||||
<input class="form-control" type="text" placeholder="Enter Username" name="username" id="username" />
|
<input class="form-control" type="text" placeholder="Enter Username" name="username" id="username" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="password" class="col-lg-2 control-label">Password</label>
|
<label for="password" class="col-lg-2 control-label">[[login:password]]</label>
|
||||||
<div class="col-lg-10">
|
<div class="col-lg-10">
|
||||||
<input class="form-control" type="password" placeholder="Enter Password" name="password" id="password" />
|
<input class="form-control" type="password" placeholder="Enter Password" name="password" id="password" />
|
||||||
</div>
|
</div>
|
||||||
@@ -33,14 +33,14 @@
|
|||||||
<div class="col-lg-offset-2 col-lg-10">
|
<div class="col-lg-offset-2 col-lg-10">
|
||||||
<div class="checkbox">
|
<div class="checkbox">
|
||||||
<label>
|
<label>
|
||||||
<input type="checkbox"> Remember me
|
<input type="checkbox"> [[login:remember_me]]
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<div class="col-lg-offset-2 col-lg-10">
|
<div class="col-lg-offset-2 col-lg-10">
|
||||||
<button class="btn btn-primary" id="login" type="submit">Login</button> <a href="/reset">Forgot Password?</a>
|
<button class="btn btn-primary" id="login" type="submit">[[login:login]]</button> <a href="/reset">[[login:forgot_password]]</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<input type="hidden" name="_csrf" value="{token}" id="csrf-token" />
|
<input type="hidden" name="_csrf" value="{token}" id="csrf-token" />
|
||||||
@@ -51,7 +51,7 @@
|
|||||||
|
|
||||||
<div class="col-md-6 {alternate_logins:display}">
|
<div class="col-md-6 {alternate_logins:display}">
|
||||||
<div class="well well-lg">
|
<div class="well well-lg">
|
||||||
<h4>Alternative Logins</h4>
|
<h4>[[login:alternative_logins]]</h4>
|
||||||
<ul class="alt-logins">
|
<ul class="alt-logins">
|
||||||
<li data-url="/auth/twitter" class="twitter {twitter:display}"><i class="icon-twitter-sign icon-3x"></i></li>
|
<li data-url="/auth/twitter" class="twitter {twitter:display}"><i class="icon-twitter-sign icon-3x"></i></li>
|
||||||
<li data-url="/auth/google" class="google {google:display}"><i class="icon-google-plus-sign icon-3x"></i></li>
|
<li data-url="/auth/google" class="google {google:display}"><i class="icon-google-plus-sign icon-3x"></i></li>
|
||||||
|
|||||||
Reference in New Issue
Block a user