// Detect the language and update the global Language file
var detectLanguage = function(preferredLanguage) {
var fs = require('fs');
// The full OS language (with localization, like "en-uk")
var pureLanguage = navigator.language.toLowerCase();
// The global language name (without localization, like "en")
var baseLanguage = navigator.language.toLowerCase().slice(0,2);
if( fs.existsSync('./language/' + pureLanguage + '.json') ) {
i18n.setLocale(pureLanguage);
}
else if( fs.existsSync('./language/' + baseLanguage + '.json') ) {
i18n.setLocale(baseLanguage);
} else {
i18n.setLocale(preferredLanguage);
}
// This is a hack to translate non-templated UI elements. Fuck it.
$('[data-translate]').each(function(){
var $el = $(this);
var key = $el.data('translate');
if( $el.is('input') ) {
$el.attr('placeholder', i18n.__(key));
} else {
$el.text(i18n.__(key));
}
});
populateCategories();
};
// Populate the Category list (This should be a template, though)
var populateCategories = function() {
var category_html = '';
var defaultCategory = 'all';
for(var key in i18n.__("genres") ) {
category_html += '
'+
''+ i18n.__("genres")[key] +''+
'';
}
jQuery('#catalog-select .categories').html(category_html);
};
// Remove unsupported subtitle language from object
App.Localization.filterSubtitle = function(langs) {
var filteredLang = {};
_.each(langs, function(data, lang){
var langInfo = App.Localization.languages[lang];
if(langInfo && langInfo.subtitle) {
filteredLang[lang] = data;
}
});
return filteredLang;
};
App.Localization.getTranslations = function() {
return _.chain(App.Localization.languages)
.keys()
.filter(function(code){
var lang = App.Localization.languages[code];
return _.isUndefined(lang.translation) || lang.translation;
}).value();
};
// Simple mapping to translate some API language to ISO 639 code
App.Localization.languageMapping = {
"albanian": "sq",
"arabic": "ar",
"bengali": "bn",
"brazilian-portuguese": "pt-br",
"bulgarian": "bg",
"bosnian": "bs",
"chinese": "zh",
"croatian": "hr",
"czech": "cs",
"danish": "da",
"dutch": "nl",
"english": "en",
"estonian": "et",
"farsi-persian": "fa",
"finnish": "fi",
"french": "fr",
"german": "de",
"greek": "el",
"hebrew": "he",
"hungarian": "hu",
"indonesian": "id",
"italian": "it",
"japanese": "ja",
"korean": "ko",
"lithuanian": "lt",
"macedonian": "mk",
"malay": "ms",
"norwegian": "no",
"polish": "pl",
"portuguese": "pt",
"romanian": "ro",
"russian": "ru",
"serbian": "sr",
"slovenian": "sl",
"spanish": "es",
"swedish": "sv",
"thai": "th",
"turkish": "tr",
"urdu": "ur",
"ukrainian": "uk",
"vietnamese": "vi"
};
// Language used in the system, edit to add subtitle support
App.Localization.languages = {
"ar": {
encoding: ['windows-1256']
},
"bg": {
display: "Български",
subtitle: true,
encoding: ['windows-1251', 'iso-8859-5']
},
"bn": {},
"bs": {
display: "Bosanski",
subtitle: true,
encoding: ['windows-1250'],
translation: false
},
"ca": {},
"cs": {
display: "Česky",
subtitle: true
},
"da": {
display: "Dansk",
subtitle: true
},
"de": {
display: "Deutsch",
subtitle: true,
encoding: ['iso-8859-1']
},
"el": {
encoding: ['iso-8859-7']
},
"en": {
display: "English",
subtitle: true
},
"es": {
display: "Español",
subtitle: true,
encoding: ['iso-8859-1']
},
"et": {
display: "Eesti",
subtitle: true,
translation: false
},
"eu": {},
"fa": {},
"fi": {
display: "Suomi",
subtitle: true,
encoding: ['iso-8859-1']
},
"fr": {
display: "Français",
subtitle: true,
encoding: ['iso-8859-1']
},
"he": {
display: "Hebrew",
subtitle: true,
encoding: ['windows-1255']
},
"hr": {
display: "Hrvatski",
subtitle: true,
encoding: ['windows-1250']
},
"hu": {
display: "Magyar",
subtitle: true,
encoding: ['iso-8859-2']
},
"is": {},
"it": {
display: "Italiano",
subtitle: true
},
"ja": {},
"kr": {},
"lt": {
display: "Lietuvių",
subtitle: true
},
"lv": {},
"mt": {},
"nl": {
display: "Nederlands",
subtitle: true,
encoding: ['iso-8859-1']
},
"no": {},
"pl": {
display: "Polish",
subtitle: true
},
"pt": {
display: "Português",
subtitle: true,
encoding: ['iso-8859-1']
},
"pt-br": {
display: "Português-Br",
subtitle: true,
encoding: ['iso-8859-1']
},
"ro": {
display: "Română",
subtitle: true,
encoding: ['iso-8859-16']
},
"ru": {
encoding: ['windows-1251', 'iso-8859-5']
},
"sk": {},
"sr": {
display: "Srpski",
subtitle: true,
encoding: ['windows-1250'],
translation: false
},
"sv": {},
"tr": {
display: "Türkçe",
subtitle: true,
encoding: ['iso-8859-9']
},
"uk": {
encoding: ['windows-1251', 'iso-8859-5']
},
"zh-cn": {},
"zh-tw": {}
};
// Handles language detection and internationalization
i18n.configure({
defaultLocale: 'en',
locales: App.Localization.getTranslations(),
directory: './language'
});
// Detect the language. The default is english
detectLanguage('en');