From 38eba81933792b44de07a53ef36072430c03e9b8 Mon Sep 17 00:00:00 2001
From: Peter Jaszkowiak
Date: Thu, 8 Dec 2016 17:10:37 -0700
Subject: [PATCH] ACP menu and title translations
---
public/language/en-GB/admin/admin.json | 6 +
public/language/en-GB/admin/menu.json | 74 +++++++++
public/src/admin/admin.js | 89 +++++-----
src/controllers/admin/blacklist.js | 2 +-
src/controllers/admin/flags.js | 1 -
src/views/admin/partials/menu.tpl | 222 ++++++++++++-------------
6 files changed, 242 insertions(+), 152 deletions(-)
create mode 100644 public/language/en-GB/admin/admin.json
create mode 100644 public/language/en-GB/admin/menu.json
diff --git a/public/language/en-GB/admin/admin.json b/public/language/en-GB/admin/admin.json
new file mode 100644
index 0000000000..a64cc856a6
--- /dev/null
+++ b/public/language/en-GB/admin/admin.json
@@ -0,0 +1,6 @@
+{
+ "alert.confirm-reload": "Are you sure you wish to reload NodeBB?",
+ "alert.confirm-restart": "Are you sure you wish to restart NodeBB?",
+
+ "acp-title": "%1 | NodeBB Admin Control Panel"
+}
\ No newline at end of file
diff --git a/public/language/en-GB/admin/menu.json b/public/language/en-GB/admin/menu.json
new file mode 100644
index 0000000000..1db5c15abf
--- /dev/null
+++ b/public/language/en-GB/admin/menu.json
@@ -0,0 +1,74 @@
+{
+ "section-general": "General",
+ "general/dashboard": "Dashboard",
+ "general/homepage": "Home Page",
+ "general/navigation": "Navigation",
+ "general/languages": "Languages",
+ "general/sounds": "Sounds",
+ "general/social": "Social",
+
+ "section-manage": "Manage",
+ "manage/categories": "Categories",
+ "manage/tags": "Tags",
+ "manage/users": "Users",
+ "manage/registration": "Registration Queue",
+ "manage/groups": "Groups",
+ "manage/flags": "Flags",
+ "manage/ip-blacklist": "IP Blacklist",
+
+ "section-settings": "Settings",
+ "settings/general": "General",
+ "settings/reputation": "Reputation",
+ "settings/email": "Email",
+ "settings/user": "User",
+ "settings/group": "Group",
+ "settings/guest": "Guests",
+ "settings/uploads": "Uploads",
+ "settings/post": "Post",
+ "settings/chat": "Chat",
+ "settings/pagination": "Pagination",
+ "settings/tags": "Tags",
+ "settings/notifications": "Notifications",
+ "settings/cookies": "Cookies",
+ "settings/web-crawler": "Web Crawler",
+ "settings/sockets": "Sockets",
+ "settings/advanced": "Advanced",
+
+ "settings.page-title": "%1 Settings",
+
+ "section-appearance": "Appearance",
+ "appearance/themes": "Themes",
+ "appearance/skins": "Skins",
+ "appearance/customise": "Custom HTML & CSS",
+
+ "section-extend": "Extend",
+ "extend/plugins": "Plugins",
+ "extend/widgets": "Widgets",
+ "extend/rewards": "Rewards",
+
+ "section-social-auth": "Social Authentication",
+
+ "section-plugins": "Plugins",
+ "extend/plugins.install": "Install Plugins",
+
+ "section-advanced": "Advanced",
+ "advanced/database": "Database",
+ "advanced/events": "Events",
+ "advanced/logs": "Logs",
+ "advanced/errors": "Errors",
+ "advanced/cache": "Cache",
+ "development/logger": "Logger",
+
+ "reload-forum": "Reload Forum",
+ "restart-forum": "Restart Forum",
+ "logout": "Log out",
+ "view-forum": "View Forum",
+
+ "search.placeholder": "Search...",
+ "search.no-results": "No results...",
+ "search.search-forum": "Search the forum for ",
+ "search.keep-typing": "Type more to see results...",
+ "search.start-typing": "Start typing to see results...",
+
+ "connection-lost": "Connection to %1 has been lost, attempting to reconnect..."
+}
\ No newline at end of file
diff --git a/public/src/admin/admin.js b/public/src/admin/admin.js
index c7a874e96a..6dabcb9f38 100644
--- a/public/src/admin/admin.js
+++ b/public/src/admin/admin.js
@@ -9,16 +9,12 @@
}
logoutTimer = setTimeout(function () {
- require(['translator'], function (translator) {
- translator.translate('[[login:logged-out-due-to-inactivity]]', function (translated) {
- bootbox.alert({
- closeButton: false,
- message: translated,
- callback: function () {
- window.location.reload();
- }
- });
- });
+ bootbox.alert({
+ closeButton: false,
+ message: '[[login:logged-out-due-to-inactivity]]',
+ callback: function () {
+ window.location.reload();
+ }
});
}, 3600000);
}
@@ -69,11 +65,9 @@
}
function setupKeybindings() {
- require(['mousetrap'], function (mousetrap) {
+ require(['mousetrap', 'admin/modules/instance'], function (mousetrap, instance) {
mousetrap.bind('ctrl+shift+a r', function () {
- require(['admin/modules/instance'], function (instance) {
- instance.reload();
- });
+ instance.reload();
});
mousetrap.bind('ctrl+shift+a R', function () {
@@ -89,43 +83,60 @@
}
function selectMenuItem(url) {
- url = url
- .replace(/\/\d+$/, '')
- .split('/').slice(0, 3).join('/')
- .split('?')[0];
+ require(['translator'], function (translator) {
+ url = url
+ .replace(/\/\d+$/, '')
+ .split('/').slice(0, 3).join('/')
+ .split('?')[0];
- // If index is requested, load the dashboard
- if (url === 'admin') {
- url = 'admin/general/dashboard';
- }
+ // If index is requested, load the dashboard
+ if (url === 'admin') {
+ url = 'admin/general/dashboard';
+ }
- $('#main-menu li').removeClass('active');
- $('#main-menu a').removeClass('active').each(function () {
- var menu = $(this),
- href = menu.attr('href'),
- isLink = menu.parent().attr('data-link') === '1';
+ url = [config.relative_path, url].join('/');
- if (!isLink && href && href === [config.relative_path, url].join('/')) {
+ $('#main-menu li').removeClass('active');
+ $('#main-menu a').removeClass('active').filter('[href="' + url + '"]').each(function () {
+ var menu = $(this);
menu
.parent().addClass('active')
.parents('.menu-item').addClass('active');
+
+ var match = menu.attr('href').match(/admin\/((.+?)\/.+?)$/);
+ if (!match) {
+ return;
+ }
+ var str = '[[admin/menu:' + match[1] + ']]';
+ if (match[2] === 'settings') {
+ str = translator.compile('admin/menu:settings.page-title', str);
+ }
+ translator.translate(str, function (text) {
+ $('#main-page-title').text(text);
+ });
+ });
- $('#main-page-title').text(menu.text() + (menu.parents('.menu-item').children('a').text() === 'Settings' ? ' Settings' : ''));
+ var title;
+ if (/admin\/general\/dashboard$/.test(url)) {
+ title = '[[admin/menu:general/dashboard]]';
+ } else {
+ title = url.match(/admin\/(.+?)\/(.+?)$/);
+ title = '[[admin/menu:section-' + title[1] + ']]' +
+ (title[2] ? (' > [[admin/menu:' +
+ title[1] + '/' + title[2] + ']]') : '');
}
- });
- var acpPath = url.replace('admin/', '').split('/');
- acpPath.forEach(function (path, i) {
- acpPath[i] = path.charAt(0).toUpperCase() + path.slice(1);
- });
- acpPath = acpPath.join(' > ');
+ title = '[[admin/admin:acp-title, ' + title + ']]';
- document.title = (url === 'admin/general/dashboard' ? 'Dashboard' : acpPath) + ' | NodeBB Admin Control Panel';
+ translator.translate(title, function (title) {
+ document.title = title.replace(/>/g, '>');
+ });
+ });
}
function setupRestartLinks() {
$('.reload').off('click').on('click', function () {
- bootbox.confirm('Are you sure you wish to reload NodeBB?', function (confirm) {
+ bootbox.confirm('[[admin/admin:alert.confirm-reload]]', function (confirm) {
if (confirm) {
require(['admin/modules/instance'], function (instance) {
instance.reload();
@@ -135,7 +146,7 @@
});
$('.restart').off('click').on('click', function () {
- bootbox.confirm('Are you sure you wish to restart NodeBB?', function (confirm) {
+ bootbox.confirm('[[admin/admin:alert.confirm-restart]]', function (confirm) {
if (confirm) {
require(['admin/modules/instance'], function (instance) {
instance.restart();
@@ -143,7 +154,7 @@
}
});
});
- };
+ }
function launchSnackbar(params) {
var message = (params.title ? "" + params.title + "" : '') + (params.message ? params.message : '');
diff --git a/src/controllers/admin/blacklist.js b/src/controllers/admin/blacklist.js
index d70b1d1d79..c9ba71169e 100644
--- a/src/controllers/admin/blacklist.js
+++ b/src/controllers/admin/blacklist.js
@@ -9,7 +9,7 @@ blacklistController.get = function (req, res, next) {
if (err) {
return next(err);
}
- res.render('admin/manage/ip-blacklist', {rules: rules, title: 'IP Blacklist'});
+ res.render('admin/manage/ip-blacklist', { rules: rules });
});
};
diff --git a/src/controllers/admin/flags.js b/src/controllers/admin/flags.js
index 1b31a95ff4..03c9329fca 100644
--- a/src/controllers/admin/flags.js
+++ b/src/controllers/admin/flags.js
@@ -65,7 +65,6 @@ flagsController.get = function (req, res, next) {
sortByCount: sortBy === 'count',
sortByTime: sortBy === 'time',
pagination: pagination.create(page, pageCount, req.query),
- title: '[[pages:flagged-posts]]'
};
res.render('admin/manage/flags', data);
});
diff --git a/src/views/admin/partials/menu.tpl b/src/views/admin/partials/menu.tpl
index 9bc0c48d7e..ea481dcfb8 100644
--- a/src/views/admin/partials/menu.tpl
+++ b/src/views/admin/partials/menu.tpl
@@ -1,72 +1,72 @@