diff --git a/libraries/ckeditor/plugins/autoembed/lang/ar.js b/libraries/ckeditor/plugins/autoembed/lang/ar.js
new file mode 100644
index 0000000000000000000000000000000000000000..729e729a62915084246c948bc7426b2457cf77ca
--- /dev/null
+++ b/libraries/ckeditor/plugins/autoembed/lang/ar.js
@@ -0,0 +1,8 @@
+/*
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+ */
+CKEDITOR.plugins.setLang( 'autoembed', 'ar', {
+	embeddingInProgress: 'جاري اضافة الرابط كمحتوى ',
+	embeddingFailed: 'لم نتمكن من اضافة الرابط كمحتوى'
+} );
diff --git a/libraries/ckeditor/plugins/autoembed/lang/az.js b/libraries/ckeditor/plugins/autoembed/lang/az.js
index cfe7303344f1e2ee00bf412c900708d6881aae1b..cf2752adfb8afcc728625b3e4ded9c977ad8f386 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/az.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/az.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'az', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/bg.js b/libraries/ckeditor/plugins/autoembed/lang/bg.js
index cd66a4ad42e69ae5bde158ad30521bee49a289d8..348a20059db003a944fef635be3bae413c573820 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/bg.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/bg.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'bg', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/ca.js b/libraries/ckeditor/plugins/autoembed/lang/ca.js
index 13045722f90b626fa1dbc3600b2832de4dc5dd3d..710f27c4185ee279390abf3d15771903aeb92266 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/ca.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/ca.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'ca', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/cs.js b/libraries/ckeditor/plugins/autoembed/lang/cs.js
index 2af0aa6c6b6a5d928576003a5d468b1d2f37c13a..ddf11814e0516a999a8c5ba787c1b9c96e273d23 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/cs.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/cs.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'cs', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/da.js b/libraries/ckeditor/plugins/autoembed/lang/da.js
index 10fe10d3284849340e6d41217529d8b5a5498cae..ca08f1f793029e8dbb9ee9ba7305fac4a66e59cd 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/da.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/da.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'da', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/de-ch.js b/libraries/ckeditor/plugins/autoembed/lang/de-ch.js
index 1cde5e66406052827db6276c4a3703b015d4b642..aee73d503bb80471ead671ef416b323d5bc9f4e7 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/de-ch.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/de-ch.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'de-ch', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/de.js b/libraries/ckeditor/plugins/autoembed/lang/de.js
index ad7a76a3d11a1aa0b6c2827a465453c8db598d51..455bd936e61bcf7a9002ce1f37f9b838370f2f72 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/de.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/de.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'de', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/el.js b/libraries/ckeditor/plugins/autoembed/lang/el.js
index c1770b1653c4f9a051ef55014bb20c6a234f76ce..97ada653b311e87a9808ee795a6d5501405b5981 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/el.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/el.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'el', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/en-au.js b/libraries/ckeditor/plugins/autoembed/lang/en-au.js
index f3877ad8abcacc2378710f7d81b28e9b4ce50ff6..caf544fd779e6e99a2ee60e497bca39ee17a6738 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/en-au.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/en-au.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'en-au', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/en.js b/libraries/ckeditor/plugins/autoembed/lang/en.js
index 961468d42bf9bfe5b9d32df141c8cf0aeb47aeb4..fef7f137e21ea286c6615d38548d590f5bf45992 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/en.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/en.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'en', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/eo.js b/libraries/ckeditor/plugins/autoembed/lang/eo.js
index d6a19d680f1518a844195c56639e674d310f5807..517a0b66b763a2e01a891b9351e8c060fc63b8ba 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/eo.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/eo.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'eo', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/es-mx.js b/libraries/ckeditor/plugins/autoembed/lang/es-mx.js
index 6013e409f03e8683975623884825ed23adcbf96a..72dcfbc0079add3fa6c5b29c8dad0bef487a740a 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/es-mx.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/es-mx.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'es-mx', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/es.js b/libraries/ckeditor/plugins/autoembed/lang/es.js
index abfdcaef11485620ff9f5570040ee126f41682ba..1822f4b07c9ac4433ef5a98432ab2f6d1ea6f96e 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/es.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/es.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'es', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/et.js b/libraries/ckeditor/plugins/autoembed/lang/et.js
new file mode 100644
index 0000000000000000000000000000000000000000..58c4c4e2829999fca3dc66bb8e0b5acc2aa33420
--- /dev/null
+++ b/libraries/ckeditor/plugins/autoembed/lang/et.js
@@ -0,0 +1,8 @@
+/*
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+ */
+CKEDITOR.plugins.setLang( 'autoembed', 'et', {
+	embeddingInProgress: 'Püütakse asetatud URLi sisu lisada...',
+	embeddingFailed: 'Selle URLi sisu ei saa automaatselt dokumenti lisada.'
+} );
diff --git a/libraries/ckeditor/plugins/autoembed/lang/eu.js b/libraries/ckeditor/plugins/autoembed/lang/eu.js
index 135bf81cd4f43d9942860cf64f4f8a2549bf8a7f..bd40f9d8d761fd242363aafa7a663e967ad85c5f 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/eu.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/eu.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'eu', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/fa.js b/libraries/ckeditor/plugins/autoembed/lang/fa.js
new file mode 100644
index 0000000000000000000000000000000000000000..ff28f1aff655fa7ab9f7539cf4ba88291abce666
--- /dev/null
+++ b/libraries/ckeditor/plugins/autoembed/lang/fa.js
@@ -0,0 +1,8 @@
+/*
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+ */
+CKEDITOR.plugins.setLang( 'autoembed', 'fa', {
+	embeddingInProgress: 'در حال تلاش برای جایگذاری آدرس قرارگرفته',
+	embeddingFailed: 'این آدرس نمیتواند به صورت خودکار جایگذاری شود'
+} );
diff --git a/libraries/ckeditor/plugins/autoembed/lang/fr.js b/libraries/ckeditor/plugins/autoembed/lang/fr.js
index 465889eaaafe11c16583d723d14f9c49419ab893..c01a8cc8bf76e07728279f6338bc51a890430b83 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/fr.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/fr.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'fr', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/gl.js b/libraries/ckeditor/plugins/autoembed/lang/gl.js
index 2fc26bd63bee0dcf0681e97c61633f25245373ca..ba4460c8ecc01162bb2ef65cbe39cb4d195c9b6f 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/gl.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/gl.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'gl', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/hr.js b/libraries/ckeditor/plugins/autoembed/lang/hr.js
index c21e8fd504d52130df7c2e9903dd29bf9766b525..4e4224747ff84c0bf8b3bbef669a3d6b94159f07 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/hr.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/hr.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'hr', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/hu.js b/libraries/ckeditor/plugins/autoembed/lang/hu.js
index c344a8eb9bb635323838ab7cf20f49391b1c4caa..a28abf248118551051df80c37277663de210ce67 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/hu.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/hu.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'hu', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/id.js b/libraries/ckeditor/plugins/autoembed/lang/id.js
new file mode 100644
index 0000000000000000000000000000000000000000..953ccf7e242c5a6418147a9bd510eed3dcee8512
--- /dev/null
+++ b/libraries/ckeditor/plugins/autoembed/lang/id.js
@@ -0,0 +1,8 @@
+/*
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+ */
+CKEDITOR.plugins.setLang( 'autoembed', 'id', {
+	embeddingInProgress: 'Coba melekatkan URL yang ditempel',
+	embeddingFailed: 'URL ini tidak bisa dilekatkan secara otomatis'
+} );
diff --git a/libraries/ckeditor/plugins/autoembed/lang/it.js b/libraries/ckeditor/plugins/autoembed/lang/it.js
index 865b29b9974b655fc0b1410918404fb4a32477b1..a711620743fdd070bf0c891c4deff9cf46f6d93e 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/it.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/it.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'it', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/ja.js b/libraries/ckeditor/plugins/autoembed/lang/ja.js
index 27ee4e3b13f51c2c7e88a8b8f0b2194339000b73..8d8e64ceff69b6f1f8cf11c13a0e56e8bc11b0fb 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/ja.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/ja.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'ja', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/km.js b/libraries/ckeditor/plugins/autoembed/lang/km.js
index 69790c8714570598850d5c933b39ab5dd6eed08c..0b442de86ad4521d834ac83cffe83f3bdb5be858 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/km.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/km.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'km', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/ko.js b/libraries/ckeditor/plugins/autoembed/lang/ko.js
index 523a58895b1c8e25f6a4ce1d2210ef8a9e4f7599..c697efdd0578bbf5affbf5fc28185c6f6256575c 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/ko.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/ko.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'ko', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/ku.js b/libraries/ckeditor/plugins/autoembed/lang/ku.js
index c3c31859f6e199aa49cf758532c87c3e3a71083b..f597513ff0459de334a5850d9edb9fce8f473eac 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/ku.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/ku.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'ku', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/lt.js b/libraries/ckeditor/plugins/autoembed/lang/lt.js
new file mode 100644
index 0000000000000000000000000000000000000000..ac3771fc9f72e0f0dc1593a805a8c6f1235d854b
--- /dev/null
+++ b/libraries/ckeditor/plugins/autoembed/lang/lt.js
@@ -0,0 +1,8 @@
+/*
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+ */
+CKEDITOR.plugins.setLang( 'autoembed', 'lt', {
+	embeddingInProgress: 'Bandome įterpti turinį iš įklijuoto URL...',
+	embeddingFailed: 'Šio URL turinys negali būti automatiškai įterptas. '
+} );
diff --git a/libraries/ckeditor/plugins/autoembed/lang/lv.js b/libraries/ckeditor/plugins/autoembed/lang/lv.js
index 98c9f4d2f0ebc3cafc810996fafe36f190df492e..2b25fd8f61d30c254093c7661431677dced2ac98 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/lv.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/lv.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'lv', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/mk.js b/libraries/ckeditor/plugins/autoembed/lang/mk.js
index 6bfcc68820c44155a9409f08a48d636477626dac..848a3ac8ff5fc5373b57e82a24f7566e25636375 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/mk.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/mk.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'mk', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/nb.js b/libraries/ckeditor/plugins/autoembed/lang/nb.js
index 8858147f9f6812f456dfee02c5fe3ecfa34a9eb6..f9485411b4eca93937acb6466393deeb715fd744 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/nb.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/nb.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'nb', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/nl.js b/libraries/ckeditor/plugins/autoembed/lang/nl.js
index cadddef457e1535a99cab5053036571e3bc425bb..87294c4595f70459dd8f5dec4adcf55f58bc5864 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/nl.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/nl.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'nl', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/oc.js b/libraries/ckeditor/plugins/autoembed/lang/oc.js
index 9948cd0e67a8131cb9cbc1f84b585d61c8f92da5..79503940255c3075f0fe5b8613cb7baf37d9a13e 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/oc.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/oc.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'oc', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/pl.js b/libraries/ckeditor/plugins/autoembed/lang/pl.js
index 1bf8f811ed3320567efb05d202dc623fc549af71..0053b13c9acda4b2863060e0db1f86d592fddab6 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/pl.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/pl.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'pl', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/pt-br.js b/libraries/ckeditor/plugins/autoembed/lang/pt-br.js
index bed102fe6426d90aa25e90f5574e2c065f5caa3d..4a23e055e853fc68350b868247e6b4e571f181fd 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/pt-br.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/pt-br.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'pt-br', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/pt.js b/libraries/ckeditor/plugins/autoembed/lang/pt.js
index 524e88141f8f3664bd81c4d0206ff47b70400b8f..0e9827a574264951b0ea4fe6c5ecfb22c264e7de 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/pt.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/pt.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'pt', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/ro.js b/libraries/ckeditor/plugins/autoembed/lang/ro.js
index 58f80712c2736be2cf891502d1d90e599e6f8e59..0c4a107169d4e16feba84b62eb92347eea57c19f 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/ro.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/ro.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'ro', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/ru.js b/libraries/ckeditor/plugins/autoembed/lang/ru.js
index 7d74155486351f1864bd00f2683efcf38a94da75..873b5ec32fc6323e5f0269b9ed5513afb916d23c 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/ru.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/ru.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'ru', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/sk.js b/libraries/ckeditor/plugins/autoembed/lang/sk.js
index 1d8f7845e8a8fbcc94b58d8f1fc442e6a2d93c37..322abd8b480dd7ca05de95c381f32dceb07df785 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/sk.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/sk.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'sk', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/sq.js b/libraries/ckeditor/plugins/autoembed/lang/sq.js
index d07cf19dbf1457383455f06efb822c853687af45..3420bd7a9a92e86e9a9f7f74fe12b406ef433394 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/sq.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/sq.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'sq', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/sr-latn.js b/libraries/ckeditor/plugins/autoembed/lang/sr-latn.js
index a5572e7e944ef4dd3b5b8b14e6cc27506482e6fa..e2ce94bf69dae2207c222a924861a0137194e8ed 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/sr-latn.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/sr-latn.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'sr-latn', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/sr.js b/libraries/ckeditor/plugins/autoembed/lang/sr.js
index f84b7ea74778dda1d851087f12d1b389f1fff352..8aab87c626d492cf5d493614186bfe7c8593d920 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/sr.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/sr.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'sr', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/sv.js b/libraries/ckeditor/plugins/autoembed/lang/sv.js
index 7ee0c863b13aab506859a638fd65b9f389d8059c..2a9decfc6bea3710eb62ac29e10420a76256dfe2 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/sv.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/sv.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'sv', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/tr.js b/libraries/ckeditor/plugins/autoembed/lang/tr.js
index 1c99e38d74e5c3122e512ad64088e3eaf38698bc..e64390c5bf0bb0424b27d30719523dd0060ee338 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/tr.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/tr.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'tr', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/ug.js b/libraries/ckeditor/plugins/autoembed/lang/ug.js
index 3707bc112b9e0b4cae48c144eafc4374696f6944..ed1f2098c6d5aee84f108f7a3ac5a7e713e8838d 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/ug.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/ug.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'ug', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/uk.js b/libraries/ckeditor/plugins/autoembed/lang/uk.js
index fa41454c690f5ef0627bc893827ad54b3570aa49..697a512b91de67cdd75c5f4158c14e0f0ddb3a26 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/uk.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/uk.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'uk', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/vi.js b/libraries/ckeditor/plugins/autoembed/lang/vi.js
index 5586e3e1f6eac8ad5c30ce3514ef98902d32804b..eb5718db6b4addd8bdde17028bc0c3a606d1af65 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/vi.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/vi.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'vi', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/zh-cn.js b/libraries/ckeditor/plugins/autoembed/lang/zh-cn.js
index 0a3530cf1b9070a355c5f72b32f242bcb0d7cafe..361365a5e51ff53b06c6f0204d816ec31841ab9a 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/zh-cn.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/zh-cn.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'zh-cn', {
diff --git a/libraries/ckeditor/plugins/autoembed/lang/zh.js b/libraries/ckeditor/plugins/autoembed/lang/zh.js
index 0d3b96525084c5da5111e160f329fa963c36797e..89820c8db4efa0a581bc6c0a1b3ef230b4c47428 100644
--- a/libraries/ckeditor/plugins/autoembed/lang/zh.js
+++ b/libraries/ckeditor/plugins/autoembed/lang/zh.js
@@ -1,5 +1,5 @@
 /*
- Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 CKEDITOR.plugins.setLang( 'autoembed', 'zh', {
diff --git a/libraries/ckeditor/plugins/autoembed/plugin.js b/libraries/ckeditor/plugins/autoembed/plugin.js
index 856d5b272e10ec9a8060d75f8a7208a48df3900a..2931f544a1441be25be320dd80b5a415013483f2 100644
--- a/libraries/ckeditor/plugins/autoembed/plugin.js
+++ b/libraries/ckeditor/plugins/autoembed/plugin.js
@@ -1,5 +1,5 @@
 /**
- * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 
@@ -10,7 +10,7 @@
 
 	CKEDITOR.plugins.add( 'autoembed', {
 		requires: 'autolink,undo',
-		lang: 'az,bg,ca,cs,da,de,de-ch,el,en,en-au,eo,es,es-mx,eu,fr,gl,hr,hu,it,ja,km,ko,ku,lv,mk,nb,nl,oc,pl,pt,pt-br,ro,ru,sk,sq,sr,sr-latn,sv,tr,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE%
+		lang: 'ar,az,bg,ca,cs,da,de,de-ch,el,en,en-au,eo,es,es-mx,et,eu,fa,fr,gl,hr,hu,id,it,ja,km,ko,ku,lt,lv,mk,nb,nl,oc,pl,pt,pt-br,ro,ru,sk,sq,sr,sr-latn,sv,tr,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE%
 		init: function( editor ) {
 			var currentId = 1,
 				embedCandidatePasted;
@@ -80,7 +80,7 @@
 		instance.loadContent( href, {
 			noNotifications: true,
 			callback: function() {
-					// DOM might be invalidated in the meantime, so find the anchor again.
+				// DOM might be invalidated in the meantime, so find the anchor again.
 				var anchor = editor.editable().findOne( 'a[data-cke-autoembed="' + id + '"]' );
 
 				// Anchor might be removed in the meantime.
@@ -152,7 +152,7 @@
 		 *
 		 * This method uses the value of the {@link CKEDITOR.config#autoEmbed_widget} option.
 		 *
-		 * @since 4.5
+		 * @since 4.5.0
 		 * @member CKEDITOR.plugins.autoEmbed
 		 * @param {CKEDITOR.editor} editor
 		 * @param {String} url The URL to be embedded.
@@ -208,10 +208,10 @@
 	 * **Note:** Plugin names are always lower case, while widget names are not, so widget names do not have to equal plugin names.
 	 * For example, there is the `embedsemantic` plugin and the `embedSemantic` widget.
 	 *
-	 * Read more in the [documentation](#!/guide/dev_media_embed-section-automatic-embedding-on-paste)
+	 * Read more in the {@glink features/media_embed#automatic-embedding-on-paste documentation}
 	 * and see the {@glink examples/mediaembed example}.
 	 *
-	 * @since 4.5
+	 * @since 4.5.0
 	 * @cfg {String/Function} [autoEmbed_widget='embed,embedSemantic']
 	 * @member CKEDITOR.config
 	 */
diff --git a/libraries/ckeditor/plugins/autolink/plugin.js b/libraries/ckeditor/plugins/autolink/plugin.js
index 7451928e8ae53a254075b5dc292add866f06ca16..ad2b97d1d6850d042bfbc16294b99806360cdee6 100644
--- a/libraries/ckeditor/plugins/autolink/plugin.js
+++ b/libraries/ckeditor/plugins/autolink/plugin.js
@@ -1,19 +1,24 @@
 /**
- * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 
 ( function() {
 	'use strict';
 
-	var doubleQuoteRegex = /"/g;
-
 	CKEDITOR.plugins.add( 'autolink', {
-		requires: 'clipboard,textmatch',
+		requires: 'clipboard,textmatch,link',
+
+		isSupportedEnvironment: function() {
+			return !CKEDITOR.env.ie || CKEDITOR.env.edge;
+		},
 
 		init: function( editor ) {
-			var urlTemplate = new CKEDITOR.template( '<a href="{link}">{text}</a>' ),
-				emailTemplate = new CKEDITOR.template( '<a href="mailto:{link}">{text}</a>' );
+
+			// (#2208)
+			if ( !this.isSupportedEnvironment() ) {
+				return;
+			}
 
 			editor.on( 'paste', function( evt ) {
 				if ( evt.data.dataTransfer.getTransferType( editor ) == CKEDITOR.DATA_TRANSFER_INTERNAL ) {
@@ -33,14 +38,9 @@
 				}
 			} );
 
-			// IE has its own link completion and we don't want to interfere with it.
-			if ( CKEDITOR.env.ie && !CKEDITOR.env.edge ) {
-				return;
-			}
-
-			var commitKeystrokes = editor.config.autolink_commitKeystrokes || CKEDITOR.config.autolink_commitKeystrokes;
+			// (#3156)
 			editor.on( 'key', function( evt ) {
-				if ( editor.mode !== 'wysiwyg' || CKEDITOR.tools.indexOf( commitKeystrokes, evt.data.keyCode ) == -1 ) {
+				if ( editor.mode !== 'wysiwyg' || CKEDITOR.tools.indexOf( editor.config.autolink_commitKeystrokes, evt.data.keyCode ) == -1 ) {
 					return;
 				}
 
@@ -73,38 +73,34 @@
 				}
 			}
 
-			function tryToEncodeLink( data ) {
-				// If enabled use link plugin to encode email link.
-				if ( editor.plugins.link ) {
-					var link = CKEDITOR.dom.element.createFromHtml( data ),
-						linkData = CKEDITOR.plugins.link.parseLinkAttributes( editor, link ),
-						attributes = CKEDITOR.plugins.link.getLinkAttributes( editor, linkData );
+			function getHtmlToInsert( text ) {
+				// URL will be encoded later on with link.setAttribute method. Avoid
+				// double encoding of special characters (#4858).
+				text = CKEDITOR.tools.htmlDecodeAttr( text );
+
+				var link = new CKEDITOR.dom.element( 'a' ),
+					value = text.replace( /"/g, '%22' );
 
-					if ( !CKEDITOR.tools.isEmpty( attributes.set ) ) {
-						link.setAttributes( attributes.set );
-					}
+				value = value.match( CKEDITOR.config.autolink_urlRegex ) ? value : 'mailto:' + value;
 
-					if ( attributes.removed.length ) {
-						link.removeAttributes( attributes.removed );
-					}
+				link.setText( text );
+				link.setAttribute( 'href', value );
 
-					link.removeAttribute( 'data-cke-saved-href' );
+				// (#1824)
+				var linkData = CKEDITOR.plugins.link.parseLinkAttributes( editor, link ),
+					attributes = CKEDITOR.plugins.link.getLinkAttributes( editor, linkData );
 
-					return link.getOuterHtml();
+				if ( !CKEDITOR.tools.isEmpty( attributes.set ) ) {
+					link.setAttributes( attributes.set );
 				}
-				return data;
-			}
 
-			function getHtmlToInsert( text ) {
-				var opts = {
-						text: text,
-						link: text.replace( doubleQuoteRegex, '%22' )
-					},
-					template = opts.link.match( CKEDITOR.config.autolink_urlRegex ) ?
-						urlTemplate.output( opts )
-						: emailTemplate.output( opts );
-
-				return tryToEncodeLink( template );
+				if ( attributes.removed.length ) {
+					link.removeAttributes( attributes.removed );
+				}
+
+				link.removeAttribute( 'data-cke-saved-href' );
+
+				return link.getOuterHtml();
 			}
 
 			function matchCallback( text, offset ) {
@@ -124,8 +120,8 @@
 			}
 
 			function matchLink( query ) {
-				return query.match( CKEDITOR.config.autolink_urlRegex ) ||
-					query.match( CKEDITOR.config.autolink_emailRegex );
+				return query.match( editor.config.autolink_urlRegex ) ||
+					query.match( editor.config.autolink_emailRegex );
 			}
 		}
 	} );
@@ -158,7 +154,7 @@
 	 * @since 4.11.0
 	 * @member CKEDITOR.config
 	 */
-	CKEDITOR.config.autolink_urlRegex = /^(https?|ftp):\/\/(-\.)?([^\s\/?\.#]+\.?)+(\/[^\s]*)?[^\s\.,]$/i;
+	CKEDITOR.config.autolink_urlRegex = /^(https?|ftp):\/\/(-\.)?([^\s\/?\.#]\.?)+(\/[^\s]*)?[^\s\.,]$/i;
 	// Regex by Imme Emosol.
 
 	/**
diff --git a/libraries/ckeditor/plugins/embed/plugin.js b/libraries/ckeditor/plugins/embed/plugin.js
index 90a352b59195a3d460a837adb9ef4c4492790e12..0bae0ccb67142b7d59666f9a36c27ff60d8fa0b3 100644
--- a/libraries/ckeditor/plugins/embed/plugin.js
+++ b/libraries/ckeditor/plugins/embed/plugin.js
@@ -1,5 +1,5 @@
 /**
- * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 
@@ -91,15 +91,15 @@
  * It is recommended to set up an account on the [Iframely](https://iframely.com/) service for
  * better control over embedded content.
  *
- * Read more in the {@glink guide/dev_media_embed documentation}
+ * Read more in the {@glink features/media_embed documentation}
  * and see the {@glink examples/mediaembed example}.
  *
  * Refer to {@link CKEDITOR.plugins.embedBase.baseDefinition#providerUrl} for more information about content providers.
  *
- * **Important note:** Prior to version 4.7 this configuration option defaulted to the
+ * **Important note:** Prior to version 4.7.0 this configuration option defaulted to the
  * `//ckeditor.iframe.ly/api/oembed?url={url}&callback={callback}` string.
  *
- * @since 4.5
+ * @since 4.5.0
  * @cfg {String} [embed_provider='']
  * @member CKEDITOR.config
  */
diff --git a/libraries/ckeditor/plugins/embedbase/dialogs/embedbase.js b/libraries/ckeditor/plugins/embedbase/dialogs/embedbase.js
index 76184057a78aebb7b5915710cca75b81bf0ceee1..28b0598b7feee098776607d2a5a8a37d80529027 100644
--- a/libraries/ckeditor/plugins/embedbase/dialogs/embedbase.js
+++ b/libraries/ckeditor/plugins/embedbase/dialogs/embedbase.js
@@ -1,5 +1,5 @@
 /**
- * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 
@@ -29,14 +29,15 @@ CKEDITOR.dialog.add( 'embedBase', function( editor ) {
 				// Indicate visually that waiting for the response (https://dev.ckeditor.com/ticket/13213).
 				that.setState( CKEDITOR.DIALOG_STATE_BUSY );
 
-				var url = that.getValueOf( 'info', 'url' );
+				var url = that.getValueOf( 'info', 'url' ),
+					widget = that.getModel( editor );
 
-				loadContentRequest = that.widget.loadContent( url, {
+				loadContentRequest = widget.loadContent( url, {
 					noNotifications: true,
 
 					callback: function() {
-						if ( !that.widget.isReady() ) {
-							editor.widgets.finalizeCreation( that.widget.wrapper.getParent( true ) );
+						if ( !widget.isReady() ) {
+							editor.widgets.finalizeCreation( widget.wrapper.getParent( true ) );
 						}
 
 						editor.fire( 'saveSnapshot' );
@@ -48,7 +49,7 @@ CKEDITOR.dialog.add( 'embedBase', function( editor ) {
 					errorCallback: function( messageTypeOrMessage ) {
 						that.getContentElement( 'info', 'url' ).select();
 
-						alert( that.widget.getErrorMessage( messageTypeOrMessage, url, 'Given' ) );
+						alert( widget.getErrorMessage( messageTypeOrMessage, url, 'Given' ) );
 
 						unlock();
 					}
@@ -85,7 +86,9 @@ CKEDITOR.dialog.add( 'embedBase', function( editor ) {
 						},
 
 						validate: function() {
-							if ( !this.getDialog().widget.isUrlValid( this.getValue() ) ) {
+							var widget = this.getDialog().getModel( editor );
+
+							if ( !widget.isUrlValid( this.getValue() ) ) {
 								return lang.unsupportedUrlGiven;
 							}
 
diff --git a/libraries/ckeditor/plugins/embedbase/lang/ar.js b/libraries/ckeditor/plugins/embedbase/lang/ar.js
index ca2ac88ad6edaa324b55df845e2995e441c36df7..29d7642b801f5c5a2a0717b0968486c59fcf62e8 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/ar.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/ar.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'ar', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/az.js b/libraries/ckeditor/plugins/embedbase/lang/az.js
index 0bc128af9414ec8feabe4f0551326faf4e8a4eaa..bd5859864ed4a333ee169974d12ca32bf9a1cae8 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/az.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/az.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'az', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/bg.js b/libraries/ckeditor/plugins/embedbase/lang/bg.js
index ef1f2cf7a5db555c5f273273bd1b8e9e9b202d36..af7cba41de72047b61f17f683341a9d69bce5068 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/bg.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/bg.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'bg', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/ca.js b/libraries/ckeditor/plugins/embedbase/lang/ca.js
index 9e8daec95299b3ab53db00429b2ae5e5cd848e85..6f29ebe7ada13fd5f172df84120727d4e1148197 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/ca.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/ca.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'ca', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/cs.js b/libraries/ckeditor/plugins/embedbase/lang/cs.js
index 8c18d0848a5f91cebe8d54547eee3f4d5b9ec1fd..695120768dbe8246267a8a2bae761b0950079b09 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/cs.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/cs.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'cs', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/da.js b/libraries/ckeditor/plugins/embedbase/lang/da.js
index e3be686c65a958d2c7cfb347009a45aaba0d6184..db6d48dd8d9cf628b9cb6c72fb77dd9d60921b50 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/da.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/da.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'da', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/de-ch.js b/libraries/ckeditor/plugins/embedbase/lang/de-ch.js
index aced8f66cacc16661eaea6a1bc7dd153e09ee70c..39de9ca67f2a704d9201ebf0b58b28138628a5fd 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/de-ch.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/de-ch.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'de-ch', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/de.js b/libraries/ckeditor/plugins/embedbase/lang/de.js
index 5b0751ed7e708a0ffad5b28843e6317d0e7d3ff4..756088c4dac9cec05fa7670b1c91839bb2f10560 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/de.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/de.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'de', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/en-au.js b/libraries/ckeditor/plugins/embedbase/lang/en-au.js
index abc77b2fdfb05c0d11ba0ead7e4c2ce29cf67d99..a951765adec19f33a07dff39b598c0384df68a28 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/en-au.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/en-au.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'en-au', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/en.js b/libraries/ckeditor/plugins/embedbase/lang/en.js
index a1d57a41b869b34d2df5bcd189d49c2f47ae267c..d40658d5c4435ff24ec3cb26d3b949140f43b12d 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/en.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/en.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'en', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/eo.js b/libraries/ckeditor/plugins/embedbase/lang/eo.js
index 4eb8cafa95a68970382bae9b1d625bc6934a3158..4df356aea58d9093930e9966e4e8465035ba99ca 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/eo.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/eo.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'eo', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/es-mx.js b/libraries/ckeditor/plugins/embedbase/lang/es-mx.js
index 01f8fe7892df8508bc2f024a344b7bb9ba9ba3ed..7ca66af0a92c97dcfe60f6a93d78f77cfd31cb6c 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/es-mx.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/es-mx.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'es-mx', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/es.js b/libraries/ckeditor/plugins/embedbase/lang/es.js
index 7610295be6e83c4b1d503c5e2f82c44a9fa0c894..d80bbd06860b9a080442d69939e0e2d868117890 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/es.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/es.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'es', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/et.js b/libraries/ckeditor/plugins/embedbase/lang/et.js
new file mode 100644
index 0000000000000000000000000000000000000000..73aefd3c951b8665b4bd6aa3be24f8750838baf3
--- /dev/null
+++ b/libraries/ckeditor/plugins/embedbase/lang/et.js
@@ -0,0 +1,15 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'embedbase', 'et', {
+	pathName: 'meedia objekt',
+	title: 'Meedia pesa',
+	button: 'Sisesta meedia pesa',
+	unsupportedUrlGiven: 'Antud URL ei ole toetatud.',
+	unsupportedUrl: 'Meedia pesa ei toeta URLi {url}.',
+	fetchingFailedGiven: 'Antud URLi sisu hankimine nurjus.',
+	fetchingFailed: 'URLi {url} sisu hankimine nurjus.',
+	fetchingOne: 'oEmbed\'i vastuse hankimine...',
+	fetchingMany: 'oEmbed\'i vastuste hankimine, valmist {current} / {max}...'
+} );
diff --git a/libraries/ckeditor/plugins/embedbase/lang/eu.js b/libraries/ckeditor/plugins/embedbase/lang/eu.js
index d4a61994beae9b70636886c795258c092a6f8c08..7fc6fee03e625b8bdf8255a0bcb826c96c951f06 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/eu.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/eu.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'eu', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/fa.js b/libraries/ckeditor/plugins/embedbase/lang/fa.js
new file mode 100644
index 0000000000000000000000000000000000000000..c71a36c8c0461208dfbe33e8c95a62ce2fd9028c
--- /dev/null
+++ b/libraries/ckeditor/plugins/embedbase/lang/fa.js
@@ -0,0 +1,15 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'embedbase', 'fa', {
+	pathName: 'رسانه',
+	title: 'نمایشگر رسانه',
+	button: 'وارد کردن نمایشگر رسانه',
+	unsupportedUrlGiven: 'آدرس مشخص شده پشتیبانی نمیشود',
+	unsupportedUrl: 'آدرس {url} توسط نمایشگر رسانه پشتیبانی نمیشود',
+	fetchingFailedGiven: 'بارگیری محتوا برای آدرس داده شده ناموفق بود',
+	fetchingFailed: 'بارگیری محتوا از آدرس {url} ناموفق بود',
+	fetchingOne: 'بارگیری پاسخ نمایشگر خروجی ... ',
+	fetchingMany: 'بارگیری پاسخ نمایشگر خروجی ، {current} از {max} انجام شده ...'
+} );
diff --git a/libraries/ckeditor/plugins/embedbase/lang/fr.js b/libraries/ckeditor/plugins/embedbase/lang/fr.js
index 55a8e705cd3a901a43c078f4762c28b73cb1c5d1..074c9fb5ca75973a96995ee84dd3a406b95c1a65 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/fr.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/fr.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'fr', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/gl.js b/libraries/ckeditor/plugins/embedbase/lang/gl.js
index 15be205a37236954903b8a93bed34bda2313d654..e53ccd8acc648f92ce9d3b2c0324f10629258f49 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/gl.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/gl.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'gl', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/hr.js b/libraries/ckeditor/plugins/embedbase/lang/hr.js
index ad46bedfa8d702748cf5093c82829dd1673c7eb5..6edd211636a4d10aee284472267dcdcb6b28103f 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/hr.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/hr.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'hr', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/hu.js b/libraries/ckeditor/plugins/embedbase/lang/hu.js
index 827635903024109ab2ee8c984e945f2b1f6f6197..43205fc1d36c1b1504889e76a3374a7e8d1743af 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/hu.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/hu.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'hu', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/id.js b/libraries/ckeditor/plugins/embedbase/lang/id.js
index 2ab367aa2b4e5d6e5834709dcce08fc9ea4bca35..a1efbddc1db01d9d5d1aca42d29f055fd5ff69db 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/id.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/id.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'id', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/it.js b/libraries/ckeditor/plugins/embedbase/lang/it.js
index acd20873240565dada4a64953ad81cc59950c143..8b937ed9ea1f4abeb1671a5fab2249b20a732ba4 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/it.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/it.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'it', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/ja.js b/libraries/ckeditor/plugins/embedbase/lang/ja.js
index ffb480d6755448fc3cb8ec2b7ea48e3185ac50f2..427833645cecfe933487c00620d08706bb8d9859 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/ja.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/ja.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'ja', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/ko.js b/libraries/ckeditor/plugins/embedbase/lang/ko.js
index 43f9e983acad6e8e9177fd8a99a00e502fa9eb2c..78fb6163f97fb1fec195e7d652a28ca509a3e11f 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/ko.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/ko.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'ko', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/ku.js b/libraries/ckeditor/plugins/embedbase/lang/ku.js
index b9b4719b468ab6cec15a9a600c4e6426f24adc4a..630c421f62e4f4516541afbe78e562ce6ebc8971 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/ku.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/ku.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'ku', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/lv.js b/libraries/ckeditor/plugins/embedbase/lang/lv.js
index 8c98cb1ffbad068a8611cf0694034c9b27a8e139..007e5d11dd618a32e6a5d212f61a3ae579eca814 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/lv.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/lv.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'lv', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/nb.js b/libraries/ckeditor/plugins/embedbase/lang/nb.js
index 86c4dae21c36313fb679c5361da6ba6135f91245..cee34dc3a391012a62542be35e67543a69f73d44 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/nb.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/nb.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'nb', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/nl.js b/libraries/ckeditor/plugins/embedbase/lang/nl.js
index 7785805f4fc47820b692aab69d4a3e0254fb859b..cb6151a49986918997ad7b3491e4cc5e311bc938 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/nl.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/nl.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'nl', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/oc.js b/libraries/ckeditor/plugins/embedbase/lang/oc.js
index ea9102009ea9ee86d9503a91b6f13a4213699521..66619818345db038bc55ec0da0600bfacfefd413 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/oc.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/oc.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'oc', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/pl.js b/libraries/ckeditor/plugins/embedbase/lang/pl.js
index a5d59ceb364905bef5d19590533185afaea1ee63..605742762be2b6ce54a20c5adfdcb16c02d120f7 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/pl.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/pl.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'pl', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/pt-br.js b/libraries/ckeditor/plugins/embedbase/lang/pt-br.js
index 844482a4de99570c7adff49226508707865d4299..2c28809aad88545a508af4c84f14f15ef07e5681 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/pt-br.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/pt-br.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'pt-br', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/pt.js b/libraries/ckeditor/plugins/embedbase/lang/pt.js
index a2d12fdb83c9d842c89ec04844f3e5f5f47f4c20..c8c0fc1303419656774463c9484b4c79c694d6d0 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/pt.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/pt.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'pt', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/ro.js b/libraries/ckeditor/plugins/embedbase/lang/ro.js
index 81f1bcf0f2d03cb4c63b72d5b5f8080b383ebc8a..49fab33c868315938ac2eb55d605cbf7c55f1912 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/ro.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/ro.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'ro', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/ru.js b/libraries/ckeditor/plugins/embedbase/lang/ru.js
index f79f9b8f29c3d4251424319e43b5cbd0e23622e5..4561ed2840bbea6d818cd95f3e337663c3b0f55a 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/ru.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/ru.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'ru', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/sk.js b/libraries/ckeditor/plugins/embedbase/lang/sk.js
index 0a2553e58691e361e1280ec75328fd79a6c756a7..607071ac5f175e0cb7e3de0b2637bd6271e5fe7e 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/sk.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/sk.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'sk', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/sq.js b/libraries/ckeditor/plugins/embedbase/lang/sq.js
index 1d55a06ad66e2222255357e00a0230293f5266ff..aeaf8e3e1f4d2689980e3bbff1788806d5048bd2 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/sq.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/sq.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'sq', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/sr-latn.js b/libraries/ckeditor/plugins/embedbase/lang/sr-latn.js
index 71c49ffaaeb462e3311cd60d5468166cc45ee164..4ebe05043e07d8ebcf9e6ba2f6aa84f022c7dfd1 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/sr-latn.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/sr-latn.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'sr-latn', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/sr.js b/libraries/ckeditor/plugins/embedbase/lang/sr.js
index 3261db57fb1418e32733119cc1ecb002bea30aef..c4d0d07c6fe8fd9895c0eafab9f60defcd6ab056 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/sr.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/sr.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'sr', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/sv.js b/libraries/ckeditor/plugins/embedbase/lang/sv.js
index bedb3c4d8774b6f4db90818dfa912b0cab415273..cdbc5472ff6e20f0afde4d8030ea4cc317868cf1 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/sv.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/sv.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'sv', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/tr.js b/libraries/ckeditor/plugins/embedbase/lang/tr.js
index 08da34aa3bf82e5c26e4f516f222ab7ebb49177d..aad40243ba97591ccb65fcde45c981437c4cfa90 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/tr.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/tr.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'tr', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/ug.js b/libraries/ckeditor/plugins/embedbase/lang/ug.js
index 6bcfba8899ff8f2364b83e226ec42daf42677b5e..47df844440a3de6ad4cb2d6ffea19a1fc2b14371 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/ug.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/ug.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'ug', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/uk.js b/libraries/ckeditor/plugins/embedbase/lang/uk.js
index 125d0237c16dbadf2fc2f628b7c680d0ee76d5d8..954f45987f0c4c593211e6edec69ad66dcb0f3f9 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/uk.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/uk.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'uk', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/zh-cn.js b/libraries/ckeditor/plugins/embedbase/lang/zh-cn.js
index 3acffd59654d265abe734dbafc5358224f0ac81a..5c78cb48310d983433f09e5fb6a4debdc434f3e6 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/zh-cn.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/zh-cn.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'zh-cn', {
diff --git a/libraries/ckeditor/plugins/embedbase/lang/zh.js b/libraries/ckeditor/plugins/embedbase/lang/zh.js
index a2ddb6f6eb3bf27dda79e1b723f1f3c2ad8f6cbc..01009d6b0718294be03f513e4493a16aef2761a3 100644
--- a/libraries/ckeditor/plugins/embedbase/lang/zh.js
+++ b/libraries/ckeditor/plugins/embedbase/lang/zh.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'embedbase', 'zh', {
diff --git a/libraries/ckeditor/plugins/embedbase/plugin.js b/libraries/ckeditor/plugins/embedbase/plugin.js
index 16d47a0d8652e5dbc01b7454d0f7de4b2b263e90..a6953c8ea9a4b38cd5cb64b6efa03c5060c861c5 100644
--- a/libraries/ckeditor/plugins/embedbase/plugin.js
+++ b/libraries/ckeditor/plugins/embedbase/plugin.js
@@ -1,5 +1,5 @@
 /**
- * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 
@@ -80,7 +80,7 @@
 	};
 
 	CKEDITOR.plugins.add( 'embedbase', {
-		lang: 'ar,az,bg,ca,cs,da,de,de-ch,en,en-au,eo,es,es-mx,eu,fr,gl,hr,hu,id,it,ja,ko,ku,lv,nb,nl,oc,pl,pt,pt-br,ro,ru,sk,sq,sr,sr-latn,sv,tr,ug,uk,zh,zh-cn', // %REMOVE_LINE_CORE%
+		lang: 'ar,az,bg,ca,cs,da,de,de-ch,en,en-au,eo,es,es-mx,et,eu,fa,fr,gl,hr,hu,id,it,ja,ko,ku,lv,nb,nl,oc,pl,pt,pt-br,ro,ru,sk,sq,sr,sr-latn,sv,tr,ug,uk,zh,zh-cn', // %REMOVE_LINE_CORE%
 		requires: 'dialog,widget,notificationaggregator',
 
 		onLoad: function() {
@@ -104,10 +104,10 @@
 	 *
 	 * See example usage of this method in:
 	 *
-	 * * [/plugins/embed/plugin.js](https://github.com/ckeditor/ckeditor-dev/blob/master/plugins/embed/plugin.js)
-	 * * [/plugins/embedsemantic/plugin.js](https://github.com/ckeditor/ckeditor-dev/blob/master/plugins/embedsemantic/plugin.js)
+	 * * [/plugins/embed/plugin.js](https://github.com/ckeditor/ckeditor4/blob/master/plugins/embed/plugin.js)
+	 * * [/plugins/embedsemantic/plugin.js](https://github.com/ckeditor/ckeditor4/blob/master/plugins/embedsemantic/plugin.js)
 	 *
-	 * Note that both these plugins reuse the [dialog](https://github.com/ckeditor/ckeditor-dev/blob/master/plugins/embedbase/dialogs/embedbase.js)
+	 * Note that both these plugins reuse the [dialog](https://github.com/ckeditor/ckeditor4/blob/master/plugins/embedbase/dialogs/embedbase.js)
 	 * defined by the `embedbase` plugin. Integration of the asynchronous way of loading content with a dialog requires additional
 	 * effort. Check the dialog's code for more details.
 	 *
@@ -193,11 +193,6 @@
 					this._sendRequest( evt.data );
 				}, this, null, 999 );
 
-				// Expose the widget in the dialog - needed to trigger loadContent() and do error handling.
-				this.on( 'dialog', function( evt ) {
-					evt.data.widget = this;
-				}, this );
-
 				this.on( 'handleResponse', function( evt ) {
 					if ( evt.data.html ) {
 						return;
diff --git a/libraries/ckeditor/plugins/embedsemantic/plugin.js b/libraries/ckeditor/plugins/embedsemantic/plugin.js
index f2ab9906d3e2121f05b520539f4116c02d631caf..0a5a9833eb26e7e7f5bf7e2502ce3cdb3744aab8 100644
--- a/libraries/ckeditor/plugins/embedsemantic/plugin.js
+++ b/libraries/ckeditor/plugins/embedsemantic/plugin.js
@@ -1,5 +1,5 @@
 /**
- * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/af.js b/libraries/ckeditor/plugins/fakeobjects/lang/af.js
new file mode 100644
index 0000000000000000000000000000000000000000..12eee689f95ed36ff39510467ceae0fcb871105f
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/af.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'af', {
+	anchor: 'Anker',
+	hiddenfield: 'Verborge veld',
+	iframe: 'IFrame',
+	unknown: 'Onbekende objek'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/ar.js b/libraries/ckeditor/plugins/fakeobjects/lang/ar.js
new file mode 100644
index 0000000000000000000000000000000000000000..0552cd9dc1371d87a82bf8915125db4a6ff9272f
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/ar.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'ar', {
+	anchor: 'إرساء',
+	hiddenfield: 'إدراج حقل خفي',
+	iframe: 'iframe',
+	unknown: 'عنصر غير معروف'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/az.js b/libraries/ckeditor/plugins/fakeobjects/lang/az.js
new file mode 100644
index 0000000000000000000000000000000000000000..2319d5d0a9343ff73dbd05ebce92fd3a123bd9a5
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/az.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'az', {
+	anchor: 'Lövbər',
+	hiddenfield: 'Gizli xana',
+	iframe: 'IFrame',
+	unknown: 'Tanımamış obyekt'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/bg.js b/libraries/ckeditor/plugins/fakeobjects/lang/bg.js
new file mode 100644
index 0000000000000000000000000000000000000000..4bd26f6e1460643ef5c4b2582d899b354c7ed782
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/bg.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'bg', {
+	anchor: 'Кука',
+	hiddenfield: 'Скрито поле',
+	iframe: 'IFrame',
+	unknown: 'Неизвестен обект'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/bn.js b/libraries/ckeditor/plugins/fakeobjects/lang/bn.js
new file mode 100644
index 0000000000000000000000000000000000000000..a307ad7e81c1e3021f8dc6983c90b9fb4a27d1af
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/bn.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'bn', {
+	anchor: 'Anchor', // MISSING
+	hiddenfield: 'Hidden Field', // MISSING
+	iframe: 'IFrame', // MISSING
+	unknown: 'Unknown Object' // MISSING
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/bs.js b/libraries/ckeditor/plugins/fakeobjects/lang/bs.js
new file mode 100644
index 0000000000000000000000000000000000000000..ff1923f4c896ff16730760cdcd36e2de193e3bd5
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/bs.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'bs', {
+	anchor: 'Anchor',
+	hiddenfield: 'Hidden Field', // MISSING
+	iframe: 'IFrame', // MISSING
+	unknown: 'Unknown Object' // MISSING
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/ca.js b/libraries/ckeditor/plugins/fakeobjects/lang/ca.js
new file mode 100644
index 0000000000000000000000000000000000000000..e0d6e1534c6e1fb8ddd02845d250f329b07222b1
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/ca.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'ca', {
+	anchor: 'Àncora',
+	hiddenfield: 'Camp ocult',
+	iframe: 'IFrame',
+	unknown: 'Objecte desconegut'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/cs.js b/libraries/ckeditor/plugins/fakeobjects/lang/cs.js
new file mode 100644
index 0000000000000000000000000000000000000000..cf7b54b111838f6ddcb5ab3d0685eae97afcebc5
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/cs.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'cs', {
+	anchor: 'Záložka',
+	hiddenfield: 'Skryté pole',
+	iframe: 'IFrame',
+	unknown: 'Neznámý objekt'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/cy.js b/libraries/ckeditor/plugins/fakeobjects/lang/cy.js
new file mode 100644
index 0000000000000000000000000000000000000000..08c867ea320a90f9303a525139fd7221a602ef1f
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/cy.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'cy', {
+	anchor: 'Angor',
+	hiddenfield: 'Maes Cudd',
+	iframe: 'IFrame',
+	unknown: 'Gwrthrych Anhysbys'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/da.js b/libraries/ckeditor/plugins/fakeobjects/lang/da.js
new file mode 100644
index 0000000000000000000000000000000000000000..5a797fe4f86e9b633c2221d8567472d179b31639
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/da.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'da', {
+	anchor: 'Anker',
+	hiddenfield: 'Skjult felt',
+	iframe: 'Iframe',
+	unknown: 'Ukendt objekt'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/de-ch.js b/libraries/ckeditor/plugins/fakeobjects/lang/de-ch.js
new file mode 100644
index 0000000000000000000000000000000000000000..682fdd5be743b2557388d1a62153663e3fc70ae4
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/de-ch.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'de-ch', {
+	anchor: 'Anker',
+	hiddenfield: 'Verstecktes Feld',
+	iframe: 'IFrame',
+	unknown: 'Unbekanntes Objekt'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/de.js b/libraries/ckeditor/plugins/fakeobjects/lang/de.js
new file mode 100644
index 0000000000000000000000000000000000000000..9ce244182adbb48f257d7c9a49af5cf5714276f6
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/de.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'de', {
+	anchor: 'Anker',
+	hiddenfield: 'Verstecktes Feld',
+	iframe: 'IFrame',
+	unknown: 'Unbekanntes Objekt'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/el.js b/libraries/ckeditor/plugins/fakeobjects/lang/el.js
new file mode 100644
index 0000000000000000000000000000000000000000..c7e38d557b308dff48c9454b8a4b2c83329507ca
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/el.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'el', {
+	anchor: 'Άγκυρα',
+	hiddenfield: 'Κρυφό Πεδίο',
+	iframe: 'IFrame',
+	unknown: 'Άγνωστο Αντικείμενο'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/en-au.js b/libraries/ckeditor/plugins/fakeobjects/lang/en-au.js
new file mode 100644
index 0000000000000000000000000000000000000000..ae9535861eeb747ad73152fc86c5ca9afba1ff04
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/en-au.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'en-au', {
+	anchor: 'Anchor',
+	hiddenfield: 'Hidden Field',
+	iframe: 'IFrame',
+	unknown: 'Unknown Object'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/en-ca.js b/libraries/ckeditor/plugins/fakeobjects/lang/en-ca.js
new file mode 100644
index 0000000000000000000000000000000000000000..566d3addecfd8eab2aacacf106f9d9975481f9f6
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/en-ca.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'en-ca', {
+	anchor: 'Anchor', // MISSING
+	hiddenfield: 'Hidden Field', // MISSING
+	iframe: 'IFrame', // MISSING
+	unknown: 'Unknown Object' // MISSING
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/en-gb.js b/libraries/ckeditor/plugins/fakeobjects/lang/en-gb.js
new file mode 100644
index 0000000000000000000000000000000000000000..d617068c6753ffdd1a2c13237d4d2fda8cc1e72f
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/en-gb.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'en-gb', {
+	anchor: 'Anchor',
+	hiddenfield: 'Hidden Field',
+	iframe: 'IFrame',
+	unknown: 'Unknown Object'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/en.js b/libraries/ckeditor/plugins/fakeobjects/lang/en.js
new file mode 100644
index 0000000000000000000000000000000000000000..c6c66817ce7a68ec6ac90735867417aa9f6f56a6
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/en.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'en', {
+	anchor: 'Anchor',
+	hiddenfield: 'Hidden Field',
+	iframe: 'IFrame',
+	unknown: 'Unknown Object'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/eo.js b/libraries/ckeditor/plugins/fakeobjects/lang/eo.js
new file mode 100644
index 0000000000000000000000000000000000000000..d33aa7c0acd22f09db84bd19a9caa63078798a59
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/eo.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'eo', {
+	anchor: 'Ankro',
+	hiddenfield: 'Kaŝita kampo',
+	iframe: 'Enlinia Kadro (IFrame)',
+	unknown: 'Nekonata objekto'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/es-mx.js b/libraries/ckeditor/plugins/fakeobjects/lang/es-mx.js
new file mode 100644
index 0000000000000000000000000000000000000000..a768579891a60a610794c9b18b55afd74d486892
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/es-mx.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'es-mx', {
+	anchor: 'Ancla',
+	hiddenfield: 'Campo oculto',
+	iframe: 'IFrame',
+	unknown: 'Objeto desconocido'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/es.js b/libraries/ckeditor/plugins/fakeobjects/lang/es.js
new file mode 100644
index 0000000000000000000000000000000000000000..c27ee25796ee82e5e54e94e4122e55e249c2a4f1
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/es.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'es', {
+	anchor: 'Ancla',
+	hiddenfield: 'Campo oculto',
+	iframe: 'IFrame',
+	unknown: 'Objeto desconocido'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/et.js b/libraries/ckeditor/plugins/fakeobjects/lang/et.js
new file mode 100644
index 0000000000000000000000000000000000000000..895bb3d9e592f968dbc6bb993fd3a3946a14320c
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/et.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'et', {
+	anchor: 'Ankur',
+	hiddenfield: 'Varjatud väli',
+	iframe: 'IFrame',
+	unknown: 'Tundmatu objekt'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/eu.js b/libraries/ckeditor/plugins/fakeobjects/lang/eu.js
new file mode 100644
index 0000000000000000000000000000000000000000..cdf3b7d4703f2de55336d7bf3b7b71eb45b7b8b1
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/eu.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'eu', {
+	anchor: 'Aingura',
+	hiddenfield: 'Ezkutuko eremua',
+	iframe: 'IFrame-a',
+	unknown: 'Objektu ezezaguna'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/fa.js b/libraries/ckeditor/plugins/fakeobjects/lang/fa.js
new file mode 100644
index 0000000000000000000000000000000000000000..1a3586b8a805e66da57d7c95aa4ce7ac0c1f692f
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/fa.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'fa', {
+	anchor: 'لنگر',
+	hiddenfield: 'فیلد پنهان',
+	iframe: 'IFrame',
+	unknown: 'شیء ناشناخته'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/fi.js b/libraries/ckeditor/plugins/fakeobjects/lang/fi.js
new file mode 100644
index 0000000000000000000000000000000000000000..359778cd36fdb80438139168c849e20a36dfe3d2
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/fi.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'fi', {
+	anchor: 'Ankkuri',
+	hiddenfield: 'Piilokenttä',
+	iframe: 'IFrame-kehys',
+	unknown: 'Tuntematon objekti'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/fo.js b/libraries/ckeditor/plugins/fakeobjects/lang/fo.js
new file mode 100644
index 0000000000000000000000000000000000000000..338bcaf5a5c7cd0f34fc303e1faf83ce3a41cb9c
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/fo.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'fo', {
+	anchor: 'Anchor',
+	hiddenfield: 'Fjaldur teigur',
+	iframe: 'IFrame',
+	unknown: 'Ókent Object'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/fr-ca.js b/libraries/ckeditor/plugins/fakeobjects/lang/fr-ca.js
new file mode 100644
index 0000000000000000000000000000000000000000..ecaf797c1cf5a416ad97789361dadcdbe5ed84c8
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/fr-ca.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'fr-ca', {
+	anchor: 'Ancre',
+	hiddenfield: 'Champ caché',
+	iframe: 'IFrame',
+	unknown: 'Objet inconnu'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/fr.js b/libraries/ckeditor/plugins/fakeobjects/lang/fr.js
new file mode 100644
index 0000000000000000000000000000000000000000..74748d89f14ec0f23e07b7a00bcac6891b6d8a82
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/fr.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'fr', {
+	anchor: 'Ancre',
+	hiddenfield: 'Champ invisible',
+	iframe: 'Cadre de contenu incorporé',
+	unknown: 'Objet inconnu'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/gl.js b/libraries/ckeditor/plugins/fakeobjects/lang/gl.js
new file mode 100644
index 0000000000000000000000000000000000000000..c49f65826b4870ef645df3c574db67f71e26b131
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/gl.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'gl', {
+	anchor: 'Ancoraxe',
+	hiddenfield: 'Campo agochado',
+	iframe: 'IFrame',
+	unknown: 'Obxecto descoñecido'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/gu.js b/libraries/ckeditor/plugins/fakeobjects/lang/gu.js
new file mode 100644
index 0000000000000000000000000000000000000000..c95abce0f004b618157be9c6997e96e92ff762ce
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/gu.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'gu', {
+	anchor: 'અનકર',
+	hiddenfield: 'હિડન ',
+	iframe: 'IFrame',
+	unknown: 'અનનોન ઓબ્જેક્ટ'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/he.js b/libraries/ckeditor/plugins/fakeobjects/lang/he.js
new file mode 100644
index 0000000000000000000000000000000000000000..ee5f65cb56846b83e4b379a77fb21aa3438e2544
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/he.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'he', {
+	anchor: 'עוגן',
+	hiddenfield: 'שדה חבוי',
+	iframe: 'חלון פנימי (iframe)',
+	unknown: 'אובייקט לא ידוע'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/hi.js b/libraries/ckeditor/plugins/fakeobjects/lang/hi.js
new file mode 100644
index 0000000000000000000000000000000000000000..7656911d8e68b8a1ee08bc193c742bb8e4d392a9
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/hi.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'hi', {
+	anchor: 'ऐंकर इन्सर्ट/संपादन',
+	hiddenfield: 'गुप्त फ़ील्ड',
+	iframe: 'IFrame', // MISSING
+	unknown: 'Unknown Object' // MISSING
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/hr.js b/libraries/ckeditor/plugins/fakeobjects/lang/hr.js
new file mode 100644
index 0000000000000000000000000000000000000000..c3b2940821465f9b440a2418c096d78c3f4bfb0d
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/hr.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'hr', {
+	anchor: 'Sidro',
+	hiddenfield: 'Sakriveno polje',
+	iframe: 'IFrame',
+	unknown: 'Nepoznati objekt'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/hu.js b/libraries/ckeditor/plugins/fakeobjects/lang/hu.js
new file mode 100644
index 0000000000000000000000000000000000000000..c5f07027d1bafd73b858235bfdcdfb5ea1666eb6
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/hu.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'hu', {
+	anchor: 'Horgony',
+	hiddenfield: 'Rejtett mezõ',
+	iframe: 'IFrame',
+	unknown: 'Ismeretlen objektum'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/id.js b/libraries/ckeditor/plugins/fakeobjects/lang/id.js
new file mode 100644
index 0000000000000000000000000000000000000000..deec36c95ca1f746b13aa51981c7114adee41a1b
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/id.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'id', {
+	anchor: 'Anchor', // MISSING
+	hiddenfield: 'Kolom Tersembunyi',
+	iframe: 'IFrame',
+	unknown: 'Obyek Tak Dikenal'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/is.js b/libraries/ckeditor/plugins/fakeobjects/lang/is.js
new file mode 100644
index 0000000000000000000000000000000000000000..265b4620374767f7ed37a373496b5a4b601b6980
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/is.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'is', {
+	anchor: 'Anchor', // MISSING
+	hiddenfield: 'Hidden Field', // MISSING
+	iframe: 'IFrame', // MISSING
+	unknown: 'Unknown Object' // MISSING
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/it.js b/libraries/ckeditor/plugins/fakeobjects/lang/it.js
new file mode 100644
index 0000000000000000000000000000000000000000..10087ea13c5f1db9c511da55b4736974054f9874
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/it.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'it', {
+	anchor: 'Ancora',
+	hiddenfield: 'Campo Nascosto',
+	iframe: 'IFrame',
+	unknown: 'Oggetto sconosciuto'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/ja.js b/libraries/ckeditor/plugins/fakeobjects/lang/ja.js
new file mode 100644
index 0000000000000000000000000000000000000000..f2bf2c2e78297eca74570da0e54c59209d0b743a
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/ja.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'ja', {
+	anchor: 'アンカー',
+	hiddenfield: '不可視フィールド',
+	iframe: 'IFrame',
+	unknown: 'Unknown Object'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/ka.js b/libraries/ckeditor/plugins/fakeobjects/lang/ka.js
new file mode 100644
index 0000000000000000000000000000000000000000..449bfc1fd3425fe0d5b1183272211ca73b2e480a
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/ka.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'ka', {
+	anchor: 'ღუზა',
+	hiddenfield: 'მალული ველი',
+	iframe: 'IFrame',
+	unknown: 'უცნობი ობიექტი'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/km.js b/libraries/ckeditor/plugins/fakeobjects/lang/km.js
new file mode 100644
index 0000000000000000000000000000000000000000..399a9901696721dd4c18172dccae6b92629ebada
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/km.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'km', {
+	anchor: 'យុថ្កា',
+	hiddenfield: 'វាល​កំបាំង',
+	iframe: 'IFrame',
+	unknown: 'វត្ថុ​មិន​ស្គាល់'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/ko.js b/libraries/ckeditor/plugins/fakeobjects/lang/ko.js
new file mode 100644
index 0000000000000000000000000000000000000000..e481c57a22e12cea1da016976af5213b63bdf5af
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/ko.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'ko', {
+	anchor: '책갈피',
+	hiddenfield: '숨은 입력 칸',
+	iframe: '아이프레임',
+	unknown: '알 수 없는 객체'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/ku.js b/libraries/ckeditor/plugins/fakeobjects/lang/ku.js
new file mode 100644
index 0000000000000000000000000000000000000000..6e39dfc503d77cabac28212d2fc4fb6fd98ff8fa
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/ku.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'ku', {
+	anchor: 'لەنگەر',
+	hiddenfield: 'شاردنەوەی خانه',
+	iframe: 'لەچوارچێوە',
+	unknown: 'بەرکارێکی نەناسراو'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/lt.js b/libraries/ckeditor/plugins/fakeobjects/lang/lt.js
new file mode 100644
index 0000000000000000000000000000000000000000..135b65a4a53deaa29e70d8253505b1774ee869c2
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/lt.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'lt', {
+	anchor: 'Žymė',
+	hiddenfield: 'PaslÄ—ptas laukas',
+	iframe: 'IFrame',
+	unknown: 'Nežinomas objektas'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/lv.js b/libraries/ckeditor/plugins/fakeobjects/lang/lv.js
new file mode 100644
index 0000000000000000000000000000000000000000..97f6aeb6a914554f552bee31609e0a55124b29cb
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/lv.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'lv', {
+	anchor: 'Iezīme',
+	hiddenfield: 'Slēpts lauks',
+	iframe: 'Iframe',
+	unknown: 'Nezināms objekts'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/mk.js b/libraries/ckeditor/plugins/fakeobjects/lang/mk.js
new file mode 100644
index 0000000000000000000000000000000000000000..6f93bdaa3602785a721a7f0931612f87eef81a3c
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/mk.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'mk', {
+	anchor: 'Anchor',
+	hiddenfield: 'Скриено поле',
+	iframe: 'IFrame', // MISSING
+	unknown: 'Unknown Object' // MISSING
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/mn.js b/libraries/ckeditor/plugins/fakeobjects/lang/mn.js
new file mode 100644
index 0000000000000000000000000000000000000000..4018243d04fdd254e5e1a520cfbd8808eaae628f
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/mn.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'mn', {
+	anchor: 'Зангуу',
+	hiddenfield: 'Нууц талбар',
+	iframe: 'IFrame', // MISSING
+	unknown: 'Unknown Object' // MISSING
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/ms.js b/libraries/ckeditor/plugins/fakeobjects/lang/ms.js
new file mode 100644
index 0000000000000000000000000000000000000000..905d7da61765684b5d36d9e196c79f48a3c1ca74
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/ms.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'ms', {
+	anchor: 'Anchor', // MISSING
+	hiddenfield: 'Hidden Field', // MISSING
+	iframe: 'IFrame', // MISSING
+	unknown: 'Unknown Object' // MISSING
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/nb.js b/libraries/ckeditor/plugins/fakeobjects/lang/nb.js
new file mode 100644
index 0000000000000000000000000000000000000000..a9b4e8d778bba9e50072eec803bd6dabc5c9547f
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/nb.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'nb', {
+	anchor: 'Anker',
+	hiddenfield: 'Skjult felt',
+	iframe: 'IFrame',
+	unknown: 'Ukjent objekt'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/nl.js b/libraries/ckeditor/plugins/fakeobjects/lang/nl.js
new file mode 100644
index 0000000000000000000000000000000000000000..77497278815bd0eb832a7e36ced6f50a1d7383f1
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/nl.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'nl', {
+	anchor: 'Interne link',
+	hiddenfield: 'Verborgen veld',
+	iframe: 'IFrame',
+	unknown: 'Onbekend object'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/no.js b/libraries/ckeditor/plugins/fakeobjects/lang/no.js
new file mode 100644
index 0000000000000000000000000000000000000000..26a194a3171344ce0d54de1a4199ba0201e66a45
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/no.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'no', {
+	anchor: 'Anker',
+	hiddenfield: 'Skjult felt',
+	iframe: 'IFrame',
+	unknown: 'Ukjent objekt'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/oc.js b/libraries/ckeditor/plugins/fakeobjects/lang/oc.js
new file mode 100644
index 0000000000000000000000000000000000000000..8a167f5d2692f19c02546af974d6e0607e3a7b09
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/oc.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'oc', {
+	anchor: 'Ancòra',
+	hiddenfield: 'Camp invisible',
+	iframe: 'Quadre de contengut incorporat',
+	unknown: 'Objècte desconegut'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/pl.js b/libraries/ckeditor/plugins/fakeobjects/lang/pl.js
new file mode 100644
index 0000000000000000000000000000000000000000..6d16eb1a6121606babafef063141df5eddd600a4
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/pl.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'pl', {
+	anchor: 'Kotwica',
+	hiddenfield: 'Pole ukryte',
+	iframe: 'IFrame',
+	unknown: 'Nieznany obiekt'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/pt-br.js b/libraries/ckeditor/plugins/fakeobjects/lang/pt-br.js
new file mode 100644
index 0000000000000000000000000000000000000000..bd8ac019d63928ff045b32939b3d7acd79e6f899
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/pt-br.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'pt-br', {
+	anchor: 'Âncora',
+	hiddenfield: 'Campo Oculto',
+	iframe: 'IFrame',
+	unknown: 'Objeto desconhecido'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/pt.js b/libraries/ckeditor/plugins/fakeobjects/lang/pt.js
new file mode 100644
index 0000000000000000000000000000000000000000..cf2720c33caaeb1f00bb35f1b05f4306192c3589
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/pt.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'pt', {
+	anchor: ' Inserir/Editar âncora',
+	hiddenfield: 'Campo oculto',
+	iframe: 'IFrame',
+	unknown: 'Objeto desconhecido'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/ro.js b/libraries/ckeditor/plugins/fakeobjects/lang/ro.js
new file mode 100644
index 0000000000000000000000000000000000000000..f7679e9b9a0cb89f047dce8733caf65ff369be6d
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/ro.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'ro', {
+	anchor: 'Inserează/Editează ancoră',
+	hiddenfield: 'Câmp ascuns (HiddenField)',
+	iframe: 'Fereastră în fereastră (iframe)',
+	unknown: 'Necunoscut'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/ru.js b/libraries/ckeditor/plugins/fakeobjects/lang/ru.js
new file mode 100644
index 0000000000000000000000000000000000000000..f2860b5bd4127d99ba5892ed78343d951baf1c3c
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/ru.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'ru', {
+	anchor: 'Якорь',
+	hiddenfield: 'Скрытое поле',
+	iframe: 'iFrame',
+	unknown: 'Неизвестный объект'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/si.js b/libraries/ckeditor/plugins/fakeobjects/lang/si.js
new file mode 100644
index 0000000000000000000000000000000000000000..037d6299a9b22980df0a28193c2738e0c66779d8
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/si.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'si', {
+	anchor: 'ආධාරය',
+	hiddenfield: 'සැඟවුණු ප්‍රදේශය',
+	iframe: 'IFrame',
+	unknown: 'Unknown Object' // MISSING
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/sk.js b/libraries/ckeditor/plugins/fakeobjects/lang/sk.js
new file mode 100644
index 0000000000000000000000000000000000000000..489a149dbd05f69d19488ed0ddf06c96ead28455
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/sk.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'sk', {
+	anchor: 'Kotva',
+	hiddenfield: 'Skryté pole',
+	iframe: 'IFrame',
+	unknown: 'Neznámy objekt'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/sl.js b/libraries/ckeditor/plugins/fakeobjects/lang/sl.js
new file mode 100644
index 0000000000000000000000000000000000000000..db11d7fcb3f26e5183a754fa5273c09c95900a56
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/sl.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'sl', {
+	anchor: 'Sidro',
+	hiddenfield: 'Skrito polje',
+	iframe: 'IFrame',
+	unknown: 'Neznan objekt'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/sq.js b/libraries/ckeditor/plugins/fakeobjects/lang/sq.js
new file mode 100644
index 0000000000000000000000000000000000000000..001a3d97085990946a8aa18e0d188aa83a1e336e
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/sq.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'sq', {
+	anchor: 'Spirancë',
+	hiddenfield: 'Fushë e fshehur',
+	iframe: 'IFrame',
+	unknown: 'Objekt i Panjohur'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/sr-latn.js b/libraries/ckeditor/plugins/fakeobjects/lang/sr-latn.js
new file mode 100644
index 0000000000000000000000000000000000000000..1db018031bb9274d2845f8f944b8ec579a26189f
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/sr-latn.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'sr-latn', {
+	anchor: 'Sidro',
+	hiddenfield: 'Skriveno polje',
+	iframe: 'IFrame',
+	unknown: 'Nepoznat objekat'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/sr.js b/libraries/ckeditor/plugins/fakeobjects/lang/sr.js
new file mode 100644
index 0000000000000000000000000000000000000000..9c2a83c7b818ac793b48438285b717f81232eae4
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/sr.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'sr', {
+	anchor: 'Сидро',
+	hiddenfield: 'Скривено полје',
+	iframe: 'IFrame',
+	unknown: 'Непознат објекат'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/sv.js b/libraries/ckeditor/plugins/fakeobjects/lang/sv.js
new file mode 100644
index 0000000000000000000000000000000000000000..5ea0ee6aac3754d0574862441543f97bcb7cf718
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/sv.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'sv', {
+	anchor: 'Ankare',
+	hiddenfield: 'Gömt fält',
+	iframe: 'iFrame',
+	unknown: 'Okänt objekt'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/th.js b/libraries/ckeditor/plugins/fakeobjects/lang/th.js
new file mode 100644
index 0000000000000000000000000000000000000000..a57e147952aa9fbdbc8a44147034c2f8721aad37
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/th.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'th', {
+	anchor: 'แทรก/แก้ไข Anchor',
+	hiddenfield: 'ฮิดเดนฟิลด์',
+	iframe: 'IFrame',
+	unknown: 'วัตถุไม่ทราบชนิด'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/tr.js b/libraries/ckeditor/plugins/fakeobjects/lang/tr.js
new file mode 100644
index 0000000000000000000000000000000000000000..95bd11b32ec1b3296b7f67988d92afb925207bf2
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/tr.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'tr', {
+	anchor: 'Bağlantı',
+	hiddenfield: 'Gizli Alan',
+	iframe: 'IFrame',
+	unknown: 'Bilinmeyen Nesne'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/tt.js b/libraries/ckeditor/plugins/fakeobjects/lang/tt.js
new file mode 100644
index 0000000000000000000000000000000000000000..27b1eab4fbaa50c7857907586007e689bb7a457a
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/tt.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'tt', {
+	anchor: 'Якорь',
+	hiddenfield: 'Яшерен кыр',
+	iframe: 'IFrame',
+	unknown: 'Танылмаган объект'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/ug.js b/libraries/ckeditor/plugins/fakeobjects/lang/ug.js
new file mode 100644
index 0000000000000000000000000000000000000000..a9ee84256f8d70fbaba6d4fba8ed4301d2c9326e
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/ug.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'ug', {
+	anchor: 'لەڭگەرلىك نۇقتا',
+	hiddenfield: 'يوشۇرۇن دائىرە',
+	iframe: 'IFrame',
+	unknown: 'يوچۇن نەڭ'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/uk.js b/libraries/ckeditor/plugins/fakeobjects/lang/uk.js
new file mode 100644
index 0000000000000000000000000000000000000000..12a638e4adb7b7d33cf8cdbee133c0a4a6721a21
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/uk.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'uk', {
+	anchor: 'Якір',
+	hiddenfield: 'Приховані Поля',
+	iframe: 'IFrame',
+	unknown: 'Невідомий об\'єкт'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/vi.js b/libraries/ckeditor/plugins/fakeobjects/lang/vi.js
new file mode 100644
index 0000000000000000000000000000000000000000..6adbe6e6bf9fd9934df190c012cecd6c51b8c8ca
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/vi.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'vi', {
+	anchor: 'Điểm neo',
+	hiddenfield: 'Trường ẩn',
+	iframe: 'IFrame',
+	unknown: 'Đối tượng không rõ ràng'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/zh-cn.js b/libraries/ckeditor/plugins/fakeobjects/lang/zh-cn.js
new file mode 100644
index 0000000000000000000000000000000000000000..8e780090de4038f83e0d941d504abddf4a2fbb36
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/zh-cn.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'zh-cn', {
+	anchor: '锚点',
+	hiddenfield: '隐藏域',
+	iframe: 'IFrame',
+	unknown: '未知对象'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/lang/zh.js b/libraries/ckeditor/plugins/fakeobjects/lang/zh.js
new file mode 100644
index 0000000000000000000000000000000000000000..823503c7ec9a1d103ca5c127da083e9046b5b220
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/lang/zh.js
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'fakeobjects', 'zh', {
+	anchor: '錨點',
+	hiddenfield: '隱藏欄位',
+	iframe: 'IFrame',
+	unknown: '無法辨識的物件'
+} );
diff --git a/libraries/ckeditor/plugins/fakeobjects/plugin.js b/libraries/ckeditor/plugins/fakeobjects/plugin.js
new file mode 100644
index 0000000000000000000000000000000000000000..8ec8848306afab20a9e3d75af22476e40406b644
--- /dev/null
+++ b/libraries/ckeditor/plugins/fakeobjects/plugin.js
@@ -0,0 +1,239 @@
+/**
+ * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+ */
+
+( function() {
+	var cssStyle = CKEDITOR.htmlParser.cssStyle,
+		cssLength = CKEDITOR.tools.cssLength;
+
+	var cssLengthRegex = /^((?:\d*(?:\.\d+))|(?:\d+))(.*)?$/i;
+
+	// Replacing the former CSS length value with the later one, with
+	// adjustment to the length  unit.
+	function replaceCssLength( length1, length2 ) {
+		var parts1 = cssLengthRegex.exec( length1 ),
+			parts2 = cssLengthRegex.exec( length2 );
+
+		// Omit pixel length unit when necessary,
+		// e.g. replaceCssLength( 10, '20px' ) -> 20
+		if ( parts1 ) {
+			if ( !parts1[ 2 ] && parts2[ 2 ] == 'px' )
+				return parts2[ 1 ];
+			if ( parts1[ 2 ] == 'px' && !parts2[ 2 ] )
+				return parts2[ 1 ] + 'px';
+		}
+
+		return length2;
+	}
+
+	CKEDITOR.plugins.add( 'fakeobjects', {
+		// jscs:disable maximumLineLength
+		lang: 'af,ar,az,bg,bn,bs,ca,cs,cy,da,de,de-ch,el,en,en-au,en-ca,en-gb,eo,es,es-mx,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,oc,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE%
+		// jscs:enable maximumLineLength
+
+		init: function( editor ) {
+			// Allow image with all styles and classes plus src, alt and title attributes.
+			// We need them when fakeobject is pasted.
+			editor.filter.allow( 'img[!data-cke-realelement,src,alt,title](*){*}', 'fakeobjects' );
+		},
+
+		afterInit: function( editor ) {
+			var dataProcessor = editor.dataProcessor,
+				htmlFilter = dataProcessor && dataProcessor.htmlFilter;
+
+			if ( htmlFilter ) {
+				htmlFilter.addRules( createHtmlFilterRules( editor ), {
+					applyToAll: true
+				} );
+			}
+		}
+	} );
+
+	/**
+	 * Creates fake {@link CKEDITOR.dom.element} based on real element.
+	 * Fake element is an img with special attributes, which keep real element properties.
+	 *
+	 * @member CKEDITOR.editor
+	 * @param {CKEDITOR.dom.element} realElement Real element to transform.
+	 * @param {String} className Class name which will be used as class of fake element.
+	 * @param {String} realElementType Stores type of fake element.
+	 * @param {Boolean} isResizable Keeps information if element is resizable.
+	 * @returns {CKEDITOR.dom.element} Fake element.
+	 */
+	CKEDITOR.editor.prototype.createFakeElement = function( realElement, className, realElementType, isResizable ) {
+		var lang = this.lang.fakeobjects,
+			label = lang[ realElementType ] || lang.unknown;
+
+		var attributes = {
+			'class': className,
+			'data-cke-realelement': encodeURIComponent( realElement.getOuterHtml() ),
+			'data-cke-real-node-type': realElement.type,
+			alt: label,
+			title: label,
+			align: realElement.getAttribute( 'align' ) || ''
+		};
+
+		// Do not set "src" on high-contrast so the alt text is displayed. (https://dev.ckeditor.com/ticket/8945)
+		if ( !CKEDITOR.env.hc )
+			attributes.src = CKEDITOR.tools.transparentImageData;
+
+		if ( realElementType )
+			attributes[ 'data-cke-real-element-type' ] = realElementType;
+
+		if ( isResizable ) {
+			attributes[ 'data-cke-resizable' ] = isResizable;
+
+			var fakeStyle = new cssStyle();
+
+			var width = realElement.getAttribute( 'width' ),
+				height = realElement.getAttribute( 'height' );
+
+			width && ( fakeStyle.rules.width = cssLength( width ) );
+			height && ( fakeStyle.rules.height = cssLength( height ) );
+			fakeStyle.populate( attributes );
+		}
+
+		return this.document.createElement( 'img', { attributes: attributes } );
+	};
+
+	/**
+	 * Creates fake {@link CKEDITOR.htmlParser.element} based on real element.
+	 *
+	 * @member CKEDITOR.editor
+	 * @param {CKEDITOR.dom.element} realElement Real element to transform.
+	 * @param {String} className Class name which will be used as class of fake element.
+	 * @param {String} realElementType Store type of fake element.
+	 * @param {Boolean} isResizable Keep information if element is resizable.
+	 * @returns {CKEDITOR.htmlParser.element} Fake htmlParser element.
+	 */
+	CKEDITOR.editor.prototype.createFakeParserElement = function( realElement, className, realElementType, isResizable ) {
+		var lang = this.lang.fakeobjects,
+			label = lang[ realElementType ] || lang.unknown,
+			html;
+
+		var writer = new CKEDITOR.htmlParser.basicWriter();
+		realElement.writeHtml( writer );
+		html = writer.getHtml();
+
+		var attributes = {
+			'class': className,
+			'data-cke-realelement': encodeURIComponent( html ),
+			'data-cke-real-node-type': realElement.type,
+			alt: label,
+			title: label,
+			align: realElement.attributes.align || ''
+		};
+
+		// Do not set "src" on high-contrast so the alt text is displayed. (https://dev.ckeditor.com/ticket/8945)
+		if ( !CKEDITOR.env.hc )
+			attributes.src = CKEDITOR.tools.transparentImageData;
+
+		if ( realElementType )
+			attributes[ 'data-cke-real-element-type' ] = realElementType;
+
+		if ( isResizable ) {
+			attributes[ 'data-cke-resizable' ] = isResizable;
+			var realAttrs = realElement.attributes,
+				fakeStyle = new cssStyle();
+
+			var width = realAttrs.width,
+				height = realAttrs.height;
+
+			width !== undefined && ( fakeStyle.rules.width = cssLength( width ) );
+			height !== undefined && ( fakeStyle.rules.height = cssLength( height ) );
+			fakeStyle.populate( attributes );
+		}
+
+		return new CKEDITOR.htmlParser.element( 'img', attributes );
+	};
+
+	/**
+	 * Creates {@link CKEDITOR.dom.element} from fake element.
+	 *
+	 * @member CKEDITOR.editor
+	 * @param {CKEDITOR.dom.element} fakeElement Fake element to transform.
+	 * @returns {CKEDITOR.dom.element/null} Returns real element or `null` if transformed element wasn't fake.
+	 */
+	CKEDITOR.editor.prototype.restoreRealElement = function( fakeElement ) {
+		if ( fakeElement.data( 'cke-real-node-type' ) != CKEDITOR.NODE_ELEMENT )
+			return null;
+
+		var realElementHtml = decodeURIComponent( fakeElement.data( 'cke-realelement' ) ),
+			filteredHtml = filterHtml( this, realElementHtml ),
+			realElement = CKEDITOR.dom.element.createFromHtml( filteredHtml, this.document );
+
+		if ( fakeElement.data( 'cke-resizable' ) ) {
+			var width = fakeElement.getStyle( 'width' ),
+				height = fakeElement.getStyle( 'height' );
+
+			width && realElement.setAttribute( 'width', replaceCssLength( realElement.getAttribute( 'width' ), width ) );
+			height && realElement.setAttribute( 'height', replaceCssLength( realElement.getAttribute( 'height' ), height ) );
+		}
+
+		return realElement;
+	};
+
+	function createHtmlFilterRules( editor ) {
+		return {
+			elements: {
+				$: function( element ) {
+					var attributes = element.attributes,
+						realHtml = attributes && attributes[ 'data-cke-realelement' ],
+						filteredRealHtml = filterHtml( editor, decodeURIComponent( realHtml ) ),
+						realFragment = realHtml && new CKEDITOR.htmlParser.fragment.fromHtml( filteredRealHtml ),
+						realElement = realFragment && realFragment.children[ 0 ];
+
+					// Width/height in the fake object are subjected to clone into the real element.
+					if ( realElement && element.attributes[ 'data-cke-resizable' ] ) {
+						var styles = new cssStyle( element ).rules,
+							realAttrs = realElement.attributes,
+							width = styles.width,
+							height = styles.height;
+
+						width && ( realAttrs.width = replaceCssLength( realAttrs.width, width ) );
+						height && ( realAttrs.height = replaceCssLength( realAttrs.height, height ) );
+					}
+
+					return realElement;
+				}
+			}
+		};
+	}
+
+	// Content stored inside fake element is raw and should be explicitly
+	// passed to ACF filter. Additionally some elements can have prefixes in tag names,
+	// which should be removed before filtering and added after it.
+	function filterHtml( editor, html ) {
+		var unprefixedElements = [],
+			prefixRegex = /^cke:/i,
+			dataFilter =  new CKEDITOR.htmlParser.filter( {
+				elements: {
+					'^': function( element ) {
+						if ( prefixRegex.test( element.name ) ) {
+							element.name = element.name.replace( prefixRegex, '' );
+
+							unprefixedElements.push( element );
+						}
+					},
+					iframe: function( element ) {
+						element.children = [];
+					}
+				}
+			} ),
+			acfFilter = editor.activeFilter,
+			writer = new CKEDITOR.htmlParser.basicWriter(),
+			fragment = CKEDITOR.htmlParser.fragment.fromHtml( html );
+
+		dataFilter.applyTo( fragment );
+		acfFilter.applyTo( fragment );
+
+		CKEDITOR.tools.array.forEach( unprefixedElements, function( element ) {
+			element.name = 'cke:' + element.name;
+		} );
+
+		fragment.writeHtml( writer );
+
+		return writer.getHtml();
+	}
+} )();
diff --git a/libraries/ckeditor/plugins/link/dialogs/anchor.js b/libraries/ckeditor/plugins/link/dialogs/anchor.js
new file mode 100644
index 0000000000000000000000000000000000000000..f86c1e81388f0b511ca581b544e57d3b01d5da6c
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/dialogs/anchor.js
@@ -0,0 +1,148 @@
+/**
+ * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+ */
+
+CKEDITOR.dialog.add( 'anchor', function( editor ) {
+	// Function called in onShow to load selected element.
+	var loadElements = function( element ) {
+			var attributeValue = element.data( 'cke-saved-name' );
+			this.setValueOf( 'info', 'txtName', attributeValue || '' );
+		};
+
+	function createFakeAnchor( editor, attributes ) {
+		return editor.createFakeElement( editor.document.createElement( 'a', {
+			attributes: attributes
+		} ), 'cke_anchor', 'anchor' );
+	}
+
+
+	function getSelectedAnchor( selection ) {
+		var range = selection.getRanges()[ 0 ],
+			element = selection.getSelectedElement();
+
+		// In case of table cell selection, we want to shrink selection from td to a element.
+		range.shrink( CKEDITOR.SHRINK_ELEMENT );
+		element = range.getEnclosedNode();
+
+		// If selection is inside text, get its parent element (#3437).
+		if ( element && element.type === CKEDITOR.NODE_TEXT ) {
+			element = element.getParent();
+		}
+
+		// If anchor exists and has any styles find the closest parent <a> tag. (#3863)
+		if ( element && !element.is( 'a' ) ) {
+			element = element.getAscendant( 'a' ) || element;
+		}
+
+		if ( element && element.type === CKEDITOR.NODE_ELEMENT &&
+			( element.data( 'cke-real-element-type' ) === 'anchor' || element.is( 'a' ) ) ) {
+			return element;
+		}
+	}
+
+	function removeAnchorsWithinRange( range ) {
+		var newRange = range.clone();
+		newRange.enlarge( CKEDITOR.ENLARGE_ELEMENT );
+
+		var walker = new CKEDITOR.dom.walker( newRange ),
+			element = newRange.collapsed ? newRange.startContainer : walker.next(),
+			bookmark = range.createBookmark();
+
+		while ( element ) {
+			if ( element.type === CKEDITOR.NODE_ELEMENT && element.getAttribute( 'data-cke-saved-name' ) ) {
+				element.remove( true );
+				// Reset the walker and start from beginning, to check if element has more nested anchors.
+				// Without it, next element is null, so there might be space to more nested elements.
+				walker.reset();
+			}
+			element = walker.next();
+		}
+		range.moveToBookmark( bookmark );
+	}
+
+	return {
+		title: editor.lang.link.anchor.title,
+		minWidth: 300,
+		minHeight: 60,
+		getModel: function( editor ) {
+			return getSelectedAnchor( editor.getSelection() ) || null;
+		},
+		onOk: function() {
+			var name = CKEDITOR.tools.trim( this.getValueOf( 'info', 'txtName' ) ),
+				attributes = {
+					id: name,
+					name: name,
+					'data-cke-saved-name': name
+				},
+				selectedElement = this.getModel( editor );
+
+			if ( selectedElement ) {
+				if ( selectedElement.data( 'cke-realelement' ) ) {
+					var newFake = createFakeAnchor( editor, attributes );
+					newFake.replace( selectedElement );
+
+					// Selecting fake element for IE. (https://dev.ckeditor.com/ticket/11377)
+					if ( CKEDITOR.env.ie ) {
+						editor.getSelection().selectElement( newFake );
+					}
+				} else {
+					selectedElement.setAttributes( attributes );
+				}
+			} else {
+				var sel = editor.getSelection(),
+					range = sel && sel.getRanges()[ 0 ];
+
+				// Empty anchor
+				if ( range.collapsed ) {
+					var anchor = createFakeAnchor( editor, attributes );
+					range.insertNode( anchor );
+				} else {
+					if ( CKEDITOR.env.ie && CKEDITOR.env.version < 9 )
+						attributes[ 'class' ] = 'cke_anchor';
+
+					// (#4728)
+					removeAnchorsWithinRange( range );
+					// Apply style.
+					var style = new CKEDITOR.style( { element: 'a', attributes: attributes } );
+					style.type = CKEDITOR.STYLE_INLINE;
+					style.applyToRange( range );
+				}
+			}
+		},
+
+		onShow: function() {
+			var sel = editor.getSelection(),
+				fullySelected = this.getModel( editor ),
+				fakeSelected = fullySelected && fullySelected.data( 'cke-realelement' ),
+				linkElement = fakeSelected ?
+					CKEDITOR.plugins.link.tryRestoreFakeAnchor( editor, fullySelected ) :
+					CKEDITOR.plugins.link.getSelectedLink( editor );
+
+			if ( linkElement ) {
+				loadElements.call( this, linkElement );
+				!fakeSelected && sel.selectElement( linkElement );
+			}
+
+			this.getContentElement( 'info', 'txtName' ).focus();
+		},
+		contents: [ {
+			id: 'info',
+			label: editor.lang.link.anchor.title,
+			accessKey: 'I',
+			elements: [ {
+				type: 'text',
+				id: 'txtName',
+				label: editor.lang.link.anchor.name,
+				required: true,
+				validate: function() {
+					if ( !this.getValue() ) {
+						alert( editor.lang.link.anchor.errorName ); // jshint ignore:line
+						return false;
+					}
+					return true;
+				}
+			} ]
+		} ]
+	};
+} );
diff --git a/libraries/ckeditor/plugins/link/dialogs/link.js b/libraries/ckeditor/plugins/link/dialogs/link.js
new file mode 100644
index 0000000000000000000000000000000000000000..b6fc45eb8ffce5038734768744bbc22f39b6cd72
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/dialogs/link.js
@@ -0,0 +1,1098 @@
+/**
+ * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+ */
+
+'use strict';
+
+( function() {
+	CKEDITOR.dialog.add( 'link', function( editor ) {
+		var plugin = CKEDITOR.plugins.link,
+			initialLinkText;
+
+		function createRangeForLink( editor, link ) {
+			var range = editor.createRange();
+
+			range.setStartBefore( link );
+			range.setEndAfter( link );
+
+			return range;
+		}
+
+		function insertLinksIntoSelection( editor, data ) {
+			var attributes = plugin.getLinkAttributes( editor, data ),
+				ranges = editor.getSelection().getRanges(),
+				style = new CKEDITOR.style( {
+					element: 'a',
+					attributes: attributes.set
+				} ),
+				rangesToSelect = [],
+				range,
+				text,
+				nestedLinks,
+				i,
+				j;
+
+			style.type = CKEDITOR.STYLE_INLINE; // need to override... dunno why.
+
+			for ( i = 0; i < ranges.length; i++ ) {
+				range = ranges[ i ];
+
+				// Use link URL as text with a collapsed cursor.
+				if ( range.collapsed ) {
+					// Short mailto link text view (https://dev.ckeditor.com/ticket/5736).
+					text = new CKEDITOR.dom.text( data.linkText || ( data.type == 'email' ?
+						data.email.address : attributes.set[ 'data-cke-saved-href' ] ), editor.document );
+					range.insertNode( text );
+					range.selectNodeContents( text );
+				} else if ( initialLinkText !== data.linkText ) {
+					text = new CKEDITOR.dom.text( data.linkText, editor.document );
+
+					// Shrink range to preserve block element.
+					range.shrink( CKEDITOR.SHRINK_TEXT );
+
+					// Use extractHtmlFromRange to remove markup within the selection. Also this method is a little
+					// smarter than range#deleteContents as it plays better e.g. with table cells.
+					editor.editable().extractHtmlFromRange( range );
+
+					range.insertNode( text );
+				}
+
+				// Editable links nested within current range should be removed, so that the link is applied to whole selection.
+				nestedLinks = range._find( 'a' );
+
+				for	( j = 0; j < nestedLinks.length; j++ ) {
+					nestedLinks[ j ].remove( true );
+				}
+
+				// Apply style.
+				style.applyToRange( range, editor );
+
+				rangesToSelect.push( range );
+			}
+
+			editor.getSelection().selectRanges( rangesToSelect );
+		}
+
+		function editLinksInSelection( editor, selectedElements, data ) {
+			var attributes = plugin.getLinkAttributes( editor, data ),
+				ranges = [],
+				isDisplayChanged,
+				isEmailEqualDisplay,
+				isURLEqualDisplay,
+				element,
+				href,
+				newText,
+				i;
+
+			for ( i = 0; i < selectedElements.length; i++ ) {
+				// We're only editing an existing link, so just overwrite the attributes.
+				element = selectedElements[ i ];
+				href = element.data( 'cke-saved-href' );
+				isDisplayChanged = data.linkText && initialLinkText != data.linkText;
+				isURLEqualDisplay = href == initialLinkText;
+				isEmailEqualDisplay = data.type == 'email' && href == 'mailto:' + initialLinkText;
+
+				element.setAttributes( attributes.set );
+				element.removeAttributes( attributes.removed );
+
+				if ( isDisplayChanged ) {
+					// Display text has been changed.
+					newText = data.linkText;
+				} else if ( isURLEqualDisplay || isEmailEqualDisplay ) {
+					// Update text view when user changes protocol (https://dev.ckeditor.com/ticket/4612).
+					// Short mailto link text view (https://dev.ckeditor.com/ticket/5736).
+					newText = data.type == 'email' ? data.email.address : attributes.set[ 'data-cke-saved-href' ];
+				}
+
+				if ( newText ) {
+					element.setText( newText );
+				}
+
+				ranges.push( createRangeForLink( editor, element ) );
+			}
+
+			// We changed the content, so need to select it again.
+			editor.getSelection().selectRanges( ranges );
+		}
+
+		// Handles the event when the "Target" selection box is changed.
+		var targetChanged = function() {
+			var dialog = this.getDialog(),
+				popupFeatures = dialog.getContentElement( 'target', 'popupFeatures' ),
+				targetName = dialog.getContentElement( 'target', 'linkTargetName' ),
+				value = this.getValue();
+
+			if ( !popupFeatures || !targetName ) {
+				return;
+			}
+
+			popupFeatures = popupFeatures.getElement();
+			popupFeatures.hide();
+			targetName.setValue( '' );
+
+			switch ( value ) {
+				case 'frame':
+					targetName.setLabel( editor.lang.link.targetFrameName );
+					targetName.getElement().show();
+					break;
+				case 'popup':
+					popupFeatures.show();
+					targetName.setLabel( editor.lang.link.targetPopupName );
+					targetName.getElement().show();
+					break;
+				default:
+					targetName.setValue( value );
+					targetName.getElement().hide();
+					break;
+			}
+
+		};
+
+		// Handles the event when the "Type" selection box is changed.
+		var linkTypeChanged = function() {
+			var dialog = this.getDialog(),
+				partIds = [ 'urlOptions', 'anchorOptions', 'emailOptions', 'telOptions' ],
+				typeValue = this.getValue(),
+				uploadTab = dialog.definition.getContents( 'upload' ),
+				uploadInitiallyHidden = uploadTab && uploadTab.hidden;
+
+			if ( typeValue == 'url' ) {
+				if ( editor.config.linkShowTargetTab ) {
+					dialog.showPage( 'target' );
+				}
+				if ( !uploadInitiallyHidden ) {
+					dialog.showPage( 'upload' );
+				}
+			} else {
+				dialog.hidePage( 'target' );
+				if ( !uploadInitiallyHidden ) {
+					dialog.hidePage( 'upload' );
+				}
+			}
+
+			for ( var i = 0; i < partIds.length; i++ ) {
+				var element = dialog.getContentElement( 'info', partIds[ i ] );
+				if ( !element ) {
+					continue;
+				}
+
+				element = element.getElement().getParent().getParent();
+				if ( partIds[ i ] == typeValue + 'Options' ) {
+					element.show();
+				} else {
+					element.hide();
+				}
+			}
+
+			dialog.layout();
+		};
+
+		var setupParams = function( page, data ) {
+			if ( data[ page ] ) {
+				this.setValue( data[ page ][ this.id ] || '' );
+			}
+		};
+
+		var setupPopupParams = function( data ) {
+			return setupParams.call( this, 'target', data );
+		};
+
+		var setupAdvParams = function( data ) {
+			return setupParams.call( this, 'advanced', data );
+		};
+
+		var commitParams = function( page, data ) {
+			if ( !data[ page ] ) {
+				data[ page ] = {};
+			}
+
+			data[ page ][ this.id ] = this.getValue() || '';
+		};
+
+		var commitPopupParams = function( data ) {
+			return commitParams.call( this, 'target', data );
+		};
+
+		var commitAdvParams = function( data ) {
+			return commitParams.call( this, 'advanced', data );
+		};
+
+		var commonLang = editor.lang.common,
+			linkLang = editor.lang.link,
+			anchors;
+
+		return {
+			title: linkLang.title,
+			minWidth: ( CKEDITOR.skinName || editor.config.skin ) == 'moono-lisa' ? 450 : 350,
+			minHeight: 240,
+			getModel: function( editor ) {
+				var elements = plugin.getSelectedLink( editor, true ),
+					firstLink = elements[ 0 ] || null;
+
+				return firstLink;
+			},
+			contents: [ {
+				id: 'info',
+				label: linkLang.info,
+				title: linkLang.info,
+				elements: [ {
+					type: 'text',
+					id: 'linkDisplayText',
+					label: linkLang.displayText,
+					setup: function() {
+						this.enable();
+
+						this.setValue( editor.getSelection().getSelectedText() );
+
+						// Keep inner text so that it can be compared in commit function. By obtaining value from getData()
+						// we get value stripped from new line chars which is important when comparing the value later on.
+						initialLinkText = this.getValue();
+					},
+					commit: function( data ) {
+						data.linkText = this.isEnabled() ? this.getValue() : '';
+					}
+				},
+				{
+					id: 'linkType',
+					type: 'select',
+					label: linkLang.type,
+					'default': 'url',
+					items: [
+						[ linkLang.toUrl, 'url' ],
+						[ linkLang.toAnchor, 'anchor' ],
+						[ linkLang.toEmail, 'email' ],
+						[ linkLang.toPhone, 'tel' ]
+					],
+					onChange: linkTypeChanged,
+					setup: function( data ) {
+						this.setValue( data.type || 'url' );
+					},
+					commit: function( data ) {
+						data.type = this.getValue();
+					}
+				},
+				{
+					type: 'vbox',
+					id: 'urlOptions',
+					children: [ {
+						type: 'hbox',
+						widths: [ '25%', '75%' ],
+						children: [ {
+							id: 'protocol',
+							type: 'select',
+							label: commonLang.protocol,
+							items: [
+								// Force 'ltr' for protocol names in BIDI. (https://dev.ckeditor.com/ticket/5433)
+								[ 'http://\u200E', 'http://' ],
+								[ 'https://\u200E', 'https://' ],
+								[ 'ftp://\u200E', 'ftp://' ],
+								[ 'news://\u200E', 'news://' ],
+								[ linkLang.other, '' ]
+							],
+							'default': editor.config.linkDefaultProtocol,
+							setup: function( data ) {
+								if ( data.url ) {
+									this.setValue( data.url.protocol || '' );
+								}
+							},
+							commit: function( data ) {
+								if ( !data.url ) {
+									data.url = {};
+								}
+
+								data.url.protocol = this.getValue();
+							}
+						},
+						{
+							type: 'text',
+							id: 'url',
+							label: commonLang.url,
+							required: true,
+							onLoad: function() {
+								this.allowOnChange = true;
+							},
+							onKeyUp: function() {
+								this.allowOnChange = false;
+								var protocolCmb = this.getDialog().getContentElement( 'info', 'protocol' ),
+									url = this.getValue(),
+									urlOnChangeProtocol = /^(http|https|ftp|news):\/\/(?=.)/i,
+									urlOnChangeTestOther = /^((javascript:)|[#\/\.\?])/i,
+									protocol = urlOnChangeProtocol.exec( url );
+
+								if ( protocol ) {
+									this.setValue( url.substr( protocol[ 0 ].length ) );
+									protocolCmb.setValue( protocol[ 0 ].toLowerCase() );
+								} else if ( urlOnChangeTestOther.test( url ) ) {
+									protocolCmb.setValue( '' );
+								}
+
+								this.allowOnChange = true;
+							},
+							onChange: function() {
+								// Dont't call on dialog load.
+								if ( this.allowOnChange ) {
+									this.onKeyUp();
+								}
+							},
+							validate: function() {
+								var dialog = this.getDialog();
+
+								if ( dialog.getContentElement( 'info', 'linkType' ) && dialog.getValueOf( 'info', 'linkType' ) != 'url' ) {
+									return true;
+								}
+
+								if ( !editor.config.linkJavaScriptLinksAllowed && ( /javascript\:/ ).test( this.getValue() ) ) {
+									alert( commonLang.invalidValue ); // jshint ignore:line
+									return false;
+								}
+
+								// Edit Anchor.
+								if ( this.getDialog().fakeObj ) {
+									return true;
+								}
+
+								var func = CKEDITOR.dialog.validate.notEmpty( linkLang.noUrl );
+								return func.apply( this );
+							},
+							setup: function( data ) {
+								this.allowOnChange = false;
+								if ( data.url ) {
+									this.setValue( data.url.url );
+								}
+								this.allowOnChange = true;
+
+							},
+							commit: function( data ) {
+								// IE will not trigger the onChange event if the mouse has been used
+								// to carry all the operations https://dev.ckeditor.com/ticket/4724
+								this.onChange();
+
+								if ( !data.url ) {
+									data.url = {};
+								}
+
+								data.url.url = this.getValue();
+								this.allowOnChange = false;
+							}
+						} ],
+						setup: function() {
+							if ( !this.getDialog().getContentElement( 'info', 'linkType' ) ) {
+								this.getElement().show();
+							}
+						}
+					},
+					{
+						type: 'button',
+						id: 'browse',
+						hidden: 'true',
+						filebrowser: 'info:url',
+						label: commonLang.browseServer
+					} ]
+				},
+				{
+					type: 'vbox',
+					id: 'anchorOptions',
+					width: 260,
+					align: 'center',
+					padding: 0,
+					children: [ {
+						type: 'fieldset',
+						id: 'selectAnchorText',
+						label: linkLang.selectAnchor,
+						setup: function() {
+							anchors = plugin.getEditorAnchors( editor );
+
+							this.getElement()[ anchors && anchors.length ? 'show' : 'hide' ]();
+						},
+						children: [ {
+							type: 'hbox',
+							id: 'selectAnchor',
+							children: [ {
+								type: 'select',
+								id: 'anchorName',
+								'default': '',
+								label: linkLang.anchorName,
+								style: 'width: 100%;',
+								items: [
+									[ '' ]
+								],
+								setup: function( data ) {
+									this.clear();
+									this.add( '' );
+
+									if ( anchors ) {
+										for ( var i = 0; i < anchors.length; i++ ) {
+											if ( anchors[ i ].name ) {
+												this.add( anchors[ i ].name );
+											}
+										}
+									}
+
+									if ( data.anchor ) {
+										this.setValue( data.anchor.name );
+									}
+
+									var linkType = this.getDialog().getContentElement( 'info', 'linkType' );
+									if ( linkType && linkType.getValue() == 'email' ) {
+										this.focus();
+									}
+								},
+								commit: function( data ) {
+									if ( !data.anchor ) {
+										data.anchor = {};
+									}
+
+									data.anchor.name = this.getValue();
+								}
+							},
+							{
+								type: 'select',
+								id: 'anchorId',
+								'default': '',
+								label: linkLang.anchorId,
+								style: 'width: 100%;',
+								items: [
+									[ '' ]
+								],
+								setup: function( data ) {
+									this.clear();
+									this.add( '' );
+
+									if ( anchors ) {
+										for ( var i = 0; i < anchors.length; i++ ) {
+											if ( anchors[ i ].id ) {
+												this.add( anchors[ i ].id );
+											}
+										}
+									}
+
+									if ( data.anchor ) {
+										this.setValue( data.anchor.id );
+									}
+								},
+								commit: function( data ) {
+									if ( !data.anchor ) {
+										data.anchor = {};
+									}
+
+									data.anchor.id = this.getValue();
+								}
+							} ],
+							setup: function() {
+								this.getElement()[ anchors && anchors.length ? 'show' : 'hide' ]();
+							}
+						} ]
+					},
+					{
+						type: 'html',
+						id: 'noAnchors',
+						style: 'text-align: center;',
+						html: '<div role="note" tabIndex="-1">' + CKEDITOR.tools.htmlEncode( linkLang.noAnchors ) + '</div>',
+						// Focus the first element defined in above html.
+						focus: true,
+						setup: function() {
+							this.getElement()[ anchors && anchors.length ? 'hide' : 'show' ]();
+						}
+					} ],
+					setup: function() {
+						if ( !this.getDialog().getContentElement( 'info', 'linkType' ) ) {
+							this.getElement().hide();
+						}
+					}
+				},
+				{
+					type: 'vbox',
+					id: 'emailOptions',
+					padding: 1,
+					children: [ {
+						type: 'text',
+						id: 'emailAddress',
+						label: linkLang.emailAddress,
+						required: true,
+						validate: function() {
+							var dialog = this.getDialog();
+
+							if ( !dialog.getContentElement( 'info', 'linkType' ) || dialog.getValueOf( 'info', 'linkType' ) != 'email' ) {
+								return true;
+							}
+
+							var func = CKEDITOR.dialog.validate.notEmpty( linkLang.noEmail );
+							return func.apply( this );
+						},
+						setup: function( data ) {
+							if ( data.email ) {
+								this.setValue( data.email.address );
+							}
+
+							var linkType = this.getDialog().getContentElement( 'info', 'linkType' );
+							if ( linkType && linkType.getValue() == 'email' ) {
+								this.select();
+							}
+						},
+						commit: function( data ) {
+							if ( !data.email ) {
+								data.email = {};
+							}
+
+							data.email.address = this.getValue();
+						}
+					},
+					{
+						type: 'text',
+						id: 'emailSubject',
+						label: linkLang.emailSubject,
+						setup: function( data ) {
+							if ( data.email ) {
+								this.setValue( data.email.subject );
+							}
+						},
+						commit: function( data ) {
+							if ( !data.email ) {
+								data.email = {};
+							}
+
+							data.email.subject = this.getValue();
+						}
+					},
+					{
+						type: 'textarea',
+						id: 'emailBody',
+						label: linkLang.emailBody,
+						rows: 3,
+						'default': '',
+						setup: function( data ) {
+							if ( data.email ) {
+								this.setValue( data.email.body );
+							}
+						},
+						commit: function( data ) {
+							if ( !data.email ) {
+								data.email = {};
+							}
+
+							data.email.body = this.getValue();
+						}
+					} ],
+					setup: function() {
+						if ( !this.getDialog().getContentElement( 'info', 'linkType' ) ) {
+							this.getElement().hide();
+						}
+					}
+				},
+				{
+					type: 'vbox',
+					id: 'telOptions',
+					padding: 1,
+					children: [ {
+						type: 'tel',
+						id: 'telNumber',
+						label: linkLang.phoneNumber,
+						required: true,
+						validate: validateTelNumber,
+						setup: function( data ) {
+							if ( data.tel ) {
+								this.setValue( data.tel );
+							}
+
+							var linkType = this.getDialog().getContentElement( 'info', 'linkType' );
+							if ( linkType && linkType.getValue() == 'tel' ) {
+								this.select();
+							}
+						},
+						commit: function( data ) {
+							data.tel = this.getValue();
+						}
+					} ],
+					setup: function() {
+						if ( !this.getDialog().getContentElement( 'info', 'linkType' ) ) {
+							this.getElement().hide();
+						}
+					}
+				} ]
+			},
+			{
+				id: 'target',
+				requiredContent: 'a[target]', // This is not fully correct, because some target option requires JS.
+				label: linkLang.target,
+				title: linkLang.target,
+				elements: [ {
+					type: 'hbox',
+					widths: [ '50%', '50%' ],
+					children: [ {
+						type: 'select',
+						id: 'linkTargetType',
+						label: commonLang.target,
+						'default': 'notSet',
+						style: 'width : 100%;',
+						'items': [
+							[ commonLang.notSet, 'notSet' ],
+							[ linkLang.targetFrame, 'frame' ],
+							[ linkLang.targetPopup, 'popup' ],
+							[ commonLang.targetNew, '_blank' ],
+							[ commonLang.targetTop, '_top' ],
+							[ commonLang.targetSelf, '_self' ],
+							[ commonLang.targetParent, '_parent' ]
+						],
+						onChange: targetChanged,
+						setup: function( data ) {
+							if ( data.target ) {
+								this.setValue( data.target.type || 'notSet' );
+							}
+							targetChanged.call( this );
+						},
+						commit: function( data ) {
+							if ( !data.target ) {
+								data.target = {};
+							}
+
+							data.target.type = this.getValue();
+						}
+					},
+					{
+						type: 'text',
+						id: 'linkTargetName',
+						label: linkLang.targetFrameName,
+						'default': '',
+						setup: function( data ) {
+							if ( data.target ) {
+								this.setValue( data.target.name );
+							}
+						},
+						commit: function( data ) {
+							if ( !data.target ) {
+								data.target = {};
+							}
+
+							data.target.name = this.getValue().replace( /([^\x00-\x7F]|\s)/gi, '' );
+						}
+					} ]
+				},
+				{
+					type: 'vbox',
+					width: '100%',
+					align: 'center',
+					padding: 2,
+					id: 'popupFeatures',
+					children: [ {
+						type: 'fieldset',
+						label: linkLang.popupFeatures,
+						children: [ {
+							type: 'hbox',
+							children: [ {
+								type: 'checkbox',
+								id: 'resizable',
+								label: linkLang.popupResizable,
+								setup: setupPopupParams,
+								commit: commitPopupParams
+							},
+							{
+								type: 'checkbox',
+								id: 'status',
+								label: linkLang.popupStatusBar,
+								setup: setupPopupParams,
+								commit: commitPopupParams
+							} ]
+						},
+						{
+							type: 'hbox',
+							children: [ {
+								type: 'checkbox',
+								id: 'location',
+								label: linkLang.popupLocationBar,
+								setup: setupPopupParams,
+								commit: commitPopupParams
+							},
+							{
+								type: 'checkbox',
+								id: 'toolbar',
+								label: linkLang.popupToolbar,
+								setup: setupPopupParams,
+								commit: commitPopupParams
+							} ]
+						},
+						{
+							type: 'hbox',
+							children: [ {
+								type: 'checkbox',
+								id: 'menubar',
+								label: linkLang.popupMenuBar,
+								setup: setupPopupParams,
+								commit: commitPopupParams
+							},
+							{
+								type: 'checkbox',
+								id: 'fullscreen',
+								label: linkLang.popupFullScreen,
+								setup: setupPopupParams,
+								commit: commitPopupParams
+							} ]
+						},
+						{
+							type: 'hbox',
+							children: [ {
+								type: 'checkbox',
+								id: 'scrollbars',
+								label: linkLang.popupScrollBars,
+								setup: setupPopupParams,
+								commit: commitPopupParams
+							},
+							{
+								type: 'checkbox',
+								id: 'dependent',
+								label: linkLang.popupDependent,
+								setup: setupPopupParams,
+								commit: commitPopupParams
+							} ]
+						},
+						{
+							type: 'hbox',
+							children: [ {
+								type: 'text',
+								widths: [ '50%', '50%' ],
+								labelLayout: 'horizontal',
+								label: commonLang.width,
+								id: 'width',
+								setup: setupPopupParams,
+								commit: commitPopupParams
+							},
+							{
+								type: 'text',
+								labelLayout: 'horizontal',
+								widths: [ '50%', '50%' ],
+								label: linkLang.popupLeft,
+								id: 'left',
+								setup: setupPopupParams,
+								commit: commitPopupParams
+							} ]
+						},
+						{
+							type: 'hbox',
+							children: [ {
+								type: 'text',
+								labelLayout: 'horizontal',
+								widths: [ '50%', '50%' ],
+								label: commonLang.height,
+								id: 'height',
+								setup: setupPopupParams,
+								commit: commitPopupParams
+							},
+							{
+								type: 'text',
+								labelLayout: 'horizontal',
+								label: linkLang.popupTop,
+								widths: [ '50%', '50%' ],
+								id: 'top',
+								setup: setupPopupParams,
+								commit: commitPopupParams
+							} ]
+						} ]
+					} ]
+				} ]
+			},
+			{
+				id: 'upload',
+				label: linkLang.upload,
+				title: linkLang.upload,
+				hidden: true,
+				filebrowser: 'uploadButton',
+				elements: [ {
+					type: 'file',
+					id: 'upload',
+					label: commonLang.upload,
+					style: 'height:40px',
+					size: 29
+				},
+				{
+					type: 'fileButton',
+					id: 'uploadButton',
+					label: commonLang.uploadSubmit,
+					filebrowser: 'info:url',
+					'for': [ 'upload', 'upload' ]
+				} ]
+			},
+			{
+				id: 'advanced',
+				label: linkLang.advanced,
+				title: linkLang.advanced,
+				elements: [ {
+					type: 'vbox',
+					padding: 1,
+					children: [ {
+						type: 'hbox',
+						widths: [ '45%', '35%', '20%' ],
+						children: [ {
+							type: 'text',
+							id: 'advId',
+							requiredContent: 'a[id]',
+							label: linkLang.id,
+							setup: setupAdvParams,
+							commit: commitAdvParams
+						},
+						{
+							type: 'select',
+							id: 'advLangDir',
+							requiredContent: 'a[dir]',
+							label: linkLang.langDir,
+							'default': '',
+							style: 'width:110px',
+							items: [
+								[ commonLang.notSet, '' ],
+								[ linkLang.langDirLTR, 'ltr' ],
+								[ linkLang.langDirRTL, 'rtl' ]
+							],
+							setup: setupAdvParams,
+							commit: commitAdvParams
+						},
+						{
+							type: 'text',
+							id: 'advAccessKey',
+							requiredContent: 'a[accesskey]',
+							width: '80px',
+							label: linkLang.acccessKey,
+							maxLength: 1,
+							setup: setupAdvParams,
+							commit: commitAdvParams
+						} ]
+					},
+					{
+						type: 'hbox',
+						widths: [ '45%', '35%', '20%' ],
+						children: [ {
+							type: 'text',
+							label: linkLang.name,
+							id: 'advName',
+							requiredContent: 'a[name]',
+							setup: setupAdvParams,
+							commit: commitAdvParams
+						},
+						{
+							type: 'text',
+							label: linkLang.langCode,
+							id: 'advLangCode',
+							requiredContent: 'a[lang]',
+							width: '110px',
+							'default': '',
+							setup: setupAdvParams,
+							commit: commitAdvParams
+						},
+						{
+							type: 'text',
+							label: linkLang.tabIndex,
+							id: 'advTabIndex',
+							requiredContent: 'a[tabindex]',
+							width: '80px',
+							maxLength: 5,
+							setup: setupAdvParams,
+							commit: commitAdvParams
+						} ]
+					} ]
+				},
+				{
+					type: 'vbox',
+					padding: 1,
+					children: [ {
+						type: 'hbox',
+						widths: [ '45%', '55%' ],
+						children: [ {
+							type: 'text',
+							label: linkLang.advisoryTitle,
+							requiredContent: 'a[title]',
+							'default': '',
+							id: 'advTitle',
+							setup: setupAdvParams,
+							commit: commitAdvParams
+						},
+						{
+							type: 'text',
+							label: linkLang.advisoryContentType,
+							requiredContent: 'a[type]',
+							'default': '',
+							id: 'advContentType',
+							setup: setupAdvParams,
+							commit: commitAdvParams
+						} ]
+					},
+					{
+						type: 'hbox',
+						widths: [ '45%', '55%' ],
+						children: [ {
+							type: 'text',
+							label: linkLang.cssClasses,
+							requiredContent: 'a(cke-xyz)', // Random text like 'xyz' will check if all are allowed.
+							'default': '',
+							id: 'advCSSClasses',
+							setup: setupAdvParams,
+							commit: commitAdvParams
+						},
+						{
+							type: 'text',
+							label: linkLang.charset,
+							requiredContent: 'a[charset]',
+							'default': '',
+							id: 'advCharset',
+							setup: setupAdvParams,
+							commit: commitAdvParams
+						} ]
+					},
+					{
+						type: 'hbox',
+						widths: [ '45%', '55%' ],
+						children: [ {
+							type: 'text',
+							label: linkLang.rel,
+							requiredContent: 'a[rel]',
+							'default': '',
+							id: 'advRel',
+							setup: setupAdvParams,
+							commit: commitAdvParams
+						},
+						{
+							type: 'text',
+							label: linkLang.styles,
+							requiredContent: 'a{cke-xyz}', // Random text like 'xyz' will check if all are allowed.
+							'default': '',
+							id: 'advStyles',
+							validate: CKEDITOR.dialog.validate.inlineStyle( editor.lang.common.invalidInlineStyle ),
+							setup: setupAdvParams,
+							commit: commitAdvParams
+						} ]
+					},
+					{
+						type: 'hbox',
+						widths: [ '45%', '55%' ],
+						children: [ {
+							type: 'checkbox',
+							id: 'download',
+							requiredContent: 'a[download]',
+							label: linkLang.download,
+							setup: function( data ) {
+								if ( data.download !== undefined ) {
+									this.setValue( 'checked', 'checked' );
+								}
+							},
+							commit: function( data ) {
+								if ( this.getValue() ) {
+									data.download = this.getValue();
+								}
+							}
+						} ]
+					} ]
+				} ]
+			} ],
+			onShow: function() {
+				var editor = this.getParentEditor(),
+					selection = editor.getSelection(),
+					displayTextField = this.getContentElement( 'info', 'linkDisplayText' ).getElement().getParent().getParent(),
+					elements = plugin.getSelectedLink( editor, true ),
+					firstLink = elements[ 0 ] || null;
+
+				// Fill in all the relevant fields if there's already one link selected.
+				if ( firstLink && firstLink.hasAttribute( 'href' ) ) {
+					// Don't change selection if some element is already selected.
+					// For example - don't destroy fake selection.
+					if ( !selection.getSelectedElement() && !selection.isInTable() ) {
+						selection.selectElement( firstLink );
+					}
+				}
+
+				var data = plugin.parseLinkAttributes( editor, firstLink );
+
+				// Here we'll decide whether or not we want to show Display Text field.
+				if ( elements.length <= 1 && plugin.showDisplayTextForElement( firstLink, editor ) ) {
+					displayTextField.show();
+				} else {
+					displayTextField.hide();
+				}
+
+				// Record down the selected element in the dialog.
+				this._.selectedElements = elements;
+
+				this.setupContent( data );
+			},
+			onOk: function() {
+				var data = {};
+
+				// Collect data from fields.
+				this.commitContent( data );
+
+				if ( !this._.selectedElements.length ) {
+					insertLinksIntoSelection( editor, data );
+				} else {
+					editLinksInSelection( editor, this._.selectedElements, data );
+
+					delete this._.selectedElements;
+				}
+			},
+			onLoad: function() {
+				if ( !editor.config.linkShowAdvancedTab ) {
+					this.hidePage( 'advanced' ); //Hide Advanded tab.
+				}
+
+				if ( !editor.config.linkShowTargetTab ) {
+					this.hidePage( 'target' ); //Hide Target tab.
+				}
+			},
+			// Inital focus on 'url' field if link is of type URL.
+			onFocus: function() {
+				var linkType = this.getContentElement( 'info', 'linkType' ),
+					urlField;
+
+				if ( linkType && linkType.getValue() == 'url' ) {
+					urlField = this.getContentElement( 'info', 'url' );
+					urlField.select();
+				}
+			}
+		};
+	} );
+
+	function validateTelNumber() {
+		var dialog = this.getDialog(),
+			editor = dialog._.editor,
+			regExp =  editor.config.linkPhoneRegExp,
+			msg = editor.config.linkPhoneMsg,
+			linkLang = editor.lang.link,
+			messageWhenEmpty = CKEDITOR.dialog.validate.notEmpty( linkLang.noTel ).apply( this );
+
+		if ( !dialog.getContentElement( 'info', 'linkType' ) || dialog.getValueOf( 'info', 'linkType' ) != 'tel' ) {
+			return true;
+		}
+
+		if ( messageWhenEmpty !== true ) {
+			return messageWhenEmpty;
+		}
+
+		if ( regExp ) {
+			return CKEDITOR.dialog.validate.regex( regExp, msg ).call( this );
+		}
+	}
+} )();
+// jscs:disable maximumLineLength
+/**
+ * The e-mail address anti-spam protection option. The protection will be
+ * applied when creating or modifying e-mail links through the editor interface.
+ *
+ * Two methods of protection can be chosen:
+ *
+ * 1. The e-mail parts (name, domain, and any other query string) are
+ *     assembled into a function call pattern. Such function must be
+ *     provided by the developer in the pages that will use the contents.
+ * 2. Only the e-mail address is obfuscated into a special string that
+ *     has no meaning for humans or spam bots, but which is properly
+ *     rendered and accepted by the browser.
+ *
+ * Both approaches require JavaScript to be enabled.
+ *
+ *		// href="mailto:tester@ckeditor.com?subject=subject&body=body"
+ *		config.emailProtection = '';
+ *
+ *		// href="<a href=\"javascript:void(location.href=\'mailto:\'+String.fromCharCode(116,101,115,116,101,114,64,99,107,101,100,105,116,111,114,46,99,111,109)+\'?subject=subject&body=body\')\">e-mail</a>"
+ *		config.emailProtection = 'encode';
+ *
+ *		// href="javascript:mt('tester','ckeditor.com','subject','body')"
+ *		config.emailProtection = 'mt(NAME,DOMAIN,SUBJECT,BODY)';
+ *
+ * @since 3.1.0
+ * @cfg {String} [emailProtection='' (empty string = disabled)]
+ * @member CKEDITOR.config
+ */
diff --git a/libraries/ckeditor/plugins/link/icons/anchor-rtl.png b/libraries/ckeditor/plugins/link/icons/anchor-rtl.png
new file mode 100644
index 0000000000000000000000000000000000000000..b06885589c82a0c5d2cf628d19f6f8a9ecdbeead
Binary files /dev/null and b/libraries/ckeditor/plugins/link/icons/anchor-rtl.png differ
diff --git a/libraries/ckeditor/plugins/link/icons/anchor.png b/libraries/ckeditor/plugins/link/icons/anchor.png
new file mode 100644
index 0000000000000000000000000000000000000000..e50d6cd83e79f6b9ba1a49fe3bb0c9b23cfcb3c3
Binary files /dev/null and b/libraries/ckeditor/plugins/link/icons/anchor.png differ
diff --git a/libraries/ckeditor/plugins/link/icons/hidpi/anchor-rtl.png b/libraries/ckeditor/plugins/link/icons/hidpi/anchor-rtl.png
new file mode 100644
index 0000000000000000000000000000000000000000..3533c38876719c02b9e4c779d90043c67dab5e40
Binary files /dev/null and b/libraries/ckeditor/plugins/link/icons/hidpi/anchor-rtl.png differ
diff --git a/libraries/ckeditor/plugins/link/icons/hidpi/anchor.png b/libraries/ckeditor/plugins/link/icons/hidpi/anchor.png
new file mode 100644
index 0000000000000000000000000000000000000000..99eeaddcbc7031abc2adf2367a37c623b23c6140
Binary files /dev/null and b/libraries/ckeditor/plugins/link/icons/hidpi/anchor.png differ
diff --git a/libraries/ckeditor/plugins/link/icons/hidpi/link.png b/libraries/ckeditor/plugins/link/icons/hidpi/link.png
new file mode 100644
index 0000000000000000000000000000000000000000..43ce99ed22e2ef55dd6084e98edaf349c034aa43
Binary files /dev/null and b/libraries/ckeditor/plugins/link/icons/hidpi/link.png differ
diff --git a/libraries/ckeditor/plugins/link/icons/hidpi/unlink.png b/libraries/ckeditor/plugins/link/icons/hidpi/unlink.png
new file mode 100644
index 0000000000000000000000000000000000000000..8ace29df161a8e0e3117aa52b0aa9d83adf65d12
Binary files /dev/null and b/libraries/ckeditor/plugins/link/icons/hidpi/unlink.png differ
diff --git a/libraries/ckeditor/plugins/link/icons/link.png b/libraries/ckeditor/plugins/link/icons/link.png
new file mode 100644
index 0000000000000000000000000000000000000000..c2c450f7f42cf1e33e9304fc8c22a4e77d545a0b
Binary files /dev/null and b/libraries/ckeditor/plugins/link/icons/link.png differ
diff --git a/libraries/ckeditor/plugins/link/icons/unlink.png b/libraries/ckeditor/plugins/link/icons/unlink.png
new file mode 100644
index 0000000000000000000000000000000000000000..c2f3f648e2b6199d371f96a7e7c00eadb2ccdf8f
Binary files /dev/null and b/libraries/ckeditor/plugins/link/icons/unlink.png differ
diff --git a/libraries/ckeditor/plugins/link/images/anchor.png b/libraries/ckeditor/plugins/link/images/anchor.png
new file mode 100644
index 0000000000000000000000000000000000000000..d94adb41306ffd96741ae5e5ca1e8d749853f3fb
Binary files /dev/null and b/libraries/ckeditor/plugins/link/images/anchor.png differ
diff --git a/libraries/ckeditor/plugins/link/images/hidpi/anchor.png b/libraries/ckeditor/plugins/link/images/hidpi/anchor.png
new file mode 100644
index 0000000000000000000000000000000000000000..186c3e916512175f0d6ab12d8eacfe9f320314db
Binary files /dev/null and b/libraries/ckeditor/plugins/link/images/hidpi/anchor.png differ
diff --git a/libraries/ckeditor/plugins/link/lang/af.js b/libraries/ckeditor/plugins/link/lang/af.js
new file mode 100644
index 0000000000000000000000000000000000000000..532e1ddd77f2be35ef7530345f94a43b8ec90231
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/af.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'af', {
+	acccessKey: 'Toegangsleutel',
+	advanced: 'Gevorderd',
+	advisoryContentType: 'Aanbevole inhoudstipe',
+	advisoryTitle: 'Aanbevole titel',
+	anchor: {
+		toolbar: 'Anker byvoeg/verander',
+		menu: 'Anker-eienskappe',
+		title: 'Anker-eienskappe',
+		name: 'Ankernaam',
+		errorName: 'Voltooi die ankernaam asseblief',
+		remove: 'Remove Anchor'
+	},
+	anchorId: 'Op element Id',
+	anchorName: 'Op ankernaam',
+	charset: 'Karakterstel van geskakelde bron',
+	cssClasses: 'CSS klasse',
+	download: 'Force Download', // MISSING
+	displayText: 'Display Text', // MISSING
+	emailAddress: 'E-posadres',
+	emailBody: 'Berig-inhoud',
+	emailSubject: 'Berig-onderwerp',
+	id: 'Id',
+	info: 'Skakel informasie',
+	langCode: 'Taalkode',
+	langDir: 'Skryfrigting',
+	langDirLTR: 'Links na regs (LTR)',
+	langDirRTL: 'Regs na links (RTL)',
+	menu: 'Wysig skakel',
+	name: 'Naam',
+	noAnchors: '(Geen ankers beskikbaar in dokument)',
+	noEmail: 'Gee die e-posadres',
+	noUrl: 'Gee die skakel se URL',
+	noTel: 'Please type the phone number', // MISSING
+	other: '<ander>',
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'Afhanklik (Netscape)',
+	popupFeatures: 'Eienskappe van opspringvenster',
+	popupFullScreen: 'Volskerm (IE)',
+	popupLeft: 'Posisie links',
+	popupLocationBar: 'Adresbalk',
+	popupMenuBar: 'Spyskaartbalk',
+	popupResizable: 'Herskaalbaar',
+	popupScrollBars: 'Skuifbalke',
+	popupStatusBar: 'Statusbalk',
+	popupToolbar: 'Werkbalk',
+	popupTop: 'Posisie bo',
+	rel: 'Relationship', // MISSING
+	selectAnchor: 'Kies \'n anker',
+	styles: 'Styl',
+	tabIndex: 'Tab indeks',
+	target: 'Doel',
+	targetFrame: '<raam>',
+	targetFrameName: 'Naam van doelraam',
+	targetPopup: '<opspringvenster>',
+	targetPopupName: 'Naam van opspringvenster',
+	title: 'Skakel',
+	toAnchor: 'Anker in bladsy',
+	toEmail: 'E-pos',
+	toUrl: 'URL',
+	toPhone: 'Phone', // MISSING
+	toolbar: 'Skakel invoeg/wysig',
+	type: 'Skakelsoort',
+	unlink: 'Verwyder skakel',
+	upload: 'Oplaai'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/ar.js b/libraries/ckeditor/plugins/link/lang/ar.js
new file mode 100644
index 0000000000000000000000000000000000000000..eb99f8210742d240212995591486c12640e80a02
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/ar.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'ar', {
+	acccessKey: 'مفاتيح الإختصار',
+	advanced: 'متقدم',
+	advisoryContentType: 'نوع التقرير',
+	advisoryTitle: 'عنوان التقرير',
+	anchor: {
+		toolbar: 'إشارة مرجعية',
+		menu: 'تحرير الإشارة المرجعية',
+		title: 'خصائص الإشارة المرجعية',
+		name: 'اسم الإشارة المرجعية',
+		errorName: 'الرجاء كتابة اسم الإشارة المرجعية',
+		remove: 'إزالة الإشارة المرجعية'
+	},
+	anchorId: 'حسب رقم العنصر',
+	anchorName: 'حسب إسم الإشارة المرجعية',
+	charset: 'ترميز المادة المطلوبة',
+	cssClasses: 'فئات التنسيق',
+	download: 'فرض التحميل',
+	displayText: 'نص العرض',
+	emailAddress: 'البريد الإلكتروني',
+	emailBody: 'محتوى الرسالة',
+	emailSubject: 'موضوع الرسالة',
+	id: 'هوية',
+	info: 'معلومات الرابط',
+	langCode: 'رمز اللغة',
+	langDir: 'إتجاه نص اللغة',
+	langDirLTR: 'اليسار لليمين (LTR)',
+	langDirRTL: 'اليمين لليسار (RTL)',
+	menu: 'تحرير الرابط',
+	name: 'إسم',
+	noAnchors: '(لا توجد علامات مرجعية في هذا المستند)',
+	noEmail: 'الرجاء كتابة الريد الإلكتروني',
+	noUrl: 'الرجاء كتابة رابط الموقع',
+	noTel: 'Please type the phone number', // MISSING
+	other: '<أخرى>',
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'تابع (Netscape)',
+	popupFeatures: 'خصائص النافذة المنبثقة',
+	popupFullScreen: 'ملئ الشاشة (IE)',
+	popupLeft: 'التمركز لليسار',
+	popupLocationBar: 'شريط العنوان',
+	popupMenuBar: 'القوائم الرئيسية',
+	popupResizable: 'قابلة التشكيل',
+	popupScrollBars: 'أشرطة التمرير',
+	popupStatusBar: 'شريط الحالة',
+	popupToolbar: 'شريط الأدوات',
+	popupTop: 'التمركز للأعلى',
+	rel: 'العلاقة',
+	selectAnchor: 'اختر علامة مرجعية',
+	styles: 'نمط',
+	tabIndex: 'الترتيب',
+	target: 'هدف الرابط',
+	targetFrame: '<إطار>',
+	targetFrameName: 'اسم الإطار المستهدف',
+	targetPopup: '<نافذة منبثقة>',
+	targetPopupName: 'اسم النافذة المنبثقة',
+	title: 'رابط',
+	toAnchor: 'مكان في هذا المستند',
+	toEmail: 'بريد إلكتروني',
+	toUrl: 'الرابط',
+	toPhone: 'Phone', // MISSING
+	toolbar: 'رابط',
+	type: 'نوع الربط',
+	unlink: 'إزالة رابط',
+	upload: 'رفع'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/az.js b/libraries/ckeditor/plugins/link/lang/az.js
new file mode 100644
index 0000000000000000000000000000000000000000..da3ade1c8cea7c4829dad296b94cb753573d12e7
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/az.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'az', {
+	acccessKey: 'Qısayol düyməsi',
+	advanced: 'Geniş seçimləri',
+	advisoryContentType: 'Məsləhətli məzmunun növü',
+	advisoryTitle: 'Məsləhətli başlıq',
+	anchor: {
+		toolbar: 'XeÅŸ',
+		menu: 'XeÅŸi redaktÉ™ et',
+		title: 'Xeşin seçimləri',
+		name: 'Xeşin adı',
+		errorName: 'Xeşin adı yanlışdır',
+		remove: 'Xeşin adı sil'
+	},
+	anchorId: 'ID görə',
+	anchorName: 'Xeşin adına görə',
+	charset: 'Hədəfin kodlaşdırması',
+	cssClasses: 'Üslub klası',
+	download: 'Məcburi yükləmə',
+	displayText: 'Göstərilən mətn',
+	emailAddress: 'E-poçt ünvanı',
+	emailBody: 'Mesajın məzmunu',
+	emailSubject: 'Mesajın başlığı',
+	id: 'ID',
+	info: 'Linkin xüsusiyyətləri',
+	langCode: 'Dilin kodu',
+	langDir: 'Yaziların istiqaməti',
+	langDirLTR: 'Soldan saÄŸa (LTR)',
+	langDirRTL: 'SaÄŸdan sola (RTL)',
+	menu: 'Linki redaktÉ™ et',
+	name: 'Ad',
+	noAnchors: '(heç bir xeş tapılmayıb)',
+	noEmail: 'E-poçt ünvanı daxil edin',
+	noUrl: 'Linkin URL-ı daxil edin',
+	noTel: 'Please type the phone number', // MISSING
+	other: '<digər>',
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'Asılı (Netscape)',
+	popupFeatures: 'Pəncərənin xüsusiyyətləri',
+	popupFullScreen: 'Tam ekran rejimi (IE)',
+	popupLeft: 'Solda',
+	popupLocationBar: 'Ãœnvan paneli',
+	popupMenuBar: 'Menyu paneli',
+	popupResizable: 'Olçülər dəyişilir',
+	popupScrollBars: 'Sürüşdürmələr göstər',
+	popupStatusBar: 'Bildirişlərin paneli',
+	popupToolbar: 'Alətlərin paneli',
+	popupTop: 'Yuxarıda',
+	rel: 'Münasibət',
+	selectAnchor: 'Xeşi seçin',
+	styles: 'Ãœslub',
+	tabIndex: 'Tabın nömrəsi',
+	target: 'Hədəf çərçivə',
+	targetFrame: '<freym>',
+	targetFrameName: 'Freymin adı',
+	targetPopup: '<yeni pəncərə>',
+	targetPopupName: 'Pəncərənin adı',
+	title: 'Link',
+	toAnchor: 'XeÅŸ',
+	toEmail: 'E-poçt',
+	toUrl: 'URL',
+	toPhone: 'Phone', // MISSING
+	toolbar: 'Link',
+	type: 'Linkin növü',
+	unlink: 'Linki sil',
+	upload: 'Serverə yüklə'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/bg.js b/libraries/ckeditor/plugins/link/lang/bg.js
new file mode 100644
index 0000000000000000000000000000000000000000..1a331c4fd187d5b318fc7dc7b5242e84fc86827f
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/bg.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'bg', {
+	acccessKey: 'Клавиш за достъп',
+	advanced: 'Разширено',
+	advisoryContentType: 'Тип на съдържанието',
+	advisoryTitle: 'Заглавие',
+	anchor: {
+		toolbar: 'Котва',
+		menu: 'Промяна на котва',
+		title: 'Настройки на котва',
+		name: 'Име на котва',
+		errorName: 'Моля въведете име на котвата',
+		remove: 'Премахване на котва'
+	},
+	anchorId: 'По ID на елемент',
+	anchorName: 'По име на котва',
+	charset: 'Езиков код на свързания ресурс',
+	cssClasses: 'CSS класове',
+	download: 'Укажи изтегляне',
+	displayText: 'Текст за показване',
+	emailAddress: 'Имейл aдрес',
+	emailBody: 'Съдържание',
+	emailSubject: 'Тема',
+	id: 'Id',
+	info: 'Връзка',
+	langCode: 'Езиков код',
+	langDir: 'Посока на езика',
+	langDirLTR: 'От ляво надясно (LTR)',
+	langDirRTL: 'От дясно наляво (RTL)',
+	menu: 'Промяна на връзка',
+	name: 'Име',
+	noAnchors: '(Няма котви в текущия документ)',
+	noEmail: 'Моля въведете имейл адрес',
+	noUrl: 'Моля въведете URL адрес',
+	noTel: 'Please type the phone number', // MISSING
+	other: '<друго>',
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'Зависимост (Netscape)',
+	popupFeatures: 'Функции на изкачащ прозорец',
+	popupFullScreen: 'Цял екран (IE)',
+	popupLeft: 'Лява позиция',
+	popupLocationBar: 'Лента с локацията',
+	popupMenuBar: 'Лента за меню',
+	popupResizable: 'Оразмеряем',
+	popupScrollBars: 'Ленти за прелистване',
+	popupStatusBar: 'Статусна лента',
+	popupToolbar: 'Лента с инструменти',
+	popupTop: 'Горна позиция',
+	rel: 'Свързаност (rel атрибут)',
+	selectAnchor: 'Изберете котва',
+	styles: 'Стил',
+	tabIndex: 'Ред на достъп',
+	target: 'Цел',
+	targetFrame: '<frame>',
+	targetFrameName: 'Име на целевия прозорец',
+	targetPopup: '<изкачащ прозорец>',
+	targetPopupName: 'Име на изкачащ прозорец',
+	title: 'Връзка',
+	toAnchor: 'Връзка към котва в текста',
+	toEmail: 'Имейл',
+	toUrl: 'Уеб адрес',
+	toPhone: 'Phone', // MISSING
+	toolbar: 'Връзка',
+	type: 'Тип на връзката',
+	unlink: 'Премахни връзката',
+	upload: 'Качване'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/bn.js b/libraries/ckeditor/plugins/link/lang/bn.js
new file mode 100644
index 0000000000000000000000000000000000000000..e581c552ed88513d1111d7adc7926ff81fa29ca2
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/bn.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'bn', {
+	acccessKey: 'প্রবেশ কী',
+	advanced: 'এডভান্সড',
+	advisoryContentType: 'পরামর্শ কন্টেন্টের প্রকার',
+	advisoryTitle: 'পরামর্শ শীর্ষক',
+	anchor: {
+		toolbar: 'নোঙ্গর',
+		menu: 'নোঙর প্রোপার্টি',
+		title: 'নোঙর প্রোপার্টি',
+		name: 'নোঙরের নাম',
+		errorName: 'নোঙরের নাম টাইপ করুন',
+		remove: 'Remove Anchor'
+	},
+	anchorId: 'নোঙরের আইডি দিয়ে',
+	anchorName: 'নোঙরের নাম দিয়ে',
+	charset: 'লিংক রিসোর্স ক্যারেক্টর সেট',
+	cssClasses: 'স্টাইল-শীট ক্লাস',
+	download: 'Force Download', // MISSING
+	displayText: 'Display Text', // MISSING
+	emailAddress: 'ইমেইল ঠিকানা',
+	emailBody: 'মেসেজের দেহ',
+	emailSubject: 'মেসেজের বিষয়',
+	id: 'আইডি',
+	info: 'লিংক তথ্য',
+	langCode: 'ভাষা লেখার দিক',
+	langDir: 'ভাষা লেখার দিক',
+	langDirLTR: 'বাম থেকে ডান (LTR)',
+	langDirRTL: 'ডান থেকে বাম (RTL)',
+	menu: 'লিংক সম্পাদন',
+	name: 'নাম',
+	noAnchors: '(No anchors available in the document)', // MISSING
+	noEmail: 'অনুগ্রহ করে ইমেইল এড্রেস টাইপ করুন',
+	noUrl: 'অনুগ্রহ করে URL লিংক টাইপ করুন',
+	noTel: 'Please type the phone number', // MISSING
+	other: '<other>', // MISSING
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'ডিপেন্ডেন্ট (Netscape)',
+	popupFeatures: 'পপআপ উইন্ডো ফীচার সমূহ',
+	popupFullScreen: 'পূর্ণ পর্দা জুড়ে (IE)',
+	popupLeft: 'বামের পজিশন',
+	popupLocationBar: 'লোকেশন বার',
+	popupMenuBar: 'মেন্যু বার',
+	popupResizable: 'Resizable', // MISSING
+	popupScrollBars: 'স্ক্রল বার',
+	popupStatusBar: 'স্ট্যাটাস বার',
+	popupToolbar: 'টুল বার',
+	popupTop: 'ডানের পজিশন',
+	rel: 'Relationship', // MISSING
+	selectAnchor: 'নোঙর বাছাই',
+	styles: 'স্টাইল',
+	tabIndex: 'ট্যাব ইন্ডেক্স',
+	target: 'টার্গেট',
+	targetFrame: '<ফ্রেম>',
+	targetFrameName: 'টার্গেট ফ্রেমের নাম',
+	targetPopup: '<পপআপ উইন্ডো>',
+	targetPopupName: 'পপআপ উইন্ডোর নাম',
+	title: 'লিংক',
+	toAnchor: 'এই পেজে নোঙর কর',
+	toEmail: 'ইমেইল',
+	toUrl: 'URL',
+	toPhone: 'Phone', // MISSING
+	toolbar: 'লিংক যুক্ত কর',
+	type: 'লিংক প্রকার',
+	unlink: 'লিংক সরাও',
+	upload: 'আপলোড'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/bs.js b/libraries/ckeditor/plugins/link/lang/bs.js
new file mode 100644
index 0000000000000000000000000000000000000000..d2889fee7659a74e9fc81347fa4ef6c6cd294d30
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/bs.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'bs', {
+	acccessKey: 'Pristupna tipka',
+	advanced: 'Naprednije',
+	advisoryContentType: 'Advisory vrsta sadržaja',
+	advisoryTitle: 'Advisory title',
+	anchor: {
+		toolbar: 'Anchor',
+		menu: 'Edit Anchor',
+		title: 'Anchor Properties',
+		name: 'Anchor Name',
+		errorName: 'Please type the anchor name',
+		remove: 'Remove Anchor'
+	},
+	anchorId: 'Po Id-u elementa',
+	anchorName: 'Po nazivu sidra',
+	charset: 'Linked Resource Charset',
+	cssClasses: 'Klase CSS stilova',
+	download: 'Force Download', // MISSING
+	displayText: 'Display Text', // MISSING
+	emailAddress: 'E-Mail Adresa',
+	emailBody: 'Poruka',
+	emailSubject: 'Subjekt poruke',
+	id: 'Id',
+	info: 'Link info',
+	langCode: 'Smjer pisanja',
+	langDir: 'Smjer pisanja',
+	langDirLTR: 'S lijeva na desno (LTR)',
+	langDirRTL: 'S desna na lijevo (RTL)',
+	menu: 'Izmjeni link',
+	name: 'Naziv',
+	noAnchors: '(Nema dostupnih sidra na stranici)',
+	noEmail: 'Molimo ukucajte e-mail adresu',
+	noUrl: 'Molimo ukucajte URL link',
+	noTel: 'Please type the phone number', // MISSING
+	other: '<other>', // MISSING
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'Ovisno (Netscape)',
+	popupFeatures: 'Moguænosti popup prozora',
+	popupFullScreen: 'Cijeli ekran (IE)',
+	popupLeft: 'Lijeva pozicija',
+	popupLocationBar: 'Traka za lokaciju',
+	popupMenuBar: 'Izborna traka',
+	popupResizable: 'Resizable', // MISSING
+	popupScrollBars: 'Scroll traka',
+	popupStatusBar: 'Statusna traka',
+	popupToolbar: 'Traka sa alatima',
+	popupTop: 'Gornja pozicija',
+	rel: 'Relationship', // MISSING
+	selectAnchor: 'Izaberi sidro',
+	styles: 'Stil',
+	tabIndex: 'Tab indeks',
+	target: 'Prozor',
+	targetFrame: '<frejm>',
+	targetFrameName: 'Target Frame Name', // MISSING
+	targetPopup: '<popup prozor>',
+	targetPopupName: 'Naziv popup prozora',
+	title: 'Link',
+	toAnchor: 'Sidro na ovoj stranici',
+	toEmail: 'E-Mail',
+	toUrl: 'URL',
+	toPhone: 'Phone', // MISSING
+	toolbar: 'Ubaci/Izmjeni link',
+	type: 'Tip linka',
+	unlink: 'Izbriši link',
+	upload: 'Å alji'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/ca.js b/libraries/ckeditor/plugins/link/lang/ca.js
new file mode 100644
index 0000000000000000000000000000000000000000..e68b79b1fed1cac68a2b6e7122092e9afa573542
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/ca.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'ca', {
+	acccessKey: 'Clau d\'accés',
+	advanced: 'Avançat',
+	advisoryContentType: 'Tipus de contingut consultiu',
+	advisoryTitle: 'Títol consultiu',
+	anchor: {
+		toolbar: 'Insereix/Edita àncora',
+		menu: 'Propietats de l\'àncora',
+		title: 'Propietats de l\'àncora',
+		name: 'Nom de l\'àncora',
+		errorName: 'Si us plau, escriviu el nom de l\'ancora',
+		remove: 'Remove Anchor'
+	},
+	anchorId: 'Per Id d\'element',
+	anchorName: 'Per nom d\'àncora',
+	charset: 'Conjunt de caràcters font enllaçat',
+	cssClasses: 'Classes del full d\'estil',
+	download: 'Force Download', // MISSING
+	displayText: 'Text a mostrar',
+	emailAddress: 'Adreça de correu electrònic',
+	emailBody: 'Cos del missatge',
+	emailSubject: 'Assumpte del missatge',
+	id: 'Id',
+	info: 'Informació de l\'enllaç',
+	langCode: 'Direcció de l\'idioma',
+	langDir: 'Direcció de l\'idioma',
+	langDirLTR: 'D\'esquerra a dreta (LTR)',
+	langDirRTL: 'De dreta a esquerra (RTL)',
+	menu: 'Edita l\'enllaç',
+	name: 'Nom',
+	noAnchors: '(No hi ha àncores disponibles en aquest document)',
+	noEmail: 'Si us plau, escrigui l\'adreça correu electrònic',
+	noUrl: 'Si us plau, escrigui l\'enllaç URL',
+	noTel: 'Please type the phone number', // MISSING
+	other: '<altre>',
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'Depenent (Netscape)',
+	popupFeatures: 'Característiques finestra popup',
+	popupFullScreen: 'Pantalla completa (IE)',
+	popupLeft: 'Posició esquerra',
+	popupLocationBar: 'Barra d\'adreça',
+	popupMenuBar: 'Barra de menú',
+	popupResizable: 'Redimensionable',
+	popupScrollBars: 'Barres d\'scroll',
+	popupStatusBar: 'Barra d\'estat',
+	popupToolbar: 'Barra d\'eines',
+	popupTop: 'Posició dalt',
+	rel: 'Relació',
+	selectAnchor: 'Selecciona una àncora',
+	styles: 'Estil',
+	tabIndex: 'Index de Tab',
+	target: 'Destí',
+	targetFrame: '<marc>',
+	targetFrameName: 'Nom del marc de destí',
+	targetPopup: '<finestra emergent>',
+	targetPopupName: 'Nom finestra popup',
+	title: 'Enllaç',
+	toAnchor: 'Àncora en aquesta pàgina',
+	toEmail: 'Correu electrònic',
+	toUrl: 'URL',
+	toPhone: 'Phone', // MISSING
+	toolbar: 'Insereix/Edita enllaç',
+	type: 'Tipus d\'enllaç',
+	unlink: 'Elimina l\'enllaç',
+	upload: 'Puja'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/cs.js b/libraries/ckeditor/plugins/link/lang/cs.js
new file mode 100644
index 0000000000000000000000000000000000000000..8bf5cb9de4e4a8540ac38b20e7bdac0397021c0b
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/cs.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'cs', {
+	acccessKey: 'Přístupový klíč',
+	advanced: 'Rozšířené',
+	advisoryContentType: 'Pomocný typ obsahu',
+	advisoryTitle: 'Pomocný titulek',
+	anchor: {
+		toolbar: 'Záložka',
+		menu: 'Vlastnosti záložky',
+		title: 'Vlastnosti záložky',
+		name: 'Název záložky',
+		errorName: 'Zadejte prosím název záložky',
+		remove: 'Odstranit záložku'
+	},
+	anchorId: 'Podle Id objektu',
+	anchorName: 'Podle jména kotvy',
+	charset: 'Přiřazená znaková sada',
+	cssClasses: 'Třída stylu',
+	download: 'Vynutit stažení',
+	displayText: 'Zobrazit text',
+	emailAddress: 'E-mailová adresa',
+	emailBody: 'Tělo zprávy',
+	emailSubject: 'Předmět zprávy',
+	id: 'Id',
+	info: 'Informace o odkazu',
+	langCode: 'Kód jazyka',
+	langDir: 'Směr jazyka',
+	langDirLTR: 'Zleva doprava (LTR)',
+	langDirRTL: 'Zprava doleva (RTL)',
+	menu: 'Změnit odkaz',
+	name: 'Jméno',
+	noAnchors: '(Ve stránce není definována žádná kotva!)',
+	noEmail: 'Zadejte prosím e-mailovou adresu',
+	noUrl: 'Zadejte prosím URL odkazu',
+	noTel: 'Vyplňte prosím telefonní číslo',
+	other: '<jiný>',
+	phoneNumber: 'Telefonní číslo',
+	popupDependent: 'Závislost (Netscape)',
+	popupFeatures: 'Vlastnosti vyskakovacího okna',
+	popupFullScreen: 'Celá obrazovka (IE)',
+	popupLeft: 'Levý okraj',
+	popupLocationBar: 'Panel umístění',
+	popupMenuBar: 'Panel nabídky',
+	popupResizable: 'Umožňující měnit velikost',
+	popupScrollBars: 'Posuvníky',
+	popupStatusBar: 'Stavový řádek',
+	popupToolbar: 'Panel nástrojů',
+	popupTop: 'Horní okraj',
+	rel: 'Vztah',
+	selectAnchor: 'Vybrat kotvu',
+	styles: 'Styl',
+	tabIndex: 'Pořadí prvku',
+	target: 'Cíl',
+	targetFrame: '<rámec>',
+	targetFrameName: 'Název cílového rámu',
+	targetPopup: '<vyskakovací okno>',
+	targetPopupName: 'Název vyskakovacího okna',
+	title: 'Odkaz',
+	toAnchor: 'Kotva v této stránce',
+	toEmail: 'E-mail',
+	toUrl: 'URL',
+	toPhone: 'Telefon',
+	toolbar: 'Odkaz',
+	type: 'Typ odkazu',
+	unlink: 'Odstranit odkaz',
+	upload: 'Odeslat'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/cy.js b/libraries/ckeditor/plugins/link/lang/cy.js
new file mode 100644
index 0000000000000000000000000000000000000000..369b75f2814477a2edd41410ca2d9b592304fe9b
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/cy.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'cy', {
+	acccessKey: 'Allwedd Mynediad',
+	advanced: 'Uwch',
+	advisoryContentType: 'Math y Cynnwys Cynghorol',
+	advisoryTitle: 'Teitl Cynghorol',
+	anchor: {
+		toolbar: 'Angor',
+		menu: 'Golygu\'r Angor',
+		title: 'Priodweddau\'r Angor',
+		name: 'Enw\'r Angor',
+		errorName: 'Teipiwch enw\'r angor',
+		remove: 'Tynnwch yr Angor'
+	},
+	anchorId: 'Gan Id yr Elfen',
+	anchorName: 'Gan Enw\'r Angor',
+	charset: 'Set Nodau\'r Adnodd Cysylltiedig',
+	cssClasses: 'Dosbarthiadau Dalen Arddull',
+	download: 'Force Download', // MISSING
+	displayText: 'Display Text', // MISSING
+	emailAddress: 'Cyfeiriad E-Bost',
+	emailBody: 'Corff y Neges',
+	emailSubject: 'Testun y Neges',
+	id: 'Id',
+	info: 'Gwyb y Ddolen',
+	langCode: 'Cod Iaith',
+	langDir: 'Cyfeiriad Iaith',
+	langDirLTR: 'Chwith i\'r Dde (LTR)',
+	langDirRTL: 'Dde i\'r Chwith (RTL)',
+	menu: 'Golygu Dolen',
+	name: 'Enw',
+	noAnchors: '(Dim angorau ar gael yn y ddogfen)',
+	noEmail: 'Teipiwch gyfeiriad yr e-bost',
+	noUrl: 'Teipiwch URL y ddolen',
+	noTel: 'Please type the phone number', // MISSING
+	other: '<eraill>',
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'Dibynnol (Netscape)',
+	popupFeatures: 'Nodweddion Ffenestr Bop',
+	popupFullScreen: 'Sgrin Llawn (IE)',
+	popupLeft: 'Safle Chwith',
+	popupLocationBar: 'Bar Safle',
+	popupMenuBar: 'Dewislen',
+	popupResizable: 'Ailfeintiol',
+	popupScrollBars: 'Barrau Sgrolio',
+	popupStatusBar: 'Bar Statws',
+	popupToolbar: 'Bar Offer',
+	popupTop: 'Safle Top',
+	rel: 'Perthynas',
+	selectAnchor: 'Dewiswch Angor',
+	styles: 'Arddull',
+	tabIndex: 'Indecs Tab',
+	target: 'Targed',
+	targetFrame: '<ffrâm>',
+	targetFrameName: 'Enw Ffrâm y Targed',
+	targetPopup: '<ffenestr bop>',
+	targetPopupName: 'Enw Ffenestr Bop',
+	title: 'Dolen',
+	toAnchor: 'Dolen at angor yn y testun',
+	toEmail: 'E-bost',
+	toUrl: 'URL',
+	toPhone: 'Phone', // MISSING
+	toolbar: 'Dolen',
+	type: 'Math y Ddolen',
+	unlink: 'Datgysylltu',
+	upload: 'Lanlwytho'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/da.js b/libraries/ckeditor/plugins/link/lang/da.js
new file mode 100644
index 0000000000000000000000000000000000000000..7adaedeae5b08f01f915c0ae48b355a5006147ca
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/da.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'da', {
+	acccessKey: 'Genvejstast',
+	advanced: 'Avanceret',
+	advisoryContentType: 'Indholdstype',
+	advisoryTitle: 'Titel',
+	anchor: {
+		toolbar: 'Indsæt/redigér bogmærke',
+		menu: 'Egenskaber for bogmærke',
+		title: 'Egenskaber for bogmærke',
+		name: 'Bogmærkenavn',
+		errorName: 'Indtast bogmærkenavn',
+		remove: 'Fjern bogmærke'
+	},
+	anchorId: 'Efter element-Id',
+	anchorName: 'Efter ankernavn',
+	charset: 'Tegnsæt',
+	cssClasses: 'Typografiark',
+	download: 'Tving Download',
+	displayText: 'Vis tekst',
+	emailAddress: 'E-mailadresse',
+	emailBody: 'Besked',
+	emailSubject: 'Emne',
+	id: 'Id',
+	info: 'Generelt',
+	langCode: 'Tekstretning',
+	langDir: 'Tekstretning',
+	langDirLTR: 'Fra venstre mod højre (LTR)',
+	langDirRTL: 'Fra højre mod venstre (RTL)',
+	menu: 'Redigér hyperlink',
+	name: 'Navn',
+	noAnchors: '(Ingen bogmærker i dokumentet)',
+	noEmail: 'Indtast e-mailadresse!',
+	noUrl: 'Indtast hyperlink-URL!',
+	noTel: 'Indtast venligst et telefonnummer',
+	other: '<anden>',
+	phoneNumber: 'Telefonnummer',
+	popupDependent: 'Koblet/dependent (Netscape)',
+	popupFeatures: 'Egenskaber for popup',
+	popupFullScreen: 'Fuld skærm (IE)',
+	popupLeft: 'Position fra venstre',
+	popupLocationBar: 'Adresselinje',
+	popupMenuBar: 'Menulinje',
+	popupResizable: 'Justérbar',
+	popupScrollBars: 'Scrollbar',
+	popupStatusBar: 'Statuslinje',
+	popupToolbar: 'Værktøjslinje',
+	popupTop: 'Position fra toppen',
+	rel: 'Relation',
+	selectAnchor: 'Vælg et anker',
+	styles: 'Typografi',
+	tabIndex: 'Tabulatorindeks',
+	target: 'MÃ¥l',
+	targetFrame: '<ramme>',
+	targetFrameName: 'Destinationsvinduets navn',
+	targetPopup: '<popup vindue>',
+	targetPopupName: 'Popupvinduets navn',
+	title: 'Egenskaber for hyperlink',
+	toAnchor: 'Bogmærke på denne side',
+	toEmail: 'E-mail',
+	toUrl: 'URL',
+	toPhone: 'Telefon',
+	toolbar: 'Indsæt/redigér hyperlink',
+	type: 'Type',
+	unlink: 'Fjern hyperlink',
+	upload: 'Upload'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/de-ch.js b/libraries/ckeditor/plugins/link/lang/de-ch.js
new file mode 100644
index 0000000000000000000000000000000000000000..2821f6d6d3ce21b356d5e70ebc50766dcac7a9e2
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/de-ch.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'de-ch', {
+	acccessKey: 'Zugriffstaste',
+	advanced: 'Erweitert',
+	advisoryContentType: 'Inhaltstyp',
+	advisoryTitle: 'Titel Beschreibung',
+	anchor: {
+		toolbar: 'Anker',
+		menu: 'Anker bearbeiten',
+		title: 'Ankereigenschaften',
+		name: 'Ankername',
+		errorName: 'Bitte geben Sie den Namen des Ankers ein',
+		remove: 'Anker entfernen'
+	},
+	anchorId: 'Nach Elementkennung',
+	anchorName: 'Nach Ankername',
+	charset: 'Verknüpfter Ressourcenzeichensatz',
+	cssClasses: 'Formatvorlagenklasse',
+	download: 'Herunterladen erzwingen',
+	displayText: 'Anzeigetext',
+	emailAddress: 'E-Mail-Adresse',
+	emailBody: 'Nachrichtentext',
+	emailSubject: 'Betreffzeile',
+	id: 'Kennung',
+	info: 'Linkinfo',
+	langCode: 'Sprachcode',
+	langDir: 'Schreibrichtung',
+	langDirLTR: 'Links nach Rechts (LTR)',
+	langDirRTL: 'Rechts nach Links (RTL)',
+	menu: 'Link bearbeiten',
+	name: 'Name',
+	noAnchors: '(Keine Anker im Dokument vorhanden)',
+	noEmail: 'Bitte geben Sie E-Mail-Adresse an',
+	noUrl: 'Bitte geben Sie die Link-URL an',
+	noTel: 'Bitte geben Sie die Telefonnummer ein',
+	other: '<andere>',
+	phoneNumber: 'Telefonnummer',
+	popupDependent: 'Abhängig (Netscape)',
+	popupFeatures: 'Pop-up Fenstereigenschaften',
+	popupFullScreen: 'Vollbild (IE)',
+	popupLeft: 'Linke Position',
+	popupLocationBar: 'Adressleiste',
+	popupMenuBar: 'Menüleiste',
+	popupResizable: 'Grösse änderbar',
+	popupScrollBars: 'Rollbalken',
+	popupStatusBar: 'Statusleiste',
+	popupToolbar: 'Werkzeugleiste',
+	popupTop: 'Obere Position',
+	rel: 'Beziehung',
+	selectAnchor: 'Anker auswählen',
+	styles: 'Style',
+	tabIndex: 'Tab-Index',
+	target: 'Zielseite',
+	targetFrame: '<Frame>',
+	targetFrameName: 'Ziel-Fenster-Name',
+	targetPopup: '<Pop-up Fenster>',
+	targetPopupName: 'Pop-up Fenster-Name',
+	title: 'Link',
+	toAnchor: 'Anker in dieser Seite',
+	toEmail: 'E-Mail',
+	toUrl: 'URL',
+	toPhone: 'Telefon',
+	toolbar: 'Link einfügen/editieren',
+	type: 'Link-Typ',
+	unlink: 'Link entfernen',
+	upload: 'Hochladen'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/de.js b/libraries/ckeditor/plugins/link/lang/de.js
new file mode 100644
index 0000000000000000000000000000000000000000..f558240b4dd7a8b4b4616af94b88d1fb11805585
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/de.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'de', {
+	acccessKey: 'Zugriffstaste',
+	advanced: 'Erweitert',
+	advisoryContentType: 'Inhaltstyp',
+	advisoryTitle: 'Titel Beschreibung',
+	anchor: {
+		toolbar: 'Anker',
+		menu: 'Anker bearbeiten',
+		title: 'Ankereigenschaften',
+		name: 'Ankername',
+		errorName: 'Bitte geben Sie den Namen des Ankers ein',
+		remove: 'Anker entfernen'
+	},
+	anchorId: 'Nach Elementkennung',
+	anchorName: 'Nach Ankername',
+	charset: 'Verknüpfter Ressourcenzeichensatz',
+	cssClasses: 'Formatvorlagenklasse',
+	download: 'Herunterladen erzwingen',
+	displayText: 'Anzeigetext',
+	emailAddress: 'E-Mail-Adresse',
+	emailBody: 'Nachrichtentext',
+	emailSubject: 'Betreffzeile',
+	id: 'Kennung',
+	info: 'Linkinfo',
+	langCode: 'Sprachcode',
+	langDir: 'Schreibrichtung',
+	langDirLTR: 'Links nach Rechts (LTR)',
+	langDirRTL: 'Rechts nach Links (RTL)',
+	menu: 'Link bearbeiten',
+	name: 'Name',
+	noAnchors: '(Keine Anker im Dokument vorhanden)',
+	noEmail: 'Bitte geben Sie E-Mail-Adresse an',
+	noUrl: 'Bitte geben Sie die Link-URL an',
+	noTel: 'Bitte geben Sie die Telefonnummer ein',
+	other: '<andere>',
+	phoneNumber: 'Telefonnummer',
+	popupDependent: 'Abhängig (Netscape)',
+	popupFeatures: 'Pop-up Fenstereigenschaften',
+	popupFullScreen: 'Vollbild (IE)',
+	popupLeft: 'Linke Position',
+	popupLocationBar: 'Adressleiste',
+	popupMenuBar: 'Menüleiste',
+	popupResizable: 'Größe änderbar',
+	popupScrollBars: 'Rollbalken',
+	popupStatusBar: 'Statusleiste',
+	popupToolbar: 'Werkzeugleiste',
+	popupTop: 'Obere Position',
+	rel: 'Beziehung',
+	selectAnchor: 'Anker auswählen',
+	styles: 'Style',
+	tabIndex: 'Tab-Index',
+	target: 'Zielseite',
+	targetFrame: '<Frame>',
+	targetFrameName: 'Ziel-Fenster-Name',
+	targetPopup: '<Pop-up Fenster>',
+	targetPopupName: 'Pop-up Fenster-Name',
+	title: 'Link',
+	toAnchor: 'Anker in dieser Seite',
+	toEmail: 'E-Mail',
+	toUrl: 'URL',
+	toPhone: 'Telefon',
+	toolbar: 'Link einfügen/editieren',
+	type: 'Link-Typ',
+	unlink: 'Link entfernen',
+	upload: 'Hochladen'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/el.js b/libraries/ckeditor/plugins/link/lang/el.js
new file mode 100644
index 0000000000000000000000000000000000000000..9e90d21b5ee64c3312b3b4ec520b47889bc4ac7d
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/el.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'el', {
+	acccessKey: 'Συντόμευση',
+	advanced: 'Για Προχωρημένους',
+	advisoryContentType: 'Ενδεικτικός Τύπος Περιεχομένου',
+	advisoryTitle: 'Ενδεικτικός Τίτλος',
+	anchor: {
+		toolbar: 'Εισαγωγή/επεξεργασία Άγκυρας',
+		menu: 'Ιδιότητες άγκυρας',
+		title: 'Ιδιότητες άγκυρας',
+		name: 'Όνομα άγκυρας',
+		errorName: 'Παρακαλούμε εισάγετε όνομα άγκυρας',
+		remove: 'Αφαίρεση Άγκυρας'
+	},
+	anchorId: 'Βάσει του Element Id',
+	anchorName: 'Βάσει του Ονόματος Άγκυρας',
+	charset: 'Κωδικοποίηση Χαρακτήρων Προσαρτημένης Πηγής',
+	cssClasses: 'Κλάσεις Φύλλων Στυλ',
+	download: 'Force Download', // MISSING
+	displayText: 'Display Text', // MISSING
+	emailAddress: 'Διεύθυνση E-mail',
+	emailBody: 'Κείμενο Μηνύματος',
+	emailSubject: 'Θέμα Μηνύματος',
+	id: 'Id',
+	info: 'Πληροφορίες Συνδέσμου',
+	langCode: 'Κατεύθυνση Κειμένου',
+	langDir: 'Κατεύθυνση Κειμένου',
+	langDirLTR: 'Αριστερά προς Δεξιά (LTR)',
+	langDirRTL: 'Δεξιά προς Αριστερά (RTL)',
+	menu: 'Επεξεργασία Συνδέσμου',
+	name: 'Όνομα',
+	noAnchors: '(Δεν υπάρχουν άγκυρες στο κείμενο)',
+	noEmail: 'Εισάγετε τη διεύθυνση ηλεκτρονικού ταχυδρομείου',
+	noUrl: 'Εισάγετε την τοποθεσία (URL) του συνδέσμου',
+	noTel: 'Please type the phone number', // MISSING
+	other: '<άλλο>',
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'Εξαρτημένο (Netscape)',
+	popupFeatures: 'Επιλογές Αναδυόμενου Παραθύρου',
+	popupFullScreen: 'Πλήρης Οθόνη (IE)',
+	popupLeft: 'Θέση Αριστερά',
+	popupLocationBar: 'Γραμμή Τοποθεσίας',
+	popupMenuBar: 'Γραμμή Επιλογών',
+	popupResizable: 'Προσαρμοζόμενο Μέγεθος',
+	popupScrollBars: 'Μπάρες Κύλισης',
+	popupStatusBar: 'Γραμμή Κατάστασης',
+	popupToolbar: 'Εργαλειοθήκη',
+	popupTop: 'Θέση Πάνω',
+	rel: 'Σχέση',
+	selectAnchor: 'Επιλέξτε μια Άγκυρα',
+	styles: 'Μορφή',
+	tabIndex: 'Σειρά Μεταπήδησης',
+	target: 'Παράθυρο Προορισμού',
+	targetFrame: '<πλαίσιο>',
+	targetFrameName: 'Όνομα Πλαισίου Προορισμού',
+	targetPopup: '<αναδυόμενο παράθυρο>',
+	targetPopupName: 'Όνομα Αναδυόμενου Παραθύρου',
+	title: 'Σύνδεσμος',
+	toAnchor: 'Άγκυρα σε αυτήν τη σελίδα',
+	toEmail: 'E-Mail',
+	toUrl: 'URL',
+	toPhone: 'Phone', // MISSING
+	toolbar: 'Σύνδεσμος',
+	type: 'Τύπος Συνδέσμου',
+	unlink: 'Αφαίρεση Συνδέσμου',
+	upload: 'Αποστολή'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/en-au.js b/libraries/ckeditor/plugins/link/lang/en-au.js
new file mode 100644
index 0000000000000000000000000000000000000000..3c0e21f62d7d030b46733aa16e2f81991d5bdff5
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/en-au.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'en-au', {
+	acccessKey: 'Access Key',
+	advanced: 'Advanced',
+	advisoryContentType: 'Advisory Content Type',
+	advisoryTitle: 'Advisory Title',
+	anchor: {
+		toolbar: 'Anchor',
+		menu: 'Edit Anchor',
+		title: 'Anchor Properties',
+		name: 'Anchor Name',
+		errorName: 'Please type the anchor name',
+		remove: 'Remove Anchor'
+	},
+	anchorId: 'By Element Id',
+	anchorName: 'By Anchor Name',
+	charset: 'Linked Resource Charset',
+	cssClasses: 'Stylesheet Classes',
+	download: 'Force Download',
+	displayText: 'Display Text',
+	emailAddress: 'E-Mail Address',
+	emailBody: 'Message Body',
+	emailSubject: 'Message Subject',
+	id: 'Id',
+	info: 'Link Info',
+	langCode: 'Language Code',
+	langDir: 'Language Direction',
+	langDirLTR: 'Left to Right (LTR)',
+	langDirRTL: 'Right to Left (RTL)',
+	menu: 'Edit Link',
+	name: 'Name',
+	noAnchors: '(No anchors available in the document)',
+	noEmail: 'Please type the e-mail address',
+	noUrl: 'Please type the link URL',
+	noTel: 'Please type the phone number', // MISSING
+	other: '<other>',
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'Dependent (Netscape)',
+	popupFeatures: 'Popup Window Features',
+	popupFullScreen: 'Full Screen (IE)',
+	popupLeft: 'Left Position',
+	popupLocationBar: 'Location Bar',
+	popupMenuBar: 'Menu Bar',
+	popupResizable: 'Resizable',
+	popupScrollBars: 'Scroll Bars',
+	popupStatusBar: 'Status Bar',
+	popupToolbar: 'Toolbar',
+	popupTop: 'Top Position',
+	rel: 'Relationship',
+	selectAnchor: 'Select an Anchor',
+	styles: 'Style',
+	tabIndex: 'Tab Index',
+	target: 'Target',
+	targetFrame: '<frame>',
+	targetFrameName: 'Target Frame Name',
+	targetPopup: '<popup window>',
+	targetPopupName: 'Popup Window Name',
+	title: 'Link',
+	toAnchor: 'Link to anchor in the text',
+	toEmail: 'E-mail',
+	toUrl: 'URL',
+	toPhone: 'Phone', // MISSING
+	toolbar: 'Link',
+	type: 'Link Type',
+	unlink: 'Unlink',
+	upload: 'Upload'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/en-ca.js b/libraries/ckeditor/plugins/link/lang/en-ca.js
new file mode 100644
index 0000000000000000000000000000000000000000..f47b17ef2de2bb6238c56a360bef063f75c9663a
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/en-ca.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'en-ca', {
+	acccessKey: 'Access Key',
+	advanced: 'Advanced',
+	advisoryContentType: 'Advisory Content Type',
+	advisoryTitle: 'Advisory Title',
+	anchor: {
+		toolbar: 'Anchor',
+		menu: 'Edit Anchor',
+		title: 'Anchor Properties',
+		name: 'Anchor Name',
+		errorName: 'Please type the anchor name',
+		remove: 'Remove Anchor'
+	},
+	anchorId: 'By Element Id',
+	anchorName: 'By Anchor Name',
+	charset: 'Linked Resource Charset',
+	cssClasses: 'Stylesheet Classes',
+	download: 'Force Download', // MISSING
+	displayText: 'Display Text', // MISSING
+	emailAddress: 'E-Mail Address',
+	emailBody: 'Message Body',
+	emailSubject: 'Message Subject',
+	id: 'Id',
+	info: 'Link Info',
+	langCode: 'Language Code',
+	langDir: 'Language Direction',
+	langDirLTR: 'Left to Right (LTR)',
+	langDirRTL: 'Right to Left (RTL)',
+	menu: 'Edit Link',
+	name: 'Name',
+	noAnchors: '(No anchors available in the document)',
+	noEmail: 'Please type the e-mail address',
+	noUrl: 'Please type the link URL',
+	noTel: 'Please type the phone number', // MISSING
+	other: '<other>',
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'Dependent (Netscape)',
+	popupFeatures: 'Popup Window Features',
+	popupFullScreen: 'Full Screen (IE)',
+	popupLeft: 'Left Position',
+	popupLocationBar: 'Location Bar',
+	popupMenuBar: 'Menu Bar',
+	popupResizable: 'Resizable',
+	popupScrollBars: 'Scroll Bars',
+	popupStatusBar: 'Status Bar',
+	popupToolbar: 'Toolbar',
+	popupTop: 'Top Position',
+	rel: 'Relationship', // MISSING
+	selectAnchor: 'Select an Anchor',
+	styles: 'Style',
+	tabIndex: 'Tab Index',
+	target: 'Target',
+	targetFrame: '<frame>',
+	targetFrameName: 'Target Frame Name',
+	targetPopup: '<popup window>',
+	targetPopupName: 'Popup Window Name',
+	title: 'Link',
+	toAnchor: 'Link to anchor in the text',
+	toEmail: 'E-mail',
+	toUrl: 'URL',
+	toPhone: 'Phone', // MISSING
+	toolbar: 'Link',
+	type: 'Link Type',
+	unlink: 'Unlink',
+	upload: 'Upload'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/en-gb.js b/libraries/ckeditor/plugins/link/lang/en-gb.js
new file mode 100644
index 0000000000000000000000000000000000000000..e7595d4969692997b083fb74b829234d92927457
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/en-gb.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'en-gb', {
+	acccessKey: 'Access Key',
+	advanced: 'Advanced',
+	advisoryContentType: 'Advisory Content Type',
+	advisoryTitle: 'Advisory Title',
+	anchor: {
+		toolbar: 'Anchor',
+		menu: 'Edit Anchor',
+		title: 'Anchor Properties',
+		name: 'Anchor Name',
+		errorName: 'Please type the anchor name',
+		remove: 'Remove Anchor'
+	},
+	anchorId: 'By Element Id',
+	anchorName: 'By Anchor Name',
+	charset: 'Linked Resource Charset',
+	cssClasses: 'Stylesheet Classes',
+	download: 'Force Download', // MISSING
+	displayText: 'Display Text', // MISSING
+	emailAddress: 'E-Mail Address',
+	emailBody: 'Message Body',
+	emailSubject: 'Message Subject',
+	id: 'Id',
+	info: 'Link Info',
+	langCode: 'Language Code',
+	langDir: 'Language Direction',
+	langDirLTR: 'Left to Right (LTR)',
+	langDirRTL: 'Right to Left (RTL)',
+	menu: 'Edit Link',
+	name: 'Name',
+	noAnchors: '(No anchors available in the document)',
+	noEmail: 'Please type the e-mail address',
+	noUrl: 'Please type the link URL',
+	noTel: 'Please type the phone number', // MISSING
+	other: '<other>',
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'Dependent (Netscape)',
+	popupFeatures: 'Popup Window Features',
+	popupFullScreen: 'Full Screen (IE)',
+	popupLeft: 'Left Position',
+	popupLocationBar: 'Location Bar',
+	popupMenuBar: 'Menu Bar',
+	popupResizable: 'Resizable',
+	popupScrollBars: 'Scroll Bars',
+	popupStatusBar: 'Status Bar',
+	popupToolbar: 'Toolbar',
+	popupTop: 'Top Position',
+	rel: 'Relationship',
+	selectAnchor: 'Select an Anchor',
+	styles: 'Style',
+	tabIndex: 'Tab Index',
+	target: 'Target',
+	targetFrame: '<frame>',
+	targetFrameName: 'Target Frame Name',
+	targetPopup: '<popup window>',
+	targetPopupName: 'Popup Window Name',
+	title: 'Link',
+	toAnchor: 'Link to anchor in the text',
+	toEmail: 'E-mail',
+	toUrl: 'URL',
+	toPhone: 'Phone', // MISSING
+	toolbar: 'Link',
+	type: 'Link Type',
+	unlink: 'Unlink',
+	upload: 'Upload'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/en.js b/libraries/ckeditor/plugins/link/lang/en.js
new file mode 100644
index 0000000000000000000000000000000000000000..191851e7b438f5f0c6b6b6649da7beaa3a8590f6
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/en.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'en', {
+	acccessKey: 'Access Key',
+	advanced: 'Advanced',
+	advisoryContentType: 'Advisory Content Type',
+	advisoryTitle: 'Advisory Title',
+	anchor: {
+		toolbar: 'Anchor',
+		menu: 'Edit Anchor',
+		title: 'Anchor Properties',
+		name: 'Anchor Name',
+		errorName: 'Please type the anchor name',
+		remove: 'Remove Anchor'
+	},
+	anchorId: 'By Element Id',
+	anchorName: 'By Anchor Name',
+	charset: 'Linked Resource Charset',
+	cssClasses: 'Stylesheet Classes',
+	download: 'Force Download',
+	displayText: 'Display Text',
+	emailAddress: 'E-Mail Address',
+	emailBody: 'Message Body',
+	emailSubject: 'Message Subject',
+	id: 'Id',
+	info: 'Link Info',
+	langCode: 'Language Code',
+	langDir: 'Language Direction',
+	langDirLTR: 'Left to Right (LTR)',
+	langDirRTL: 'Right to Left (RTL)',
+	menu: 'Edit Link',
+	name: 'Name',
+	noAnchors: '(No anchors available in the document)',
+	noEmail: 'Please type the e-mail address',
+	noUrl: 'Please type the link URL',
+	noTel: 'Please type the phone number',
+	other: '<other>',
+	phoneNumber: 'Phone number',
+	popupDependent: 'Dependent (Netscape)',
+	popupFeatures: 'Popup Window Features',
+	popupFullScreen: 'Full Screen (IE)',
+	popupLeft: 'Left Position',
+	popupLocationBar: 'Location Bar',
+	popupMenuBar: 'Menu Bar',
+	popupResizable: 'Resizable',
+	popupScrollBars: 'Scroll Bars',
+	popupStatusBar: 'Status Bar',
+	popupToolbar: 'Toolbar',
+	popupTop: 'Top Position',
+	rel: 'Relationship',
+	selectAnchor: 'Select an Anchor',
+	styles: 'Style',
+	tabIndex: 'Tab Index',
+	target: 'Target',
+	targetFrame: '<frame>',
+	targetFrameName: 'Target Frame Name',
+	targetPopup: '<popup window>',
+	targetPopupName: 'Popup Window Name',
+	title: 'Link',
+	toAnchor: 'Link to anchor in the text',
+	toEmail: 'E-mail',
+	toUrl: 'URL',
+	toPhone: 'Phone',
+	toolbar: 'Link',
+	type: 'Link Type',
+	unlink: 'Unlink',
+	upload: 'Upload'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/eo.js b/libraries/ckeditor/plugins/link/lang/eo.js
new file mode 100644
index 0000000000000000000000000000000000000000..cc5bd27f54020c13d4f23abb3d43404180029d99
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/eo.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'eo', {
+	acccessKey: 'Fulmoklavo',
+	advanced: 'Speciala',
+	advisoryContentType: 'Enhavotipo',
+	advisoryTitle: 'Priskriba Titolo',
+	anchor: {
+		toolbar: 'Ankro',
+		menu: 'Enmeti/Ŝanĝi Ankron',
+		title: 'Ankraj Atributoj',
+		name: 'Ankra Nomo',
+		errorName: 'Bv entajpi la ankran nomon',
+		remove: 'Forigi Ankron'
+	},
+	anchorId: 'Per Elementidentigilo',
+	anchorName: 'Per Ankronomo',
+	charset: 'Signaro de la Ligita Rimedo',
+	cssClasses: 'Klasoj de Stilfolioj',
+	download: 'Altrudi Elŝuton',
+	displayText: 'Vidigi Tekston',
+	emailAddress: 'Retpoŝto',
+	emailBody: 'Mesaĝa korpo',
+	emailSubject: 'Mesaĝa Temo',
+	id: 'Id',
+	info: 'Informoj pri la Ligilo',
+	langCode: 'Lingva Kodo',
+	langDir: 'Skribdirekto',
+	langDirLTR: 'De maldekstro dekstren (LTR)',
+	langDirRTL: 'De dekstro maldekstren (RTL)',
+	menu: 'Ŝanĝi Ligilon',
+	name: 'Nomo',
+	noAnchors: '<Ne disponeblas ankroj en la dokumento>',
+	noEmail: 'Bonvolu entajpi la retpoŝtadreson',
+	noUrl: 'Bonvolu entajpi la URL-on',
+	noTel: 'Please type the phone number', // MISSING
+	other: '<alia>',
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'Dependa (Netscape)',
+	popupFeatures: 'Atributoj de la Åœprucfenestro',
+	popupFullScreen: 'Tutekrane (IE)',
+	popupLeft: 'Maldekstra Pozicio',
+	popupLocationBar: 'Adresobreto',
+	popupMenuBar: 'Menubreto',
+	popupResizable: 'Dimensiŝanĝebla',
+	popupScrollBars: 'Rulumskaloj',
+	popupStatusBar: 'Statobreto',
+	popupToolbar: 'Ilobreto',
+	popupTop: 'Supra Pozicio',
+	rel: 'Rilato',
+	selectAnchor: 'Elekti Ankron',
+	styles: 'Stilo',
+	tabIndex: 'Taba Indekso',
+	target: 'Celo',
+	targetFrame: '<kadro>',
+	targetFrameName: 'Nomo de CelKadro',
+	targetPopup: '<ŝprucfenestro>',
+	targetPopupName: 'Nomo de Åœprucfenestro',
+	title: 'Ligilo',
+	toAnchor: 'Ankri en tiu ĉi paĝo',
+	toEmail: 'Retpoŝto',
+	toUrl: 'URL',
+	toPhone: 'Phone', // MISSING
+	toolbar: 'Enmeti/Ŝanĝi Ligilon',
+	type: 'Tipo de Ligilo',
+	unlink: 'Forigi Ligilon',
+	upload: 'Alŝuti'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/es-mx.js b/libraries/ckeditor/plugins/link/lang/es-mx.js
new file mode 100644
index 0000000000000000000000000000000000000000..bbd9488135594886b51644b6d2d6485a27d8ebc8
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/es-mx.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'es-mx', {
+	acccessKey: 'Llave de acceso',
+	advanced: 'Avanzada',
+	advisoryContentType: 'Tipo de contenido consultivo',
+	advisoryTitle: 'Título asesor',
+	anchor: {
+		toolbar: 'Ancla',
+		menu: 'Editar ancla',
+		title: 'Propiedades del ancla',
+		name: 'Nombre del ancla',
+		errorName: 'Escriba el nombre del ancla',
+		remove: 'Remover ancla'
+	},
+	anchorId: 'Por Id del elemento',
+	anchorName: 'Por nombre del ancla',
+	charset: 'Recurso relacionado Charset',
+	cssClasses: 'Clases de estilo de hoja',
+	download: 'Forzar la descarga',
+	displayText: 'Mostrar texto',
+	emailAddress: 'Dirección de correo electrónico',
+	emailBody: 'Cuerpo del mensaje',
+	emailSubject: 'Asunto del mensaje',
+	id: 'Id',
+	info: 'Información del enlace',
+	langCode: 'Código del idioma',
+	langDir: 'Dirección del idioma',
+	langDirLTR: 'Izquierda a Derecha (LTR)',
+	langDirRTL: 'Derecha a Izquierda (RTL)',
+	menu: 'Editar enlace',
+	name: 'Nombre',
+	noAnchors: '(No hay anclas disponibles en el documento)',
+	noEmail: 'Escriba la dirección de correo electrónico',
+	noUrl: 'Escriba la URL del enlace',
+	noTel: 'Please type the phone number', // MISSING
+	other: '<other>',
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'Dependiente (Netscape)',
+	popupFeatures: 'Ventana emergente',
+	popupFullScreen: 'Pantalla completa (IE)',
+	popupLeft: 'Posición Izquierda',
+	popupLocationBar: 'Ubicación de la barra',
+	popupMenuBar: 'Barra de menú',
+	popupResizable: 'Redimensionable',
+	popupScrollBars: 'Barras de desplazamiento',
+	popupStatusBar: 'Barra de estado',
+	popupToolbar: 'Barra de herramienta',
+	popupTop: 'Posición superior',
+	rel: 'Relación',
+	selectAnchor: 'Selecciona un ancla',
+	styles: 'Estilo',
+	tabIndex: 'Indice de tabulación',
+	target: 'Objetivo',
+	targetFrame: '<frame>',
+	targetFrameName: 'Nombre del marco de destino',
+	targetPopup: '<popup window>',
+	targetPopupName: 'Nombre de ventana emergente',
+	title: 'Enlace',
+	toAnchor: 'Enlace al ancla en el texto',
+	toEmail: 'Correo electrónico',
+	toUrl: 'URL',
+	toPhone: 'Phone', // MISSING
+	toolbar: 'Enlace',
+	type: 'Tipo de enlace',
+	unlink: 'Desconectar',
+	upload: 'Subir'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/es.js b/libraries/ckeditor/plugins/link/lang/es.js
new file mode 100644
index 0000000000000000000000000000000000000000..c442ea81b05ae45910e8a1a0a578d2e1414c4b57
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/es.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'es', {
+	acccessKey: 'Tecla de Acceso',
+	advanced: 'Avanzado',
+	advisoryContentType: 'Tipo de Contenido',
+	advisoryTitle: 'Título',
+	anchor: {
+		toolbar: 'Referencia',
+		menu: 'Propiedades de Referencia',
+		title: 'Propiedades de Referencia',
+		name: 'Nombre de la Referencia',
+		errorName: 'Por favor, complete el nombre de la Referencia',
+		remove: 'Quitar Referencia'
+	},
+	anchorId: 'Por ID de elemento',
+	anchorName: 'Por Nombre de Referencia',
+	charset: 'Fuente de caracteres vinculado',
+	cssClasses: 'Clases de hojas de estilo',
+	download: 'Forzar la descarga',
+	displayText: 'Mostrar texto',
+	emailAddress: 'Dirección de E-Mail',
+	emailBody: 'Cuerpo del Mensaje',
+	emailSubject: 'Título del Mensaje',
+	id: 'Id',
+	info: 'Información de Vínculo',
+	langCode: 'Código idioma',
+	langDir: 'Orientación',
+	langDirLTR: 'Izquierda a Derecha (LTR)',
+	langDirRTL: 'Derecha a Izquierda (RTL)',
+	menu: 'Editar Vínculo',
+	name: 'Nombre',
+	noAnchors: '(No hay referencias disponibles en el documento)',
+	noEmail: 'Por favor escriba la dirección de e-mail',
+	noUrl: 'Por favor escriba el vínculo URL',
+	noTel: 'Por favor ingrese el numero de telefono',
+	other: '<otro>',
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'Dependiente (Netscape)',
+	popupFeatures: 'Características de Ventana Emergente',
+	popupFullScreen: 'Pantalla Completa (IE)',
+	popupLeft: 'Posición Izquierda',
+	popupLocationBar: 'Barra de ubicación',
+	popupMenuBar: 'Barra de Menú',
+	popupResizable: 'Redimensionable',
+	popupScrollBars: 'Barras de desplazamiento',
+	popupStatusBar: 'Barra de Estado',
+	popupToolbar: 'Barra de Herramientas',
+	popupTop: 'Posición Derecha',
+	rel: 'Relación',
+	selectAnchor: 'Seleccionar una referencia',
+	styles: 'Estilo',
+	tabIndex: 'Indice de tabulación',
+	target: 'Destino',
+	targetFrame: '<marco>',
+	targetFrameName: 'Nombre del Marco Destino',
+	targetPopup: '<ventana emergente>',
+	targetPopupName: 'Nombre de Ventana Emergente',
+	title: 'Vínculo',
+	toAnchor: 'Referencia en esta página',
+	toEmail: 'E-Mail',
+	toUrl: 'URL',
+	toPhone: 'Teléfono',
+	toolbar: 'Insertar/Editar Vínculo',
+	type: 'Tipo de vínculo',
+	unlink: 'Eliminar Vínculo',
+	upload: 'Cargar'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/et.js b/libraries/ckeditor/plugins/link/lang/et.js
new file mode 100644
index 0000000000000000000000000000000000000000..d888acf44fba5ab53182439d261256c16fcf920d
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/et.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'et', {
+	acccessKey: 'Juurdepääsu võti',
+	advanced: 'Täpsemalt',
+	advisoryContentType: 'Juhendava sisu tüüp',
+	advisoryTitle: 'Juhendav tiitel',
+	anchor: {
+		toolbar: 'Ankru sisestamine/muutmine',
+		menu: 'Ankru omadused',
+		title: 'Ankru omadused',
+		name: 'Ankru nimi',
+		errorName: 'Palun sisesta ankru nimi',
+		remove: 'Eemalda ankur'
+	},
+	anchorId: 'Elemendi id järgi',
+	anchorName: 'Ankru nime järgi',
+	charset: 'Lingitud ressursi märgistik',
+	cssClasses: 'Stiilistiku klassid',
+	download: 'Sunni allalaadimine',
+	displayText: 'Näidatav tekst',
+	emailAddress: 'E-posti aadress',
+	emailBody: 'Sõnumi tekst',
+	emailSubject: 'Sõnumi teema',
+	id: 'ID',
+	info: 'Lingi info',
+	langCode: 'Keele suund',
+	langDir: 'Keele suund',
+	langDirLTR: 'Vasakult paremale (LTR)',
+	langDirRTL: 'Paremalt vasakule (RTL)',
+	menu: 'Muuda linki',
+	name: 'Nimi',
+	noAnchors: '(Selles dokumendis pole ankruid)',
+	noEmail: 'Palun kirjuta e-posti aadress',
+	noUrl: 'Palun kirjuta lingi URL',
+	noTel: 'Palun sisesta telefoninumber',
+	other: '<muu>',
+	phoneNumber: 'Telefoninumber',
+	popupDependent: 'Sõltuv (Netscape)',
+	popupFeatures: 'Hüpikakna omadused',
+	popupFullScreen: 'Täisekraan (IE)',
+	popupLeft: 'Vasak asukoht',
+	popupLocationBar: 'Aadressiriba',
+	popupMenuBar: 'Menüüriba',
+	popupResizable: 'Suurust saab muuta',
+	popupScrollBars: 'Kerimisribad',
+	popupStatusBar: 'Olekuriba',
+	popupToolbar: 'Tööriistariba',
+	popupTop: 'Ãœlemine asukoht',
+	rel: 'Suhe',
+	selectAnchor: 'Vali ankur',
+	styles: 'Laad',
+	tabIndex: 'Tab indeks',
+	target: 'Sihtkoht',
+	targetFrame: '<raam>',
+	targetFrameName: 'Sihtmärk raami nimi',
+	targetPopup: '<hüpikaken>',
+	targetPopupName: 'Hüpikakna nimi',
+	title: 'Link',
+	toAnchor: 'Ankur sellel lehel',
+	toEmail: 'E-post',
+	toUrl: 'URL',
+	toPhone: 'Telefon',
+	toolbar: 'Lingi lisamine/muutmine',
+	type: 'Lingi liik',
+	unlink: 'Lingi eemaldamine',
+	upload: 'Lae üles'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/eu.js b/libraries/ckeditor/plugins/link/lang/eu.js
new file mode 100644
index 0000000000000000000000000000000000000000..5a1300d3e4e70ad2e8c3fb473847d3e2ea388194
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/eu.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'eu', {
+	acccessKey: 'Sarbide-tekla',
+	advanced: 'Aurreratua',
+	advisoryContentType: 'Aholkatutako eduki-mota',
+	advisoryTitle: 'Aholkatutako izenburua',
+	anchor: {
+		toolbar: 'Aingura',
+		menu: 'Editatu aingura',
+		title: 'Ainguraren propietateak',
+		name: 'Ainguraren izena',
+		errorName: 'Idatzi ainguraren izena',
+		remove: 'Kendu aingura'
+	},
+	anchorId: 'Elementuaren Id-aren arabera',
+	anchorName: 'Aingura-izenaren arabera',
+	charset: 'Estekatutako baliabide karaktere-jokoa',
+	cssClasses: 'Estilo-orriko klaseak',
+	download: 'Behartu deskarga',
+	displayText: 'Bistaratu testua',
+	emailAddress: 'E-posta helbidea',
+	emailBody: 'Mezuaren gorputza',
+	emailSubject: 'Mezuaren gaia',
+	id: 'Id',
+	info: 'Estekaren informazioa',
+	langCode: 'Hizkuntzaren kodea',
+	langDir: 'Hizkuntzaren norabidea',
+	langDirLTR: 'Ezkerretik eskuinera (LTR)',
+	langDirRTL: 'Eskuinetik ezkerrera (RTL)',
+	menu: 'Editatu esteka',
+	name: 'Izena',
+	noAnchors: '(Ez dago aingurarik erabilgarri dokumentuan)',
+	noEmail: 'Mesedez idatzi e-posta helbidea',
+	noUrl: 'Mesedez idatzi estekaren URLa',
+	noTel: 'Please type the phone number', // MISSING
+	other: '<bestelakoa>',
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'Menpekoa (Netscape)',
+	popupFeatures: 'Laster-leihoaren ezaugarriak',
+	popupFullScreen: 'Pantaila osoa (IE)',
+	popupLeft: 'Ezkerreko posizioa',
+	popupLocationBar: 'Kokaleku-barra',
+	popupMenuBar: 'Menu-barra',
+	popupResizable: 'Tamaina aldakorra',
+	popupScrollBars: 'Korritze-barrak',
+	popupStatusBar: 'Egoera-barra',
+	popupToolbar: 'Tresna-barra',
+	popupTop: 'Goiko posizioa',
+	rel: 'Erlazioa',
+	selectAnchor: 'Hautatu aingura',
+	styles: 'Estiloa',
+	tabIndex: 'Tabulazio indizea',
+	target: 'Helburua',
+	targetFrame: '<frame>',
+	targetFrameName: 'Helburuko markoaren izena',
+	targetPopup: '<laster-leihoa>',
+	targetPopupName: 'Laster-leihoaren izena',
+	title: 'Esteka',
+	toAnchor: 'Estekatu testuko aingurara',
+	toEmail: 'E-posta',
+	toUrl: 'URLa',
+	toPhone: 'Phone', // MISSING
+	toolbar: 'Esteka',
+	type: 'Esteka-mota',
+	unlink: 'Kendu esteka',
+	upload: 'Kargatu'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/fa.js b/libraries/ckeditor/plugins/link/lang/fa.js
new file mode 100644
index 0000000000000000000000000000000000000000..fa4e4936d937dfdb64d6a2640263c137c8ecc108
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/fa.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'fa', {
+	acccessKey: 'کلید دستیابی',
+	advanced: 'پیشرفته',
+	advisoryContentType: 'نوع محتوای کمکی',
+	advisoryTitle: 'عنوان کمکی',
+	anchor: {
+		toolbar: 'گنجاندن/ویرایش لینک',
+		menu: 'ویرایش لینک',
+		title: 'ویژگی​های لینک',
+		name: 'نام لینک',
+		errorName: 'لطفا نام لنگر را بنویسید',
+		remove: 'حذف لینک'
+	},
+	anchorId: 'با شناسهٴ المان',
+	anchorName: 'با نام لینک ',
+	charset: 'نویسه​گان منبع پیوند شده',
+	cssClasses: 'کلاس​های شیوه​نامه (Style sheet)',
+	download: 'بارگیری اجباری',
+	displayText: 'نمایش متن',
+	emailAddress: 'نشانی پست الکترونیکی',
+	emailBody: 'متن پیام',
+	emailSubject: 'موضوع پیام',
+	id: 'شناسه',
+	info: 'اطلاعات پیوند',
+	langCode: 'کد زبان',
+	langDir: 'جهت​نمای زبان',
+	langDirLTR: 'چپ به راست (LTR)',
+	langDirRTL: 'راست به چپ (RTL)',
+	menu: 'ویرایش پیوند',
+	name: 'نام',
+	noAnchors: '(در این سند لینکی دردسترس نیست)',
+	noEmail: 'لطفا نشانی پست الکترونیکی را بنویسید',
+	noUrl: 'لطفا آدرس پیوند را بنویسید',
+	noTel: 'لطفا شماره تلفن را وارد کنید',
+	other: '<سایر>',
+	phoneNumber: 'شماره تلفن',
+	popupDependent: 'وابسته (Netscape)',
+	popupFeatures: 'ویژگی​های پنجره ی پاپاپ',
+	popupFullScreen: 'تمام صفحه (IE)',
+	popupLeft: 'موقعیت چپ',
+	popupLocationBar: 'نوار موقعیت',
+	popupMenuBar: 'نوار منو',
+	popupResizable: 'قابل تغییر اندازه',
+	popupScrollBars: 'میله​های پیمایش',
+	popupStatusBar: 'نوار وضعیت',
+	popupToolbar: 'نوار ابزار',
+	popupTop: 'موقعیت بالا',
+	rel: 'وابستگی',
+	selectAnchor: 'یک لینک برگزینید',
+	styles: 'شیوه (style)',
+	tabIndex: 'نمایهٴ دسترسی با برگه',
+	target: 'مقصد',
+	targetFrame: '<قاب>',
+	targetFrameName: 'نام قاب مقصد',
+	targetPopup: '<پنجرهٴ پاپاپ>',
+	targetPopupName: 'نام پنجره ی پاپاپ',
+	title: 'پیوند',
+	toAnchor: 'لنگر در همین صفحه',
+	toEmail: 'پست الکترونیکی',
+	toUrl: 'آدرس',
+	toPhone: 'تلفن',
+	toolbar: 'گنجاندن/ویرایش پیوند',
+	type: 'نوع پیوند',
+	unlink: 'برداشتن پیوند',
+	upload: 'انتقال به سرور'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/fi.js b/libraries/ckeditor/plugins/link/lang/fi.js
new file mode 100644
index 0000000000000000000000000000000000000000..0022e37239370eff891d57dbeef8cac5c2ae218d
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/fi.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'fi', {
+	acccessKey: 'Pikanäppäin',
+	advanced: 'Lisäominaisuudet',
+	advisoryContentType: 'Avustava sisällön tyyppi',
+	advisoryTitle: 'Avustava otsikko',
+	anchor: {
+		toolbar: 'Lisää ankkuri/muokkaa ankkuria',
+		menu: 'Ankkurin ominaisuudet',
+		title: 'Ankkurin ominaisuudet',
+		name: 'Nimi',
+		errorName: 'Ankkurille on kirjoitettava nimi',
+		remove: 'Poista ankkuri'
+	},
+	anchorId: 'Ankkurin ID:n mukaan',
+	anchorName: 'Ankkurin nimen mukaan',
+	charset: 'Linkitetty kirjaimisto',
+	cssClasses: 'Tyyliluokat',
+	download: 'Force Download', // MISSING
+	displayText: 'Display Text', // MISSING
+	emailAddress: 'Sähköpostiosoite',
+	emailBody: 'Viesti',
+	emailSubject: 'Aihe',
+	id: 'Tunniste',
+	info: 'Linkin tiedot',
+	langCode: 'Kielen suunta',
+	langDir: 'Kielen suunta',
+	langDirLTR: 'Vasemmalta oikealle (LTR)',
+	langDirRTL: 'Oikealta vasemmalle (RTL)',
+	menu: 'Muokkaa linkkiä',
+	name: 'Nimi',
+	noAnchors: '(Ei ankkureita tässä dokumentissa)',
+	noEmail: 'Kirjoita sähköpostiosoite',
+	noUrl: 'Linkille on kirjoitettava URL',
+	noTel: 'Please type the phone number', // MISSING
+	other: '<muu>',
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'Riippuva (Netscape)',
+	popupFeatures: 'Popup ikkunan ominaisuudet',
+	popupFullScreen: 'Täysi ikkuna (IE)',
+	popupLeft: 'Vasemmalta (px)',
+	popupLocationBar: 'Osoiterivi',
+	popupMenuBar: 'Valikkorivi',
+	popupResizable: 'Venytettävä',
+	popupScrollBars: 'Vierityspalkit',
+	popupStatusBar: 'Tilarivi',
+	popupToolbar: 'Vakiopainikkeet',
+	popupTop: 'Ylhäältä (px)',
+	rel: 'Suhde',
+	selectAnchor: 'Valitse ankkuri',
+	styles: 'Tyyli',
+	tabIndex: 'Tabulaattori indeksi',
+	target: 'Kohde',
+	targetFrame: '<kehys>',
+	targetFrameName: 'Kohdekehyksen nimi',
+	targetPopup: '<popup ikkuna>',
+	targetPopupName: 'Popup ikkunan nimi',
+	title: 'Linkki',
+	toAnchor: 'Ankkuri tässä sivussa',
+	toEmail: 'Sähköposti',
+	toUrl: 'Osoite',
+	toPhone: 'Phone', // MISSING
+	toolbar: 'Lisää linkki/muokkaa linkkiä',
+	type: 'Linkkityyppi',
+	unlink: 'Poista linkki',
+	upload: 'Lisää tiedosto'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/fo.js b/libraries/ckeditor/plugins/link/lang/fo.js
new file mode 100644
index 0000000000000000000000000000000000000000..998d840a27fbcdded85550ef4b0101e165996d6a
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/fo.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'fo', {
+	acccessKey: 'Snarvegisknöttur',
+	advanced: 'Fjølbroytt',
+	advisoryContentType: 'Vegleiðandi innihaldsslag',
+	advisoryTitle: 'Vegleiðandi heiti',
+	anchor: {
+		toolbar: 'Ger/broyt marknastein',
+		menu: 'Eginleikar fyri marknastein',
+		title: 'Eginleikar fyri marknastein',
+		name: 'Heiti marknasteinsins',
+		errorName: 'Vinarliga rita marknasteinsins heiti',
+		remove: 'Strika marknastein'
+	},
+	anchorId: 'Eftir element Id',
+	anchorName: 'Eftir navni á marknasteini',
+	charset: 'Atknýtt teknsett',
+	cssClasses: 'Typografi klassar',
+	download: 'Force Download', // MISSING
+	displayText: 'Display Text', // MISSING
+	emailAddress: 'Teldupost-adressa',
+	emailBody: 'Breyðtekstur',
+	emailSubject: 'Evni',
+	id: 'Id',
+	info: 'Tilknýtis upplýsingar',
+	langCode: 'Tekstkós',
+	langDir: 'Tekstkós',
+	langDirLTR: 'Frá vinstru til høgru (LTR)',
+	langDirRTL: 'Frá høgru til vinstru (RTL)',
+	menu: 'Broyt tilknýti',
+	name: 'Navn',
+	noAnchors: '(Eingir marknasteinar eru í hesum dokumentið)',
+	noEmail: 'Vinarliga skriva teldupost-adressu',
+	noUrl: 'Vinarliga skriva tilknýti (URL)',
+	noTel: 'Please type the phone number', // MISSING
+	other: '<annað>',
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'Bundið (Netscape)',
+	popupFeatures: 'Popup vindeygans víðkaðu eginleikar',
+	popupFullScreen: 'Fullur skermur (IE)',
+	popupLeft: 'Frástøða frá vinstru',
+	popupLocationBar: 'Adressulinja',
+	popupMenuBar: 'Skrábjálki',
+	popupResizable: 'Stødd kann broytast',
+	popupScrollBars: 'Rullibjálki',
+	popupStatusBar: 'Støðufrágreiðingarbjálki',
+	popupToolbar: 'Amboðsbjálki',
+	popupTop: 'Frástøða frá íerva',
+	rel: 'Relatión',
+	selectAnchor: 'Vel ein marknastein',
+	styles: 'Typografi',
+	tabIndex: 'Tabulator indeks',
+	target: 'Target',
+	targetFrame: '<ramma>',
+	targetFrameName: 'Vís navn vindeygans',
+	targetPopup: '<popup vindeyga>',
+	targetPopupName: 'Popup vindeygans navn',
+	title: 'Tilknýti',
+	toAnchor: 'Tilknýti til marknastein í tekstinum',
+	toEmail: 'Teldupostur',
+	toUrl: 'URL',
+	toPhone: 'Phone', // MISSING
+	toolbar: 'Ger/broyt tilknýti',
+	type: 'Tilknýtisslag',
+	unlink: 'Strika tilknýti',
+	upload: 'Send til ambætaran'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/fr-ca.js b/libraries/ckeditor/plugins/link/lang/fr-ca.js
new file mode 100644
index 0000000000000000000000000000000000000000..90bbae9f0f55c86c2fb04c4ecfc7d5c6937d0264
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/fr-ca.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'fr-ca', {
+	acccessKey: 'Touche d\'accessibilité',
+	advanced: 'Avancé',
+	advisoryContentType: 'Type de contenu',
+	advisoryTitle: 'Description',
+	anchor: {
+		toolbar: 'Ancre',
+		menu: 'Modifier l\'ancre',
+		title: 'Propriétés de l\'ancre',
+		name: 'Nom de l\'ancre',
+		errorName: 'Veuillez saisir le nom de l\'ancre',
+		remove: 'Supprimer l\'ancre'
+	},
+	anchorId: 'Par ID',
+	anchorName: 'Par nom',
+	charset: 'Encodage de la cible',
+	cssClasses: 'Classes CSS',
+	download: 'Force Download', // MISSING
+	displayText: 'Afficher le texte',
+	emailAddress: 'Courriel',
+	emailBody: 'Corps du message',
+	emailSubject: 'Objet du message',
+	id: 'ID',
+	info: 'Informations sur le lien',
+	langCode: 'Code de langue',
+	langDir: 'Sens d\'écriture',
+	langDirLTR: 'De gauche à droite (LTR)',
+	langDirRTL: 'De droite à gauche (RTL)',
+	menu: 'Modifier le lien',
+	name: 'Nom',
+	noAnchors: '(Pas d\'ancre disponible dans le document)',
+	noEmail: 'Veuillez saisir le courriel',
+	noUrl: 'Veuillez saisir l\'URL',
+	noTel: 'Please type the phone number', // MISSING
+	other: '<autre>',
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'Dépendante (Netscape)',
+	popupFeatures: 'Caractéristiques de la fenêtre popup',
+	popupFullScreen: 'Plein écran (IE)',
+	popupLeft: 'Position de la gauche',
+	popupLocationBar: 'Barre d\'adresse',
+	popupMenuBar: 'Barre de menu',
+	popupResizable: 'Redimensionnable',
+	popupScrollBars: 'Barres de défilement',
+	popupStatusBar: 'Barre d\'état',
+	popupToolbar: 'Barre d\'outils',
+	popupTop: 'Position à partir du haut',
+	rel: 'Relation',
+	selectAnchor: 'Sélectionner une ancre',
+	styles: 'Style',
+	tabIndex: 'Ordre de tabulation',
+	target: 'Destination',
+	targetFrame: '<Cadre>',
+	targetFrameName: 'Nom du cadre de destination',
+	targetPopup: '<fenêtre popup>',
+	targetPopupName: 'Nom de la fenêtre popup',
+	title: 'Lien',
+	toAnchor: 'Ancre dans cette page',
+	toEmail: 'Courriel',
+	toUrl: 'URL',
+	toPhone: 'Phone', // MISSING
+	toolbar: 'Lien',
+	type: 'Type de lien',
+	unlink: 'Supprimer le lien',
+	upload: 'Téléverser'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/fr.js b/libraries/ckeditor/plugins/link/lang/fr.js
new file mode 100644
index 0000000000000000000000000000000000000000..9f9556933a590f100f94df93054464cd9a13a03d
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/fr.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'fr', {
+	acccessKey: 'Touche d\'accessibilité',
+	advanced: 'Avancé',
+	advisoryContentType: 'Type de contenu (indicatif)',
+	advisoryTitle: 'Infobulle',
+	anchor: {
+		toolbar: 'Ancre',
+		menu: 'Modifier l\'ancre',
+		title: 'Propriétés de l\'ancre',
+		name: 'Nom de l\'ancre',
+		errorName: 'Veuillez entrer le nom de l\'ancre.',
+		remove: 'Supprimer l\'ancre'
+	},
+	anchorId: 'Par ID d\'élément',
+	anchorName: 'Par nom d\'ancre',
+	charset: 'Encodage de la ressource liée',
+	cssClasses: 'Classes de style',
+	download: 'Forcer le téléchargement',
+	displayText: 'Afficher le texte',
+	emailAddress: 'Adresse électronique',
+	emailBody: 'Corps du message',
+	emailSubject: 'Sujet du message',
+	id: 'ID',
+	info: 'Informations sur le lien',
+	langCode: 'Code de langue',
+	langDir: 'Sens d\'écriture',
+	langDirLTR: 'Gauche à droite',
+	langDirRTL: 'Droite à gauche (RTL)',
+	menu: 'Modifier le lien',
+	name: 'Nom',
+	noAnchors: '(Aucune ancre disponible dans ce document)',
+	noEmail: 'Veuillez entrer l\'adresse électronique',
+	noUrl: 'Veuillez entrer l\'URL du lien',
+	noTel: 'Veuillez entrer le numéro de téléphone',
+	other: '<autre>',
+	phoneNumber: 'Numéro de téléphone',
+	popupDependent: 'Dépendante (Netscape)',
+	popupFeatures: 'Caractéristiques de la fenêtre surgissante',
+	popupFullScreen: 'Plein écran (IE)',
+	popupLeft: 'À gauche',
+	popupLocationBar: 'Barre d\'adresse',
+	popupMenuBar: 'Barre de menu',
+	popupResizable: 'Redimensionnable',
+	popupScrollBars: 'Barres de défilement',
+	popupStatusBar: 'Barre d\'état',
+	popupToolbar: 'Barre d\'outils',
+	popupTop: 'En haut',
+	rel: 'Relation',
+	selectAnchor: 'Sélectionner une ancre',
+	styles: 'Style',
+	tabIndex: 'Indice de tabulation',
+	target: 'Cible',
+	targetFrame: '<cadre>',
+	targetFrameName: 'Nom du cadre affecté',
+	targetPopup: '<fenêtre surgissante>',
+	targetPopupName: 'Nom de la fenêtre surgissante',
+	title: 'Lien',
+	toAnchor: 'Ancre',
+	toEmail: 'Courriel',
+	toUrl: 'URL',
+	toPhone: 'Téléphone',
+	toolbar: 'Lien',
+	type: 'Type de lien',
+	unlink: 'Supprimer le lien',
+	upload: 'Téléverser'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/gl.js b/libraries/ckeditor/plugins/link/lang/gl.js
new file mode 100644
index 0000000000000000000000000000000000000000..176652786c1ced7e7cc4152a756a9c610e35df65
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/gl.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'gl', {
+	acccessKey: 'Chave de acceso',
+	advanced: 'Avanzado',
+	advisoryContentType: 'Tipo de contido informativo',
+	advisoryTitle: 'Título',
+	anchor: {
+		toolbar: 'Ancoraxe',
+		menu: 'Editar a ancoraxe',
+		title: 'Propiedades da ancoraxe',
+		name: 'Nome da ancoraxe',
+		errorName: 'Escriba o nome da ancoraxe',
+		remove: 'Retirar a ancoraxe'
+	},
+	anchorId: 'Polo ID do elemento',
+	anchorName: 'Polo nome da ancoraxe',
+	charset: 'Codificación do recurso ligado',
+	cssClasses: 'Clases da folla de estilos',
+	download: 'Forzar a descarga',
+	displayText: 'Amosar o texto',
+	emailAddress: 'Enderezo de correo',
+	emailBody: 'Corpo da mensaxe',
+	emailSubject: 'Asunto da mensaxe',
+	id: 'ID',
+	info: 'Información da ligazón',
+	langCode: 'Código do idioma',
+	langDir: 'Dirección de escritura do idioma',
+	langDirLTR: 'Esquerda a dereita (LTR)',
+	langDirRTL: 'Dereita a esquerda (RTL)',
+	menu: 'Editar a ligazón',
+	name: 'Nome',
+	noAnchors: '(Non hai ancoraxes dispoñíbeis no documento)',
+	noEmail: 'Escriba o enderezo de correo',
+	noUrl: 'Escriba a ligazón URL',
+	noTel: 'Escriba o número de teléfono',
+	other: '<other>',
+	phoneNumber: 'Número de teléfono',
+	popupDependent: 'Dependente (Netscape)',
+	popupFeatures: 'Características da xanela emerxente',
+	popupFullScreen: 'Pantalla completa (IE)',
+	popupLeft: 'Posición esquerda',
+	popupLocationBar: 'Barra de localización',
+	popupMenuBar: 'Barra do menú',
+	popupResizable: 'Redimensionábel',
+	popupScrollBars: 'Barras de desprazamento',
+	popupStatusBar: 'Barra de estado',
+	popupToolbar: 'Barra de ferramentas',
+	popupTop: 'Posición superior',
+	rel: 'Relación',
+	selectAnchor: 'Seleccionar unha ancoraxe',
+	styles: 'Estilo',
+	tabIndex: 'Índice de tabulación',
+	target: 'Destino',
+	targetFrame: '<marco>',
+	targetFrameName: 'Nome do marco de destino',
+	targetPopup: '<xanela emerxente>',
+	targetPopupName: 'Nome da xanela emerxente',
+	title: 'Ligazón',
+	toAnchor: 'Ligar coa ancoraxe no testo',
+	toEmail: 'Correo',
+	toUrl: 'URL',
+	toPhone: 'Teléfono',
+	toolbar: 'Ligazón',
+	type: 'Tipo de ligazón',
+	unlink: 'Eliminar a ligazón',
+	upload: 'Enviar'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/gu.js b/libraries/ckeditor/plugins/link/lang/gu.js
new file mode 100644
index 0000000000000000000000000000000000000000..17a51e068d7dbad070581f81f79e6de7bde4e132
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/gu.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'gu', {
+	acccessKey: 'ઍક્સેસ કી',
+	advanced: 'અડ્વાન્સડ',
+	advisoryContentType: 'મુખ્ય કન્ટેન્ટ પ્રકાર',
+	advisoryTitle: 'મુખ્ય મથાળું',
+	anchor: {
+		toolbar: 'ઍંકર ઇન્સર્ટ/દાખલ કરવી',
+		menu: 'ઍંકરના ગુણ',
+		title: 'ઍંકરના ગુણ',
+		name: 'ઍંકરનું નામ',
+		errorName: 'ઍંકરનું નામ ટાઈપ કરો',
+		remove: 'સ્થિર નકરવું'
+	},
+	anchorId: 'ઍંકર એલિમન્ટ Id થી પસંદ કરો',
+	anchorName: 'ઍંકર નામથી પસંદ કરો',
+	charset: 'લિંક રિસૉર્સ કૅરિક્ટર સેટ',
+	cssClasses: 'સ્ટાઇલ-શીટ ક્લાસ',
+	download: 'ડાઉનલોડ કરો',
+	displayText: 'લખાણ દેખાડો',
+	emailAddress: 'ઈ-મેલ સરનામું',
+	emailBody: 'સંદેશ',
+	emailSubject: 'ઈ-મેલ વિષય',
+	id: 'Id',
+	info: 'લિંક ઇન્ફૉ ટૅબ',
+	langCode: 'ભાષા લેખવાની પદ્ધતિ',
+	langDir: 'ભાષા લેખવાની પદ્ધતિ',
+	langDirLTR: 'ડાબે થી જમણે (LTR)',
+	langDirRTL: 'જમણે થી ડાબે (RTL)',
+	menu: ' લિંક એડિટ/માં ફેરફાર કરવો',
+	name: 'નામ',
+	noAnchors: '(ડૉક્યુમન્ટમાં ઍંકરની સંખ્યા)',
+	noEmail: 'ઈ-મેલ સરનામું ટાઇપ કરો',
+	noUrl: 'લિંક  URL ટાઇપ કરો',
+	noTel: 'Please type the phone number', // MISSING
+	other: '<other> <અન્ય>',
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'ડિપેન્ડન્ટ (Netscape)',
+	popupFeatures: 'પૉપ-અપ વિન્ડો ફીચરસૅ',
+	popupFullScreen: 'ફુલ સ્ક્રીન (IE)',
+	popupLeft: 'ડાબી બાજુ',
+	popupLocationBar: 'લોકેશન બાર',
+	popupMenuBar: 'મેન્યૂ બાર',
+	popupResizable: 'રીસાઈઝએબલ',
+	popupScrollBars: 'સ્ક્રોલ બાર',
+	popupStatusBar: 'સ્ટૅટસ બાર',
+	popupToolbar: 'ટૂલ બાર',
+	popupTop: 'જમણી બાજુ',
+	rel: 'સંબંધની સ્થિતિ',
+	selectAnchor: 'ઍંકર પસંદ કરો',
+	styles: 'સ્ટાઇલ',
+	tabIndex: 'ટૅબ ઇન્ડેક્સ',
+	target: 'ટાર્ગેટ/લક્ષ્ય',
+	targetFrame: '<ફ્રેમ>',
+	targetFrameName: 'ટાર્ગેટ ફ્રેમ નું નામ',
+	targetPopup: '<પૉપ-અપ વિન્ડો>',
+	targetPopupName: 'પૉપ-અપ વિન્ડો નું નામ',
+	title: 'લિંક',
+	toAnchor: 'આ પેજનો ઍંકર',
+	toEmail: 'ઈ-મેલ',
+	toUrl: 'URL',
+	toPhone: 'Phone', // MISSING
+	toolbar: 'લિંક ઇન્સર્ટ/દાખલ કરવી',
+	type: 'લિંક પ્રકાર',
+	unlink: 'લિંક કાઢવી',
+	upload: 'અપલોડ'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/he.js b/libraries/ckeditor/plugins/link/lang/he.js
new file mode 100644
index 0000000000000000000000000000000000000000..35790e25fa3058df94b4f5eb491209a24c59818f
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/he.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'he', {
+	acccessKey: 'מקש גישה',
+	advanced: 'אפשרויות מתקדמות',
+	advisoryContentType: 'Content Type מוצע',
+	advisoryTitle: 'כותרת מוצעת',
+	anchor: {
+		toolbar: 'הוספת/עריכת נקודת עיגון',
+		menu: 'מאפייני נקודת עיגון',
+		title: 'מאפייני נקודת עיגון',
+		name: 'שם לנקודת עיגון',
+		errorName: 'יש להקליד שם לנקודת עיגון',
+		remove: 'מחיקת נקודת עיגון'
+	},
+	anchorId: 'עפ"י זיהוי (ID) האלמנט',
+	anchorName: 'עפ"י שם העוגן',
+	charset: 'קידוד המשאב המקושר',
+	cssClasses: 'גיליונות עיצוב קבוצות',
+	download: 'Force Download', // MISSING
+	displayText: 'Display Text', // MISSING
+	emailAddress: 'כתובת הדוא"ל',
+	emailBody: 'גוף ההודעה',
+	emailSubject: 'נושא ההודעה',
+	id: 'זיהוי (ID)',
+	info: 'מידע על הקישור',
+	langCode: 'קוד שפה',
+	langDir: 'כיוון שפה',
+	langDirLTR: 'שמאל לימין (LTR)',
+	langDirRTL: 'ימין לשמאל (RTL)',
+	menu: 'מאפייני קישור',
+	name: 'שם',
+	noAnchors: '(אין עוגנים זמינים בדף)',
+	noEmail: 'יש להקליד את כתובת הדוא"ל',
+	noUrl: 'יש להקליד את כתובת הקישור (URL)',
+	noTel: 'Please type the phone number', // MISSING
+	other: '<אחר>',
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'תלוי (Netscape)',
+	popupFeatures: 'תכונות החלון הקופץ',
+	popupFullScreen: 'מסך מלא (IE)',
+	popupLeft: 'מיקום צד שמאל',
+	popupLocationBar: 'סרגל כתובת',
+	popupMenuBar: 'סרגל תפריט',
+	popupResizable: 'שינוי גודל',
+	popupScrollBars: 'ניתן לגלילה',
+	popupStatusBar: 'סרגל חיווי',
+	popupToolbar: 'סרגל הכלים',
+	popupTop: 'מיקום צד עליון',
+	rel: 'קשר גומלין',
+	selectAnchor: 'בחירת עוגן',
+	styles: 'סגנון',
+	tabIndex: 'מספר טאב',
+	target: 'מטרה',
+	targetFrame: '<מסגרת>',
+	targetFrameName: 'שם מסגרת היעד',
+	targetPopup: '<חלון קופץ>',
+	targetPopupName: 'שם החלון הקופץ',
+	title: 'קישור',
+	toAnchor: 'עוגן בעמוד זה',
+	toEmail: 'דוא"ל',
+	toUrl: 'כתובת (URL)',
+	toPhone: 'Phone', // MISSING
+	toolbar: 'הוספת/עריכת קישור',
+	type: 'סוג קישור',
+	unlink: 'הסרת הקישור',
+	upload: 'העלאה'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/hi.js b/libraries/ckeditor/plugins/link/lang/hi.js
new file mode 100644
index 0000000000000000000000000000000000000000..6dc8e3d4c53b2d84c610445ed8058ed6e4853b10
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/hi.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'hi', {
+	acccessKey: 'ऍक्सॅस की',
+	advanced: 'ऍड्वान्स्ड',
+	advisoryContentType: 'परामर्श कन्टॅन्ट प्रकार',
+	advisoryTitle: 'परामर्श शीर्शक',
+	anchor: {
+		toolbar: 'ऐंकर इन्सर्ट/संपादन',
+		menu: 'ऐंकर प्रॉपर्टीज़',
+		title: 'ऐंकर प्रॉपर्टीज़',
+		name: 'ऐंकर का नाम',
+		errorName: 'ऐंकर का नाम टाइप करें',
+		remove: 'Remove Anchor'
+	},
+	anchorId: 'ऍलीमॅन्ट Id से',
+	anchorName: 'ऐंकर नाम से',
+	charset: 'लिंक रिसोर्स करॅक्टर सॅट',
+	cssClasses: 'स्टाइल-शीट क्लास',
+	download: 'Force Download', // MISSING
+	displayText: 'Display Text', // MISSING
+	emailAddress: 'ई-मेल पता',
+	emailBody: 'संदेश',
+	emailSubject: 'संदेश विषय',
+	id: 'Id',
+	info: 'लिंक  ',
+	langCode: 'भाषा लिखने की दिशा',
+	langDir: 'भाषा लिखने की दिशा',
+	langDirLTR: 'बायें से दायें (LTR)',
+	langDirRTL: 'दायें से बायें (RTL)',
+	menu: 'लिंक संपादन',
+	name: 'नाम',
+	noAnchors: '(डॉक्यूमॅन्ट में ऐंकर्स की संख्या)',
+	noEmail: 'ई-मेल पता टाइप करें',
+	noUrl: 'लिंक URL टाइप करें',
+	noTel: 'Please type the phone number', // MISSING
+	other: '<अन्य>',
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'डिपेन्डॅन्ट (Netscape)',
+	popupFeatures: 'पॉप-अप विन्डो फ़ीचर्स',
+	popupFullScreen: 'फ़ुल स्क्रीन (IE)',
+	popupLeft: 'बायीं तरफ',
+	popupLocationBar: 'लोकेशन बार',
+	popupMenuBar: 'मॅन्यू बार',
+	popupResizable: 'आकार बदलने लायक',
+	popupScrollBars: 'स्क्रॉल बार',
+	popupStatusBar: 'स्टेटस बार',
+	popupToolbar: 'टूल बार',
+	popupTop: 'दायीं तरफ',
+	rel: 'संबंध',
+	selectAnchor: 'ऐंकर चुनें',
+	styles: 'स्टाइल',
+	tabIndex: 'टैब इन्डॅक्स',
+	target: 'टार्गेट',
+	targetFrame: '<फ़्रेम>',
+	targetFrameName: 'टार्गेट फ़्रेम का नाम',
+	targetPopup: '<पॉप-अप विन्डो>',
+	targetPopupName: 'पॉप-अप विन्डो का नाम',
+	title: 'लिंक',
+	toAnchor: 'इस पेज का ऐंकर',
+	toEmail: 'ई-मेल',
+	toUrl: 'URL',
+	toPhone: 'Phone', // MISSING
+	toolbar: 'लिंक इन्सर्ट/संपादन',
+	type: 'लिंक प्रकार',
+	unlink: 'लिंक हटायें',
+	upload: 'अपलोड'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/hr.js b/libraries/ckeditor/plugins/link/lang/hr.js
new file mode 100644
index 0000000000000000000000000000000000000000..68285bd4a3cb663d3663b5eafcc29e2336350cc1
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/hr.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'hr', {
+	acccessKey: 'Pristupna tipka',
+	advanced: 'Napredno',
+	advisoryContentType: 'Savjetodavna vrsta sadržaja',
+	advisoryTitle: 'Savjetodavni naslov',
+	anchor: {
+		toolbar: 'Ubaci/promijeni sidro',
+		menu: 'Svojstva sidra',
+		title: 'Svojstva sidra',
+		name: 'Ime sidra',
+		errorName: 'Molimo unesite ime sidra',
+		remove: 'Ukloni sidro'
+	},
+	anchorId: 'Po Id elementa',
+	anchorName: 'Po nazivu sidra',
+	charset: 'Kodna stranica povezanih resursa',
+	cssClasses: 'Stylesheet klase',
+	download: 'Preuzmi na silu',
+	displayText: 'Prikaži tekst',
+	emailAddress: 'E-Mail adresa',
+	emailBody: 'Sadržaj poruke',
+	emailSubject: 'Naslov',
+	id: 'Id',
+	info: 'Link Info',
+	langCode: 'Smjer jezika',
+	langDir: 'Smjer jezika',
+	langDirLTR: 'S lijeva na desno (LTR)',
+	langDirRTL: 'S desna na lijevo (RTL)',
+	menu: 'Promijeni link',
+	name: 'Naziv',
+	noAnchors: '(Nema dostupnih sidra)',
+	noEmail: 'Molimo upišite e-mail adresu',
+	noUrl: 'Molimo upišite URL link',
+	noTel: 'Please type the phone number', // MISSING
+	other: '<drugi>',
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'Ovisno (Netscape)',
+	popupFeatures: 'Mogućnosti popup prozora',
+	popupFullScreen: 'Cijeli ekran (IE)',
+	popupLeft: 'Lijeva pozicija',
+	popupLocationBar: 'Traka za lokaciju',
+	popupMenuBar: 'Izborna traka',
+	popupResizable: 'Promjenjiva veličina',
+	popupScrollBars: 'Scroll traka',
+	popupStatusBar: 'Statusna traka',
+	popupToolbar: 'Traka s alatima',
+	popupTop: 'Gornja pozicija',
+	rel: 'Veza',
+	selectAnchor: 'Odaberi sidro',
+	styles: 'Stil',
+	tabIndex: 'Tab Indeks',
+	target: 'Meta',
+	targetFrame: '<okvir>',
+	targetFrameName: 'Ime ciljnog okvira',
+	targetPopup: '<popup prozor>',
+	targetPopupName: 'Naziv popup prozora',
+	title: 'Veza',
+	toAnchor: 'Sidro na ovoj stranici',
+	toEmail: 'E-Mail',
+	toUrl: 'URL',
+	toPhone: 'Phone', // MISSING
+	toolbar: 'Ubaci/promijeni vezu',
+	type: 'Vrsta veze',
+	unlink: 'Ukloni vezu',
+	upload: 'Pošalji'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/hu.js b/libraries/ckeditor/plugins/link/lang/hu.js
new file mode 100644
index 0000000000000000000000000000000000000000..e512e380373a175b10749fe75d0f0f768a86d59c
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/hu.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'hu', {
+	acccessKey: 'Billentyűkombináció',
+	advanced: 'További opciók',
+	advisoryContentType: 'Súgó tartalomtípusa',
+	advisoryTitle: 'Súgócimke',
+	anchor: {
+		toolbar: 'Horgony beillesztése/szerkesztése',
+		menu: 'Horgony tulajdonságai',
+		title: 'Horgony tulajdonságai',
+		name: 'Horgony neve',
+		errorName: 'Kérem adja meg a horgony nevét',
+		remove: 'Horgony eltávolítása'
+	},
+	anchorId: 'Azonosító szerint',
+	anchorName: 'Horgony név szerint',
+	charset: 'Hivatkozott tartalom kódlapja',
+	cssClasses: 'Stíluskészlet',
+	download: 'Kötelező letöltés',
+	displayText: 'Megjelenített szöveg',
+	emailAddress: 'E-Mail cím',
+	emailBody: 'Ãœzenet',
+	emailSubject: 'Üzenet tárgya',
+	id: 'Id',
+	info: 'Alaptulajdonságok',
+	langCode: 'Írás iránya',
+	langDir: 'Írás iránya',
+	langDirLTR: 'Balról jobbra',
+	langDirRTL: 'Jobbról balra',
+	menu: 'Hivatkozás módosítása',
+	name: 'Név',
+	noAnchors: '(Nincs horgony a dokumentumban)',
+	noEmail: 'Adja meg az E-Mail címet',
+	noUrl: 'Adja meg a hivatkozás webcímét',
+	noTel: 'Adja meg a telefonszámot',
+	other: '<más>',
+	phoneNumber: 'Telefonszám',
+	popupDependent: 'Szülőhöz kapcsolt (csak Netscape)',
+	popupFeatures: 'Felugró ablak jellemzői',
+	popupFullScreen: 'Teljes képernyő (csak IE)',
+	popupLeft: 'Bal pozíció',
+	popupLocationBar: 'Címsor',
+	popupMenuBar: 'Menü sor',
+	popupResizable: 'Átméretezés',
+	popupScrollBars: 'Gördítősáv',
+	popupStatusBar: 'Állapotsor',
+	popupToolbar: 'Eszköztár',
+	popupTop: 'Felső pozíció',
+	rel: 'Kapcsolat típusa',
+	selectAnchor: 'Horgony választása',
+	styles: 'Stílus',
+	tabIndex: 'Tabulátor index',
+	target: 'Tartalom megjelenítése',
+	targetFrame: '<keretben>',
+	targetFrameName: 'Keret neve',
+	targetPopup: '<felugró ablakban>',
+	targetPopupName: 'Felugró ablak neve',
+	title: 'Hivatkozás tulajdonságai',
+	toAnchor: 'Horgony az oldalon',
+	toEmail: 'E-Mail',
+	toUrl: 'URL',
+	toPhone: 'Telefon',
+	toolbar: 'Hivatkozás beillesztése/módosítása',
+	type: 'Hivatkozás típusa',
+	unlink: 'Hivatkozás törlése',
+	upload: 'Feltöltés'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/id.js b/libraries/ckeditor/plugins/link/lang/id.js
new file mode 100644
index 0000000000000000000000000000000000000000..0240059312baba4b679afcedd1176fe57f166c4a
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/id.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'id', {
+	acccessKey: 'Access Key', // MISSING
+	advanced: 'Advanced', // MISSING
+	advisoryContentType: 'Advisory Content Type', // MISSING
+	advisoryTitle: 'Penasehat Judul',
+	anchor: {
+		toolbar: 'Anchor', // MISSING
+		menu: 'Edit Anchor', // MISSING
+		title: 'Anchor Properties', // MISSING
+		name: 'Anchor Name', // MISSING
+		errorName: 'Please type the anchor name', // MISSING
+		remove: 'Remove Anchor' // MISSING
+	},
+	anchorId: 'By Element Id', // MISSING
+	anchorName: 'By Anchor Name', // MISSING
+	charset: 'Linked Resource Charset', // MISSING
+	cssClasses: 'Kelas Stylesheet',
+	download: 'Force Download', // MISSING
+	displayText: 'Display Text', // MISSING
+	emailAddress: 'Alamat E-mail',
+	emailBody: 'Message Body', // MISSING
+	emailSubject: 'Judul Pesan',
+	id: 'Id',
+	info: 'Link Info', // MISSING
+	langCode: 'Kode Bahasa',
+	langDir: 'Arah Bahasa',
+	langDirLTR: 'Kiri ke Kanan (LTR)',
+	langDirRTL: 'Kanan ke Kiri (RTL)',
+	menu: 'Sunting Tautan',
+	name: 'Nama',
+	noAnchors: '(No anchors available in the document)', // MISSING
+	noEmail: 'Silahkan ketikkan alamat e-mail',
+	noUrl: 'Silahkan ketik URL tautan',
+	noTel: 'Please type the phone number', // MISSING
+	other: '<lainnya>',
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'Dependent (Netscape)', // MISSING
+	popupFeatures: 'Popup Window Features', // MISSING
+	popupFullScreen: 'Full Screen (IE)', // MISSING
+	popupLeft: 'Left Position', // MISSING
+	popupLocationBar: 'Location Bar', // MISSING
+	popupMenuBar: 'Menu Bar', // MISSING
+	popupResizable: 'Resizable', // MISSING
+	popupScrollBars: 'Scroll Bars', // MISSING
+	popupStatusBar: 'Status Bar', // MISSING
+	popupToolbar: 'Toolbar', // MISSING
+	popupTop: 'Top Position', // MISSING
+	rel: 'Hubungan',
+	selectAnchor: 'Select an Anchor', // MISSING
+	styles: 'Gaya',
+	tabIndex: 'Tab Index', // MISSING
+	target: 'Sasaran',
+	targetFrame: '<frame>', // MISSING
+	targetFrameName: 'Target Frame Name', // MISSING
+	targetPopup: '<popup window>', // MISSING
+	targetPopupName: 'Popup Window Name', // MISSING
+	title: 'Tautan',
+	toAnchor: 'Link to anchor in the text', // MISSING
+	toEmail: 'E-mail', // MISSING
+	toUrl: 'URL',
+	toPhone: 'Phone', // MISSING
+	toolbar: 'Tautan',
+	type: 'Link Type', // MISSING
+	unlink: 'Unlink', // MISSING
+	upload: 'Unggah'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/is.js b/libraries/ckeditor/plugins/link/lang/is.js
new file mode 100644
index 0000000000000000000000000000000000000000..04412508c842be933b9ae7522da4903e16f9f348
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/is.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'is', {
+	acccessKey: 'Skammvalshnappur',
+	advanced: 'Tæknilegt',
+	advisoryContentType: 'Tegund innihalds',
+	advisoryTitle: 'Titill',
+	anchor: {
+		toolbar: 'Stofna/breyta kaflamerki',
+		menu: 'Eigindi kaflamerkis',
+		title: 'Eigindi kaflamerkis',
+		name: 'Nafn bókamerkis',
+		errorName: 'Sláðu inn nafn bókamerkis!',
+		remove: 'Remove Anchor'
+	},
+	anchorId: 'Eftir auðkenni einingar',
+	anchorName: 'Eftir akkerisnafni',
+	charset: 'Táknróf',
+	cssClasses: 'Stílsniðsflokkur',
+	download: 'Force Download', // MISSING
+	displayText: 'Display Text', // MISSING
+	emailAddress: 'Netfang',
+	emailBody: 'Meginmál',
+	emailSubject: 'Efni',
+	id: 'Auðkenni',
+	info: 'Almennt',
+	langCode: 'Lesstefna',
+	langDir: 'Lesstefna',
+	langDirLTR: 'Frá vinstri til hægri (LTR)',
+	langDirRTL: 'Frá hægri til vinstri (RTL)',
+	menu: 'Breyta stiklu',
+	name: 'Nafn',
+	noAnchors: '<Engin bókamerki á skrá>',
+	noEmail: 'Sláðu inn netfang!',
+	noUrl: 'Sláðu inn veffang stiklunnar!',
+	noTel: 'Please type the phone number', // MISSING
+	other: '<annar>',
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'Háð venslum (Netscape)',
+	popupFeatures: 'Eigindi sprettiglugga',
+	popupFullScreen: 'Heilskjár (IE)',
+	popupLeft: 'Fjarlægð frá vinstri',
+	popupLocationBar: 'Fanglína',
+	popupMenuBar: 'Vallína',
+	popupResizable: 'Resizable', // MISSING
+	popupScrollBars: 'Skrunstikur',
+	popupStatusBar: 'Stöðustika',
+	popupToolbar: 'Verkfærastika',
+	popupTop: 'Fjarlægð frá efri brún',
+	rel: 'Relationship', // MISSING
+	selectAnchor: 'Veldu akkeri',
+	styles: 'Stíll',
+	tabIndex: 'Raðnúmer innsláttarreits',
+	target: 'Mark',
+	targetFrame: '<rammi>',
+	targetFrameName: 'Nafn markglugga',
+	targetPopup: '<sprettigluggi>',
+	targetPopupName: 'Nafn sprettiglugga',
+	title: 'Stikla',
+	toAnchor: 'Bókamerki á þessari síðu',
+	toEmail: 'Netfang',
+	toUrl: 'Vefslóð',
+	toPhone: 'Phone', // MISSING
+	toolbar: 'Stofna/breyta stiklu',
+	type: 'Stikluflokkur',
+	unlink: 'Fjarlægja stiklu',
+	upload: 'Senda upp'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/it.js b/libraries/ckeditor/plugins/link/lang/it.js
new file mode 100644
index 0000000000000000000000000000000000000000..516c50b745804818ba855a16cca46a684884b582
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/it.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'it', {
+	acccessKey: 'Scorciatoia da tastiera',
+	advanced: 'Avanzate',
+	advisoryContentType: 'Tipo della risorsa collegata',
+	advisoryTitle: 'Titolo',
+	anchor: {
+		toolbar: 'Inserisci/Modifica Ancora',
+		menu: 'Proprietà ancora',
+		title: 'Proprietà ancora',
+		name: 'Nome ancora',
+		errorName: 'Inserici il nome dell\'ancora',
+		remove: 'Rimuovi l\'ancora'
+	},
+	anchorId: 'Per id elemento',
+	anchorName: 'Per Nome',
+	charset: 'Set di caretteri della risorsa collegata',
+	cssClasses: 'Nome classe CSS',
+	download: 'Forza scaricamento',
+	displayText: 'Mostra testo',
+	emailAddress: 'Indirizzo E-Mail',
+	emailBody: 'Corpo del messaggio',
+	emailSubject: 'Oggetto del messaggio',
+	id: 'Id',
+	info: 'Informazioni collegamento',
+	langCode: 'Direzione scrittura',
+	langDir: 'Direzione scrittura',
+	langDirLTR: 'Da Sinistra a Destra (LTR)',
+	langDirRTL: 'Da Destra a Sinistra (RTL)',
+	menu: 'Modifica collegamento',
+	name: 'Nome',
+	noAnchors: '(Nessuna ancora disponibile nel documento)',
+	noEmail: 'Devi inserire un\'indirizzo e-mail',
+	noUrl: 'Devi inserire l\'URL del collegamento',
+	noTel: 'Inserire il numero di telefono',
+	other: '<altro>',
+	phoneNumber: 'Numero di telefono',
+	popupDependent: 'Dipendente (Netscape)',
+	popupFeatures: 'Caratteristiche finestra popup',
+	popupFullScreen: 'A tutto schermo (IE)',
+	popupLeft: 'Posizione da sinistra',
+	popupLocationBar: 'Barra degli indirizzi',
+	popupMenuBar: 'Barra del menu',
+	popupResizable: 'Ridimensionabile',
+	popupScrollBars: 'Barre di scorrimento',
+	popupStatusBar: 'Barra di stato',
+	popupToolbar: 'Barra degli strumenti',
+	popupTop: 'Posizione dall\'alto',
+	rel: 'Relazioni',
+	selectAnchor: 'Scegli Ancora',
+	styles: 'Stile',
+	tabIndex: 'Ordine di tabulazione',
+	target: 'Destinazione',
+	targetFrame: '<riquadro>',
+	targetFrameName: 'Nome del riquadro di destinazione',
+	targetPopup: '<finestra popup>',
+	targetPopupName: 'Nome finestra popup',
+	title: 'Collegamento',
+	toAnchor: 'Ancora nel testo',
+	toEmail: 'E-Mail',
+	toUrl: 'URL',
+	toPhone: 'Telefono',
+	toolbar: 'Collegamento',
+	type: 'Tipo di Collegamento',
+	unlink: 'Elimina collegamento',
+	upload: 'Carica'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/ja.js b/libraries/ckeditor/plugins/link/lang/ja.js
new file mode 100644
index 0000000000000000000000000000000000000000..e85d70f68761460809c9aef22701acd2e569e766
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/ja.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'ja', {
+	acccessKey: 'アクセスキー',
+	advanced: '高度な設定',
+	advisoryContentType: 'Content Type属性',
+	advisoryTitle: 'Title属性',
+	anchor: {
+		toolbar: 'アンカー挿入/編集',
+		menu: 'アンカーの編集',
+		title: 'アンカーのプロパティ',
+		name: 'アンカー名',
+		errorName: 'アンカー名を入力してください。',
+		remove: 'アンカーを削除'
+	},
+	anchorId: 'エレメントID',
+	anchorName: 'アンカー名',
+	charset: 'リンク先のcharset',
+	cssClasses: 'スタイルシートクラス',
+	download: '強制的にダウンロード',
+	displayText: '表示文字',
+	emailAddress: 'E-Mail アドレス',
+	emailBody: '本文',
+	emailSubject: '件名',
+	id: 'Id',
+	info: 'ハイパーリンク情報',
+	langCode: '言語コード',
+	langDir: '文字表記の方向',
+	langDirLTR: '左から右 (LTR)',
+	langDirRTL: '右から左 (RTL)',
+	menu: 'リンクを編集',
+	name: 'Name属性',
+	noAnchors: '(このドキュメント内にアンカーはありません)',
+	noEmail: 'メールアドレスを入力してください。',
+	noUrl: 'リンクURLを入力してください。',
+	noTel: 'Please type the phone number', // MISSING
+	other: '<その他の>',
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: '開いたウィンドウに連動して閉じる (Netscape)',
+	popupFeatures: 'ポップアップウィンドウ特徴',
+	popupFullScreen: '全画面モード(IE)',
+	popupLeft: '左端からの座標で指定',
+	popupLocationBar: 'ロケーションバー',
+	popupMenuBar: 'メニューバー',
+	popupResizable: 'サイズ可変',
+	popupScrollBars: 'スクロールバー',
+	popupStatusBar: 'ステータスバー',
+	popupToolbar: 'ツールバー',
+	popupTop: '上端からの座標で指定',
+	rel: '関連リンク',
+	selectAnchor: 'アンカーを選択',
+	styles: 'スタイルシート',
+	tabIndex: 'タブインデックス',
+	target: 'ターゲット',
+	targetFrame: '<フレーム>',
+	targetFrameName: 'ターゲットのフレーム名',
+	targetPopup: '<ポップアップウィンドウ>',
+	targetPopupName: 'ポップアップウィンドウ名',
+	title: 'ハイパーリンク',
+	toAnchor: 'ページ内のアンカー',
+	toEmail: 'E-Mail',
+	toUrl: 'URL',
+	toPhone: 'Phone', // MISSING
+	toolbar: 'リンク挿入/編集',
+	type: 'リンクタイプ',
+	unlink: 'リンクを削除',
+	upload: 'アップロード'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/ka.js b/libraries/ckeditor/plugins/link/lang/ka.js
new file mode 100644
index 0000000000000000000000000000000000000000..f70041807a667e63b4e7a22f3055348ee68c017e
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/ka.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'ka', {
+	acccessKey: 'წვდომის ღილაკი',
+	advanced: 'დაწვრილებით',
+	advisoryContentType: 'შიგთავსის ტიპი',
+	advisoryTitle: 'სათაური',
+	anchor: {
+		toolbar: 'ღუზა',
+		menu: 'ღუზის რედაქტირება',
+		title: 'ღუზის პარამეტრები',
+		name: 'ღუზუს სახელი',
+		errorName: 'აკრიფეთ ღუზის სახელი',
+		remove: 'Remove Anchor'
+	},
+	anchorId: 'ელემენტის Id-თ',
+	anchorName: 'ღუზის სახელით',
+	charset: 'კოდირება',
+	cssClasses: 'CSS კლასი',
+	download: 'Force Download', // MISSING
+	displayText: 'Display Text', // MISSING
+	emailAddress: 'ელფოსტის მისამართები',
+	emailBody: 'წერილის ტექსტი',
+	emailSubject: 'წერილის სათაური',
+	id: 'Id',
+	info: 'ბმულის ინფორმაცია',
+	langCode: 'ენის კოდი',
+	langDir: 'ენის მიმართულება',
+	langDirLTR: 'მარცხნიდან მარჯვნივ (LTR)',
+	langDirRTL: 'მარჯვნიდან მარცხნივ (RTL)',
+	menu: 'ბმულის რედაქტირება',
+	name: 'სახელი',
+	noAnchors: '(ამ დოკუმენტში ღუზა არაა)',
+	noEmail: 'აკრიფეთ ელფოსტის მისამართი',
+	noUrl: 'აკრიფეთ ბმულის URL',
+	noTel: 'Please type the phone number', // MISSING
+	other: '<სხვა>',
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'დამოკიდებული (Netscape)',
+	popupFeatures: 'Popup ფანჯრის პარამეტრები',
+	popupFullScreen: 'მთელი ეკრანი (IE)',
+	popupLeft: 'მარცხენა პოზიცია',
+	popupLocationBar: 'ნავიგაციის ზოლი',
+	popupMenuBar: 'მენიუს ზოლი',
+	popupResizable: 'ცვალებადი ზომით',
+	popupScrollBars: 'გადახვევის ზოლები',
+	popupStatusBar: 'სტატუსის ზოლი',
+	popupToolbar: 'ხელსაწყოთა ზოლი',
+	popupTop: 'ზედა პოზიცია',
+	rel: 'კავშირი',
+	selectAnchor: 'აირჩიეთ ღუზა',
+	styles: 'CSS სტილი',
+	tabIndex: 'Tab-ის ინდექსი',
+	target: 'გახსნის ადგილი',
+	targetFrame: '<frame>',
+	targetFrameName: 'Frame-ის სახელი',
+	targetPopup: '<popup ფანჯარა>',
+	targetPopupName: 'Popup ფანჯრის სახელი',
+	title: 'ბმული',
+	toAnchor: 'ბმული ტექსტში ღუზაზე',
+	toEmail: 'ელფოსტა',
+	toUrl: 'URL',
+	toPhone: 'Phone', // MISSING
+	toolbar: 'ბმული',
+	type: 'ბმულის ტიპი',
+	unlink: 'ბმულის მოხსნა',
+	upload: 'აქაჩვა'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/km.js b/libraries/ckeditor/plugins/link/lang/km.js
new file mode 100644
index 0000000000000000000000000000000000000000..1dd14417754099899b461c74c76b293488cc3234
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/km.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'km', {
+	acccessKey: 'សោរ​ចូល',
+	advanced: 'កម្រិត​ខ្ពស់',
+	advisoryContentType: 'ប្រភេទអត្ថបទ​ប្រឹក្សា',
+	advisoryTitle: 'ចំណងជើង​ប្រឹក្សា',
+	anchor: {
+		toolbar: 'យុថ្កា',
+		menu: 'កែ​យុថ្កា',
+		title: 'លក្ខណៈ​យុថ្កា',
+		name: 'ឈ្មោះ​យុថ្កា',
+		errorName: 'សូម​បញ្ចូល​ឈ្មោះ​យុថ្កា',
+		remove: 'ដក​យុថ្កា​ចេញ'
+	},
+	anchorId: 'តាម ID ធាតុ',
+	anchorName: 'តាម​ឈ្មោះ​យុថ្កា',
+	charset: 'លេខកូតអក្សររបស់ឈ្នាប់',
+	cssClasses: 'Stylesheet Classes',
+	download: 'Force Download', // MISSING
+	displayText: 'Display Text', // MISSING
+	emailAddress: 'អាសយដ្ឋាន​អ៊ីមែល',
+	emailBody: 'តួ​អត្ថបទ',
+	emailSubject: 'ប្រធានបទ​សារ',
+	id: 'Id',
+	info: 'ព័ត៌មាន​ពី​តំណ',
+	langCode: 'កូដ​ភាសា',
+	langDir: 'ទិសដៅភាសា',
+	langDirLTR: 'ពីឆ្វេងទៅស្តាំ(LTR)',
+	langDirRTL: 'ពីស្តាំទៅឆ្វេង(RTL)',
+	menu: 'កែ​តំណ',
+	name: 'ឈ្មោះ',
+	noAnchors: '(មិន​មាន​យុថ្កា​នៅ​ក្នុង​ឯកសារ​អត្ថថបទ​ទេ)',
+	noEmail: 'សូម​បញ្ចូល​អាសយដ្ឋាន​អ៊ីមែល',
+	noUrl: 'សូម​បញ្ចូល​តំណ URL',
+	noTel: 'Please type the phone number', // MISSING
+	other: '<ផ្សេង​ទៀត>',
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'Dependent (Netscape)',
+	popupFeatures: 'មុខ​ងារ​ផុស​ផ្ទាំង​វីនដូ​ឡើង',
+	popupFullScreen: 'ពេញ​អេក្រង់ (IE)',
+	popupLeft: 'ទីតាំងខាងឆ្វេង',
+	popupLocationBar: 'របារ​ទីតាំង',
+	popupMenuBar: 'របារ​ម៉ឺនុយ',
+	popupResizable: 'អាច​ប្ដូរ​ទំហំ',
+	popupScrollBars: 'របារ​រំកិល',
+	popupStatusBar: 'របារ​ស្ថានភាព',
+	popupToolbar: 'របារ​ឧបករណ៍',
+	popupTop: 'ទីតាំង​កំពូល',
+	rel: 'សម្ពន្ធ​ភាព',
+	selectAnchor: 'រើស​យក​យុថ្កា​មួយ',
+	styles: 'ស្ទីល',
+	tabIndex: 'លេខ Tab',
+	target: 'គោលដៅ',
+	targetFrame: '<ស៊ុម>',
+	targetFrameName: 'ឈ្មោះ​ស៊ុម​ជា​គោល​ដៅ',
+	targetPopup: '<វីនដូ​ផុស​ឡើង>',
+	targetPopupName: 'ឈ្មោះ​វីនដូត​ផុស​ឡើង',
+	title: 'តំណ',
+	toAnchor: 'ត​ភ្ជាប់​ទៅ​យុថ្កា​ក្នុង​អត្ថបទ',
+	toEmail: 'អ៊ីមែល',
+	toUrl: 'URL',
+	toPhone: 'Phone', // MISSING
+	toolbar: 'តំណ',
+	type: 'ប្រភេទ​តំណ',
+	unlink: 'ផ្ដាច់​តំណ',
+	upload: 'ផ្ទុក​ឡើង'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/ko.js b/libraries/ckeditor/plugins/link/lang/ko.js
new file mode 100644
index 0000000000000000000000000000000000000000..d6d6260e52c4479ddb0a57f877abe7d19794f114
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/ko.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'ko', {
+	acccessKey: '액세스 키',
+	advanced: '고급',
+	advisoryContentType: '보조 콘텐츠 유형',
+	advisoryTitle: '보조 제목',
+	anchor: {
+		toolbar: '책갈피',
+		menu: '책갈피 편집',
+		title: '책갈피 속성',
+		name: '책갈피 이름',
+		errorName: '책갈피 이름을 입력하십시오',
+		remove: '책갈피 제거'
+	},
+	anchorId: '책갈피 ID',
+	anchorName: '책갈피 이름',
+	charset: '링크된 자료 문자열 인코딩',
+	cssClasses: '스타일시트 클래스',
+	download: '강제 다운로드',
+	displayText: '보이는 글자',
+	emailAddress: '이메일 주소',
+	emailBody: '메시지 내용',
+	emailSubject: '메시지 제목',
+	id: 'ID',
+	info: '링크 정보',
+	langCode: '언어 코드',
+	langDir: '언어 방향',
+	langDirLTR: '왼쪽에서 오른쪽 (LTR)',
+	langDirRTL: '오른쪽에서 왼쪽 (RTL)',
+	menu: '링크 수정',
+	name: '이름',
+	noAnchors: '(문서에 책갈피가 없습니다.)',
+	noEmail: '이메일 주소를 입력하십시오',
+	noUrl: '링크 주소(URL)를 입력하십시오',
+	noTel: 'Please type the phone number', // MISSING
+	other: '<기타>',
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'Dependent (Netscape)',
+	popupFeatures: '팝업창 속성',
+	popupFullScreen: '전체화면 (IE)',
+	popupLeft: '왼쪽 위치',
+	popupLocationBar: '주소 표시줄',
+	popupMenuBar: '메뉴 바',
+	popupResizable: '크기 조절 가능',
+	popupScrollBars: '스크롤 바',
+	popupStatusBar: '상태 바',
+	popupToolbar: '툴바',
+	popupTop: '위쪽 위치',
+	rel: '관계',
+	selectAnchor: '책갈피 선택',
+	styles: '스타일',
+	tabIndex: '탭 순서',
+	target: '타겟',
+	targetFrame: '<프레임>',
+	targetFrameName: '타겟 프레임 이름',
+	targetPopup: '<팝업 창>',
+	targetPopupName: '팝업 창 이름',
+	title: '링크',
+	toAnchor: '책갈피',
+	toEmail: '이메일',
+	toUrl: '주소(URL)',
+	toPhone: 'Phone', // MISSING
+	toolbar: '링크 삽입/변경',
+	type: '링크 종류',
+	unlink: '링크 지우기',
+	upload: '업로드'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/ku.js b/libraries/ckeditor/plugins/link/lang/ku.js
new file mode 100644
index 0000000000000000000000000000000000000000..64b31577866ce335eccf92fd460c100d1c2cbadd
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/ku.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'ku', {
+	acccessKey: 'کلیلی دەستپێگەیشتن',
+	advanced: 'پێشکەوتوو',
+	advisoryContentType: 'جۆری ناوەڕۆکی ڕاویژکار',
+	advisoryTitle: 'ڕاوێژکاری سەردێڕ',
+	anchor: {
+		toolbar: 'دانان/چاکسازی لەنگەر',
+		menu: 'چاکسازی لەنگەر',
+		title: 'خاسیەتی لەنگەر',
+		name: 'ناوی لەنگەر',
+		errorName: 'تکایه ناوی لەنگەر بنووسه',
+		remove: 'لابردنی لەنگەر'
+	},
+	anchorId: 'بەپێی ناسنامەی توخم',
+	anchorName: 'بەپێی ناوی لەنگەر',
+	charset: 'بەستەری سەرچاوەی نووسە',
+	cssClasses: 'شێوازی چینی پەڕه',
+	download: 'داگرتنی بەهێز',
+	displayText: 'پیشاندانی دەق',
+	emailAddress: 'ناونیشانی ئیمەیل',
+	emailBody: 'ناوەڕۆکی نامە',
+	emailSubject: 'بابەتی نامە',
+	id: 'ناسنامە',
+	info: 'زانیاری بەستەر',
+	langCode: 'هێمای زمان',
+	langDir: 'ئاراستەی زمان',
+	langDirLTR: 'چەپ بۆ ڕاست (LTR)',
+	langDirRTL: 'ڕاست بۆ چەپ (RTL)',
+	menu: 'چاکسازی بەستەر',
+	name: 'ناو',
+	noAnchors: '(هیچ جۆرێکی لەنگەر ئامادە نیە لەم پەڕەیه)',
+	noEmail: 'تکایە ناونیشانی ئیمەیل بنووسە',
+	noUrl: 'تکایە ناونیشانی بەستەر بنووسە',
+	noTel: 'تکایە ژمارەی تەلەفۆن دابنێ',
+	other: '<هیتر>',
+	phoneNumber: 'ژمارەی تەلەفۆن',
+	popupDependent: 'پێوەبەستراو (Netscape)',
+	popupFeatures: 'خاسیەتی پەنجەرەی سەرهەڵدەر',
+	popupFullScreen: 'پڕ بەپڕی شاشە (IE)',
+	popupLeft: 'جێگای چەپ',
+	popupLocationBar: 'هێڵی ناونیشانی بەستەر',
+	popupMenuBar: 'هێڵی لیسته',
+	popupResizable: 'توانای گۆڕینی قەباره',
+	popupScrollBars: 'هێڵی هاتووچۆپێکردن',
+	popupStatusBar: 'هێڵی دۆخ',
+	popupToolbar: 'هێڵی تووڵامراز',
+	popupTop: 'جێگای سەرەوە',
+	rel: 'پەیوەندی',
+	selectAnchor: 'هەڵبژاردنی لەنگەرێك',
+	styles: 'شێواز',
+	tabIndex: 'بازدەری تابی  ئیندێکس',
+	target: 'ئامانج',
+	targetFrame: '<چووارچێوە>',
+	targetFrameName: 'ناوی ئامانجی چووارچێوە',
+	targetPopup: '<پەنجەرەی سەرهەڵدەر>',
+	targetPopupName: 'ناوی پەنجەرەی سەرهەڵدەر',
+	title: 'بەستەر',
+	toAnchor: 'بەستەر بۆ لەنگەر له دەق',
+	toEmail: 'ئیمەیل',
+	toUrl: 'ناونیشانی بەستەر',
+	toPhone: 'تەلەفۆن',
+	toolbar: 'دانان/ڕێکخستنی بەستەر',
+	type: 'جۆری بەستەر',
+	unlink: 'لابردنی بەستەر',
+	upload: 'بارکردن'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/lt.js b/libraries/ckeditor/plugins/link/lang/lt.js
new file mode 100644
index 0000000000000000000000000000000000000000..2f4568ae5a5cea4578f8aef0d78d0576c48b70a5
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/lt.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'lt', {
+	acccessKey: 'Prieigos raktas',
+	advanced: 'Papildomas',
+	advisoryContentType: 'Konsultacinio turinio tipas',
+	advisoryTitle: 'Konsultacinė antraštė',
+	anchor: {
+		toolbar: 'Įterpti/modifikuoti žymę',
+		menu: 'Žymės savybės',
+		title: 'Žymės savybės',
+		name: 'Žymės vardas',
+		errorName: 'Prašome įvesti žymės vardą',
+		remove: 'Pašalinti žymę'
+	},
+	anchorId: 'Pagal žymės Id',
+	anchorName: 'Pagal žymės vardą',
+	charset: 'Susietų išteklių simbolių lentelė',
+	cssClasses: 'Stilių lentelės klasės',
+	download: 'Force Download', // MISSING
+	displayText: 'Display Text', // MISSING
+	emailAddress: 'El.pašto adresas',
+	emailBody: 'Žinutės turinys',
+	emailSubject: 'Žinutės tema',
+	id: 'Id',
+	info: 'Nuorodos informacija',
+	langCode: 'Teksto kryptis',
+	langDir: 'Teksto kryptis',
+	langDirLTR: 'Iš kairės į dešinę (LTR)',
+	langDirRTL: 'Iš dešinės į kairę (RTL)',
+	menu: 'Taisyti nuorodÄ…',
+	name: 'Vardas',
+	noAnchors: '(Šiame dokumente žymių nėra)',
+	noEmail: 'Prašome įvesti el.pašto adresą',
+	noUrl: 'Prašome įvesti nuorodos URL',
+	noTel: 'Please type the phone number', // MISSING
+	other: '<kitas>',
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'Priklausomas (Netscape)',
+	popupFeatures: 'Išskleidžiamo lango savybės',
+	popupFullScreen: 'Visas ekranas (IE)',
+	popupLeft: 'KairÄ— pozicija',
+	popupLocationBar: 'Adreso juosta',
+	popupMenuBar: 'Meniu juosta',
+	popupResizable: 'Kintamas dydis',
+	popupScrollBars: 'Slinkties juostos',
+	popupStatusBar: 'BÅ«senos juosta',
+	popupToolbar: 'Mygtukų juosta',
+	popupTop: 'Viršutinė pozicija',
+	rel: 'SÄ…sajos',
+	selectAnchor: 'Pasirinkite žymę',
+	styles: 'Stilius',
+	tabIndex: 'Tabuliavimo indeksas',
+	target: 'Paskirties vieta',
+	targetFrame: '<kadras>',
+	targetFrameName: 'Paskirties kadro vardas',
+	targetPopup: '<išskleidžiamas langas>',
+	targetPopupName: 'Paskirties lango vardas',
+	title: 'Nuoroda',
+	toAnchor: 'Žymė šiame puslapyje',
+	toEmail: 'El.paštas',
+	toUrl: 'Nuoroda',
+	toPhone: 'Phone', // MISSING
+	toolbar: 'Įterpti/taisyti nuorodą',
+	type: 'Nuorodos tipas',
+	unlink: 'Panaikinti nuorodÄ…',
+	upload: 'Siųsti'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/lv.js b/libraries/ckeditor/plugins/link/lang/lv.js
new file mode 100644
index 0000000000000000000000000000000000000000..f90d2981ed7f57cc85ca2dbf693072393b7392d9
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/lv.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'lv', {
+	acccessKey: 'Pieejas taustiņš',
+	advanced: 'Izvērstais',
+	advisoryContentType: 'Konsultatīvs satura tips',
+	advisoryTitle: 'Konsultatīvs virsraksts',
+	anchor: {
+		toolbar: 'Ievietot/Labot iezīmi',
+		menu: 'Labot iezīmi',
+		title: 'Iezīmes uzstādījumi',
+		name: 'Iezīmes nosaukums',
+		errorName: 'Lūdzu norādiet iezīmes nosaukumu',
+		remove: 'Noņemt iezīmi'
+	},
+	anchorId: 'PÄ“c elementa ID',
+	anchorName: 'Pēc iezīmes nosaukuma',
+	charset: 'Pievienotā resursa kodējums',
+	cssClasses: 'Stilu saraksta klases',
+	download: 'Piespiedu ielāde',
+	displayText: 'Attēlot tekstu',
+	emailAddress: 'E-pasta adrese',
+	emailBody: 'Ziņojuma pamatteksts',
+	emailSubject: 'Ziņojuma tēma',
+	id: 'ID',
+	info: 'Saites informācija',
+	langCode: 'Valodas kods',
+	langDir: 'Valodas lasīšanas virziens',
+	langDirLTR: 'No kreisās uz labo (LTR)',
+	langDirRTL: 'No labās uz kreiso (RTL)',
+	menu: 'Rediģēt saiti',
+	name: 'Nosaukums',
+	noAnchors: '(Šajā dokumentā nav iezīmju)',
+	noEmail: 'LÅ«dzu, ievadiet e-pasta adresi',
+	noUrl: 'LÅ«dzu, ievadiet saites URL',
+	noTel: 'Lūdzu, ievadiet tālruņa numuru',
+	other: '<cits>',
+	phoneNumber: 'Tālruņa numurs',
+	popupDependent: 'Atkarīgs (Netscape)',
+	popupFeatures: 'Uznirstošā loga nosaukums īpašības',
+	popupFullScreen: 'Pilnā ekrānā (IE)',
+	popupLeft: 'Kreisā koordināte',
+	popupLocationBar: 'Atrašanās vietas josla',
+	popupMenuBar: 'Izvēlnes josla',
+	popupResizable: 'MÄ“rogojams',
+	popupScrollBars: 'Ritjoslas',
+	popupStatusBar: 'Statusa josla',
+	popupToolbar: 'RÄ«ku josla',
+	popupTop: 'Augšējā koordināte',
+	rel: 'Relācija',
+	selectAnchor: 'Izvēlēties iezīmi',
+	styles: 'Stils',
+	tabIndex: 'Ciļņu indekss',
+	target: 'MÄ“rÄ·is',
+	targetFrame: '<ietvars>',
+	targetFrameName: 'MÄ“rÄ·a ietvara nosaukums',
+	targetPopup: '<uznirstošā logā>',
+	targetPopupName: 'Uznirstošā loga nosaukums',
+	title: 'Saite',
+	toAnchor: 'Iezīme šajā lapā',
+	toEmail: 'E-pasts',
+	toUrl: 'Adrese',
+	toPhone: 'Tālrunis',
+	toolbar: 'Saite',
+	type: 'Saites tips',
+	unlink: 'Atsaistīt',
+	upload: 'Augšupielādēt'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/mk.js b/libraries/ckeditor/plugins/link/lang/mk.js
new file mode 100644
index 0000000000000000000000000000000000000000..84f96af60aa4f475eeac979d09d1f61967b470e9
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/mk.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'mk', {
+	acccessKey: 'Access Key', // MISSING
+	advanced: 'Advanced', // MISSING
+	advisoryContentType: 'Advisory Content Type', // MISSING
+	advisoryTitle: 'Advisory Title', // MISSING
+	anchor: {
+		toolbar: 'Anchor',
+		menu: 'Edit Anchor',
+		title: 'Anchor Properties',
+		name: 'Anchor Name',
+		errorName: 'Please type the anchor name',
+		remove: 'Remove Anchor'
+	},
+	anchorId: 'By Element Id', // MISSING
+	anchorName: 'By Anchor Name', // MISSING
+	charset: 'Linked Resource Charset', // MISSING
+	cssClasses: 'Stylesheet Classes', // MISSING
+	download: 'Force Download', // MISSING
+	displayText: 'Display Text', // MISSING
+	emailAddress: 'E-Mail Address', // MISSING
+	emailBody: 'Message Body', // MISSING
+	emailSubject: 'Message Subject', // MISSING
+	id: 'Id',
+	info: 'Link Info', // MISSING
+	langCode: 'Код на јазик',
+	langDir: 'Насока на јазик',
+	langDirLTR: 'Лево кон десно',
+	langDirRTL: 'Десно кон лево',
+	menu: 'Edit Link', // MISSING
+	name: 'Name',
+	noAnchors: '(No anchors available in the document)', // MISSING
+	noEmail: 'Please type the e-mail address', // MISSING
+	noUrl: 'Please type the link URL', // MISSING
+	noTel: 'Please type the phone number', // MISSING
+	other: '<other>', // MISSING
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'Dependent (Netscape)', // MISSING
+	popupFeatures: 'Popup Window Features', // MISSING
+	popupFullScreen: 'Full Screen (IE)', // MISSING
+	popupLeft: 'Left Position', // MISSING
+	popupLocationBar: 'Location Bar', // MISSING
+	popupMenuBar: 'Menu Bar', // MISSING
+	popupResizable: 'Resizable', // MISSING
+	popupScrollBars: 'Scroll Bars', // MISSING
+	popupStatusBar: 'Status Bar', // MISSING
+	popupToolbar: 'Toolbar', // MISSING
+	popupTop: 'Top Position', // MISSING
+	rel: 'Relationship', // MISSING
+	selectAnchor: 'Select an Anchor', // MISSING
+	styles: 'Стил',
+	tabIndex: 'Tab Index', // MISSING
+	target: 'Target', // MISSING
+	targetFrame: '<frame>', // MISSING
+	targetFrameName: 'Target Frame Name', // MISSING
+	targetPopup: '<popup window>', // MISSING
+	targetPopupName: 'Popup Window Name', // MISSING
+	title: 'Врска',
+	toAnchor: 'Link to anchor in the text', // MISSING
+	toEmail: 'E-mail', // MISSING
+	toUrl: 'URL',
+	toPhone: 'Phone', // MISSING
+	toolbar: 'Врска',
+	type: 'Link Type', // MISSING
+	unlink: 'Unlink', // MISSING
+	upload: 'Прикачи'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/mn.js b/libraries/ckeditor/plugins/link/lang/mn.js
new file mode 100644
index 0000000000000000000000000000000000000000..df53ce65237cc59015d7c9daa668e55d055fee24
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/mn.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'mn', {
+	acccessKey: 'Холбох түлхүүр',
+	advanced: 'Нэмэлт',
+	advisoryContentType: 'Зөвлөлдөх төрлийн агуулга',
+	advisoryTitle: 'Зөвлөлдөх гарчиг',
+	anchor: {
+		toolbar: 'Зангуу',
+		menu: 'Зангууг болосруулах',
+		title: 'Зангуугийн шинж чанар',
+		name: 'Зангуугийн нэр',
+		errorName: 'Зангуугийн нэрийг оруулна уу',
+		remove: 'Зангууг устгах'
+	},
+	anchorId: 'Элемэнтйн Id нэрээр',
+	anchorName: 'Зангуугийн нэрээр',
+	charset: 'Тэмдэгт оноох нөөцөд холбогдсон',
+	cssClasses: 'Stylesheet классууд',
+	download: 'Force Download', // MISSING
+	displayText: 'Display Text', // MISSING
+	emailAddress: 'Э-шуудангийн хаяг',
+	emailBody: 'Зурвасны их бие',
+	emailSubject: 'Зурвасны гарчиг',
+	id: 'Id',
+	info: 'Холбоосын тухай мэдээлэл',
+	langCode: 'Хэлний код',
+	langDir: 'Хэлний чиглэл',
+	langDirLTR: 'Зүүнээс баруун (LTR)',
+	langDirRTL: 'Баруунаас зүүн (RTL)',
+	menu: 'Холбоос засварлах',
+	name: 'Нэр',
+	noAnchors: '(Баримт бичиг зангуугүй байна)',
+	noEmail: 'Э-шуудангий хаягаа шивнэ үү',
+	noUrl: 'Холбоосны URL хаягийг шивнэ үү',
+	noTel: 'Please type the phone number', // MISSING
+	other: '<other>', // MISSING
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'Хамаатай (Netscape)',
+	popupFeatures: 'Popup цонхны онцлог',
+	popupFullScreen: 'Цонх дүүргэх (Internet Explorer)',
+	popupLeft: 'Зүүн байрлал',
+	popupLocationBar: 'Location хэсэг',
+	popupMenuBar: 'Цэсний самбар',
+	popupResizable: 'Resizable', // MISSING
+	popupScrollBars: 'Скрол хэсэгүүд',
+	popupStatusBar: 'Статус хэсэг',
+	popupToolbar: 'Багажны самбар',
+	popupTop: 'Дээд байрлал',
+	rel: 'Relationship', // MISSING
+	selectAnchor: 'Нэг зангууг сонгоно уу',
+	styles: 'Загвар',
+	tabIndex: 'Tab индекс',
+	target: 'Байрлал',
+	targetFrame: '<Агуулах хүрээ>',
+	targetFrameName: 'Очих фремын нэр',
+	targetPopup: '<popup цонх>',
+	targetPopupName: 'Popup цонхны нэр',
+	title: 'Холбоос',
+	toAnchor: 'Энэ бичвэр дэх зангуу руу очих холбоос',
+	toEmail: 'Э-захиа',
+	toUrl: 'цахим хуудасны хаяг (URL)',
+	toPhone: 'Phone', // MISSING
+	toolbar: 'Холбоос',
+	type: 'Линкийн төрөл',
+	unlink: 'Холбоос авч хаях',
+	upload: 'Хуулах'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/ms.js b/libraries/ckeditor/plugins/link/lang/ms.js
new file mode 100644
index 0000000000000000000000000000000000000000..6a967b364e15a4407b46bdd2463ad550232095c1
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/ms.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'ms', {
+	acccessKey: 'Kunci Akses',
+	advanced: 'Advanced',
+	advisoryContentType: 'Jenis Kandungan Makluman',
+	advisoryTitle: 'Tajuk Makluman',
+	anchor: {
+		toolbar: 'Masukkan/Sunting Pautan',
+		menu: 'Ciri-ciri Pautan',
+		title: 'Ciri-ciri Pautan',
+		name: 'Nama Pautan',
+		errorName: 'Sila taip nama pautan',
+		remove: 'Remove Anchor'
+	},
+	anchorId: 'dengan menggunakan ID elemen',
+	anchorName: 'dengan menggunakan nama pautan',
+	charset: 'Linked Resource Charset',
+	cssClasses: 'Kelas-kelas Stylesheet',
+	download: 'Force Download', // MISSING
+	displayText: 'Display Text', // MISSING
+	emailAddress: 'Alamat E-Mail',
+	emailBody: 'Isi Kandungan Mesej',
+	emailSubject: 'Subjek Mesej',
+	id: 'Id',
+	info: 'Butiran Sambungan',
+	langCode: 'Arah Tulisan',
+	langDir: 'Arah Tulisan',
+	langDirLTR: 'Kiri ke Kanan (LTR)',
+	langDirRTL: 'Kanan ke Kiri (RTL)',
+	menu: 'Sunting Sambungan',
+	name: 'Nama',
+	noAnchors: '(Tiada pautan terdapat dalam dokumen ini)',
+	noEmail: 'Sila taip alamat e-mail',
+	noUrl: 'Sila taip sambungan URL',
+	noTel: 'Please type the phone number', // MISSING
+	other: '<lain>',
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'Bergantungan (Netscape)',
+	popupFeatures: 'Ciri Tetingkap Popup',
+	popupFullScreen: 'Skrin Penuh (IE)',
+	popupLeft: 'Posisi Kiri',
+	popupLocationBar: 'Bar Lokasi',
+	popupMenuBar: 'Bar Menu',
+	popupResizable: 'Resizable', // MISSING
+	popupScrollBars: 'Bar-bar skrol',
+	popupStatusBar: 'Bar Status',
+	popupToolbar: 'Toolbar',
+	popupTop: 'Posisi Atas',
+	rel: 'Relationship', // MISSING
+	selectAnchor: 'Sila pilih pautan',
+	styles: 'Stail',
+	tabIndex: 'Indeks Tab ',
+	target: 'Sasaran',
+	targetFrame: '<bingkai>',
+	targetFrameName: 'Nama Bingkai Sasaran',
+	targetPopup: '<tetingkap popup>',
+	targetPopupName: 'Nama Tetingkap Popup',
+	title: 'Sambungan',
+	toAnchor: 'Pautan dalam muka surat ini',
+	toEmail: 'E-Mail',
+	toUrl: 'URL',
+	toPhone: 'Phone', // MISSING
+	toolbar: 'Masukkan/Sunting Sambungan',
+	type: 'Jenis Sambungan',
+	unlink: 'Buang Sambungan',
+	upload: 'Muat Naik'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/nb.js b/libraries/ckeditor/plugins/link/lang/nb.js
new file mode 100644
index 0000000000000000000000000000000000000000..e0509146e4a01bd2b766585db486f64f55604b2d
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/nb.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'nb', {
+	acccessKey: 'Aksessknapp',
+	advanced: 'Avansert',
+	advisoryContentType: 'Type',
+	advisoryTitle: 'Tittel',
+	anchor: {
+		toolbar: 'Anker',
+		menu: 'Rediger anker',
+		title: 'Egenskaper for anker',
+		name: 'Ankernavn',
+		errorName: 'Vennligst skriv inn ankernavnet',
+		remove: 'Fjern anker'
+	},
+	anchorId: 'Element etter ID',
+	anchorName: 'Anker etter navn',
+	charset: 'Lenket tegnsett',
+	cssClasses: 'Stilarkklasser',
+	download: 'Tving nedlasting',
+	displayText: 'Tekst som skal vises',
+	emailAddress: 'E-postadresse',
+	emailBody: 'Melding',
+	emailSubject: 'Meldingsemne',
+	id: 'Id',
+	info: 'Lenkeinfo',
+	langCode: 'Språkkode',
+	langDir: 'Språkretning',
+	langDirLTR: 'Venstre til høyre (LTR)',
+	langDirRTL: 'Høyre til venstre (RTL)',
+	menu: 'Rediger lenke',
+	name: 'Navn',
+	noAnchors: '(Ingen anker i dokumentet)',
+	noEmail: 'Vennligst skriv inn e-postadressen',
+	noUrl: 'Vennligst skriv inn lenkens URL',
+	noTel: 'Vennligst skriv inn telefonnummeret',
+	other: '<annen>',
+	phoneNumber: 'Telefonnummer',
+	popupDependent: 'Avhenging (Netscape)',
+	popupFeatures: 'Egenskaper for popup-vindu',
+	popupFullScreen: 'Fullskjerm (IE)',
+	popupLeft: 'Venstre posisjon',
+	popupLocationBar: 'Adresselinje',
+	popupMenuBar: 'Menylinje',
+	popupResizable: 'Skalerbar',
+	popupScrollBars: 'Scrollbar',
+	popupStatusBar: 'Statuslinje',
+	popupToolbar: 'Verktøylinje',
+	popupTop: 'Topp-posisjon',
+	rel: 'Relasjon (rel)',
+	selectAnchor: 'Velg et anker',
+	styles: 'Stil',
+	tabIndex: 'Tabindeks',
+	target: 'MÃ¥l',
+	targetFrame: '<ramme>',
+	targetFrameName: 'MÃ¥lramme',
+	targetPopup: '<popup-vindu>',
+	targetPopupName: 'Navn på popup-vindu',
+	title: 'Lenke',
+	toAnchor: 'Lenke til anker i teksten',
+	toEmail: 'E-post',
+	toUrl: 'URL',
+	toPhone: 'Telefon',
+	toolbar: 'Lenke',
+	type: 'Lenketype',
+	unlink: 'Fjern lenke',
+	upload: 'Last opp'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/nl.js b/libraries/ckeditor/plugins/link/lang/nl.js
new file mode 100644
index 0000000000000000000000000000000000000000..f0b6de0ead3f75cde3edcf668b6228f858ace5f4
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/nl.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'nl', {
+	acccessKey: 'Toegangstoets',
+	advanced: 'Geavanceerd',
+	advisoryContentType: 'Aanbevolen content-type',
+	advisoryTitle: 'Adviserende titel',
+	anchor: {
+		toolbar: 'Interne link',
+		menu: 'Eigenschappen interne link',
+		title: 'Eigenschappen interne link',
+		name: 'Naam interne link',
+		errorName: 'Geef de naam van de interne link op',
+		remove: 'Interne link verwijderen'
+	},
+	anchorId: 'Op kenmerk interne link',
+	anchorName: 'Op naam interne link',
+	charset: 'Karakterset van gelinkte bron',
+	cssClasses: 'Stylesheet-klassen',
+	download: 'Download forceren',
+	displayText: 'Weergavetekst',
+	emailAddress: 'E-mailadres',
+	emailBody: 'Inhoud bericht',
+	emailSubject: 'Onderwerp bericht',
+	id: 'Id',
+	info: 'Linkomschrijving',
+	langCode: 'Taalcode',
+	langDir: 'Schrijfrichting',
+	langDirLTR: 'Links naar rechts (LTR)',
+	langDirRTL: 'Rechts naar links (RTL)',
+	menu: 'Link wijzigen',
+	name: 'Naam',
+	noAnchors: '(Geen interne links in document gevonden)',
+	noEmail: 'Geef een e-mailadres',
+	noUrl: 'Geef de link van de URL',
+	noTel: 'Geef een telefoonnummer',
+	other: '<ander>',
+	phoneNumber: 'Telefoonnummer',
+	popupDependent: 'Afhankelijk (Netscape)',
+	popupFeatures: 'Instellingen popupvenster',
+	popupFullScreen: 'Volledig scherm (IE)',
+	popupLeft: 'Positie links',
+	popupLocationBar: 'Locatiemenu',
+	popupMenuBar: 'Menubalk',
+	popupResizable: 'Herschaalbaar',
+	popupScrollBars: 'Schuifbalken',
+	popupStatusBar: 'Statusbalk',
+	popupToolbar: 'Werkbalk',
+	popupTop: 'Positie boven',
+	rel: 'Relatie',
+	selectAnchor: 'Kies een interne link',
+	styles: 'Stijl',
+	tabIndex: 'Tabvolgorde',
+	target: 'Doelvenster',
+	targetFrame: '<frame>',
+	targetFrameName: 'Naam doelframe',
+	targetPopup: '<popupvenster>',
+	targetPopupName: 'Naam popupvenster',
+	title: 'Link',
+	toAnchor: 'Interne link in pagina',
+	toEmail: 'E-mail',
+	toUrl: 'URL',
+	toPhone: 'Telefoon',
+	toolbar: 'Link invoegen/wijzigen',
+	type: 'Linktype',
+	unlink: 'Link verwijderen',
+	upload: 'Upload'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/no.js b/libraries/ckeditor/plugins/link/lang/no.js
new file mode 100644
index 0000000000000000000000000000000000000000..0e4981b5a5114109ca204e9073ed1e2cf08d8697
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/no.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'no', {
+	acccessKey: 'Aksessknapp',
+	advanced: 'Avansert',
+	advisoryContentType: 'Type',
+	advisoryTitle: 'Tittel',
+	anchor: {
+		toolbar: 'Sett inn/Rediger anker',
+		menu: 'Egenskaper for anker',
+		title: 'Egenskaper for anker',
+		name: 'Ankernavn',
+		errorName: 'Vennligst skriv inn ankernavnet',
+		remove: 'Fjern anker'
+	},
+	anchorId: 'Element etter ID',
+	anchorName: 'Anker etter navn',
+	charset: 'Lenket tegnsett',
+	cssClasses: 'Stilarkklasser',
+	download: 'Force Download', // MISSING
+	displayText: 'Tekst som skal vises',
+	emailAddress: 'E-postadresse',
+	emailBody: 'Melding',
+	emailSubject: 'Meldingsemne',
+	id: 'Id',
+	info: 'Lenkeinfo',
+	langCode: 'Språkkode',
+	langDir: 'Språkretning',
+	langDirLTR: 'Venstre til høyre (VTH)',
+	langDirRTL: 'Høyre til venstre (HTV)',
+	menu: 'Rediger lenke',
+	name: 'Navn',
+	noAnchors: '(Ingen anker i dokumentet)',
+	noEmail: 'Vennligst skriv inn e-postadressen',
+	noUrl: 'Vennligst skriv inn lenkens URL',
+	noTel: 'Skriv inn telefonnummer',
+	other: '<annen>',
+	phoneNumber: 'Telefonnummer',
+	popupDependent: 'Avhenging (Netscape)',
+	popupFeatures: 'Egenskaper for popup-vindu',
+	popupFullScreen: 'Fullskjerm (IE)',
+	popupLeft: 'Venstre posisjon',
+	popupLocationBar: 'Adresselinje',
+	popupMenuBar: 'Menylinje',
+	popupResizable: 'Skalerbar',
+	popupScrollBars: 'Scrollbar',
+	popupStatusBar: 'Statuslinje',
+	popupToolbar: 'Verktøylinje',
+	popupTop: 'Topp-posisjon',
+	rel: 'Relasjon (rel)',
+	selectAnchor: 'Velg et anker',
+	styles: 'Stil',
+	tabIndex: 'Tabindeks',
+	target: 'MÃ¥l',
+	targetFrame: '<ramme>',
+	targetFrameName: 'MÃ¥lramme',
+	targetPopup: '<popup-vindu>',
+	targetPopupName: 'Navn på popup-vindu',
+	title: 'Lenke',
+	toAnchor: 'Lenke til anker i teksten',
+	toEmail: 'E-post',
+	toUrl: 'URL',
+	toPhone: 'Telefon',
+	toolbar: 'Sett inn/Rediger lenke',
+	type: 'Lenketype',
+	unlink: 'Fjern lenke',
+	upload: 'Last opp'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/oc.js b/libraries/ckeditor/plugins/link/lang/oc.js
new file mode 100644
index 0000000000000000000000000000000000000000..0f219359681e23fcdf53d089f9c1da3611fdd99f
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/oc.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'oc', {
+	acccessKey: 'Tòca d\'accessibilitat',
+	advanced: 'Avançat',
+	advisoryContentType: 'Tipe de contengut (indicatiu)',
+	advisoryTitle: 'Infobulla',
+	anchor: {
+		toolbar: 'Ancòra',
+		menu: 'Modificar l\'ancòra',
+		title: 'Proprietats de l\'ancòra',
+		name: 'Nom de l\'ancòra',
+		errorName: 'Entratz lo nom de l\'ancòra',
+		remove: 'Suprimir l\'ancòra'
+	},
+	anchorId: 'Per ID d\'element',
+	anchorName: 'Per nom d\'ancòra',
+	charset: 'Encodatge de la ressorsa ligada',
+	cssClasses: 'Classas d\'estil',
+	download: 'Forçar lo telecargament',
+	displayText: 'Afichar lo tèxte',
+	emailAddress: 'Adreça electronica',
+	emailBody: 'Còs del messatge',
+	emailSubject: 'Subjècte del messatge',
+	id: 'Id',
+	info: 'Informacions sul ligam',
+	langCode: 'Còdi de lenga',
+	langDir: 'Sens d\'escritura',
+	langDirLTR: 'Esquèrra a dreita (LTR)',
+	langDirRTL: 'Dreita a esquèrra (RTL)',
+	menu: 'Modificar lo ligam',
+	name: 'Nom',
+	noAnchors: '(Cap d\'ancòra pas disponibla dins aqueste document)',
+	noEmail: 'Entratz l\'adreça electronica',
+	noUrl: 'Entratz l\'URL del ligam',
+	noTel: 'Please type the phone number', // MISSING
+	other: '<autre>',
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'Dependenta (Netscape)',
+	popupFeatures: 'Caracteristicas de la fenèstra sorgissenta',
+	popupFullScreen: 'Ecran complet (IE)',
+	popupLeft: 'A esquèrra',
+	popupLocationBar: 'Barra d\'adreça',
+	popupMenuBar: 'Barra de menú',
+	popupResizable: 'Redimensionable',
+	popupScrollBars: 'Barras de desfilament',
+	popupStatusBar: 'Barra d\'estat',
+	popupToolbar: 'Barra d\'aisinas',
+	popupTop: 'Amont',
+	rel: 'Relacion',
+	selectAnchor: 'Seleccionar una ancòra',
+	styles: 'Estil',
+	tabIndex: 'Indici de tabulacion',
+	target: 'Cibla',
+	targetFrame: '<quadre>',
+	targetFrameName: 'Nom del quadre afectat',
+	targetPopup: '<fenèstra sorgissenta>',
+	targetPopupName: 'Nom de la fenèstra sorgissenta',
+	title: 'Ligam',
+	toAnchor: 'Ancòra',
+	toEmail: 'Corrièl',
+	toUrl: 'URL',
+	toPhone: 'Phone', // MISSING
+	toolbar: 'Ligam',
+	type: 'Tipe de ligam',
+	unlink: 'Suprimir lo ligam',
+	upload: 'Mandar'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/pl.js b/libraries/ckeditor/plugins/link/lang/pl.js
new file mode 100644
index 0000000000000000000000000000000000000000..3d27329dbc7d1b9e55fcc5b37a56820c6b362dc8
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/pl.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'pl', {
+	acccessKey: 'Klawisz dostępu',
+	advanced: 'Zaawansowane',
+	advisoryContentType: 'Typ MIME obiektu docelowego',
+	advisoryTitle: 'Opis obiektu docelowego',
+	anchor: {
+		toolbar: 'Wstaw/edytuj kotwicÄ™',
+		menu: 'Właściwości kotwicy',
+		title: 'Właściwości kotwicy',
+		name: 'Nazwa kotwicy',
+		errorName: 'Podaj nazwÄ™ kotwicy.',
+		remove: 'Usuń kotwicę'
+	},
+	anchorId: 'Wg identyfikatora',
+	anchorName: 'Wg nazwy',
+	charset: 'Kodowanie znaków obiektu docelowego',
+	cssClasses: 'Nazwa klasy CSS',
+	download: 'WymuÅ› pobieranie',
+	displayText: 'Wyświetlany tekst',
+	emailAddress: 'Adres e-mail',
+	emailBody: 'Treść',
+	emailSubject: 'Temat',
+	id: 'Id',
+	info: 'Informacje ',
+	langCode: 'Kod języka',
+	langDir: 'Kierunek tekstu',
+	langDirLTR: 'Od lewej do prawej (LTR)',
+	langDirRTL: 'Od prawej do lewej (RTL)',
+	menu: 'Edytuj odnośnik',
+	name: 'Nazwa',
+	noAnchors: '(W dokumencie nie zdefiniowano żadnych kotwic)',
+	noEmail: 'Podaj adres e-mail.',
+	noUrl: 'Podaj adres URL.',
+	noTel: 'Podaj numer telefonu.',
+	other: '<inny>',
+	phoneNumber: 'Numer telefonu',
+	popupDependent: 'Okno zależne (Netscape)',
+	popupFeatures: 'Właściwości wyskakującego okna',
+	popupFullScreen: 'Pełny ekran (IE)',
+	popupLeft: 'Pozycja w poziomie',
+	popupLocationBar: 'Pasek adresu',
+	popupMenuBar: 'Pasek menu',
+	popupResizable: 'Skalowalny',
+	popupScrollBars: 'Paski przewijania',
+	popupStatusBar: 'Pasek statusu',
+	popupToolbar: 'Pasek narzędzi',
+	popupTop: 'Pozycja w pionie',
+	rel: 'Relacja',
+	selectAnchor: 'Wybierz kotwicÄ™',
+	styles: 'Styl',
+	tabIndex: 'Indeks kolejności',
+	target: 'Obiekt docelowy',
+	targetFrame: '<ramka>',
+	targetFrameName: 'Nazwa ramki docelowej',
+	targetPopup: '<wyskakujÄ…ce okno>',
+	targetPopupName: 'Nazwa wyskakujÄ…cego okna',
+	title: 'Odnośnik',
+	toAnchor: 'Odnośnik wewnątrz strony (kotwica)',
+	toEmail: 'Adres e-mail',
+	toUrl: 'Adres URL',
+	toPhone: 'Telefon',
+	toolbar: 'Wstaw/edytuj odnośnik',
+	type: 'Typ odnośnika',
+	unlink: 'Usuń odnośnik',
+	upload: 'Wyślij'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/pt-br.js b/libraries/ckeditor/plugins/link/lang/pt-br.js
new file mode 100644
index 0000000000000000000000000000000000000000..b66be5736f91038d33f53933145655f7cc3ec2b3
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/pt-br.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'pt-br', {
+	acccessKey: 'Chave de Acesso',
+	advanced: 'Avançado',
+	advisoryContentType: 'Tipo de Conteúdo',
+	advisoryTitle: 'Título',
+	anchor: {
+		toolbar: 'Inserir/Editar Âncora',
+		menu: 'Formatar Âncora',
+		title: 'Formatar Âncora',
+		name: 'Nome da Âncora',
+		errorName: 'Por favor, digite o nome da âncora',
+		remove: 'Remover Âncora'
+	},
+	anchorId: 'Id da âncora',
+	anchorName: 'Nome da âncora',
+	charset: 'Charset do Link',
+	cssClasses: 'Classe de CSS',
+	download: 'Forçar Download',
+	displayText: 'Exibir Texto',
+	emailAddress: 'Endereço E-Mail',
+	emailBody: 'Corpo da Mensagem',
+	emailSubject: 'Assunto da Mensagem',
+	id: 'Id',
+	info: 'Informações',
+	langCode: 'Direção do idioma',
+	langDir: 'Direção do idioma',
+	langDirLTR: 'Esquerda para Direita (LTR)',
+	langDirRTL: 'Direita para Esquerda (RTL)',
+	menu: 'Editar Link',
+	name: 'Nome',
+	noAnchors: '(Não há âncoras no documento)',
+	noEmail: 'Por favor, digite o endereço de e-mail',
+	noUrl: 'Por favor, digite o endereço do Link',
+	noTel: 'Por favor, informe o número do telefone',
+	other: '<outro>',
+	phoneNumber: 'Número de telefone',
+	popupDependent: 'Dependente (Netscape)',
+	popupFeatures: 'Propriedades da Janela Pop-up',
+	popupFullScreen: 'Modo Tela Cheia (IE)',
+	popupLeft: 'Esquerda',
+	popupLocationBar: 'Barra de Endereços',
+	popupMenuBar: 'Barra de Menus',
+	popupResizable: 'Redimensionável',
+	popupScrollBars: 'Barras de Rolagem',
+	popupStatusBar: 'Barra de Status',
+	popupToolbar: 'Barra de Ferramentas',
+	popupTop: 'Topo',
+	rel: 'Tipo de Relação',
+	selectAnchor: 'Selecione uma âncora',
+	styles: 'Estilos',
+	tabIndex: 'Índice de Tabulação',
+	target: 'Destino',
+	targetFrame: '<frame>',
+	targetFrameName: 'Nome do Frame de Destino',
+	targetPopup: '<janela popup>',
+	targetPopupName: 'Nome da Janela Pop-up',
+	title: 'Editar Link',
+	toAnchor: 'Âncora nesta página',
+	toEmail: 'E-Mail',
+	toUrl: 'URL',
+	toPhone: 'Telefone',
+	toolbar: 'Inserir/Editar Link',
+	type: 'Tipo de hiperlink',
+	unlink: 'Remover Link',
+	upload: 'Enviar ao Servidor'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/pt.js b/libraries/ckeditor/plugins/link/lang/pt.js
new file mode 100644
index 0000000000000000000000000000000000000000..de3f3f49b7d92210d5e4e808091ef49dc926b411
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/pt.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'pt', {
+	acccessKey: 'Chave de acesso',
+	advanced: 'Avançado',
+	advisoryContentType: 'Tipo de conteúdo',
+	advisoryTitle: 'Título',
+	anchor: {
+		toolbar: ' Inserir/Editar âncora',
+		menu: 'Propriedades da âncora',
+		title: 'Propriedades da âncora',
+		name: 'Nome da âncora',
+		errorName: 'Por favor, introduza o nome da âncora',
+		remove: 'Remover âncora'
+	},
+	anchorId: 'Por ID do elemento',
+	anchorName: 'Por Nome de Referência',
+	charset: 'Fonte de caracteres vinculado',
+	cssClasses: 'Classes de Estilo',
+	download: 'Force Download', // MISSING
+	displayText: 'Mostrar texto',
+	emailAddress: 'Endereço de email',
+	emailBody: 'Corpo da mensagem',
+	emailSubject: 'Título de mensagem',
+	id: 'ID',
+	info: 'Informação da hiperligação',
+	langCode: 'Código de idioma',
+	langDir: 'Orientação de idioma',
+	langDirLTR: 'Esquerda para a Direita (EPD)',
+	langDirRTL: 'Direita para a Esquerda (DPE)',
+	menu: 'Editar hiperligação',
+	name: 'Nome',
+	noAnchors: '(Não existem âncoras no documento)',
+	noEmail: 'Por favor, escreva o endereço de email',
+	noUrl: 'Por favor, introduza o endereço URL',
+	noTel: 'Por favor, escreva o número de telefone',
+	other: '<outro>',
+	phoneNumber: 'Número de telefone',
+	popupDependent: 'Dependente (Netscape)',
+	popupFeatures: 'Características de janela flutuante',
+	popupFullScreen: 'Janela completa (IE)',
+	popupLeft: 'Posição esquerda',
+	popupLocationBar: 'Barra de localização',
+	popupMenuBar: 'Barra de menu',
+	popupResizable: 'Redimensionável',
+	popupScrollBars: 'Barras de deslocamento',
+	popupStatusBar: 'Barra de estado',
+	popupToolbar: 'Barra de ferramentas',
+	popupTop: 'Posição topo',
+	rel: 'Relação',
+	selectAnchor: 'Selecionar âncora',
+	styles: 'Estilo',
+	tabIndex: 'Índice de tabulação',
+	target: 'Alvo',
+	targetFrame: '<frame>',
+	targetFrameName: 'Nome da janela de destino',
+	targetPopup: '<janela de popup>',
+	targetPopupName: 'Nome da janela flutuante',
+	title: 'Hiperligação',
+	toAnchor: 'Ligar a âncora no texto',
+	toEmail: 'Email',
+	toUrl: 'URL',
+	toPhone: 'Telefone',
+	toolbar: 'Hiperligação',
+	type: 'Tipo de hiperligação',
+	unlink: 'Eliminar hiperligação',
+	upload: 'Carregar'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/ro.js b/libraries/ckeditor/plugins/link/lang/ro.js
new file mode 100644
index 0000000000000000000000000000000000000000..0d7bc490ad7ae3dc9e4d3d64208f3bd9e187f646
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/ro.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'ro', {
+	acccessKey: 'Tasta de acces',
+	advanced: 'Avansat',
+	advisoryContentType: 'Tipul consultativ al titlului',
+	advisoryTitle: 'Titlul consultativ',
+	anchor: {
+		toolbar: 'Inserează/Editează ancoră',
+		menu: 'Proprietăţi ancoră',
+		title: 'Proprietăţi ancoră',
+		name: 'Numele ancorei',
+		errorName: 'Vă rugăm scrieţi numele ancorei',
+		remove: 'Elimină ancora'
+	},
+	anchorId: 'după Id-ul elementului',
+	anchorName: 'după numele ancorei',
+	charset: 'Setul de caractere al resursei legate',
+	cssClasses: 'Clasele cu stilul paginii (CSS)',
+	download: 'descarcă',
+	displayText: 'afișează textul',
+	emailAddress: 'Adresă de e-mail',
+	emailBody: 'conținut email',
+	emailSubject: 'Subiectul mesajului',
+	id: 'identitate',
+	info: 'Informaţii despre link (Legătură web)',
+	langCode: 'Direcţia cuvintelor',
+	langDir: 'Direcţia cuvintelor',
+	langDirLTR: 'de la stânga la dreapta (LTR)',
+	langDirRTL: 'de la dreapta la stânga (RTL)',
+	menu: 'Editează Link',
+	name: 'Nume',
+	noAnchors: 'Nu există nici o ancoră',
+	noEmail: 'Vă rugăm să scrieţi adresa de e-mail',
+	noUrl: 'Vă rugăm să scrieţi URL-ul',
+	noTel: 'Please type the phone number', // MISSING
+	other: 'altceva',
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'Dependent (Netscape)',
+	popupFeatures: 'Proprietăţile ferestrei popup',
+	popupFullScreen: 'Tot ecranul (Full Screen)(IE)',
+	popupLeft: 'Poziţia la stânga',
+	popupLocationBar: 'Bara de locaţie',
+	popupMenuBar: 'Bara de meniu',
+	popupResizable: 'Redimensionabil',
+	popupScrollBars: 'Bare de derulare',
+	popupStatusBar: 'Bara de stare',
+	popupToolbar: 'Bara de opţiuni',
+	popupTop: 'Poziţia la dreapta',
+	rel: 'Relaționare',
+	selectAnchor: 'Selectaţi o ancoră',
+	styles: 'Stil',
+	tabIndex: 'Indexul tabului',
+	target: 'Ţintă (Target)',
+	targetFrame: 'frame țintă',
+	targetFrameName: 'Numele frameului ţintă',
+	targetPopup: 'popup țintă',
+	targetPopupName: 'Numele ferestrei popup',
+	title: 'titlu',
+	toAnchor: 'Ancoră în această pagină',
+	toEmail: 'E-Mail',
+	toUrl: 'URL',
+	toPhone: 'Phone', // MISSING
+	toolbar: 'Inserează/Editează link (legătură web)',
+	type: 'Tipul link-ului (al legăturii web)',
+	unlink: 'Înlătură link (legătură web)',
+	upload: 'Încarcă'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/ru.js b/libraries/ckeditor/plugins/link/lang/ru.js
new file mode 100644
index 0000000000000000000000000000000000000000..262337b90e5336d1bfc25300fabbd972cb07e5cb
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/ru.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'ru', {
+	acccessKey: 'Клавиша доступа',
+	advanced: 'Дополнительно',
+	advisoryContentType: 'Тип содержимого',
+	advisoryTitle: 'Заголовок',
+	anchor: {
+		toolbar: 'Вставить / редактировать якорь',
+		menu: 'Изменить якорь',
+		title: 'Свойства якоря',
+		name: 'Имя якоря',
+		errorName: 'Пожалуйста, введите имя якоря',
+		remove: 'Удалить якорь'
+	},
+	anchorId: 'По идентификатору',
+	anchorName: 'По имени',
+	charset: 'Кодировка ресурса',
+	cssClasses: 'Классы CSS',
+	download: 'Скачать как файл',
+	displayText: 'Отображаемый текст',
+	emailAddress: 'Email адрес',
+	emailBody: 'Текст сообщения',
+	emailSubject: 'Тема сообщения',
+	id: 'Идентификатор',
+	info: 'Информация о ссылке',
+	langCode: 'Код языка',
+	langDir: 'Направление текста',
+	langDirLTR: 'Слева направо (LTR)',
+	langDirRTL: 'Справа налево (RTL)',
+	menu: 'Редактировать ссылку',
+	name: 'Имя',
+	noAnchors: '(В документе нет ни одного якоря)',
+	noEmail: 'Пожалуйста, введите email адрес',
+	noUrl: 'Пожалуйста, введите ссылку',
+	noTel: 'Please type the phone number', // MISSING
+	other: '<другой>',
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'Зависимое (Netscape)',
+	popupFeatures: 'Параметры всплывающего окна',
+	popupFullScreen: 'Полноэкранное (IE)',
+	popupLeft: 'Отступ слева',
+	popupLocationBar: 'Панель адреса',
+	popupMenuBar: 'Панель меню',
+	popupResizable: 'Изменяемый размер',
+	popupScrollBars: 'Полосы прокрутки',
+	popupStatusBar: 'Строка состояния',
+	popupToolbar: 'Панель инструментов',
+	popupTop: 'Отступ сверху',
+	rel: 'Отношение',
+	selectAnchor: 'Выберите якорь',
+	styles: 'Стиль',
+	tabIndex: 'Последовательность перехода',
+	target: 'Цель',
+	targetFrame: '<фрейм>',
+	targetFrameName: 'Имя целевого фрейма',
+	targetPopup: '<всплывающее окно>',
+	targetPopupName: 'Имя всплывающего окна',
+	title: 'Ссылка',
+	toAnchor: 'Ссылка на якорь в тексте',
+	toEmail: 'Email',
+	toUrl: 'Ссылка',
+	toPhone: 'Phone', // MISSING
+	toolbar: 'Вставить/Редактировать ссылку',
+	type: 'Тип ссылки',
+	unlink: 'Убрать ссылку',
+	upload: 'Загрузка'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/si.js b/libraries/ckeditor/plugins/link/lang/si.js
new file mode 100644
index 0000000000000000000000000000000000000000..1f4870beb946ff10d6c8fe0faf2d1cc26c80da80
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/si.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'si', {
+	acccessKey: 'ප්‍රවේශ  යතුර',
+	advanced: 'දීය',
+	advisoryContentType: 'උපදේශාත්මක අන්තර්ගත ආකාරය',
+	advisoryTitle: 'උපදේශාත්මක නාමය',
+	anchor: {
+		toolbar: 'ආධාරය',
+		menu: 'ආධාරය වෙනස් කිරීම',
+		title: 'ආධාරක ',
+		name: 'ආධාරකයේ නාමය',
+		errorName: 'කරුණාකර ආධාරකයේ නාමය ඇතුල් කරන්න',
+		remove: 'ආධාරකය ඉවත් කිරීම'
+	},
+	anchorId: 'By Element Id', // MISSING
+	anchorName: 'By Anchor Name', // MISSING
+	charset: 'Linked Resource Charset', // MISSING
+	cssClasses: 'විලාසපත්‍ර පන්තිය',
+	download: 'Force Download', // MISSING
+	displayText: 'Display Text', // MISSING
+	emailAddress: 'E-Mail Address', // MISSING
+	emailBody: 'Message Body', // MISSING
+	emailSubject: 'Message Subject', // MISSING
+	id: 'අංකය',
+	info: 'Link Info', // MISSING
+	langCode: 'භාෂා කේතය',
+	langDir: 'භාෂා දිශාව',
+	langDirLTR: 'වමේසිට දකුණුට',
+	langDirRTL: 'දකුණේ සිට වමට',
+	menu: 'Edit Link', // MISSING
+	name: 'නම',
+	noAnchors: '(No anchors available in the document)', // MISSING
+	noEmail: 'Please type the e-mail address', // MISSING
+	noUrl: 'Please type the link URL', // MISSING
+	noTel: 'Please type the phone number', // MISSING
+	other: '<other>', // MISSING
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'Dependent (Netscape)', // MISSING
+	popupFeatures: 'Popup Window Features', // MISSING
+	popupFullScreen: 'Full Screen (IE)', // MISSING
+	popupLeft: 'Left Position', // MISSING
+	popupLocationBar: 'Location Bar', // MISSING
+	popupMenuBar: 'Menu Bar', // MISSING
+	popupResizable: 'Resizable', // MISSING
+	popupScrollBars: 'Scroll Bars', // MISSING
+	popupStatusBar: 'Status Bar', // MISSING
+	popupToolbar: 'Toolbar', // MISSING
+	popupTop: 'Top Position', // MISSING
+	rel: 'Relationship', // MISSING
+	selectAnchor: 'Select an Anchor', // MISSING
+	styles: 'විලාසය',
+	tabIndex: 'Tab Index', // MISSING
+	target: 'අරමුණ',
+	targetFrame: '<frame>', // MISSING
+	targetFrameName: 'Target Frame Name', // MISSING
+	targetPopup: '<popup window>', // MISSING
+	targetPopupName: 'Popup Window Name', // MISSING
+	title: 'සබැඳිය',
+	toAnchor: 'Link to anchor in the text', // MISSING
+	toEmail: 'E-mail', // MISSING
+	toUrl: 'URL',
+	toPhone: 'Phone', // MISSING
+	toolbar: 'සබැඳිය',
+	type: 'Link Type', // MISSING
+	unlink: 'Unlink', // MISSING
+	upload: 'උඩුගතකිරීම'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/sk.js b/libraries/ckeditor/plugins/link/lang/sk.js
new file mode 100644
index 0000000000000000000000000000000000000000..ed27b8d1154bcf3a2caec37643abb0980a9ce8aa
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/sk.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'sk', {
+	acccessKey: 'Prístupový kľúč',
+	advanced: 'Rozšírené',
+	advisoryContentType: 'Pomocný typ obsahu',
+	advisoryTitle: 'Pomocný titulok',
+	anchor: {
+		toolbar: 'Kotva',
+		menu: 'Upraviť kotvu',
+		title: 'Vlastnosti kotvy',
+		name: 'Názov kotvy',
+		errorName: 'Zadajte prosím názov kotvy',
+		remove: 'Odstrániť kotvu'
+	},
+	anchorId: 'Podľa Id objektu',
+	anchorName: 'Podľa mena kotvy',
+	charset: 'Priradená znaková sada',
+	cssClasses: 'Triedy štýlu',
+	download: 'Vynútené sťahovanie.',
+	displayText: 'Zobraziť text',
+	emailAddress: 'E-Mailová adresa',
+	emailBody: 'Telo správy',
+	emailSubject: 'Predmet správy',
+	id: 'Id',
+	info: 'Informácie o odkaze',
+	langCode: 'Orientácia jazyka',
+	langDir: 'Orientácia jazyka',
+	langDirLTR: 'Zľava doprava (LTR)',
+	langDirRTL: 'Sprava doľava (RTL)',
+	menu: 'Upraviť odkaz',
+	name: 'Názov',
+	noAnchors: '(V dokumente nie sú dostupné žiadne kotvy)',
+	noEmail: 'Zadajte prosím e-mailovú adresu',
+	noUrl: 'Zadajte prosím URL odkazu',
+	noTel: 'Zadajte prosím telefónne číslo',
+	other: '<iný>',
+	phoneNumber: 'Telefónne číslo',
+	popupDependent: 'Závislosť (Netscape)',
+	popupFeatures: 'Vlastnosti vyskakovacieho okna',
+	popupFullScreen: 'Celá obrazovka (IE)',
+	popupLeft: 'Ľavý okraj',
+	popupLocationBar: 'Panel umiestnenia (location bar)',
+	popupMenuBar: 'Panel ponuky (menu bar)',
+	popupResizable: 'Meniteľná veľkosť (resizable)',
+	popupScrollBars: 'Posuvníky (scroll bars)',
+	popupStatusBar: 'Stavový riadok (status bar)',
+	popupToolbar: 'Panel nástrojov (toolbar)',
+	popupTop: 'Horný okraj',
+	rel: 'Vzťah (rel)',
+	selectAnchor: 'Vybrať kotvu',
+	styles: 'Štýl',
+	tabIndex: 'Poradie prvku (tab index)',
+	target: 'Cieľ',
+	targetFrame: '<rámec>',
+	targetFrameName: 'Názov rámu cieľa',
+	targetPopup: '<vyskakovacie okno>',
+	targetPopupName: 'Názov vyskakovacieho okna',
+	title: 'Odkaz',
+	toAnchor: 'Odkaz na kotvu v texte',
+	toEmail: 'E-mail',
+	toUrl: 'URL',
+	toPhone: 'Telefón',
+	toolbar: 'Odkaz',
+	type: 'Typ odkazu',
+	unlink: 'Odstrániť odkaz',
+	upload: 'Nahrať'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/sl.js b/libraries/ckeditor/plugins/link/lang/sl.js
new file mode 100644
index 0000000000000000000000000000000000000000..b68f4a2de6b2f747bd58a9d8f56242e446296267
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/sl.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'sl', {
+	acccessKey: 'Tipka za dostop',
+	advanced: 'Napredno',
+	advisoryContentType: 'Predlagana vrsta vsebine',
+	advisoryTitle: 'Predlagani naslov',
+	anchor: {
+		toolbar: 'Sidro',
+		menu: 'Uredi sidro',
+		title: 'Lastnosti sidra',
+		name: 'Ime sidra',
+		errorName: 'Prosimo, vnesite ime sidra',
+		remove: 'Odstrani sidro'
+	},
+	anchorId: 'Po ID-ju elementa',
+	anchorName: 'Po imenu sidra',
+	charset: 'Nabor znakov povezanega vira',
+	cssClasses: 'Razredi slogovne predloge',
+	download: 'Force Download', // MISSING
+	displayText: 'Display Text', // MISSING
+	emailAddress: 'E-poštni naslov',
+	emailBody: 'Telo sporočila',
+	emailSubject: 'Zadeva sporočila',
+	id: 'Id',
+	info: 'Podatki o povezavi',
+	langCode: 'Koda jezika',
+	langDir: 'Smer jezika',
+	langDirLTR: 'Od leve proti desni (LTR)',
+	langDirRTL: 'Od desne proti levi (RTL)',
+	menu: 'Uredi povezavo',
+	name: 'Ime',
+	noAnchors: '(V tem dokumentu ni sider)',
+	noEmail: 'Vnesite e-poštni naslov',
+	noUrl: 'Vnesite URL povezave',
+	noTel: 'Please type the phone number', // MISSING
+	other: '<drugo>',
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'Podokno (Netscape)',
+	popupFeatures: 'Značilnosti pojavnega okna',
+	popupFullScreen: 'Celozaslonsko (IE)',
+	popupLeft: 'Lega levo',
+	popupLocationBar: 'Naslovna vrstica',
+	popupMenuBar: 'Menijska vrstica',
+	popupResizable: 'Spremenljive velikosti',
+	popupScrollBars: 'Drsniki',
+	popupStatusBar: 'Vrstica stanja',
+	popupToolbar: 'Orodna vrstica',
+	popupTop: 'Lega na vrhu',
+	rel: 'Odnos',
+	selectAnchor: 'Izberite sidro',
+	styles: 'Slog',
+	tabIndex: 'Å tevilka tabulatorja',
+	target: 'Cilj',
+	targetFrame: '<okvir>',
+	targetFrameName: 'Ime ciljnega okvirja',
+	targetPopup: '<pojavno okno>',
+	targetPopupName: 'Ime pojavnega okna',
+	title: 'Povezava',
+	toAnchor: 'Sidro na tej strani',
+	toEmail: 'E-pošta',
+	toUrl: 'URL',
+	toPhone: 'Phone', // MISSING
+	toolbar: 'Vstavi/uredi povezavo',
+	type: 'Vrsta povezave',
+	unlink: 'Odstrani povezavo',
+	upload: 'Naloži'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/sq.js b/libraries/ckeditor/plugins/link/lang/sq.js
new file mode 100644
index 0000000000000000000000000000000000000000..f9d054cf1ec91c712c240f3cf0a6be0c6db4551c
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/sq.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'sq', {
+	acccessKey: 'Elementi i qasjes',
+	advanced: 'Të përparuara',
+	advisoryContentType: 'Lloji i Përmbajtjes Këshillimorit',
+	advisoryTitle: 'Titulli Këshillimorit',
+	anchor: {
+		toolbar: 'Spirancë',
+		menu: 'Redakto Spirancën',
+		title: 'Karakteristikat e Spirancës',
+		name: 'Emri i Spirancës',
+		errorName: 'Ju lutemi shkruani emrin e spirancës',
+		remove: 'Largo Spirancën'
+	},
+	anchorId: 'Sipas ID-së së Elementit',
+	anchorName: 'Sipas Emrit të Spirancës',
+	charset: 'Seti i Karaktereve të Burimeve të lidhura',
+	cssClasses: 'CSS Klasat',
+	download: 'Nxit Shkarkimin',
+	displayText: 'Shfaq Tekstin',
+	emailAddress: 'Posta Elektronike',
+	emailBody: 'Hapësira e Porosisë',
+	emailSubject: 'Titulli i Porosisë',
+	id: 'Id',
+	info: 'Informacione të Nyjës',
+	langCode: 'Kodi Gjuhës',
+	langDir: 'Drejtimi Gjuhës',
+	langDirLTR: 'Nga e majta në të djathë (LTR)',
+	langDirRTL: 'Nga e djathta në të majtë (RTL)',
+	menu: 'Redakto Nyjen',
+	name: 'Emri',
+	noAnchors: '(Nuk ka asnjë spirancë në dokument)',
+	noEmail: 'Ju lutemi shkruani postën elektronike',
+	noUrl: 'Ju lutemi shkruani URL-në e nyjës',
+	noTel: 'Please type the phone number', // MISSING
+	other: '<other>',
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'E Varur (Netscape)',
+	popupFeatures: 'Karakteristikat e Dritares së Dialogut',
+	popupFullScreen: 'Ekrani Plotë  (IE)',
+	popupLeft: 'Pozita Majtas',
+	popupLocationBar: 'Shiriti Vendit',
+	popupMenuBar: 'Shiriti Menysë',
+	popupResizable: 'I ndryshueshëm',
+	popupScrollBars: 'Shiritat zvarritës',
+	popupStatusBar: 'Shiriti Statutit',
+	popupToolbar: 'Shiriti Mjeteve',
+	popupTop: 'Top Pozita',
+	rel: 'Marrëdhëniet',
+	selectAnchor: 'Përzgjidh Spirancë',
+	styles: 'Stil',
+	tabIndex: 'Indeksi Fletës',
+	target: 'Objektivi',
+	targetFrame: '<frame>',
+	targetFrameName: 'Emri i Kornizës së Synuar',
+	targetPopup: '<popup window>',
+	targetPopupName: 'Emri i Dritares së Dialogut',
+	title: 'Nyja',
+	toAnchor: 'Lidhu me spirancën në tekst',
+	toEmail: 'Posta Elektronike',
+	toUrl: 'URL',
+	toPhone: 'Phone', // MISSING
+	toolbar: 'Nyja',
+	type: 'Lloji i Nyjës',
+	unlink: 'Largo Nyjën',
+	upload: 'Ngarko'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/sr-latn.js b/libraries/ckeditor/plugins/link/lang/sr-latn.js
new file mode 100644
index 0000000000000000000000000000000000000000..e498cba026ac88d584e3aa35c010f64f358d96bb
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/sr-latn.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'sr-latn', {
+	acccessKey: 'Kombinacija tastera',
+	advanced: 'Dalje mogućnosti',
+	advisoryContentType: 'Tip sadržaja pomoći',
+	advisoryTitle: 'Oznaka za pomoć',
+	anchor: {
+		toolbar: 'Unesi/izmeni sidro',
+		menu: 'Karakteristike sidra',
+		title: 'Karakteristike sidra',
+		name: 'Naziv sidra',
+		errorName: 'Unesite naziv sidra',
+		remove: 'Ukloni sidro'
+	},
+	anchorId: 'Po Id-u elementa',
+	anchorName: 'Po nazivu sidra',
+	charset: 'Kod stranica navedenog sadržaja',
+	cssClasses: 'Stilske oznake',
+	download: 'Obavezno preuzimanje',
+	displayText: 'Prikazani tekst',
+	emailAddress: 'E-Mail adresa',
+	emailBody: 'Sadržaj poruke',
+	emailSubject: 'Naslov poruke',
+	id: 'Id',
+	info: 'Osnovne karakteristike',
+	langCode: 'Smer pisanja',
+	langDir: 'Smer pisanja',
+	langDirLTR: 'S leva na desno (LTR)',
+	langDirRTL: 'S desna na levo (RTL)',
+	menu: 'Izmeni link',
+	name: 'Naziv',
+	noAnchors: '(Nema sidra u dokumentu)',
+	noEmail: 'Odredite e-mail adresu',
+	noUrl: 'Unesite URL linka',
+	noTel: 'Unesite broj telefona',
+	other: '<оstalo>',
+	phoneNumber: 'Broj telefona',
+	popupDependent: 'Zavisno (Netscape)',
+	popupFeatures: 'Karakteristike iskačućeg prozora',
+	popupFullScreen: 'Prikaz preko celog ekrana (IE)',
+	popupLeft: 'Leva pozicija ',
+	popupLocationBar: 'Lokacija',
+	popupMenuBar: 'Kontekstni meni',
+	popupResizable: 'Promenljive veličine',
+	popupScrollBars: 'Klizač',
+	popupStatusBar: 'Statusna linija',
+	popupToolbar: 'Traka sa altakama',
+	popupTop: 'Gornja pozicija',
+	rel: 'Vrsta odnosа',
+	selectAnchor: 'Odaberi sidro',
+	styles: 'Stil',
+	tabIndex: 'Tab indeks',
+	target: 'Prikaži sadržaj',
+	targetFrame: '<okvir>',
+	targetFrameName: 'Naziv okvira',
+	targetPopup: ' <iskačuć prozor>',
+	targetPopupName: 'Naziv iskačućeg prozora',
+	title: 'Karaktersitike linka',
+	toAnchor: 'Sidro na ovoj stranici',
+	toEmail: 'E-Mail',
+	toUrl: 'URL',
+	toPhone: 'Telefon',
+	toolbar: 'Unesi/izmeni link',
+	type: 'Vrsta linka',
+	unlink: 'Ukloni link',
+	upload: 'Postavi'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/sr.js b/libraries/ckeditor/plugins/link/lang/sr.js
new file mode 100644
index 0000000000000000000000000000000000000000..3180033d344fdabd3d9c190683b2e34b876067fe
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/sr.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'sr', {
+	acccessKey: 'Комбинација тастера',
+	advanced: 'Даље поције',
+	advisoryContentType: 'Тип садржаја помоћи',
+	advisoryTitle: 'Ознака за помоћ',
+	anchor: {
+		toolbar: 'Унеси/измени сидро',
+		menu: 'Карактеристике сидра',
+		title: 'Карактеристике сидра',
+		name: 'Назив сидра',
+		errorName: 'Унесите назив сидра',
+		remove: 'Уклони сидро'
+	},
+	anchorId: 'Пo Ид-у елемента',
+	anchorName: 'По називу сидра',
+	charset: 'Код страницанаведеног садржаја',
+	cssClasses: 'Стилске ознаке',
+	download: 'Обавезно преузимање',
+	displayText: 'Приказани текст',
+	emailAddress: 'Е-маил адреса',
+	emailBody: 'Садржај поруке',
+	emailSubject: 'Наслов пруке',
+	id: 'Ид',
+	info: 'Основне карактеристике',
+	langCode: 'Смер писања',
+	langDir: 'Смер писања',
+	langDirLTR: 'С лева на десно (LTR)',
+	langDirRTL: 'С десна на лево (RTL)',
+	menu: 'Промени линк',
+	name: 'Назив',
+	noAnchors: '(Нема сидра у документу)',
+	noEmail: 'Одредите е-маил адресу',
+	noUrl: 'Унесите УРЛ линка',
+	noTel: 'Унесите број телефона',
+	other: '<друго>',
+	phoneNumber: 'Број телефона',
+	popupDependent: 'Зависно (Netscape)',
+	popupFeatures: 'Карактеристике искачућег прозора',
+	popupFullScreen: 'Приказ преко целог екрана (ИE)',
+	popupLeft: 'Лева позиција',
+	popupLocationBar: 'Локација',
+	popupMenuBar: 'Контекстни мени',
+	popupResizable: 'Промењиве величине',
+	popupScrollBars: 'Клизач',
+	popupStatusBar: 'Статусна линија',
+	popupToolbar: 'Трака са алаткама',
+	popupTop: 'Горња позиција',
+	rel: 'Врста односа',
+	selectAnchor: 'Одабери сидро',
+	styles: 'Стил',
+	tabIndex: 'Таб индекс',
+	target: 'Прикажи садржај',
+	targetFrame: '<оквир>',
+	targetFrameName: 'Назив оквира',
+	targetPopup: '<искачући прозор>',
+	targetPopupName: 'Назив искачућег прозора',
+	title: 'Карактеристике линка',
+	toAnchor: 'Сидро на овој страници',
+	toEmail: 'E-маил',
+	toUrl: 'УРЛ',
+	toPhone: 'Телефон',
+	toolbar: 'Унеси/измени линк',
+	type: 'Врста линка',
+	unlink: 'Уклони линк',
+	upload: 'Постави'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/sv.js b/libraries/ckeditor/plugins/link/lang/sv.js
new file mode 100644
index 0000000000000000000000000000000000000000..4c05b07a281b3ddbf32f5680fabc489d165e8b2a
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/sv.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'sv', {
+	acccessKey: 'Behörighetsnyckel',
+	advanced: 'Avancerad',
+	advisoryContentType: 'Innehållstyp',
+	advisoryTitle: 'Titel',
+	anchor: {
+		toolbar: 'Infoga/Redigera ankarlänk',
+		menu: 'Egenskaper för ankarlänk',
+		title: 'Egenskaper för ankarlänk',
+		name: 'Ankarnamn',
+		errorName: 'Var god ange ett ankarnamn',
+		remove: 'Radera ankare'
+	},
+	anchorId: 'Efter element-id',
+	anchorName: 'Efter ankarnamn',
+	charset: 'Teckenuppställning',
+	cssClasses: 'Stilmall',
+	download: 'Tvinga nerladdning',
+	displayText: 'Visningstext',
+	emailAddress: 'E-postadress',
+	emailBody: 'Innehåll',
+	emailSubject: 'Ämne',
+	id: 'Id',
+	info: 'Länkinformation',
+	langCode: 'Språkkod',
+	langDir: 'Språkriktning',
+	langDirLTR: 'Vänster till höger (VTH)',
+	langDirRTL: 'Höger till vänster (HTV)',
+	menu: 'Redigera länk',
+	name: 'Namn',
+	noAnchors: '(Inga ankare kunde hittas)',
+	noEmail: 'Var god ange e-postadress',
+	noUrl: 'Var god ange länkens URL',
+	noTel: 'Var god ange telefonnummer',
+	other: '<annan>',
+	phoneNumber: 'Telefonnummer',
+	popupDependent: 'Beroende (endast Netscape)',
+	popupFeatures: 'Popup-fönstrets egenskaper',
+	popupFullScreen: 'Helskärm (endast IE)',
+	popupLeft: 'Position från vänster',
+	popupLocationBar: 'Adressfält',
+	popupMenuBar: 'Menyfält',
+	popupResizable: 'Skalbart',
+	popupScrollBars: 'Scrolllista',
+	popupStatusBar: 'Statusfält',
+	popupToolbar: 'Verktygsfält',
+	popupTop: 'Position från sidans topp',
+	rel: 'Förhållande',
+	selectAnchor: 'Välj ett ankare',
+	styles: 'Stilmall',
+	tabIndex: 'Tabindex',
+	target: 'MÃ¥l',
+	targetFrame: '<ram>',
+	targetFrameName: 'MÃ¥lets ramnamn',
+	targetPopup: '<popup-fönster>',
+	targetPopupName: 'Popup-fönstrets namn',
+	title: 'Länk',
+	toAnchor: 'Länk till ankare i texten',
+	toEmail: 'E-post',
+	toUrl: 'URL',
+	toPhone: 'Telefon',
+	toolbar: 'Infoga/Redigera länk',
+	type: 'Länktyp',
+	unlink: 'Radera länk',
+	upload: 'Ladda upp'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/th.js b/libraries/ckeditor/plugins/link/lang/th.js
new file mode 100644
index 0000000000000000000000000000000000000000..4eadb330c91e21373e04b94ce5bfe8a98aaac6ec
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/th.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'th', {
+	acccessKey: 'แอคเซส คีย์',
+	advanced: 'ขั้นสูง',
+	advisoryContentType: 'ชนิดของคำเกริ่นนำ',
+	advisoryTitle: 'คำเกริ่นนำ',
+	anchor: {
+		toolbar: 'แทรก/แก้ไข Anchor',
+		menu: 'รายละเอียด Anchor',
+		title: 'รายละเอียด Anchor',
+		name: 'ชื่อ Anchor',
+		errorName: 'กรุณาระบุชื่อของ Anchor',
+		remove: 'Remove Anchor'
+	},
+	anchorId: 'ไอดี',
+	anchorName: 'ชื่อ',
+	charset: 'ลิงค์เชื่อมโยงไปยังชุดตัวอักษร',
+	cssClasses: 'คลาสของไฟล์กำหนดลักษณะการแสดงผล',
+	download: 'Force Download', // MISSING
+	displayText: 'Display Text', // MISSING
+	emailAddress: 'อีเมล์ (E-Mail)',
+	emailBody: 'ข้อความ',
+	emailSubject: 'หัวเรื่อง',
+	id: 'ไอดี',
+	info: 'รายละเอียด',
+	langCode: 'การเขียน-อ่านภาษา',
+	langDir: 'การเขียน-อ่านภาษา',
+	langDirLTR: 'จากซ้ายไปขวา (LTR)',
+	langDirRTL: 'จากขวามาซ้าย (RTL)',
+	menu: 'แก้ไข ลิงค์',
+	name: 'ชื่อ',
+	noAnchors: '(ยังไม่มีจุดเชื่อมโยงภายในหน้าเอกสารนี้)',
+	noEmail: 'กรุณาระบุอีเมล์ (E-mail)',
+	noUrl: 'กรุณาระบุที่อยู่อ้างอิงออนไลน์ (URL)',
+	noTel: 'Please type the phone number', // MISSING
+	other: '<อื่น ๆ>',
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'แสดงเต็มหน้าจอ (Netscape)',
+	popupFeatures: 'คุณสมบัติของหน้าจอเล็ก (Pop-up)',
+	popupFullScreen: 'แสดงเต็มหน้าจอ (IE5.5++ เท่านั้น)',
+	popupLeft: 'พิกัดซ้าย (Left Position)',
+	popupLocationBar: 'แสดงที่อยู่ของไฟล์',
+	popupMenuBar: 'แสดงแถบเมนู',
+	popupResizable: 'สามารถปรับขนาดได้',
+	popupScrollBars: 'แสดงแถบเลื่อน',
+	popupStatusBar: 'แสดงแถบสถานะ',
+	popupToolbar: 'แสดงแถบเครื่องมือ',
+	popupTop: 'พิกัดบน (Top Position)',
+	rel: 'ความสัมพันธ์',
+	selectAnchor: 'ระบุข้อมูลของจุดเชื่อมโยง (Anchor)',
+	styles: 'ลักษณะการแสดงผล',
+	tabIndex: 'ลำดับของ แท็บ',
+	target: 'การเปิดหน้าลิงค์',
+	targetFrame: '<เปิดในเฟรม>',
+	targetFrameName: 'ชื่อทาร์เก็ตเฟรม',
+	targetPopup: '<เปิดหน้าจอเล็ก (Pop-up)>',
+	targetPopupName: 'ระบุชื่อหน้าจอเล็ก (Pop-up)',
+	title: 'ลิงค์เชื่อมโยงเว็บ อีเมล์ รูปภาพ หรือไฟล์อื่นๆ',
+	toAnchor: 'จุดเชื่อมโยง (Anchor)',
+	toEmail: 'ส่งอีเมล์ (E-Mail)',
+	toUrl: 'ที่อยู่อ้างอิง URL',
+	toPhone: 'Phone', // MISSING
+	toolbar: 'แทรก/แก้ไข ลิงค์',
+	type: 'ประเภทของลิงค์',
+	unlink: 'ลบ ลิงค์',
+	upload: 'อัพโหลดไฟล์'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/tr.js b/libraries/ckeditor/plugins/link/lang/tr.js
new file mode 100644
index 0000000000000000000000000000000000000000..80fbe56477001d65351f43c5da0fc8103af578ab
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/tr.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'tr', {
+	acccessKey: 'EriÅŸim TuÅŸu',
+	advanced: 'GeliÅŸmiÅŸ',
+	advisoryContentType: 'Danışma İçerik Türü',
+	advisoryTitle: 'Danışma Başlığı',
+	anchor: {
+		toolbar: 'Bağlantı Ekle/Düzenle',
+		menu: 'Bağlantı Özellikleri',
+		title: 'Bağlantı Özellikleri',
+		name: 'Bağlantı Adı',
+		errorName: 'Lütfen bağlantı için ad giriniz',
+		remove: 'Bağlantıyı Kaldır'
+	},
+	anchorId: 'Eleman Kimlik Numarası ile',
+	anchorName: 'Bağlantı Adı ile',
+	charset: 'Bağlı Kaynak Karakter Gurubu',
+	cssClasses: 'Biçem Sayfası Sınıfları',
+	download: 'Ä°ndirmeye Zorla',
+	displayText: 'Gösterim Metni',
+	emailAddress: 'E-Posta Adresi',
+	emailBody: 'İleti Gövdesi',
+	emailSubject: 'Ä°leti Konusu',
+	id: 'Id',
+	info: 'Link Bilgisi',
+	langCode: 'Dil Yönü',
+	langDir: 'Dil Yönü',
+	langDirLTR: 'Soldan SaÄŸa (LTR)',
+	langDirRTL: 'SaÄŸdan Sola (RTL)',
+	menu: 'Link Düzenle',
+	name: 'Ad',
+	noAnchors: '(Bu belgede hiç çapa yok)',
+	noEmail: 'Lütfen E-posta adresini yazın',
+	noUrl: 'Lütfen Link URL\'sini yazın',
+	noTel: 'Lütfen telefon numaranızı yazınız',
+	other: '<diÄŸer>',
+	phoneNumber: 'Telefon numarası',
+	popupDependent: 'Bağımlı (Netscape)',
+	popupFeatures: 'Yeni Açılan Pencere Özellikleri',
+	popupFullScreen: 'Tam Ekran (IE)',
+	popupLeft: 'Sola Göre Konum',
+	popupLocationBar: 'Yer Çubuğu',
+	popupMenuBar: 'Menü Çubuğu',
+	popupResizable: 'Resizable',
+	popupScrollBars: 'Kaydırma Çubukları',
+	popupStatusBar: 'Durum Çubuğu',
+	popupToolbar: 'Araç Çubuğu',
+	popupTop: 'Yukarıya Göre Konum',
+	rel: 'Ä°liÅŸki',
+	selectAnchor: 'Bağlantı Seç',
+	styles: 'Biçem',
+	tabIndex: 'Sekme Ä°ndeksi',
+	target: 'Hedef',
+	targetFrame: '<çerçeve>',
+	targetFrameName: 'Hedef Çerçeve Adı',
+	targetPopup: '<yeni açılan pencere>',
+	targetPopupName: 'Yeni Açılan Pencere Adı',
+	title: 'Link',
+	toAnchor: 'Bu sayfada çapa',
+	toEmail: 'E-Posta',
+	toUrl: 'URL',
+	toPhone: 'Telefon',
+	toolbar: 'Link Ekle/Düzenle',
+	type: 'Link Türü',
+	unlink: 'Köprü Kaldır',
+	upload: 'Karşıya Yükle'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/tt.js b/libraries/ckeditor/plugins/link/lang/tt.js
new file mode 100644
index 0000000000000000000000000000000000000000..027f906bd2b6dbbda06631c31caab77447fb2a73
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/tt.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'tt', {
+	acccessKey: 'Access Key', // MISSING
+	advanced: 'Киңәйтелгән көйләүләр',
+	advisoryContentType: 'Advisory Content Type', // MISSING
+	advisoryTitle: 'Киңәш исем',
+	anchor: {
+		toolbar: 'Якорь',
+		menu: 'Якорьне үзгәртү',
+		title: 'Якорь үзлекләре',
+		name: 'Якорь исеме',
+		errorName: 'Якорьнең исемен языгыз',
+		remove: 'Якорьне бетерү'
+	},
+	anchorId: 'Элемент идентификаторы буенча',
+	anchorName: 'Якорь исеме буенча',
+	charset: 'Linked Resource Charset', // MISSING
+	cssClasses: 'Стильләр класслары',
+	download: 'Force Download', // MISSING
+	displayText: 'Display Text', // MISSING
+	emailAddress: 'Электрон почта адресы',
+	emailBody: 'Хат эчтәлеге',
+	emailSubject: 'Хат темасы',
+	id: 'Идентификатор',
+	info: 'Сылталама тасвирламасы',
+	langCode: 'Тел коды',
+	langDir: 'Язылыш юнəлеше',
+	langDirLTR: 'Сулдан уңга язылыш (LTR)',
+	langDirRTL: 'Уңнан сулга язылыш (RTL)',
+	menu: 'Сылталамаyны үзгәртү',
+	name: 'Исем',
+	noAnchors: '(Әлеге документта якорьләр табылмады)',
+	noEmail: 'Электрон почта адресын языгыз',
+	noUrl: 'Сылталаманы языгыз',
+	noTel: 'Телефон номерыгызны языгыз',
+	other: '<бүтән>',
+	phoneNumber: 'Телефон номеры',
+	popupDependent: 'Бәйле (Netscape)',
+	popupFeatures: 'Popup Window Features', // MISSING
+	popupFullScreen: 'Тулы экран (IE)',
+	popupLeft: 'Left Position', // MISSING
+	popupLocationBar: 'Location Bar', // MISSING
+	popupMenuBar: 'Menu Bar', // MISSING
+	popupResizable: 'Resizable', // MISSING
+	popupScrollBars: 'Scroll Bars', // MISSING
+	popupStatusBar: 'Status Bar', // MISSING
+	popupToolbar: 'Toolbar', // MISSING
+	popupTop: 'Top Position', // MISSING
+	rel: 'Бәйләнеш',
+	selectAnchor: 'Якорьне сайлау',
+	styles: 'Стиль',
+	tabIndex: 'Tab Index', // MISSING
+	target: 'Максат',
+	targetFrame: '<frame>',
+	targetFrameName: 'Target Frame Name', // MISSING
+	targetPopup: '<popup window>',
+	targetPopupName: 'Попап тәрәзәсе исеме',
+	title: 'Сылталама',
+	toAnchor: 'Якорьне текст белән бәйләү',
+	toEmail: 'Электрон почта',
+	toUrl: 'Сылталама',
+	toPhone: 'Телефон',
+	toolbar: 'Сылталама',
+	type: 'Сылталама төре',
+	unlink: 'Сылталаманы бетерү',
+	upload: 'Йөкләү'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/ug.js b/libraries/ckeditor/plugins/link/lang/ug.js
new file mode 100644
index 0000000000000000000000000000000000000000..353201ef717012ac0a1842371165cb3bb2b8ce46
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/ug.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'ug', {
+	acccessKey: 'زىيارەت كۇنۇپكا',
+	advanced: 'ئالىي',
+	advisoryContentType: 'مەزمۇن تىپى',
+	advisoryTitle: 'ماۋزۇ',
+	anchor: {
+		toolbar: 'لەڭگەرلىك نۇقتا ئۇلانمىسى قىستۇر/تەھرىرلە',
+		menu: 'لەڭگەرلىك نۇقتا ئۇلانما خاسلىقى',
+		title: 'لەڭگەرلىك نۇقتا ئۇلانما خاسلىقى',
+		name: 'لەڭگەرلىك نۇقتا ئاتى',
+		errorName: 'لەڭگەرلىك نۇقتا ئاتىنى كىرگۈزۈڭ',
+		remove: 'لەڭگەرلىك نۇقتا ئۆچۈر'
+	},
+	anchorId: 'لەڭگەرلىك نۇقتا ID سى بويىچە',
+	anchorName: 'لەڭگەرلىك نۇقتا ئاتى بويىچە',
+	charset: 'ھەرپ كودلىنىشى',
+	cssClasses: 'ئۇسلۇب خىلى ئاتى',
+	download: 'Force Download', // MISSING
+	displayText: 'Display Text', // MISSING
+	emailAddress: 'ئادرېس',
+	emailBody: 'مەزمۇن',
+	emailSubject: 'ماۋزۇ',
+	id: 'ID',
+	info: 'ئۇلانما ئۇچۇرى',
+	langCode: 'تىل كودى',
+	langDir: 'تىل يۆنىلىشى',
+	langDirLTR: 'سولدىن ئوڭغا (LTR)',
+	langDirRTL: 'ئوڭدىن سولغا (RTL)',
+	menu: 'ئۇلانما تەھرىر',
+	name: 'ئات',
+	noAnchors: '(بۇ پۈتۈكتە ئىشلەتكىلى بولىدىغان لەڭگەرلىك نۇقتا يوق)',
+	noEmail: 'ئېلخەت ئادرېسىنى كىرگۈزۈڭ',
+	noUrl: 'ئۇلانما ئادرېسىنى كىرگۈزۈڭ',
+	noTel: 'Please type the phone number', // MISSING
+	other: '‹باشقا›',
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'تەۋە (NS)',
+	popupFeatures: 'قاڭقىش كۆزنەك خاسلىقى',
+	popupFullScreen: 'پۈتۈن ئېكران (IE)',
+	popupLeft: 'سول',
+	popupLocationBar: 'ئادرېس بالداق',
+	popupMenuBar: 'تىزىملىك بالداق',
+	popupResizable: 'چوڭلۇقى ئۆزگەرتىشچان',
+	popupScrollBars: 'دومىلىما سۈرگۈچ',
+	popupStatusBar: 'ھالەت بالداق',
+	popupToolbar: 'قورال بالداق',
+	popupTop: 'ئوڭ',
+	rel: 'باغلىنىش',
+	selectAnchor: 'بىر لەڭگەرلىك نۇقتا تاللاڭ',
+	styles: 'قۇر ئىچىدىكى ئۇسلۇبى',
+	tabIndex: 'Tab تەرتىپى',
+	target: 'نىشان',
+	targetFrame: '‹كاندۇك›',
+	targetFrameName: 'نىشان كاندۇك ئاتى',
+	targetPopup: '‹قاڭقىش كۆزنەك›',
+	targetPopupName: 'قاڭقىش كۆزنەك ئاتى',
+	title: 'ئۇلانما',
+	toAnchor: 'بەت ئىچىدىكى لەڭگەرلىك نۇقتا ئۇلانمىسى',
+	toEmail: 'ئېلخەت',
+	toUrl: 'ئادرېس',
+	toPhone: 'Phone', // MISSING
+	toolbar: 'ئۇلانما قىستۇر/تەھرىرلە',
+	type: 'ئۇلانما تىپى',
+	unlink: 'ئۇلانما بىكار قىل',
+	upload: 'يۈكلە'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/uk.js b/libraries/ckeditor/plugins/link/lang/uk.js
new file mode 100644
index 0000000000000000000000000000000000000000..366abe82430192255463734d2c0694715b552009
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/uk.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'uk', {
+	acccessKey: 'Гаряча клавіша',
+	advanced: 'Додаткове',
+	advisoryContentType: 'Тип вмісту',
+	advisoryTitle: 'Заголовок',
+	anchor: {
+		toolbar: 'Вставити/Редагувати якір',
+		menu: 'Властивості якоря',
+		title: 'Властивості якоря',
+		name: 'Ім\'я якоря',
+		errorName: 'Будь ласка, вкажіть ім\'я якоря',
+		remove: 'Прибрати якір'
+	},
+	anchorId: 'За ідентифікатором елементу',
+	anchorName: 'За ім\'ям елементу',
+	charset: 'Кодування',
+	cssClasses: 'Клас CSS',
+	download: 'Завантажити як файл',
+	displayText: 'Відображуваний текст',
+	emailAddress: 'Адреса ел. пошти',
+	emailBody: 'Тіло повідомлення',
+	emailSubject: 'Тема листа',
+	id: 'Ідентифікатор',
+	info: 'Інформація посилання',
+	langCode: 'Код мови',
+	langDir: 'Напрямок мови',
+	langDirLTR: 'Зліва направо (LTR)',
+	langDirRTL: 'Справа наліво (RTL)',
+	menu: 'Вставити посилання',
+	name: 'Ім\'я',
+	noAnchors: '(В цьому документі немає якорів)',
+	noEmail: 'Будь ласка, вкажіть адрес ел. пошти',
+	noUrl: 'Будь ласка, вкажіть URL посилання',
+	noTel: 'Будь ласка, введіть номер телефону',
+	other: '<інший>',
+	phoneNumber: 'Номер телефону',
+	popupDependent: 'Залежний (Netscape)',
+	popupFeatures: 'Властивості випливаючого вікна',
+	popupFullScreen: 'Повний екран (IE)',
+	popupLeft: 'Позиція зліва',
+	popupLocationBar: 'Панель локації',
+	popupMenuBar: 'Панель меню',
+	popupResizable: 'Масштабоване',
+	popupScrollBars: 'Стрічки прокрутки',
+	popupStatusBar: 'Рядок статусу',
+	popupToolbar: 'Панель інструментів',
+	popupTop: 'Позиція зверху',
+	rel: 'Зв\'язок',
+	selectAnchor: 'Оберіть якір',
+	styles: 'Стиль CSS',
+	tabIndex: 'Послідовність переходу',
+	target: 'Ціль',
+	targetFrame: '<фрейм>',
+	targetFrameName: 'Ім\'я цільового фрейму',
+	targetPopup: '<випливаюче вікно>',
+	targetPopupName: 'Ім\'я випливаючого вікна',
+	title: 'Посилання',
+	toAnchor: 'Якір на цю сторінку',
+	toEmail: 'Ел. пошта',
+	toUrl: 'URL',
+	toPhone: 'Телефон',
+	toolbar: 'Вставити/Редагувати посилання',
+	type: 'Тип посилання',
+	unlink: 'Видалити посилання',
+	upload: 'Надіслати'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/vi.js b/libraries/ckeditor/plugins/link/lang/vi.js
new file mode 100644
index 0000000000000000000000000000000000000000..6a00ae57df09ec13dfd319226b503fe02ac04227
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/vi.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'vi', {
+	acccessKey: 'Phím hỗ trợ truy cập',
+	advanced: 'Mở rộng',
+	advisoryContentType: 'Nội dung hướng dẫn',
+	advisoryTitle: 'Nhan đề hướng dẫn',
+	anchor: {
+		toolbar: 'Chèn/Sửa điểm neo',
+		menu: 'Thuộc tính điểm neo',
+		title: 'Thuộc tính điểm neo',
+		name: 'Tên của điểm neo',
+		errorName: 'Hãy nhập vào tên của điểm neo',
+		remove: 'Xóa neo'
+	},
+	anchorId: 'Theo định danh thành phần',
+	anchorName: 'Theo tên điểm neo',
+	charset: 'Bảng mã của tài nguyên được liên kết đến',
+	cssClasses: 'Lá»›p Stylesheet',
+	download: 'Force Download', // MISSING
+	displayText: 'Display Text', // MISSING
+	emailAddress: 'Thư điện tử',
+	emailBody: 'Nội dung thông điệp',
+	emailSubject: 'Tiêu đề thông điệp',
+	id: 'Định danh',
+	info: 'Thông tin liên kết',
+	langCode: 'Mã ngôn ngữ',
+	langDir: 'Hướng ngôn ngữ',
+	langDirLTR: 'Trái sang phải (LTR)',
+	langDirRTL: 'Phải sang trái (RTL)',
+	menu: 'Sửa liên kết',
+	name: 'Tên',
+	noAnchors: '(Không có điểm neo nào trong tài liệu)',
+	noEmail: 'Hãy đưa vào địa chỉ thư điện tử',
+	noUrl: 'Hãy đưa vào đường dẫn liên kết (URL)',
+	noTel: 'Please type the phone number', // MISSING
+	other: '<khác>',
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: 'Phụ thuộc (Netscape)',
+	popupFeatures: 'Đặc điểm của cửa sổ Popup',
+	popupFullScreen: 'Toàn màn hình (IE)',
+	popupLeft: 'Vị trí bên trái',
+	popupLocationBar: 'Thanh vị trí',
+	popupMenuBar: 'Thanh Menu',
+	popupResizable: 'Có thể thay đổi kích cỡ',
+	popupScrollBars: 'Thanh cuá»™n',
+	popupStatusBar: 'Thanh trạng thái',
+	popupToolbar: 'Thanh công cụ',
+	popupTop: 'Vị trí phía trên',
+	rel: 'Quan hệ',
+	selectAnchor: 'Chọn một điểm neo',
+	styles: 'Kiểu (style)',
+	tabIndex: 'Chỉ số của Tab',
+	target: 'Đích',
+	targetFrame: '<khung>',
+	targetFrameName: 'Tên khung đích',
+	targetPopup: '<cửa sổ popup>',
+	targetPopupName: 'Tên cửa sổ Popup',
+	title: 'Liên kết',
+	toAnchor: 'Neo trong trang này',
+	toEmail: 'Thư điện tử',
+	toUrl: 'URL',
+	toPhone: 'Phone', // MISSING
+	toolbar: 'Chèn/Sửa liên kết',
+	type: 'Kiểu liên kết',
+	unlink: 'Xoá liên kết',
+	upload: 'Tải lên'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/zh-cn.js b/libraries/ckeditor/plugins/link/lang/zh-cn.js
new file mode 100644
index 0000000000000000000000000000000000000000..1f67fe437fd9420491e62979006ba30b83dbe782
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/zh-cn.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'zh-cn', {
+	acccessKey: '访问键',
+	advanced: '高级',
+	advisoryContentType: '内容类型',
+	advisoryTitle: '标题',
+	anchor: {
+		toolbar: '插入/编辑锚点链接',
+		menu: '锚点链接属性',
+		title: '锚点链接属性',
+		name: '锚点名称',
+		errorName: '请输入锚点名称',
+		remove: '删除锚点'
+	},
+	anchorId: '按锚点 ID',
+	anchorName: '按锚点名称',
+	charset: '字符编码',
+	cssClasses: '样式类名称',
+	download: '强制下载',
+	displayText: '显示文本',
+	emailAddress: '地址',
+	emailBody: '内容',
+	emailSubject: '主题',
+	id: 'ID',
+	info: '超链接信息',
+	langCode: '语言代码',
+	langDir: '语言方向',
+	langDirLTR: '从左到右 (LTR)',
+	langDirRTL: '从右到左 (RTL)',
+	menu: '编辑超链接',
+	name: '名称',
+	noAnchors: '(此文档没有可用的锚点)',
+	noEmail: '请输入电子邮件地址',
+	noUrl: '请输入超链接地址',
+	noTel: '请输入电话号码',
+	other: '<其他>',
+	phoneNumber: '电话号码',
+	popupDependent: '依附 (NS)',
+	popupFeatures: '弹出窗口属性',
+	popupFullScreen: '全屏 (IE)',
+	popupLeft: 'å·¦',
+	popupLocationBar: '地址栏',
+	popupMenuBar: '菜单栏',
+	popupResizable: '可缩放',
+	popupScrollBars: '滚动条',
+	popupStatusBar: '状态栏',
+	popupToolbar: '工具栏',
+	popupTop: '右',
+	rel: '关联',
+	selectAnchor: '选择一个锚点',
+	styles: '行内样式',
+	tabIndex: 'Tab 键次序',
+	target: '目标',
+	targetFrame: '<框架>',
+	targetFrameName: '目标框架名称',
+	targetPopup: '<弹出窗口>',
+	targetPopupName: '弹出窗口名称',
+	title: '超链接',
+	toAnchor: '页内锚点链接',
+	toEmail: '电子邮件',
+	toUrl: '地址',
+	toPhone: '电话',
+	toolbar: '插入/编辑超链接',
+	type: '超链接类型',
+	unlink: '取消超链接',
+	upload: '上传'
+} );
diff --git a/libraries/ckeditor/plugins/link/lang/zh.js b/libraries/ckeditor/plugins/link/lang/zh.js
new file mode 100644
index 0000000000000000000000000000000000000000..edf76f44a84a71c618ba902a6601ba264bf9e1ee
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/lang/zh.js
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'link', 'zh', {
+	acccessKey: '便捷鍵',
+	advanced: '進階',
+	advisoryContentType: '建議內容類型',
+	advisoryTitle: '標題',
+	anchor: {
+		toolbar: '錨點',
+		menu: '編輯錨點',
+		title: '錨點內容',
+		name: '錨點名稱',
+		errorName: '請輸入錨點名稱',
+		remove: '移除錨點'
+	},
+	anchorId: '依元件編號',
+	anchorName: '依錨點名稱',
+	charset: '連結資源的字元集',
+	cssClasses: '樣式表類別',
+	download: '強制下載',
+	displayText: '顯示文字',
+	emailAddress: '電子郵件地址',
+	emailBody: '郵件本文',
+	emailSubject: '郵件主旨',
+	id: 'ID',
+	info: '連結資訊',
+	langCode: '語言碼',
+	langDir: '語言方向',
+	langDirLTR: '由左至右 (LTR)',
+	langDirRTL: '由右至左 (RTL)',
+	menu: '編輯連結',
+	name: '名稱',
+	noAnchors: '(本文件中無可用之錨點)',
+	noEmail: '請輸入電子郵件',
+	noUrl: '請輸入連結 URL',
+	noTel: 'Please type the phone number', // MISSING
+	other: '<其他>',
+	phoneNumber: 'Phone number', // MISSING
+	popupDependent: '獨立 (Netscape)',
+	popupFeatures: '快顯視窗功能',
+	popupFullScreen: '全螢幕 (IE)',
+	popupLeft: '左側位置',
+	popupLocationBar: '位置列',
+	popupMenuBar: '功能表列',
+	popupResizable: '可調大小',
+	popupScrollBars: '捲軸',
+	popupStatusBar: '狀態列',
+	popupToolbar: '工具列',
+	popupTop: '頂端位置',
+	rel: '關係',
+	selectAnchor: '選取一個錨點',
+	styles: '樣式',
+	tabIndex: '定位順序',
+	target: '目標',
+	targetFrame: '<框架>',
+	targetFrameName: '目標框架名稱',
+	targetPopup: '<快顯視窗>',
+	targetPopupName: '快顯視窗名稱',
+	title: '連結',
+	toAnchor: '文字中的錨點連結',
+	toEmail: '電子郵件',
+	toUrl: '網址',
+	toPhone: 'Phone', // MISSING
+	toolbar: '連結',
+	type: '連結類型',
+	unlink: '取消連結',
+	upload: '上傳'
+} );
diff --git a/libraries/ckeditor/plugins/link/plugin.js b/libraries/ckeditor/plugins/link/plugin.js
new file mode 100644
index 0000000000000000000000000000000000000000..40325cb134a938252b37fbd79bceea0e05ae339c
--- /dev/null
+++ b/libraries/ckeditor/plugins/link/plugin.js
@@ -0,0 +1,919 @@
+/**
+ * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+ */
+
+ 'use strict';
+
+ ( function() {
+   CKEDITOR.plugins.add( 'link', {
+     requires: 'dialog,fakeobjects',
+     // jscs:disable maximumLineLength
+     lang: 'af,ar,az,bg,bn,bs,ca,cs,cy,da,de,de-ch,el,en,en-au,en-ca,en-gb,eo,es,es-mx,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,oc,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE%
+     // jscs:enable maximumLineLength
+     icons: 'anchor,anchor-rtl,link,unlink', // %REMOVE_LINE_CORE%
+     hidpi: true, // %REMOVE_LINE_CORE%
+     onLoad: function() {
+       // Add the CSS styles for anchor placeholders.
+       var iconPath = CKEDITOR.getUrl( this.path + 'images' + ( CKEDITOR.env.hidpi ? '/hidpi' : '' ) + '/anchor.png' ),
+         baseStyle = 'background:url(' + iconPath + ') no-repeat %1 center;border:1px dotted #00f;background-size:16px;';
+ 
+       var template = '.%2 a.cke_anchor,' +
+         '.%2 a.cke_anchor_empty' +
+         ',.cke_editable.%2 a[name]' +
+         ',.cke_editable.%2 a[data-cke-saved-name]' +
+         '{' +
+           baseStyle +
+           'padding-%1:18px;' +
+           // Show the arrow cursor for the anchor image (FF at least).
+           'cursor:auto;' +
+         '}' +
+         '.%2 img.cke_anchor' +
+         '{' +
+           baseStyle +
+           'width:16px;' +
+           'min-height:15px;' +
+           // The default line-height on IE.
+           'height:1.15em;' +
+           // Opera works better with "middle" (even if not perfect)
+           'vertical-align:text-bottom;' +
+         '}';
+ 
+       // Styles with contents direction awareness.
+       function cssWithDir( dir ) {
+         return template.replace( /%1/g, dir == 'rtl' ? 'right' : 'left' ).replace( /%2/g, 'cke_contents_' + dir );
+       }
+ 
+       CKEDITOR.addCss( cssWithDir( 'ltr' ) + cssWithDir( 'rtl' ) );
+     },
+ 
+     init: function( editor ) {
+       var allowed = 'a[!href]',
+         required = 'a[href]';
+ 
+       if ( CKEDITOR.dialog.isTabEnabled( editor, 'link', 'advanced' ) ) {
+         allowed = allowed.replace( ']', ',accesskey,charset,dir,id,lang,name,rel,tabindex,title,type,download]{*}(*)' );
+       }
+       if ( CKEDITOR.dialog.isTabEnabled( editor, 'link', 'target' ) ) {
+         allowed = allowed.replace( ']', ',target,onclick]' );
+       }
+ 
+       // Add the link and unlink buttons.
+       editor.addCommand( 'link', new CKEDITOR.dialogCommand( 'link', {
+         allowedContent: allowed,
+         requiredContent: required
+       } ) );
+       editor.addCommand( 'anchor', new CKEDITOR.dialogCommand( 'anchor', {
+         allowedContent: 'a[!name,id]',
+         requiredContent: 'a[name]'
+       } ) );
+       editor.addCommand( 'unlink', new CKEDITOR.unlinkCommand() );
+       editor.addCommand( 'removeAnchor', new CKEDITOR.removeAnchorCommand() );
+ 
+       editor.setKeystroke( CKEDITOR.CTRL + 76 /*L*/, 'link' );
+ 
+       // (#2478)
+       editor.setKeystroke( CKEDITOR.CTRL + 75 /*K*/, 'link' );
+ 
+       if ( editor.ui.addButton ) {
+         editor.ui.addButton( 'Link', {
+           label: editor.lang.link.toolbar,
+           command: 'link',
+           toolbar: 'links,10'
+         } );
+         editor.ui.addButton( 'Unlink', {
+           label: editor.lang.link.unlink,
+           command: 'unlink',
+           toolbar: 'links,20'
+         } );
+         editor.ui.addButton( 'Anchor', {
+           label: editor.lang.link.anchor.toolbar,
+           command: 'anchor',
+           toolbar: 'links,30'
+         } );
+       }
+ 
+       CKEDITOR.dialog.add( 'link', this.path + 'dialogs/link.js' );
+       CKEDITOR.dialog.add( 'anchor', this.path + 'dialogs/anchor.js' );
+ 
+       // If the "menu" plugin is loaded, register the menu items.
+       if ( editor.addMenuItems ) {
+         editor.addMenuItems( {
+           anchor: {
+             label: editor.lang.link.anchor.menu,
+             command: 'anchor',
+             group: 'anchor',
+             order: 1
+           },
+ 
+           removeAnchor: {
+             label: editor.lang.link.anchor.remove,
+             command: 'removeAnchor',
+             group: 'anchor',
+             order: 5
+           },
+ 
+         } );
+       }
+ 
+       // If the "contextmenu" plugin is loaded, register the listeners.
+       if ( editor.contextMenu ) {
+         editor.contextMenu.addListener( function( element ) {
+           if ( !element || element.isReadOnly() ) {
+             return null;
+           }
+ 
+           var anchor = CKEDITOR.plugins.link.tryRestoreFakeAnchor( editor, element );
+ 
+           if ( !anchor && !( anchor = CKEDITOR.plugins.link.getSelectedLink( editor ) ) ) {
+             return null;
+           }
+ 
+           var menu = {};
+ 
+           if ( anchor && anchor.hasAttribute( 'name' ) ) {
+             menu.anchor = menu.removeAnchor = CKEDITOR.TRISTATE_OFF;
+           }
+ 
+           return menu;
+         } );
+       }
+ 
+       this.compiledProtectionFunction = getCompiledProtectionFunction( editor );
+     },
+ 
+     afterInit: function( editor ) {
+       // Empty anchors upcasting to fake objects.
+       editor.dataProcessor.dataFilter.addRules( {
+         elements: {
+           a: function( element ) {
+             if ( !element.attributes.name ) {
+               return null;
+             }
+ 
+             if ( !element.children.length ) {
+               return editor.createFakeParserElement( element, 'cke_anchor', 'anchor' );
+             }
+ 
+             return null;
+           }
+         }
+       } );
+ 
+       var pathFilters = editor._.elementsPath && editor._.elementsPath.filters;
+       if ( pathFilters ) {
+         pathFilters.push( function( element, name ) {
+           if ( name == 'a' ) {
+             if ( CKEDITOR.plugins.link.tryRestoreFakeAnchor( editor, element ) || ( element.getAttribute( 'name' ) && ( !element.getAttribute( 'href' ) || !element.getChildCount() ) ) ) {
+               return 'anchor';
+             }
+           }
+         } );
+       }
+     }
+   } );
+ 
+   // Loads the parameters in a selected link to the link dialog fields.
+   var javascriptProtocolRegex = /^javascript:/,
+     emailRegex = /^(?:mailto)(?:(?!\?(subject|body)=).)+/i,
+     emailSubjectRegex = /subject=([^;?:@&=$,\/]*)/i,
+     emailBodyRegex = /body=([^;?:@&=$,\/]*)/i,
+     anchorRegex = /^#(.*)$/,
+     urlRegex = /^((?:http|https|ftp|news):\/\/)?(.*)$/,
+     selectableTargets = /^(_(?:self|top|parent|blank))$/,
+     encodedEmailLinkRegex = /^javascript:void\(location\.href='mailto:'\+String\.fromCharCode\(([^)]+)\)(?:\+'(.*)')?\)$/,
+     functionCallProtectedEmailLinkRegex = /^javascript:([^(]+)\(([^)]+)\)$/,
+     popupRegex = /\s*window.open\(\s*this\.href\s*,\s*(?:'([^']*)'|null)\s*,\s*'([^']*)'\s*\)\s*;\s*return\s*false;*\s*/,
+     popupFeaturesRegex = /(?:^|,)([^=]+)=(\d+|yes|no)/gi,
+     telRegex = /^tel:(.*)$/;
+ 
+   var advAttrNames = {
+     id: 'advId',
+     dir: 'advLangDir',
+     accessKey: 'advAccessKey',
+     // 'data-cke-saved-name': 'advName',
+     name: 'advName',
+     lang: 'advLangCode',
+     tabindex: 'advTabIndex',
+     title: 'advTitle',
+     type: 'advContentType',
+     'class': 'advCSSClasses',
+     charset: 'advCharset',
+     style: 'advStyles',
+     rel: 'advRel'
+   };
+ 
+   function unescapeSingleQuote( str ) {
+     return str.replace( /\\'/g, '\'' );
+   }
+ 
+   function escapeSingleQuote( str ) {
+     return str.replace( /'/g, '\\$&' );
+   }
+ 
+   function protectEmailAddressAsEncodedString( address ) {
+     var length = address.length,
+       encodedChars = [],
+       charCode;
+ 
+     for ( var i = 0; i < length; i++ ) {
+       charCode = address.charCodeAt( i );
+       encodedChars.push( charCode );
+     }
+ 
+     return 'String.fromCharCode(' + encodedChars.join( ',' ) + ')';
+   }
+ 
+   function protectEmailLinkAsFunction( editor, email ) {
+     var plugin = editor.plugins.link,
+       name = plugin.compiledProtectionFunction.name,
+       params = plugin.compiledProtectionFunction.params,
+       retval = [ name, '(' ],
+       paramName,
+       paramValue;
+ 
+     for ( var i = 0; i < params.length; i++ ) {
+       paramName = params[ i ].toLowerCase();
+       paramValue = email[ paramName ];
+ 
+       i > 0 && retval.push( ',' );
+       retval.push( '\'', paramValue ? escapeSingleQuote( encodeURIComponent( email[ paramName ] ) ) : '', '\'' );
+     }
+     retval.push( ')' );
+     return retval.join( '' );
+   }
+ 
+   function getCompiledProtectionFunction( editor ) {
+     var emailProtection = editor.config.emailProtection || '',
+       compiledProtectionFunction;
+ 
+     // Compile the protection function pattern.
+     if ( emailProtection && emailProtection != 'encode' ) {
+       compiledProtectionFunction = {};
+ 
+       emailProtection.replace( /^([^(]+)\(([^)]+)\)$/, function( match, funcName, params ) {
+         compiledProtectionFunction.name = funcName;
+         compiledProtectionFunction.params = [];
+         params.replace( /[^,\s]+/g, function( param ) {
+           compiledProtectionFunction.params.push( param );
+         } );
+       } );
+     }
+ 
+     return compiledProtectionFunction;
+   }
+ 
+   /**
+    * Set of Link plugin helpers.
+    *
+    * @class
+    * @singleton
+    */
+   CKEDITOR.plugins.link = {
+     /**
+      * Get the surrounding link element of the current selection.
+      *
+      *		CKEDITOR.plugins.link.getSelectedLink( editor );
+      *
+      *		// The following selections will all return the link element.
+      *
+      *		<a href="#">li^nk</a>
+      *		<a href="#">[link]</a>
+      *		text[<a href="#">link]</a>
+      *		<a href="#">li[nk</a>]
+      *		[<b><a href="#">li]nk</a></b>]
+      *		[<a href="#"><b>li]nk</b></a>
+      *
+      * @since 3.2.1
+      * @param {CKEDITOR.editor} editor
+      * @param {Boolean} [returnMultiple=false] Indicates whether the function should return only the first selected link or all of them.
+      * @returns {CKEDITOR.dom.element/CKEDITOR.dom.element[]/null} A single link element or an array of link
+      * elements relevant to the current selection.
+      */
+     getSelectedLink: function( editor, returnMultiple ) {
+       var selection = editor.getSelection(),
+         selectedElement = selection.getSelectedElement(),
+         ranges = selection.getRanges(),
+         links = [],
+         link,
+         range;
+ 
+       if ( !returnMultiple && selectedElement && selectedElement.is( 'a' ) ) {
+         return selectedElement;
+       }
+ 
+       for ( var i = 0; i < ranges.length; i++ ) {
+         range = selection.getRanges()[ i ];
+ 
+         // Skip bogus to cover cases of multiple selection inside tables (#tp2245).
+         // Shrink to element to prevent losing anchor (#859).
+         range.shrink( CKEDITOR.SHRINK_ELEMENT, true, { skipBogus: true } );
+         link = editor.elementPath( range.getCommonAncestor() ).contains( 'a', 1 );
+ 
+         if ( link && returnMultiple ) {
+           links.push( link );
+         } else if ( link ) {
+           return link;
+         }
+       }
+ 
+       return returnMultiple ? links : null;
+     },
+ 
+     /**
+      * Collects anchors available in the editor (i.e. used by the Link plugin).
+      * Note that the scope of search is different for inline (the "global" document) and
+      * classic (`iframe`-based) editors (the "inner" document).
+      *
+      * @since 4.3.3
+      * @param {CKEDITOR.editor} editor
+      * @returns {CKEDITOR.dom.element[]} An array of anchor elements.
+      */
+     getEditorAnchors: function( editor ) {
+       var editable = editor.editable(),
+ 
+         // The scope of search for anchors is the entire document for inline editors
+         // and editor's editable for classic editor/divarea (https://dev.ckeditor.com/ticket/11359).
+         scope = ( editable.isInline() && !editor.plugins.divarea ) ? editor.document : editable,
+ 
+         links = scope.getElementsByTag( 'a' ),
+         imgs = scope.getElementsByTag( 'img' ),
+         anchors = [],
+         iterator = 0,
+         item;
+ 
+       // Retrieve all anchors within the scope.
+       while ( ( item = links.getItem( iterator++ ) ) ) {
+         if ( item.data( 'cke-saved-name' ) || item.hasAttribute( 'name' ) ) {
+           anchors.push( {
+             name: item.data( 'cke-saved-name' ) || item.getAttribute( 'name' ),
+             id: item.getAttribute( 'id' )
+           } );
+         }
+       }
+       // Retrieve all "fake anchors" within the scope.
+       iterator = 0;
+ 
+       while ( ( item = imgs.getItem( iterator++ ) ) ) {
+         if ( ( item = this.tryRestoreFakeAnchor( editor, item ) ) ) {
+           anchors.push( {
+             name: item.getAttribute( 'name' ),
+             id: item.getAttribute( 'id' )
+           } );
+         }
+       }
+ 
+       return anchors;
+     },
+ 
+     /**
+      * Opera and WebKit do not make it possible to select empty anchors. Fake
+      * elements must be used for them.
+      *
+      * @readonly
+      * @deprecated 4.3.3 It is set to `true` in every browser.
+      * @property {Boolean}
+      */
+     fakeAnchor: true,
+ 
+     /**
+      * For browsers that do not support CSS3 `a[name]:empty()`. Note that IE9 is included because of https://dev.ckeditor.com/ticket/7783.
+      *
+      * @readonly
+      * @deprecated 4.3.3 It is set to `false` in every browser.
+      * @property {Boolean} synAnchorSelector
+      */
+ 
+     /**
+      * For browsers that have editing issues with an empty anchor.
+      *
+      * @readonly
+      * @deprecated 4.3.3 It is set to `false` in every browser.
+      * @property {Boolean} emptyAnchorFix
+      */
+ 
+     /**
+      * Returns an element representing a real anchor restored from a fake anchor.
+      *
+      * @param {CKEDITOR.editor} editor
+      * @param {CKEDITOR.dom.element} element
+      * @returns {CKEDITOR.dom.element} Restored anchor element or nothing if the
+      * passed element was not a fake anchor.
+      */
+     tryRestoreFakeAnchor: function( editor, element ) {
+       if ( element && element.data( 'cke-real-element-type' ) && element.data( 'cke-real-element-type' ) == 'anchor' ) {
+         var link = editor.restoreRealElement( element );
+         if ( link.data( 'cke-saved-name' ) ) {
+           return link;
+         }
+       }
+     },
+ 
+     /**
+      * Parses attributes of the link element and returns an object representing
+      * the current state (data) of the link. This data format is a plain object accepted
+      * e.g. by the Link dialog window and {@link #getLinkAttributes}.
+      *
+      * **Note:** Data model format produced by the parser must be compatible with the Link
+      * plugin dialog because it is passed directly to {@link CKEDITOR.dialog#setupContent}.
+      *
+      * @since 4.4.0
+      * @param {CKEDITOR.editor} editor
+      * @param {CKEDITOR.dom.element} element
+      * @returns {Object} An object of link data.
+      */
+     parseLinkAttributes: function( editor, element ) {
+       var href = ( element && ( element.data( 'cke-saved-href' ) || element.getAttribute( 'href' ) ) ) || '',
+         compiledProtectionFunction = editor.plugins.link.compiledProtectionFunction,
+         emailProtection = editor.config.emailProtection,
+         retval = {},
+         javascriptMatch = href.match( javascriptProtocolRegex ),
+         emailMatch,
+         anchorMatch,
+         urlMatch,
+         telMatch;
+ 
+       if ( javascriptMatch ) {
+         if ( emailProtection == 'encode' ) {
+           href = href.replace( encodedEmailLinkRegex, function( match, protectedAddress, rest ) {
+             // Without it 'undefined' is appended to e-mails without subject and body (https://dev.ckeditor.com/ticket/9192).
+             rest = rest || '';
+ 
+             return 'mailto:' +
+               String.fromCharCode.apply( String, protectedAddress.split( ',' ) ) +
+               unescapeSingleQuote( rest );
+           } );
+         }
+         // Protected email link as function call.
+         else if ( emailProtection ) {
+           href.replace( functionCallProtectedEmailLinkRegex, function( match, funcName, funcArgs ) {
+             if ( funcName == compiledProtectionFunction.name ) {
+               retval.type = 'email';
+ 
+               var email = retval.email = {},
+                 paramRegex = /[^,\s]+/g,
+                 paramQuoteRegex = /(^')|('$)/g,
+                 paramsMatch = funcArgs.match( paramRegex ),
+                 paramsMatchLength = paramsMatch.length,
+                 paramName,
+                 paramVal;
+ 
+               for ( var i = 0; i < paramsMatchLength; i++ ) {
+                 paramVal = decodeURIComponent( unescapeSingleQuote( paramsMatch[ i ].replace( paramQuoteRegex, '' ) ) );
+                 paramName = compiledProtectionFunction.params[ i ].toLowerCase();
+                 email[ paramName ] = paramVal;
+               }
+               email.address = [ email.name, email.domain ].join( '@' );
+             }
+           } );
+         }
+       }
+ 
+       if ( !retval.type ) {
+         if ( ( anchorMatch = href.match( anchorRegex ) ) ) {
+           retval.type = 'anchor';
+           retval.anchor = {};
+           retval.anchor.name = retval.anchor.id = anchorMatch[ 1 ];
+         } else if ( ( telMatch = href.match( telRegex ) ) ) {
+           retval.type = 'tel';
+           retval.tel = telMatch[ 1 ];
+         }
+         // Protected email link as encoded string.
+         else if ( ( emailMatch = href.match( emailRegex ) ) ) {
+           var subjectMatch = href.match( emailSubjectRegex ),
+             bodyMatch = href.match( emailBodyRegex ),
+             email = ( retval.email = {} );
+ 
+           retval.type = 'email';
+           email.address = emailMatch[ 0 ].replace( 'mailto:', '' );
+           subjectMatch && ( email.subject = decodeURIComponent( subjectMatch[ 1 ] ) );
+           bodyMatch && ( email.body = decodeURIComponent( bodyMatch[ 1 ] ) );
+         }
+         // urlRegex matches empty strings, so need to check for href as well.
+         else if ( href && ( urlMatch = href.match( urlRegex ) ) ) {
+           retval.type = 'url';
+           retval.url = {};
+           retval.url.protocol = urlMatch[ 1 ];
+           retval.url.url = urlMatch[ 2 ];
+         }
+       }
+ 
+       // Load target and popup settings.
+       if ( element ) {
+         var target = element.getAttribute( 'target' );
+ 
+         // IE BUG: target attribute is an empty string instead of null in IE if it's not set.
+         if ( !target ) {
+           var onclick = element.data( 'cke-pa-onclick' ) || element.getAttribute( 'onclick' ),
+             onclickMatch = onclick && onclick.match( popupRegex );
+ 
+           if ( onclickMatch ) {
+             retval.target = {
+               type: 'popup',
+               name: onclickMatch[ 1 ]
+             };
+ 
+             var featureMatch;
+             while ( ( featureMatch = popupFeaturesRegex.exec( onclickMatch[ 2 ] ) ) ) {
+               // Some values should remain numbers (https://dev.ckeditor.com/ticket/7300)
+               if ( ( featureMatch[ 2 ] == 'yes' || featureMatch[ 2 ] == '1' ) && !( featureMatch[ 1 ] in { height: 1, width: 1, top: 1, left: 1 } ) ) {
+                 retval.target[ featureMatch[ 1 ] ] = true;
+               } else if ( isFinite( featureMatch[ 2 ] ) ) {
+                 retval.target[ featureMatch[ 1 ] ] = featureMatch[ 2 ];
+               }
+             }
+           }
+         } else {
+           retval.target = {
+             type: target.match( selectableTargets ) ? target : 'frame',
+             name: target
+           };
+         }
+ 
+         var download = element.getAttribute( 'download' );
+         if ( download !== null ) {
+           retval.download = true;
+         }
+ 
+         var advanced = {};
+         for ( var a in advAttrNames ) {
+           var val = element.getAttribute( a );
+ 
+           if ( val ) {
+             advanced[ advAttrNames[ a ] ] = val;
+           }
+         }
+ 
+         var advName = element.data( 'cke-saved-name' ) || advanced.advName;
+         if ( advName ) {
+           advanced.advName = advName;
+         }
+ 
+         if ( !CKEDITOR.tools.isEmpty( advanced ) ) {
+           retval.advanced = advanced;
+         }
+       }
+ 
+       return retval;
+     },
+ 
+     /**
+      * Converts link data produced by {@link #parseLinkAttributes} into an object which consists
+      * of attributes to be set (with their values) and an array of attributes to be removed.
+      * This method can be used to compose or to update any link element with the given data.
+      *
+      * @since 4.4.0
+      * @param {CKEDITOR.editor} editor
+      * @param {Object} data Data in {@link #parseLinkAttributes} format.
+      * @returns {Object} An object consisting of two keys, i.e.:
+      *
+      *		{
+      *			// Attributes to be set.
+      *			set: {
+      *				href: 'http://foo.bar',
+      *				target: 'bang'
+      *			},
+      *			// Attributes to be removed.
+      *			removed: [
+      *				'id', 'style'
+      *			]
+      *		}
+      *
+      */
+     getLinkAttributes: function( editor, data ) {
+       var emailProtection = editor.config.emailProtection || '',
+         set = {};
+ 
+       // Compose the URL.
+       switch ( data.type ) {
+         case 'url':
+           var protocol = ( data.url && data.url.protocol !== undefined ) ? data.url.protocol : 'http://',
+             url = ( data.url && CKEDITOR.tools.trim( data.url.url ) ) || '';
+ 
+           set[ 'data-cke-saved-href' ] = ( url.indexOf( '/' ) === 0 ) ? url : protocol + url;
+           break;
+ 
+         case 'anchor':
+           var name = ( data.anchor && data.anchor.name ),
+             id = ( data.anchor && data.anchor.id );
+ 
+           set[ 'data-cke-saved-href' ] = '#' + ( name || id || '' );
+           break;
+ 
+         case 'email':
+           var email = data.email,
+             address = email.address,
+             linkHref;
+ 
+           switch ( emailProtection ) {
+             case '':
+             case 'encode':
+               var subject = encodeURIComponent( email.subject || '' ),
+                 body = encodeURIComponent( email.body || '' ),
+                 argList = [];
+ 
+               // Build the e-mail parameters first.
+               subject && argList.push( 'subject=' + subject );
+               body && argList.push( 'body=' + body );
+               argList = argList.length ? '?' + argList.join( '&' ) : '';
+ 
+               if ( emailProtection == 'encode' ) {
+                 linkHref = [
+                   'javascript:void(location.href=\'mailto:\'+', // jshint ignore:line
+                   protectEmailAddressAsEncodedString( address )
+                 ];
+                 // parameters are optional.
+                 argList && linkHref.push( '+\'', escapeSingleQuote( argList ), '\'' );
+ 
+                 linkHref.push( ')' );
+               } else {
+                 linkHref = [ 'mailto:', address, argList ];
+               }
+               break;
+ 
+             default:
+               // Separating name and domain.
+               var nameAndDomain = address.split( '@', 2 );
+               email.name = nameAndDomain[ 0 ];
+               email.domain = nameAndDomain[ 1 ];
+ 
+               linkHref = [ 'javascript:', protectEmailLinkAsFunction( editor, email ) ]; // jshint ignore:line
+           }
+           set[ 'data-cke-saved-href' ] = linkHref.join( '' );
+           break;
+ 
+         case 'tel':
+           set[ 'data-cke-saved-href' ] = 'tel:' + data.tel;
+           break;
+       }
+ 
+       // Popups and target.
+       if ( data.target ) {
+         if ( data.target.type == 'popup' ) {
+           var onclickList = [
+               'window.open(this.href, \'', data.target.name || '', '\', \''
+             ],
+             featureList = [
+               'resizable', 'status', 'location', 'toolbar', 'menubar', 'fullscreen', 'scrollbars', 'dependent'
+             ],
+             featureLength = featureList.length,
+             addFeature = function( featureName ) {
+               if ( data.target[ featureName ] ) {
+                 featureList.push( featureName + '=' + data.target[ featureName ] );
+               }
+             };
+ 
+           for ( var i = 0; i < featureLength; i++ ) {
+             featureList[ i ] = featureList[ i ] + ( data.target[ featureList[ i ] ] ? '=yes' : '=no' );
+           }
+ 
+           addFeature( 'width' );
+           addFeature( 'left' );
+           addFeature( 'height' );
+           addFeature( 'top' );
+ 
+           onclickList.push( featureList.join( ',' ), '\'); return false;' );
+           set[ 'data-cke-pa-onclick' ] = onclickList.join( '' );
+         }
+         else if ( data.target.type != 'notSet' && data.target.name ) {
+           set.target = data.target.name;
+         }
+       }
+ 
+       // Force download attribute.
+       if ( data.download ) {
+         set.download = '';
+       }
+ 
+       // Advanced attributes.
+       if ( data.advanced ) {
+         for ( var a in advAttrNames ) {
+           var val = data.advanced[ advAttrNames[ a ] ];
+ 
+           if ( val ) {
+             set[ a ] = val;
+           }
+         }
+ 
+         if ( set.name ) {
+           set[ 'data-cke-saved-name' ] = set.name;
+         }
+       }
+ 
+       // Browser need the "href" fro copy/paste link to work. (https://dev.ckeditor.com/ticket/6641)
+       if ( set[ 'data-cke-saved-href' ] ) {
+         set.href = set[ 'data-cke-saved-href' ];
+       }
+ 
+       var removed = {
+         target: 1,
+         onclick: 1,
+         'data-cke-pa-onclick': 1,
+         'data-cke-saved-name': 1,
+         'download': 1
+       };
+ 
+       if ( data.advanced ) {
+         CKEDITOR.tools.extend( removed, advAttrNames );
+       }
+ 
+       // Remove all attributes which are not currently set.
+       for ( var s in set ) {
+         delete removed[ s ];
+       }
+ 
+       return {
+         set: set,
+         removed: CKEDITOR.tools.object.keys( removed )
+       };
+     },
+ 
+ 
+     /**
+      * Determines whether an element should have a "Display Text" field in the Link dialog.
+      *
+      * @since 4.5.11
+      * @param {CKEDITOR.dom.element/null} element Selected element, `null` if none selected or if a ranged selection
+      * is made.
+      * @param {CKEDITOR.editor} editor The editor instance for which the check is performed.
+      * @returns {Boolean}
+      */
+     showDisplayTextForElement: function( element, editor ) {
+       var undesiredElements = {
+           img: 1,
+           table: 1,
+           tbody: 1,
+           thead: 1,
+           tfoot: 1,
+           input: 1,
+           select: 1,
+           textarea: 1
+         },
+         selection = editor.getSelection();
+ 
+       // Widget duck typing, we don't want to show display text for widgets.
+       if ( editor.widgets && editor.widgets.focused ) {
+         return false;
+       }
+ 
+       if ( selection && selection.getRanges().length > 1 ) {
+         return false;
+       }
+ 
+       return !element || !element.getName || !element.is( undesiredElements );
+     }
+   };
+ 
+   // TODO Much probably there's no need to expose these as public objects.
+ 
+   CKEDITOR.unlinkCommand = function() {};
+   CKEDITOR.unlinkCommand.prototype = {
+     exec: function( editor ) {
+       // IE/Edge removes link from selection while executing "unlink" command when cursor
+       // is right before/after link's text. Therefore whole link must be selected and the
+       // position of cursor must be restored to its initial state after unlinking. (https://dev.ckeditor.com/ticket/13062)
+       if ( CKEDITOR.env.ie ) {
+         var range = editor.getSelection().getRanges()[ 0 ],
+           link = ( range.getPreviousEditableNode() && range.getPreviousEditableNode().getAscendant( 'a', true ) ) ||
+             ( range.getNextEditableNode() && range.getNextEditableNode().getAscendant( 'a', true ) ),
+           bookmark;
+ 
+         if ( range.collapsed && link ) {
+           bookmark = range.createBookmark();
+           range.selectNodeContents( link );
+           range.select();
+         }
+       }
+ 
+       var style = new CKEDITOR.style( { element: 'a', type: CKEDITOR.STYLE_INLINE, alwaysRemoveElement: 1 } );
+       editor.removeStyle( style );
+ 
+       if ( bookmark ) {
+         range.moveToBookmark( bookmark );
+         range.select();
+       }
+     },
+ 
+     refresh: function( editor, path ) {
+       // Despite our initial hope, document.queryCommandEnabled() does not work
+       // for this in Firefox. So we must detect the state by element paths.
+ 
+       var element = path.lastElement && path.lastElement.getAscendant( 'a', true );
+ 
+       if ( element && element.getName() == 'a' && element.getAttribute( 'href' ) && element.getChildCount() ) {
+         this.setState( CKEDITOR.TRISTATE_OFF );
+       } else {
+         this.setState( CKEDITOR.TRISTATE_DISABLED );
+       }
+     },
+ 
+     contextSensitive: 1,
+     startDisabled: 1,
+     requiredContent: 'a[href]',
+     editorFocus: 1
+   };
+ 
+   CKEDITOR.removeAnchorCommand = function() {};
+   CKEDITOR.removeAnchorCommand.prototype = {
+     exec: function( editor ) {
+       var sel = editor.getSelection(),
+         bms = sel.createBookmarks(),
+         anchor;
+ 
+       if ( sel && ( anchor = sel.getSelectedElement() ) && ( !anchor.getChildCount() ? CKEDITOR.plugins.link.tryRestoreFakeAnchor( editor, anchor ) : anchor.is( 'a' ) ) ) {
+         anchor.remove( 1 );
+       } else {
+         if ( ( anchor = CKEDITOR.plugins.link.getSelectedLink( editor ) ) ) {
+           if ( anchor.hasAttribute( 'href' ) ) {
+             anchor.removeAttributes( { name: 1, 'data-cke-saved-name': 1 } );
+             anchor.removeClass( 'cke_anchor' );
+           } else {
+             anchor.remove( 1 );
+           }
+         }
+       }
+       sel.selectBookmarks( bms );
+     },
+     requiredContent: 'a[name]'
+   };
+ 
+   CKEDITOR.tools.extend( CKEDITOR.config, {
+     /**
+      * Whether to show the Advanced tab in the Link dialog window.
+      *
+      * @cfg {Boolean} [linkShowAdvancedTab=true]
+      * @member CKEDITOR.config
+      */
+     linkShowAdvancedTab: true,
+ 
+     /**
+      * Whether to show the Target tab in the Link dialog window.
+      *
+      * @cfg {Boolean} [linkShowTargetTab=true]
+      * @member CKEDITOR.config
+      */
+     linkShowTargetTab: true,
+ 
+     /**
+      * Default URL protocol used for the Link dialog.
+      *
+      * Available values are:
+      *
+      * * `'http://'`
+      * * `'https://'`
+      * * `'ftp://'`
+      * * `'news://'`
+      * * `''` &mdash; An empty string for the `<other>` option.
+      *
+      * ```js
+      * config.linkDefaultProtocol = 'https://';
+      * ```
+      *
+      * @cfg {String}
+      * @member CKEDITOR.config
+      * @since 4.13.0
+      */
+     linkDefaultProtocol: 'http://'
+ 
+     /**
+      * Whether JavaScript code is allowed as a `href` attribute in an anchor tag.
+      * With this option enabled it is possible to create links like:
+      *
+      * ```html
+      * <a href="javascript:alert('Hello world!')">hello world</a>
+      * ```
+      *
+      * By default JavaScript links are not allowed and will not pass
+      * the Link dialog window validation.
+      *
+      * @since 4.4.1
+      * @cfg {Boolean} [linkJavaScriptLinksAllowed=false]
+      * @member CKEDITOR.config
+      */
+ 
+     /**
+      * Optional JavaScript regular expression used whenever phone numbers in the Link dialog should be validated.
+      *
+      * ```js
+      * config.linkPhoneRegExp = /^[0-9]{9}$/;
+      * ```
+      *
+      * @since 4.11.0
+      * @cfg {RegExp} [linkPhoneRegExp]
+      * @member CKEDITOR.config
+      */
+ 
+     /**
+      * Optional message for the alert popup used when the phone number in the Link dialog does not pass the validation.
+      *
+      * ```js
+      * config.linkPhoneMsg = "Invalid number";
+      * ```
+      *
+      * @since 4.11.0
+      * @cfg {String} [linkPhoneMsg]
+      * @member CKEDITOR.config
+      */
+   } );
+ } )();
+ 
\ No newline at end of file
diff --git a/libraries/ckeditor/plugins/notification/lang/az.js b/libraries/ckeditor/plugins/notification/lang/az.js
index 5cded7d5dfb54a43265f70746d5f576cefd13cfb..e8c23d530af568c7e199b316abb33b415240f780 100644
--- a/libraries/ckeditor/plugins/notification/lang/az.js
+++ b/libraries/ckeditor/plugins/notification/lang/az.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'az', {
diff --git a/libraries/ckeditor/plugins/notification/lang/bg.js b/libraries/ckeditor/plugins/notification/lang/bg.js
index e7f7f6dc9b62ee9c95354eafbd2a635958511a10..6c8fbd3652723e659524316bfabd4360922f16c1 100644
--- a/libraries/ckeditor/plugins/notification/lang/bg.js
+++ b/libraries/ckeditor/plugins/notification/lang/bg.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'bg', {
diff --git a/libraries/ckeditor/plugins/notification/lang/ca.js b/libraries/ckeditor/plugins/notification/lang/ca.js
index 5672186e1c4fcb659ed0e24fb510a47d119a5ad6..66d2b252eae8069ac3177df0a2406218572b6f8a 100644
--- a/libraries/ckeditor/plugins/notification/lang/ca.js
+++ b/libraries/ckeditor/plugins/notification/lang/ca.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'ca', {
diff --git a/libraries/ckeditor/plugins/notification/lang/cs.js b/libraries/ckeditor/plugins/notification/lang/cs.js
index 910030c8e694d1066b5f66d14b814d3a30c627d8..83c158e45fce4e91620578a2057424cae576e83f 100644
--- a/libraries/ckeditor/plugins/notification/lang/cs.js
+++ b/libraries/ckeditor/plugins/notification/lang/cs.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'cs', {
diff --git a/libraries/ckeditor/plugins/notification/lang/da.js b/libraries/ckeditor/plugins/notification/lang/da.js
index c01befd52a0dcda826a25c0793c505f76d979bdd..8c8c8db4c549c95d3d348332579a0c911916c1bd 100644
--- a/libraries/ckeditor/plugins/notification/lang/da.js
+++ b/libraries/ckeditor/plugins/notification/lang/da.js
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'da', {
-	closed: 'Notefikation lukket.'
+	closed: 'Notifikation lukket.'
 } );
diff --git a/libraries/ckeditor/plugins/notification/lang/de-ch.js b/libraries/ckeditor/plugins/notification/lang/de-ch.js
index eba529b7ca3c487d2dc445a463b650971bdb3a9a..b5733653630f7ff12edafec5e1a994f76904363f 100644
--- a/libraries/ckeditor/plugins/notification/lang/de-ch.js
+++ b/libraries/ckeditor/plugins/notification/lang/de-ch.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'de-ch', {
diff --git a/libraries/ckeditor/plugins/notification/lang/de.js b/libraries/ckeditor/plugins/notification/lang/de.js
index 235197ce7afc892378f48e43883d3575fcb67777..6609af61faf5719aa352fa5209c73c780e1f0112 100644
--- a/libraries/ckeditor/plugins/notification/lang/de.js
+++ b/libraries/ckeditor/plugins/notification/lang/de.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'de', {
diff --git a/libraries/ckeditor/plugins/notification/lang/en-au.js b/libraries/ckeditor/plugins/notification/lang/en-au.js
index 455512850b63376e897e78589402623b0ba5ca52..5c51d3a001461bae62d601302bda6b88dc35b453 100644
--- a/libraries/ckeditor/plugins/notification/lang/en-au.js
+++ b/libraries/ckeditor/plugins/notification/lang/en-au.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'en-au', {
diff --git a/libraries/ckeditor/plugins/notification/lang/en.js b/libraries/ckeditor/plugins/notification/lang/en.js
index 790088104e726440732768b8dfafc02f56f10cb6..fda9a165c0825ac02a9be709a70d791bb03760d2 100644
--- a/libraries/ckeditor/plugins/notification/lang/en.js
+++ b/libraries/ckeditor/plugins/notification/lang/en.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'en', {
diff --git a/libraries/ckeditor/plugins/notification/lang/eo.js b/libraries/ckeditor/plugins/notification/lang/eo.js
index 1e611b4b2ca78d3a5b37eaf32466a0206d8c4f13..3578facfeb88fa38cac8db9666bb5dcc4d5cf60e 100644
--- a/libraries/ckeditor/plugins/notification/lang/eo.js
+++ b/libraries/ckeditor/plugins/notification/lang/eo.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'eo', {
diff --git a/libraries/ckeditor/plugins/notification/lang/es-mx.js b/libraries/ckeditor/plugins/notification/lang/es-mx.js
index b54557c0a951b01a5e08d7e210479b205eb32bb3..051884cd36bf1ed07d70a500a66aa7eeccae335e 100644
--- a/libraries/ckeditor/plugins/notification/lang/es-mx.js
+++ b/libraries/ckeditor/plugins/notification/lang/es-mx.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'es-mx', {
diff --git a/libraries/ckeditor/plugins/notification/lang/es.js b/libraries/ckeditor/plugins/notification/lang/es.js
index 51aa6930c015f52d25efdac086666eda3154dba0..9fa8b7a860f867cacdef683161ff68a631a1d6c6 100644
--- a/libraries/ckeditor/plugins/notification/lang/es.js
+++ b/libraries/ckeditor/plugins/notification/lang/es.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'es', {
diff --git a/libraries/ckeditor/plugins/notification/lang/et.js b/libraries/ckeditor/plugins/notification/lang/et.js
index 5175ed374dccf47e617fdc888e9f4c458ff9df75..434583ca5e912bf2544f4f9df04d42b1cd44c0ea 100644
--- a/libraries/ckeditor/plugins/notification/lang/et.js
+++ b/libraries/ckeditor/plugins/notification/lang/et.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'et', {
diff --git a/libraries/ckeditor/plugins/notification/lang/eu.js b/libraries/ckeditor/plugins/notification/lang/eu.js
index 9fa8b2b5f042faf436d469f7fe902780b649f588..2596218e3814458299a3fcd2d6ae888ae48a681d 100644
--- a/libraries/ckeditor/plugins/notification/lang/eu.js
+++ b/libraries/ckeditor/plugins/notification/lang/eu.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'eu', {
diff --git a/libraries/ckeditor/plugins/notification/lang/fa.js b/libraries/ckeditor/plugins/notification/lang/fa.js
index c2fed3ef1cebdb8c08abcd5507d09022291c84c3..e29531957c7fad98fbc68f0a770294b5f7901d19 100644
--- a/libraries/ckeditor/plugins/notification/lang/fa.js
+++ b/libraries/ckeditor/plugins/notification/lang/fa.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'fa', {
diff --git a/libraries/ckeditor/plugins/notification/lang/fr.js b/libraries/ckeditor/plugins/notification/lang/fr.js
index 4ec7851df91639e81a90498f34fa807aa2ee1034..5c33d84b2c1ad41dc311c00b4632b0bc09ea6438 100644
--- a/libraries/ckeditor/plugins/notification/lang/fr.js
+++ b/libraries/ckeditor/plugins/notification/lang/fr.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'fr', {
diff --git a/libraries/ckeditor/plugins/notification/lang/gl.js b/libraries/ckeditor/plugins/notification/lang/gl.js
index 8d2e6efdc998efee221f8fd2d3bf49783d0f9d20..9c12af39c41fbfe7d0aa111a4831ec807c143b02 100644
--- a/libraries/ckeditor/plugins/notification/lang/gl.js
+++ b/libraries/ckeditor/plugins/notification/lang/gl.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'gl', {
diff --git a/libraries/ckeditor/plugins/notification/lang/hr.js b/libraries/ckeditor/plugins/notification/lang/hr.js
index e2951bb29a3cb1733e2fe0f6a8d935d892f07fff..7468b120fe87c77325c4f9fecd34dad688ab401b 100644
--- a/libraries/ckeditor/plugins/notification/lang/hr.js
+++ b/libraries/ckeditor/plugins/notification/lang/hr.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'hr', {
diff --git a/libraries/ckeditor/plugins/notification/lang/hu.js b/libraries/ckeditor/plugins/notification/lang/hu.js
index 9686608ace6e66d416bb3c318f0426f457143804..545082d7e062029280451b4c1526d3521fb3f887 100644
--- a/libraries/ckeditor/plugins/notification/lang/hu.js
+++ b/libraries/ckeditor/plugins/notification/lang/hu.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'hu', {
diff --git a/libraries/ckeditor/plugins/notification/lang/id.js b/libraries/ckeditor/plugins/notification/lang/id.js
index b21b84cc18a045ee864555076c69f3b31eced37a..1b6d9fbb99823c91895eda86db1884041bbe7319 100644
--- a/libraries/ckeditor/plugins/notification/lang/id.js
+++ b/libraries/ckeditor/plugins/notification/lang/id.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'id', {
diff --git a/libraries/ckeditor/plugins/notification/lang/it.js b/libraries/ckeditor/plugins/notification/lang/it.js
index 1abea4bd289cd781ac30fa76709d614da2f5078a..f03919a071ce8430a779bde083e5ab5d1952f4a8 100644
--- a/libraries/ckeditor/plugins/notification/lang/it.js
+++ b/libraries/ckeditor/plugins/notification/lang/it.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'it', {
diff --git a/libraries/ckeditor/plugins/notification/lang/ja.js b/libraries/ckeditor/plugins/notification/lang/ja.js
index 1ebcde939fd127b02dc08ac4cd6e3faed6988c0c..732ebf2fbebdf79ac35d61ccee27620b4d3e5824 100644
--- a/libraries/ckeditor/plugins/notification/lang/ja.js
+++ b/libraries/ckeditor/plugins/notification/lang/ja.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'ja', {
diff --git a/libraries/ckeditor/plugins/notification/lang/km.js b/libraries/ckeditor/plugins/notification/lang/km.js
index 0301081cfadfc2115f20c735b56297a30973bbdd..bd827dddaa2a7829dbbbf71fcfa070a4882ac6ee 100644
--- a/libraries/ckeditor/plugins/notification/lang/km.js
+++ b/libraries/ckeditor/plugins/notification/lang/km.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'km', {
diff --git a/libraries/ckeditor/plugins/notification/lang/ko.js b/libraries/ckeditor/plugins/notification/lang/ko.js
index 193afdc774894095ffe5e7f44e1390dd79bbe88a..eaab90f680dbf4b233227ae29764506bf700d86e 100644
--- a/libraries/ckeditor/plugins/notification/lang/ko.js
+++ b/libraries/ckeditor/plugins/notification/lang/ko.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'ko', {
diff --git a/libraries/ckeditor/plugins/notification/lang/ku.js b/libraries/ckeditor/plugins/notification/lang/ku.js
index f60769f922180ac04f69cb9e0de7c120cd2925c1..a405aeb10e01c35ea1111e004939d408fe394e96 100644
--- a/libraries/ckeditor/plugins/notification/lang/ku.js
+++ b/libraries/ckeditor/plugins/notification/lang/ku.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'ku', {
diff --git a/libraries/ckeditor/plugins/notification/lang/lt.js b/libraries/ckeditor/plugins/notification/lang/lt.js
new file mode 100644
index 0000000000000000000000000000000000000000..9660fac250d29b03caa0da844fc88d8507a25a5f
--- /dev/null
+++ b/libraries/ckeditor/plugins/notification/lang/lt.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+*/
+CKEDITOR.plugins.setLang( 'notification', 'lt', {
+	closed: 'Pranešimas uždarytas.'
+} );
diff --git a/libraries/ckeditor/plugins/notification/lang/lv.js b/libraries/ckeditor/plugins/notification/lang/lv.js
index bde6a909f8a72bac597741e13b4ac274b38e2440..0d8092469c5addec39cca6c5566fbc99ff19ab46 100644
--- a/libraries/ckeditor/plugins/notification/lang/lv.js
+++ b/libraries/ckeditor/plugins/notification/lang/lv.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'lv', {
diff --git a/libraries/ckeditor/plugins/notification/lang/nb.js b/libraries/ckeditor/plugins/notification/lang/nb.js
index 8a742156a3afb3ce3f0507042693ba0eaa4fc0de..9efb45e35c9ef6be347d129a8fc3579a7afc2920 100644
--- a/libraries/ckeditor/plugins/notification/lang/nb.js
+++ b/libraries/ckeditor/plugins/notification/lang/nb.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'nb', {
diff --git a/libraries/ckeditor/plugins/notification/lang/nl.js b/libraries/ckeditor/plugins/notification/lang/nl.js
index bd5a1ba64999628fe198f3f49de2c7472d79e171..cde101c450914bd554709e38829576dc4006dacc 100644
--- a/libraries/ckeditor/plugins/notification/lang/nl.js
+++ b/libraries/ckeditor/plugins/notification/lang/nl.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'nl', {
diff --git a/libraries/ckeditor/plugins/notification/lang/oc.js b/libraries/ckeditor/plugins/notification/lang/oc.js
index 977d8ef6b7c3d56d2ad27602eab63f6d71ab358d..1b5f9a042ee7d651cd63f3216db7f460375d2668 100644
--- a/libraries/ckeditor/plugins/notification/lang/oc.js
+++ b/libraries/ckeditor/plugins/notification/lang/oc.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'oc', {
diff --git a/libraries/ckeditor/plugins/notification/lang/pl.js b/libraries/ckeditor/plugins/notification/lang/pl.js
index f539de255683799951b743cb7ebfa1406c83237d..e3eccdf720ccd9973752a22b72e2d1d9f8d248a2 100644
--- a/libraries/ckeditor/plugins/notification/lang/pl.js
+++ b/libraries/ckeditor/plugins/notification/lang/pl.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'pl', {
diff --git a/libraries/ckeditor/plugins/notification/lang/pt-br.js b/libraries/ckeditor/plugins/notification/lang/pt-br.js
index 0565cb20fae4bd1c78a1e125eca5ccb52df4c789..892fb5105e1912ed6a78cf809cbd51845a9d7796 100644
--- a/libraries/ckeditor/plugins/notification/lang/pt-br.js
+++ b/libraries/ckeditor/plugins/notification/lang/pt-br.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'pt-br', {
diff --git a/libraries/ckeditor/plugins/notification/lang/pt.js b/libraries/ckeditor/plugins/notification/lang/pt.js
index 556c4e2a5d854678ae3778977c7ce8a18376c208..120cd8124c96f72625f3216d6cdfbd9c5d69ecb1 100644
--- a/libraries/ckeditor/plugins/notification/lang/pt.js
+++ b/libraries/ckeditor/plugins/notification/lang/pt.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'pt', {
diff --git a/libraries/ckeditor/plugins/notification/lang/ro.js b/libraries/ckeditor/plugins/notification/lang/ro.js
index f66e4e95f75d543babe0e5e672bc36e5eafeeb62..8e1603c85293fff21cefdae81afb9c087cbd3920 100644
--- a/libraries/ckeditor/plugins/notification/lang/ro.js
+++ b/libraries/ckeditor/plugins/notification/lang/ro.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'ro', {
diff --git a/libraries/ckeditor/plugins/notification/lang/ru.js b/libraries/ckeditor/plugins/notification/lang/ru.js
index 44e6042fb489abba33a0ad4ba25f9eb2389abf7e..ba53ee67a0f54de11bd4d4377a43522618d6ab8a 100644
--- a/libraries/ckeditor/plugins/notification/lang/ru.js
+++ b/libraries/ckeditor/plugins/notification/lang/ru.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'ru', {
diff --git a/libraries/ckeditor/plugins/notification/lang/sk.js b/libraries/ckeditor/plugins/notification/lang/sk.js
index 53fc5a9a472214c56684aa07c58f82131ae593c2..bcdabd24322e216cc6f45d5d1109530089a17b23 100644
--- a/libraries/ckeditor/plugins/notification/lang/sk.js
+++ b/libraries/ckeditor/plugins/notification/lang/sk.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'sk', {
diff --git a/libraries/ckeditor/plugins/notification/lang/sq.js b/libraries/ckeditor/plugins/notification/lang/sq.js
index 6d44166094a658091d665c4770b81cf7095c1faf..1b09c6c1d78b54d83f36d3fe8fa6e098eed2fa91 100644
--- a/libraries/ckeditor/plugins/notification/lang/sq.js
+++ b/libraries/ckeditor/plugins/notification/lang/sq.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'sq', {
diff --git a/libraries/ckeditor/plugins/notification/lang/sr-latn.js b/libraries/ckeditor/plugins/notification/lang/sr-latn.js
index c5cf5405b1675c56049f1974e214a2a706c87fa1..b315725dc5a71aea3977bc691403d9de0dc65ef6 100644
--- a/libraries/ckeditor/plugins/notification/lang/sr-latn.js
+++ b/libraries/ckeditor/plugins/notification/lang/sr-latn.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'sr-latn', {
diff --git a/libraries/ckeditor/plugins/notification/lang/sr.js b/libraries/ckeditor/plugins/notification/lang/sr.js
index c0f1af3ef0e52767c0f89268bb60d4f738a63535..36c62eb625625200e3b66d872aa084a26b2a69c9 100644
--- a/libraries/ckeditor/plugins/notification/lang/sr.js
+++ b/libraries/ckeditor/plugins/notification/lang/sr.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'sr', {
diff --git a/libraries/ckeditor/plugins/notification/lang/sv.js b/libraries/ckeditor/plugins/notification/lang/sv.js
index 932f320c8c7d1961394a4ab7c58861fd814bb12f..503f3779cf7e7187d2aeac2a4fefb0c4ff042385 100644
--- a/libraries/ckeditor/plugins/notification/lang/sv.js
+++ b/libraries/ckeditor/plugins/notification/lang/sv.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'sv', {
diff --git a/libraries/ckeditor/plugins/notification/lang/tr.js b/libraries/ckeditor/plugins/notification/lang/tr.js
index d962db162247731b938fc0332bbb8336b2d891e9..a78f05d6b1a519ccca46445d19968db6dbf87b3f 100644
--- a/libraries/ckeditor/plugins/notification/lang/tr.js
+++ b/libraries/ckeditor/plugins/notification/lang/tr.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'tr', {
diff --git a/libraries/ckeditor/plugins/notification/lang/ug.js b/libraries/ckeditor/plugins/notification/lang/ug.js
index ebe83e209dc67d768422c4e70e3de7a1be3c06f0..a64e575c4c4d9fc2a034ddd8ab75d4b973646b82 100644
--- a/libraries/ckeditor/plugins/notification/lang/ug.js
+++ b/libraries/ckeditor/plugins/notification/lang/ug.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'ug', {
diff --git a/libraries/ckeditor/plugins/notification/lang/uk.js b/libraries/ckeditor/plugins/notification/lang/uk.js
index 520d7642545835f76125867a8db3c6f3920d756b..435a7e2cd42e77218e3500e73d93c78948f808fa 100644
--- a/libraries/ckeditor/plugins/notification/lang/uk.js
+++ b/libraries/ckeditor/plugins/notification/lang/uk.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'uk', {
diff --git a/libraries/ckeditor/plugins/notification/lang/zh-cn.js b/libraries/ckeditor/plugins/notification/lang/zh-cn.js
index 20ded6b3f02320b515c8bc36d4658edac68906a0..acf67a67776877026eee9834f56d0c955134fbfd 100644
--- a/libraries/ckeditor/plugins/notification/lang/zh-cn.js
+++ b/libraries/ckeditor/plugins/notification/lang/zh-cn.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'zh-cn', {
diff --git a/libraries/ckeditor/plugins/notification/lang/zh.js b/libraries/ckeditor/plugins/notification/lang/zh.js
index c65ef21944900e3481945d72f7b0a6469b1b8619..7b9663a54abac780d5d880ef432a49b0e7cafd04 100644
--- a/libraries/ckeditor/plugins/notification/lang/zh.js
+++ b/libraries/ckeditor/plugins/notification/lang/zh.js
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang( 'notification', 'zh', {
diff --git a/libraries/ckeditor/plugins/notification/plugin.js b/libraries/ckeditor/plugins/notification/plugin.js
index e1402e6083c5e96fb3575dc9ca7aef95a855d2fd..fd23accfc19ed3753e01a9efb978ceacb85d7bfc 100644
--- a/libraries/ckeditor/plugins/notification/plugin.js
+++ b/libraries/ckeditor/plugins/notification/plugin.js
@@ -1,5 +1,5 @@
 /**
- * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 
@@ -13,7 +13,7 @@
 ( function() {
 
 	CKEDITOR.plugins.add( 'notification', {
-		lang: 'az,bg,ca,cs,da,de,de-ch,en,en-au,eo,es,es-mx,et,eu,fa,fr,gl,hr,hu,id,it,ja,km,ko,ku,lv,nb,nl,oc,pl,pt,pt-br,ro,ru,sk,sq,sr,sr-latn,sv,tr,ug,uk,zh,zh-cn', // %REMOVE_LINE_CORE%
+		lang: 'az,bg,ca,cs,da,de,de-ch,en,en-au,eo,es,es-mx,et,eu,fa,fr,gl,hr,hu,id,it,ja,km,ko,ku,lt,lv,nb,nl,oc,pl,pt,pt-br,ro,ru,sk,sq,sr,sr-latn,sv,tr,ug,uk,zh,zh-cn', // %REMOVE_LINE_CORE%
 
 		init: function( editor ) {
 			editor._.notificationArea = new Area( editor );
@@ -106,7 +106,7 @@
 	 *
 	 * Refer to the [Notifications](https://ckeditor.com/docs/ckeditor4/latest/guide/dev_notifications.html) article for more information about this feature.
 	 *
-	 * @since 4.5
+	 * @since 4.5.0
 	 * @class CKEDITOR.plugins.notification
 	 * @constructor Create a notification object. Call {@link #show} to show the created notification.
 	 * @param {CKEDITOR.editor} editor The editor instance.
@@ -435,7 +435,7 @@
 	 * When the first notification is added, the area is shown and all listeners are added.
 	 * When the last notification is removed, the area is hidden and all listeners are removed.
 	 *
-	 * @since 4.5
+	 * @since 4.5.0
 	 * @private
 	 * @class CKEDITOR.plugins.notification.area
 	 * @constructor
@@ -638,7 +638,7 @@
 
 			// Check if toolbar exist and if so, then assign values to it (#491).
 			if ( editor.toolbar ) {
-				top = editor.ui.space( 'top' );
+				top = editor.ui.space( editor.config.toolbarLocation );
 				topRect = top.getClientRect();
 			}
 
@@ -876,7 +876,7 @@
 	 * Refer to the [Notifications](https://ckeditor.com/docs/ckeditor4/latest/guide/dev_notifications.html) article
 	 * for more information about this feature.
 	 *
-	 * @since 4.5
+	 * @since 4.5.0
 	 * @cfg {Number} [notification_duration=5000]
 	 * @member CKEDITOR.config
 	 */
@@ -888,7 +888,7 @@
 	 * Using this event allows you to fully customize how a notification will be shown. It may be used to integrate
 	 * the CKEditor notification system with your web page notifications.
 	 *
-	 * @since 4.5
+	 * @since 4.5.0
 	 * @event notificationShow
 	 * @member CKEDITOR.editor
 	 * @param data
@@ -905,7 +905,7 @@
 	 * Using this event allows you to fully customize how a notification will be updated. It may be used to integrate
 	 * the CKEditor notification system with your web page notifications.
 	 *
-	 * @since 4.5
+	 * @since 4.5.0
 	 * @event notificationUpdate
 	 * @member CKEDITOR.editor
 	 * @param data
@@ -922,7 +922,7 @@
 	 * Using this event allows you to fully customize how a notification will be hidden. It may be used to integrate
 	 * the CKEditor notification system with your web page notifications.
 	 *
-	 * @since 4.5
+	 * @since 4.5.0
 	 * @event notificationHide
 	 * @member CKEDITOR.editor
 	 * @param data
diff --git a/libraries/ckeditor/plugins/notificationaggregator/plugin.js b/libraries/ckeditor/plugins/notificationaggregator/plugin.js
index ec3051cdd786bc3487dcd8f0b59fd3e96328dd9a..31b5ea214245ca6ff1e203197cc2ef85e4b6fa6e 100644
--- a/libraries/ckeditor/plugins/notificationaggregator/plugin.js
+++ b/libraries/ckeditor/plugins/notificationaggregator/plugin.js
@@ -1,5 +1,5 @@
 /**
- * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
 
@@ -64,7 +64,7 @@
 	 *			taskC.done();
 	 *		}, 3000 );
 	 *
-	 * @since 4.5
+	 * @since 4.5.0
 	 * @class CKEDITOR.plugins.notificationAggregator
 	 * @mixins CKEDITOR.event
 	 * @constructor Creates a notification aggregator instance.
@@ -392,7 +392,7 @@
 	 * and then as the file upload progresses you just call the `update` method with the number of bytes actually
 	 * downloaded.
 	 *
-	 * @since 4.5
+	 * @since 4.5.0
 	 * @class CKEDITOR.plugins.notificationAggregator.task
 	 * @mixins CKEDITOR.event
 	 * @constructor Creates a task instance for notification aggregator.
diff --git a/libraries/ckeditor/plugins/textmatch/plugin.js b/libraries/ckeditor/plugins/textmatch/plugin.js
index 7b034bbec1e5e1505e942489b99eaf2098bafecf..c451181be0a3d837ea816a3d158e82a40e0167d1 100644
--- a/libraries/ckeditor/plugins/textmatch/plugin.js
+++ b/libraries/ckeditor/plugins/textmatch/plugin.js
@@ -1,5 +1,5 @@
 /**
- * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */