Use new translator API where it makes sense

This commit is contained in:
Peter Jaszkowiak
2016-09-05 12:24:40 -06:00
parent 931266682f
commit 499fbe21fd
16 changed files with 286 additions and 187 deletions

View File

@@ -1,7 +1,9 @@
"use strict";
/*global config, translator, componentHandler, define, socket, app, ajaxify, utils, bootbox, Slideout, NProgress, RELATIVE_PATH*/
/*global config, componentHandler, socket, app, bootbox, Slideout, NProgress*/
require(['translator'], function (trans) {
var translator = trans.Translator.create();
(function() {
var logoutTimer = 0;
function startLogoutTimer() {
if (logoutTimer) {
@@ -9,15 +11,13 @@
}
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();
}
});
translator.translate('[[login:logged-out-due-to-inactivity]]').then(function(translated) {
bootbox.alert({
closeButton: false,
message: translated,
callback: function(){
window.location.reload();
}
});
});
}, 3600000);
@@ -52,8 +52,6 @@
});
$(window).on('action:ajaxify.contentLoaded', function(ev, data) {
var url = data.url;
selectMenuItem(data.url);
setupRestartLinks();
@@ -65,7 +63,7 @@
NProgress.set(0.7);
});
$(window).on('action:ajaxify.end', function(ev, data) {
$(window).on('action:ajaxify.end', function() {
NProgress.done();
});
}
@@ -82,7 +80,7 @@
socket.emit('admin.restart');
});
mousetrap.bind('/', function(event) {
mousetrap.bind('/', function() {
$('#acp-search input').focus();
return false;
@@ -145,19 +143,16 @@
function launchSnackbar(params) {
var message = (params.title ? "<strong>" + params.title + "</strong>" : '') + (params.message ? params.message : '');
require(['translator'], function(translator) {
translator.translate(message, function(html) {
var bar = $.snackbar({
content: html,
timeout: 3000,
htmlAllowed: true
});
if (params.clickfn) {
bar.on('click', params.clickfn);
}
translator.translate(message).then(function(html) {
var bar = $.snackbar({
content: html,
timeout: 3000,
htmlAllowed: true
});
if (params.clickfn) {
bar.on('click', params.clickfn);
}
});
}
@@ -199,4 +194,4 @@
});
});
}
}());
});

View File

