diff --git a/ROADMAP.MD b/ROADMAP.MD
index d78ca2e03..2d58ef475 100644
--- a/ROADMAP.MD
+++ b/ROADMAP.MD
@@ -5,7 +5,7 @@
- [x] Restore copy/paste plugin. Move setting onpaste handler to this plugin
- [x] Restore FileBrowser
- [x] Restore Inline toolbar for Image and Table 3.0.1
-- [ ] Auto choose language 3.0.2
+- [x] Auto choose language. Test language mode. 3.0.2
- [ ] Restore mobile version/Response mode. Switch buttons md - lg - sm 3.0.3
- [ ] Restore Iframe mode 3.0.4
- [ ] Restore themes 3.0.5
diff --git a/index.html b/index.html
index c30d5be9a..4aab87702 100644
--- a/index.html
+++ b/index.html
@@ -1,5 +1,5 @@
-
+
@@ -79,6 +79,7 @@
// url: 'http://localhost:8181/index-test.php'
// }
// },
+ debugLanguage: true,
buttons: Jodit.defaultOptions.buttons.concat([
{
name: 'insertDate',
diff --git a/src/Config.ts b/src/Config.ts
index fb7c7499a..ec6bebcaa 100644
--- a/src/Config.ts
+++ b/src/Config.ts
@@ -205,17 +205,31 @@ export class Config {
direction = '';
/**
- * @prop {string} language=en Language by default
+ * @prop {string} language=auto Language by default. if `auto` language set by document.documentElement.lang || (navigator.language && navigator.language.substr(0, 2)) || (navigator.browserLanguage && navigator.browserLanguage.substr(0, 2)) || 'en'
* @example
* // include in you page lang file
*
*
*/
- language = 'en';
+ language = 'auto';
+
+
+ /**
+ * @prop {boolean} debugLanguage=false if true all Lang.i18n(key) return `{key}`
+ * @example
+ *
+ */
+ debugLanguage = false;
/**
* @prop {PlainObject} i18n=Jodit.lang Collection of language pack data {en: {'Type something': 'Type something', ...}}
diff --git a/src/Jodit.ts b/src/Jodit.ts
index 08cce96af..1c604c55b 100644
--- a/src/Jodit.ts
+++ b/src/Jodit.ts
@@ -4,7 +4,7 @@ import Selection from './modules/Selection';
import Toolbar from './modules/Toolbar';
import Cookie from './modules/Cookie';
import * as consts from './constants';
-import {extend, inArray, dom, each, sprintf, css} from './modules/Helpers';
+import {extend, inArray, dom, each, sprintf, css, defaultLanguage} from './modules/Helpers';
import * as helper from './modules/Helpers';
import FileBrowser from "./modules/FileBrowser";
import Uploader from "./modules/Uploader";
@@ -21,7 +21,7 @@ export default class Jodit extends Component{
static plugins: any = {};
static modules: any = {};
static instances = {};
- static lang:any = {};
+ static lang: any = {};
components: any = [];
@@ -592,23 +592,26 @@ export default class Jodit extends Component{
* Jodit.defaultOptions.language = 'cs';
* console.log(Jodit.prototype.i18n('Hello world', 'mr.Perkins', 'day')) //Hello mr.Perkins Good day
*/
- i18n (key, ...params) {
+ i18n (key: string, ...params: Array) {
+ if (this.options.debugLanguage) {
+ return '{' + key + '}';
+ }
+
let store,
- args = Array.prototype.slice.call(params),
- parse = value => sprintf.apply(this, [value].concat(args));
+ parse = value => sprintf.apply(this, [value].concat(params));
- if (this.options !== undefined && Jodit.lang[this.options.language] !== undefined) {
- store = Jodit.lang[this.options.language];
+ if (this.options !== undefined && Jodit.lang[defaultLanguage(this.options.language)] !== undefined) {
+ store = Jodit.lang[defaultLanguage(this.options.language)];
} else {
- if (Jodit.lang[Jodit.defaultOptions.language] !== undefined) {
- store = Jodit.lang[Jodit.defaultOptions.language];
+ if (Jodit.lang[defaultLanguage(Jodit.defaultOptions.language)] !== undefined) {
+ store = Jodit.lang[defaultLanguage(Jodit.defaultOptions.language)];
} else {
store = Jodit.lang.en;
}
}
- if (this.options !== undefined && this.options.i18n[this.options.language] !== undefined && this.options.i18n[this.options.language][key]) {
- return parse(this.options.i18n[this.options.language][key]);
+ if (this.options !== undefined && this.options.i18n[defaultLanguage(this.options.language)] !== undefined && this.options.i18n[defaultLanguage(this.options.language)][key]) {
+ return parse(this.options.i18n[defaultLanguage(this.options.language)][key]);
}
if (typeof store[key] === 'string' && store[key]) {
diff --git a/src/index.ts b/src/index.ts
index 5996ee206..7ddbb42aa 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -25,7 +25,7 @@ requireAll(require.context('./styles/modules/', true, /\.less$/));
requireAll(require.context('./styles/widgets/', true, /\.less$/));
requireAll(require.context('./styles/plugins/', true, /\.less$/));
-let context = require.context('./styles/icons/', true, /\.svg$/);
+const context = require.context('./styles/icons/', true, /\.svg$/);
context.keys().forEach(function (key) {
Toolbar.icons[key.replace('.svg', '').replace('./', '')] = context.apply(this, arguments)
@@ -35,8 +35,13 @@ context.keys().forEach(function (key) {
.replace(//gm, '');
});
-let context2 = require.context('./modules/', true, /\.ts/);
+const context2 = require.context('./modules/', true, /\.ts/);
context2.keys().forEach(function (key) {
module.exports.modules[key.replace('.ts', '').replace('./', '')] = context2.apply(this, arguments).default;
});
-requireAll(require.context('./langs/', true, /\.ts$/));
+
+
+const context3 = require.context('./langs/', true, /\.ts$/);
+context3.keys().forEach(function (key) {
+ module.exports.lang[key.replace('.ts', '').replace('./', '')] = context3.apply(this, arguments).default;
+});
diff --git a/src/langs/de.js b/src/langs/de.js
deleted file mode 100644
index 9c1633668..000000000
--- a/src/langs/de.js
+++ /dev/null
@@ -1,103 +0,0 @@
-Jodit.lang.de = {
- 'Type something': 'Schreibe etwas',
- // About
- 'About Jodit': 'Über Jodit',
- 'Jodit Editor': 'Jodit Editor',
- 'Free Non-commercial Version': 'Freie Nicht-kommerzielle Version',
- 'Jodit User\'s Guide': 'Jodit Benutzerhandbuch',
- 'contains detailed help for using': 'enthält eine ausführliche Hilfe zur Verwendung des Editors',
- 'For information about the license, please go to our website:': 'Für Informationen über die Lizenz, gehen Sie bitte auf unsere Webseite:',
- 'Buy full version': 'Vollversion kaufen',
- 'Copyright © XDSoft.net - Chupurnov Valeriy. All rights reserved.': 'Copyright © XDSoft.net - Chupurnov Valeriy. Alle Rechte vorbehalten.',
-
- // Toolbar
- 'Anchor': 'Anker',
- 'Open in new tab': 'In neuer Registerkarte öffnen',
- 'Open editor in fullsize': 'Editor öffnen in voller Größe',
- 'Clear Formatting': 'Formatierung löschen',
- 'Fill color or set the text color': 'Hintergrund- oder Textfarbe ändern',
- 'Redo': 'Wiederholen',
- 'Undo': 'Rückgängig',
- 'Bold': 'Fett',
- 'Italic': 'Kursiv',
- 'Insert Unordered List': 'Ungeordnete Liste',
- 'Insert Ordered List': 'Sortierte Liste',
- 'Justify Center': 'zentrieren',
- 'Justify Full': 'Blocksatz',
- 'Justify Left': 'linksbündig',
- 'Justify Right': 'rechtsbündig',
- 'Insert Horizontal Line': 'Horizontale Linie',
- 'Insert Image': 'Bild',
- 'Insert link': 'Link',
- 'Font size': 'Schriftgröße',
- 'Font family': 'Schriftart',
-
- 'Insert format block': 'Vordefinierte Formatierung',
- 'Normal': 'Normal',
- 'Heading 1': 'Überschrift 1',
- 'Heading 2': 'Überschrift 2',
- 'Heading 3': 'Überschrift 3',
- 'Heading 4': 'Überschrift 4',
- 'Quote': 'Zitat',
- 'Code': 'Code',
-
- 'Insert': 'Einfügen',
- 'Insert table': 'Tabelle einfügen',
- 'Change mode': 'Modus ändern',
-
- //plugin Image
- 'Margins': 'Außenabstand',
- 'top': 'oben',
- 'right': 'rechts',
- 'bottom': 'unten',
- 'left': 'links',
- 'Styles': 'Stile',
- 'Classes': 'Klassen',
- 'Align': 'Ausrichten',
- 'Right': 'Rechts',
- 'Center': 'Zentriert',
- 'Left': 'Links',
- '--Not Set--': '--Nicht definiert--',
- 'Src': 'src',
- 'Title': 'Titel',
- 'Alternative': 'Alternativtext (alt)',
- 'Link': 'Link',
- 'Open link in new tab': 'Link in neuem Tab öffnen',
- 'Image': 'Bild',
- 'Advansed': 'Erweitert',
- 'Image properties': 'Bildeigenschaften',
- 'Cancel': 'Abbrechen',
- 'Ok': 'OK',
-
- // File Browser module
- 'File Browser': 'Dateibrowser',
- 'Error on load list': 'Fehler beim Laden der Liste',
- 'Error on load folders': 'Fehler beim Laden des Ordners',
- 'Are you shure?': 'Bist du sicher?',
- 'Enter Directory name': 'Geben Sie einen Verzeichnisnamen an',
- 'Create directory': 'Verzeichnis erstellen',
- 'type name': 'Modellname',
-
- // Form module
- 'Drop image': 'Bild löschen',
- 'or click': 'oder klicken Sie auf',
- 'Alternative text': 'Alternativer Text',
- 'Browse': 'Durchsuchen',
- 'Upload': 'Hochladen',
-
- 'Background': 'Hintergrund',
- 'Text': 'Text',
-
- // popap module
- 'Top': 'Oben',
- 'Middle': 'Mitte',
- 'Bottom': 'Unten',
- 'Insert column before': 'Spalte einfügen vor',
- 'Insert column after': 'Spalte einfügen nach',
- 'Insert row above': 'Zeile einfügen oben',
- 'Insert row below': 'Zeile unterhalb einfügen',
- 'Delete table': 'Tabelle löschen',
- 'Delete row': 'Zeile löschen',
- 'Delete column': 'Spalte löschen',
- 'Empty cell': 'Leere Zelle'
-};
diff --git a/src/langs/de.ts b/src/langs/de.ts
index 03253425f..9e3bc7dc3 100644
--- a/src/langs/de.ts
+++ b/src/langs/de.ts
@@ -1,5 +1,4 @@
-import Jodit from '../Jodit'
-export default Jodit.lang.de = {
+export default {
'Type something': 'Schreibe etwas',
// About
'About Jodit': 'Über Jodi',
diff --git a/src/langs/en.js b/src/langs/en.js
deleted file mode 100644
index 3522f89e4..000000000
--- a/src/langs/en.js
+++ /dev/null
@@ -1,95 +0,0 @@
-"use strict";
-exports.__esModule = true;
-var jodit_1 = require("../jodit");
-jodit_1["default"].lang.en = {
- 'Type something': 'Start writing...',
- // About
- 'About Jodit': '',
- 'Jodit Editor': '',
- 'Free Non-commercial Version': '',
- 'Jodit User\'s Guide': '',
- 'contains detailed help for using': '',
- 'For information about the license, please go to our website:': '',
- 'Buy full version': '',
- 'Copyright � XDSoft.net - Chupurnov Valeriy. All rights reserved.': '',
- // Toolbar
- 'Anchor': '',
- 'Open editor in fullsize': '',
- 'Clear Formatting': '',
- 'Fill color or set the text color': '',
- 'Redo': '',
- 'Undo': '',
- 'Bold': '',
- 'Italic': '',
- 'Insert Unordered List': '',
- 'Insert Ordered List': '',
- 'Justify Center': '',
- 'Justify Full': '',
- 'Justify Left': '',
- 'Justify Right': '',
- 'Insert Horizontal Line': '',
- 'Insert Image': '',
- 'Insert link': '',
- 'Font size': '',
- 'Font family': '',
- 'Insert format block': '',
- 'Normal': '',
- 'Heading 1': '',
- 'Heading 2': '',
- 'Heading 3': '',
- 'Heading 4': '',
- 'Quote': '',
- 'Code': '',
- 'Insert table': '',
- 'Change mode': '',
- //plugin Image
- 'Margins': '',
- 'top': '',
- 'right': '',
- 'bottom': '',
- 'left': '',
- 'Styles': '',
- 'Classes': '',
- 'Align': '',
- 'Right': '',
- 'Center': '',
- 'Left': '',
- '--Not Set--': '',
- 'Src': '',
- 'Title': '',
- 'Alternative': '',
- 'Link': '',
- 'Open link in new tab': '',
- 'Image': '',
- 'Advansed': '',
- 'Image properties': '',
- 'Cancel': '',
- 'Ok': '',
- // File Browser module
- 'File Browser': '',
- 'Error on load list': '',
- 'Error on load folders': '',
- 'Are you shure?': '',
- 'Enter Directory name': '',
- 'Create directory': '',
- 'type name': '',
- // Form module
- 'Drop image': '',
- 'or click': '',
- 'Alternative text': '',
- 'Browse': '',
- 'Background': '',
- 'Text': '',
- // popap module
- 'Top': '',
- 'Middle': '',
- 'Bottom': '',
- 'Insert column before': '',
- 'Insert column after': '',
- 'Insert row above': '',
- 'Insert row below': '',
- 'Delete table': '',
- 'Delete row': '',
- 'Delete column': '',
- 'Empty cell': ''
-};
diff --git a/src/langs/en.ts b/src/langs/en.ts
index 35e907fc3..7ce659570 100644
--- a/src/langs/en.ts
+++ b/src/langs/en.ts
@@ -1,5 +1,4 @@
-import Jodit from '../Jodit'
-export default Jodit.lang.en = {
+export default {
'Type something': 'Start writing...',
// About
'About Jodit': '',
diff --git a/src/langs/ru.js b/src/langs/ru.js
deleted file mode 100644
index e3eaf32b3..000000000
--- a/src/langs/ru.js
+++ /dev/null
@@ -1,101 +0,0 @@
-"use strict";
-exports.__esModule = true;
-var jodit_1 = require("../jodit");
-jodit_1["default"].lang.ru = {
- 'Type something': 'Напишите что-либо',
- // About
- 'About Jodit': 'О Jodit',
- 'Jodit Editor': 'Редактор Jodit',
- 'Free Non-commercial Version': 'Версия для не коммерческого использования',
- 'Jodit User\'s Guide': 'Jodit Руководство пользователя',
- 'contains detailed help for using': 'содержит детальную информацию по использованию',
- 'For information about the license, please go to our website:': 'Для получения сведений о лицензии , пожалуйста, перейдите на наш сайт:',
- 'Buy full version': 'Купить полную версию',
- 'Copyright © XDSoft.net - Chupurnov Valeriy. All rights reserved.': 'Авторские права © XDSoft.net - Чупурнов Валерий. Все права защищены.',
- // Toolbar
- 'Anchor': 'Анкор',
- 'Open in new tab': 'Открывать ссылку в новой вкладке',
- 'Open editor in fullsize': 'Открыть редактор в полном размере',
- 'Clear Formatting': 'Очистить форматирование',
- 'Fill color or set the text color': 'Цвет заливки или цвет текста',
- 'Redo': 'Повтор',
- 'Undo': 'Отмена',
- 'Bold': 'Жирный',
- 'Italic': 'Наклонный',
- 'Insert Unordered List': 'Вставка маркированного списка',
- 'Insert Ordered List': 'Вставить нумерованный список',
- 'Justify Center': 'Выровнять по центру',
- 'Justify Full': 'Выровнять по ширине',
- 'Justify Left': 'Выровнять по левому краю',
- 'Justify Right': 'Выровнять по правому краю',
- 'Insert Horizontal Line': 'Вставить горизонтальную линию',
- 'Insert Image': 'Вставить изображение',
- 'Insert link': 'Вставить ссылку',
- 'Font size': 'Размер шрифта',
- 'Font family': 'Шрифт',
- 'Insert format block': 'Вставить блочный элемент',
- 'Normal': 'Нормальный текст',
- 'Heading 1': 'Заголовок 1',
- 'Heading 2': 'Заголовок 2',
- 'Heading 3': 'Заголовок 3',
- 'Heading 4': 'Заголовок 4',
- 'Quote': 'Цитата',
- 'Code': 'Код',
- 'Insert': 'Вставить',
- 'Insert table': 'Вставить таблицу',
- 'Change mode': 'Источник',
- //plugin Image
- 'Margins': 'Отступы',
- 'top': 'сверху',
- 'right': 'справа',
- 'bottom': 'снизу',
- 'left': 'слева',
- 'Styles': 'Стили',
- 'Classes': 'Классы',
- 'Align': 'Выравнивание',
- 'Right': 'По правому краю',
- 'Center': 'По центру',
- 'Left': 'По левому краю',
- '--Not Set--': '--не устанавливать--',
- 'Src': 'src',
- 'Title': 'Заголовок',
- 'Alternative': 'Альтернативный текст (alt)',
- 'Link': 'Ссылка',
- 'Open link in new tab': 'Открывать ссылку в новом окне',
- 'Image': 'Изображение',
- 'Advansed': 'Расширенные',
- 'Image properties': 'Свойства изображения',
- 'Cancel': 'Отмена',
- 'Ok': 'Ok',
- //plugin insertHTML
- 'Your code is similar to HTML. Paste as HTML?': 'Ваш текст, который вы пытаетесь вставить похож на HTML. Вставить его как HTML?',
- 'Paste as HTML': 'Вставить как HTML?',
- // File Browser module
- 'File Browser': 'Браузер файлов',
- 'Error on load list': 'Ошибка при загрузке списка изображений',
- 'Error on load folders': 'Ошибка при загрузке списка директорий',
- 'Are you shure?': 'Вы уверены?',
- 'Enter Directory name': 'Введите название директории',
- 'Create directory': 'Создать директорию',
- 'type name': 'введите название',
- // Form module
- 'Drop image': 'Перетащите сюда изображение',
- 'or click': 'или нажмите',
- 'Alternative text': 'Альтернативный текст',
- 'Browse': 'Сервер',
- 'Upload': 'Загрузка',
- 'Background': 'Фон',
- 'Text': 'Текст',
- // popap module
- 'Top': ' К верху',
- 'Middle': 'По середине',
- 'Bottom': 'К низу',
- 'Insert column before': 'Вставить столбец до',
- 'Insert column after': 'Вставить столбец после',
- 'Insert row above': 'Вставить ряд выше',
- 'Insert row below': 'Вставить ряд ниже',
- 'Delete table': 'Удалить таблицу',
- 'Delete row': 'Удалять ряд',
- 'Delete column': 'Удалить столбец',
- 'Empty cell': 'Отчистить ячейку'
-};
diff --git a/src/langs/ru.ts b/src/langs/ru.ts
index 4f3d8be73..74136cddf 100644
--- a/src/langs/ru.ts
+++ b/src/langs/ru.ts
@@ -1,5 +1,4 @@
-import Jodit from '../Jodit';
-export default Jodit.lang.ru = {
+export default {
'Type something': 'Напишите что-либо',
// About
'About Jodit': 'О Jodit',
diff --git a/src/modules/Helpers.ts b/src/modules/Helpers.ts
index dcfd17697..71c65220f 100644
--- a/src/modules/Helpers.ts
+++ b/src/modules/Helpers.ts
@@ -896,4 +896,9 @@ export const val = (elm: HTMLInputElement|HTMLElement, selector: string, value ?
child.value = value;
}
return child.value;
-};
\ No newline at end of file
+};
+
+
+export const defaultLanguage = (language?: string): string => (
+ (language === 'auto' || language === undefined) ? document.documentElement.lang || (navigator.language && navigator.language.substr(0, 2)) || (navigator['browserLanguage'] && navigator['browserLanguage'].substr(0, 2)) || 'en' : language
+);
\ No newline at end of file
diff --git a/src/modules/Widget.ts b/src/modules/Widget.ts
index 962d16185..65345df89 100644
--- a/src/modules/Widget.ts
+++ b/src/modules/Widget.ts
@@ -125,7 +125,7 @@ export namespace Widget {
box.appendChild(buttons);
box.appendChild(tabBox);
- each(tabs, (name, tabOptions) => {
+ each(tabs, (name: string, tabOptions: Function|HTMLElement) => {
const tab = dom(''),
button = dom('');
@@ -137,6 +137,7 @@ export namespace Widget {
} else {
tab.appendChild(dom(''));
}
+
tabBox.appendChild(tab);
button.addEventListener('mousedown', (e) => {
$$('a', buttons).forEach((a) => {