aboutsummaryrefslogtreecommitdiff
path: root/sources/plugins/find
diff options
context:
space:
mode:
authorIsmaël Bouya <ismael.bouya@normalesup.org>2016-01-25 17:45:33 +0100
committerIsmaël Bouya <ismael.bouya@normalesup.org>2016-01-25 18:00:33 +0100
commit7adcb81e4f83f98c468889aaa5a85558ba88c770 (patch)
tree0d6ede733777b29060b48df4afaa2c64bfbae276 /sources/plugins/find
downloadconnexionswing-ckeditor-component-7adcb81e4f83f98c468889aaa5a85558ba88c770.tar.gz
connexionswing-ckeditor-component-7adcb81e4f83f98c468889aaa5a85558ba88c770.tar.zst
connexionswing-ckeditor-component-7adcb81e4f83f98c468889aaa5a85558ba88c770.zip
Initial commit4.5.6
Diffstat (limited to 'sources/plugins/find')
-rw-r--r--sources/plugins/find/dialogs/find.js802
-rw-r--r--sources/plugins/find/icons/find-rtl.pngbin0 -> 980 bytes
-rw-r--r--sources/plugins/find/icons/find.pngbin0 -> 980 bytes
-rw-r--r--sources/plugins/find/icons/hidpi/find-rtl.pngbin0 -> 2417 bytes
-rw-r--r--sources/plugins/find/icons/hidpi/find.pngbin0 -> 2417 bytes
-rw-r--r--sources/plugins/find/icons/hidpi/replace.pngbin0 -> 2761 bytes
-rw-r--r--sources/plugins/find/icons/replace.pngbin0 -> 948 bytes
-rw-r--r--sources/plugins/find/lang/af.js18
-rw-r--r--sources/plugins/find/lang/ar.js18
-rw-r--r--sources/plugins/find/lang/bg.js18
-rw-r--r--sources/plugins/find/lang/bn.js18
-rw-r--r--sources/plugins/find/lang/bs.js18
-rw-r--r--sources/plugins/find/lang/ca.js18
-rw-r--r--sources/plugins/find/lang/cs.js18
-rw-r--r--sources/plugins/find/lang/cy.js18
-rw-r--r--sources/plugins/find/lang/da.js18
-rw-r--r--sources/plugins/find/lang/de.js18
-rw-r--r--sources/plugins/find/lang/el.js18
-rw-r--r--sources/plugins/find/lang/en-au.js18
-rw-r--r--sources/plugins/find/lang/en-ca.js18
-rw-r--r--sources/plugins/find/lang/en-gb.js18
-rw-r--r--sources/plugins/find/lang/en.js18
-rw-r--r--sources/plugins/find/lang/eo.js18
-rw-r--r--sources/plugins/find/lang/es.js18
-rw-r--r--sources/plugins/find/lang/et.js18
-rw-r--r--sources/plugins/find/lang/eu.js18
-rw-r--r--sources/plugins/find/lang/fa.js18
-rw-r--r--sources/plugins/find/lang/fi.js18
-rw-r--r--sources/plugins/find/lang/fo.js18
-rw-r--r--sources/plugins/find/lang/fr-ca.js18
-rw-r--r--sources/plugins/find/lang/fr.js18
-rw-r--r--sources/plugins/find/lang/gl.js18
-rw-r--r--sources/plugins/find/lang/gu.js18
-rw-r--r--sources/plugins/find/lang/he.js18
-rw-r--r--sources/plugins/find/lang/hi.js18
-rw-r--r--sources/plugins/find/lang/hr.js18
-rw-r--r--sources/plugins/find/lang/hu.js18
-rw-r--r--sources/plugins/find/lang/id.js18
-rw-r--r--sources/plugins/find/lang/is.js18
-rw-r--r--sources/plugins/find/lang/it.js18
-rw-r--r--sources/plugins/find/lang/ja.js18
-rw-r--r--sources/plugins/find/lang/ka.js18
-rw-r--r--sources/plugins/find/lang/km.js18
-rw-r--r--sources/plugins/find/lang/ko.js18
-rw-r--r--sources/plugins/find/lang/ku.js18
-rw-r--r--sources/plugins/find/lang/lt.js18
-rw-r--r--sources/plugins/find/lang/lv.js18
-rw-r--r--sources/plugins/find/lang/mk.js18
-rw-r--r--sources/plugins/find/lang/mn.js18
-rw-r--r--sources/plugins/find/lang/ms.js18
-rw-r--r--sources/plugins/find/lang/nb.js18
-rw-r--r--sources/plugins/find/lang/nl.js18
-rw-r--r--sources/plugins/find/lang/no.js18
-rw-r--r--sources/plugins/find/lang/pl.js18
-rw-r--r--sources/plugins/find/lang/pt-br.js18
-rw-r--r--sources/plugins/find/lang/pt.js18
-rw-r--r--sources/plugins/find/lang/ro.js18
-rw-r--r--sources/plugins/find/lang/ru.js18
-rw-r--r--sources/plugins/find/lang/si.js18
-rw-r--r--sources/plugins/find/lang/sk.js18
-rw-r--r--sources/plugins/find/lang/sl.js18
-rw-r--r--sources/plugins/find/lang/sq.js18
-rw-r--r--sources/plugins/find/lang/sr-latn.js18
-rw-r--r--sources/plugins/find/lang/sr.js18
-rw-r--r--sources/plugins/find/lang/sv.js18
-rw-r--r--sources/plugins/find/lang/th.js18
-rw-r--r--sources/plugins/find/lang/tr.js18
-rw-r--r--sources/plugins/find/lang/tt.js18
-rw-r--r--sources/plugins/find/lang/ug.js18
-rw-r--r--sources/plugins/find/lang/uk.js18
-rw-r--r--sources/plugins/find/lang/vi.js18
-rw-r--r--sources/plugins/find/lang/zh-cn.js18
-rw-r--r--sources/plugins/find/lang/zh.js18
-rw-r--r--sources/plugins/find/plugin.js52
74 files changed, 2042 insertions, 0 deletions
diff --git a/sources/plugins/find/dialogs/find.js b/sources/plugins/find/dialogs/find.js
new file mode 100644
index 00000000..f56ba963
--- /dev/null
+++ b/sources/plugins/find/dialogs/find.js
@@ -0,0 +1,802 @@
1/**
2 * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3 * For licensing, see LICENSE.md or http://ckeditor.com/license
4 */
5
6( function() {
7 var isReplace;
8
9 function findEvaluator( node ) {
10 return node.type == CKEDITOR.NODE_TEXT && node.getLength() > 0 && ( !isReplace || !node.isReadOnly() );
11 }
12
13 // Elements which break characters been considered as sequence.
14 function nonCharactersBoundary( node ) {
15 return !( node.type == CKEDITOR.NODE_ELEMENT && node.isBlockBoundary( CKEDITOR.tools.extend( {}, CKEDITOR.dtd.$empty, CKEDITOR.dtd.$nonEditable ) ) );
16 }
17
18 // Get the cursor object which represent both current character and it's dom
19 // position thing.
20 var cursorStep = function() {
21 return {
22 textNode: this.textNode,
23 offset: this.offset,
24 character: this.textNode ? this.textNode.getText().charAt( this.offset ) : null,
25 hitMatchBoundary: this._.matchBoundary
26 };
27 };
28
29 var pages = [ 'find', 'replace' ],
30 fieldsMapping = [
31 [ 'txtFindFind', 'txtFindReplace' ],
32 [ 'txtFindCaseChk', 'txtReplaceCaseChk' ],
33 [ 'txtFindWordChk', 'txtReplaceWordChk' ],
34 [ 'txtFindCyclic', 'txtReplaceCyclic' ]
35 ];
36
37 // Synchronize corresponding filed values between 'replace' and 'find' pages.
38 // @param {String} currentPageId The page id which receive values.
39 function syncFieldsBetweenTabs( currentPageId ) {
40 var sourceIndex, targetIndex, sourceField, targetField;
41
42 sourceIndex = currentPageId === 'find' ? 1 : 0;
43 targetIndex = 1 - sourceIndex;
44 var i,
45 l = fieldsMapping.length;
46 for ( i = 0; i < l; i++ ) {
47 sourceField = this.getContentElement( pages[ sourceIndex ], fieldsMapping[ i ][ sourceIndex ] );
48 targetField = this.getContentElement( pages[ targetIndex ], fieldsMapping[ i ][ targetIndex ] );
49
50 targetField.setValue( sourceField.getValue() );
51 }
52 }
53
54 function findDialog( editor, startupPage ) {
55 // Style object for highlights: (#5018)
56 // 1. Defined as full match style to avoid compromising ordinary text color styles.
57 // 2. Must be apply onto inner-most text to avoid conflicting with ordinary text color styles visually.
58 var highlightConfig = {
59 attributes: {
60 'data-cke-highlight': 1
61 },
62 fullMatch: 1,
63 ignoreReadonly: 1,
64 childRule: function() {
65 return 0;
66 }
67 };
68 var highlightStyle = new CKEDITOR.style( CKEDITOR.tools.extend( highlightConfig, editor.config.find_highlight, true ) );
69
70 // Iterator which walk through the specified range char by char. By
71 // default the walking will not stop at the character boundaries, until
72 // the end of the range is encountered.
73 // @param { CKEDITOR.dom.range } range
74 // @param {Boolean} matchWord Whether the walking will stop at character boundary.
75 function characterWalker( range, matchWord ) {
76 var self = this;
77 var walker = new CKEDITOR.dom.walker( range );
78 walker.guard = matchWord ? nonCharactersBoundary : function( node ) {
79 !nonCharactersBoundary( node ) && ( self._.matchBoundary = true );
80 };
81 walker.evaluator = findEvaluator;
82 walker.breakOnFalse = 1;
83
84 if ( range.startContainer.type == CKEDITOR.NODE_TEXT ) {
85 this.textNode = range.startContainer;
86 this.offset = range.startOffset - 1;
87 }
88
89 this._ = {
90 matchWord: matchWord,
91 walker: walker,
92 matchBoundary: false
93 };
94 }
95
96 characterWalker.prototype = {
97 next: function() {
98 return this.move();
99 },
100
101 back: function() {
102 return this.move( true );
103 },
104
105 move: function( rtl ) {
106 var currentTextNode = this.textNode;
107 // Already at the end of document, no more character available.
108 if ( currentTextNode === null )
109 return cursorStep.call( this );
110
111 this._.matchBoundary = false;
112
113 // There are more characters in the text node, step forward.
114 if ( currentTextNode && rtl && this.offset > 0 ) {
115 this.offset--;
116 return cursorStep.call( this );
117 } else if ( currentTextNode && this.offset < currentTextNode.getLength() - 1 ) {
118 this.offset++;
119 return cursorStep.call( this );
120 } else {
121 currentTextNode = null;
122 // At the end of the text node, walking foward for the next.
123 while ( !currentTextNode ) {
124 currentTextNode = this._.walker[ rtl ? 'previous' : 'next' ].call( this._.walker );
125
126 // Stop searching if we're need full word match OR
127 // already reach document end.
128 if ( this._.matchWord && !currentTextNode || this._.walker._.end )
129 break;
130 }
131 // Found a fresh text node.
132 this.textNode = currentTextNode;
133 if ( currentTextNode )
134 this.offset = rtl ? currentTextNode.getLength() - 1 : 0;
135 else
136 this.offset = 0;
137 }
138
139 return cursorStep.call( this );
140 }
141
142 };
143
144 /**
145 * A range of cursors which represent a trunk of characters which try to
146 * match, it has the same length as the pattern string.
147 *
148 * **Note:** This class isn't accessible from global scope.
149 *
150 * @private
151 * @class CKEDITOR.plugins.find.characterRange
152 * @constructor Creates a characterRange class instance.
153 */
154 var characterRange = function( characterWalker, rangeLength ) {
155 this._ = {
156 walker: characterWalker,
157 cursors: [],
158 rangeLength: rangeLength,
159 highlightRange: null,
160 isMatched: 0
161 };
162 };
163
164 characterRange.prototype = {
165 /**
166 * Translate this range to {@link CKEDITOR.dom.range}.
167 */
168 toDomRange: function() {
169 var range = editor.createRange();
170 var cursors = this._.cursors;
171 if ( cursors.length < 1 ) {
172 var textNode = this._.walker.textNode;
173 if ( textNode )
174 range.setStartAfter( textNode );
175 else
176 return null;
177 } else {
178 var first = cursors[ 0 ],
179 last = cursors[ cursors.length - 1 ];
180
181 range.setStart( first.textNode, first.offset );
182 range.setEnd( last.textNode, last.offset + 1 );
183 }
184
185 return range;
186 },
187
188 /**
189 * Reflect the latest changes from dom range.
190 */
191 updateFromDomRange: function( domRange ) {
192 var cursor,
193 walker = new characterWalker( domRange );
194 this._.cursors = [];
195 do {
196 cursor = walker.next();
197 if ( cursor.character ) this._.cursors.push( cursor );
198 }
199 while ( cursor.character );
200 this._.rangeLength = this._.cursors.length;
201 },
202
203 setMatched: function() {
204 this._.isMatched = true;
205 },
206
207 clearMatched: function() {
208 this._.isMatched = false;
209 },
210
211 isMatched: function() {
212 return this._.isMatched;
213 },
214
215 /**
216 * Hightlight the current matched chunk of text.
217 */
218 highlight: function() {
219 // Do not apply if nothing is found.
220 if ( this._.cursors.length < 1 )
221 return;
222
223 // Remove the previous highlight if there's one.
224 if ( this._.highlightRange )
225 this.removeHighlight();
226
227 // Apply the highlight.
228 var range = this.toDomRange(),
229 bookmark = range.createBookmark();
230 highlightStyle.applyToRange( range, editor );
231 range.moveToBookmark( bookmark );
232 this._.highlightRange = range;
233
234 // Scroll the editor to the highlighted area.
235 var element = range.startContainer;
236 if ( element.type != CKEDITOR.NODE_ELEMENT )
237 element = element.getParent();
238 element.scrollIntoView();
239
240 // Update the character cursors.
241 this.updateFromDomRange( range );
242 },
243
244 /**
245 * Remove highlighted find result.
246 */
247 removeHighlight: function() {
248 if ( !this._.highlightRange )
249 return;
250
251 var bookmark = this._.highlightRange.createBookmark();
252 highlightStyle.removeFromRange( this._.highlightRange, editor );
253 this._.highlightRange.moveToBookmark( bookmark );
254 this.updateFromDomRange( this._.highlightRange );
255 this._.highlightRange = null;
256 },
257
258 isReadOnly: function() {
259 if ( !this._.highlightRange )
260 return 0;
261
262 return this._.highlightRange.startContainer.isReadOnly();
263 },
264
265 moveBack: function() {
266 var retval = this._.walker.back(),
267 cursors = this._.cursors;
268
269 if ( retval.hitMatchBoundary )
270 this._.cursors = cursors = [];
271
272 cursors.unshift( retval );
273 if ( cursors.length > this._.rangeLength )
274 cursors.pop();
275
276 return retval;
277 },
278
279 moveNext: function() {
280 var retval = this._.walker.next(),
281 cursors = this._.cursors;
282
283 // Clear the cursors queue if we've crossed a match boundary.
284 if ( retval.hitMatchBoundary )
285 this._.cursors = cursors = [];
286
287 cursors.push( retval );
288 if ( cursors.length > this._.rangeLength )
289 cursors.shift();
290
291 return retval;
292 },
293
294 getEndCharacter: function() {
295 var cursors = this._.cursors;
296 if ( cursors.length < 1 )
297 return null;
298
299 return cursors[ cursors.length - 1 ].character;
300 },
301
302 getNextCharacterRange: function( maxLength ) {
303 var lastCursor, nextRangeWalker,
304 cursors = this._.cursors;
305
306 if ( ( lastCursor = cursors[ cursors.length - 1 ] ) && lastCursor.textNode )
307 nextRangeWalker = new characterWalker( getRangeAfterCursor( lastCursor ) );
308 // In case it's an empty range (no cursors), figure out next range from walker (#4951).
309 else
310 nextRangeWalker = this._.walker;
311
312 return new characterRange( nextRangeWalker, maxLength );
313 },
314
315 getCursors: function() {
316 return this._.cursors;
317 }
318 };
319
320
321 // The remaining document range after the character cursor.
322 function getRangeAfterCursor( cursor, inclusive ) {
323 var range = editor.createRange();
324 range.setStart( cursor.textNode, ( inclusive ? cursor.offset : cursor.offset + 1 ) );
325 range.setEndAt( editor.editable(), CKEDITOR.POSITION_BEFORE_END );
326 return range;
327 }
328
329 // The document range before the character cursor.
330 function getRangeBeforeCursor( cursor ) {
331 var range = editor.createRange();
332 range.setStartAt( editor.editable(), CKEDITOR.POSITION_AFTER_START );
333 range.setEnd( cursor.textNode, cursor.offset );
334 return range;
335 }
336
337 var KMP_NOMATCH = 0,
338 KMP_ADVANCED = 1,
339 KMP_MATCHED = 2;
340
341 // Examination the occurrence of a word which implement KMP algorithm.
342 var kmpMatcher = function( pattern, ignoreCase ) {
343 var overlap = [ -1 ];
344 if ( ignoreCase )
345 pattern = pattern.toLowerCase();
346 for ( var i = 0; i < pattern.length; i++ ) {
347 overlap.push( overlap[ i ] + 1 );
348 while ( overlap[ i + 1 ] > 0 && pattern.charAt( i ) != pattern.charAt( overlap[ i + 1 ] - 1 ) )
349 overlap[ i + 1 ] = overlap[ overlap[ i + 1 ] - 1 ] + 1;
350 }
351
352 this._ = {
353 overlap: overlap,
354 state: 0,
355 ignoreCase: !!ignoreCase,
356 pattern: pattern
357 };
358 };
359
360 kmpMatcher.prototype = {
361 feedCharacter: function( c ) {
362 if ( this._.ignoreCase )
363 c = c.toLowerCase();
364
365 while ( true ) {
366 if ( c == this._.pattern.charAt( this._.state ) ) {
367 this._.state++;
368 if ( this._.state == this._.pattern.length ) {
369 this._.state = 0;
370 return KMP_MATCHED;
371 }
372 return KMP_ADVANCED;
373 } else if ( !this._.state ) {
374 return KMP_NOMATCH;
375 } else {
376 this._.state = this._.overlap[this._.state];
377 }
378 }
379 },
380
381 reset: function() {
382 this._.state = 0;
383 }
384 };
385
386 var wordSeparatorRegex = /[.,"'?!;: \u0085\u00a0\u1680\u280e\u2028\u2029\u202f\u205f\u3000]/;
387
388 var isWordSeparator = function( c ) {
389 if ( !c )
390 return true;
391 var code = c.charCodeAt( 0 );
392 return ( code >= 9 && code <= 0xd ) || ( code >= 0x2000 && code <= 0x200a ) || wordSeparatorRegex.test( c );
393 };
394
395 var finder = {
396 searchRange: null,
397 matchRange: null,
398 find: function( pattern, matchCase, matchWord, matchCyclic, highlightMatched, cyclicRerun ) {
399 if ( !this.matchRange )
400 this.matchRange = new characterRange( new characterWalker( this.searchRange ), pattern.length );
401 else {
402 this.matchRange.removeHighlight();
403 this.matchRange = this.matchRange.getNextCharacterRange( pattern.length );
404 }
405
406 var matcher = new kmpMatcher( pattern, !matchCase ),
407 matchState = KMP_NOMATCH,
408 character = '%';
409
410 while ( character !== null ) {
411 this.matchRange.moveNext();
412 while ( ( character = this.matchRange.getEndCharacter() ) ) {
413 matchState = matcher.feedCharacter( character );
414 if ( matchState == KMP_MATCHED )
415 break;
416 if ( this.matchRange.moveNext().hitMatchBoundary )
417 matcher.reset();
418 }
419
420 if ( matchState == KMP_MATCHED ) {
421 if ( matchWord ) {
422 var cursors = this.matchRange.getCursors(),
423 tail = cursors[ cursors.length - 1 ],
424 head = cursors[ 0 ];
425
426 var rangeBefore = getRangeBeforeCursor( head ),
427 rangeAfter = getRangeAfterCursor( tail );
428
429 // The word boundary checks requires to trim the text nodes. (#9036)
430 rangeBefore.trim();
431 rangeAfter.trim();
432
433 var headWalker = new characterWalker( rangeBefore, true ),
434 tailWalker = new characterWalker( rangeAfter, true );
435
436 if ( !( isWordSeparator( headWalker.back().character ) && isWordSeparator( tailWalker.next().character ) ) )
437 continue;
438 }
439 this.matchRange.setMatched();
440 if ( highlightMatched !== false )
441 this.matchRange.highlight();
442 return true;
443 }
444 }
445
446 this.matchRange.clearMatched();
447 this.matchRange.removeHighlight();
448 // Clear current session and restart with the default search
449 // range.
450 // Re-run the finding once for cyclic.(#3517)
451 if ( matchCyclic && !cyclicRerun ) {
452 this.searchRange = getSearchRange( 1 );
453 this.matchRange = null;
454 return arguments.callee.apply( this, Array.prototype.slice.call( arguments ).concat( [ true ] ) );
455 }
456
457 return false;
458 },
459
460 // Record how much replacement occurred toward one replacing.
461 replaceCounter: 0,
462
463 replace: function( dialog, pattern, newString, matchCase, matchWord, matchCyclic, isReplaceAll ) {
464 isReplace = 1;
465
466 // Successiveness of current replace/find.
467 var result = 0;
468
469 // 1. Perform the replace when there's already a match here.
470 // 2. Otherwise perform the find but don't replace it immediately.
471 if ( this.matchRange && this.matchRange.isMatched() && !this.matchRange._.isReplaced && !this.matchRange.isReadOnly() ) {
472 // Turn off highlight for a while when saving snapshots.
473 this.matchRange.removeHighlight();
474 var domRange = this.matchRange.toDomRange();
475 var text = editor.document.createText( newString );
476 if ( !isReplaceAll ) {
477 // Save undo snaps before and after the replacement.
478 var selection = editor.getSelection();
479 selection.selectRanges( [ domRange ] );
480 editor.fire( 'saveSnapshot' );
481 }
482 domRange.deleteContents();
483 domRange.insertNode( text );
484 if ( !isReplaceAll ) {
485 selection.selectRanges( [ domRange ] );
486 editor.fire( 'saveSnapshot' );
487 }
488 this.matchRange.updateFromDomRange( domRange );
489 if ( !isReplaceAll )
490 this.matchRange.highlight();
491 this.matchRange._.isReplaced = true;
492 this.replaceCounter++;
493 result = 1;
494 } else {
495 result = this.find( pattern, matchCase, matchWord, matchCyclic, !isReplaceAll );
496 }
497
498 isReplace = 0;
499
500 return result;
501 }
502 };
503
504 // The range in which find/replace happened, receive from user
505 // selection prior.
506 function getSearchRange( isDefault ) {
507 var searchRange,
508 sel = editor.getSelection(),
509 range = sel.getRanges()[ 0 ],
510 editable = editor.editable();
511
512 // Blink browsers return empty array of ranges when editor is in read-only mode
513 // and it hasn't got focus, so instead of selection, we check for range itself. (#12848)
514 if ( range && !isDefault ) {
515 searchRange = range.clone();
516 searchRange.collapse( true );
517 } else {
518 searchRange = editor.createRange();
519 searchRange.setStartAt( editable, CKEDITOR.POSITION_AFTER_START );
520 }
521 searchRange.setEndAt( editable, CKEDITOR.POSITION_BEFORE_END );
522 return searchRange;
523 }
524
525 var lang = editor.lang.find;
526 return {
527 title: lang.title,
528 resizable: CKEDITOR.DIALOG_RESIZE_NONE,
529 minWidth: 350,
530 minHeight: 170,
531 buttons: [
532 // Close button only.
533 CKEDITOR.dialog.cancelButton( editor, {
534 label: editor.lang.common.close
535 } )
536 ],
537 contents: [ {
538 id: 'find',
539 label: lang.find,
540 title: lang.find,
541 accessKey: '',
542 elements: [ {
543 type: 'hbox',
544 widths: [ '230px', '90px' ],
545 children: [ {
546 type: 'text',
547 id: 'txtFindFind',
548 label: lang.findWhat,
549 isChanged: false,
550 labelLayout: 'horizontal',
551 accessKey: 'F'
552 },
553 {
554 type: 'button',
555 id: 'btnFind',
556 align: 'left',
557 style: 'width:100%',
558 label: lang.find,
559 onClick: function() {
560 var dialog = this.getDialog();
561 if ( !finder.find(
562 dialog.getValueOf( 'find', 'txtFindFind' ),
563 dialog.getValueOf( 'find', 'txtFindCaseChk' ),
564 dialog.getValueOf( 'find', 'txtFindWordChk' ),
565 dialog.getValueOf( 'find', 'txtFindCyclic' )
566 ) ) {
567 alert( lang.notFoundMsg ); // jshint ignore:line
568 }
569 }
570 } ]
571 },
572 {
573 type: 'fieldset',
574 label: CKEDITOR.tools.htmlEncode( lang.findOptions ),
575 style: 'margin-top:29px',
576 children: [ {
577 type: 'vbox',
578 padding: 0,
579 children: [ {
580 type: 'checkbox',
581 id: 'txtFindCaseChk',
582 isChanged: false,
583 label: lang.matchCase
584 },
585 {
586 type: 'checkbox',
587 id: 'txtFindWordChk',
588 isChanged: false,
589 label: lang.matchWord
590 },
591 {
592 type: 'checkbox',
593 id: 'txtFindCyclic',
594 isChanged: false,
595 'default': true,
596 label: lang.matchCyclic
597 } ]
598 } ]
599 } ]
600 },
601 {
602 id: 'replace',
603 label: lang.replace,
604 accessKey: 'M',
605 elements: [ {
606 type: 'hbox',
607 widths: [ '230px', '90px' ],
608 children: [ {
609 type: 'text',
610 id: 'txtFindReplace',
611 label: lang.findWhat,
612 isChanged: false,
613 labelLayout: 'horizontal',
614 accessKey: 'F'
615 },
616 {
617 type: 'button',
618 id: 'btnFindReplace',
619 align: 'left',
620 style: 'width:100%',
621 label: lang.replace,
622 onClick: function() {
623 var dialog = this.getDialog();
624 if ( !finder.replace(
625 dialog,
626 dialog.getValueOf( 'replace', 'txtFindReplace' ),
627 dialog.getValueOf( 'replace', 'txtReplace' ),
628 dialog.getValueOf( 'replace', 'txtReplaceCaseChk' ),
629 dialog.getValueOf( 'replace', 'txtReplaceWordChk' ),
630 dialog.getValueOf( 'replace', 'txtReplaceCyclic' )
631 ) ) {
632 alert( lang.notFoundMsg ); // jshint ignore:line
633 }
634 }
635 } ]
636 },
637 {
638 type: 'hbox',
639 widths: [ '230px', '90px' ],
640 children: [ {
641 type: 'text',
642 id: 'txtReplace',
643 label: lang.replaceWith,
644 isChanged: false,
645 labelLayout: 'horizontal',
646 accessKey: 'R'
647 },
648 {
649 type: 'button',
650 id: 'btnReplaceAll',
651 align: 'left',
652 style: 'width:100%',
653 label: lang.replaceAll,
654 isChanged: false,
655 onClick: function() {
656 var dialog = this.getDialog();
657
658 finder.replaceCounter = 0;
659
660 // Scope to full document.
661 finder.searchRange = getSearchRange( 1 );
662 if ( finder.matchRange ) {
663 finder.matchRange.removeHighlight();
664 finder.matchRange = null;
665 }
666 editor.fire( 'saveSnapshot' );
667 while ( finder.replace(
668 dialog,
669 dialog.getValueOf( 'replace', 'txtFindReplace' ),
670 dialog.getValueOf( 'replace', 'txtReplace' ),
671 dialog.getValueOf( 'replace', 'txtReplaceCaseChk' ),
672 dialog.getValueOf( 'replace', 'txtReplaceWordChk' ),
673 false,
674 true
675 ) ) {
676
677 }
678
679 if ( finder.replaceCounter ) {
680 alert( lang.replaceSuccessMsg.replace( /%1/, finder.replaceCounter ) ); // jshint ignore:line
681 editor.fire( 'saveSnapshot' );
682 } else {
683 alert( lang.notFoundMsg ); // jshint ignore:line
684 }
685 }
686 } ]
687 },
688 {
689 type: 'fieldset',
690 label: CKEDITOR.tools.htmlEncode( lang.findOptions ),
691 children: [ {
692 type: 'vbox',
693 padding: 0,
694 children: [ {
695 type: 'checkbox',
696 id: 'txtReplaceCaseChk',
697 isChanged: false,
698 label: lang.matchCase
699 },
700 {
701 type: 'checkbox',
702 id: 'txtReplaceWordChk',
703 isChanged: false,
704 label: lang.matchWord
705 },
706 {
707 type: 'checkbox',
708 id: 'txtReplaceCyclic',
709 isChanged: false,
710 'default': true,
711 label: lang.matchCyclic
712 } ]
713 } ]
714 } ]
715 } ],
716 onLoad: function() {
717 var dialog = this;
718
719 // Keep track of the current pattern field in use.
720 var patternField, wholeWordChkField;
721
722 // Ignore initial page select on dialog show
723 var isUserSelect = 0;
724 this.on( 'hide', function() {
725 isUserSelect = 0;
726 } );
727 this.on( 'show', function() {
728 isUserSelect = 1;
729 } );
730
731 this.selectPage = CKEDITOR.tools.override( this.selectPage, function( originalFunc ) {
732 return function( pageId ) {
733 originalFunc.call( dialog, pageId );
734
735 var currPage = dialog._.tabs[ pageId ];
736 var patternFieldInput, patternFieldId, wholeWordChkFieldId;
737 patternFieldId = pageId === 'find' ? 'txtFindFind' : 'txtFindReplace';
738 wholeWordChkFieldId = pageId === 'find' ? 'txtFindWordChk' : 'txtReplaceWordChk';
739
740 patternField = dialog.getContentElement( pageId, patternFieldId );
741 wholeWordChkField = dialog.getContentElement( pageId, wholeWordChkFieldId );
742
743 // Prepare for check pattern text filed 'keyup' event
744 if ( !currPage.initialized ) {
745 patternFieldInput = CKEDITOR.document.getById( patternField._.inputId );
746 currPage.initialized = true;
747 }
748
749 // Synchronize fields on tab switch.
750 if ( isUserSelect )
751 syncFieldsBetweenTabs.call( this, pageId );
752 };
753 } );
754
755 },
756 onShow: function() {
757 // Establish initial searching start position.
758 finder.searchRange = getSearchRange();
759
760 // Fill in the find field with selected text.
761 var selectedText = this.getParentEditor().getSelection().getSelectedText(),
762 patternFieldId = ( startupPage == 'find' ? 'txtFindFind' : 'txtFindReplace' );
763
764 var field = this.getContentElement( startupPage, patternFieldId );
765 field.setValue( selectedText );
766 field.select();
767
768 this.selectPage( startupPage );
769
770 this[ ( startupPage == 'find' && this._.editor.readOnly ? 'hide' : 'show' ) + 'Page' ]( 'replace' );
771 },
772 onHide: function() {
773 var range;
774 if ( finder.matchRange && finder.matchRange.isMatched() ) {
775 finder.matchRange.removeHighlight();
776 editor.focus();
777
778 range = finder.matchRange.toDomRange();
779 if ( range )
780 editor.getSelection().selectRanges( [ range ] );
781 }
782
783 // Clear current session before dialog close
784 delete finder.matchRange;
785 },
786 onFocus: function() {
787 if ( startupPage == 'replace' )
788 return this.getContentElement( 'replace', 'txtFindReplace' );
789 else
790 return this.getContentElement( 'find', 'txtFindFind' );
791 }
792 };
793 }
794
795 CKEDITOR.dialog.add( 'find', function( editor ) {
796 return findDialog( editor, 'find' );
797 } );
798
799 CKEDITOR.dialog.add( 'replace', function( editor ) {
800 return findDialog( editor, 'replace' );
801 } );
802} )();
diff --git a/sources/plugins/find/icons/find-rtl.png b/sources/plugins/find/icons/find-rtl.png
new file mode 100644
index 00000000..02f40cb2
--- /dev/null
+++ b/sources/plugins/find/icons/find-rtl.png
Binary files differ
diff --git a/sources/plugins/find/icons/find.png b/sources/plugins/find/icons/find.png
new file mode 100644
index 00000000..02f40cb2
--- /dev/null
+++ b/sources/plugins/find/icons/find.png
Binary files differ
diff --git a/sources/plugins/find/icons/hidpi/find-rtl.png b/sources/plugins/find/icons/hidpi/find-rtl.png
new file mode 100644
index 00000000..cbf9ced2
--- /dev/null
+++ b/sources/plugins/find/icons/hidpi/find-rtl.png
Binary files differ
diff --git a/sources/plugins/find/icons/hidpi/find.png b/sources/plugins/find/icons/hidpi/find.png
new file mode 100644
index 00000000..cbf9ced2
--- /dev/null
+++ b/sources/plugins/find/icons/hidpi/find.png
Binary files differ
diff --git a/sources/plugins/find/icons/hidpi/replace.png b/sources/plugins/find/icons/hidpi/replace.png
new file mode 100644
index 00000000..9efd8bbd
--- /dev/null
+++ b/sources/plugins/find/icons/hidpi/replace.png
Binary files differ
diff --git a/sources/plugins/find/icons/replace.png b/sources/plugins/find/icons/replace.png
new file mode 100644
index 00000000..e68afcbe
--- /dev/null
+++ b/sources/plugins/find/icons/replace.png
Binary files differ
diff --git a/sources/plugins/find/lang/af.js b/sources/plugins/find/lang/af.js
new file mode 100644
index 00000000..6f2517ac
--- /dev/null
+++ b/sources/plugins/find/lang/af.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'af', {
6 find: 'Soek',
7 findOptions: 'Find Options',
8 findWhat: 'Soek na:',
9 matchCase: 'Hoof/kleinletter sensitief',
10 matchCyclic: 'Soek deurlopend',
11 matchWord: 'Hele woord moet voorkom',
12 notFoundMsg: 'Teks nie gevind nie.',
13 replace: 'Vervang',
14 replaceAll: 'Vervang alles',
15 replaceSuccessMsg: '%1 voorkoms(te) vervang.',
16 replaceWith: 'Vervang met:',
17 title: 'Soek en vervang'
18} );
diff --git a/sources/plugins/find/lang/ar.js b/sources/plugins/find/lang/ar.js
new file mode 100644
index 00000000..33f56042
--- /dev/null
+++ b/sources/plugins/find/lang/ar.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'ar', {
6 find: 'بحث',
7 findOptions: 'Find Options',
8 findWhat: 'البحث بـ:',
9 matchCase: 'مطابقة حالة الأحرف',
10 matchCyclic: 'مطابقة دورية',
11 matchWord: 'مطابقة بالكامل',
12 notFoundMsg: 'لم يتم العثور على النص المحدد.',
13 replace: 'إستبدال',
14 replaceAll: 'إستبدال الكل',
15 replaceSuccessMsg: 'تم استبدال 1% من الحالات ',
16 replaceWith: 'إستبدال بـ:',
17 title: 'بحث واستبدال'
18} );
diff --git a/sources/plugins/find/lang/bg.js b/sources/plugins/find/lang/bg.js
new file mode 100644
index 00000000..4fb17476
--- /dev/null
+++ b/sources/plugins/find/lang/bg.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'bg', {
6 find: 'Търсене',
7 findOptions: 'Find Options',
8 findWhat: 'Търси за:',
9 matchCase: 'Съвпадение',
10 matchCyclic: 'Циклично съвпадение',
11 matchWord: 'Съвпадение с дума',
12 notFoundMsg: 'Указаният текст не е намерен.',
13 replace: 'Препокриване',
14 replaceAll: 'Препокрий всички',
15 replaceSuccessMsg: '%1 occurrence(s) replaced.',
16 replaceWith: 'Препокрива с:',
17 title: 'Търсене и препокриване'
18} );
diff --git a/sources/plugins/find/lang/bn.js b/sources/plugins/find/lang/bn.js
new file mode 100644
index 00000000..396b2348
--- /dev/null
+++ b/sources/plugins/find/lang/bn.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'bn', {
6 find: 'খোজো',
7 findOptions: 'Find Options',
8 findWhat: 'যা খুঁজতে হবে:',
9 matchCase: 'কেস মিলাও',
10 matchCyclic: 'Match cyclic',
11 matchWord: 'পুরা শব্দ মেলাও',
12 notFoundMsg: 'আপনার উল্লেখিত টেকস্ট পাওয়া যায়নি',
13 replace: 'রিপ্লেস',
14 replaceAll: 'সব বদলে দাও',
15 replaceSuccessMsg: '%1 occurrence(s) replaced.',
16 replaceWith: 'যার সাথে বদলাতে হবে:',
17 title: 'Find and Replace'
18} );
diff --git a/sources/plugins/find/lang/bs.js b/sources/plugins/find/lang/bs.js
new file mode 100644
index 00000000..0b171017
--- /dev/null
+++ b/sources/plugins/find/lang/bs.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'bs', {
6 find: 'Naði',
7 findOptions: 'Find Options',
8 findWhat: 'Naði šta:',
9 matchCase: 'Uporeðuj velika/mala slova',
10 matchCyclic: 'Match cyclic',
11 matchWord: 'Uporeðuj samo cijelu rijeè',
12 notFoundMsg: 'Traženi tekst nije pronaðen.',
13 replace: 'Zamjeni',
14 replaceAll: 'Zamjeni sve',
15 replaceSuccessMsg: '%1 occurrence(s) replaced.',
16 replaceWith: 'Zamjeni sa:',
17 title: 'Find and Replace'
18} );
diff --git a/sources/plugins/find/lang/ca.js b/sources/plugins/find/lang/ca.js
new file mode 100644
index 00000000..eea8b4b0
--- /dev/null
+++ b/sources/plugins/find/lang/ca.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'ca', {
6 find: 'Cerca',
7 findOptions: 'Opcions de Cerca',
8 findWhat: 'Cerca el:',
9 matchCase: 'Distingeix majúscules/minúscules',
10 matchCyclic: 'Coincidència cíclica',
11 matchWord: 'Només paraules completes',
12 notFoundMsg: 'El text especificat no s\'ha trobat.',
13 replace: 'Reemplaça',
14 replaceAll: 'Reemplaça-ho tot',
15 replaceSuccessMsg: '%1 ocurrència/es reemplaçada/es.',
16 replaceWith: 'Reemplaça amb:',
17 title: 'Cerca i reemplaça'
18} );
diff --git a/sources/plugins/find/lang/cs.js b/sources/plugins/find/lang/cs.js
new file mode 100644
index 00000000..b4c97c32
--- /dev/null
+++ b/sources/plugins/find/lang/cs.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'cs', {
6 find: 'Hledat',
7 findOptions: 'Možnosti hledání',
8 findWhat: 'Co hledat:',
9 matchCase: 'Rozlišovat velikost písma',
10 matchCyclic: 'Procházet opakovaně',
11 matchWord: 'Pouze celá slova',
12 notFoundMsg: 'Hledaný text nebyl nalezen.',
13 replace: 'Nahradit',
14 replaceAll: 'Nahradit vše',
15 replaceSuccessMsg: '%1 nahrazení.',
16 replaceWith: 'Čím nahradit:',
17 title: 'Najít a nahradit'
18} );
diff --git a/sources/plugins/find/lang/cy.js b/sources/plugins/find/lang/cy.js
new file mode 100644
index 00000000..ad3ad22a
--- /dev/null
+++ b/sources/plugins/find/lang/cy.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'cy', {
6 find: 'Chwilio',
7 findOptions: 'Opsiynau Chwilio',
8 findWhat: 'Chwilio\'r term:',
9 matchCase: 'Cydweddu\'r cas',
10 matchCyclic: 'Cydweddu\'n gylchol',
11 matchWord: 'Cydweddu gair cyfan',
12 notFoundMsg: 'Nid oedd y testun wedi\'i ddarganfod.',
13 replace: 'Amnewid Un',
14 replaceAll: 'Amnewid Pob',
15 replaceSuccessMsg: 'Amnewidiwyd %1 achlysur.',
16 replaceWith: 'Amnewid gyda:',
17 title: 'Chwilio ac Amnewid'
18} );
diff --git a/sources/plugins/find/lang/da.js b/sources/plugins/find/lang/da.js
new file mode 100644
index 00000000..42d3bfcf
--- /dev/null
+++ b/sources/plugins/find/lang/da.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'da', {
6 find: 'Søg',
7 findOptions: 'Find muligheder',
8 findWhat: 'Søg efter:',
9 matchCase: 'Forskel på store og små bogstaver',
10 matchCyclic: 'Match cyklisk',
11 matchWord: 'Kun hele ord',
12 notFoundMsg: 'Søgeteksten blev ikke fundet',
13 replace: 'Erstat',
14 replaceAll: 'Erstat alle',
15 replaceSuccessMsg: '%1 forekomst(er) erstattet.',
16 replaceWith: 'Erstat med:',
17 title: 'Søg og erstat'
18} );
diff --git a/sources/plugins/find/lang/de.js b/sources/plugins/find/lang/de.js
new file mode 100644
index 00000000..b12f2525
--- /dev/null
+++ b/sources/plugins/find/lang/de.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'de', {
6 find: 'Suchen',
7 findOptions: 'Suchoptionen',
8 findWhat: 'Suche nach:',
9 matchCase: 'Groß-/Kleinschreibung beachten',
10 matchCyclic: 'Zyklische Suche',
11 matchWord: 'Nur ganze Worte suchen',
12 notFoundMsg: 'Der angegebene Text wurde nicht gefunden.',
13 replace: 'Ersetzen',
14 replaceAll: 'Alle ersetzen',
15 replaceSuccessMsg: '%1 Vorkommen ersetzt.',
16 replaceWith: 'Ersetze mit:',
17 title: 'Suchen und Ersetzen'
18} );
diff --git a/sources/plugins/find/lang/el.js b/sources/plugins/find/lang/el.js
new file mode 100644
index 00000000..054d5c70
--- /dev/null
+++ b/sources/plugins/find/lang/el.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'el', {
6 find: 'Εύρεση',
7 findOptions: 'Επιλογές Εύρεσης',
8 findWhat: 'Εύρεση για:',
9 matchCase: 'Ταίριασμα πεζών/κεφαλαίων',
10 matchCyclic: 'Αναδρομική εύρεση',
11 matchWord: 'Εύρεση μόνο πλήρων λέξεων',
12 notFoundMsg: 'Το κείμενο δεν βρέθηκε.',
13 replace: 'Αντικατάσταση',
14 replaceAll: 'Αντικατάσταση Όλων',
15 replaceSuccessMsg: 'Ο(ι) όρος(-οι) αντικαταστήθηκε(-αν) %1 φορές.',
16 replaceWith: 'Αντικατάσταση με:',
17 title: 'Εύρεση και Αντικατάσταση'
18} );
diff --git a/sources/plugins/find/lang/en-au.js b/sources/plugins/find/lang/en-au.js
new file mode 100644
index 00000000..c7039480
--- /dev/null
+++ b/sources/plugins/find/lang/en-au.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'en-au', {
6 find: 'Find',
7 findOptions: 'Find Options',
8 findWhat: 'Find what:',
9 matchCase: 'Match case',
10 matchCyclic: 'Match cyclic',
11 matchWord: 'Match whole word',
12 notFoundMsg: 'The specified text was not found.',
13 replace: 'Replace',
14 replaceAll: 'Replace All',
15 replaceSuccessMsg: '%1 occurrence(s) replaced.',
16 replaceWith: 'Replace with:',
17 title: 'Find and Replace'
18} );
diff --git a/sources/plugins/find/lang/en-ca.js b/sources/plugins/find/lang/en-ca.js
new file mode 100644
index 00000000..d19c10d6
--- /dev/null
+++ b/sources/plugins/find/lang/en-ca.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'en-ca', {
6 find: 'Find',
7 findOptions: 'Find Options',
8 findWhat: 'Find what:',
9 matchCase: 'Match case',
10 matchCyclic: 'Match cyclic',
11 matchWord: 'Match whole word',
12 notFoundMsg: 'The specified text was not found.',
13 replace: 'Replace',
14 replaceAll: 'Replace All',
15 replaceSuccessMsg: '%1 occurrence(s) replaced.',
16 replaceWith: 'Replace with:',
17 title: 'Find and Replace'
18} );
diff --git a/sources/plugins/find/lang/en-gb.js b/sources/plugins/find/lang/en-gb.js
new file mode 100644
index 00000000..40687bcb
--- /dev/null
+++ b/sources/plugins/find/lang/en-gb.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'en-gb', {
6 find: 'Find',
7 findOptions: 'Find Options',
8 findWhat: 'Find what:',
9 matchCase: 'Match case',
10 matchCyclic: 'Match cyclic',
11 matchWord: 'Match whole word',
12 notFoundMsg: 'The specified text was not found.',
13 replace: 'Replace',
14 replaceAll: 'Replace All',
15 replaceSuccessMsg: '%1 occurrence(s) replaced.',
16 replaceWith: 'Replace with:',
17 title: 'Find and Replace'
18} );
diff --git a/sources/plugins/find/lang/en.js b/sources/plugins/find/lang/en.js
new file mode 100644
index 00000000..3a357ac5
--- /dev/null
+++ b/sources/plugins/find/lang/en.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'en', {
6 find: 'Find',
7 findOptions: 'Find Options',
8 findWhat: 'Find what:',
9 matchCase: 'Match case',
10 matchCyclic: 'Match cyclic',
11 matchWord: 'Match whole word',
12 notFoundMsg: 'The specified text was not found.',
13 replace: 'Replace',
14 replaceAll: 'Replace All',
15 replaceSuccessMsg: '%1 occurrence(s) replaced.',
16 replaceWith: 'Replace with:',
17 title: 'Find and Replace'
18} );
diff --git a/sources/plugins/find/lang/eo.js b/sources/plugins/find/lang/eo.js
new file mode 100644
index 00000000..51d06994
--- /dev/null
+++ b/sources/plugins/find/lang/eo.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'eo', {
6 find: 'Serĉi',
7 findOptions: 'Opcioj pri Serĉado',
8 findWhat: 'Serĉi:',
9 matchCase: 'Kongruigi Usklecon',
10 matchCyclic: 'Cikla Serĉado',
11 matchWord: 'Tuta Vorto',
12 notFoundMsg: 'La celteksto ne estas trovita.',
13 replace: 'Anstataŭigi',
14 replaceAll: 'Anstataŭigi Ĉion',
15 replaceSuccessMsg: '%1 anstataŭigita(j) apero(j).',
16 replaceWith: 'Anstataŭigi per:',
17 title: 'Serĉi kaj Anstataŭigi'
18} );
diff --git a/sources/plugins/find/lang/es.js b/sources/plugins/find/lang/es.js
new file mode 100644
index 00000000..86c40728
--- /dev/null
+++ b/sources/plugins/find/lang/es.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'es', {
6 find: 'Buscar',
7 findOptions: 'Opciones de búsqueda',
8 findWhat: 'Texto a buscar:',
9 matchCase: 'Coincidir may/min',
10 matchCyclic: 'Buscar en todo el contenido',
11 matchWord: 'Coincidir toda la palabra',
12 notFoundMsg: 'El texto especificado no ha sido encontrado.',
13 replace: 'Reemplazar',
14 replaceAll: 'Reemplazar Todo',
15 replaceSuccessMsg: 'La expresión buscada ha sido reemplazada %1 veces.',
16 replaceWith: 'Reemplazar con:',
17 title: 'Buscar y Reemplazar'
18} );
diff --git a/sources/plugins/find/lang/et.js b/sources/plugins/find/lang/et.js
new file mode 100644
index 00000000..749c54e3
--- /dev/null
+++ b/sources/plugins/find/lang/et.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'et', {
6 find: 'Otsi',
7 findOptions: 'Otsingu valikud',
8 findWhat: 'Otsitav:',
9 matchCase: 'Suur- ja väiketähtede eristamine',
10 matchCyclic: 'Jätkatakse algusest',
11 matchWord: 'Ainult terved sõnad',
12 notFoundMsg: 'Otsitud teksti ei leitud.',
13 replace: 'Asenda',
14 replaceAll: 'Asenda kõik',
15 replaceSuccessMsg: '%1 vastet asendati.',
16 replaceWith: 'Asendus:',
17 title: 'Otsimine ja asendamine'
18} );
diff --git a/sources/plugins/find/lang/eu.js b/sources/plugins/find/lang/eu.js
new file mode 100644
index 00000000..dad61b1b
--- /dev/null
+++ b/sources/plugins/find/lang/eu.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'eu', {
6 find: 'Bilatu',
7 findOptions: 'Bilaketaren aukerak',
8 findWhat: 'Bilatu hau:',
9 matchCase: 'Maiuskula/minuskula',
10 matchCyclic: 'Bilaketa ziklikoa',
11 matchWord: 'Bilatu hitz osoa',
12 notFoundMsg: 'Ez da aurkitu zehazturiko testua.',
13 replace: 'Ordezkatu',
14 replaceAll: 'Ordezkatu guztiak',
15 replaceSuccessMsg: '%1 aldiz ordezkatua.',
16 replaceWith: 'Ordezkatu honekin:',
17 title: 'Bilatu eta ordezkatu'
18} );
diff --git a/sources/plugins/find/lang/fa.js b/sources/plugins/find/lang/fa.js
new file mode 100644
index 00000000..c0b45b54
--- /dev/null
+++ b/sources/plugins/find/lang/fa.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'fa', {
6 find: 'جستجو',
7 findOptions: 'گزینه​های جستجو',
8 findWhat: 'چه چیز را مییابید:',
9 matchCase: 'همسانی در بزرگی و کوچکی نویسه​ها',
10 matchCyclic: 'همسانی با چرخه',
11 matchWord: 'همسانی با واژهٴ کامل',
12 notFoundMsg: 'متن موردنظر یافت نشد.',
13 replace: 'جایگزینی',
14 replaceAll: 'جایگزینی همهٴ یافته​ها',
15 replaceSuccessMsg: '%1 رخداد جایگزین شد.',
16 replaceWith: 'جایگزینی با:',
17 title: 'جستجو و جایگزینی'
18} );
diff --git a/sources/plugins/find/lang/fi.js b/sources/plugins/find/lang/fi.js
new file mode 100644
index 00000000..2d583902
--- /dev/null
+++ b/sources/plugins/find/lang/fi.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'fi', {
6 find: 'Etsi',
7 findOptions: 'Hakuasetukset',
8 findWhat: 'Etsi mitä:',
9 matchCase: 'Sama kirjainkoko',
10 matchCyclic: 'Kierrä ympäri',
11 matchWord: 'Koko sana',
12 notFoundMsg: 'Etsittyä tekstiä ei löytynyt.',
13 replace: 'Korvaa',
14 replaceAll: 'Korvaa kaikki',
15 replaceSuccessMsg: '%1 esiintymä(ä) korvattu.',
16 replaceWith: 'Korvaa tällä:',
17 title: 'Etsi ja korvaa'
18} );
diff --git a/sources/plugins/find/lang/fo.js b/sources/plugins/find/lang/fo.js
new file mode 100644
index 00000000..be08687b
--- /dev/null
+++ b/sources/plugins/find/lang/fo.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'fo', {
6 find: 'Leita',
7 findOptions: 'Finn møguleikar',
8 findWhat: 'Finn:',
9 matchCase: 'Munur á stórum og smáum bókstavum',
10 matchCyclic: 'Match cyclic',
11 matchWord: 'Bert heil orð',
12 notFoundMsg: 'Leititeksturin varð ikki funnin',
13 replace: 'Yvirskriva',
14 replaceAll: 'Yvirskriva alt',
15 replaceSuccessMsg: '%1 úrslit broytt.',
16 replaceWith: 'Yvirskriva við:',
17 title: 'Finn og broyt'
18} );
diff --git a/sources/plugins/find/lang/fr-ca.js b/sources/plugins/find/lang/fr-ca.js
new file mode 100644
index 00000000..401aedbf
--- /dev/null
+++ b/sources/plugins/find/lang/fr-ca.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'fr-ca', {
6 find: 'Rechercher',
7 findOptions: 'Options de recherche',
8 findWhat: 'Rechercher:',
9 matchCase: 'Respecter la casse',
10 matchCyclic: 'Recherche cyclique',
11 matchWord: 'Mot entier',
12 notFoundMsg: 'Le texte indiqué est introuvable.',
13 replace: 'Remplacer',
14 replaceAll: 'Tout remplacer',
15 replaceSuccessMsg: '%1 remplacements.',
16 replaceWith: 'Remplacer par:',
17 title: 'Rechercher et remplacer'
18} );
diff --git a/sources/plugins/find/lang/fr.js b/sources/plugins/find/lang/fr.js
new file mode 100644
index 00000000..65ce1bb1
--- /dev/null
+++ b/sources/plugins/find/lang/fr.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'fr', {
6 find: 'Trouver',
7 findOptions: 'Options de recherche',
8 findWhat: 'Expression à trouver: ',
9 matchCase: 'Respecter la casse',
10 matchCyclic: 'Boucler',
11 matchWord: 'Mot entier uniquement',
12 notFoundMsg: 'Le texte spécifié ne peut être trouvé.',
13 replace: 'Remplacer',
14 replaceAll: 'Remplacer tout',
15 replaceSuccessMsg: '%1 occurrence(s) replacée(s).',
16 replaceWith: 'Remplacer par: ',
17 title: 'Trouver et remplacer'
18} );
diff --git a/sources/plugins/find/lang/gl.js b/sources/plugins/find/lang/gl.js
new file mode 100644
index 00000000..853bfd8e
--- /dev/null
+++ b/sources/plugins/find/lang/gl.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'gl', {
6 find: 'Buscar',
7 findOptions: 'Buscar opcións',
8 findWhat: 'Texto a buscar:',
9 matchCase: 'Coincidir Mai./min.',
10 matchCyclic: 'Coincidencia cíclica',
11 matchWord: 'Coincidencia coa palabra completa',
12 notFoundMsg: 'Non se atopou o texto indicado.',
13 replace: 'Substituir',
14 replaceAll: 'Substituír todo',
15 replaceSuccessMsg: '%1 concorrencia(s) substituída(s).',
16 replaceWith: 'Substituír con:',
17 title: 'Buscar e substituír'
18} );
diff --git a/sources/plugins/find/lang/gu.js b/sources/plugins/find/lang/gu.js
new file mode 100644
index 00000000..9f0a344c
--- /dev/null
+++ b/sources/plugins/find/lang/gu.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'gu', {
6 find: 'શોધવું',
7 findOptions: 'વીકલ્પ શોધો',
8 findWhat: 'આ શોધો',
9 matchCase: 'કેસ સરખા રાખો',
10 matchCyclic: 'સરખાવવા બધા',
11 matchWord: 'બઘા શબ્દ સરખા રાખો',
12 notFoundMsg: 'તમે શોધેલી ટેક્સ્ટ નથી મળી',
13 replace: 'રિપ્લેસ/બદલવું',
14 replaceAll: 'બઘા બદલી ',
15 replaceSuccessMsg: '%1 ફેરફારો બાદલાયા છે.',
16 replaceWith: 'આનાથી બદલો',
17 title: 'શોધવું અને બદલવું'
18} );
diff --git a/sources/plugins/find/lang/he.js b/sources/plugins/find/lang/he.js
new file mode 100644
index 00000000..9c81572a
--- /dev/null
+++ b/sources/plugins/find/lang/he.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'he', {
6 find: 'חיפוש',
7 findOptions: 'אפשרויות חיפוש',
8 findWhat: 'חיפוש מחרוזת:',
9 matchCase: 'הבחנה בין אותיות רשיות לקטנות (Case)',
10 matchCyclic: 'התאמה מחזורית',
11 matchWord: 'התאמה למילה המלאה',
12 notFoundMsg: 'הטקסט המבוקש לא נמצא.',
13 replace: 'החלפה',
14 replaceAll: 'החלפה בכל העמוד',
15 replaceSuccessMsg: '%1 טקסטים הוחלפו.',
16 replaceWith: 'החלפה במחרוזת:',
17 title: 'חיפוש והחלפה'
18} );
diff --git a/sources/plugins/find/lang/hi.js b/sources/plugins/find/lang/hi.js
new file mode 100644
index 00000000..73ebdafb
--- /dev/null
+++ b/sources/plugins/find/lang/hi.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'hi', {
6 find: 'खोजें',
7 findOptions: 'Find Options',
8 findWhat: 'यह खोजें:',
9 matchCase: 'केस मिलायें',
10 matchCyclic: 'Match cyclic',
11 matchWord: 'पूरा शब्द मिलायें',
12 notFoundMsg: 'आपके द्वारा दिया गया टेक्स्ट नहीं मिला',
13 replace: 'रीप्लेस',
14 replaceAll: 'सभी रिप्लेस करें',
15 replaceSuccessMsg: '%1 occurrence(s) replaced.',
16 replaceWith: 'इससे रिप्लेस करें:',
17 title: 'खोजें और बदलें'
18} );
diff --git a/sources/plugins/find/lang/hr.js b/sources/plugins/find/lang/hr.js
new file mode 100644
index 00000000..ea542328
--- /dev/null
+++ b/sources/plugins/find/lang/hr.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'hr', {
6 find: 'Pronađi',
7 findOptions: 'Opcije traženja',
8 findWhat: 'Pronađi:',
9 matchCase: 'Usporedi mala/velika slova',
10 matchCyclic: 'Usporedi kružno',
11 matchWord: 'Usporedi cijele riječi',
12 notFoundMsg: 'Traženi tekst nije pronađen.',
13 replace: 'Zamijeni',
14 replaceAll: 'Zamijeni sve',
15 replaceSuccessMsg: 'Zamijenjeno %1 pojmova.',
16 replaceWith: 'Zamijeni s:',
17 title: 'Pronađi i zamijeni'
18} );
diff --git a/sources/plugins/find/lang/hu.js b/sources/plugins/find/lang/hu.js
new file mode 100644
index 00000000..70ed8523
--- /dev/null
+++ b/sources/plugins/find/lang/hu.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'hu', {
6 find: 'Keresés',
7 findOptions: 'Beállítások',
8 findWhat: 'Keresett szöveg:',
9 matchCase: 'Kis- és nagybetű megkülönböztetése',
10 matchCyclic: 'Ciklikus keresés',
11 matchWord: 'Csak ha ez a teljes szó',
12 notFoundMsg: 'A keresett szöveg nem található.',
13 replace: 'Csere',
14 replaceAll: 'Az összes cseréje',
15 replaceSuccessMsg: '%1 egyezőség cserélve.',
16 replaceWith: 'Csere erre:',
17 title: 'Keresés és csere'
18} );
diff --git a/sources/plugins/find/lang/id.js b/sources/plugins/find/lang/id.js
new file mode 100644
index 00000000..136c9aaf
--- /dev/null
+++ b/sources/plugins/find/lang/id.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'id', {
6 find: 'Temukan',
7 findOptions: 'Opsi menemukan',
8 findWhat: 'Temukan apa:',
9 matchCase: 'Match case', // MISSING
10 matchCyclic: 'Match cyclic', // MISSING
11 matchWord: 'Match whole word', // MISSING
12 notFoundMsg: 'Teks yang dipilih tidak ditemukan',
13 replace: 'Ganti',
14 replaceAll: 'Ganti Semua',
15 replaceSuccessMsg: '%1 occurrence(s) replaced.', // MISSING
16 replaceWith: 'Ganti dengan:',
17 title: 'Temukan dan Ganti'
18} );
diff --git a/sources/plugins/find/lang/is.js b/sources/plugins/find/lang/is.js
new file mode 100644
index 00000000..7687957c
--- /dev/null
+++ b/sources/plugins/find/lang/is.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'is', {
6 find: 'Leita',
7 findOptions: 'Find Options',
8 findWhat: 'Leita að:',
9 matchCase: 'Gera greinarmun á¡ há¡- og lágstöfum',
10 matchCyclic: 'Match cyclic',
11 matchWord: 'Aðeins heil orð',
12 notFoundMsg: 'Leitartexti fannst ekki!',
13 replace: 'Skipta út',
14 replaceAll: 'Skipta út allsstaðar',
15 replaceSuccessMsg: '%1 occurrence(s) replaced.',
16 replaceWith: 'Skipta út fyrir:',
17 title: 'Finna og skipta'
18} );
diff --git a/sources/plugins/find/lang/it.js b/sources/plugins/find/lang/it.js
new file mode 100644
index 00000000..4759fdba
--- /dev/null
+++ b/sources/plugins/find/lang/it.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'it', {
6 find: 'Trova',
7 findOptions: 'Opzioni di ricerca',
8 findWhat: 'Trova:',
9 matchCase: 'Maiuscole/minuscole',
10 matchCyclic: 'Ricerca ciclica',
11 matchWord: 'Solo parole intere',
12 notFoundMsg: 'L\'elemento cercato non è stato trovato.',
13 replace: 'Sostituisci',
14 replaceAll: 'Sostituisci tutto',
15 replaceSuccessMsg: '%1 occorrenza(e) sostituite.',
16 replaceWith: 'Sostituisci con:',
17 title: 'Cerca e Sostituisci'
18} );
diff --git a/sources/plugins/find/lang/ja.js b/sources/plugins/find/lang/ja.js
new file mode 100644
index 00000000..51100472
--- /dev/null
+++ b/sources/plugins/find/lang/ja.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'ja', {
6 find: '検索',
7 findOptions: '検索オプション',
8 findWhat: '検索する文字列:',
9 matchCase: '大文字と小文字を区別する',
10 matchCyclic: '末尾に逹したら先頭に戻る',
11 matchWord: '単語単位で探す',
12 notFoundMsg: '指定された文字列は見つかりませんでした。',
13 replace: '置換',
14 replaceAll: 'すべて置換',
15 replaceSuccessMsg: '%1 個置換しました。',
16 replaceWith: '置換後の文字列:',
17 title: '検索と置換'
18} );
diff --git a/sources/plugins/find/lang/ka.js b/sources/plugins/find/lang/ka.js
new file mode 100644
index 00000000..2ac75798
--- /dev/null
+++ b/sources/plugins/find/lang/ka.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'ka', {
6 find: 'ძებნა',
7 findOptions: 'Find Options',
8 findWhat: 'საძიებელი ტექსტი:',
9 matchCase: 'დიდი და პატარა ასოების დამთხვევა',
10 matchCyclic: 'დოკუმენტის ბოლოში გასვლის მერე თავიდან დაწყება',
11 matchWord: 'მთელი სიტყვის დამთხვევა',
12 notFoundMsg: 'მითითებული ტექსტი არ მოიძებნა.',
13 replace: 'შეცვლა',
14 replaceAll: 'ყველას შეცვლა',
15 replaceSuccessMsg: '%1 მოძებნილი შეიცვალა.',
16 replaceWith: 'შეცვლის ტექსტი:',
17 title: 'ძებნა და შეცვლა'
18} );
diff --git a/sources/plugins/find/lang/km.js b/sources/plugins/find/lang/km.js
new file mode 100644
index 00000000..f4f43399
--- /dev/null
+++ b/sources/plugins/find/lang/km.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'km', {
6 find: 'ស្វែងរក',
7 findOptions: 'ជម្រើស​ស្វែង​រក',
8 findWhat: 'ស្វែងរកអ្វី:',
9 matchCase: 'ករណី​ដំណូច',
10 matchCyclic: 'ត្រូវ​នឹង cyclic',
11 matchWord: 'ដូច​នឹង​ពាក្យ​ទាំង​មូល',
12 notFoundMsg: 'រក​មិន​ឃើញ​ពាក្យ​ដែល​បាន​បញ្ជាក់។',
13 replace: 'ជំនួស',
14 replaceAll: 'ជំនួសទាំងអស់',
15 replaceSuccessMsg: 'ការ​ជំនួស​ចំនួន %1 បាន​កើត​ឡើង។',
16 replaceWith: 'ជំនួសជាមួយ:',
17 title: 'រក​និង​ជំនួស'
18} );
diff --git a/sources/plugins/find/lang/ko.js b/sources/plugins/find/lang/ko.js
new file mode 100644
index 00000000..13bef418
--- /dev/null
+++ b/sources/plugins/find/lang/ko.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'ko', {
6 find: '찾기',
7 findOptions: '찾기 조건',
8 findWhat: '찾을 내용:',
9 matchCase: '대소문자 구분',
10 matchCyclic: '되돌이 검색',
11 matchWord: '온전한 단어',
12 notFoundMsg: '문자열을 찾을 수 없습니다.',
13 replace: '바꾸기',
14 replaceAll: '모두 바꾸기',
15 replaceSuccessMsg: '%1개의 항목이 바뀌었습니다.',
16 replaceWith: '바꿀 내용:',
17 title: '찾기 및 바꾸기'
18} );
diff --git a/sources/plugins/find/lang/ku.js b/sources/plugins/find/lang/ku.js
new file mode 100644
index 00000000..c74fb071
--- /dev/null
+++ b/sources/plugins/find/lang/ku.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'ku', {
6 find: 'گەڕان',
7 findOptions: 'هەڵبژاردەکانی گەڕان',
8 findWhat: 'گەڕان بەدووای:',
9 matchCase: 'جیاکردنەوه لەنێوان پیتی گەورەو بچووك',
10 matchCyclic: 'گەڕان لەهەموو پەڕەکه',
11 matchWord: 'تەنەا هەموو وشەکه',
12 notFoundMsg: 'هیچ دەقه گەڕانێك نەدۆزراوه.',
13 replace: 'لەبریدانان',
14 replaceAll: 'لەبریدانانی هەمووی',
15 replaceSuccessMsg: ' پێشهاتە(ی) لەبری دانرا. %1',
16 replaceWith: 'لەبریدانان به:',
17 title: 'گەڕان و لەبریدانان'
18} );
diff --git a/sources/plugins/find/lang/lt.js b/sources/plugins/find/lang/lt.js
new file mode 100644
index 00000000..91d8ef24
--- /dev/null
+++ b/sources/plugins/find/lang/lt.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'lt', {
6 find: 'Rasti',
7 findOptions: 'Paieškos nustatymai',
8 findWhat: 'Surasti tekstą:',
9 matchCase: 'Skirti didžiąsias ir mažąsias raides',
10 matchCyclic: 'Sutampantis cikliškumas',
11 matchWord: 'Atitikti pilną žodį',
12 notFoundMsg: 'Nurodytas tekstas nerastas.',
13 replace: 'Pakeisti',
14 replaceAll: 'Pakeisti viską',
15 replaceSuccessMsg: '%1 sutapimas(ų) buvo pakeisti.',
16 replaceWith: 'Pakeisti tekstu:',
17 title: 'Surasti ir pakeisti'
18} );
diff --git a/sources/plugins/find/lang/lv.js b/sources/plugins/find/lang/lv.js
new file mode 100644
index 00000000..fff75cf9
--- /dev/null
+++ b/sources/plugins/find/lang/lv.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'lv', {
6 find: 'Meklēt',
7 findOptions: 'Meklēt uzstādījumi',
8 findWhat: 'Meklēt:',
9 matchCase: 'Reģistrjūtīgs',
10 matchCyclic: 'Sakrist cikliski',
11 matchWord: 'Jāsakrīt pilnībā',
12 notFoundMsg: 'Norādītā frāze netika atrasta.',
13 replace: 'Nomainīt',
14 replaceAll: 'Aizvietot visu',
15 replaceSuccessMsg: '%1 gadījums(i) aizvietoti',
16 replaceWith: 'Nomainīt uz:',
17 title: 'Meklēt un aizvietot'
18} );
diff --git a/sources/plugins/find/lang/mk.js b/sources/plugins/find/lang/mk.js
new file mode 100644
index 00000000..d30638b4
--- /dev/null
+++ b/sources/plugins/find/lang/mk.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'mk', {
6 find: 'Find',
7 findOptions: 'Find Options',
8 findWhat: 'Find what:',
9 matchCase: 'Match case',
10 matchCyclic: 'Match cyclic',
11 matchWord: 'Match whole word',
12 notFoundMsg: 'The specified text was not found.',
13 replace: 'Replace',
14 replaceAll: 'Replace All',
15 replaceSuccessMsg: '%1 occurrence(s) replaced.',
16 replaceWith: 'Replace with:',
17 title: 'Find and Replace'
18} );
diff --git a/sources/plugins/find/lang/mn.js b/sources/plugins/find/lang/mn.js
new file mode 100644
index 00000000..e41d1429
--- /dev/null
+++ b/sources/plugins/find/lang/mn.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'mn', {
6 find: 'Хайх',
7 findOptions: 'Хайх сонголтууд',
8 findWhat: 'Хайх үг/үсэг:',
9 matchCase: 'Тэнцэх төлөв',
10 matchCyclic: 'Match cyclic',
11 matchWord: 'Тэнцэх бүтэн үг',
12 notFoundMsg: 'Хайсан бичвэрийг олсонгүй.',
13 replace: 'Орлуулах',
14 replaceAll: 'Бүгдийг нь солих',
15 replaceSuccessMsg: '%1 occurrence(s) replaced.',
16 replaceWith: 'Солих үг:',
17 title: 'Хайж орлуулах'
18} );
diff --git a/sources/plugins/find/lang/ms.js b/sources/plugins/find/lang/ms.js
new file mode 100644
index 00000000..79ceca0c
--- /dev/null
+++ b/sources/plugins/find/lang/ms.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'ms', {
6 find: 'Cari',
7 findOptions: 'Find Options',
8 findWhat: 'Perkataan yang dicari:',
9 matchCase: 'Padanan case huruf',
10 matchCyclic: 'Match cyclic',
11 matchWord: 'Padana Keseluruhan perkataan',
12 notFoundMsg: 'Text yang dicari tidak dijumpai.',
13 replace: 'Ganti',
14 replaceAll: 'Ganti semua',
15 replaceSuccessMsg: '%1 occurrence(s) replaced.',
16 replaceWith: 'Diganti dengan:',
17 title: 'Find and Replace'
18} );
diff --git a/sources/plugins/find/lang/nb.js b/sources/plugins/find/lang/nb.js
new file mode 100644
index 00000000..fdd559b8
--- /dev/null
+++ b/sources/plugins/find/lang/nb.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'nb', {
6 find: 'Søk',
7 findOptions: 'Søkealternativer',
8 findWhat: 'Søk etter:',
9 matchCase: 'Skill mellom store og små bokstaver',
10 matchCyclic: 'Søk i hele dokumentet',
11 matchWord: 'Bare hele ord',
12 notFoundMsg: 'Fant ikke søketeksten.',
13 replace: 'Erstatt',
14 replaceAll: 'Erstatt alle',
15 replaceSuccessMsg: '%1 tilfelle(r) erstattet.',
16 replaceWith: 'Erstatt med:',
17 title: 'Søk og erstatt'
18} );
diff --git a/sources/plugins/find/lang/nl.js b/sources/plugins/find/lang/nl.js
new file mode 100644
index 00000000..c350072b
--- /dev/null
+++ b/sources/plugins/find/lang/nl.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'nl', {
6 find: 'Zoeken',
7 findOptions: 'Zoekopties',
8 findWhat: 'Zoeken naar:',
9 matchCase: 'Hoofdlettergevoelig',
10 matchCyclic: 'Doorlopend zoeken',
11 matchWord: 'Hele woord moet voorkomen',
12 notFoundMsg: 'De opgegeven tekst is niet gevonden.',
13 replace: 'Vervangen',
14 replaceAll: 'Alles vervangen',
15 replaceSuccessMsg: '%1 resultaten vervangen.',
16 replaceWith: 'Vervangen met:',
17 title: 'Zoeken en vervangen'
18} );
diff --git a/sources/plugins/find/lang/no.js b/sources/plugins/find/lang/no.js
new file mode 100644
index 00000000..6c99e793
--- /dev/null
+++ b/sources/plugins/find/lang/no.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'no', {
6 find: 'Søk',
7 findOptions: 'Søkealternativer',
8 findWhat: 'Søk etter:',
9 matchCase: 'Skill mellom store og små bokstaver',
10 matchCyclic: 'Søk i hele dokumentet',
11 matchWord: 'Bare hele ord',
12 notFoundMsg: 'Fant ikke søketeksten.',
13 replace: 'Erstatt',
14 replaceAll: 'Erstatt alle',
15 replaceSuccessMsg: '%1 tilfelle(r) erstattet.',
16 replaceWith: 'Erstatt med:',
17 title: 'Søk og erstatt'
18} );
diff --git a/sources/plugins/find/lang/pl.js b/sources/plugins/find/lang/pl.js
new file mode 100644
index 00000000..949c2a38
--- /dev/null
+++ b/sources/plugins/find/lang/pl.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'pl', {
6 find: 'Znajdź',
7 findOptions: 'Opcje wyszukiwania',
8 findWhat: 'Znajdź:',
9 matchCase: 'Uwzględnij wielkość liter',
10 matchCyclic: 'Cykliczne dopasowanie',
11 matchWord: 'Całe słowa',
12 notFoundMsg: 'Nie znaleziono szukanego hasła.',
13 replace: 'Zamień',
14 replaceAll: 'Zamień wszystko',
15 replaceSuccessMsg: '%1 wystąpień zastąpionych.',
16 replaceWith: 'Zastąp przez:',
17 title: 'Znajdź i zamień'
18} );
diff --git a/sources/plugins/find/lang/pt-br.js b/sources/plugins/find/lang/pt-br.js
new file mode 100644
index 00000000..e52126c7
--- /dev/null
+++ b/sources/plugins/find/lang/pt-br.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'pt-br', {
6 find: 'Localizar',
7 findOptions: 'Opções',
8 findWhat: 'Procurar por:',
9 matchCase: 'Coincidir Maiúsculas/Minúsculas',
10 matchCyclic: 'Coincidir cíclico',
11 matchWord: 'Coincidir a palavra inteira',
12 notFoundMsg: 'O texto especificado não foi encontrado.',
13 replace: 'Substituir',
14 replaceAll: 'Substituir Tudo',
15 replaceSuccessMsg: '%1 ocorrência(s) substituída(s).',
16 replaceWith: 'Substituir por:',
17 title: 'Localizar e Substituir'
18} );
diff --git a/sources/plugins/find/lang/pt.js b/sources/plugins/find/lang/pt.js
new file mode 100644
index 00000000..19901df5
--- /dev/null
+++ b/sources/plugins/find/lang/pt.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'pt', {
6 find: 'Procurar',
7 findOptions: 'Find Options',
8 findWhat: 'Texto a procurar:',
9 matchCase: 'Maiúsculas/Minúsculas',
10 matchCyclic: 'Match cyclic',
11 matchWord: 'Coincidir com toda a palavra',
12 notFoundMsg: 'O texto especificado não foi encontrado.',
13 replace: 'Substituir',
14 replaceAll: 'Substituir Tudo',
15 replaceSuccessMsg: '%1 occurrence(s) replaced.',
16 replaceWith: 'Substituir por:',
17 title: 'Find and Replace'
18} );
diff --git a/sources/plugins/find/lang/ro.js b/sources/plugins/find/lang/ro.js
new file mode 100644
index 00000000..0760be20
--- /dev/null
+++ b/sources/plugins/find/lang/ro.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'ro', {
6 find: 'Găseşte',
7 findOptions: 'Find Options',
8 findWhat: 'Găseşte:',
9 matchCase: 'Deosebeşte majuscule de minuscule (Match case)',
10 matchCyclic: 'Potrivește ciclic',
11 matchWord: 'Doar cuvintele întregi',
12 notFoundMsg: 'Textul specificat nu a fost găsit.',
13 replace: 'Înlocuieşte',
14 replaceAll: 'Înlocuieşte tot',
15 replaceSuccessMsg: '%1 căutări înlocuite.',
16 replaceWith: 'Înlocuieşte cu:',
17 title: 'Găseşte şi înlocuieşte'
18} );
diff --git a/sources/plugins/find/lang/ru.js b/sources/plugins/find/lang/ru.js
new file mode 100644
index 00000000..5667a7dd
--- /dev/null
+++ b/sources/plugins/find/lang/ru.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'ru', {
6 find: 'Найти',
7 findOptions: 'Опции поиска',
8 findWhat: 'Найти:',
9 matchCase: 'Учитывать регистр',
10 matchCyclic: 'По всему тексту',
11 matchWord: 'Только слово целиком',
12 notFoundMsg: 'Искомый текст не найден.',
13 replace: 'Заменить',
14 replaceAll: 'Заменить всё',
15 replaceSuccessMsg: 'Успешно заменено %1 раз(а).',
16 replaceWith: 'Заменить на:',
17 title: 'Поиск и замена'
18} );
diff --git a/sources/plugins/find/lang/si.js b/sources/plugins/find/lang/si.js
new file mode 100644
index 00000000..2e1b1b68
--- /dev/null
+++ b/sources/plugins/find/lang/si.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'si', {
6 find: 'Find', // MISSING
7 findOptions: 'Find Options', // MISSING
8 findWhat: 'Find what:', // MISSING
9 matchCase: 'Match case', // MISSING
10 matchCyclic: 'Match cyclic', // MISSING
11 matchWord: 'Match whole word', // MISSING
12 notFoundMsg: 'The specified text was not found.', // MISSING
13 replace: 'හිලව් කිරීම',
14 replaceAll: 'සියල්ලම හිලව් කරන්න',
15 replaceSuccessMsg: '%1 occurrence(s) replaced.', // MISSING
16 replaceWith: 'Replace with:', // MISSING
17 title: 'Find and Replace' // MISSING
18} );
diff --git a/sources/plugins/find/lang/sk.js b/sources/plugins/find/lang/sk.js
new file mode 100644
index 00000000..2b3471b1
--- /dev/null
+++ b/sources/plugins/find/lang/sk.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'sk', {
6 find: 'Hľadať',
7 findOptions: 'Nájsť možnosti',
8 findWhat: 'Čo hľadať:',
9 matchCase: 'Rozlišovať malé a veľké písmená',
10 matchCyclic: 'Cykliť zhodu',
11 matchWord: 'Len celé slová',
12 notFoundMsg: 'Hľadaný text nebol nájdený.',
13 replace: 'Nahradiť',
14 replaceAll: 'Nahradiť všetko',
15 replaceSuccessMsg: '%1 výskyt(ov) nahradených.',
16 replaceWith: 'Čím nahradiť:',
17 title: 'Nájsť a nahradiť'
18} );
diff --git a/sources/plugins/find/lang/sl.js b/sources/plugins/find/lang/sl.js
new file mode 100644
index 00000000..ce6302c4
--- /dev/null
+++ b/sources/plugins/find/lang/sl.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'sl', {
6 find: 'Najdi',
7 findOptions: 'Find Options',
8 findWhat: 'Najdi:',
9 matchCase: 'Razlikuj velike in male črke',
10 matchCyclic: 'Primerjaj znake v cirilici',
11 matchWord: 'Samo cele besede',
12 notFoundMsg: 'Navedeno besedilo ni bilo najdeno.',
13 replace: 'Zamenjaj',
14 replaceAll: 'Zamenjaj vse',
15 replaceSuccessMsg: '%1 pojavitev je bilo zamenjano.',
16 replaceWith: 'Zamenjaj z:',
17 title: 'Najdi in zamenjaj'
18} );
diff --git a/sources/plugins/find/lang/sq.js b/sources/plugins/find/lang/sq.js
new file mode 100644
index 00000000..8a2e449d
--- /dev/null
+++ b/sources/plugins/find/lang/sq.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'sq', {
6 find: 'Gjej',
7 findOptions: 'Gjejë Alternativat',
8 findWhat: 'Gjej çka:',
9 matchCase: 'Rasti i përputhjes',
10 matchCyclic: 'Përputh ciklikun',
11 matchWord: 'Përputh fjalën e tërë',
12 notFoundMsg: 'Teksti i caktuar nuk mundej të gjendet.',
13 replace: 'Zëvendëso',
14 replaceAll: 'Zëvendëso të gjitha',
15 replaceSuccessMsg: '%1 rast(e) u zëvendësua(n).',
16 replaceWith: 'Zëvendëso me:',
17 title: 'Gjej dhe Zëvendëso'
18} );
diff --git a/sources/plugins/find/lang/sr-latn.js b/sources/plugins/find/lang/sr-latn.js
new file mode 100644
index 00000000..48f85a25
--- /dev/null
+++ b/sources/plugins/find/lang/sr-latn.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'sr-latn', {
6 find: 'Pretraga',
7 findOptions: 'Find Options',
8 findWhat: 'Pronadi:',
9 matchCase: 'Razlikuj mala i velika slova',
10 matchCyclic: 'Match cyclic',
11 matchWord: 'Uporedi cele reci',
12 notFoundMsg: 'Traženi tekst nije pronađen.',
13 replace: 'Zamena',
14 replaceAll: 'Zameni sve',
15 replaceSuccessMsg: '%1 occurrence(s) replaced.',
16 replaceWith: 'Zameni sa:',
17 title: 'Find and Replace'
18} );
diff --git a/sources/plugins/find/lang/sr.js b/sources/plugins/find/lang/sr.js
new file mode 100644
index 00000000..9e7ae1c9
--- /dev/null
+++ b/sources/plugins/find/lang/sr.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'sr', {
6 find: 'Претрага',
7 findOptions: 'Find Options',
8 findWhat: 'Пронађи:',
9 matchCase: 'Разликуј велика и мала слова',
10 matchCyclic: 'Match cyclic',
11 matchWord: 'Упореди целе речи',
12 notFoundMsg: 'Тражени текст није пронађен.',
13 replace: 'Замена',
14 replaceAll: 'Замени све',
15 replaceSuccessMsg: '%1 occurrence(s) replaced.',
16 replaceWith: 'Замени са:',
17 title: 'Find and Replace'
18} );
diff --git a/sources/plugins/find/lang/sv.js b/sources/plugins/find/lang/sv.js
new file mode 100644
index 00000000..3e2d1ce0
--- /dev/null
+++ b/sources/plugins/find/lang/sv.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'sv', {
6 find: 'Sök',
7 findOptions: 'Sökalternativ',
8 findWhat: 'Sök efter:',
9 matchCase: 'Skiftläge',
10 matchCyclic: 'Matcha cykliska',
11 matchWord: 'Inkludera hela ord',
12 notFoundMsg: 'Angiven text kunde ej hittas.',
13 replace: 'Ersätt',
14 replaceAll: 'Ersätt alla',
15 replaceSuccessMsg: '%1 förekomst(er) ersatta.',
16 replaceWith: 'Ersätt med:',
17 title: 'Sök och ersätt'
18} );
diff --git a/sources/plugins/find/lang/th.js b/sources/plugins/find/lang/th.js
new file mode 100644
index 00000000..d83cfd26
--- /dev/null
+++ b/sources/plugins/find/lang/th.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'th', {
6 find: 'ค้นหา',
7 findOptions: 'Find Options',
8 findWhat: 'ค้นหาคำว่า:',
9 matchCase: 'ตัวโหญ่-เล็ก ต้องตรงกัน',
10 matchCyclic: 'Match cyclic',
11 matchWord: 'ต้องตรงกันทุกคำ',
12 notFoundMsg: 'ไม่พบคำที่ค้นหา.',
13 replace: 'ค้นหาและแทนที่',
14 replaceAll: 'แทนที่ทั้งหมดที่พบ',
15 replaceSuccessMsg: '%1 occurrence(s) replaced.',
16 replaceWith: 'แทนที่ด้วย:',
17 title: 'Find and Replace'
18} );
diff --git a/sources/plugins/find/lang/tr.js b/sources/plugins/find/lang/tr.js
new file mode 100644
index 00000000..9705d9e0
--- /dev/null
+++ b/sources/plugins/find/lang/tr.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'tr', {
6 find: 'Bul',
7 findOptions: 'Seçenekleri Bul',
8 findWhat: 'Aranan:',
9 matchCase: 'Büyük/küçük harf duyarlı',
10 matchCyclic: 'Eşleşen döngü',
11 matchWord: 'Kelimenin tamamı uysun',
12 notFoundMsg: 'Belirtilen yazı bulunamadı.',
13 replace: 'Değiştir',
14 replaceAll: 'Tümünü Değiştir',
15 replaceSuccessMsg: '%1 bulunanlardan değiştirildi.',
16 replaceWith: 'Bununla değiştir:',
17 title: 'Bul ve Değiştir'
18} );
diff --git a/sources/plugins/find/lang/tt.js b/sources/plugins/find/lang/tt.js
new file mode 100644
index 00000000..459892b1
--- /dev/null
+++ b/sources/plugins/find/lang/tt.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'tt', {
6 find: 'Эзләү',
7 findOptions: 'Эзләү көйләүләре',
8 findWhat: 'Нәрсә эзләргә:',
9 matchCase: 'Баш һәм юл хәрефләрен исәпкә алу',
10 matchCyclic: 'Кабатлап эзләргә',
11 matchWord: 'Сүзләрне тулысынча гына эзләү',
12 notFoundMsg: 'Эзләнгән текст табылмады.',
13 replace: 'Алмаштыру',
14 replaceAll: 'Барысын да алмаштыру',
15 replaceSuccessMsg: '%1 урында(ларда) алмаштырылган.',
16 replaceWith: 'Нәрсәгә алмаштыру:',
17 title: 'Эзләп табу һәм алмаштыру'
18} );
diff --git a/sources/plugins/find/lang/ug.js b/sources/plugins/find/lang/ug.js
new file mode 100644
index 00000000..1407e983
--- /dev/null
+++ b/sources/plugins/find/lang/ug.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'ug', {
6 find: 'ئىزدە',
7 findOptions: 'ئىزدەش تاللانمىسى',
8 findWhat: 'ئىزدە:',
9 matchCase: 'چوڭ كىچىك ھەرپنى پەرقلەندۈر',
10 matchCyclic: 'ئايلانما ماسلىشىش',
11 matchWord: 'پۈتۈن سۆز ماسلىشىش',
12 notFoundMsg: 'بەلگىلەنگەن تېكىستنى تاپالمىدى',
13 replace: 'ئالماشتۇر',
14 replaceAll: 'ھەممىنى ئالماشتۇر',
15 replaceSuccessMsg: 'جەمئى %1 جايدىكى ئالماشتۇرۇش تاماملاندى',
16 replaceWith: 'ئالماشتۇر:',
17 title: 'ئىزدەپ ئالماشتۇر'
18} );
diff --git a/sources/plugins/find/lang/uk.js b/sources/plugins/find/lang/uk.js
new file mode 100644
index 00000000..3e904836
--- /dev/null
+++ b/sources/plugins/find/lang/uk.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'uk', {
6 find: 'Пошук',
7 findOptions: 'Параметри Пошуку',
8 findWhat: 'Шукати:',
9 matchCase: 'Враховувати регістр',
10 matchCyclic: 'Циклічна заміна',
11 matchWord: 'Збіг цілих слів',
12 notFoundMsg: 'Вказаний текст не знайдено.',
13 replace: 'Заміна',
14 replaceAll: 'Замінити все',
15 replaceSuccessMsg: '%1 співпадінь(ня) замінено.',
16 replaceWith: 'Замінити на:',
17 title: 'Знайти і замінити'
18} );
diff --git a/sources/plugins/find/lang/vi.js b/sources/plugins/find/lang/vi.js
new file mode 100644
index 00000000..3a6d522b
--- /dev/null
+++ b/sources/plugins/find/lang/vi.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'vi', {
6 find: 'Tìm kiếm',
7 findOptions: 'Tìm tùy chọn',
8 findWhat: 'Tìm chuỗi:',
9 matchCase: 'Phân biệt chữ hoa/thường',
10 matchCyclic: 'Giống một phần',
11 matchWord: 'Giống toàn bộ từ',
12 notFoundMsg: 'Không tìm thấy chuỗi cần tìm.',
13 replace: 'Thay thế',
14 replaceAll: 'Thay thế tất cả',
15 replaceSuccessMsg: '%1 vị trí đã được thay thế.',
16 replaceWith: 'Thay bằng:',
17 title: 'Tìm kiếm và thay thế'
18} );
diff --git a/sources/plugins/find/lang/zh-cn.js b/sources/plugins/find/lang/zh-cn.js
new file mode 100644
index 00000000..d38bb9dd
--- /dev/null
+++ b/sources/plugins/find/lang/zh-cn.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'zh-cn', {
6 find: '查找',
7 findOptions: '查找选项',
8 findWhat: '查找:',
9 matchCase: '区分大小写',
10 matchCyclic: '循环匹配',
11 matchWord: '全字匹配',
12 notFoundMsg: '指定的文本没有找到。',
13 replace: '替换',
14 replaceAll: '全部替换',
15 replaceSuccessMsg: '共完成 %1 处替换。',
16 replaceWith: '替换:',
17 title: '查找和替换'
18} );
diff --git a/sources/plugins/find/lang/zh.js b/sources/plugins/find/lang/zh.js
new file mode 100644
index 00000000..13c65c57
--- /dev/null
+++ b/sources/plugins/find/lang/zh.js
@@ -0,0 +1,18 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'find', 'zh', {
6 find: '尋找',
7 findOptions: '尋找選項',
8 findWhat: '尋找目標:',
9 matchCase: '大小寫須相符',
10 matchCyclic: '循環搜尋',
11 matchWord: '全字拼寫須相符',
12 notFoundMsg: '找不到指定的文字。',
13 replace: '取代',
14 replaceAll: '全部取代',
15 replaceSuccessMsg: '已取代 %1 個指定項目。',
16 replaceWith: '取代成:',
17 title: '尋找及取代'
18} );
diff --git a/sources/plugins/find/plugin.js b/sources/plugins/find/plugin.js
new file mode 100644
index 00000000..bf8a3529
--- /dev/null
+++ b/sources/plugins/find/plugin.js
@@ -0,0 +1,52 @@
1/**
2 * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3 * For licensing, see LICENSE.md or http://ckeditor.com/license
4 */
5
6CKEDITOR.plugins.add( 'find', {
7 requires: 'dialog',
8 // jscs:disable maximumLineLength
9 lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,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,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%
10 // jscs:enable maximumLineLength
11 icons: 'find,find-rtl,replace', // %REMOVE_LINE_CORE%
12 hidpi: true, // %REMOVE_LINE_CORE%
13 init: function( editor ) {
14 var findCommand = editor.addCommand( 'find', new CKEDITOR.dialogCommand( 'find' ) );
15 findCommand.canUndo = false;
16 findCommand.readOnly = 1;
17
18 var replaceCommand = editor.addCommand( 'replace', new CKEDITOR.dialogCommand( 'replace' ) );
19 replaceCommand.canUndo = false;
20
21 if ( editor.ui.addButton ) {
22 editor.ui.addButton( 'Find', {
23 label: editor.lang.find.find,
24 command: 'find',
25 toolbar: 'find,10'
26 } );
27
28 editor.ui.addButton( 'Replace', {
29 label: editor.lang.find.replace,
30 command: 'replace',
31 toolbar: 'find,20'
32 } );
33 }
34
35 CKEDITOR.dialog.add( 'find', this.path + 'dialogs/find.js' );
36 CKEDITOR.dialog.add( 'replace', this.path + 'dialogs/find.js' );
37 }
38} );
39
40/**
41 * Defines the style to be used to highlight results with the find dialog.
42 *
43 * // Highlight search results with blue on yellow.
44 * config.find_highlight = {
45 * element: 'span',
46 * styles: { 'background-color': '#ff0', color: '#00f' }
47 * };
48 *
49 * @cfg
50 * @member CKEDITOR.config
51 */
52CKEDITOR.config.find_highlight = { element: 'span', styles: { 'background-color': '#004', color: '#fff' } };