@@ -1,7 +1,7 @@
"use strict";
/* global define, app, socket, bootbox, templates, config */
define('admin/appearance/themes', function() {
define('admin/appearance/themes', ['translator'], function(translator) {
var Themes = {};
Themes.init = function() {

View File

@@ -1,7 +1,7 @@
"use strict";
/* global define, app, ajaxify, socket, templates */
/* global define, app, ajaxify, socket, templates, componentHandler */
define('admin/general/navigation', ['translator', 'iconSelect', 'jqueryui'], function(translator, iconSelect, jqueryui) {
define('admin/general/navigation', ['translator', 'iconSelect', 'jqueryui'], function(translator, iconSelect) {
var navigation = {},
available;
@@ -77,7 +77,7 @@ define('admin/general/navigation', ['translator', 'iconSelect', 'jqueryui'], fun
templates.parse('admin/general/navigation', 'enabled', {enabled: [data]}, function(li) {
li = $(translator.unescape(li));
$('#enabled').append(li);
componentHandler.upgradeDom()
componentHandler.upgradeDom();
});
}

View File

@@ -1,7 +1,7 @@
"use strict";
/*global define, socket, app, bootbox, templates, ajaxify, Sortable */
define('admin/manage/categories', ['vendor/jquery/serializeObject/jquery.ba-serializeobject.min'], function() {
define('admin/manage/categories', ['translator', 'vendor/jquery/serializeObject/jquery.ba-serializeobject.min'], function(translator) {
var Categories = {}, newCategoryId = -1, sortables;
Categories.init = function() {
@@ -121,10 +121,10 @@ define('admin/manage/categories', ['vendor/jquery/serializeObject/jquery.ba-seri
}
function itemDragDidEnd(e) {
var isCategoryUpdate = (newCategoryId != -1);
var isCategoryUpdate = parseInt(newCategoryId, 10) !== -1;
//Update needed?
if((e.newIndex != undefined && e.oldIndex != e.newIndex) || isCategoryUpdate){
if((typeof e.newIndex !== 'undefined' && parseInt(e.oldIndex, 10) !== parseInt(e.newIndex), 10) || isCategoryUpdate){
var parentCategory = isCategoryUpdate ? sortables[newCategoryId] : sortables[e.from.dataset.cid],
modified = {}, i = 0, list = parentCategory.toArray(), len = list.length;

View File

@@ -1,10 +1,9 @@
"use strict";
/*global define, templates, socket, ajaxify, app, admin, bootbox, utils, config */
/*global define, templates, socket, ajaxify, app, bootbox, utils, config */
define('admin/manage/groups', [
'translator',
'components'
], function(translator, components) {
'translator'
], function(translator) {
var Groups = {};
var intervalId = 0;
@@ -32,10 +31,9 @@ define('admin/manage/groups', [
createModalGo.on('click', function() {
var submitObj = {
name: createGroupName.val(),
description: $('#create-group-desc').val()
},
errorText;
name: createGroupName.val(),
description: $('#create-group-desc').val()
};
socket.emit('admin.groups.create', submitObj, function(err) {
if (err) {
@@ -68,7 +66,7 @@ define('admin/manage/groups', [
if (confirm) {
socket.emit('groups.delete', {
groupName: groupName
}, function(err, data) {
}, function(err) {
if(err) {
return app.alertError(err.message);
}

View File

@@ -130,28 +130,6 @@ app.cacheBuster = null;
});
};
app.handleInvalidSession = function() {
if (app.flags && app.flags._sessionRefresh) {
return;
}
app.flags = app.flags || {};
app.flags._sessionRefresh = true;
require(['translator'], function(translator) {
translator.translate('[[error:invalid-session-text]]', function(translated) {
bootbox.alert({
title: '[[error:invalid-session]]',
message: translated,
closeButton: false,
callback: function() {
window.location.reload();
}
});
});
});
};
app.enterRoom = function (room, callback) {
callback = callback || function() {};
if (socket && app.user.uid && app.currentRoom !== room) {
@@ -309,63 +287,6 @@ app.cacheBuster = null;
});
};
var titleObj = {
active: false,
interval: undefined,
titles: []
};
app.alternatingTitle = function (title) {
if (typeof title !== 'string') {
return;
}
if (title.length > 0 && !app.isFocused) {
if (!titleObj.titles[0]) {
titleObj.titles[0] = window.document.title;
}
require(['translator'], function(translator) {
translator.translate(title, function(translated) {
titleObj.titles[1] = translated;
if (titleObj.interval) {
clearInterval(titleObj.interval);
}
titleObj.interval = setInterval(function() {
var title = titleObj.titles[titleObj.titles.indexOf(window.document.title) ^ 1];
if (title) {
window.document.title = $('<div/>').html(title).text();
}
}, 2000);
});
});
} else {
if (titleObj.interval) {
clearInterval(titleObj.interval);
}
if (titleObj.titles[0]) {
window.document.title = $('<div/>').html(titleObj.titles[0]).text();
}
}
};
app.refreshTitle = function(title) {
if (!title) {
return;
}
require(['translator'], function(translator) {
title = config.titleLayout.replace(/&#123;/g, '{').replace(/&#125;/g, '}')
.replace('{pageTitle}', function() { return title; })
.replace('{browserTitle}', function() { return config.browserTitle; });
translator.translate(title, function(translated) {
titleObj.titles[0] = translated;
app.alternatingTitle('');
});
});
};
app.toggleNavbar = function(state) {
var navbarEl = $('.navbar');
if (navbarEl) {
@@ -473,21 +394,6 @@ app.cacheBuster = null;
});
}
app.updateUserStatus = function(el, status) {
if (!el.length) {
return;
}
require(['translator'], function(translator) {
translator.translate('[[global:' + status + ']]', function(translated) {
el.removeClass('online offline dnd away')
.addClass(status)
.attr('title', translated)
.attr('data-original-title', translated);
});
});
};
app.newTopic = function (cid) {
$(window).trigger('action:composer.topic.new', {
cid: cid || ajaxify.data.cid || 0
@@ -542,10 +448,20 @@ app.cacheBuster = null;
}
};
app.parseAndTranslate = function(template, blockName, data, callback) {
require(['translator'], function(translator) {
app.loadProgressiveStylesheet = function() {
var linkEl = document.createElement('link');
linkEl.rel = 'stylesheet';
linkEl.href = config.relative_path + '/js-enabled.css';
document.head.appendChild(linkEl);
};
require(['translator'], function(trans) {
var translator = trans.Translator.create();
app.parseAndTranslate = function(template, blockName, data, callback) {
function translate(html, callback) {
translator.translate(html, function(translatedHTML) {
translator.translate(html).then(function(translatedHTML) {
translatedHTML = translator.unescape(translatedHTML);
callback($(translatedHTML));
});
@@ -562,14 +478,93 @@ app.cacheBuster = null;
translate(html, callback);
});
}
});
};
};
app.loadProgressiveStylesheet = function() {
var linkEl = document.createElement('link');
linkEl.rel = 'stylesheet';
linkEl.href = config.relative_path + '/js-enabled.css';
app.handleInvalidSession = function() {
if (app.flags && app.flags._sessionRefresh) {
return;
}
document.head.appendChild(linkEl);
};
app.flags = app.flags || {};
app.flags._sessionRefresh = true;
translator.translate('[[error:invalid-session-text]]').then(function(translated) {
bootbox.alert({
title: '[[error:invalid-session]]',
message: translated,
closeButton: false,
callback: function() {
window.location.reload();
}
});
});
};
var titleObj = {
active: false,
interval: undefined,
titles: []
};
app.alternatingTitle = function (title) {
if (typeof title !== 'string') {
return;
}
if (title.length > 0 && !app.isFocused) {
if (!titleObj.titles[0]) {
titleObj.titles[0] = window.document.title;
}
translator.translate(title).then(function(translated) {
titleObj.titles[1] = translated;
if (titleObj.interval) {
clearInterval(titleObj.interval);
}
titleObj.interval = setInterval(function() {
var title = titleObj.titles[titleObj.titles.indexOf(window.document.title) ^ 1];
if (title) {
window.document.title = $('<div/>').html(title).text();
}
}, 2000);
});
} else {
if (titleObj.interval) {
clearInterval(titleObj.interval);
}
if (titleObj.titles[0]) {
window.document.title = $('<div/>').html(titleObj.titles[0]).text();
}
}
};
app.refreshTitle = function(title) {
if (!title) {
return;
}
title = config.titleLayout.replace(/&#123;/g, '{').replace(/&#125;/g, '}')
.replace('{pageTitle}', function() { return title; })
.replace('{browserTitle}', function() { return config.browserTitle; });
translator.translate(title).then(function(translated) {
titleObj.titles[0] = translated;
app.alternatingTitle('');
});
};
app.updateUserStatus = function(el, status) {
if (!el.length) {
return;
}
translator.translate('[[global:' + status + ']]').then(function(translated) {
el.removeClass('online offline dnd away')
.addClass(status)
.attr('title', translated)
.attr('data-original-title', translated);
});
};
});
}());

View File

@@ -2,7 +2,9 @@
/* globals define, ajaxify, socket, app, config, templates, bootbox */
define('forum/account/edit', ['forum/account/header', 'uploader', 'translator', 'components'], function(header, uploader, translator, components) {
define('forum/account/edit', ['forum/account/header', 'uploader', 'translator', 'components'], function(header, uploader, trans, components) {
var translator = trans.Translator.create();
var AccountEdit = {};
AccountEdit.init = function() {
@@ -86,7 +88,7 @@ define('forum/account/edit', ['forum/account/header', 'uploader', 'translator',
uploaded: uploaded,
allowProfileImageUploads: ajaxify.data.allowProfileImageUploads
}, function(html) {
translator.translate(html, function(html) {
translator.translate(html).then(function(html) {
var modal = bootbox.dialog({
className: 'picture-switcher',
title: '[[user:change_picture]]',
@@ -158,7 +160,7 @@ define('forum/account/edit', ['forum/account/header', 'uploader', 'translator',
function handleAccountDelete() {
$('#deleteAccountBtn').on('click', function() {
translator.translate('[[user:delete_account_confirm]]', function(translated) {
translator.translate('[[user:delete_account_confirm]]').then(function(translated) {
var modal = bootbox.confirm(translated + '<p><input type="text" class="form-control" id="confirm-username" /></p>', function(confirm) {
if (!confirm) {
return;
@@ -229,7 +231,7 @@ define('forum/account/edit', ['forum/account/header', 'uploader', 'translator',
modal.find('[data-action="upload-url"]').on('click', function() {
modal.modal('hide');
templates.parse('partials/modals/upload_picture_from_url_modal', {}, function(html) {
translator.translate(html, function(html) {
translator.translate(html).then(function(html) {
var uploadModal = $(html);
uploadModal.modal('show');

View File

@@ -36,7 +36,6 @@ define('forum/categories', ['components', 'translator'], function(components, tr
}
var recentPosts = category.find('[component="category/posts"]');
var insertBefore = recentPosts.first();
parseAndTranslate([post], function(html) {
html.hide();

View File

@@ -99,7 +99,7 @@ define('forum/category', [
});
};
Category.navigatorCallback = function(topIndex, bottomIndex, elementCount) {
Category.navigatorCallback = function(topIndex, bottomIndex) {
return bottomIndex;
};

View File

@@ -2,7 +2,8 @@
/* globals define, socket, app, ajaxify, templates, bootbox */
define('forum/chats/messages', ['components', 'sounds', 'translator'], function(components, sounds, translator) {
define('forum/chats/messages', ['components', 'sounds', 'translator'], function(components, sounds, trans) {
var translator = trans.Translator.create();
var messages = {};
@@ -74,7 +75,7 @@ define('forum/chats/messages', ['components', 'sounds', 'translator'], function(
templates.parse('partials/chat_message' + (Array.isArray(data) ? 's' : ''), {
messages: data
}, function(html) {
translator.translate(html, callback);
translator.translate(html).then(callback);
});
};
@@ -119,7 +120,7 @@ define('forum/chats/messages', ['components', 'sounds', 'translator'], function(
};
messages.delete = function(messageId, roomId) {
translator.translate('[[modules:chat.delete_message_confirm]]', function(translated) {
translator.translate('[[modules:chat.delete_message_confirm]]').then(function(translated) {
bootbox.confirm(translated, function(ok) {
if (!ok) {
return;

View File

@@ -3,7 +3,9 @@
/* globals define, app, utils, socket, config, ajaxify, bootbox */
define('forum/register', ['translator'], function(translator) {
define('forum/register', ['translator'], function(trans) {
var translator = trans.Translator.create();
var Register = {},
validationError = false,
successIcon = '';
@@ -88,16 +90,14 @@ define('forum/register', ['translator'], function(translator) {
if (data.referrer) {
window.location.href = data.referrer;
} else if (data.message) {
require(['translator'], function(translator) {
translator.translate(data.message, function(msg) {
bootbox.alert(msg);
ajaxify.go('/');
});
translator.translate(data.message).then(function(msg) {
bootbox.alert(msg);
ajaxify.go('/');
});
}
},
error: function(data) {
translator.translate(data.responseText, config.defaultLang, function(translated) {
translator.translate(data.responseText).then(function(translated) {
if (data.status === 403 && data.responseText === 'Forbidden') {
window.location.href = config.relative_path + '/register?error=csrf-invalid';
} else {
@@ -208,7 +208,7 @@ define('forum/register', ['translator'], function(translator) {
}
function showError(element, msg) {
translator.translate(msg, function(msg) {
translator.translate(msg).then(function(msg) {
element.html(msg);
element.parent()
.removeClass('register-success')
@@ -219,7 +219,7 @@ define('forum/register', ['translator'], function(translator) {
}
function showSuccess(element, msg) {
translator.translate(msg, function(msg) {
translator.translate(msg).then(function(msg) {
element.html(msg);
element.parent()
.removeClass('register-danger')

View File

@@ -2,7 +2,8 @@
/* globals define, app, ajaxify, bootbox, socket, templates, utils, config */
define('forum/topic/postTools', ['share', 'navigator', 'components', 'translator'], function(share, navigator, components, translator) {
define('forum/topic/postTools', ['share', 'navigator', 'components', 'translator'], function(share, navigator, components, trans) {
var translator = trans.Translator.create();
var PostTools = {};
@@ -40,7 +41,7 @@ define('forum/topic/postTools', ['share', 'navigator', 'components', 'translator
data.posts.display_move_tools = data.posts.display_move_tools && index !== 0;
templates.parse('partials/topic/post-menu-list', data, function(html) {
translator.translate(html, function(html) {
translator.translate(html).then(function(html) {
dropdownMenu.html(html);
$(window).trigger('action:post.tools.load');
});
@@ -115,7 +116,7 @@ define('forum/topic/postTools', ['share', 'navigator', 'components', 'translator
}
if (usernames.length + data.otherCount > 6) {
usernames = usernames.join(', ').replace(/,/g, '|');
translator.translate('[[topic:users_and_others, ' + usernames + ', ' + data.otherCount + ']]', function(translated) {
translator.translate('[[topic:users_and_others, ' + usernames + ', ' + data.otherCount + ']]').then(function(translated) {
translated = translated.replace(/\|/g, ',');
doCreateTooltip(translated);
});
@@ -141,7 +142,7 @@ define('forum/topic/postTools', ['share', 'navigator', 'components', 'translator
});
$('.topic').on('click', '[component="topic/reply-as-topic"]', function() {
translator.translate('[[topic:link_back, ' + ajaxify.data.titleRaw + ', ' + config.relative_path + '/topic/' + ajaxify.data.slug + ']]', function(body) {
translator.translate('[[topic:link_back, ' + ajaxify.data.titleRaw + ', ' + config.relative_path + '/topic/' + ajaxify.data.slug + ']]').then(function(body) {
$(window).trigger('action:composer.topic.new', {
cid: ajaxify.data.cid,
body: body
@@ -377,7 +378,7 @@ define('forum/topic/postTools', ['share', 'navigator', 'components', 'translator
}
templates.parse('partials/modals/votes_modal', data, function(html) {
translator.translate(html, function(translated) {
translator.translate(html).then(function(translated) {
var dialog = bootbox.dialog({
title: 'Voters',
message: translated,
@@ -429,7 +430,7 @@ define('forum/topic/postTools', ['share', 'navigator', 'components', 'translator
}
function postAction(action, pid, tid) {
translator.translate('[[topic:post_' + action + '_confirm]]', function(msg) {
translator.translate('[[topic:post_' + action + '_confirm]]').then(function(msg) {
bootbox.confirm(msg, function(confirm) {
if (!confirm) {
return;
@@ -480,7 +481,7 @@ define('forum/topic/postTools', ['share', 'navigator', 'components', 'translator
function parseMoveModal(callback) {
templates.parse('partials/move_post_modal', {}, function(html) {
translator.translate(html, callback);
translator.translate(html).then(callback);
});
}
@@ -521,7 +522,7 @@ define('forum/topic/postTools', ['share', 'navigator', 'components', 'translator
return callback();
}
translator.translate('[[topic:stale.warning]]', function(translated) {
translator.translate('[[topic:stale.warning]]').then(function(translated) {
var warning = bootbox.dialog({
title: '[[topic:stale.title]]',
message: translated,
@@ -538,7 +539,7 @@ define('forum/topic/postTools', ['share', 'navigator', 'components', 'translator
label: '[[topic:stale.create]]',
className: 'btn-primary',
callback: function() {
translator.translate('[[topic:link_back, ' + ajaxify.data.title + ', ' + config.relative_path + '/topic/' + ajaxify.data.slug + ']]', function(body) {
translator.translate('[[topic:link_back, ' + ajaxify.data.title + ', ' + config.relative_path + '/topic/' + ajaxify.data.slug + ']]').then(function(body) {
$(window).trigger('action:composer.topic.new', {
cid: ajaxify.data.cid,
body: body

View File

@@ -8,7 +8,8 @@ define('forum/topic/threadTools', [
'forum/topic/delete-posts',
'components',
'translator'
], function(fork, move, deletePosts, components, translator) {
], function(fork, move, deletePosts, components, trans) {
var translator = trans.Translator.create();
var ThreadTools = {};
@@ -142,7 +143,7 @@ define('forum/topic/threadTools', [
}
templates.parse('partials/topic/topic-menu-list', data, function(html) {
translator.translate(html, function(html) {
translator.translate(html).then(function(html) {
dropdownMenu.html(html);
$(window).trigger('action:topic.tools.load');
});
@@ -152,7 +153,7 @@ define('forum/topic/threadTools', [
}
function topicCommand(command, tid) {
translator.translate('[[topic:thread_tools.' + command + '_confirm]]', function(msg) {
translator.translate('[[topic:thread_tools.' + command + '_confirm]]').then(function(msg) {
bootbox.confirm(msg, function(confirm) {
if (!confirm) {
return;

View File

@@ -1,7 +1,8 @@
'use strict';
/* globals define, templates */
define('alerts', ['translator', 'components'], function(translator, components) {
define('alerts', ['translator', 'components'], function(trans, components) {
var translator = trans.Translator.create();
var module = {};
module.alert = function (params) {
@@ -20,7 +21,7 @@ define('alerts', ['translator', 'components'], function(translator, components)
function createNew(params) {
templates.parse('alert', params, function(alertTpl) {
translator.translate(alertTpl, function(translatedHTML) {
translator.translate(alertTpl).then(function(translatedHTML) {
var alert = $('#' + params.alert_id);
if (alert.length) {
return updateAlert(alert, params);
@@ -71,7 +72,7 @@ define('alerts', ['translator', 'components'], function(translator, components)
}
alert.children().fadeOut(100);
translator.translate(alert.html(), function(translatedHTML) {
translator.translate(alert.html()).then(function(translatedHTML) {
alert.children().fadeIn(100);
alert.html(translatedHTML);
});

View File

@@ -9,7 +9,8 @@ define('chat', [
'forum/chats',
'forum/chats/messages',
'translator'
], function(components, taskbar, S, sounds, Chats, ChatsMessages, translator) {
], function(components, taskbar, S, sounds, Chats, ChatsMessages, trans) {
var translator = trans.Translator.create();
var module = {};
var newMessage = false;
@@ -116,7 +117,7 @@ define('chat', [
templates.parse('partials/chat_dropdown', {
rooms: rooms
}, function(html) {
translator.translate(html, function(translated) {
translator.translate(html).then(function(translated) {
chatsListEl.empty().html(translated);
app.createUserTooltips(chatsListEl, 'right');
});
@@ -162,7 +163,7 @@ define('chat', [
module.createModal = function(data, callback) {
templates.parse('chat', data, function(chatTpl) {
translator.translate(chatTpl, function (chatTpl) {
translator.translate(chatTpl).then(function (chatTpl) {
var chatModal = $(chatTpl),
uuid = utils.generateUUID(),
@@ -337,7 +338,7 @@ define('chat', [
});
};
module.disableMobileBehaviour = function(modalEl) {
module.disableMobileBehaviour = function() {
app.toggleNavbar(true);
};
@@ -345,7 +346,6 @@ define('chat', [
var totalHeight = modalEl.find('.modal-content').outerHeight() - modalEl.find('.modal-header').outerHeight();
var padding = parseInt(modalEl.find('.modal-body').css('padding-top'), 10) + parseInt(modalEl.find('.modal-body').css('padding-bottom'), 10);
var contentMargin = parseInt(modalEl.find('.chat-content').css('margin-top'), 10) + parseInt(modalEl.find('.chat-content').css('margin-bottom'), 10);
var sinceHeight = modalEl.find('.since-bar').outerHeight(true);
var inputGroupHeight = modalEl.find('.input-group').outerHeight();
return totalHeight - padding - contentMargin - inputGroupHeight;

106
public/src/modules/translator.d.ts vendored Normal file
View File

@@ -0,0 +1,106 @@
/// <reference path="../../../node_modules/@types/es6-promise/index.d.ts" />
interface Translator {
/**
* Parse the translation instructions into the language of the Translator instance
* @param str - Source string
*/
translate(str: string): Promise<string>;
/**
* Translates a specific key and array of arguments
* @param name - Translation key (ex. 'global:home')
* @param args - Arguments for `%1`, `%2`, etc
*/
translateKey(name: string, args: string[]): Promise<string>;
/**
* Load translation file (or use a cached version), and optionally return the translation of a certain key
* @param namespace - The file name of the translation namespace
* @param key - The key of the specific translation to getJSON
*/
getTranslation(namespace: string, key?:string): Promise<Object|string>;
}
interface TranslatorFactory {
/**
* Construct a new Translator object
* @param language - Language code for this Translator instance
*/
new(language: string): Translator;
/**
* Get the language of the current environment, falling back to defaults
*/
getLanguage(): string;
/**
* Create and cache a new Translator instance, or return a cached one
* @param language - Language code
*/
create(language?: string): Translator;
cache: { [key: string]: Translator; };
}
interface Callback {
(err: Error, data: any): void;
}
interface TranslatorAdaptor {
/**
* The Translator class
*/
Translator: TranslatorFactory;
/**
* Legacy translator function for backwards compatibility
*/
translate(text: string, language: string, callback: Callback);
translate(text: string, callback: Callback);
/**
* Construct a translator pattern
* @param name - Translation name
* @param args - Optional arguments for the pattern
*/
compile(name: string, ...args: string[]): string;
/**
* Escape translation patterns from text
*/
escape(text): string;
/**
* Unescape translation patterns from text
*/
unescape(text): string;
/**
* Add translations to the cache
*/
addTranslation(language: string, filename: string, translation: { [key: string]: string });
/**
* Get the translations object
*/
getTranslations(language: string, filename: string, callback?: Callback);
/**
* Alias of TranslatorAdaptor.getTranslations
*/
load(language: string, filename: string, callback?: Callback);
/**
* Get the language of the current environment, falling back to defaults
*/
getLanguage(): string;
toggleTimeagoShorthand();
prepareDOM();
}
declare var adaptor: TranslatorAdaptor;
export = adaptor;