JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.0
[ckeditor.git] / _source / core / lang.js
diff --git a/_source/core/lang.js b/_source/core/lang.js
new file mode 100644 (file)
index 0000000..6ada788
--- /dev/null
@@ -0,0 +1,147 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function()\r
+{\r
+       var loadedLangs = {};\r
+\r
+       CKEDITOR.lang =\r
+       {\r
+               /**\r
+                * The list of languages available in the editor core.\r
+                * @type Object\r
+                * @example\r
+                * alert( CKEDITOR.lang.en );  // "true"\r
+                */\r
+               languages :\r
+               {\r
+                       'af'    : 1,\r
+                       'ar'    : 1,\r
+                       'bg'    : 1,\r
+                       'bn'    : 1,\r
+                       'bs'    : 1,\r
+                       'ca'    : 1,\r
+                       'cs'    : 1,\r
+                       'da'    : 1,\r
+                       'de'    : 1,\r
+                       'el'    : 1,\r
+                       'en-au' : 1,\r
+                       'en-ca' : 1,\r
+                       'en-uk' : 1,\r
+                       'en'    : 1,\r
+                       'eo'    : 1,\r
+                       'es'    : 1,\r
+                       'et'    : 1,\r
+                       'eu'    : 1,\r
+                       'fa'    : 1,\r
+                       'fi'    : 1,\r
+                       'fo'    : 1,\r
+                       'fr-ca' : 1,\r
+                       'fr'    : 1,\r
+                       'gl'    : 1,\r
+                       'gu'    : 1,\r
+                       'he'    : 1,\r
+                       'hi'    : 1,\r
+                       'hr'    : 1,\r
+                       'hu'    : 1,\r
+                       'is'    : 1,\r
+                       'it'    : 1,\r
+                       'ja'    : 1,\r
+                       'km'    : 1,\r
+                       'ko'    : 1,\r
+                       'lt'    : 1,\r
+                       'lv'    : 1,\r
+                       'mn'    : 1,\r
+                       'ms'    : 1,\r
+                       'nb'    : 1,\r
+                       'nl'    : 1,\r
+                       'no'    : 1,\r
+                       'pl'    : 1,\r
+                       'pt-br' : 1,\r
+                       'pt'    : 1,\r
+                       'ro'    : 1,\r
+                       'ru'    : 1,\r
+                       'sk'    : 1,\r
+                       'sl'    : 1,\r
+                       'sr-latn'       : 1,\r
+                       'sr'    : 1,\r
+                       'sv'    : 1,\r
+                       'th'    : 1,\r
+                       'tr'    : 1,\r
+                       'uk'    : 1,\r
+                       'vi'    : 1,\r
+                       'zh-cn' : 1,\r
+                       'zh'    : 1\r
+               },\r
+\r
+               /**\r
+                * Loads a specific language file, or auto detect it. A callback is\r
+                * then called when the file gets loaded.\r
+                * @param {String} languageCode The code of the language file to be\r
+                *              loaded. If "autoDetect" is set to true, this language will be\r
+                *              used as the default one, if the detect language is not\r
+                *              available in the core.\r
+                * @param {Boolean} autoDetect Indicates that the function must try to\r
+                *              detect the user language and load it instead.\r
+                * @param {Function} callback The function to be called once the\r
+                *              language file is loaded. Two parameters are passed to this\r
+                *              function: the language code and the loaded language entries.\r
+                * @example\r
+                */\r
+               load : function( languageCode, defaultLanguage, callback )\r
+               {\r
+                       if ( !languageCode )\r
+                               languageCode = this.detect( defaultLanguage );\r
+\r
+                       if ( !this[ languageCode ] )\r
+                       {\r
+                               CKEDITOR.scriptLoader.load( CKEDITOR.getUrl(\r
+                                       'lang/' + languageCode + '.js' ),\r
+                                       function()\r
+                                               {\r
+                                                       callback( languageCode, this[ languageCode ] );\r
+                                               }\r
+                                               , this );\r
+                       }\r
+                       else\r
+                               callback( languageCode, this[ languageCode ] );\r
+               },\r
+\r
+               /**\r
+                * Returns the language that best fit the user language. For example,\r
+                * suppose that the user language is "pt-br". If this language is\r
+                * supported by the editor, it is returned. Otherwise, if only "pt" is\r
+                * supported, it is returned instead. If none of the previous are\r
+                * supported, a default language is then returned.\r
+                * @param {String} defaultLanguage The default language to be returned\r
+                *              if the user language is not supported.\r
+                * @returns {String} The detected language code.\r
+                * @example\r
+                * alert( CKEDITOR.lang.detect( 'en' ) );  // e.g., in a German browser: "de"\r
+                */\r
+               detect : function( defaultLanguage )\r
+               {\r
+                       var languages = this.languages;\r
+\r
+                       var parts = ( navigator.userLanguage || navigator.language )\r
+                                       .toLowerCase()\r
+                                       .match( /([a-z]+)(?:-([a-z]+))?/ ),\r
+                               lang = parts[1],\r
+                               locale = parts[2];\r
+\r
+                       if ( languages[ lang + '-' + locale ] )\r
+                               lang = lang + '-' + locale;\r
+                       else if ( !languages[ lang ] )\r
+                               lang = null;\r
+\r
+                       CKEDITOR.lang.detect = lang ?\r
+                               function() { return lang; } :\r
+                               function( defaultLanguage ) { return defaultLanguage; };\r
+\r
+                       return lang || defaultLanguage;\r
+               }\r
+       };\r
+\r
+})();\r