X-Git-Url: https://scm.cri.ensmp.fr/git/ckeditor.git/blobdiff_plain/256592bf803e851aa7fc953e08a6e9e58d970f8c..871bad8291b6dbc29d489d95d185458caab25158:/skins/ckeditor/_source/core/lang.js diff --git a/skins/ckeditor/_source/core/lang.js b/skins/ckeditor/_source/core/lang.js new file mode 100644 index 0000000..19b903d --- /dev/null +++ b/skins/ckeditor/_source/core/lang.js @@ -0,0 +1,157 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function() +{ + var loadedLangs = {}; + + /** + * @namespace Holds language related functions. + */ + CKEDITOR.lang = + { + /** + * The list of languages available in the editor core. + * @type Object + * @example + * alert( CKEDITOR.lang.en ); // "true" + */ + languages : + { + 'af' : 1, + 'ar' : 1, + 'bg' : 1, + 'bn' : 1, + 'bs' : 1, + 'ca' : 1, + 'cs' : 1, + 'cy' : 1, + 'da' : 1, + 'de' : 1, + 'el' : 1, + 'en-au' : 1, + 'en-ca' : 1, + 'en-gb' : 1, + 'en' : 1, + 'eo' : 1, + 'es' : 1, + 'et' : 1, + 'eu' : 1, + 'fa' : 1, + 'fi' : 1, + 'fo' : 1, + 'fr-ca' : 1, + 'fr' : 1, + 'gl' : 1, + 'gu' : 1, + 'he' : 1, + 'hi' : 1, + 'hr' : 1, + 'hu' : 1, + 'is' : 1, + 'it' : 1, + 'ja' : 1, + 'ka' : 1, + 'km' : 1, + 'ko' : 1, + 'lt' : 1, + 'lv' : 1, + 'mn' : 1, + 'ms' : 1, + 'nb' : 1, + 'nl' : 1, + 'no' : 1, + 'pl' : 1, + 'pt-br' : 1, + 'pt' : 1, + 'ro' : 1, + 'ru' : 1, + 'sk' : 1, + 'sl' : 1, + 'sr-latn' : 1, + 'sr' : 1, + 'sv' : 1, + 'th' : 1, + 'tr' : 1, + 'uk' : 1, + 'vi' : 1, + 'zh-cn' : 1, + 'zh' : 1 + }, + + /** + * Loads a specific language file, or auto detect it. A callback is + * then called when the file gets loaded. + * @param {String} languageCode The code of the language file to be + * loaded. If null or empty, autodetection will be performed. The + * same happens if the language is not supported. + * @param {String} defaultLanguage The language to be used if + * languageCode is not supported or if the autodetection fails. + * @param {Function} callback A function to be called once the + * language file is loaded. Two parameters are passed to this + * function: the language code and the loaded language entries. + * @example + */ + load : function( languageCode, defaultLanguage, callback ) + { + // If no languageCode - fallback to browser or default. + // If languageCode - fallback to no-localized version or default. + if ( !languageCode || !CKEDITOR.lang.languages[ languageCode ] ) + languageCode = this.detect( defaultLanguage, languageCode ); + + if ( !this[ languageCode ] ) + { + CKEDITOR.scriptLoader.load( CKEDITOR.getUrl( + '_source/' + // @Packager.RemoveLine + 'lang/' + languageCode + '.js' ), + function() + { + callback( languageCode, this[ languageCode ] ); + } + , this ); + } + else + callback( languageCode, this[ languageCode ] ); + }, + + /** + * Returns the language that best fit the user language. For example, + * suppose that the user language is "pt-br". If this language is + * supported by the editor, it is returned. Otherwise, if only "pt" is + * supported, it is returned instead. If none of the previous are + * supported, a default language is then returned. + * @param {String} defaultLanguage The default language to be returned + * if the user language is not supported. + * @param {String} [probeLanguage] A language code to try to use, + * instead of the browser based autodetection. + * @returns {String} The detected language code. + * @example + * alert( CKEDITOR.lang.detect( 'en' ) ); // e.g., in a German browser: "de" + */ + detect : function( defaultLanguage, probeLanguage ) + { + var languages = this.languages; + probeLanguage = probeLanguage || navigator.userLanguage || navigator.language; + + var parts = probeLanguage + .toLowerCase() + .match( /([a-z]+)(?:-([a-z]+))?/ ), + lang = parts[1], + locale = parts[2]; + + if ( languages[ lang + '-' + locale ] ) + lang = lang + '-' + locale; + else if ( !languages[ lang ] ) + lang = null; + + CKEDITOR.lang.detect = lang ? + function() { return lang; } : + function( defaultLanguage ) { return defaultLanguage; }; + + return lang || defaultLanguage; + } + }; + +})();