Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • suit/tinymce
  • mhuber84/tinymce
  • jmverges/tinymce
  • vaxul/tinymce
  • agrein/tinymce
  • mbrodala/tinymce
6 results
Show changes
Commits on Source (81)
Showing
with 1338 additions and 1286 deletions
<?php
namespace SGalinski\Tinymce;
/***************************************************************
* Copyright notice
*
* (c) sgalinski Internet Services (http://www.sgalinski.de)
* (c) sgalinski Internet Services (https://www.sgalinski.de)
*
* All rights reserved
*
......@@ -24,27 +26,35 @@
* This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
use TYPO3\CMS\Backend\Utility\BackendUtility;
use TYPO3\CMS\Core\Page\PageRenderer;
use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Lang\LanguageService;
use TYPO3\CMS\Core\Localization\Locales;
/**
* tinyMCE initialisation class
*
* Usage:
* $tinyMCE = t3lib_div::makeInstance('tinyMCE');
* $tinyMCE->loadConfiguration($configuration);
* $javascript = $tinyMCE->getJS();
* Usage: *
* // @var Loader $tinyMceLoader
* $tinyMceLoader = GeneralUtility::makeInstance('SGalinski\Tinymce\Loader');
* $tinyMceLoader->loadConfiguration($configurationFile)
* $tinyMceLoader->loadJsViaPageRenderer($GLOBALS['TSFE']->getPageRenderer());
*
* Basic Configuration:
* Basic Configuration: (= content of $configurationFile)
*
* tinymce.init({
* selector: 'textarea'
* });
*/
class tinyMCE {
class Loader {
/**
* TinyMCE configuration
*
* @var array
*/
protected $tinymceConfiguration = array();
protected $tinymceConfiguration = [];
/**
* Initialization flag
......@@ -53,10 +63,35 @@ class tinyMCE {
*/
static protected $init = FALSE;
/**
* That's a map, which contains the differences in relation to the tinyMce languages.
*
* @var array
*/
protected $typo3LanguagesDifferencesToTinyMceLanguagesMap = [
'bg' => 'bg_BG',
'fr' => 'fr_FR',
'fr_CA' => 'fr_FR',
'kl' => 'gl',
'he' => 'he_IL',
'hi' => 'hi_IN',
'hu' => 'hu_HU',
'is' => 'is_IS',
'km' => 'km_KH',
'no' => 'nb_NO',
'pt' => 'pt_PT',
'sl' => 'sl_SI',
'sv' => 'sv_SE',
'th' => 'th_TH',
'zh' => 'zh_TW',
];
/**
* @param string $configuration file reference or configuration string (defaults to basic configuration)
* @param boolean $forceLanguage set this to true if you want to force your language set by the configuration
*
* @return void
* @throws \InvalidArgumentException
*/
public function loadConfiguration($configuration = '', $forceLanguage = FALSE) {
self::$init = FALSE;
......@@ -70,31 +105,35 @@ class tinyMCE {
* Calculates and sets the current language
*
* @return void
* @throws \InvalidArgumentException
*/
protected function setLanguage() {
/** @var $languageInstance language */
/** @var $languageInstance LanguageService */
$languageInstance = (TYPO3_MODE === 'FE' ? $GLOBALS['TSFE'] : $GLOBALS['LANG']);
$languageKey = $languageInstance->lang;
$groupOrUserProps = t3lib_BEfunc::getModTSconfig('', 'tx_tinyMCE');
if (trim($groupOrUserProps['properties']['prefLang']) !== '') {
$languageKey = $groupOrUserProps['properties']['prefLang'];
if (TYPO3_MODE === 'BE') {
$groupOrUserProps = BackendUtility::getModTSconfig('', 'tx_tinyMCE');
if (trim($groupOrUserProps['properties']['prefLang']) !== '') {
$languageKey = $groupOrUserProps['properties']['prefLang'];
}
}
// language conversion from TLD to iso631
if (class_exists('t3lib_l10n_Locales')) {
/** @var $locales t3lib_l10n_Locales */
$locales = t3lib_div::makeInstance('t3lib_l10n_Locales');
$isoArray = $locales->getIsoMapping();
} else {
$isoArray = $languageInstance->csConvObj->isoArray;
}
$locales = GeneralUtility::makeInstance(Locales::class);
Locales::initialize();
$isoArray = (array) $locales->getIsoMapping();
if (array_key_exists($languageKey, $isoArray)) {
$languageKey = $isoArray[$languageKey];
}
$languageFile = PATH_site . t3lib_extMgm::siteRelPath('tinymce') . 'tinymce/langs/' . $languageKey . '.js';
if (array_key_exists($languageKey, $this->typo3LanguagesDifferencesToTinyMceLanguagesMap)) {
$languageKey = $this->typo3LanguagesDifferencesToTinyMceLanguagesMap[$languageKey];
}
$languageFile = PATH_site . ExtensionManagementUtility::siteRelPath('tinymce') .
'tinymce_node_modules/tinymce/langs/' . $languageKey . '.js';
if (!is_file($languageFile)) {
$languageKey = 'en';
}
......@@ -103,65 +142,80 @@ class tinyMCE {
}
/**
* Returns a file that contains the tinymce configuration
* Returns a file that contains the tinyMCE configuration
*
* Note: The load dom event cannot be used, because e.g. IRRE adds the javascript
* later on. This leads to code that is never executed. The interval timer hack fixes this
* issue.
*
* @param bool $loadConfigurationWithTimer useful in relation with AJAX
* @return string
* @throws \UnexpectedValueException
*/
protected function getConfiguration($loadConfigurationWithTimer = FALSE) {
// $configurationOptions = array();
// foreach ($this->tinymceConfiguration['strings'] as $option => $value) {
// $value = '\'' . str_replace('\'', '\\\'', $value) . '\'';
// $configurationOptions[] = "\t" . $option . ': ' . $value;
// }
//
// foreach ($this->tinymceConfiguration['boolAndInt'] as $option => $value) {
// if (is_numeric($value)) {
// if (strpos($value, '.')) {
// $value = (float) $value;
// } else {
// $value = (int) $value;
// }
// }
// $configurationOptions[] = "\t" . $option . ': ' . $value;
// }
//
// foreach ($this->tinymceConfiguration['arrays'] as $option => $value) {
// $configurationOptions[] = "\t" . $option . ': ' . $value;
// }
//
// foreach ($this->tinymceConfiguration['objects'] as $option => $value) {
// $configurationOptions[] = "\t" . $option . ': ' . $value;
// }
//
// foreach ($this->tinymceConfiguration['functions'] as $option => $value) {
// $configurationOptions[] = "\t" . $option . ': ' . $value;
// }
// $configuration .= implode(",\n", $configurationOptions);
protected function getConfiguration(): string {
$configuration = $this->tinymceConfiguration['preJS'];
$configuration .= '
var executeTinymceInit = function() {
if (!window.tinymce || (window.tinymce && !window.tinymce.init)) {
var SG = SG || {};
SG.domIsReady = (function(domIsReady) {
var isBrowserIeOrNot = function() {
return (!document.attachEvent || typeof document.attachEvent === "undefined" ? "not-ie" : "ie");
}
domIsReady = function(callback) {
if(callback && typeof callback === "function"){
if(isBrowserIeOrNot() !== "ie") {
document.addEventListener("DOMContentLoaded", function() {
return callback();
});
} else {
document.attachEvent("onreadystatechange", function() {
if(document.readyState === "complete") {
return callback();
}
});
}
} else {
console.error("The callback is not a function!");
}
}
return domIsReady;
})(SG.domIsReady || {});
SG.initTinyMceLoadFunction = function() {
if (SG.initializedTinyMceLoaderInstance) {
if (SG.initTinyMceLoadInterval) {
clearInterval(SG.initTinyMceLoadInterval);
}
return;
}
window.tinymce.init({
' . $this->replaceTypo3Paths($this->tinymceConfiguration['configurationData']) . '
});
};
executeTinymceInit();
if (SG.TinyMceLoader && window.tinymce && window.tinymce.init) {
SG.initializedTinyMceLoaderInstance = new SG.TinyMceLoader(window.tinymce, {
' . $this->replaceTypo3Paths($this->tinymceConfiguration['configurationData']) . '
});
if (SG.initTinyMceLoadInterval) {
clearInterval(SG.initTinyMceLoadInterval);
}
}
};
SG.domIsReady(function() {
SG.initTinyMceLoadFunction();
});
// the content ready event is not thrown if RTE fields are loaded via IRRE
// so we need to check at least after some time if the function was really called
SG.initTinyMceLoadInterval = window.setInterval(SG.initTinyMceLoadFunction, 1500);
';
if ($loadConfigurationWithTimer) {
$configuration .= 'window.setInterval(executeTinymceInit, 1000);' . "\n";
}
$configuration .= $this->tinymceConfiguration['postJS'];
$filename = 'tinymceConfiguration' . sha1($configuration) . '.js';
$file = PATH_site . 'typo3temp/' . $filename;
if (!is_file($file)) {
file_put_contents($file, $configuration);
t3lib_div::fixPermissions($file);
GeneralUtility::fixPermissions($file);
}
return $this->getPath($file, TRUE);
......@@ -170,19 +224,29 @@ class tinyMCE {
/**
* Returns the needed javascript inclusion code
*
* Note: This function can only be called once for each loaded configuration.
* Note: This function can only be called once.
*
* @param bool $loadConfigurationWithTimer
* @return string
*/
public function getJS($loadConfigurationWithTimer = FALSE) {
public function getJS(): string {
$output = '';
if (!self::$init) {
self::$init = TRUE;
$script = $GLOBALS['BACK_PATH'] . t3lib_extMgm::extRelPath('tinymce') . 'tinymce/tinymce.min.js';
$pathToTinyMceExtension = ExtensionManagementUtility::extRelPath('tinymce');
$script = $GLOBALS['BACK_PATH'] . $pathToTinyMceExtension . 'tinymce_node_modules/tinymce/tinymce.min.js';
$output = '<script type="text/javascript" src="' . $script . '"></script>';
$script = $this->getConfiguration($loadConfigurationWithTimer);
$script = $GLOBALS['BACK_PATH'] . $pathToTinyMceExtension . 'Contrib/WeakMap/WeakMap.js';
$output .= '<script type="text/javascript" src="' . $script . '"></script>';
$script = $GLOBALS['BACK_PATH'] . $pathToTinyMceExtension . 'Contrib/MutationObserver/MutationObserver.js';
$output .= '<script type="text/javascript" src="' . $script . '"></script>';
$script = $GLOBALS['BACK_PATH'] . $pathToTinyMceExtension . 'Resources/Public/JavaScript/Loader.js';
$output .= '<script type="text/javascript" src="' . $script . '"></script>';
$script = $this->getConfiguration();
$output .= '<script type="text/javascript" src="' . $script . '"></script>';
}
......@@ -192,74 +256,107 @@ class tinyMCE {
/**
* Loads the required javascript via the given page renderer instance
*
* @param t3lib_PageRenderer $pageRenderer
* @param bool $loadConfigurationWithTimer
* Note: This function can only be called once.
*
* @param PageRenderer $pageRenderer
* @return void
*/
public function loadJsViaPageRenderer(t3lib_PageRenderer $pageRenderer, $loadConfigurationWithTimer = FALSE) {
public function loadJsViaPageRenderer(PageRenderer $pageRenderer) {
if (self::$init) {
return;
}
self::$init = TRUE;
$script = $GLOBALS['BACK_PATH'] . t3lib_extMgm::extRelPath('tinymce') . 'tinymce/tinymce.min.js';
$pathToTinyMceExtension = ExtensionManagementUtility::extRelPath('tinymce');
$script = $GLOBALS['BACK_PATH'] . $pathToTinyMceExtension . 'tinymce_node_modules/tinymce/tinymce.min.js';
$pageRenderer->addJsLibrary('tinymce', $script, 'text/javascript', FALSE, TRUE, '', TRUE);
$script = $this->getConfiguration($loadConfigurationWithTimer);
$script = $GLOBALS['BACK_PATH'] . $pathToTinyMceExtension . 'Contrib/MutationObserver/MutationObserver.js';
$pageRenderer->addJsLibrary('MutationObserver', $script, 'text/javascript', FALSE, TRUE, '', TRUE);
$script = $GLOBALS['BACK_PATH'] . $pathToTinyMceExtension . 'Contrib/WeakMap/WeakMap.js';
$pageRenderer->addJsLibrary('WeakMap', $script, 'text/javascript', FALSE, TRUE, '', TRUE);
$script = $GLOBALS['BACK_PATH'] . $pathToTinyMceExtension . 'Resources/Public/JavaScript/Loader.js';
$pageRenderer->addJsFile($script, 'text/javascript', FALSE, TRUE, '', TRUE);
$script = $this->getConfiguration();
$pageRenderer->addJsFile($script, 'text/javascript', FALSE, TRUE, '', TRUE);
}
/**
* Parses and processes the tinyMCE configuration
* Loads the required javascript via the require.js
*
* Note: Unfortunately we didn't solved the riddle how to parse object and function blocks. So we can't parse
* the configuration in detail. Also the regexp has some other possible minor flaws. Recursion (?R) could be a
* possible way.
* @return array
* @throws \BadFunctionCallException
* @throws \UnexpectedValueException
* @see \SGalinski\Tinymce4Rte\Form\Element\RichTextElement->loadRequireModulesForRTE
*/
public function loadJsViaRequireJS(): array {
if (self::$init) {
return [];
}
self::$init = TRUE;
$pathToTinyMceExtension = ExtensionManagementUtility::extPath('tinymce');
$tinymceSource = $pathToTinyMceExtension . 'tinymce_node_modules/tinymce/tinymce.min.js';
$configuration = $this->tinymceConfiguration['preJS'];
$configuration .= '
var $ = jQuery = window.TYPO3.jQuery;
var RTEarea = RTEarea || window.RTEarea;
define([\'TYPO3/CMS/Tinymce/../../../../typo3conf/ext/tinymce/tinymce_node_modules/tinymce/jquery.tinymce.min.js\'], function () {
$(\'.tinymce4_rte#RTEarea' . strtr($this->tinymceConfiguration['configurationDataArray']['editornumber'], array('.' => '\\\\.', '\'' => '')) . '\').tinymce({
script_url : \'' . $this->getPath($tinymceSource, TRUE) . '\',
' . $this->replaceTypo3Paths($this->tinymceConfiguration['configurationData']) . ',
selector: \'.tinymce4_rte#RTEarea' . strtr($this->tinymceConfiguration['configurationDataArray']['editornumber'], array('.' => '\\\\.', '\'' => '')) . '\'
});
$(\'#t3js-ui-block\').remove();
});
';
$configuration .= $this->tinymceConfiguration['postJS'];
$filename = 'tinymceConfiguration' . sha1($configuration) . '.js';
$file = PATH_site . 'typo3temp/' . $filename;
if (!is_file($file)) {
file_put_contents($file, $configuration);
GeneralUtility::fixPermissions($file);
}
return [$this->getPath($file, TRUE)];
}
/**
* Parses and processes the tinyMCE configuration
*
* @param string $configuration file reference or configuration string
* @return array
*/
protected function prepareTinyMCEConfiguration($configuration) {
$configurationArray = array();
protected function prepareTinyMCEConfiguration($configuration): array {
$configurationArray = [];
// try to resolve a potential TYPO3 file path
$configurationFile = t3lib_div::getFileAbsFileName($configuration);
$configurationFile = GeneralUtility::getFileAbsFileName($configuration);
if (is_file($configurationFile)) {
$configuration = file_get_contents($configurationFile);
}
// split config into first and last javascript parts (applied later again into the config variables)
// additionally the config part is matched to get the options
$pattern = '/(.*)tinymce\.init\s*\(\s*\{(.*?)\}\s*\)\s*;?(.*)/is';
preg_match($pattern, $configuration, $matches);
// first try to find the configuration via the "subpart" ###TINYMCE_INIT###
$pattern = '/(.*)?tinymce\.init\s*\(\s*\{\s*\/\*\s?###TINYMCE_INIT###.*?\*\/(.*)\/\*\s*###TINYMCE_INIT###.*?\*\/\s*\}\s*\);*(.*)?/is';
if (@preg_match($pattern, $configuration, $matches)) {
// fine :)
} else {
// if nothing is found, try it the legacy way (note: this may cause problems with a complex setups, since parenthesis-matching is not perfect here)
$pattern = '/(.*)tinymce\.init\s*\(\s*\{(.*?)\}\s*\)\s*;?(.*)/is';
preg_match($pattern, $configuration, $matches);
}
// add preJS and postJS
$configurationArray['preJS'] = trim($matches[1]);
$configurationArray['configurationData'] = trim($matches[2]);
$configurationArray['postJS'] = trim($matches[3]);
// split options into an array (four value types: values in quotes, int/booleans, arrays, objects, functions)
// $pattern = '([^:\[\(\{]+?)\s*:\s*(?:(\[.*?\])|(\{.*\})|(function.*\})|["\']([^"\']*)["|\']\s*|([^,\n]*))[,\n]\n?';
// preg_match_all('/' . $pattern . '/is', $matches[2] . "\n", $options);
// for ($i = 0; $i < count($options[1]); ++$i) {
// if (trim($options[2][$i]) !== '') {
// // array
// $configurationArray['arrays'][trim($options[1][$i])] = trim($options[2][$i]);
// } elseif (trim($options[3][$i]) !== '') {
// // object
// $configurationArray['objects'][trim($options[1][$i])] = trim($options[3][$i]);
// } elseif (trim($options[4][$i]) !== '') {
// // function
// $configurationArray['functions'][trim($options[1][$i])] = trim($options[4][$i]);
// } elseif (trim($options[6][$i]) !== '') {
// // int/bool
// $configurationArray['boolAndInt'][trim($options[1][$i])] = trim($options[6][$i]);
// } else {
// // quoted value (value can be empty)
// $configurationArray['strings'][trim($options[1][$i])] = trim($options[5][$i]);
// }
// }
return $configurationArray;
}
......@@ -282,7 +379,12 @@ class tinyMCE {
$value = '\'' . $value . '\'';
}
$this->tinymceConfiguration['configurationData'] .= "\n," . $key . ': ' . $value . "\n";
if ($this->tinymceConfiguration['configurationData'] !== '') {
$this->tinymceConfiguration['configurationData'] .= "\n,";
}
$this->tinymceConfiguration['configurationData'] .= $key . ': ' . $value;
$this->tinymceConfiguration['configurationDataArray'][$key] = $value;
}
/**
......@@ -291,11 +393,11 @@ class tinyMCE {
* @param string $configuration
* @return string
*/
protected function replaceTypo3Paths($configuration) {
protected function replaceTypo3Paths($configuration): string {
$replacementFunction = function ($value) {
// getPath should be used, but this causes a php exception with PHP 5.3 as $this isn't set there
return '\'' . t3lib_div::getIndpEnv('TYPO3_SITE_URL') .
str_replace(PATH_site, '', t3lib_div::getFileAbsFileName($value[1])) . '\'';
return '\'' . GeneralUtility::getIndpEnv('TYPO3_SITE_URL') .
str_replace(PATH_site, '', GeneralUtility::getFileAbsFileName($value[1])) . '\'';
};
return preg_replace_callback('/["\'](EXT:[^"\']*)["\']/is', $replacementFunction, $configuration);
......@@ -307,15 +409,15 @@ class tinyMCE {
*
* @param string $relativePath
* @param bool $returnWithDomain
*
* @return string
* @throws \UnexpectedValueException
*/
protected function getPath($relativePath, $returnWithDomain = FALSE) {
$finalPath = $absolutePath = t3lib_div::getFileAbsFileName($relativePath);
protected function getPath($relativePath, $returnWithDomain = FALSE): string {
$finalPath = $absolutePath = GeneralUtility::getFileAbsFileName($relativePath);
if ($returnWithDomain) {
$finalPath = t3lib_div::getIndpEnv('TYPO3_SITE_URL') . str_replace(PATH_site, '', $absolutePath);
$finalPath = GeneralUtility::getIndpEnv('TYPO3_SITE_URL') . str_replace(PATH_site, '', $absolutePath);
}
return $finalPath;
}
}
?>
\ No newline at end of file
/**
* @license
* Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
* This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
* The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
* The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
* Code distributed by Google as part of the polymer project is also
* subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
*/
(function(global) {
var registrationsTable = new WeakMap();
var setImmediate;
// As much as we would like to use the native implementation, IE
// (all versions) suffers a rather annoying bug where it will drop or defer
// callbacks when heavy DOM operations are being performed concurrently.
//
// For a thorough discussion on this, see:
// http://codeforhire.com/2013/09/21/setimmediate-and-messagechannel-broken-on-internet-explorer-10/
if (/Trident|Edge/.test(navigator.userAgent)) {
// Sadly, this bug also affects postMessage and MessageQueues.
//
// We would like to use the onreadystatechange hack for IE <= 10, but it is
// dangerous in the polyfilled environment due to requiring that the
// observed script element be in the document.
setImmediate = setTimeout;
// If some other browser ever implements it, let's prefer their native
// implementation:
} else if (window.setImmediate) {
setImmediate = window.setImmediate;
// Otherwise, we fall back to postMessage as a means of emulating the next
// task semantics of setImmediate.
} else {
var setImmediateQueue = [];
var sentinel = String(Math.random());
window.addEventListener('message', function(e) {
if (e.data === sentinel) {
var queue = setImmediateQueue;
setImmediateQueue = [];
queue.forEach(function(func) {
func();
});
}
});
setImmediate = function(func) {
setImmediateQueue.push(func);
window.postMessage(sentinel, '*');
};
}
// This is used to ensure that we never schedule 2 callas to setImmediate
var isScheduled = false;
// Keep track of observers that needs to be notified next time.
var scheduledObservers = [];
/**
* Schedules |dispatchCallback| to be called in the future.
* @param {MutationObserver} observer
*/
function scheduleCallback(observer) {
scheduledObservers.push(observer);
if (!isScheduled) {
isScheduled = true;
setImmediate(dispatchCallbacks);
}
}
function wrapIfNeeded(node) {
return window.ShadowDOMPolyfill &&
window.ShadowDOMPolyfill.wrapIfNeeded(node) ||
node;
}
function dispatchCallbacks() {
// http://dom.spec.whatwg.org/#mutation-observers
isScheduled = false; // Used to allow a new setImmediate call above.
var observers = scheduledObservers;
scheduledObservers = [];
// Sort observers based on their creation UID (incremental).
observers.sort(function(o1, o2) {
return o1.uid_ - o2.uid_;
});
var anyNonEmpty = false;
observers.forEach(function(observer) {
// 2.1, 2.2
var queue = observer.takeRecords();
// 2.3. Remove all transient registered observers whose observer is mo.
removeTransientObserversFor(observer);
// 2.4
if (queue.length) {
observer.callback_(queue, observer);
anyNonEmpty = true;
}
});
// 3.
if (anyNonEmpty)
dispatchCallbacks();
}
function removeTransientObserversFor(observer) {
observer.nodes_.forEach(function(node) {
var registrations = registrationsTable.get(node);
if (!registrations)
return;
registrations.forEach(function(registration) {
if (registration.observer === observer)
registration.removeTransientObservers();
});
});
}
/**
* This function is used for the "For each registered observer observer (with
* observer's options as options) in target's list of registered observers,
* run these substeps:" and the "For each ancestor ancestor of target, and for
* each registered observer observer (with options options) in ancestor's list
* of registered observers, run these substeps:" part of the algorithms. The
* |options.subtree| is checked to ensure that the callback is called
* correctly.
*
* @param {Node} target
* @param {function(MutationObserverInit):MutationRecord} callback
*/
function forEachAncestorAndObserverEnqueueRecord(target, callback) {
for (var node = target; node; node = node.parentNode) {
var registrations = registrationsTable.get(node);
if (registrations) {
for (var j = 0; j < registrations.length; j++) {
var registration = registrations[j];
var options = registration.options;
// Only target ignores subtree.
if (node !== target && !options.subtree)
continue;
var record = callback(options);
if (record)
registration.enqueue(record);
}
}
}
}
var uidCounter = 0;
/**
* The class that maps to the DOM MutationObserver interface.
* @param {Function} callback.
* @constructor
*/
function JsMutationObserver(callback) {
this.callback_ = callback;
this.nodes_ = [];
this.records_ = [];
this.uid_ = ++uidCounter;
}
JsMutationObserver.prototype = {
observe: function(target, options) {
target = wrapIfNeeded(target);
// 1.1
if (!options.childList && !options.attributes && !options.characterData ||
// 1.2
options.attributeOldValue && !options.attributes ||
// 1.3
options.attributeFilter && options.attributeFilter.length &&
!options.attributes ||
// 1.4
options.characterDataOldValue && !options.characterData) {
throw new SyntaxError();
}
var registrations = registrationsTable.get(target);
if (!registrations)
registrationsTable.set(target, registrations = []);
// 2
// If target's list of registered observers already includes a registered
// observer associated with the context object, replace that registered
// observer's options with options.
var registration;
for (var i = 0; i < registrations.length; i++) {
if (registrations[i].observer === this) {
registration = registrations[i];
registration.removeListeners();
registration.options = options;
break;
}
}
// 3.
// Otherwise, add a new registered observer to target's list of registered
// observers with the context object as the observer and options as the
// options, and add target to context object's list of nodes on which it
// is registered.
if (!registration) {
registration = new Registration(this, target, options);
registrations.push(registration);
this.nodes_.push(target);
}
registration.addListeners();
},
disconnect: function() {
this.nodes_.forEach(function(node) {
var registrations = registrationsTable.get(node);
for (var i = 0; i < registrations.length; i++) {
var registration = registrations[i];
if (registration.observer === this) {
registration.removeListeners();
registrations.splice(i, 1);
// Each node can only have one registered observer associated with
// this observer.
break;
}
}
}, this);
this.records_ = [];
},
takeRecords: function() {
var copyOfRecords = this.records_;
this.records_ = [];
return copyOfRecords;
}
};
/**
* @param {string} type
* @param {Node} target
* @constructor
*/
function MutationRecord(type, target) {
this.type = type;
this.target = target;
this.addedNodes = [];
this.removedNodes = [];
this.previousSibling = null;
this.nextSibling = null;
this.attributeName = null;
this.attributeNamespace = null;
this.oldValue = null;
}
function copyMutationRecord(original) {
var record = new MutationRecord(original.type, original.target);
record.addedNodes = original.addedNodes.slice();
record.removedNodes = original.removedNodes.slice();
record.previousSibling = original.previousSibling;
record.nextSibling = original.nextSibling;
record.attributeName = original.attributeName;
record.attributeNamespace = original.attributeNamespace;
record.oldValue = original.oldValue;
return record;
};
// We keep track of the two (possibly one) records used in a single mutation.
var currentRecord, recordWithOldValue;
/**
* Creates a record without |oldValue| and caches it as |currentRecord| for
* later use.
* @param {string} oldValue
* @return {MutationRecord}
*/
function getRecord(type, target) {
return currentRecord = new MutationRecord(type, target);
}
/**
* Gets or creates a record with |oldValue| based in the |currentRecord|
* @param {string} oldValue
* @return {MutationRecord}
*/
function getRecordWithOldValue(oldValue) {
if (recordWithOldValue)
return recordWithOldValue;
recordWithOldValue = copyMutationRecord(currentRecord);
recordWithOldValue.oldValue = oldValue;
return recordWithOldValue;
}
function clearRecords() {
currentRecord = recordWithOldValue = undefined;
}
/**
* @param {MutationRecord} record
* @return {boolean} Whether the record represents a record from the current
* mutation event.
*/
function recordRepresentsCurrentMutation(record) {
return record === recordWithOldValue || record === currentRecord;
}
/**
* Selects which record, if any, to replace the last record in the queue.
* This returns |null| if no record should be replaced.
*
* @param {MutationRecord} lastRecord
* @param {MutationRecord} newRecord
* @param {MutationRecord}
*/
function selectRecord(lastRecord, newRecord) {
if (lastRecord === newRecord)
return lastRecord;
// Check if the the record we are adding represents the same record. If
// so, we keep the one with the oldValue in it.
if (recordWithOldValue && recordRepresentsCurrentMutation(lastRecord))
return recordWithOldValue;
return null;
}
/**
* Class used to represent a registered observer.
* @param {MutationObserver} observer
* @param {Node} target
* @param {MutationObserverInit} options
* @constructor
*/
function Registration(observer, target, options) {
this.observer = observer;
this.target = target;
this.options = options;
this.transientObservedNodes = [];
}
Registration.prototype = {
enqueue: function(record) {
var records = this.observer.records_;
var length = records.length;
// There are cases where we replace the last record with the new record.
// For example if the record represents the same mutation we need to use
// the one with the oldValue. If we get same record (this can happen as we
// walk up the tree) we ignore the new record.
if (records.length > 0) {
var lastRecord = records[length - 1];
var recordToReplaceLast = selectRecord(lastRecord, record);
if (recordToReplaceLast) {
records[length - 1] = recordToReplaceLast;
return;
}
} else {
scheduleCallback(this.observer);
}
records[length] = record;
},
addListeners: function() {
this.addListeners_(this.target);
},
addListeners_: function(node) {
var options = this.options;
if (options.attributes)
node.addEventListener('DOMAttrModified', this, true);
if (options.characterData)
node.addEventListener('DOMCharacterDataModified', this, true);
if (options.childList)
node.addEventListener('DOMNodeInserted', this, true);
if (options.childList || options.subtree)
node.addEventListener('DOMNodeRemoved', this, true);
},
removeListeners: function() {
this.removeListeners_(this.target);
},
removeListeners_: function(node) {
var options = this.options;
if (options.attributes)
node.removeEventListener('DOMAttrModified', this, true);
if (options.characterData)
node.removeEventListener('DOMCharacterDataModified', this, true);
if (options.childList)
node.removeEventListener('DOMNodeInserted', this, true);
if (options.childList || options.subtree)
node.removeEventListener('DOMNodeRemoved', this, true);
},
/**
* Adds a transient observer on node. The transient observer gets removed
* next time we deliver the change records.
* @param {Node} node
*/
addTransientObserver: function(node) {
// Don't add transient observers on the target itself. We already have all
// the required listeners set up on the target.
if (node === this.target)
return;
this.addListeners_(node);
this.transientObservedNodes.push(node);
var registrations = registrationsTable.get(node);
if (!registrations)
registrationsTable.set(node, registrations = []);
// We know that registrations does not contain this because we already
// checked if node === this.target.
registrations.push(this);
},
removeTransientObservers: function() {
var transientObservedNodes = this.transientObservedNodes;
this.transientObservedNodes = [];
transientObservedNodes.forEach(function(node) {
// Transient observers are never added to the target.
this.removeListeners_(node);
var registrations = registrationsTable.get(node);
for (var i = 0; i < registrations.length; i++) {
if (registrations[i] === this) {
registrations.splice(i, 1);
// Each node can only have one registered observer associated with
// this observer.
break;
}
}
}, this);
},
handleEvent: function(e) {
// Stop propagation since we are managing the propagation manually.
// This means that other mutation events on the page will not work
// correctly but that is by design.
e.stopImmediatePropagation();
switch (e.type) {
case 'DOMAttrModified':
// http://dom.spec.whatwg.org/#concept-mo-queue-attributes
var name = e.attrName;
var namespace = e.relatedNode.namespaceURI;
var target = e.target;
// 1.
var record = new getRecord('attributes', target);
record.attributeName = name;
record.attributeNamespace = namespace;
// 2.
var oldValue =
e.attrChange === MutationEvent.ADDITION ? null : e.prevValue;
forEachAncestorAndObserverEnqueueRecord(target, function(options) {
// 3.1, 4.2
if (!options.attributes)
return;
// 3.2, 4.3
if (options.attributeFilter && options.attributeFilter.length &&
options.attributeFilter.indexOf(name) === -1 &&
options.attributeFilter.indexOf(namespace) === -1) {
return;
}
// 3.3, 4.4
if (options.attributeOldValue)
return getRecordWithOldValue(oldValue);
// 3.4, 4.5
return record;
});
break;
case 'DOMCharacterDataModified':
// http://dom.spec.whatwg.org/#concept-mo-queue-characterdata
var target = e.target;
// 1.
var record = getRecord('characterData', target);
// 2.
var oldValue = e.prevValue;
forEachAncestorAndObserverEnqueueRecord(target, function(options) {
// 3.1, 4.2
if (!options.characterData)
return;
// 3.2, 4.3
if (options.characterDataOldValue)
return getRecordWithOldValue(oldValue);
// 3.3, 4.4
return record;
});
break;
case 'DOMNodeRemoved':
this.addTransientObserver(e.target);
// Fall through.
case 'DOMNodeInserted':
// http://dom.spec.whatwg.org/#concept-mo-queue-childlist
var changedNode = e.target;
var addedNodes, removedNodes;
if (e.type === 'DOMNodeInserted') {
addedNodes = [changedNode];
removedNodes = [];
} else {
addedNodes = [];
removedNodes = [changedNode];
}
var previousSibling = changedNode.previousSibling;
var nextSibling = changedNode.nextSibling;
// 1.
var record = getRecord('childList', e.target.parentNode);
record.addedNodes = addedNodes;
record.removedNodes = removedNodes;
record.previousSibling = previousSibling;
record.nextSibling = nextSibling;
forEachAncestorAndObserverEnqueueRecord(e.relatedNode, function(options) {
// 2.1, 3.2
if (!options.childList)
return;
// 2.2, 3.3
return record;
});
}
clearRecords();
}
};
global.JsMutationObserver = JsMutationObserver;
if (!global.MutationObserver)
global.MutationObserver = JsMutationObserver;
})(this);
\ No newline at end of file
/*
* Copyright 2012 The Polymer Authors. All rights reserved.
* Use of this source code is governed by a BSD-style
* license that can be found in the LICENSE file.
*/
if (typeof WeakMap === 'undefined') {
(function() {
var defineProperty = Object.defineProperty;
var counter = Date.now() % 1e9;
var WeakMap = function() {
this.name = '__st' + (Math.random() * 1e9 >>> 0) + (counter++ + '__');
};
WeakMap.prototype = {
set: function(key, value) {
var entry = key[this.name];
if (entry && entry[0] === key)
entry[1] = value;
else
defineProperty(key, this.name, {value: [key, value], writable: true});
return this;
},
get: function(key) {
var entry;
return (entry = key[this.name]) && entry[0] === key ?
entry[1] : undefined;
},
delete: function(key) {
var entry = key[this.name];
if (!entry) return false;
var hasValue = entry[0] === key;
entry[0] = entry[1] = undefined;
return hasValue;
},
has: function(key) {
var entry = key[this.name];
if (!entry) return false;
return entry[0] === key;
}
};
window.WeakMap = WeakMap;
})();
}
## How to update the sources?
# tinymce
1. Download the latest version from "http://www.tinymce.com/download/download.php"
2. Download the latest language pack from "http://www.tinymce.com/i18n/index.php".
A powerful JavaScript-based rich-text-editor, which is used as the WYSIWYG-editor in the TYPO3-backend. The extension
offers a simple API to ease the embedding of the library.
# How to update the sources?
1. Update tinymce with npm
2. Download the latest language pack from "http://archive.tinymce.com/i18n/index.php".
You can simplify the selection by using the following command in your developer tools console.
Deselect "ru@petr1708" and "zh_CN.GB2312" afterwards, because this language doesn't exists and leads to errors.
$('input[type=checkbox]').attr('checked', 1)
3. Unpack the downloaded sources inside a separate folder
4. Remove the tinymce directory inside the extension and move "tinymce/js/tinymce" from the download source as a
replacement.
5. Replace the "langs" directory with the downloaded one
6. Update the VERSIONS.md file
7. Push the new code to git (check the differences and test the stuff before!)
\ No newline at end of file
document.querySelectorAll('input[type=checkbox]').forEach(function(element) { element.checked = true; });
3. Rename node_modules to tinymce_mode_modules, because TYPO3 removes the node_modules directory
4. Add the "langs" directory inside tinymce_node_modules/tinymce with the downloaded languages
/***************************************************************
* Copyright notice
*
* (c) thomas-p / https://github.com/Thomas-P
* (c) sgalinski Internet Services (http://www.sgalinski.de)
*
* All rights reserved
*
* This script is part of the TYPO3 project. The TYPO3 project is
* free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* The GNU General Public License can be found at
* http://www.gnu.org/copyleft/gpl.html.
*
* This script is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
var SG = SG || {};
SG.TinyMceLoader = function(tinymce, options) {
options = options || {};
if (!tinymce) {
return console.error('Couldn\'t load dependency tinyMCE, break here.');
}
if (!window.MutationObserver) {
return console.error('Couldn\'t load dependency MutationObserver, break here.')
}
// store original init from the tinyMCE
this.originalInit = tinymce.init;
// stores the default options
this.defaultOptions = options;
// storage for options
this.tinyMceOptions = {};
// selector for tinyMCE
this.selector = '';
// initialization flag
this.firstInit = false;
this.initialize(options);
};
SG.TinyMceLoader.prototype = {
/**
* Override for the tinyMCE.init. Handle only the options.
*
* @return {void}
*/
initialize: function(options) {
options = options || {};
if (this.firstInit) {
console.error('The tinyMCE loader should only be called once');
}
this.firstInit = true;
// override options with default from extension
var defaultOptions = this.defaultOptions || {};
for (var key in defaultOptions) {
if (defaultOptions.hasOwnProperty(key)) {
options[key] = defaultOptions[key];
}
}
// override options.setup with own integration
options.setup = this.setup(options.setup);
this.tinyMceOptions = options;
if (options.selector) {
this.selector = String(options.selector);
}
this.setupTinymce(document.body);
this.initMutationObserver();
},
/**
* Setup override to manage changes
*
* @return {function}
*/
setup: function(setupMethod) {
return function(editor) {
var changeMethod = this.tinyMceOptions.changeMethod;
if (setupMethod && typeof setupMethod === 'function') {
setupMethod.call(this, editor);
}
editor.on(
'change', function() {
if (typeof changeMethod === 'function') {
var target = editor.targetElm;
var name = target.name;
var found = name.match(/^data\[(.*)]\[(.*)]\[(.*)]$/);
if (found) {
changeMethod.apply(target, [found[1], found[2], found[3], name]);
}
}
editor.save();
}
);
}.bind(this);
},
/**
* Automatically apply the tinyMCE editor on new elements
*
* @return {void}
*/
initMutationObserver: function() {
var observer = new MutationObserver(
function(mutations) {
if (!this.selector) {
return;
}
mutations.forEach(
function(mutation) {
if (!mutation.target) {
return;
}
this.setupTinymce(mutation.target);
}.bind(this)
);
}.bind(this)
);
//noinspection JSCheckFunctionSignatures
observer.observe(document, {subtree: true, childList: true});
},
/**
* Setups the tinymce instances for a given element
*
* @param {Element} element
* @return {void}
*/
setupTinymce: function(element) {
var hasMatches = false;
this.tinyMceOptions.selector = '';
if (this.selector !== '') {
var elements = element.querySelectorAll(this.selector);
for (var index = 0; index < elements.length; ++index) {
var node = elements[index];
if (!node.dataset) {
node.dataset = {};
}
if (node.dataset.isTinyMCE) {
continue;
}
// add tinyMCE to node
if (!node.id) {
node.id = new Date().getUTCMilliseconds();
}
node.dataset.isTinyMCE = true;
this.tinyMceOptions.selector += ',#' + node.id;
hasMatches = true;
}
}
if (hasMatches) {
this.tinyMceOptions.selector = this.tinyMceOptions.selector.slice(1);
this.originalInit.call(tinymce, this.getTinyMceOptionsAsNewObject());
var $pleaseWaitElement = document.getElementById('pleasewait' + this.tinyMceOptions.editornumber);
if ($pleaseWaitElement !== null) {
$pleaseWaitElement.style.display = 'none';
}
}
},
/**
* Converts this tinyMceOptions object into a fresh instance of an object.
*
* @return {string}
*/
getTinyMceOptionsAsNewObject: function() {
var newObject = {};
for (var key in this.tinyMceOptions) {
newObject[key] = this.tinyMceOptions[key];
}
return newObject;
}
};
Resources/Public/JavaScript/TinymcePlugins/shy/icon.png

1.63 KiB

tinymce.addI18n('de', {
'Soft hyphen': 'Bedingter Trennstrich',
});
\ No newline at end of file
/**
* plugin.js for TinyMCE soft hyphen (shy)
*
*/
tinymce.PluginManager.requireLangPack('shy', 'de');
tinymce.PluginManager.add('shy', function(editor) {
editor.addCommand('mceShy', function() {
editor.insertContent(
(editor.plugins.visualchars && editor.plugins.visualchars.state) ?
'<span class="mce-shy">&shy;</span>' : '&shy;'
);
editor.dom.setAttrib(editor.dom.select('span.mce-shy'), 'data-mce-bogus', '1');
});
editor.addButton('shy', {
title: 'Soft hyphen',
image: tinyMCE.baseURL + '/../../Resources/Public/JavaScript/TinymcePlugins/shy/icon.png',
cmd: 'mceShy'
});
editor.addMenuItem('shy', {
text: 'Soft hyphen',
cmd: 'mceShy',
context: 'insert'
});
});
\ No newline at end of file
tinymce.PluginManager.requireLangPack("shy","de");tinymce.PluginManager.add("shy",function(e){e.addCommand("mceShy",function(){e.insertContent(e.plugins.visualchars&&e.plugins.visualchars.state?'<span class="mce-shy">&shy;</span>':"&shy;");e.dom.setAttrib(e.dom.select("span.mce-shy"),"data-mce-bogus","1")});e.addButton("shy",{title:"Soft hyphen",image:tinyMCE.baseURL+"/../../Resources/Public/JavaScript/TinymcePlugins/shy/icon.png",cmd:"mceShy"});e.addMenuItem("shy",{text:"Soft hyphen",cmd:"mceShy",context:"insert"})})
\ No newline at end of file
### Used Versions
- TinyMCE - 4.1.7
- Languages - 27.11.2014
\ No newline at end of file
{
"name": "sgalinski/tinymce",
"type": "typo3-cms-extension",
"description": "TinyMCE sources including a small PHP API",
"homepage": "https://www.sgalinski.de",
"license": "GPL-2.0-or-later",
"version": "5.0.4",
"support": {
"issues": "https://gitlab.sgalinski.de/typo3/tinymce/issues"
},
"require": {
"typo3/cms-core": "7.6.0 - 8.7.99"
},
"replace": {
"sgalinski/tinymce": "self.version",
"typo3-ter/tinymce": "self.version"
},
"autoload": {
"psr-4": {
"SGalinski\\Tinymce\\": "Classes/"
}
}
}
<?php
/***************************************************************
* Extension Manager/Repository config file for ext "tinymce".
*
* Auto generated 05-08-2014 22:42
*
* Manual updates:
* Only the data in the array - everything else is removed by next
* writing. "version" and "dependencies" must not be touched!
***************************************************************/
$EM_CONF[$_EXTKEY] = array (
$EM_CONF[$_EXTKEY] = [
'title' => 'tinyMCE',
'description' => 'TinyMCE sources including a small PHP API',
'category' => 'misc',
'version' => '4.1.9',
'version' => '5.0.4',
'state' => 'stable',
'uploadfolder' => false,
'uploadfolder' => FALSE,
'createDirs' => '',
'clearcacheonload' => false,
'clearcacheonload' => FALSE,
'author' => 'Stefan Galinski',
'author_email' => 'stefan@sgalinski.de',
'author_company' => 'sgalinski Internet Services',
'constraints' =>
array (
'depends' =>
array (
'php' => '5.2.0-5.5.99',
'typo3' => '4.5.0-6.2.99',
),
'conflicts' =>
array (
),
'suggests' =>
array (
),
),
);
'autoload' =>
[
'psr-4' => ['SGalinski\\Tinymce\\' => 'Classes']
],
'constraints' =>
[
'depends' =>
[
'php' => '7.0.0-7.2.99',
'typo3' => '7.6.0-8.7.99',
],
'conflicts' => [],
'suggests' => [],
],
];
\ No newline at end of file
{
"name": "sg_tinymce",
"description": "",
"dependencies": {
"tinymce": "^4.7.13"
}
}
tinymce.addI18n('ar_SA',{
"Cut": "\u0642\u0635",
"Header 2": "Header 2",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u0645\u062a\u0635\u0641\u062d\u0643 \u0644\u0627 \u064a\u062f\u0639\u0645 \u0627\u0644\u0648\u0635\u0648\u0644 \u0627\u0644\u0645\u0628\u0627\u0634\u0631 \u0625\u0644\u0649 \u0627\u0644\u062d\u0627\u0641\u0638\u0629. \u0627\u0644\u0631\u062c\u0627\u0621 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u062e\u062a\u0635\u0627\u0631\u0627\u062a \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d Ctrl+X\/C\/V \u0628\u062f\u0644\u0627 \u0645\u0646 \u0630\u0644\u0643.",
"Div": "Div",
"Paste": "\u0644\u0635\u0642",
"Close": "\u0623\u063a\u0644\u0642",
"Font Family": "Font Family",
"Pre": "Pre",
"Align right": "Align right",
"New document": "\u0645\u0644\u0641 \u062c\u062f\u064a\u062f",
"Blockquote": "Blockquote",
"Numbered list": "Numbered list",
"Increase indent": "Increase indent",
"Formats": "Formats",
"Headers": "Headers",
"Select all": "\u0623\u062e\u062a\u0631 \u0627\u0644\u0643\u0644",
"Header 3": "Header 3",
"Blocks": "Blocks",
"Undo": "\u062a\u0631\u0627\u062c\u0639",
"Strikethrough": "Strikethrough",
"Bullet list": "Bullet list",
"Header 1": "Header 1",
"Superscript": "Superscript",
"Clear formatting": "Clear formatting",
"Font Sizes": "Font Sizes",
"Subscript": "Subscript",
"Header 6": "Header 6",
"Redo": "Redo",
"Paragraph": "Paragraph",
"Ok": "Ok",
"Bold": "Bold",
"Code": "Code",
"Italic": "Italic",
"Align center": "Align center",
"Header 5": "Header 5",
"Decrease indent": "Decrease indent",
"Header 4": "Header 4",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.",
"Underline": "Underline",
"Cancel": "\u0625\u0644\u063a\u0627\u0621",
"Justify": "Justify",
"Inline": "Inline",
"Copy": "\u0646\u0633\u062e",
"Align left": "Align left",
"Visual aids": "Visual aids",
"Lower Greek": "Lower Greek",
"Square": "Square",
"Default": "Default",
"Lower Alpha": "Lower Alpha",
"Circle": "Circle",
"Disc": "Disc",
"Upper Alpha": "Upper Alpha",
"Upper Roman": "Upper Roman",
"Lower Roman": "Lower Roman",
"Name": "Name",
"Anchor": "Anchor",
"You have unsaved changes are you sure you want to navigate away?": "\u0644\u062f\u064a\u0643 \u062a\u063a\u064a\u064a\u0631\u0627\u062a \u0644\u0645 \u064a\u062a\u0645 \u062d\u0641\u0638\u0647\u0627 \u0647\u0644 \u0623\u0646\u062a \u0645\u062a\u0623\u0643\u062f \u0623\u0646\u0643 \u062a\u0631\u063a\u0628 \u0641\u064a \u0627\u0644\u0627\u0646\u062a\u0642\u0627\u0644 \u061f",
"Restore last draft": "\u0627\u0633\u062a\u0639\u0627\u062f\u0629 \u0623\u062e\u0631 \u0645\u0633\u0648\u062f\u0629",
"Special character": "Special character",
"Source code": "Source code",
"Color": "\u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0644\u0648\u0646",
"Right to left": "\u0645\u0646 \u0627\u0644\u064a\u0645\u064a\u0646 \u0625\u0644\u064a \u0627\u0644\u064a\u0633\u0627\u0631",
"Left to right": "\u0645\u0646 \u0627\u0644\u064a\u0633\u0627\u0631 \u0625\u0644\u064a \u0627\u0644\u064a\u0645\u064a\u0646",
"Emoticons": "\u0627\u0644\u0631\u0645\u0648\u0632",
"Robots": "Robots",
"Document properties": "\u062e\u0635\u0627\u0626\u0635 \u0627\u0644\u0645\u0633\u062a\u0646\u062f",
"Title": "\u0639\u0646\u0648\u0627\u0646",
"Keywords": "Keywords",
"Encoding": "\u062a\u0631\u0645\u064a\u0632",
"Description": "Description",
"Author": "\u0627\u0644\u0643\u0627\u062a\u0628",
"Fullscreen": "Fullscreen",
"Horizontal line": "\u062e\u0637 \u0623\u0641\u0642\u064a",
"Horizontal space": "Horizontal space",
"Insert\/edit image": "Insert\/edit image",
"General": "General",
"Advanced": "Advanced",
"Source": "Source",
"Border": "Border",
"Constrain proportions": "Constrain proportions",
"Vertical space": "Vertical space",
"Image description": "Image description",
"Style": "Style",
"Dimensions": "Dimensions",
"Insert image": "Insert image",
"Insert date\/time": "Insert date\/time",
"Remove link": "Remove link",
"Url": "Url",
"Text to display": "Text to display",
"Anchors": "Anchors",
"Insert link": "Insert link",
"New window": "New window",
"None": "None",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?",
"Target": "Target",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",
"Insert\/edit link": "Insert\/edit link",
"Insert\/edit video": "Insert\/edit video",
"Poster": "Poster",
"Alternative source": "Alternative source",
"Paste your embed code below:": "Paste your embed code below:",
"Insert video": "Insert video",
"Embed": "Embed",
"Nonbreaking space": "Nonbreaking space",
"Page break": "Page break",
"Paste as text": "Paste as text",
"Preview": "\u0639\u0631\u0636",
"Print": "\u0637\u0628\u0627\u0639\u0629",
"Save": "\u062d\u0641\u0638",
"Could not find the specified string.": "Could not find the specified string.",
"Replace": "Replace",
"Next": "Next",
"Whole words": "Whole words",
"Find and replace": "Find and replace",
"Replace with": "Replace with",
"Find": "Find",
"Replace all": "Replace all",
"Match case": "Match case",
"Prev": "Prev",
"Spellcheck": "Spellcheck",
"Finish": "Finish",
"Ignore all": "Ignore all",
"Ignore": "Ignore",
"Insert row before": "Insert row before",
"Rows": "Rows",
"Height": "Height",
"Paste row after": "Paste row after",
"Alignment": "Alignment",
"Column group": "Column group",
"Row": "Row",
"Insert column before": "Insert column before",
"Split cell": "Split cell",
"Cell padding": "Cell padding",
"Cell spacing": "Cell spacing",
"Row type": "Row type",
"Insert table": "Insert table",
"Body": "Body",
"Caption": "Caption",
"Footer": "Footer",
"Delete row": "Delete row",
"Paste row before": "Paste row before",
"Scope": "Scope",
"Delete table": "Delete table",
"Header cell": "Header cell",
"Column": "Column",
"Cell": "Cell",
"Header": "Header",
"Cell type": "Cell type",
"Copy row": "Copy row",
"Row properties": "Row properties",
"Table properties": "Table properties",
"Row group": "Row group",
"Right": "Right",
"Insert column after": "Insert column after",
"Cols": "Cols",
"Insert row after": "Insert row after",
"Width": "Width",
"Cell properties": "Cell properties",
"Left": "Left",
"Cut row": "Cut row",
"Delete column": "Delete column",
"Center": "Center",
"Merge cells": "Merge cells",
"Insert template": "Insert template",
"Templates": "Templates",
"Background color": "Background color",
"Text color": "Text color",
"Show blocks": "Show blocks",
"Show invisible characters": "Show invisible characters",
"Words: {0}": "Words: {0}",
"Insert": "Insert",
"File": "File",
"Edit": "Edit",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help",
"Tools": "Tools",
"View": "View",
"Table": "Table",
"Format": "Format",
"_dir": "rtl"
});
\ No newline at end of file
tinymce.addI18n('az',{
"Cut": "K\u0259s",
"Heading 5": "Ba\u015fl\u0131q 5",
"Header 2": "Ba\u015fl\u0131q 2",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Sizin brauzeriniz m\u00fcbadil\u0259 buferin\u0259 birba\u015fa yolu d\u0259st\u0259kl\u0259mir. Z\u0259hm\u0259t olmasa, bunun yerin\u0259 klaviaturan\u0131n Ctrl+X\/C\/V d\u00fcym\u0259l\u0259rind\u0259n istifad\u0259 edin.",
"Heading 4": "Ba\u015fl\u0131q 4",
"Div": "Div",
"Heading 2": "Ba\u015fl\u0131q 2",
"Paste": "\u018flav\u0259 et",
"Close": "Ba\u011fla",
"Font Family": "Font stili",
"Pre": "Pre",
"Align right": "Sa\u011f t\u0259r\u0259f \u00fczr\u0259",
"New document": "Yeni s\u0259n\u0259d",
"Blockquote": "Sitat",
"Numbered list": "N\u00f6mr\u0259l\u0259nmi\u015f siyah\u0131",
"Heading 1": "Ba\u015fl\u0131q 1",
"Headings": "Ba\u015fl\u0131qlar",
"Increase indent": "Bo\u015flu\u011fu art\u0131r",
"Formats": "Formatlar",
"Headers": "Ba\u015fl\u0131qlar",
"Select all": "Ham\u0131s\u0131n\u0131 se\u00e7",
"Header 3": "Ba\u015fl\u0131q 3",
"Blocks": "Bloklar",
"Undo": "Geriy\u0259",
"Strikethrough": "Silinmi\u015f",
"Bullet list": "S\u0131ras\u0131z siyah\u0131",
"Header 1": "Ba\u015fl\u0131q 1",
"Superscript": "Yuxar\u0131 indeks",
"Clear formatting": "Format\u0131 t\u0259mizl\u0259",
"Font Sizes": "Font \u00f6l\u00e7\u00fcl\u0259ri",
"Subscript": "A\u015fa\u011f\u0131 indeks",
"Header 6": "Ba\u015fl\u0131q 6",
"Redo": "\u0130r\u0259li",
"Paragraph": "Paraqraf",
"Ok": "Oldu",
"Bold": "Qal\u0131n",
"Code": "Kod",
"Italic": "Maili",
"Align center": "M\u0259rk\u0259z \u00fczr\u0259",
"Header 5": "Ba\u015fl\u0131q 5",
"Heading 6": "Ba\u015fl\u0131q 6",
"Heading 3": "Ba\u015fl\u0131q 3",
"Decrease indent": "Bo\u015flu\u011fu azalt",
"Header 4": "Ba\u015fl\u0131q 4",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Hal-haz\u0131rda adi m\u0259tn rejimind\u0259 yerl\u0259\u015fdirilir. M\u0259zmun sad\u0259 m\u0259tn \u015f\u0259klind\u0259 yerl\u0259\u015fdiril\u0259c\u0259k, h\u0259l\u0259 bu se\u00e7imi d\u0259yi\u015fdirm\u0259.",
"Underline": "Alt x\u0259ttli",
"Cancel": "L\u0259\u011fv et",
"Justify": "H\u0259r iki t\u0259r\u0259f \u00fczr\u0259",
"Inline": "S\u0259tir i\u00e7i",
"Copy": "K\u00f6\u00e7\u00fcr",
"Align left": "Sol t\u0259r\u0259f \u00fczr\u0259",
"Visual aids": "Konturlar\u0131 g\u00f6st\u0259r",
"Lower Greek": "Ki\u00e7ik Yunan \u0259lifbas\u0131",
"Square": "Sah\u0259",
"Default": "\u018fvv\u0259ld\u0259n qurulmu\u015f",
"Lower Alpha": "Ki\u00e7ik Alfa \u0259lifbas\u0131",
"Circle": "Dair\u0259",
"Disc": "Disk",
"Upper Alpha": "B\u00f6y\u00fck Alfa \u0259lifbas\u0131",
"Upper Roman": "B\u00f6y\u00fck Roma \u0259lifbas\u0131",
"Lower Roman": "Ki\u00e7ik Roma \u0259lifbas\u0131",
"Name": "Ad",
"Anchor": "L\u00f6vb\u0259r",
"You have unsaved changes are you sure you want to navigate away?": "Sizd\u0259 yadda saxlan\u0131lmayan d\u0259yi\u015fiklikl\u0259r var \u0259minsiniz ki, getm\u0259k ist\u0259yirsiniz?",
"Restore last draft": "Son layih\u0259nin b\u0259rpas\u0131",
"Special character": "X\u00fcsusi simvollar",
"Source code": "M\u0259nb\u0259 kodu",
"Color": "R\u0259ng",
"Right to left": "Sa\u011fdan sola",
"Left to right": "Soldan sa\u011fa",
"Emoticons": "T\u0259b\u0259ss\u00fcml\u0259r",
"Robots": "Robotlar",
"Document properties": "S\u0259n\u0259din x\u00fcsusiyy\u0259tl\u0259ri",
"Title": "Ba\u015fl\u0131q",
"Keywords": "A\u00e7ar s\u00f6zl\u0259r",
"Encoding": "Kodla\u015fd\u0131rma",
"Description": "T\u0259sviri",
"Author": "M\u00fc\u0259llif",
"Fullscreen": "Tam ekran rejimi",
"Horizontal line": "Horizontal x\u0259tt",
"Horizontal space": "Horizontal sah\u0259",
"Insert\/edit image": "\u015e\u0259kilin \u0259lav\u0259\/redakt\u0259 edilm\u0259si",
"General": "\u00dcmumi",
"Advanced": "Geni\u015fl\u0259nmi\u015f",
"Source": "M\u0259nb\u0259",
"Border": "\u00c7\u0259r\u00e7iv\u0259",
"Constrain proportions": "Nisb\u0259tl\u0259rin saxlan\u0131lmas\u0131",
"Vertical space": "Vertikal sah\u0259",
"Image description": "\u015e\u0259kilin t\u0259sviri",
"Style": "Stil",
"Dimensions": "\u00d6l\u00e7\u00fcl\u0259r",
"Insert image": "\u015e\u0259kilin redakt\u0259 edilm\u0259si",
"Insert date\/time": "G\u00fcn\/tarix \u0259lav\u0259 et",
"Remove link": "Linki sil",
"Url": "Linkin \u00fcnvan\u0131",
"Text to display": "G\u00f6r\u00fcn\u0259n yaz\u0131n\u0131n t\u0259sviri",
"Anchors": "L\u00f6vb\u0259rl\u0259r",
"Insert link": "Linkin \u0259lav\u0259 edilm\u0259si",
"New window": "Yeni p\u0259nc\u0259r\u0259d\u0259 a\u00e7\u0131ls\u0131n",
"None": "Yoxdur",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Daxil etdiyiniz URL bir e-mail kimi g\u00f6r\u00fcn\u00fcr. \u018fg\u0259r t\u0259l\u0259b olunan mailto: prefix \u0259lav\u0259 etm\u0259k ist\u0259yirsiniz?",
"Target": "H\u0259d\u0259f",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Daxil etdiyiniz URL bir e-mail kimi g\u00f6r\u00fcn\u00fcr. \u018fg\u0259r t\u0259l\u0259b olunan mailto: prefix \u0259lav\u0259 etm\u0259k ist\u0259yirsiniz?",
"Insert\/edit link": "Linkin \u0259lav\u0259\/redakt\u0259 edilm\u0259si",
"Insert\/edit video": "Videonun \u0259lav\u0259\/redakt\u0259 edilm\u0259si",
"Poster": "Poster",
"Alternative source": "Alternativ m\u0259nb\u0259",
"Paste your embed code below:": "\u00d6z kodunuzu a\u015fa\u011f\u0131 \u0259lav\u0259 edin:",
"Insert video": "Videonun \u0259lav\u0259 edilm\u0259si",
"Embed": "\u018flav\u0259 etm\u0259k \u00fc\u00e7\u00fcn kod",
"Nonbreaking space": "Q\u0131r\u0131lmaz sah\u0259",
"Page break": "S\u0259hif\u0259nin q\u0131r\u0131lmas\u0131",
"Paste as text": "M\u0259tn kimi \u0259lav\u0259 et",
"Preview": "\u0130lkinbax\u0131\u015f",
"Print": "\u00c7ap et",
"Save": "Yadda saxla",
"Could not find the specified string.": "G\u00f6st\u0259ril\u0259n s\u0259tiri tapmaq olmur",
"Replace": "D\u0259yi\u015fdir",
"Next": "N\u00f6vb\u0259ti",
"Whole words": "Tam s\u00f6zl\u0259r",
"Find and replace": "Tap v\u0259 d\u0259yi\u015fdir",
"Replace with": "Bununla d\u0259yi\u015fdir",
"Find": "Tap",
"Replace all": "Ham\u0131s\u0131n\u0131 d\u0259yi\u015fdir",
"Match case": "Registri n\u0259z\u0259r\u0259 al",
"Prev": "\u018fvv\u0259lki",
"Spellcheck": "Orfoqrafiyan\u0131 yoxla",
"Finish": "Bitir",
"Ignore all": "Ham\u0131s\u0131n\u0131 iqnorla",
"Ignore": "\u0130qnorla",
"Add to Dictionary": "L\u00fc\u011f\u0259t\u0259 \u0259lav\u0259 edilsin",
"Insert row before": "\u018fvv\u0259lin\u0259 s\u0259tir \u0259lav\u0259 et",
"Rows": "S\u0259tirl\u0259r",
"Height": "H\u00fcnd\u00fcrl\u00fcy\u00fc",
"Paste row after": "Sonras\u0131na s\u0259tir \u0259lav\u0259 et",
"Alignment": "D\u00fczl\u0259ndirm\u0259",
"Border color": "\u00c7\u0259r\u00e7iv\u0259 r\u0259ngi",
"Column group": "S\u00fctunun qrupu",
"Row": "S\u0259tir",
"Insert column before": "\u018fvv\u0259lin\u0259 s\u0259tir \u0259lav\u0259 et",
"Split cell": "H\u00fccr\u0259l\u0259rin say\u0131",
"Cell padding": "H\u00fccr\u0259l\u0259rin sah\u0259l\u0259ri",
"Cell spacing": "H\u00fccr\u0259l\u0259rin aras\u0131nda m\u0259saf\u0259",
"Row type": "S\u0259tirin tipi",
"Insert table": "S\u0259tir \u0259lav\u0259 et",
"Body": "K\u00fctl\u0259",
"Caption": "Ba\u015flan\u011f\u0131c",
"Footer": "Son",
"Delete row": "S\u0259tiri sil",
"Paste row before": "\u018fvv\u0259lin\u0259 s\u0259tir \u0259lav\u0259 et",
"Scope": "Sfera",
"Delete table": "C\u0259dv\u0259li sil",
"H Align": "H D\u00fczl\u0259ndir",
"Top": "Yuxar\u0131",
"Header cell": "H\u00fccr\u0259nin ba\u015fl\u0131\u011f\u0131",
"Column": "S\u00fctun",
"Row group": "S\u0259tirin qrupu",
"Cell": "H\u00fccr\u0259",
"Middle": "Orta",
"Cell type": "H\u00fccr\u0259nin tipi",
"Copy row": "S\u0259tiri k\u00f6\u00e7\u00fcr",
"Row properties": "S\u0259tirin x\u00fcsusiyy\u0259tl\u0259ri",
"Table properties": "C\u0259dv\u0259lin x\u00fcsusiyy\u0259tl\u0259ri",
"Bottom": "A\u015fa\u011f\u0131",
"V Align": "V D\u00fczl\u0259ndir",
"Header": "Ba\u015fl\u0131q",
"Right": "Sa\u011f t\u0259r\u0259f \u00fczr\u0259",
"Insert column after": "\u018fvv\u0259lin\u0259 s\u00fctun \u0259lav\u0259 et",
"Cols": "S\u00fctunlar",
"Insert row after": "Sonras\u0131na s\u0259tir \u0259lav\u0259 et",
"Width": "Eni",
"Cell properties": "H\u00fccr\u0259nin x\u00fcsusiyy\u0259tl\u0259ri",
"Left": "Sol t\u0259r\u0259f \u00fczr\u0259",
"Cut row": "S\u0259tiri k\u0259s",
"Delete column": "S\u00fctunu sil",
"Center": "M\u0259rk\u0259z \u00fczr\u0259",
"Merge cells": "H\u00fccr\u0259l\u0259ri birl\u0259\u015ftir",
"Insert template": "\u015eablon \u0259lav\u0259 et",
"Templates": "\u015eablonlar",
"Background color": "Arxafon r\u0259ngi",
"Custom...": "\u00c7\u0259kilm\u0259...",
"Custom color": "\u00c7\u0259kilm\u0259 r\u0259ng",
"No color": "R\u0259ngsiz",
"Text color": "M\u0259tnin r\u0259ngi",
"Show blocks": "Bloklar\u0131 g\u00f6st\u0259r",
"Show invisible characters": "G\u00f6r\u00fcnm\u0259y\u0259n simvollar\u0131 g\u00f6st\u0259r",
"Words: {0}": "S\u00f6zl\u0259r: {0}",
"Insert": "\u018flav\u0259 et",
"File": "Fayl",
"Edit": "Redakt\u0259 et",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "B\u00f6y\u00fck m\u0259tn sah\u0259si \u0259lav\u0259 edilib. Menyu \u00fc\u00e7\u00fcn ALT-F9 d\u00fcym\u0259sini bas\u0131n. Al\u0259tl\u0259r paneli \u00fc\u00e7\u00fcn ALT-F10 d\u00fcym\u0259sini bas\u0131n. K\u00f6m\u0259k \u00fc\u00e7\u00fcn ALT-0 d\u00fcym\u0259l\u0259rin bas\u0131n.",
"Tools": "Al\u0259tl\u0259r",
"View": "G\u00f6r\u00fcn\u00fc\u015f",
"Table": "C\u0259dv\u0259l",
"Format": "Format"
});
\ No newline at end of file
tinymce.addI18n('bn_BD',{
"Cut": "\u0995\u09b0\u09cd\u09a4\u09a8",
"Header 2": "\u09b9\u09c7\u09a1\u09be\u09b0 \u09e8",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.",
"Div": "\u09a1\u09bf\u09ad",
"Paste": "\u0986\u099f\u0995\u09c7 \u09a6\u09bf\u09a8",
"Close": "\u09ac\u09a8\u09cd\u09a7",
"Font Family": "Font Family",
"Pre": "Pre",
"Align right": "Align right",
"New document": "\u09a8\u09a4\u09c1\u09a8 \u09a6\u09b8\u09cd\u09a4\u09be\u09ac\u09c7\u099c",
"Blockquote": "Blockquote",
"Numbered list": "Numbered list",
"Increase indent": "Increase indent",
"Formats": "Formats",
"Headers": "\u09b9\u09c7\u09a1\u09be\u09b0 \u09b8\u09ae\u09c1\u09b9",
"Select all": "\u09b8\u09ac \u09a8\u09bf\u09b0\u09cd\u09ac\u09be\u099a\u09a8 \u0995\u09b0\u09c1\u09a8",
"Header 3": "\u09b9\u09c7\u09a1\u09be\u09b0 \u09e9",
"Blocks": "Blocks",
"Undo": "\u09aa\u09c2\u09b0\u09cd\u09ac\u09be\u09ac\u09b8\u09cd\u09a5\u09be\u09af\u09bc \u09ab\u09bf\u09b0\u09c1\u09a8",
"Strikethrough": "\u09b8\u09cd\u099f\u09cd\u09b0\u09be\u0987\u0995\u09a5\u09cd\u09b0\u09c1",
"Bullet list": "Bullet list",
"Header 1": "\u09b9\u09c7\u09a1\u09be\u09b0 \u09e7",
"Superscript": "\u098a\u09b0\u09cd\u09a7\u09cd\u09ac\u09b2\u09bf\u09aa\u09bf",
"Clear formatting": "Clear formatting",
"Font Sizes": "Font Sizes",
"Subscript": "\u09a8\u09bf\u09ae\u09cd\u09a8\u09b2\u09bf\u09aa\u09bf",
"Header 6": "\u09b9\u09c7\u09a1\u09be\u09b0 \u09ec",
"Redo": "\u09aa\u09c1\u09a8\u09b0\u09be\u09af\u09bc \u0995\u09b0\u09c1\u09a8",
"Paragraph": "Paragraph",
"Ok": "\u09a0\u09bf\u0995 \u0986\u099b\u09c7",
"Bold": "Bold",
"Code": "Code",
"Italic": "\u09a4\u09bf\u09b0\u09cd\u09af\u0995",
"Align center": "Align center",
"Header 5": "\u09b9\u09c7\u09a1\u09be\u09b0 \u09eb",
"Decrease indent": "Decrease indent",
"Header 4": "\u09b9\u09c7\u09a1\u09be\u09b0 \u09ea",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.",
"Underline": "\u09a8\u09bf\u09ae\u09cd\u09a8\u09b0\u09c7\u0996\u09be",
"Cancel": "\u09ac\u09be\u09a4\u09bf\u09b2",
"Justify": "Justify",
"Inline": "Inline",
"Copy": "\u0985\u09a8\u09c1\u0995\u09b0\u09a3",
"Align left": "Align left",
"Visual aids": "Visual aids",
"Lower Greek": "Lower Greek",
"Square": "Square",
"Default": "Default",
"Lower Alpha": "Lower Alpha",
"Circle": "Circle",
"Disc": "Disc",
"Upper Alpha": "Upper Alpha",
"Upper Roman": "Upper Roman",
"Lower Roman": "Lower Roman",
"Name": "Name",
"Anchor": "Anchor",
"You have unsaved changes are you sure you want to navigate away?": "You have unsaved changes are you sure you want to navigate away?",
"Restore last draft": "Restore last draft",
"Special character": "Special character",
"Source code": "Source code",
"Right to left": "Right to left",
"Left to right": "Left to right",
"Emoticons": "Emoticons",
"Robots": "Robots",
"Document properties": "Document properties",
"Title": "Title",
"Keywords": "Keywords",
"Encoding": "Encoding",
"Description": "Description",
"Author": "Author",
"Fullscreen": "Fullscreen",
"Horizontal line": "Horizontal line",
"Horizontal space": "Horizontal space",
"Insert\/edit image": "Insert\/edit image",
"General": "General",
"Advanced": "Advanced",
"Source": "Source",
"Border": "Border",
"Constrain proportions": "Constrain proportions",
"Vertical space": "Vertical space",
"Image description": "Image description",
"Style": "Style",
"Dimensions": "Dimensions",
"Insert image": "Insert image",
"Insert date\/time": "Insert date\/time",
"Remove link": "Remove link",
"Url": "Url",
"Text to display": "Text to display",
"Anchors": "Anchors",
"Insert link": "Insert link",
"New window": "New window",
"None": "None",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?",
"Target": "Target",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",
"Insert\/edit link": "Insert\/edit link",
"Insert\/edit video": "Insert\/edit video",
"Poster": "Poster",
"Alternative source": "Alternative source",
"Paste your embed code below:": "Paste your embed code below:",
"Insert video": "Insert video",
"Embed": "Embed",
"Nonbreaking space": "Nonbreaking space",
"Page break": "Page break",
"Paste as text": "Paste as text",
"Preview": "Preview",
"Print": "Print",
"Save": "Save",
"Could not find the specified string.": "Could not find the specified string.",
"Replace": "Replace",
"Next": "Next",
"Whole words": "Whole words",
"Find and replace": "Find and replace",
"Replace with": "Replace with",
"Find": "Find",
"Replace all": "Replace all",
"Match case": "Match case",
"Prev": "Prev",
"Spellcheck": "Spellcheck",
"Finish": "Finish",
"Ignore all": "Ignore all",
"Ignore": "Ignore",
"Insert row before": "Insert row before",
"Rows": "Rows",
"Height": "Height",
"Paste row after": "Paste row after",
"Alignment": "Alignment",
"Column group": "Column group",
"Row": "Row",
"Insert column before": "Insert column before",
"Split cell": "Split cell",
"Cell padding": "Cell padding",
"Cell spacing": "Cell spacing",
"Row type": "Row type",
"Insert table": "Insert table",
"Body": "Body",
"Caption": "Caption",
"Footer": "Footer",
"Delete row": "Delete row",
"Paste row before": "Paste row before",
"Scope": "Scope",
"Delete table": "Delete table",
"Header cell": "Header cell",
"Column": "Column",
"Cell": "Cell",
"Header": "Header",
"Cell type": "Cell type",
"Copy row": "Copy row",
"Row properties": "Row properties",
"Table properties": "Table properties",
"Row group": "Row group",
"Right": "Right",
"Insert column after": "Insert column after",
"Cols": "Cols",
"Insert row after": "Insert row after",
"Width": "Width",
"Cell properties": "Cell properties",
"Left": "Left",
"Cut row": "Cut row",
"Delete column": "Delete column",
"Center": "Center",
"Merge cells": "Merge cells",
"Insert template": "Insert template",
"Templates": "Templates",
"Background color": "Background color",
"Text color": "Text color",
"Show blocks": "Show blocks",
"Show invisible characters": "Show invisible characters",
"Words: {0}": "Words: {0}",
"Insert": "Insert",
"File": "File",
"Edit": "Edit",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help",
"Tools": "Tools",
"View": "View",
"Table": "Table",
"Format": "Format"
});
\ No newline at end of file
tinymce.addI18n('bs',{
"Cut": "Izre\u017ei",
"Heading 5": "Naslov 5",
"Header 2": "Zaglavlje 2",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Va\u0161 browser ne podr\u017eava direktan pristup me\u0111umemoriji. Molimo vas da koristite pre\u010dice Ctrl+X\/C\/V na tastaturi.",
"Heading 4": "Naslov 4",
"Div": "Div",
"Heading 2": "Naslov 2",
"Paste": "Zalijepi",
"Close": "Zatvori",
"Font Family": "Familija fonta",
"Pre": "Pre",
"Align right": "Poravnaj desno",
"New document": "Novi dokument",
"Blockquote": "Blok citat",
"Numbered list": "Numerisana lista",
"Heading 1": "Naslov 1",
"Headings": "Naslovi",
"Increase indent": "Pove\u0107aj uvlaku",
"Formats": "Formati",
"Headers": "Zaglavlja",
"Select all": "Ozna\u010di sve",
"Header 3": "Zaglavlje 3",
"Blocks": "Blokovi",
"Undo": "Nazad",
"Strikethrough": "Precrtano",
"Bullet list": "Bullet lista",
"Header 1": "Zaglavlje 1",
"Superscript": "Eksponent",
"Clear formatting": "Poni\u0161ti formatiranje",
"Font Sizes": "Veli\u010dine fonta",
"Subscript": "Indeks",
"Header 6": "Zaglavlje 6",
"Redo": "Naprijed",
"Paragraph": "Paragraf",
"Ok": "U redu",
"Bold": "Podebljano",
"Code": "Kod",
"Italic": "Nakrivljen",
"Align center": "Centriraj",
"Header 5": "Zaglavlje 5",
"Heading 6": "Naslov 6",
"Heading 3": "Naslov 3",
"Decrease indent": "Smanji uvlaku",
"Header 4": "Zaglavlje 4",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Lijepljenje je sada u modu obi\u010dnog teksta. Sadr\u017eaj \u0107e sada biti zalijepljen kao obi\u010dni tekst sve dok ovu opciju ne ugasite.",
"Underline": "Podvu\u010deno",
"Cancel": "Otka\u017ei",
"Justify": "Obostrano poravnanje",
"Inline": "U liniji",
"Copy": "Kopiraj",
"Align left": "Poravnaj lijevo",
"Visual aids": "Vizualna pomo\u0107",
"Lower Greek": "Mala gr\u010dka slova",
"Square": "Kvadrat",
"Default": "Po\u010detno",
"Lower Alpha": "Mala slova",
"Circle": "Krug",
"Disc": "Disk",
"Upper Alpha": "Velika slova",
"Upper Roman": "Velika rimska slova",
"Lower Roman": "Mala rimska slova",
"Name": "Ime",
"Anchor": "Anchor",
"You have unsaved changes are you sure you want to navigate away?": "Niste sa\u010duvali izmjene. Jeste li sigurni da \u017eelite napustiti stranicu?",
"Restore last draft": "Vrati posljednju skicu",
"Special character": "Specijalni znak",
"Source code": "Izvorni kod",
"Color": "Boja",
"Right to left": "S desna na lijevo",
"Left to right": "S lijeva na desno",
"Emoticons": "Smajliji",
"Robots": "Roboti",
"Document properties": "Svojstva dokumenta",
"Title": "Naslov",
"Keywords": "Klju\u010dne rije\u010di",
"Encoding": "Kodiranje",
"Description": "Opis",
"Author": "Autor",
"Fullscreen": "Cijeli ekran",
"Horizontal line": "Vodoravna linija",
"Horizontal space": "Horizontalni razmak",
"Insert\/edit image": "Umetni\/uredi sliku",
"General": "Op\u0107enito",
"Advanced": "Napredno",
"Source": "Izvor",
"Border": "Okvir",
"Constrain proportions": "Ograni\u010di proporcije",
"Vertical space": "Vertikalni razmak",
"Image description": "Opis slike",
"Style": "Stil",
"Dimensions": "Dimenzije",
"Insert image": "Umetni sliku",
"Insert date\/time": "Umetni datum\/vrijeme",
"Remove link": "Ukloni link",
"Url": "URL",
"Text to display": "Tekst za prikaz",
"Anchors": "Anchori",
"Insert link": "Umetni link",
"New window": "Novi prozor",
"None": "Ni\u0161ta",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Izgleda je URL koji ste upisali vanjski link. \u017delite li da dodate obavezni http:\/\/ prefiks?",
"Target": "Odredi\u0161te",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Izgleda da je URL koji ste upisali ustvari email adresa. \u017delite li da dodate obavezni mailto: prefiks?",
"Insert\/edit link": "Umetni\/uredi link",
"Insert\/edit video": "Umetni\/uredi video",
"Poster": "Objavio",
"Alternative source": "Alternativni izvor",
"Paste your embed code below:": "Zalijepite va\u0161 ugradbeni kod ispod:",
"Insert video": "Umetni video",
"Embed": "Ugradi",
"Nonbreaking space": "Neprijelomni razmak",
"Page break": "Prijelom stranice",
"Paste as text": "Zalijepi kao tekst",
"Preview": "Pregled",
"Print": "\u0160tampaj",
"Save": "Sa\u010duvaj",
"Could not find the specified string.": "Tra\u017eeni string nije prona\u0111en.",
"Replace": "Zamijeni",
"Next": "Sljede\u0107e",
"Whole words": "Cijele rije\u010di",
"Find and replace": "Prona\u0111i i zamijeni",
"Replace with": "Zamijena sa",
"Find": "Prona\u0111i",
"Replace all": "Zamijeni sve",
"Match case": "Razlikuj mala i velika slova",
"Prev": "Prethodno",
"Spellcheck": "Provjera pravopisa",
"Finish": "Zavr\u0161i",
"Ignore all": "Zanemari sve",
"Ignore": "Zanemari",
"Add to Dictionary": "Dodaj u rje\u010dnik",
"Insert row before": "Umetni red iznad",
"Rows": "Redovi",
"Height": "Visina",
"Paste row after": "Zalijepi red iznad",
"Alignment": "Poravnanje",
"Border color": "Boja okvira",
"Column group": "Grupa kolone",
"Row": "Red",
"Insert column before": "Umetni kolonu iznad",
"Split cell": "Podijeli \u0107eliju",
"Cell padding": "Ispunjenje \u0107elije",
"Cell spacing": "Razmak \u0107elija",
"Row type": "Vrsta reda",
"Insert table": "Umetni tabelu",
"Body": "Tijelo",
"Caption": "Natpis",
"Footer": "Podno\u017eje",
"Delete row": "Obri\u0161i red",
"Paste row before": "Zalijepi red ispod",
"Scope": "Opseg",
"Delete table": "Obri\u0161i tabelu",
"H Align": "H poravnanje",
"Top": "Vrh",
"Header cell": "\u0106elija zaglavlja",
"Column": "Kolona",
"Row group": "Grupa reda",
"Cell": "\u0106elija",
"Middle": "Sredina",
"Cell type": "Vrsta \u0107elije",
"Copy row": "Kopiraj red",
"Row properties": "Svojstva reda",
"Table properties": "Svojstva tabele",
"Bottom": "Dno",
"V Align": "V poravnanje",
"Header": "Zaglavlje",
"Right": "Desno",
"Insert column after": "Umetni kolonu ispod",
"Cols": "Kolone",
"Insert row after": "Umetni red ispod",
"Width": "\u0160irina",
"Cell properties": "Svojstva \u0107elije",
"Left": "Lijevo",
"Cut row": "Izre\u017ei red",
"Delete column": "Obri\u0161i kolonu",
"Center": "Centrirano",
"Merge cells": "Spoji \u0107elije",
"Insert template": "Umetni predlo\u017eak",
"Templates": "Predlo\u0161ci",
"Background color": "Boja pozadine",
"Custom...": "Prilago\u0111eno...",
"Custom color": "Korisni\u010dka boja",
"No color": "Bez boje",
"Text color": "Boja tekst",
"Show blocks": "Prika\u017ei blokove",
"Show invisible characters": "Prika\u017ei nevidljive znakove",
"Words: {0}": "Rije\u010di: {0}",
"Insert": "Umetni",
"File": "Datoteka",
"Edit": "Uredi",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Oblast za ure\u0111ivanje teksta. Pritisnite ALT-F9 za meni. Pritisnite ALT-F10 za prikaz alatne trake. Pritisnite ALT-0 za pomo\u0107.",
"Tools": "Alati",
"View": "Pregled",
"Table": "Tabela",
"Format": "Formatiranje"
});
\ No newline at end of file
tinymce.addI18n('fa',{
"Cut": "\u0628\u0631\u062f\u0627\u0634\u062a\u0646",
"Header 2": "\u0633\u0631\u200c\u0635\u0641\u062d\u0647 2",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u0645\u0631\u0648\u0631\u06af\u0631 \u0634\u0645\u0627 \u0627\u0632 \u062f\u0633\u062a\u0631\u0633\u06cc \u0645\u0633\u062a\u0642\u06cc\u0645 \u0628\u0647 \u062d\u0627\u0641\u0638\u0647 \u06a9\u067e\u06cc \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0646\u0645\u06cc \u06a9\u0646\u062f. \u0644\u0637\u0641\u0627 \u0627\u0632 \u06a9\u0644\u06cc\u062f \u0647\u0627\u06cc Ctrl+X\/C\/V \u062f\u0631 \u06a9\u06cc\u0628\u0648\u0631\u062f \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.",
"Div": "\u062a\u06af \u0628\u062e\u0634 - Div",
"Paste": "\u0686\u0633\u0628\u0627\u0646\u062f\u0646",
"Close": "\u0628\u0633\u062a\u0646",
"Font Family": "\u0641\u0648\u0646\u062a",
"Pre": "\u062a\u06af \u062a\u0628\u062f\u06cc\u0644 \u0628\u0647 \u0645\u062a\u0646 \u0633\u0627\u062f\u0647 - Pre",
"Align right": "\u0631\u0627\u0633\u062a \u0686\u06cc\u0646",
"New document": "\u0633\u0646\u062f \u062c\u062f\u06cc\u062f",
"Blockquote": "\u062a\u06af \u0646\u0642\u0644 \u0642\u0648\u0644 - Blockquote",
"Numbered list": "\u0644\u06cc\u0633\u062a \u0634\u0645\u0627\u0631\u0647 \u0627\u06cc",
"Increase indent": "\u0627\u0641\u0632\u0627\u06cc\u0634 \u062a\u0648 \u0631\u0641\u062a\u06af\u06cc",
"Formats": "\u0642\u0627\u0644\u0628",
"Headers": "\u0633\u0631\u200c\u0635\u0641\u062d\u0647\u200c\u0647\u0627",
"Select all": "\u0627\u0646\u062a\u062e\u0627\u0628 \u0647\u0645\u0647",
"Header 3": "\u0633\u0631\u200c\u0635\u0641\u062d\u0647 3",
"Blocks": "\u0628\u0644\u0648\u06a9",
"Undo": "\t\n\u0628\u0627\u0637\u0644 \u06a9\u0631\u062f\u0646",
"Strikethrough": "\u062e\u0637 \u062e\u0648\u0631\u062f\u0647",
"Bullet list": "\u0644\u06cc\u0633\u062a \u062f\u0627\u06cc\u0631\u0647 \u0627\u06cc",
"Header 1": "\u0633\u0631\u200c\u0635\u0641\u062d\u0647 1",
"Superscript": "\u0628\u0627\u0644\u0627\u0646\u0648\u06cc\u0633 - \u062d\u0627\u0644\u062a \u062a\u0648\u0627\u0646",
"Clear formatting": "\u067e\u0627\u06a9 \u06a9\u0631\u062f\u0646 \u0642\u0627\u0644\u0628 \u0628\u0646\u062f\u06cc",
"Font Sizes": "\u0627\u0646\u062f\u0627\u0632\u0647 \u0641\u0648\u0646\u062a",
"Subscript": "\u0632\u06cc\u0631 \u0646\u0648\u06cc\u0633 - \u062d\u0627\u0644\u062a \u0627\u0646\u062f\u06cc\u0633",
"Header 6": "\u0633\u0631\u200c\u0635\u0641\u062d\u0647 6",
"Redo": "\u0627\u0646\u062c\u0627\u0645 \u062f\u0648\u0628\u0627\u0631\u0647",
"Paragraph": "\u062a\u06af \u067e\u0627\u0631\u0627\u06af\u0631\u0627\u0641 - Paragraph",
"Ok": "\u0628\u0627\u0634\u0647",
"Bold": "\u062f\u0631\u0634\u062a",
"Code": "\u062a\u06af \u06a9\u062f - Code",
"Italic": "\u062e\u0637 \u06a9\u062c",
"Align center": "\u0648\u0633\u0637 \u0686\u06cc\u0646",
"Header 5": "\u0633\u0631\u200c\u0635\u0641\u062d\u0647 5",
"Decrease indent": "\u06a9\u0627\u0647\u0634 \u062a\u0648 \u0631\u0641\u062a\u06af\u06cc",
"Header 4": "\u0633\u0631\u200c\u0635\u0641\u062d\u0647 4",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0647\u0645 \u0627\u06a9\u0646\u0648\u0646 \u062f\u0631 \u062d\u0627\u0644\u062a \u0645\u062a\u0646 \u0633\u0627\u062f\u0647 \u0627\u0633\u062a. \u062a\u0627 \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a \u0631\u0627 \u063a\u06cc\u0631\u200c\u0641\u0639\u0627\u0644 \u0646\u06a9\u0646\u06cc\u062f\u060c \u0645\u062d\u062a\u0648\u0627 \u062f\u0631 \u062d\u0627\u0644\u062a \u0645\u062a\u0646 \u0633\u0627\u062f\u0647 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f.",
"Underline": "\u062e\u0637 \u0632\u06cc\u0631",
"Cancel": "\u0644\u063a\u0648",
"Justify": "\u0645\u0633\u0627\u0648\u06cc \u0627\u0632 \u0637\u0631\u0641\u06cc\u0646",
"Inline": "\u062e\u0637\u06cc",
"Copy": "\u06a9\u067e\u06cc",
"Align left": "\u0686\u067e \u0686\u06cc\u0646",
"Visual aids": "\u06a9\u0645\u06a9 \u0647\u0627\u06cc \u0628\u0635\u0631\u06cc",
"Lower Greek": "\u06cc\u0648\u0646\u0627\u0646\u06cc \u06a9\u0648\u0686\u06a9",
"Square": "\u0645\u0631\u0628\u0639",
"Default": "\u067e\u06cc\u0634\u0641\u0631\u0636",
"Lower Alpha": "\u0622\u0644\u0641\u0627\u0621 \u06a9\u0648\u0686\u06a9",
"Circle": "\u062f\u0627\u06cc\u0631\u0647",
"Disc": "\u062f\u06cc\u0633\u06a9",
"Upper Alpha": "\u0622\u0644\u0641\u0627\u0621 \u0628\u0632\u0631\u06af",
"Upper Roman": "\u0631\u0648\u0645\u06cc \u0628\u0632\u0631\u06af",
"Lower Roman": "\u0631\u0648\u0645\u06cc \u06a9\u0648\u0686\u06a9",
"Name": "\u0646\u0627\u0645",
"Anchor": "\u0644\u0646\u06af\u0631 - \u0644\u06cc\u0646\u06a9",
"You have unsaved changes are you sure you want to navigate away?": "\u0634\u0645\u0627 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0630\u062e\u06cc\u0631\u0647 \u0646\u0634\u062f\u0647 \u0627\u06cc \u062f\u0627\u0631\u06cc\u062f\u060c \u0622\u06cc\u0627 \u0645\u0637\u0645\u0626\u0646\u06cc\u062f \u06a9\u0647 \u0645\u06cc\u062e\u0648\u0627\u0647\u06cc\u062f \u0627\u0632 \u0627\u06cc\u0646 \u0635\u0641\u062d\u0647 \u0628\u0631\u0648\u06cc\u062f\u061f",
"Restore last draft": "\u0628\u0627\u0632\u06af\u0631\u062f\u0627\u0646\u062f\u0646 \u0622\u062e\u0631\u06cc\u0646 \u067e\u06cc\u0634 \u0646\u0648\u06cc\u0633",
"Special character": "\u06a9\u0627\u0631\u0627\u06a9\u062a\u0631 \u0647\u0627\u06cc \u062e\u0627\u0635",
"Source code": "\u06a9\u062f \u0645\u0646\u0628\u0639",
"Right to left": "\u0631\u0627\u0633\u062a \u0628\u0647 \u0686\u067e",
"Left to right": "\u0686\u067e \u0628\u0647 \u0631\u0627\u0633\u062a",
"Emoticons": "\u0634\u06a9\u0644\u06a9\u200c\u0647\u0627",
"Robots": "\u0631\u0628\u0627\u062a\u200c\u0647\u0627",
"Document properties": "\u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc \u0633\u0646\u062f",
"Title": "\u0639\u0646\u0648\u0627\u0646",
"Keywords": "\u06a9\u0644\u0645\u0627\u062a \u06a9\u0644\u06cc\u062f\u06cc",
"Encoding": "\u06a9\u062f \u06af\u0630\u0627\u0631\u06cc",
"Description": "\u062a\u0648\u0636\u06cc\u062d\u0627\u062a",
"Author": "\u0646\u0648\u06cc\u0633\u0646\u062f\u0647",
"Fullscreen": "\u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647",
"Horizontal line": "\u062e\u0637 \u0627\u0641\u0642\u06cc",
"Horizontal space": "\u0641\u0636\u0627\u06cc \u0627\u0641\u0642\u06cc",
"Insert\/edit image": "\u0627\u0636\u0627\u0641\u0647\/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u06a9\u0631\u062f\u0646 \u062a\u0635\u0648\u06cc\u0631",
"General": "\u0639\u0645\u0648\u0645\u06cc",
"Advanced": "\u067e\u06cc\u0634\u0631\u0641\u062a\u0647",
"Source": "\u0645\u0646\u0628\u0639",
"Border": "\u062d\u0627\u0634\u06cc\u0647",
"Constrain proportions": "\u062d\u0641\u0638 \u062a\u0646\u0627\u0633\u0628",
"Vertical space": "\u0641\u0636\u0627\u06cc \u0639\u0645\u0648\u062f\u06cc",
"Image description": "\u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u0639\u06a9\u0633",
"Style": "\u0633\u0628\u06a9",
"Dimensions": "\u0627\u0628\u0639\u0627\u062f",
"Insert image": "\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u062a\u0635\u0648\u06cc\u0631",
"Insert date\/time": "\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u062a\u0627\u0631\u06cc\u062e\/\u0632\u0645\u0627\u0646",
"Remove link": "\u062d\u0630\u0641 \u0644\u06cc\u0646\u06a9",
"Url": "\u0627\u062f\u0631\u0633 \u0644\u06cc\u0646\u06a9",
"Text to display": "\u0645\u062a\u0646 \u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634",
"Anchors": "\u0644\u0646\u06af\u0631 - \u0644\u06cc\u0646\u06a9 \u062f\u0627\u062e\u0644 \u0635\u0641\u062d\u0647",
"Insert link": "\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0644\u06cc\u0646\u06a9",
"New window": "\u067e\u0646\u062c\u0631\u0647 \u062c\u062f\u06cc\u062f",
"None": "\u0647\u06cc\u0686 \u06a9\u062f\u0627\u0645",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?",
"Target": "\u0646\u062d\u0648\u0647 \u0628\u0627\u0632 \u0634\u062f\u0646 \u062f\u0631 \u0645\u0631\u0648\u0631\u06af\u0631",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",
"Insert\/edit link": "\u0627\u0636\u0627\u0641\u0647\/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u06a9\u0631\u062f\u0646 \u0644\u06cc\u0646\u06a9",
"Insert\/edit video": "\u0627\u0636\u0627\u0641\u0647\/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u06a9\u0631\u062f\u0646 \u0641\u0627\u06cc\u0644 \u062a\u0635\u0648\u06cc\u0631\u06cc",
"Poster": "\u067e\u0648\u0633\u062a\u0631",
"Alternative source": "\u0645\u0646\u0628\u0639 \u062f\u06cc\u06af\u0631",
"Paste your embed code below:": "\u06a9\u062f \u062e\u0648\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u062c\u0627 \u062f\u0627\u062f\u0646 \u062f\u0631 \u0633\u0627\u06cc\u062a - embed - \u060c \u062f\u0631 \u0632\u06cc\u0631 \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f:",
"Insert video": "\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0641\u0627\u06cc\u0644 \u062a\u0635\u0648\u06cc\u0631\u06cc",
"Embed": "\u062c\u0627 \u062f\u0627\u062f\u0646",
"Nonbreaking space": "\u0641\u0636\u0627\u06cc \u063a\u06cc\u0631 \u0634\u06a9\u0633\u062a\u0646",
"Page break": "\u0634\u06a9\u0633\u062a\u0646 \u0635\u0641\u062d\u0647",
"Paste as text": "\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062a\u0646",
"Preview": "\u067e\u06cc\u0634 \u0646\u0645\u0627\u06cc\u0634",
"Print": "\u0686\u0627\u067e",
"Save": "\u0630\u062e\u06cc\u0631\u0647",
"Could not find the specified string.": "\u0631\u0634\u062a\u0647 \u0645\u062a\u0646\u06cc \u0645\u0648\u0631\u062f \u0646\u0638\u0631 \u067e\u06cc\u062f\u0627 \u0646\u0634\u062f.",
"Replace": "\u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06a9\u0631\u062f\u0646",
"Next": "\u0628\u0639\u062f\u06cc",
"Whole words": "\u0647\u0645\u0647 \u06a9\u0644\u0645\u0647\u200c\u0647\u0627",
"Find and replace": "\u062c\u0633\u062a\u200c\u0648\u200c\u062c\u0648 \u0648 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06a9\u0631\u062f\u0646",
"Replace with": "\u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06a9\u0631\u062f\u0646 \u0628\u0627",
"Find": "\u062c\u0633\u062a\u200c\u0648\u200c\u062c\u0648",
"Replace all": "\u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06a9\u0631\u062f\u0646 \u0647\u0645\u0647",
"Match case": "\u062d\u0633\u0627\u0633 \u0628\u0647 \u062d\u0631\u0648\u0641 \u06a9\u0648\u0686\u06a9 \u0648 \u0628\u0632\u0631\u06af",
"Prev": "\u0642\u0628\u0644\u06cc",
"Spellcheck": "\u0628\u0631\u0631\u0633\u06cc \u0627\u0645\u0644\u0627\u06cc\u06cc",
"Finish": "\u067e\u0627\u06cc\u0627\u0646",
"Ignore all": "\u0646\u0627\u062f\u06cc\u062f\u0647 \u06af\u0631\u0641\u062a\u0646 \u0647\u0645\u0647",
"Ignore": "\u0646\u0627\u062f\u06cc\u062f\u0647 \u06af\u0631\u0641\u062a\u0646",
"Insert row before": "\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0633\u0637\u0631 \u062c\u062f\u06cc\u062f \u0642\u0628\u0644 \u0627\u0632 \u0627\u06cc\u0646 \u0633\u0637\u0631",
"Rows": "\u062a\u0639\u062f\u0627\u062f \u0633\u0637\u0631\u200c\u0647\u0627",
"Height": "\u0627\u0631\u062a\u0641\u0627\u0639",
"Paste row after": "\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0633\u0637\u0631\u060c \u0628\u0639\u062f \u0627\u0632 \u0627\u06cc\u0646 \u0633\u0637\u0631",
"Alignment": "\u0631\u062f\u06cc\u0641 \u0628\u0646\u062f\u06cc \u0646\u0648\u0634\u062a\u0647",
"Column group": "\u06af\u0631\u0648\u0647 \u0633\u062a\u0648\u0646",
"Row": "\u0633\u0637\u0631",
"Insert column before": "\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0633\u062a\u0648\u0646 \u062c\u062f\u06cc\u062f \u0642\u0628\u0644 \u0627\u0632 \u0627\u06cc\u0646 \u0633\u062a\u0648\u0646",
"Split cell": "\u062a\u0642\u0633\u06cc\u0645 \u0633\u0644\u0648\u0644 \u062c\u062f\u0648\u0644",
"Cell padding": "\u062d\u0627\u0634\u06cc\u0647 \u0633\u0644\u0648\u0644 \u0647\u0627",
"Cell spacing": "\u0641\u0627\u0635\u0644\u0647\u200c\u06cc \u0628\u06cc\u0646 \u0633\u0644\u0648\u0644 \u0647\u0627",
"Row type": "\u0646\u0648\u0639 \u0633\u0637\u0631",
"Insert table": "\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u062c\u062f\u0648\u0644",
"Body": "\u0628\u062f\u0646\u0647",
"Caption": "\u0639\u0646\u0648\u0627\u0646",
"Footer": "\u067e\u0627\u0646\u0648\u06cc\u0633",
"Delete row": "\u062d\u0630\u0641 \u0633\u0637\u0631",
"Paste row before": "\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0633\u0637\u0631\u060c \u0642\u0628\u0644 \u0627\u0632 \u0627\u06cc\u0646 \u0633\u0637\u0631",
"Scope": "\u0645\u062d\u062f\u0648\u062f\u0647\u200c\u06cc \u0639\u0646\u0648\u0627\u0646",
"Delete table": "\u062d\u0630\u0641 \u062c\u062f\u0648\u0644",
"Header cell": "\u0633\u0631\u0622\u06cc\u0646\u062f \u0633\u0644\u0648\u0644",
"Column": "\u0633\u062a\u0648\u0646",
"Cell": "\u0633\u0644\u0648\u0644",
"Header": "\u0633\u0631\u0622\u06cc\u0646\u062f",
"Cell type": "\u0646\u0648\u0639 \u0633\u0644\u0648\u0644",
"Copy row": "\u06a9\u067e\u06cc \u0633\u0637\u0631",
"Row properties": "\u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc \u0633\u0637\u0631",
"Table properties": "\u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc \u062c\u062f\u0648\u0644",
"Row group": "\u06af\u0631\u0648\u0647 \u0633\u0637\u0631",
"Right": "\u0631\u0627\u0633\u062a",
"Insert column after": "\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0633\u062a\u0648\u0646 \u062c\u062f\u06cc\u062f \u0628\u0639\u062f \u0627\u0632 \u0627\u06cc\u0646 \u0633\u062a\u0648\u0646",
"Cols": "\u062a\u0639\u062f\u0627\u062f \u0633\u062a\u0648\u0646\u200c\u0647\u0627",
"Insert row after": "\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0633\u0637\u0631 \u062c\u062f\u06cc\u062f \u0628\u0639\u062f \u0627\u0632 \u0627\u06cc\u0646 \u0633\u0637\u0631",
"Width": "\u0639\u0631\u0636",
"Cell properties": "\u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc \u0633\u0644\u0648\u0644",
"Left": "\u0686\u067e",
"Cut row": "\u0628\u0631\u0634 \u0633\u0637\u0631",
"Delete column": "\u062d\u0630\u0641 \u0633\u062a\u0648\u0646",
"Center": "\u0648\u0633\u0637",
"Merge cells": "\u0627\u062f\u063a\u0627\u0645 \u0633\u0644\u0648\u0644\u200c\u0647\u0627",
"Insert template": "\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0627\u0644\u06af\u0648",
"Templates": "\u0627\u0644\u06af\u0648\u200c\u0647\u0627",
"Background color": "\u0631\u0646\u06af \u0632\u0645\u06cc\u0646\u0647 \u0645\u062a\u0646",
"Text color": "\u0631\u0646\u06af \u0645\u062a\u0646",
"Show blocks": "\u0646\u0645\u0627\u06cc\u0634 \u0628\u062e\u0634\u200c\u0647\u0627",
"Show invisible characters": "\u0646\u0645\u0627\u06cc\u0634 \u06a9\u0627\u0631\u0627\u06a9\u062a\u0631\u0647\u0627\u06cc \u063a\u06cc\u0631 \u0642\u0627\u0628\u0644 \u0686\u0627\u067e",
"Words: {0}": "\u06a9\u0644\u0645\u0627\u062a : {0}",
"Insert": "\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646",
"File": "\u067e\u0631\u0648\u0646\u062f\u0647",
"Edit": "\u0648\u06cc\u0631\u0627\u06cc\u0634",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u0648\u06cc\u0631\u0627\u06cc\u0634\u06af\u0631 \u067e\u06cc\u0634\u0631\u0641\u062a\u0647\u200c\u06cc \u0645\u062a\u0646. \u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0645\u0646\u0648 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc ALT-F9\u060c \u0646\u0648\u0627\u0631 \u0627\u0628\u0632\u0627\u0631 ALT-F10 \u0648 \u0628\u0631\u0627\u06cc \u0645\u0634\u0627\u0647\u062f\u0647\u200c\u06cc \u0631\u0627\u0647\u0646\u0645\u0627 ALT-0 \u0631\u0627 \u0641\u0634\u0627\u0631 \u062f\u0647\u06cc\u062f.",
"Tools": "\u0627\u0628\u0632\u0627\u0631\u0647\u0627",
"View": "\u0646\u0645\u0627\u06cc\u0634",
"Table": "\u062c\u062f\u0648\u0644",
"Format": "\u0642\u0627\u0644\u0628",
"_dir": "rtl"
});
\ No newline at end of file
tinymce.addI18n('fa_IR',{
"Cut": "\u0628\u0631\u06cc\u062f\u0646",
"Heading 5": "Heading 5",
"Header 2": "Header 2",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u0645\u0631\u0648\u0631\u06af\u0631 \u0634\u0645\u0627 \u062f\u0633\u062a\u0631\u0633\u06cc \u0645\u0633\u062a\u0642\u06cc\u0645 \u0628\u0647 \u06a9\u0644\u06cc\u067e \u0628\u0648\u0631\u062f \u0631\u0627 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0646\u0645\u06cc \u06a9\u0646\u062f \u060c \u0644\u0637\u0641\u0627 \u0627\u0632 \u0645\u06cc\u0627\u0646\u0628\u0631\u0647\u0627\u06cc Ctrl+X\/C\/V \u06a9\u06cc\u0628\u0648\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u0645\u0627\u06cc\u06cc\u062f . ",
"Heading 4": "Heading 4",
"Div": "\u062a\u06af Div",
"Heading 2": "Heading 2",
"Paste": "\u0686\u0633\u0628\u0627\u0646\u062f\u0646",
"Close": "\u0628\u0633\u062a\u0646",
"Font Family": "\u0646\u0648\u0639 \u0641\u0648\u0646\u062a",
"Pre": "\u062a\u06af Pre",
"Align right": "\u0631\u0627\u0633\u062a \u0686\u06cc\u0646",
"New document": "\u0633\u0646\u062f \u062c\u062f\u06cc\u062f",
"Blockquote": "\u0646\u0642\u0644 \u0642\u0648\u0644",
"Numbered list": "\u0641\u0647\u0631\u0633\u062a \u0639\u062f\u062f\u06cc",
"Heading 1": "Heading 1",
"Headings": "Headings",
"Increase indent": "\u0627\u0641\u0632\u0627\u06cc\u0634 \u062a\u0648\u0631\u0641\u062a\u06af\u06cc",
"Formats": "\u0642\u0627\u0644\u0628 \u0628\u0646\u062f\u06cc \u0647\u0627",
"Headers": "Headers",
"Select all": "\u0627\u0646\u062a\u062e\u0627\u0628 \u0647\u0645\u0647",
"Header 3": "Header 3",
"Blocks": "\u0628\u0644\u0648\u06a9 \u0647\u0627",
"Undo": "\u0628\u0627\u0632\u06af\u0631\u062f\u0627\u0646\u062f\u0646",
"Strikethrough": "\u062e\u0637 \u062e\u0648\u0631\u062f\u0647",
"Bullet list": "\u0644\u06cc\u0633\u062a \u0646\u0634\u0627\u0646\u0647 \u062f\u0627\u0631",
"Header 1": "Header 1",
"Superscript": "\u0628\u0627\u0644\u0627\u0646\u0648\u06cc\u0633",
"Clear formatting": "\u067e\u0627\u06a9 \u06a9\u0631\u062f\u0646 \u0642\u0627\u0644\u0628 \u0628\u0646\u062f\u06cc",
"Font Sizes": "\u0627\u0646\u062f\u0627\u0632\u0647 \u0641\u0648\u0646\u062a",
"Subscript": "\u0632\u06cc\u0631 \u0646\u0648\u06cc\u0633",
"Header 6": "Header 6",
"Redo": "\u0628\u0627\u0632\u0686\u06cc\u0646",
"Paragraph": "\u067e\u0627\u0631\u0627\u06af\u0631\u0627\u0641",
"Ok": "\u0642\u0628\u0648\u0644",
"Bold": "\u062a\u0648\u067e\u0631",
"Code": "\u062a\u06af Code",
"Italic": "\u06a9\u062c",
"Align center": "\u0648\u0633\u0637 \u0686\u06cc\u0646",
"Header 5": "Header 5",
"Heading 6": "Heading 6",
"Heading 3": "Heading 3",
"Decrease indent": "\u06a9\u0645 \u06a9\u0631\u062f\u0646 \u062a\u0648\u0631\u0641\u062a\u06af\u06cc",
"Header 4": "Header 4",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u0645\u062d\u062a\u0648\u0627\u06cc \u06a9\u067e\u06cc \u0634\u062f\u0647 \u0628\u0635\u0648\u0631\u062a \u0628\u062f\u0648\u0646 \u0627\u0633\u062a\u0627\u06cc\u0644 \u0627\u0646\u062a\u0642\u0627\u0644 \u062e\u0648\u0627\u0647\u062f \u06cc\u0627\u0641\u062a \u060c \u062a\u0627 \u0648\u0642\u062a\u06cc \u06a9\u0647 \u0627\u06cc\u0646 \u06af\u0632\u06cc\u0646\u0647 \u0631\u0627 \u063a\u06cc\u0631 \u0641\u0639\u0627\u0644 \u06a9\u0646\u06cc\u062f . ",
"Underline": "\u0632\u06cc\u0631 \u062e\u0637 \u062f\u0627\u0631",
"Cancel": "\u0627\u0646\u0635\u0631\u0627\u0641",
"Justify": "\u062a\u0631\u0627\u0632 \u06a9\u0631\u062f\u0646",
"Inline": "\u062f\u0631\u0648\u0646 \u062e\u0637\u06cc",
"Copy": "\u06a9\u067e\u06cc",
"Align left": "\u0686\u067e \u0686\u06cc\u0646",
"Visual aids": "\u06a9\u0645\u06a9 \u0645\u062c\u0627\u0632\u06cc",
"Lower Greek": "Greek \u067e\u0627\u06cc\u06cc\u0646\u06cc",
"Square": "\u0645\u0631\u0628\u0639",
"Default": "\u067e\u06cc\u0634 \u0641\u0631\u0636",
"Lower Alpha": "Alpha \u067e\u0627\u06cc\u06cc\u0646\u06cc",
"Circle": "\u062f\u0627\u06cc\u0631\u0647",
"Disc": "\u06af\u0631\u062f\u06cc",
"Upper Alpha": "Alpha \u0628\u0627\u0644\u0627\u06cc\u06cc",
"Upper Roman": "Roman \u0628\u0627\u0644\u0627\u06cc\u06cc",
"Lower Roman": "Roman \u067e\u0627\u06cc\u06cc\u0646\u06cc",
"Name": "\u0646\u0627\u0645",
"Anchor": "\u067e\u06cc\u0648\u0646\u062f",
"You have unsaved changes are you sure you want to navigate away?": "\u0634\u0645\u0627 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0631\u0627 \u0630\u062e\u06cc\u0631\u0647 \u0646\u06a9\u0631\u062f\u0647 \u0627\u06cc\u062f\u060c \u0622\u06cc\u0627 \u0628\u0631\u0627\u06cc \u062e\u0631\u0648\u062c \u0645\u0637\u0645\u0626\u0646 \u0647\u0633\u062a\u06cc\u062f\u061f",
"Restore last draft": "\u0628\u0627\u0632\u0646\u0634\u0627\u0646\u062f\u0646 \u0622\u062e\u0631\u06cc\u0646 \u067e\u06cc\u0634 \u0646\u0648\u06cc\u0633",
"Special character": "\u06a9\u0627\u0631\u0627\u06a9\u062a\u0631\u0647\u0627\u06cc \u062e\u0627\u0635",
"Source code": "\u0633\u0648\u0631\u0633 \u06a9\u062f",
"Color": "\u0631\u0646\u06af",
"Right to left": "\u0631\u0627\u0633\u062a \u0628\u0647 \u0686\u067e",
"Left to right": "\u0631\u0627\u0633\u062a \u0628\u0647 \u0686\u067e",
"Emoticons": "\u0635\u0648\u0631\u062a\u06a9 \u0647\u0627",
"Robots": "Robots",
"Document properties": "\u0645\u0634\u062e\u0635\u0627\u062a \u0633\u0646\u062f",
"Title": "\u0639\u0646\u0648\u0627\u0646",
"Keywords": "\u06a9\u0644\u0645\u0647 \u06a9\u0644\u06cc\u062f\u06cc",
"Encoding": "Encoding",
"Description": "\u062a\u0648\u0636\u06cc\u062d\u0627\u062a",
"Author": "\u0646\u0648\u06cc\u0633\u0646\u062f\u0647",
"Fullscreen": "\u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647",
"Horizontal line": "\u062e\u0637 \u0627\u0641\u0642\u06cc",
"Horizontal space": "\u0641\u0636\u0627\u06cc \u062e\u0627\u0644\u06cc \u0627\u0641\u0642\u06cc",
"Insert\/edit image": "\u0642\u0631\u0627\u0631\/\u062a\u063a\u06cc\u06cc\u0631 \u062f\u0627\u062f\u0646 \u0639\u06a9\u0633",
"General": "\u0639\u0645\u0648\u0645\u06cc",
"Advanced": "\u067e\u06cc\u0634\u0631\u0641\u062a\u0647",
"Source": "\u0645\u0646\u0628\u0639 \u0639\u06a9\u0633",
"Border": "\u062d\u0627\u0634\u06cc\u0647",
"Constrain proportions": "\u0646\u0633\u0628\u062a \u0645\u062d\u062f\u0648\u062f",
"Vertical space": "\u0641\u0636\u0627\u06cc \u062e\u0627\u0644\u06cc \u0639\u0645\u0648\u062f\u06cc",
"Image description": "\u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u0639\u06a9\u0633",
"Style": "\u0633\u0628\u06a9",
"Dimensions": "\u0627\u0628\u0639\u0627\u062f",
"Insert image": "\u0642\u0631\u0627\u0631 \u062f\u0627\u062f\u0646 \u0639\u06a9\u0633",
"Insert date\/time": "\u0642\u0631\u0627\u0631 \u062f\u0627\u062f\u0646 \u062a\u0627\u0631\u06cc\u062e \u0648 \u0632\u0645\u0627\u0646",
"Remove link": "\u067e\u0627\u06a9 \u06a9\u0631\u062f\u0646 \u067e\u06cc\u0648\u0646\u062f",
"Url": "\u0622\u062f\u0631\u0633 \u067e\u06cc\u0648\u0646\u062f",
"Text to display": "\u0645\u062a\u0646 \u067e\u06cc\u0648\u0646\u062f",
"Anchors": "\u067e\u06cc\u0648\u0646\u062f",
"Insert link": "\u0642\u0631\u0627\u0631\u062f\u0627\u062f\u0646 \u067e\u06cc\u0648\u0646\u062f",
"New window": "\u067e\u0646\u062c\u0631\u0647 \u06cc \u062c\u062f\u06cc\u062f",
"None": "\u0647\u06cc\u0686\u06a9\u062f\u0627\u0645",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u0622\u062f\u0631\u0633 \u067e\u06cc\u0648\u0646\u062f\u06cc \u06a9\u0647 \u0648\u0627\u0631\u062f \u06a9\u0631\u062f\u0647 \u0627\u06cc\u062f \u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc \u0631\u0633\u062f \u06a9\u0647 \u0622\u062f\u0631\u0633 \u0633\u0627\u06cc\u062a\u06cc \u0627\u0633\u062a \u060c \u0622\u06cc\u0627 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u067e\u06cc\u0634\u0648\u0646\u062f http:\/\/ \u0628\u0635\u0648\u0631\u062a \u062e\u0648\u062f\u06a9\u0627\u0631 \u0628\u0647 \u0622\u0646 \u0627\u0636\u0627\u0641\u0647 \u0634\u0648\u062f \u061f",
"Target": "\u0646\u062d\u0648\u0647 \u06cc \u0628\u0627\u0632 \u0634\u062f\u0646",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u0622\u062f\u0631\u0633 \u067e\u06cc\u0648\u0646\u062f\u06cc \u06a9\u0647 \u0648\u0627\u0631\u062f \u06a9\u0631\u062f\u0647 \u0627\u06cc\u062f \u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc \u0631\u0633\u062f \u06a9\u0647 \u0622\u062f\u0631\u0633 \u0627\u06cc\u0645\u06cc\u0644 \u0645\u06cc \u0628\u0627\u0634\u062f \u060c \u0622\u06cc\u0627 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u067e\u06cc\u0634\u0648\u0646\u062f mailto: \u0628\u0635\u0648\u0631\u062a \u062e\u0648\u062f\u06a9\u0627\u0631 \u0628\u0647 \u0622\u0646 \u0627\u0636\u0627\u0641\u0647 \u0634\u0648\u062f . ",
"Insert\/edit link": "\u0642\u0631\u0627\u0631\/\u062a\u063a\u06cc\u06cc\u0631 \u062f\u0627\u062f\u0646 \u067e\u06cc\u0648\u0646\u062f",
"Insert\/edit video": "\u0642\u0631\u0627\u0631\/\u062a\u063a\u06cc\u06cc\u0631 \u062f\u0627\u062f\u0646 \u0648\u06cc\u062f\u06cc\u0648",
"Poster": "\u067e\u0648\u0633\u062a\u0631",
"Alternative source": "\u0645\u0646\u0628\u0639 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646",
"Paste your embed code below:": "embed code \u0631\u0627 \u062f\u0631 \u0632\u06cc\u0631 \u06a9\u06cc \u06a9\u0646\u06cc\u062f . ",
"Insert video": "\u0642\u0631\u0627\u0631 \u062f\u0627\u062f\u0646 \u0648\u06cc\u062f\u06cc\u0648",
"Embed": "Embed",
"_dir": "rtl"
});
\ No newline at end of file
tinymce.addI18n('fi',{
"Cut": "Leikkaa",
"Heading 5": "Otsikko 5",
"Header 2": "Otsikko 2",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Selaimesi ei tue leikep\u00f6yd\u00e4n suoraa k\u00e4ytt\u00e4mist\u00e4. Ole hyv\u00e4 ja k\u00e4yt\u00e4 n\u00e4pp\u00e4imist\u00f6n Ctrl+X\/C\/V n\u00e4pp\u00e4inyhdistelmi\u00e4.",
"Heading 4": "Otsikko 4",
"Div": "Div",
"Heading 2": "Otsikko 2",
"Paste": "Liit\u00e4",
"Close": "Sulje",
"Font Family": "Fontti",
"Pre": "Esimuotoiltu",
"Align right": "Tasaa oikealle",
"New document": "Uusi dokumentti",
"Blockquote": "Lainauslohko",
"Numbered list": "J\u00e4rjestetty lista",
"Heading 1": "Otsikko 1",
"Headings": "Otsikot",
"Increase indent": "Loitonna",
"Formats": "Muotoilut",
"Headers": "Otsikot",
"Select all": "Valitse kaikki",
"Header 3": "Otsikko 3",
"Blocks": "Lohkot",
"Undo": "Peru",
"Strikethrough": "Yliviivaus",
"Bullet list": "J\u00e4rjest\u00e4m\u00e4t\u00f6n lista",
"Header 1": "Otsikko 1",
"Superscript": "Yl\u00e4indeksi",
"Clear formatting": "Poista muotoilu",
"Font Sizes": "Fonttikoko",
"Subscript": "Alaindeksi",
"Header 6": "Otsikko 6",
"Redo": "Tee uudelleen",
"Paragraph": "Kappale",
"Ok": "Ok",
"Bold": "Lihavointi",
"Code": "Koodi",
"Italic": "Kursivointi",
"Align center": "Keskit\u00e4",
"Header 5": "Otsikko 5",
"Heading 6": "Otsikko 6",
"Heading 3": "Otsikko 3",
"Decrease indent": "Sisenn\u00e4",
"Header 4": "Otsikko 4",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Liitt\u00e4minen on nyt pelk\u00e4n tekstin -tilassa. Sis\u00e4ll\u00f6t liitet\u00e4\u00e4n nyt pelkk\u00e4n\u00e4 tekstin\u00e4, kunnes otat vaihtoehdon pois k\u00e4yt\u00f6st\u00e4.",
"Underline": "Alleviivaus",
"Cancel": "Peruuta",
"Justify": "Tasaa",
"Inline": "Samalla rivill\u00e4",
"Copy": "Kopioi",
"Align left": "Tasaa vasemmalle",
"Visual aids": "Visuaaliset neuvot",
"Lower Greek": "pienet kirjaimet: \u03b1, \u03b2, \u03b3",
"Square": "Neli\u00f6",
"Default": "Oletus",
"Lower Alpha": "pienet kirjaimet: a, b, c",
"Circle": "Pallo",
"Disc": "Ympyr\u00e4",
"Upper Alpha": "isot kirjaimet: A, B, C",
"Upper Roman": "isot kirjaimet: I, II, III",
"Lower Roman": "pienet kirjaimet: i, ii, iii",
"Name": "Nimi",
"Anchor": "Ankkuri",
"You have unsaved changes are you sure you want to navigate away?": "Sinulla on tallentamattomia muutoksia, haluatko varmasti siirty\u00e4 toiselle sivulle?",
"Restore last draft": "Palauta aiempi luonnos",
"Special character": "Erikoismerkki",
"Source code": "L\u00e4hdekoodi",
"Color": "V\u00e4ri",
"Right to left": "Oikealta vasemmalle",
"Left to right": "Vasemmalta oikealle",
"Emoticons": "Hymi\u00f6t",
"Robots": "Robotit",
"Document properties": "Dokumentin ominaisuudet",
"Title": "Otsikko",
"Keywords": "Avainsanat",
"Encoding": "Merkist\u00f6",
"Description": "Kuvaus",
"Author": "Tekij\u00e4",
"Fullscreen": "Koko ruutu",
"Horizontal line": "Vaakasuora viiva",
"Horizontal space": "Horisontaalinen tila",
"Insert\/edit image": "Lis\u00e4\u00e4\/muokkaa kuva",
"General": "Yleiset",
"Advanced": "Lis\u00e4asetukset",
"Source": "L\u00e4hde",
"Border": "Reunus",
"Constrain proportions": "S\u00e4ilyt\u00e4 mittasuhteet",
"Vertical space": "Vertikaalinen tila",
"Image description": "Kuvaus",
"Style": "Tyyli",
"Dimensions": "Mittasuhteet",
"Insert image": "Lis\u00e4\u00e4 kuva",
"Insert date\/time": "Lis\u00e4\u00e4 p\u00e4iv\u00e4m\u00e4\u00e4r\u00e4 tai aika",
"Remove link": "Poista linkki",
"Url": "Osoite",
"Text to display": "N\u00e4ytett\u00e4v\u00e4 teksti",
"Anchors": "Ankkurit",
"Insert link": "Lis\u00e4\u00e4 linkki",
"New window": "Uusi ikkuna",
"None": "Ei mit\u00e4\u00e4n",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Antamasi osoite n\u00e4ytt\u00e4\u00e4 olevan ulkoinen linkki. Haluatko lis\u00e4t\u00e4 osoitteeseen vaaditun http:\/\/ -etuliitteen?",
"Target": "Kohde",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Antamasi osoite n\u00e4ytt\u00e4\u00e4 olevan s\u00e4hk\u00f6postiosoite. Haluatko lis\u00e4t\u00e4 osoitteeseen vaaditun mailto: -etuliitteen?",
"Insert\/edit link": "Lis\u00e4\u00e4 tai muokkaa linkki",
"Insert\/edit video": "Lis\u00e4\u00e4\/muokkaa video",
"Poster": "L\u00e4hett\u00e4j\u00e4",
"Alternative source": "Vaihtoehtoinen l\u00e4hde",
"Paste your embed code below:": "Liit\u00e4 upotuskoodisi alapuolelle:",
"Insert video": "Lis\u00e4\u00e4 video",
"Embed": "Upota",
"Nonbreaking space": "Sitova v\u00e4lily\u00f6nti",
"Page break": "Sivunvaihto",
"Paste as text": "Liit\u00e4 tekstin\u00e4",
"Preview": "Esikatselu",
"Print": "Tulosta",
"Save": "Tallenna",
"Could not find the specified string.": "Haettua merkkijonoa ei l\u00f6ytynyt.",
"Replace": "Korvaa",
"Next": "Seur.",
"Whole words": "Koko sanat",
"Find and replace": "Etsi ja korvaa",
"Replace with": "Korvaa",
"Find": "Etsi",
"Replace all": "Korvaa kaikki",
"Match case": "Erota isot ja pienet kirjaimet",
"Prev": "Edel.",
"Spellcheck": "Oikolue",
"Finish": "Lopeta",
"Ignore all": "\u00c4l\u00e4 huomioi mit\u00e4\u00e4n",
"Ignore": "\u00c4l\u00e4 huomioi",
"Add to Dictionary": "Lis\u00e4\u00e4 sanakirjaan",
"Insert row before": "Lis\u00e4\u00e4 rivi ennen",
"Rows": "Rivit",
"Height": "Korkeus",
"Paste row after": "Liit\u00e4 rivi j\u00e4lkeen",
"Alignment": "Tasaus",
"Border color": "Reunuksen v\u00e4ri",
"Column group": "Sarakeryhm\u00e4",
"Row": "Rivi",
"Insert column before": "Lis\u00e4\u00e4 rivi ennen",
"Split cell": "Jaa solu",
"Cell padding": "Solun tyhj\u00e4 tila",
"Cell spacing": "Solun v\u00e4li",
"Row type": "Rivityyppi",
"Insert table": "Lis\u00e4\u00e4 taulukko",
"Body": "Runko",
"Caption": "Seloste",
"Footer": "Alaosa",
"Delete row": "Poista rivi",
"Paste row before": "Liit\u00e4 rivi ennen",
"Scope": "Laajuus",
"Delete table": "Poista taulukko",
"H Align": "H tasaus",
"Top": "Yl\u00e4reuna",
"Header cell": "Otsikkosolu",
"Column": "Sarake",
"Row group": "Riviryhm\u00e4",
"Cell": "Solu",
"Middle": "Keskikohta",
"Cell type": "Solun tyyppi",
"Copy row": "Kopioi rivi",
"Row properties": "Rivin ominaisuudet",
"Table properties": "Taulukon ominaisuudet",
"Bottom": "Alareuna",
"V Align": "V tasaus",
"Header": "Otsikko",
"Right": "Oikea",
"Insert column after": "Lis\u00e4\u00e4 rivi j\u00e4lkeen",
"Cols": "Sarakkeet",
"Insert row after": "Lis\u00e4\u00e4 rivi j\u00e4lkeen",
"Width": "Leveys",
"Cell properties": "Solun ominaisuudet",
"Left": "Vasen",
"Cut row": "Leikkaa rivi",
"Delete column": "Poista sarake",
"Center": "Keskell\u00e4",
"Merge cells": "Yhdist\u00e4 solut",
"Insert template": "Lis\u00e4\u00e4 pohja",
"Templates": "Pohjat",
"Background color": "Taustan v\u00e4ri",
"Text color": "Tekstin v\u00e4ri",
"Show blocks": "N\u00e4yt\u00e4 lohkot",
"Show invisible characters": "N\u00e4yt\u00e4 n\u00e4kym\u00e4tt\u00f6m\u00e4t merkit",
"Words: {0}": "Sanat: {0}",
"Insert": "Lis\u00e4\u00e4",
"File": "Tiedosto",
"Edit": "Muokkaa",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Rikastetun tekstin alue. Paina ALT-F9 valikkoon. Paina ALT-F10 ty\u00f6kaluriviin. Paina ALT-0 ohjeeseen.",
"Tools": "Ty\u00f6kalut",
"View": "N\u00e4yt\u00e4",
"Table": "Taulukko",
"Format": "Muotoilu"
});
\ No newline at end of file