/* ------------------------------------------------------------------------------
*
* # Internationalization - callbacks
*
* Demo JS code for internationalization_callbacks.html page
*
* ---------------------------------------------------------------------------- */
// Setup module
// ------------------------------
var I18nextCallbacks = function() {
//
// Setup module components
//
// Noty.js
var _componentNoty = function(message) {
if (typeof Noty == 'undefined') {
console.warn('Warning - noty.min.js is not loaded.');
return;
}
// Initialize
new Noty({
text: message,
type: 'info',
theme: 'limitless',
layout: 'topRight',
timeout: 2500
}).show();
};
// Translation callbacks
var _componentI18nextCallbacks = function() {
if (typeof i18next == 'undefined') {
console.warn('Warning - i18next.min.js is not loaded.');
return;
}
// Configuration
// -------------------------
// Define main elements
var $switchContainer = $('.language-switch'),
englishLangClass = '.english',
russianLangClass = '.russian',
ukrainianLangClass = '.ukrainian',
$localizationElement = $('body');
// Add options
i18next.use(i18nextXHRBackend).use(i18nextBrowserLanguageDetector).init({
backend: {
loadPath: '../../../../global_assets/locales/{{lng}}.json'
},
debug: true,
fallbackLng: false
},
function (err, t) {
// Initialize library
jqueryI18next.init(i18next, $);
// Initialize translation
$localizationElement.localize();
// To avoid FOUC when translation gets initialized,
// use data-fouc attribute in all elements by default. When translation
// is initialized, remove it from all elements
$localizationElement.find('[data-i18n]').removeAttr('data-fouc');
});
// Change languages in dropdown
// -------------------------
// Do stuff when i18Next is initialized
i18next.on('initialized', function() {
// Notification
_componentNoty('i18Next has been initialized.
The following language has beed detected: ' + '' + i18next.language + '');
// English
if(i18next.language === "en") {
// Set active class
$('.dropdown-item' + englishLangClass).addClass('active');
$('.navbar-nav-link' + englishLangClass).parent().addClass('active');
// Change language in dropdown
$switchContainer.children('.dropdown-toggle').html(
$switchContainer.find(englishLangClass).html()
).children('img').addClass('mr-2');
}
// Russian
if(i18next.language === "ru") {
// Set active class
$('.dropdown-item' + russianLangClass).addClass('active');
$('.navbar-nav-link' + russianLangClass).parent().addClass('active');
// Change language in dropdown
$switchContainer.children('.dropdown-toggle').html(
$switchContainer.find(russianLangClass).html()
).children('img').addClass('mr-2');
}
// Ukrainian
if(i18next.language === "ua") {
// Set active class
$('.dropdown-item' + ukrainianLangClass).addClass('active');
$('.navbar-nav-link' + ukrainianLangClass).parent().addClass('active');
// Change language in dropdown
$switchContainer.children('.dropdown-toggle').html(
$switchContainer.find(ukrainianLangClass).html()
).children('img').addClass('mr-2');
}
});
// Change languages in navbar
// -------------------------
// English
$(englishLangClass).on('click', function () {
// Change language
i18next.changeLanguage('en');
// When changed, run translation again
i18next.on('languageChanged', function() {
// Localize
$localizationElement.localize();
// Notification
_componentNoty('Language has been changed to: ' + '' + i18next.language + '');
});
// Change lang in dropdown
$switchContainer.children('.dropdown-toggle').html(
$(englishLangClass).html()
).children('img').addClass('mr-2');
// Set active class
$switchContainer.find('.dropdown-item.active, .nav-item.active').removeClass('active');
$('.dropdown-item' + englishLangClass).addClass('active');
$('.navbar-nav-link' + englishLangClass).parent().addClass('active');
});
// Russian
$(russianLangClass).on('click', function () {
// Change language
i18next.changeLanguage('ru');
// When changed, run translation again
i18next.on('languageChanged', function() {
// Localize
$localizationElement.localize();
// Notification
_componentNoty('Language has been changed to: ' + '' + i18next.language + '');
});
// Change lang in dropdown
$switchContainer.children('.dropdown-toggle').html(
$(russianLangClass).html()
).children('img').addClass('mr-2');
// Set active class
$switchContainer.find('.dropdown-item.active, .nav-item.active').removeClass('active');
$('.dropdown-item' + russianLangClass).addClass('active');
$('.navbar-nav-link' + russianLangClass).parent().addClass('active');
});
// Ukrainian
$(ukrainianLangClass).on('click', function () {
// Change language
i18next.changeLanguage('ua');
// When changed, run translation again
i18next.on('languageChanged', function() {
// Localize
$localizationElement.localize();
// Notification
_componentNoty('Language has been changed to: ' + '' + i18next.language + '');
});
// Change lang in dropdown
$switchContainer.children('.dropdown-toggle').html(
$(ukrainianLangClass).html()
).children('img').addClass('mr-2');
// Set active class
$switchContainer.find('.dropdown-item.active, .nav-item.active').removeClass('active');
$('.dropdown-item' + ukrainianLangClass).addClass('active');
$('.navbar-nav-link' + ukrainianLangClass).parent().addClass('active');
});
};
//
// Return objects assigned to module
//
return {
init: function() {
_componentI18nextCallbacks();
}
}
}();
// Initialize module
// ------------------------------
document.addEventListener('DOMContentLoaded', function() {
I18nextCallbacks.init();
});