From a4bde513826f6ab63824ce38a3fced2d2d5bc42c Mon Sep 17 00:00:00 2001 From: Chupurnov Valeriy Date: Tue, 1 Aug 2017 13:23:43 +0500 Subject: [PATCH] Added debugLanguage option and set default language=auto --- ROADMAP.MD | 2 +- index.html | 3 +- src/Config.ts | 20 ++++++-- src/Jodit.ts | 25 +++++----- src/index.ts | 11 +++-- src/langs/de.js | 103 ----------------------------------------- src/langs/de.ts | 3 +- src/langs/en.js | 95 ------------------------------------- src/langs/en.ts | 3 +- src/langs/ru.js | 101 ---------------------------------------- src/langs/ru.ts | 3 +- src/modules/Helpers.ts | 7 ++- src/modules/Widget.ts | 3 +- 13 files changed, 53 insertions(+), 326 deletions(-) delete mode 100644 src/langs/de.js delete mode 100644 src/langs/en.js delete mode 100644 src/langs/ru.js 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) => {