/*
@copyright (c) Till Wehowski - All rights reserved
@license (Basic/EULA) http://look-up.webfan.de/webdof-license
@license (Source Code Re-Usage) http://look-up.webfan.de/bsd-license
Copyright (c) 2015, Till Wehowski All rights reserved.
@component https://github.com/frdl/-Flow/tree/master/components/locale
*/
(function(global){
'use strict';
if('undefined'===typeof frdl)
throw new Error('The frdl/µ.Flow library is required to run this widget, get it at http://frdl.webfan.de/');
var _CNAME = 'locale';
var tok = 'flow://components/'+_CNAME;
var _i = 0;
var getID = function(t){
return 'flow-component-'+_CNAME+'-'+ (_i++).toString() + '-' +Guid.newGuid() + '-'+Sha1.hash(Guid.newGuid() + new Date().toString()+t.toString());
};
/*
frdl.addReadyCheck(function(){
return ('undefined' !== typeof navigator.mozL10n && 'function'===typeof 'undefined' !== typeof navigator.mozL10n.translate) ? true : false;
});
*/
try{
(function(){
'use strict';
try{
if('function'===typeof frdl.langInitiated)return;
} catch(err){
}
var _DEF = 'default';
var LanguageOptionSelectors = [];
var _loaded=false;
var widgetsSelector = '*[data-frdl-component="'+tok+'"] ul[data-frdl-component-id*="'+_CNAME+'"]';
frdl.langDefault=function(lang,trans){
if('undefined'!==typeof lang && 'string'===typeof lang){
if(_DEF!==lang){
if('undefined'===typeof $.WebfanDesktop.o || true !== $.WebfanDesktop.o){
return frdl.Throw('framework', 'DefaultLanguage SHOULD only be changed in Debug Mode!');
}
}
_DEF = lang;
if(true===trans){
frdl.translate(lang);
}
}
return _DEF.toString();
};
frdl.langGetClassSelector = function(){
return widgetsSelector;
};
frdl.getLanguageOptionSelectors = function(){
return LanguageOptionSelectors;
};
frdl.addLanguageOptionSelector = function(id){
LanguageOptionSelectors.push(id);
return this;
};
frdl.removeLanguageOptionSelector = function(id){
LanguageOptionSelectors = frdl.filter(LanguageOptionSelectors, function(v,i){
if(v !== id)return true;
return false;
}, false);
return this;
};
frdl.isLanguageOptionSelector = function(id){
var found = false;
frdl.getLanguageOptionSelectors()
.forEach(function(element, ix, array){
if(id===array[ix]){
found=true;
return false;
}
});
return found;
};
frdl.getLang = function(){
var l = frdl.langDefault();
if('object' === typeof $.WebfanDesktop && 'undefined' !== typeof $.WebfanDesktop.Registry && 'string' === typeof $.WebfanDesktop.Registry.User.lang){
l = $.WebfanDesktop.Registry.User.lang;
}else if('string' === typeof WebfanReadCookie('lang.user.selected')){
l =WebfanReadCookie('lang.user.selected');
}else if('string' === typeof wUser.lang){
l = wUser.lang;
}else{
l = BrowserDetect.language;
}
if('string' !== typeof l || frdl.langDefault() === l || frdl.langDefault() === l
|| new RegExp(/undefined/).test(l.toString()) ){
if( BrowserDetect.language === 'de'){
l = 'de_DE';
}else if( BrowserDetect.language === 'en'){
l= 'en_EN';
}else if( BrowserDetect.language === 'fr'){
l= 'fr_FR';
} else {
l = frdl.langDefault();
}
}
l = str_replace('-','_',l);
if(2 > explode('_', l).length && l !== frdl.langDefault()){
l= l + '_' + l.toUpperCase();
}
return l;
};
frdl.langstr = function(modul){
var url = frdl.route('API_TRANSLATION_MAIN', null, null, modul);
frdl.getScript(url, function(){
},false, false);
};
frdl.lang = function(langStrings, allSelectors, registeredSelectors){
allSelectors=false;registeredSelectors=true;
var languageStrings = langStrings,l = frdl.getLang();
$(document).ready(function(){
frdl.ready(function(){
if(false!==registeredSelectors){
frdl.getLanguageOptionSelectors()
.forEach(function(element, ix, array){
try{
$(array[ix]).locale('loadLangs', languageStrings) ;
/* $(array[ix]).locale('translate', l); */
}catch(err){
console.error(err);
}
});
}
if(true===allSelectors){
$(frdl.langGetClassSelector()).locale('loadLangs', languageStrings) ;
/* $(frdl.langGetClassSelector()).locale('translate', l); */
}
frdl.translate();
});
});
};
frdl.localeUrl = function(m, lang){
if(null === lang || 'undefined' === typeof lang){
lang = frdl.getLang();
}
if('function'===typeof m){
return m(lang);
}else if('string' === typeof m){
return '/locale/'+m+'/'+frdl.getLang()+'/'+frdl.getLang()+'.properties';
}else{
return '/locale/'+frdl.getLang()+'/'+frdl.getLang()+'.properties';
}
};
frdl.translate = function(lang, allSelectors, registeredSelectors){
allSelectors=false;registeredSelectors=true;
if(null === lang || 'undefined' === typeof lang){
var l = frdl.getLang();
}else{
var l = lang;
}
wUser.lang = l;
if('function'===typeof $.WebfanDesktop.save){
$.WebfanDesktop.Registry.User.lang = wUser.lang;
$.WebfanDesktop.save('user');
}
WebfanCreateCookie('lang.user.selected',l,31);
var url = frdl.localeUrl(null,l);
if(null === document.querySelector('link[href="'+url+'"]')){
$('head').append('<link rel="prefetch"'
+' type="application/l10n" lang="'+l+'" href="'+url+'"></link>');
}
frdl.ready(function(){
navigator.mozL10n.ctx.ready(function(){
if(false!==registeredSelectors){
frdl.getLanguageOptionSelectors()
.forEach(function(element, ix, array){
try{
$(array[ix]).locale('translate', l);
}catch(err){
console.error(err);
}
});
}
if(true===allSelectors){
try{
$(frdl.langGetClassSelector()).locale('translate', l);
}catch(err){
console.error(err);
}
}
});
/* $(document).ready(function(){ */
try{
/* if('undefined' ===typeof navigator.mozL10n)return false;
navigator.mozL10n.language.code = l;
navigator.mozL10n.requestLocales();
$(window).trigger('languagechange',{
language:{code: explode('_', languageCode)[0]}
});
*/
if(frdl.getLang()!==lang){
navigator.mozL10n.language.code = l;
frdl.translationl10n();
}
/*
if(frdl.getLang()!==lang){
frdl.getScript('http://api.webfan.de/api-d/4/js-api/library.js?plugin=l10n', function(){
navigator.mozL10n.language.code = l;
frdl.each(document.querySelectorAll('*[data-l10n-id]'), function(i,E){
navigator.mozL10n.translate(E);
});
},false,false);
}
*/
/* navigator.mozL10n.ctx.requestLocales(l);*/
}catch(err){
console.error(err);
}
/* }); */
/* window.dispatchEvent(new Event('languagechange')); */
return false;
});
};
frdl.langInitiated = function(){
if(false===_loaded){
var defSel = frdl.langGetClassSelector();
/* if(true!==frdl.isLanguageOptionSelector(defSel)){
frdl.addLanguageOptionSelector(defSel);
}*/
frdl.langDefault(_DEF);
_loaded=true;
}
return _loaded;
};
}());
/*
frdl.ready(function(){
frdl.UI.defer();
angular.module('frdl')
.controller(_CNAME + '.MainCtrl', function($scope){
$scope.languageCode = frdl.getLang();
})
;
frdl.UI.load();
frdl.UI.defer();
});
*/
}catch(err){
console.error('Error initialising translation tool: '+err);
}
frdl.each(document.querySelectorAll('*[data-frdl-component$="locale"]'), function(i,el){
if('true'===el.getAttribute('data-frdl-component-loaded-script'))return true;
el.setAttribute('data-frdl-component-initiated', 'true');
el.setAttribute('data-frdl-component-loaded-script', 'true');
el.setAttribute('data-role', 'none');
el.setAttribute('data-theme', 'none');
el.style.display='inline';
var ul = frdl.Dom.create('ul'),id =getID(frdl.getLang());
ul.style.display='inline-block';
ul.style.width='16px';
ul.style.height='16px';
ul.setAttribute('data-frdl-component-id', id);
ul.setAttribute('class', 'localizationTool');
frdl.Dom.add(ul, el);
if(null === document.querySelector('link[href="'+frdl.localeUrl(null,frdl.getLang())+'"]')){
$('head').append('<link rel="prefetch"'
+' type="application/l10n" lang="'+frdl.getLang()+'" href="'+frdl.localeUrl(null,frdl.getLang())+'"></link>');
}
/* var sel = ' ul[data-frdl-component-id="'+id+'"]'; */
var sel = ul;
var _def = frdl.langDefault().toString();
var LangTool = $(sel).locale({
languages: {
'default' : {
language: _def,
country: '@ Webfan',
languageTranslated: _def,
countryTranslated: 'Webfan',
flag: {
'class' : 'flag'
}
}
},
'defaultLanguage' : _def,
'ignoreUnmatchedSelectors' : true,
'showFlag': true,
'showCountry': true,
'showLanguage': true,
'onLanguageSelected' : function (languageCode) {
try{
frdl.translate(languageCode, false, true);
}catch(err){
console.error(err);
}
return true;
},
'strings' : {
'AGB' : {
'en_GB' : 'TOS',
'de_DE' : 'AGB',
'fr_FR' : 'TOS'
}
}
}).css('zIndex', 1009);
frdl.addLanguageOptionSelector(LangTool);
frdl.Dom.bringToFront($(el));
frdl.Dom.bringToFront($(sel));
frdl.translate();
});
}(typeof exports !== 'undefined' ? global : (typeof this !== 'undefined' ? this : window)));
|