JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.6.6.1
[ckeditor.git] / _source / core / lang.js
1 /*\r
2 Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.\r
3 For licensing, see LICENSE.html or http://ckeditor.com/license\r
4 */\r
5 \r
6 (function()\r
7 {\r
8         var loadedLangs = {};\r
9 \r
10         /**\r
11          * @namespace Holds language related functions.\r
12          */\r
13         CKEDITOR.lang =\r
14         {\r
15                 /**\r
16                  * The list of languages available in the editor core.\r
17                  * @type Object\r
18                  * @example\r
19                  * alert( CKEDITOR.lang.en );  // "true"\r
20                  */\r
21                 languages :\r
22                 {\r
23                         'af'    : 1,\r
24                         'ar'    : 1,\r
25                         'bg'    : 1,\r
26                         'bn'    : 1,\r
27                         'bs'    : 1,\r
28                         'ca'    : 1,\r
29                         'cs'    : 1,\r
30                         'cy'    : 1,\r
31                         'da'    : 1,\r
32                         'de'    : 1,\r
33                         'el'    : 1,\r
34                         'en-au' : 1,\r
35                         'en-ca' : 1,\r
36                         'en-gb' : 1,\r
37                         'en'    : 1,\r
38                         'eo'    : 1,\r
39                         'es'    : 1,\r
40                         'et'    : 1,\r
41                         'eu'    : 1,\r
42                         'fa'    : 1,\r
43                         'fi'    : 1,\r
44                         'fo'    : 1,\r
45                         'fr-ca' : 1,\r
46                         'fr'    : 1,\r
47                         'gl'    : 1,\r
48                         'gu'    : 1,\r
49                         'he'    : 1,\r
50                         'hi'    : 1,\r
51                         'hr'    : 1,\r
52                         'hu'    : 1,\r
53                         'is'    : 1,\r
54                         'it'    : 1,\r
55                         'ja'    : 1,\r
56                         'ka'    : 1,\r
57                         'km'    : 1,\r
58                         'ko'    : 1,\r
59                         'ku'    : 1,\r
60                         'lt'    : 1,\r
61                         'lv'    : 1,\r
62                         'mn'    : 1,\r
63                         'ms'    : 1,\r
64                         'nb'    : 1,\r
65                         'nl'    : 1,\r
66                         'no'    : 1,\r
67                         'pl'    : 1,\r
68                         'pt-br' : 1,\r
69                         'pt'    : 1,\r
70                         'ro'    : 1,\r
71                         'ru'    : 1,\r
72                         'sk'    : 1,\r
73                         'sl'    : 1,\r
74                         'sr-latn'       : 1,\r
75                         'sr'    : 1,\r
76                         'sv'    : 1,\r
77                         'th'    : 1,\r
78                         'tr'    : 1,\r
79                         'ug'    : 1,\r
80                         'uk'    : 1,\r
81                         'vi'    : 1,\r
82                         'zh-cn' : 1,\r
83                         'zh'    : 1\r
84                 },\r
85 \r
86                 /**\r
87                  * Loads a specific language file, or auto detect it. A callback is\r
88                  * then called when the file gets loaded.\r
89                  * @param {String} languageCode The code of the language file to be\r
90                  *              loaded. If null or empty, autodetection will be performed. The\r
91                  *              same happens if the language is not supported.\r
92                  * @param {String} defaultLanguage The language to be used if\r
93                  *              languageCode is not supported or if the autodetection fails.\r
94                  * @param {Function} callback A function to be called once the\r
95                  *              language file is loaded. Two parameters are passed to this\r
96                  *              function: the language code and the loaded language entries.\r
97                  * @example\r
98                  */\r
99                 load : function( languageCode, defaultLanguage, callback )\r
100                 {\r
101                         // If no languageCode - fallback to browser or default.\r
102                         // If languageCode - fallback to no-localized version or default.\r
103                         if ( !languageCode || !CKEDITOR.lang.languages[ languageCode ] )\r
104                                 languageCode = this.detect( defaultLanguage, languageCode );\r
105 \r
106                         if ( !this[ languageCode ] )\r
107                         {\r
108                                 CKEDITOR.scriptLoader.load( CKEDITOR.getUrl(\r
109                                         '_source/' +    // @Packager.RemoveLine\r
110                                         'lang/' + languageCode + '.js' ),\r
111                                         function()\r
112                                                 {\r
113                                                         callback( languageCode, this[ languageCode ] );\r
114                                                 }\r
115                                                 , this );\r
116                         }\r
117                         else\r
118                                 callback( languageCode, this[ languageCode ] );\r
119                 },\r
120 \r
121                 /**\r
122                  * Returns the language that best fit the user language. For example,\r
123                  * suppose that the user language is "pt-br". If this language is\r
124                  * supported by the editor, it is returned. Otherwise, if only "pt" is\r
125                  * supported, it is returned instead. If none of the previous are\r
126                  * supported, a default language is then returned.\r
127                  * @param {String} defaultLanguage The default language to be returned\r
128                  *              if the user language is not supported.\r
129                  * @param {String} [probeLanguage] A language code to try to use,\r
130                  *              instead of the browser based autodetection.\r
131                  * @returns {String} The detected language code.\r
132                  * @example\r
133                  * alert( CKEDITOR.lang.detect( 'en' ) );  // e.g., in a German browser: "de"\r
134                  */\r
135                 detect : function( defaultLanguage, probeLanguage )\r
136                 {\r
137                         var languages = this.languages;\r
138                         probeLanguage = probeLanguage || navigator.userLanguage || navigator.language || defaultLanguage;\r
139 \r
140                         var parts = probeLanguage\r
141                                         .toLowerCase()\r
142                                         .match( /([a-z]+)(?:-([a-z]+))?/ ),\r
143                                 lang = parts[1],\r
144                                 locale = parts[2];\r
145 \r
146                         if ( languages[ lang + '-' + locale ] )\r
147                                 lang = lang + '-' + locale;\r
148                         else if ( !languages[ lang ] )\r
149                                 lang = null;\r
150 \r
151                         CKEDITOR.lang.detect = lang ?\r
152                                 function() { return lang; } :\r
153                                 function( defaultLanguage ) { return defaultLanguage; };\r
154 \r
155                         return lang || defaultLanguage;\r
156                 }\r
157         };\r
158 \r
159 })();\r