Merge branch 'master' into release
This commit is contained in:
		
						commit
						b7a96c6466
					
				| 
						 | 
				
			
			@ -25,4 +25,4 @@ after_failure:
 | 
			
		|||
  - cat storage/logs/laravel.log
 | 
			
		||||
 | 
			
		||||
script:
 | 
			
		||||
  - phpunit
 | 
			
		||||
  - phpunit
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -58,7 +58,7 @@ return [
 | 
			
		|||
    */
 | 
			
		||||
 | 
			
		||||
    'locale' => env('APP_LANG', 'en'),
 | 
			
		||||
    'locales' => ['en', 'de', 'es', 'fr', 'nl', 'pt_BR', 'sk', 'ja'],
 | 
			
		||||
    'locales' => ['en', 'de', 'es', 'fr', 'nl', 'pt_BR', 'sk', 'ja', 'pl'],
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
    |--------------------------------------------------------------------------
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										28
									
								
								gulpfile.js
								
								
								
								
							
							
						
						
									
										28
									
								
								gulpfile.js
								
								
								
								
							| 
						 | 
				
			
			@ -12,8 +12,10 @@ const babelify = require("babelify");
 | 
			
		|||
const watchify = require("watchify");
 | 
			
		||||
const envify = require("envify");
 | 
			
		||||
const gutil = require("gulp-util");
 | 
			
		||||
const liveReload = require('gulp-livereload');
 | 
			
		||||
 | 
			
		||||
if (argv.production) process.env.NODE_ENV = 'production';
 | 
			
		||||
let isProduction = argv.production || process.env.NODE_ENV === 'production';
 | 
			
		||||
 | 
			
		||||
gulp.task('styles', () => {
 | 
			
		||||
    let chain = gulp.src(['resources/assets/sass/**/*.scss'])
 | 
			
		||||
| 
						 | 
				
			
			@ -24,31 +26,40 @@ gulp.task('styles', () => {
 | 
			
		|||
            }}))
 | 
			
		||||
        .pipe(sass())
 | 
			
		||||
        .pipe(autoprefixer('last 2 versions'));
 | 
			
		||||
    if (argv.production) chain = chain.pipe(minifycss());
 | 
			
		||||
    return chain.pipe(gulp.dest('public/css/'));
 | 
			
		||||
    if (isProduction) chain = chain.pipe(minifycss());
 | 
			
		||||
    return chain.pipe(gulp.dest('public/css/')).pipe(liveReload());
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function scriptTask(watch=false) {
 | 
			
		||||
function scriptTask(watch = false) {
 | 
			
		||||
 | 
			
		||||
    let props = {
 | 
			
		||||
        basedir: 'resources/assets/js',
 | 
			
		||||
        debug: true,
 | 
			
		||||
        entries: ['global.js']
 | 
			
		||||
        entries: ['global.js'],
 | 
			
		||||
        fast: !isProduction,
 | 
			
		||||
        cache: {},
 | 
			
		||||
        packageCache: {},
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    let bundler = watch ? watchify(browserify(props), { poll: true }) : browserify(props);
 | 
			
		||||
    bundler.transform(envify, {global: true}).transform(babelify, {presets: ['es2015']});
 | 
			
		||||
 | 
			
		||||
    if (isProduction) {
 | 
			
		||||
        bundler.transform(envify, {global: true}).transform(babelify, {presets: ['es2015']});
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function rebundle() {
 | 
			
		||||
        let stream = bundler.bundle();
 | 
			
		||||
        stream = stream.pipe(source('common.js'));
 | 
			
		||||
        if (argv.production) stream = stream.pipe(buffer()).pipe(uglify());
 | 
			
		||||
        return stream.pipe(gulp.dest('public/js/'));
 | 
			
		||||
        if (isProduction) stream = stream.pipe(buffer()).pipe(uglify());
 | 
			
		||||
        return stream.pipe(gulp.dest('public/js/')).pipe(liveReload());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    bundler.on('update', function() {
 | 
			
		||||
        rebundle();
 | 
			
		||||
        gutil.log('Rebundle...');
 | 
			
		||||
        gutil.log('Rebundling assets...');
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    bundler.on('log', gutil.log);
 | 
			
		||||
    return rebundle();
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -57,6 +68,7 @@ gulp.task('scripts', () => {scriptTask(false)});
 | 
			
		|||
gulp.task('scripts-watch', () => {scriptTask(true)});
 | 
			
		||||
 | 
			
		||||
gulp.task('default', ['styles', 'scripts-watch'], () => {
 | 
			
		||||
    liveReload.listen();
 | 
			
		||||
    gulp.watch("resources/assets/sass/**/*.scss", ['styles']);
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,7 +4,8 @@
 | 
			
		|||
    "build": "gulp build",
 | 
			
		||||
    "production": "gulp build --production",
 | 
			
		||||
    "dev": "gulp",
 | 
			
		||||
    "watch": "gulp"
 | 
			
		||||
    "watch": "gulp",
 | 
			
		||||
    "permissions": "chown -R $USER:$USER bootstrap/cache storage public/uploads"
 | 
			
		||||
  },
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "babelify": "^7.3.0",
 | 
			
		||||
| 
						 | 
				
			
			@ -13,6 +14,7 @@
 | 
			
		|||
    "gulp": "3.9.1",
 | 
			
		||||
    "gulp-autoprefixer": "3.1.1",
 | 
			
		||||
    "gulp-clean-css": "^3.0.4",
 | 
			
		||||
    "gulp-livereload": "^3.8.1",
 | 
			
		||||
    "gulp-minify-css": "1.2.4",
 | 
			
		||||
    "gulp-plumber": "1.1.0",
 | 
			
		||||
    "gulp-sass": "3.1.0",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -22,9 +22,12 @@ All development on BookStack is currently done on the master branch. When it's t
 | 
			
		|||
SASS is used to help the CSS development and the JavaScript is run through browserify/babel to allow for writing ES6 code. Both of these are done using gulp. To run the build task you can use the following commands:
 | 
			
		||||
 | 
			
		||||
``` bash
 | 
			
		||||
# Build and minify for production
 | 
			
		||||
# Build assets for development
 | 
			
		||||
npm run-script build
 | 
			
		||||
 | 
			
		||||
# Build and minify assets for production
 | 
			
		||||
npm run-script production
 | 
			
		||||
 | 
			
		||||
# Build for dev (With sourcemaps) and watch for changes
 | 
			
		||||
npm run-script dev
 | 
			
		||||
```
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -193,30 +193,6 @@ module.exports = function (ngApp, events) {
 | 
			
		|||
                }
 | 
			
		||||
 | 
			
		||||
                scope.tinymce.extraSetups.push(tinyMceSetup);
 | 
			
		||||
 | 
			
		||||
                // Custom tinyMCE plugins
 | 
			
		||||
                tinymce.PluginManager.add('customhr', function (editor) {
 | 
			
		||||
                    editor.addCommand('InsertHorizontalRule', function () {
 | 
			
		||||
                        let hrElem = document.createElement('hr');
 | 
			
		||||
                        let cNode = editor.selection.getNode();
 | 
			
		||||
                        let parentNode = cNode.parentNode;
 | 
			
		||||
                        parentNode.insertBefore(hrElem, cNode);
 | 
			
		||||
                    });
 | 
			
		||||
 | 
			
		||||
                    editor.addButton('hr', {
 | 
			
		||||
                        icon: 'hr',
 | 
			
		||||
                        tooltip: 'Horizontal line',
 | 
			
		||||
                        cmd: 'InsertHorizontalRule'
 | 
			
		||||
                    });
 | 
			
		||||
 | 
			
		||||
                    editor.addMenuItem('hr', {
 | 
			
		||||
                        icon: 'hr',
 | 
			
		||||
                        text: 'Horizontal line',
 | 
			
		||||
                        cmd: 'InsertHorizontalRule',
 | 
			
		||||
                        context: 'insert'
 | 
			
		||||
                    });
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
                tinymce.init(scope.tinymce);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -257,6 +233,21 @@ module.exports = function (ngApp, events) {
 | 
			
		|||
                extraKeys[`${metaKey}-S`] = function(cm) {scope.$emit('save-draft');};
 | 
			
		||||
                // Show link selector
 | 
			
		||||
                extraKeys[`Shift-${metaKey}-K`] = function(cm) {showLinkSelector()};
 | 
			
		||||
                // Insert Link
 | 
			
		||||
                extraKeys[`${metaKey}-K`] = function(cm) {insertLink()};
 | 
			
		||||
                // FormatShortcuts
 | 
			
		||||
                extraKeys[`${metaKey}-1`] = function(cm) {replaceLineStart('##');};
 | 
			
		||||
                extraKeys[`${metaKey}-2`] = function(cm) {replaceLineStart('###');};
 | 
			
		||||
                extraKeys[`${metaKey}-3`] = function(cm) {replaceLineStart('####');};
 | 
			
		||||
                extraKeys[`${metaKey}-4`] = function(cm) {replaceLineStart('#####');};
 | 
			
		||||
                extraKeys[`${metaKey}-5`] = function(cm) {replaceLineStart('');};
 | 
			
		||||
                extraKeys[`${metaKey}-d`] = function(cm) {replaceLineStart('');};
 | 
			
		||||
                extraKeys[`${metaKey}-6`] = function(cm) {replaceLineStart('>');};
 | 
			
		||||
                extraKeys[`${metaKey}-q`] = function(cm) {replaceLineStart('>');};
 | 
			
		||||
                extraKeys[`${metaKey}-7`] = function(cm) {wrapSelection('\n```\n', '\n```');};
 | 
			
		||||
                extraKeys[`${metaKey}-8`] = function(cm) {wrapSelection('`', '`');};
 | 
			
		||||
                extraKeys[`Shift-${metaKey}-E`] = function(cm) {wrapSelection('`', '`');};
 | 
			
		||||
                extraKeys[`${metaKey}-9`] = function(cm) {wrapSelection('<p class="callout info">', '</div>');};
 | 
			
		||||
                cm.setOption('extraKeys', extraKeys);
 | 
			
		||||
 | 
			
		||||
                // Update data on content change
 | 
			
		||||
| 
						 | 
				
			
			@ -309,6 +300,73 @@ module.exports = function (ngApp, events) {
 | 
			
		|||
                    cm.setSelections(cursor);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                // Helper to replace the start of the line
 | 
			
		||||
                function replaceLineStart(newStart) {
 | 
			
		||||
                    let cursor = cm.getCursor();
 | 
			
		||||
                    let lineContent = cm.getLine(cursor.line);
 | 
			
		||||
                    let lineLen = lineContent.length;
 | 
			
		||||
                    let lineStart = lineContent.split(' ')[0];
 | 
			
		||||
 | 
			
		||||
                    // Remove symbol if already set
 | 
			
		||||
                    if (lineStart === newStart) {
 | 
			
		||||
                        lineContent = lineContent.replace(`${newStart} `, '');
 | 
			
		||||
                        cm.replaceRange(lineContent, {line: cursor.line, ch: 0}, {line: cursor.line, ch: lineLen});
 | 
			
		||||
                        cm.setCursor({line: cursor.line, ch: cursor.ch - (newStart.length + 1)});
 | 
			
		||||
                        return;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    let alreadySymbol = /^[#>`]/.test(lineStart);
 | 
			
		||||
                    let posDif = 0;
 | 
			
		||||
                    if (alreadySymbol) {
 | 
			
		||||
                        posDif = newStart.length - lineStart.length;
 | 
			
		||||
                        lineContent = lineContent.replace(lineStart, newStart).trim();
 | 
			
		||||
                    } else if (newStart !== '') {
 | 
			
		||||
                        posDif = newStart.length + 1;
 | 
			
		||||
                        lineContent = newStart + ' ' + lineContent;
 | 
			
		||||
                    }
 | 
			
		||||
                    cm.replaceRange(lineContent, {line: cursor.line, ch: 0}, {line: cursor.line, ch: lineLen});
 | 
			
		||||
                    cm.setCursor({line: cursor.line, ch: cursor.ch + posDif});
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                function wrapLine(start, end) {
 | 
			
		||||
                    let cursor = cm.getCursor();
 | 
			
		||||
                    let lineContent = cm.getLine(cursor.line);
 | 
			
		||||
                    let lineLen = lineContent.length;
 | 
			
		||||
                    let newLineContent = lineContent;
 | 
			
		||||
 | 
			
		||||
                    if (lineContent.indexOf(start) === 0 && lineContent.slice(-end.length) === end) {
 | 
			
		||||
                        newLineContent = lineContent.slice(start.length, lineContent.length - end.length);
 | 
			
		||||
                    } else {
 | 
			
		||||
                        newLineContent = `${start}${lineContent}${end}`;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    cm.replaceRange(newLineContent, {line: cursor.line, ch: 0}, {line: cursor.line, ch: lineLen});
 | 
			
		||||
                    cm.setCursor({line: cursor.line, ch: cursor.ch + (newLineContent.length - lineLen)});
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                function wrapSelection(start, end) {
 | 
			
		||||
                    let selection = cm.getSelection();
 | 
			
		||||
                    if (selection === '') return wrapLine(start, end);
 | 
			
		||||
                    let newSelection = selection;
 | 
			
		||||
                    let frontDiff = 0;
 | 
			
		||||
                    let endDiff = 0;
 | 
			
		||||
 | 
			
		||||
                    if (selection.indexOf(start) === 0 && selection.slice(-end.length) === end) {
 | 
			
		||||
                        newSelection = selection.slice(start.length, selection.length - end.length);
 | 
			
		||||
                        endDiff = -(end.length + start.length);
 | 
			
		||||
                    } else {
 | 
			
		||||
                        newSelection = `${start}${selection}${end}`;
 | 
			
		||||
                        endDiff = start.length + end.length;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    let selections = cm.listSelections()[0];
 | 
			
		||||
                    cm.replaceSelection(newSelection);
 | 
			
		||||
                    let headFirst = selections.head.ch <= selections.anchor.ch;
 | 
			
		||||
                    selections.head.ch += headFirst ? frontDiff : endDiff;
 | 
			
		||||
                    selections.anchor.ch += headFirst ? endDiff : frontDiff;
 | 
			
		||||
                    cm.setSelections([selections]);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                // Handle image upload and add image into markdown content
 | 
			
		||||
                function uploadImage(file) {
 | 
			
		||||
                    if (file === null || file.type.indexOf('image') !== 0) return;
 | 
			
		||||
| 
						 | 
				
			
			@ -351,6 +409,16 @@ module.exports = function (ngApp, events) {
 | 
			
		|||
                    });
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                function insertLink() {
 | 
			
		||||
                    let cursorPos = cm.getCursor('from');
 | 
			
		||||
                    let selectedText = cm.getSelection() || '';
 | 
			
		||||
                    let newText = `[${selectedText}]()`;
 | 
			
		||||
                    cm.focus();
 | 
			
		||||
                    cm.replaceSelection(newText);
 | 
			
		||||
                    let cursorPosDiff = (selectedText === '') ? -3 : -1;
 | 
			
		||||
                    cm.setCursor(cursorPos.line, cursorPos.ch + newText.length+cursorPosDiff);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                // Show the image manager and handle image insertion
 | 
			
		||||
                function showImageManager() {
 | 
			
		||||
                    let cursorPos = cm.getCursor('from');
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -52,14 +52,36 @@ function editorPaste(e, editor) {
 | 
			
		|||
function registerEditorShortcuts(editor) {
 | 
			
		||||
    // Headers
 | 
			
		||||
    for (let i = 1; i < 5; i++) {
 | 
			
		||||
        editor.addShortcut('meta+' + i, '', ['FormatBlock', false, 'h' + i]);
 | 
			
		||||
        editor.shortcuts.add('meta+' + i, '', ['FormatBlock', false, 'h' + (i+1)]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Other block shortcuts
 | 
			
		||||
    editor.addShortcut('meta+q', '', ['FormatBlock', false, 'blockquote']);
 | 
			
		||||
    editor.addShortcut('meta+d', '', ['FormatBlock', false, 'p']);
 | 
			
		||||
    editor.addShortcut('meta+e', '', ['codeeditor', false, 'pre']);
 | 
			
		||||
    editor.addShortcut('meta+shift+E', '', ['FormatBlock', false, 'code']);
 | 
			
		||||
    editor.shortcuts.add('meta+5', '', ['FormatBlock', false, 'p']);
 | 
			
		||||
    editor.shortcuts.add('meta+d', '', ['FormatBlock', false, 'p']);
 | 
			
		||||
    editor.shortcuts.add('meta+6', '', ['FormatBlock', false, 'blockquote']);
 | 
			
		||||
    editor.shortcuts.add('meta+q', '', ['FormatBlock', false, 'blockquote']);
 | 
			
		||||
    editor.shortcuts.add('meta+7', '', ['codeeditor', false, 'pre']);
 | 
			
		||||
    editor.shortcuts.add('meta+e', '', ['codeeditor', false, 'pre']);
 | 
			
		||||
    editor.shortcuts.add('meta+8', '', ['FormatBlock', false, 'code']);
 | 
			
		||||
    editor.shortcuts.add('meta+shift+E', '', ['FormatBlock', false, 'code']);
 | 
			
		||||
    // Loop through callout styles
 | 
			
		||||
    editor.shortcuts.add('meta+9', '', function() {
 | 
			
		||||
        let selectedNode = editor.selection.getNode();
 | 
			
		||||
        let formats = ['info', 'success', 'warning', 'danger'];
 | 
			
		||||
 | 
			
		||||
        if (!selectedNode || selectedNode.className.indexOf('callout') === -1) {
 | 
			
		||||
            editor.formatter.apply('calloutinfo');
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        for (let i = 0; i < formats.length; i++) {
 | 
			
		||||
            if (selectedNode.className.indexOf(formats[i]) === -1) continue;
 | 
			
		||||
            let newFormat = (i === formats.length -1) ? formats[0] : formats[i+1];
 | 
			
		||||
            editor.formatter.apply('callout' + newFormat);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        editor.formatter.apply('p');
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -120,7 +142,7 @@ function codePlugin() {
 | 
			
		|||
        $codeMirrorContainer.replaceWith($pre);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    window.tinymce.PluginManager.add('codeeditor', (editor, url) => {
 | 
			
		||||
    window.tinymce.PluginManager.add('codeeditor', function(editor, url) {
 | 
			
		||||
 | 
			
		||||
        let $ = editor.$;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -173,7 +195,32 @@ function codePlugin() {
 | 
			
		|||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function hrPlugin() {
 | 
			
		||||
    window.tinymce.PluginManager.add('customhr', function (editor) {
 | 
			
		||||
        editor.addCommand('InsertHorizontalRule', function () {
 | 
			
		||||
            let hrElem = document.createElement('hr');
 | 
			
		||||
            let cNode = editor.selection.getNode();
 | 
			
		||||
            let parentNode = cNode.parentNode;
 | 
			
		||||
            parentNode.insertBefore(hrElem, cNode);
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        editor.addButton('hr', {
 | 
			
		||||
            icon: 'hr',
 | 
			
		||||
            tooltip: 'Horizontal line',
 | 
			
		||||
            cmd: 'InsertHorizontalRule'
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        editor.addMenuItem('hr', {
 | 
			
		||||
            icon: 'hr',
 | 
			
		||||
            text: 'Horizontal line',
 | 
			
		||||
            cmd: 'InsertHorizontalRule',
 | 
			
		||||
            context: 'insert'
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = function() {
 | 
			
		||||
    hrPlugin();
 | 
			
		||||
    codePlugin();
 | 
			
		||||
    let settings = {
 | 
			
		||||
        selector: '#html-editor',
 | 
			
		||||
| 
						 | 
				
			
			@ -207,10 +254,10 @@ module.exports = function() {
 | 
			
		|||
            {title: "Code Block", icon: "code", cmd: 'codeeditor', format: 'codeeditor'},
 | 
			
		||||
            {title: "Inline Code", icon: "code", inline: "code"},
 | 
			
		||||
            {title: "Callouts", items: [
 | 
			
		||||
                {title: "Success", block: 'p', exact: true, attributes : {'class' : 'callout success'}},
 | 
			
		||||
                {title: "Info", block: 'p', exact: true, attributes : {'class' : 'callout info'}},
 | 
			
		||||
                {title: "Warning", block: 'p', exact: true, attributes : {'class' : 'callout warning'}},
 | 
			
		||||
                {title: "Danger", block: 'p', exact: true, attributes : {'class' : 'callout danger'}}
 | 
			
		||||
                {title: "Info", format: 'calloutinfo'},
 | 
			
		||||
                {title: "Success", format: 'calloutsuccess'},
 | 
			
		||||
                {title: "Warning", format: 'calloutwarning'},
 | 
			
		||||
                {title: "Danger", format: 'calloutdanger'}
 | 
			
		||||
            ]},
 | 
			
		||||
        ],
 | 
			
		||||
        style_formats_merge: false,
 | 
			
		||||
| 
						 | 
				
			
			@ -219,6 +266,10 @@ module.exports = function() {
 | 
			
		|||
            alignleft: {selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img', classes: 'align-left'},
 | 
			
		||||
            aligncenter: {selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img', classes: 'align-center'},
 | 
			
		||||
            alignright: {selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img', classes: 'align-right'},
 | 
			
		||||
            calloutsuccess: {block: 'p', exact: true, attributes: {class: 'callout success'}},
 | 
			
		||||
            calloutinfo: {block: 'p', exact: true, attributes: {class: 'callout info'}},
 | 
			
		||||
            calloutwarning: {block: 'p', exact: true, attributes: {class: 'callout warning'}},
 | 
			
		||||
            calloutdanger: {block: 'p', exact: true, attributes: {class: 'callout danger'}}
 | 
			
		||||
        },
 | 
			
		||||
        file_browser_callback: function (field_name, url, type, win) {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -149,7 +149,7 @@ let methods = {
 | 
			
		|||
 | 
			
		||||
    updateSearch(e) {
 | 
			
		||||
        e.preventDefault();
 | 
			
		||||
        window.location = '/search?term=' + encodeURIComponent(this.termString);
 | 
			
		||||
        window.location = window.baseUrl('/search?term=' + encodeURIComponent(this.termString));
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    enableDate(optionName) {
 | 
			
		||||
| 
						 | 
				
			
			@ -192,4 +192,4 @@ function created() {
 | 
			
		|||
 | 
			
		||||
module.exports = {
 | 
			
		||||
    data, computed, methods, created
 | 
			
		||||
};
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -122,6 +122,7 @@ return [
 | 
			
		|||
        'pt_BR' => 'Português do Brasil',
 | 
			
		||||
        'sk' => 'Slovensky',
 | 
			
		||||
        'ja' => '日本語',
 | 
			
		||||
        'pl' => 'Polski',
 | 
			
		||||
    ]
 | 
			
		||||
    ///////////////////////////////////
 | 
			
		||||
];
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,7 +10,7 @@ return [
 | 
			
		|||
    | these language lines according to your application's requirements.
 | 
			
		||||
    |
 | 
			
		||||
    */
 | 
			
		||||
    'failed' => 'Ces informations ne correspondent a aucun compte.',
 | 
			
		||||
    'failed' => 'Ces informations ne correspondent à aucun compte.',
 | 
			
		||||
    'throttle' => "Trop d'essais, veuillez réessayer dans :seconds secondes.",
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
| 
						 | 
				
			
			@ -26,7 +26,7 @@ return [
 | 
			
		|||
    'password' => 'Mot de passe',
 | 
			
		||||
    'password_confirm' => 'Confirmez le mot de passe',
 | 
			
		||||
    'password_hint' => 'Doit faire plus de 5 caractères',
 | 
			
		||||
    'forgot_password' => 'Mot de passe oublié?',
 | 
			
		||||
    'forgot_password' => 'Mot de passe oublié ?',
 | 
			
		||||
    'remember_me' => 'Se souvenir de moi',
 | 
			
		||||
    'ldap_email_hint' => "Merci d'entrer une adresse e-mail pour ce compte",
 | 
			
		||||
    'create_account' => 'Créer un compte',
 | 
			
		||||
| 
						 | 
				
			
			@ -35,9 +35,9 @@ return [
 | 
			
		|||
    'social_registration_text' => "S'inscrire et se connecter avec un réseau social",
 | 
			
		||||
 | 
			
		||||
    'register_thanks' => 'Merci pour votre enregistrement',
 | 
			
		||||
    'register_confirm' => 'Vérifiez vos e-mails et cliquer sur le lien de confirmation pour rejoindre :appName.',
 | 
			
		||||
    'register_confirm' => 'Vérifiez vos e-mails et cliquez sur le lien de confirmation pour rejoindre :appName.',
 | 
			
		||||
    'registrations_disabled' => "L'inscription est désactivée pour le moment",
 | 
			
		||||
    'registration_email_domain_invalid' => 'Cette adresse e-mail ne peux pas adcéder à l\'application',
 | 
			
		||||
    'registration_email_domain_invalid' => 'Cette adresse e-mail ne peut pas accéder à l\'application',
 | 
			
		||||
    'register_success' => 'Merci pour votre inscription. Vous êtes maintenant inscrit(e) et connecté(e)',
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -51,7 +51,7 @@ return [
 | 
			
		|||
    'reset_password_success' => 'Votre mot de passe a été réinitialisé avec succès.',
 | 
			
		||||
 | 
			
		||||
    'email_reset_subject' => 'Réinitialisez votre mot de passe pour :appName',
 | 
			
		||||
    'email_reset_text' => 'Vous recevez cet e-mail parceque nous avons reçu une demande de réinitialisation pour votre compte',
 | 
			
		||||
    'email_reset_text' => 'Vous recevez cet e-mail parce que nous avons reçu une demande de réinitialisation pour votre compte',
 | 
			
		||||
    'email_reset_not_requested' => 'Si vous n\'avez pas effectué cette demande, vous pouvez ignorer cet e-mail.',
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -59,11 +59,11 @@ return [
 | 
			
		|||
     * Email Confirmation
 | 
			
		||||
     */
 | 
			
		||||
    'email_confirm_subject' => 'Confirmez votre adresse e-mail pour :appName',
 | 
			
		||||
    'email_confirm_greeting' => 'Merci d\'avoir rejoint :appName!',
 | 
			
		||||
    'email_confirm_text' => 'Merci de confirmer en cliquant sur le lien ci-dessous:',
 | 
			
		||||
    'email_confirm_greeting' => 'Merci d\'avoir rejoint :appName !',
 | 
			
		||||
    'email_confirm_text' => 'Merci de confirmer en cliquant sur le lien ci-dessous :',
 | 
			
		||||
    'email_confirm_action' => 'Confirmez votre adresse e-mail',
 | 
			
		||||
    'email_confirm_send_error' => 'La confirmation par e-mail est requise mais le système n\'a pas pu envoyer l\'e-mail. Contactez l\'administrateur système.',
 | 
			
		||||
    'email_confirm_success' => 'Votre adresse e-mail a été confirmée!',
 | 
			
		||||
    'email_confirm_success' => 'Votre adresse e-mail a été confirmée !',
 | 
			
		||||
    'email_confirm_resent' => 'L\'e-mail de confirmation a été ré-envoyé. Vérifiez votre boîte de récéption.',
 | 
			
		||||
 | 
			
		||||
    'email_not_confirmed' => 'Adresse e-mail non confirmée',
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,7 +9,7 @@ return [
 | 
			
		|||
    'back' => 'Retour',
 | 
			
		||||
    'save' => 'Enregistrer',
 | 
			
		||||
    'continue' => 'Continuer',
 | 
			
		||||
    'select' => 'Selectionner',
 | 
			
		||||
    'select' => 'Sélectionner',
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Form Labels
 | 
			
		||||
| 
						 | 
				
			
			@ -53,6 +53,6 @@ return [
 | 
			
		|||
    /**
 | 
			
		||||
     * Email Content
 | 
			
		||||
     */
 | 
			
		||||
    'email_action_help' => 'Si vous rencontrez des problèmes pour cliquer le bouton ":actionText", copiez et collez l\'adresse ci-dessous dans votre navigateur:',
 | 
			
		||||
    'email_action_help' => 'Si vous rencontrez des problèmes pour cliquer sur le bouton ":actionText", copiez et collez l\'adresse ci-dessous dans votre navigateur :',
 | 
			
		||||
    'email_rights' => 'Tous droits réservés',
 | 
			
		||||
];
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,7 +12,7 @@ return [
 | 
			
		|||
    'recently_update' => 'Mis à jour récemment',
 | 
			
		||||
    'recently_viewed' => 'Vus récemment',
 | 
			
		||||
    'recent_activity' => 'Activité récente',
 | 
			
		||||
    'create_now' => 'En créer un récemment',
 | 
			
		||||
    'create_now' => 'En créer un maintenant',
 | 
			
		||||
    'revisions' => 'Révisions',
 | 
			
		||||
    'meta_created' => 'Créé :timeLength',
 | 
			
		||||
    'meta_created_name' => 'Créé :timeLength par :user',
 | 
			
		||||
| 
						 | 
				
			
			@ -59,8 +59,8 @@ return [
 | 
			
		|||
    'books_create' => 'Créer un nouveau livre',
 | 
			
		||||
    'books_delete' => 'Supprimer un livre',
 | 
			
		||||
    'books_delete_named' => 'Supprimer le livre :bookName',
 | 
			
		||||
    'books_delete_explain' => 'Ceci va supprimer le livre nommé \':bookName\', Tous les chapitres et pages seront supprimés.',
 | 
			
		||||
    'books_delete_confirmation' => 'Êtes-vous sûr(e) de vouloir supprimer ce livre?',
 | 
			
		||||
    'books_delete_explain' => 'Ceci va supprimer le livre nommé \':bookName\', tous les chapitres et pages seront supprimés.',
 | 
			
		||||
    'books_delete_confirmation' => 'Êtes-vous sûr(e) de vouloir supprimer ce livre ?',
 | 
			
		||||
    'books_edit' => 'Modifier le livre',
 | 
			
		||||
    'books_edit_named' => 'Modifier le livre :bookName',
 | 
			
		||||
    'books_form_book_name' => 'Nom du livre',
 | 
			
		||||
| 
						 | 
				
			
			@ -90,18 +90,18 @@ return [
 | 
			
		|||
    'chapters_create' => 'Créer un nouveau chapitre',
 | 
			
		||||
    'chapters_delete' => 'Supprimer le chapitre',
 | 
			
		||||
    'chapters_delete_named' => 'Supprimer le chapitre :chapterName',
 | 
			
		||||
    'chapters_delete_explain' => 'Ceci va supprimer le chapitre \':chapterName\', Toutes les pages seront déplacée dans le livre parent.',
 | 
			
		||||
    'chapters_delete_confirm' => 'Etes-vous sûr(e) de vouloir supprimer ce chapitre?',
 | 
			
		||||
    'chapters_delete_explain' => 'Ceci va supprimer le chapitre \':chapterName\', toutes les pages seront déplacées dans le livre parent.',
 | 
			
		||||
    'chapters_delete_confirm' => 'Etes-vous sûr(e) de vouloir supprimer ce chapitre ?',
 | 
			
		||||
    'chapters_edit' => 'Modifier le chapitre',
 | 
			
		||||
    'chapters_edit_named' => 'Modifier le chapitre :chapterName',
 | 
			
		||||
    'chapters_save' => 'Enregistrer le chapitre',
 | 
			
		||||
    'chapters_move' => 'Déplace le chapitre',
 | 
			
		||||
    'chapters_move' => 'Déplacer le chapitre',
 | 
			
		||||
    'chapters_move_named' => 'Déplacer le chapitre :chapterName',
 | 
			
		||||
    'chapter_move_success' => 'Chapitre déplacé dans :bookName',
 | 
			
		||||
    'chapters_permissions' => 'Permissions du chapitre',
 | 
			
		||||
    'chapters_empty' => 'Il n\'y a pas de pages dans ce chapitre actuellement.',
 | 
			
		||||
    'chapters_empty' => 'Il n\'y a pas de page dans ce chapitre actuellement.',
 | 
			
		||||
    'chapters_permissions_active' => 'Permissions du chapitre activées',
 | 
			
		||||
    'chapters_permissions_success' => 'Permissions du chapitres mises à jour',
 | 
			
		||||
    'chapters_permissions_success' => 'Permissions du chapitre mises à jour',
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Pages
 | 
			
		||||
| 
						 | 
				
			
			@ -118,8 +118,8 @@ return [
 | 
			
		|||
    'pages_delete_draft' => 'Supprimer le brouillon',
 | 
			
		||||
    'pages_delete_success' => 'Page supprimée',
 | 
			
		||||
    'pages_delete_draft_success' => 'Brouillon supprimé',
 | 
			
		||||
    'pages_delete_confirm' => 'Êtes-vous sûr(e) de vouloir supprimer cette page?',
 | 
			
		||||
    'pages_delete_draft_confirm' => 'Êtes-vous sûr(e) de vouloir supprimer ce brouillon?',
 | 
			
		||||
    'pages_delete_confirm' => 'Êtes-vous sûr(e) de vouloir supprimer cette page ?',
 | 
			
		||||
    'pages_delete_draft_confirm' => 'Êtes-vous sûr(e) de vouloir supprimer ce brouillon ?',
 | 
			
		||||
    'pages_editing_named' => 'Modification de la page :pageName',
 | 
			
		||||
    'pages_edit_toggle_header' => 'Afficher/cacher l\'en-tête',
 | 
			
		||||
    'pages_edit_save_draft' => 'Enregistrer le brouillon',
 | 
			
		||||
| 
						 | 
				
			
			@ -131,7 +131,7 @@ return [
 | 
			
		|||
    'pages_edit_discard_draft' => 'Ecarter le brouillon',
 | 
			
		||||
    'pages_edit_set_changelog' => 'Remplir le journal des changements',
 | 
			
		||||
    'pages_edit_enter_changelog_desc' => 'Entrez une brève description des changements effectués',
 | 
			
		||||
    'pages_edit_enter_changelog' => 'Entrez dans le journal des changements',
 | 
			
		||||
    'pages_edit_enter_changelog' => 'Entrer dans le journal des changements',
 | 
			
		||||
    'pages_save' => 'Enregistrez la page',
 | 
			
		||||
    'pages_title' => 'Titre de la page',
 | 
			
		||||
    'pages_name' => 'Nom de la page',
 | 
			
		||||
| 
						 | 
				
			
			@ -139,7 +139,7 @@ return [
 | 
			
		|||
    'pages_md_preview' => 'Prévisualisation',
 | 
			
		||||
    'pages_md_insert_image' => 'Insérer une image',
 | 
			
		||||
    'pages_md_insert_link' => 'Insérer un lien',
 | 
			
		||||
    'pages_not_in_chapter' => 'La page n\'est pas dans un chanpitre',
 | 
			
		||||
    'pages_not_in_chapter' => 'La page n\'est pas dans un chapitre',
 | 
			
		||||
    'pages_move' => 'Déplacer la page',
 | 
			
		||||
    'pages_move_success' => 'Page déplacée à ":parentName"',
 | 
			
		||||
    'pages_permissions' => 'Permissions de la page',
 | 
			
		||||
| 
						 | 
				
			
			@ -160,15 +160,15 @@ return [
 | 
			
		|||
    'pages_initial_revision' => 'Publication initiale',
 | 
			
		||||
    'pages_initial_name' => 'Nouvelle page',
 | 
			
		||||
    'pages_editing_draft_notification' => 'Vous éditez actuellement un brouillon qui a été sauvé :timeDiff.',
 | 
			
		||||
    'pages_draft_edited_notification' => 'La page a été mise à jour depuis votre dernière visit. Vous devriez écarter ce brouillon.',
 | 
			
		||||
    'pages_draft_edited_notification' => 'La page a été mise à jour depuis votre dernière visite. Vous devriez écarter ce brouillon.',
 | 
			
		||||
    'pages_draft_edit_active' => [
 | 
			
		||||
        'start_a' => ':count utilisateurs ont commencé a éditer cette page',
 | 
			
		||||
        'start_a' => ':count utilisateurs ont commencé à éditer cette page',
 | 
			
		||||
        'start_b' => ':userName a commencé à éditer cette page',
 | 
			
		||||
        'time_a' => 'depuis la dernière sauvegarde',
 | 
			
		||||
        'time_b' => 'dans les :minCount dernières minutes',
 | 
			
		||||
        'message' => ':start :time. Attention a ne pas écraser les mises à jour de quelqu\'un d\'autre!',
 | 
			
		||||
        'message' => ':start :time. Attention à ne pas écraser les mises à jour de quelqu\'un d\'autre !',
 | 
			
		||||
    ],
 | 
			
		||||
    'pages_draft_discarded' => 'Brouuillon écarté, la page est dans sa version actuelle.',
 | 
			
		||||
    'pages_draft_discarded' => 'Brouillon écarté, la page est dans sa version actuelle.',
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Editor sidebar
 | 
			
		||||
| 
						 | 
				
			
			@ -210,7 +210,7 @@ return [
 | 
			
		|||
     */
 | 
			
		||||
    'profile_user_for_x' => 'Utilisateur depuis :time',
 | 
			
		||||
    'profile_created_content' => 'Contenu créé',
 | 
			
		||||
    'profile_not_created_pages' => ':userName n\'a pas créé de pages',
 | 
			
		||||
    'profile_not_created_chapters' => ':userName n\'a pas créé de chapitres',
 | 
			
		||||
    'profile_not_created_books' => ':userName n\'a pas créé de livres',
 | 
			
		||||
    'profile_not_created_pages' => ':userName n\'a pas créé de page',
 | 
			
		||||
    'profile_not_created_chapters' => ':userName n\'a pas créé de chapitre',
 | 
			
		||||
    'profile_not_created_books' => ':userName n\'a pas créé de livre',
 | 
			
		||||
];
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,21 +18,21 @@ return [
 | 
			
		|||
    'ldap_fail_anonymous' => 'L\'accès LDAP anonyme n\'a pas abouti',
 | 
			
		||||
    'ldap_fail_authed' => 'L\'accès LDAP n\'a pas abouti avec cet utilisateur et ce mot de passe',
 | 
			
		||||
    'ldap_extension_not_installed' => 'L\'extention LDAP PHP n\'est pas installée',
 | 
			
		||||
    'ldap_cannot_connect' => 'Cannot connect to ldap server, Initial connection failed',
 | 
			
		||||
    'social_no_action_defined' => 'No action defined',
 | 
			
		||||
    'social_account_in_use' => 'Cet compte :socialAccount est déjà utilisé. Essayez de vous connecter via :socialAccount.',
 | 
			
		||||
    'social_account_email_in_use' => 'L\'email :email Est déjà utilisé. Si vous avez déjà un compte :socialAccount, vous pouvez le joindre à votre profil existant.',
 | 
			
		||||
    'ldap_cannot_connect' => 'Impossible de se connecter au serveur LDAP, la connexion initiale a échoué',
 | 
			
		||||
    'social_no_action_defined' => 'Pas d\'action définie',
 | 
			
		||||
    'social_account_in_use' => 'Ce compte :socialAccount est déjà utilisé. Essayez de vous connecter via :socialAccount.',
 | 
			
		||||
    'social_account_email_in_use' => 'L\'email :email est déjà utilisé. Si vous avez déjà un compte :socialAccount, vous pouvez le joindre à votre profil existant.',
 | 
			
		||||
    'social_account_existing' => 'Ce compte :socialAccount est déjà rattaché à votre profil.',
 | 
			
		||||
    'social_account_already_used_existing' => 'Ce compte :socialAccount est déjà utilisé par un autre utilisateur.',
 | 
			
		||||
    'social_account_not_used' => 'Ce compte :socialAccount n\'est lié à aucun utilisateur. ',
 | 
			
		||||
    'social_account_register_instructions' => 'Si vous n\'avez pas encore de compte, vous pouvez le lier avec l\'option :socialAccount.',
 | 
			
		||||
    'social_driver_not_found' => 'Social driver not found',
 | 
			
		||||
    'social_driver_not_configured' => 'Your :socialAccount social settings are not configured correctly.',
 | 
			
		||||
    'social_driver_not_found' => 'Pilote de compte social absent',
 | 
			
		||||
    'social_driver_not_configured' => 'Vos préférences pour le compte :socialAccount sont incorrectes.',
 | 
			
		||||
 | 
			
		||||
    // System
 | 
			
		||||
    'path_not_writable' => 'File path :filePath could not be uploaded to. Ensure it is writable to the server.',
 | 
			
		||||
    'path_not_writable' => 'Impossible d\'écrire dans :filePath. Assurez-vous d\'avoir les droits d\'écriture sur le serveur',
 | 
			
		||||
    'cannot_get_image_from_url' => 'Impossible de récupérer l\'image depuis :url',
 | 
			
		||||
    'cannot_create_thumbs' => 'Le serveur ne peux pas créer de miniatures, vérifier que l\extensions GD PHP est installée.',
 | 
			
		||||
    'cannot_create_thumbs' => 'Le serveur ne peut pas créer de miniature, vérifier que l\'extension PHP GD est installée.',
 | 
			
		||||
    'server_upload_limit' => 'La taille du fichier est trop grande.',
 | 
			
		||||
    'image_upload_error' => 'Une erreur est survenue pendant l\'envoi de l\'image',
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -57,7 +57,7 @@ return [
 | 
			
		|||
 | 
			
		||||
    // Roles
 | 
			
		||||
    'role_cannot_be_edited' => 'Ce rôle ne peut pas être modifié',
 | 
			
		||||
    'role_system_cannot_be_deleted' => 'Ceci est un rôle du système et on ne peut pas le supprimer',
 | 
			
		||||
    'role_system_cannot_be_deleted' => 'Ceci est un rôle du système et ne peut pas être supprimé',
 | 
			
		||||
    'role_registration_default_cannot_delete' => 'Ce rôle ne peut pas être supprimé tant qu\'il est le rôle par défaut',
 | 
			
		||||
 | 
			
		||||
    // Error pages
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,7 +16,7 @@ return [
 | 
			
		|||
    'password' => 'Les mots de passe doivent faire au moins 6 caractères et correspondre à la confirmation.',
 | 
			
		||||
    'user' => "Nous n'avons pas trouvé d'utilisateur avec cette adresse.",
 | 
			
		||||
    'token' => 'Le jeton de réinitialisation est invalide.',
 | 
			
		||||
    'sent' => 'Nous vous avons envoyé un lien de réinitialisation de mot de passe!',
 | 
			
		||||
    'reset' => 'Votre mot de passe a été réinitialisé!',
 | 
			
		||||
    'sent' => 'Nous vous avons envoyé un lien de réinitialisation de mot de passe !',
 | 
			
		||||
    'reset' => 'Votre mot de passe a été réinitialisé !',
 | 
			
		||||
 | 
			
		||||
];
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,27 +19,27 @@ return [
 | 
			
		|||
    'app_settings' => 'Préférences de l\'application',
 | 
			
		||||
    'app_name' => 'Nom de l\'application',
 | 
			
		||||
    'app_name_desc' => 'Ce nom est affiché dans l\'en-tête et les e-mails.',
 | 
			
		||||
    'app_name_header' => 'Afficher le nom dans l\'en-tête?',
 | 
			
		||||
    'app_public_viewing' => 'Accepter le visionnage public des pages?',
 | 
			
		||||
    'app_secure_images' => 'Activer l\'ajout d\'image sécurisé?',
 | 
			
		||||
    'app_name_header' => 'Afficher le nom dans l\'en-tête ?',
 | 
			
		||||
    'app_public_viewing' => 'Accepter le visionnage public des pages ?',
 | 
			
		||||
    'app_secure_images' => 'Activer l\'ajout d\'image sécurisé ?',
 | 
			
		||||
    'app_secure_images_desc' => 'Pour des questions de performances, toutes les images sont publiques. Cette option ajoute une chaîne aléatoire difficile à deviner dans les URLs des images.',
 | 
			
		||||
    'app_editor' => 'Editeur des pages',
 | 
			
		||||
    'app_editor_desc' => 'Sélectionnez l\'éditeur qui sera utilisé pour modifier les pages.',
 | 
			
		||||
    'app_custom_html' => 'HTML personnalisé dans l\'en-tête',
 | 
			
		||||
    'app_custom_html_desc' => 'Le contenu inséré ici sera jouté en bas de la balise <head> de toutes les pages. Vous pouvez l\'utiliser pour ajouter du CSS personnalisé ou un tracker analytique.',
 | 
			
		||||
    'app_custom_html_desc' => 'Le contenu inséré ici sera ajouté en bas de la balise <head> de toutes les pages. Vous pouvez l\'utiliser pour ajouter du CSS personnalisé ou un tracker analytique.',
 | 
			
		||||
    'app_logo' => 'Logo de l\'Application',
 | 
			
		||||
    'app_logo_desc' => 'Cette image doit faire 43px de hauteur. <br>Les images plus larges seront réduites.',
 | 
			
		||||
    'app_primary_color' => 'Couleur principale de l\'application',
 | 
			
		||||
    'app_primary_color_desc' => 'This should be a hex value. <br>Leave empty to reset to the default color.',
 | 
			
		||||
    'app_primary_color_desc' => 'Cela devrait être une valeur hexadécimale. <br>Laisser vide pour rétablir la couleur par défaut.',
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Registration settings
 | 
			
		||||
     */
 | 
			
		||||
 | 
			
		||||
    'reg_settings' => 'Préférence pour l\'inscription',
 | 
			
		||||
    'reg_allow' => 'Accepter l\'inscription?',
 | 
			
		||||
    'reg_allow' => 'Accepter l\'inscription ?',
 | 
			
		||||
    'reg_default_role' => 'Rôle par défaut lors de l\'inscription',
 | 
			
		||||
    'reg_confirm_email' => 'Obliger la confirmation par e-mail?',
 | 
			
		||||
    'reg_confirm_email' => 'Obliger la confirmation par e-mail ?',
 | 
			
		||||
    'reg_confirm_email_desc' => 'Si la restriction de domaine est activée, la confirmation sera automatiquement obligatoire et cette valeur sera ignorée.',
 | 
			
		||||
    'reg_confirm_restrict_domain' => 'Restreindre l\'inscription à un domaine',
 | 
			
		||||
    'reg_confirm_restrict_domain_desc' => 'Entrez une liste de domaines acceptés lors de l\'inscription, séparés par une virgule. Les utilisateur recevront un e-mail de confirmation à cette adresse. <br> Les utilisateurs pourront changer leur adresse après inscription s\'ils le souhaitent.',
 | 
			
		||||
| 
						 | 
				
			
			@ -57,17 +57,17 @@ return [
 | 
			
		|||
    'role_delete_confirm' => 'Ceci va supprimer le rôle \':roleName\'.',
 | 
			
		||||
    'role_delete_users_assigned' => 'Ce rôle a :userCount utilisateurs assignés. Vous pouvez choisir un rôle de remplacement pour ces utilisateurs.',
 | 
			
		||||
    'role_delete_no_migration' => "Ne pas assigner de nouveau rôle",
 | 
			
		||||
    'role_delete_sure' => 'Êtes vous sûr(e) de vouloir supprimer ce rôle?',
 | 
			
		||||
    'role_delete_sure' => 'Êtes vous sûr(e) de vouloir supprimer ce rôle ?',
 | 
			
		||||
    'role_delete_success' => 'Le rôle a été supprimé avec succès',
 | 
			
		||||
    'role_edit' => 'Modifier le rôle',
 | 
			
		||||
    'role_details' => 'Détails du rôle',
 | 
			
		||||
    'role_name' => 'Nom du Rôle',
 | 
			
		||||
    'role_name' => 'Nom du rôle',
 | 
			
		||||
    'role_desc' => 'Courte description du rôle',
 | 
			
		||||
    'role_system' => 'Permissions système',
 | 
			
		||||
    'role_manage_users' => 'Gérer les utilisateurs',
 | 
			
		||||
    'role_manage_roles' => 'Gérer les rôles et permissions',
 | 
			
		||||
    'role_manage_entity_permissions' => 'Gérer les permissions sur les livres, chapitres et pages',
 | 
			
		||||
    'role_manage_own_entity_permissions' => 'Gérer les permissions de ses propres livres chapitres et pages',
 | 
			
		||||
    'role_manage_own_entity_permissions' => 'Gérer les permissions de ses propres livres, chapitres, et pages',
 | 
			
		||||
    'role_manage_settings' => 'Gérer les préférences de l\'application',
 | 
			
		||||
    'role_asset' => 'Asset Permissions',
 | 
			
		||||
    'role_asset_desc' => 'These permissions control default access to the assets within the system. Permissions on Books, Chapters and Pages will override these permissions.',
 | 
			
		||||
| 
						 | 
				
			
			@ -94,7 +94,7 @@ return [
 | 
			
		|||
    'users_delete' => 'Supprimer un utilisateur',
 | 
			
		||||
    'users_delete_named' => 'Supprimer l\'utilisateur :userName',
 | 
			
		||||
    'users_delete_warning' => 'Ceci va supprimer \':userName\' du système.',
 | 
			
		||||
    'users_delete_confirm' => 'Êtes-vous sûr(e) de vouloir supprimer cet utilisateur?',
 | 
			
		||||
    'users_delete_confirm' => 'Êtes-vous sûr(e) de vouloir supprimer cet utilisateur ?',
 | 
			
		||||
    'users_delete_success' => 'Utilisateurs supprimés avec succès',
 | 
			
		||||
    'users_edit' => 'Modifier l\'utilisateur',
 | 
			
		||||
    'users_edit_profile' => 'Modifier le profil',
 | 
			
		||||
| 
						 | 
				
			
			@ -106,7 +106,7 @@ return [
 | 
			
		|||
    'users_social_accounts_info' => 'Vous pouvez connecter des réseaux sociaux à votre compte pour vous connecter plus rapidement. Déconnecter un compte n\'enlèvera pas les accès autorisés précédemment sur votre compte de réseau social.',
 | 
			
		||||
    'users_social_connect' => 'Connecter le compte',
 | 
			
		||||
    'users_social_disconnect' => 'Déconnecter le compte',
 | 
			
		||||
    'users_social_connected' => 'Votre compte :socialAccount a élté ajouté avec succès.',
 | 
			
		||||
    'users_social_connected' => 'Votre compte :socialAccount a été ajouté avec succès.',
 | 
			
		||||
    'users_social_disconnected' => 'Votre compte :socialAccount a été déconnecté avec succès',
 | 
			
		||||
 | 
			
		||||
];
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,40 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
return [
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Activity text strings.
 | 
			
		||||
     * Is used for all the text within activity logs & notifications.
 | 
			
		||||
     */
 | 
			
		||||
 | 
			
		||||
    // Pages
 | 
			
		||||
    'page_create'                 => 'utworzono stronę',
 | 
			
		||||
    'page_create_notification'    => 'Strona utworzona pomyślnie',
 | 
			
		||||
    'page_update'                 => 'zaktualizowano stronę',
 | 
			
		||||
    'page_update_notification'    => 'Strona zaktualizowana pomyślnie',
 | 
			
		||||
    'page_delete'                 => 'usunięto stronę',
 | 
			
		||||
    'page_delete_notification'    => 'Strona usunięta pomyślnie',
 | 
			
		||||
    'page_restore'                => 'przywrócono stronę',
 | 
			
		||||
    'page_restore_notification'   => 'Stronga przywrócona pomyślnie',
 | 
			
		||||
    'page_move'                   => 'przeniesiono stronę',
 | 
			
		||||
 | 
			
		||||
    // Chapters
 | 
			
		||||
    'chapter_create'              => 'utworzono rozdział',
 | 
			
		||||
    'chapter_create_notification' => 'Rozdział utworzony pomyślnie',
 | 
			
		||||
    'chapter_update'              => 'zaktualizowano rozdział',
 | 
			
		||||
    'chapter_update_notification' => 'Rozdział zaktualizowany pomyślnie',
 | 
			
		||||
    'chapter_delete'              => 'usunięto rozdział',
 | 
			
		||||
    'chapter_delete_notification' => 'Rozdział usunięty pomyślnie',
 | 
			
		||||
    'chapter_move'                => 'przeniesiono rozdział',
 | 
			
		||||
 | 
			
		||||
    // Books
 | 
			
		||||
    'book_create'                 => 'utworzono księgę',
 | 
			
		||||
    'book_create_notification'    => 'Księga utworzona pomyślnie',
 | 
			
		||||
    'book_update'                 => 'zaktualizowano księgę',
 | 
			
		||||
    'book_update_notification'    => 'Księga zaktualizowana pomyślnie',
 | 
			
		||||
    'book_delete'                 => 'usunięto księgę',
 | 
			
		||||
    'book_delete_notification'    => 'Księga usunięta pomyślnie',
 | 
			
		||||
    'book_sort'                   => 'posortowano księgę',
 | 
			
		||||
    'book_sort_notification'      => 'Księga posortowana pomyślnie',
 | 
			
		||||
 | 
			
		||||
];
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,76 @@
 | 
			
		|||
<?php
 | 
			
		||||
return [
 | 
			
		||||
    /*
 | 
			
		||||
    |--------------------------------------------------------------------------
 | 
			
		||||
    | Authentication Language Lines
 | 
			
		||||
    |--------------------------------------------------------------------------
 | 
			
		||||
    |
 | 
			
		||||
    | The following language lines are used during authentication for various
 | 
			
		||||
    | messages that we need to display to the user. You are free to modify
 | 
			
		||||
    | these language lines according to your application's requirements.
 | 
			
		||||
    |
 | 
			
		||||
    */
 | 
			
		||||
    'failed' => 'These credentials do not match our records.',
 | 
			
		||||
    'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Login & Register
 | 
			
		||||
     */
 | 
			
		||||
    'sign_up' => 'Zarejestruj się',
 | 
			
		||||
    'log_in' => 'Zaloguj się',
 | 
			
		||||
    'log_in_with' => 'Zaloguj się za pomocą :socialDriver',
 | 
			
		||||
    'sign_up_with' => 'Zarejestruj się za pomocą :socialDriver',
 | 
			
		||||
    'logout' => 'Wyloguj',
 | 
			
		||||
 | 
			
		||||
    'name' => 'Imię',
 | 
			
		||||
    'username' => 'Nazwa użytkownika',
 | 
			
		||||
    'email' => 'Email',
 | 
			
		||||
    'password' => 'Hasło',
 | 
			
		||||
    'password_confirm' => 'Potwierdzenie hasła',
 | 
			
		||||
    'password_hint' => 'Musi mieć więcej niż 5 znaków',
 | 
			
		||||
    'forgot_password' => 'Przypomnij hasło',
 | 
			
		||||
    'remember_me' => 'Zapamiętaj mnie',
 | 
			
		||||
    'ldap_email_hint' => 'Wprowadź adres email dla tego konta.',
 | 
			
		||||
    'create_account' => 'Utwórz konto',
 | 
			
		||||
    'social_login' => 'Logowanie za pomocą konta społecznościowego',
 | 
			
		||||
    'social_registration' => 'Rejestracja za pomocą konta społecznościowego',
 | 
			
		||||
    'social_registration_text' => 'Zarejestruj się za pomocą innej usługi.',
 | 
			
		||||
 | 
			
		||||
    'register_thanks' => 'Dziękujemy za rejestrację!',
 | 
			
		||||
    'register_confirm' => 'Sprawdź podany adres e-mail i kliknij w link, by uzyskać dostęp do :appName.',
 | 
			
		||||
    'registrations_disabled' => 'Rejestracja jest obecnie zablokowana.',
 | 
			
		||||
    'registration_email_domain_invalid' => 'Adresy e-mail z tej domeny nie mają dostępu do tej aplikacji',
 | 
			
		||||
    'register_success' => 'Dziękujemy za rejestrację! Zalogowano Cię automatycznie.',
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Password Reset
 | 
			
		||||
     */
 | 
			
		||||
    'reset_password' => 'Resetowanie hasła',
 | 
			
		||||
    'reset_password_send_instructions' => 'Wprowadź adres e-mail powiązany z Twoim kontem, by otrzymać link do resetowania hasła.',
 | 
			
		||||
    'reset_password_send_button' => 'Wyślij link do resetowania hasła',
 | 
			
		||||
    'reset_password_sent_success' => 'Wysłano link do resetowania hasła na adres :email.',
 | 
			
		||||
    'reset_password_success' => 'Hasło zostało zresetowane pomyślnie.',
 | 
			
		||||
 | 
			
		||||
    'email_reset_subject' => 'Resetowanie hasła do :appName',
 | 
			
		||||
    'email_reset_text' => 'Otrzymujesz tę wiadomość ponieważ ktoś zażądał zresetowania hasła do Twojego konta.',
 | 
			
		||||
    'email_reset_not_requested' => 'Jeśli to nie Ty złożyłeś żądanie zresetowania hasła, zignoruj tę wiadomość.',
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Email Confirmation
 | 
			
		||||
     */
 | 
			
		||||
    'email_confirm_subject' => 'Potwierdź swój adres email w :appName',
 | 
			
		||||
    'email_confirm_greeting' => 'Dziękujemy za dołączenie do :appName!',
 | 
			
		||||
    'email_confirm_text' => 'Prosimy byś potwierdził swoje hasło klikając przycisk poniżej:',
 | 
			
		||||
    'email_confirm_action' => 'Potwierdź email',
 | 
			
		||||
    'email_confirm_send_error' => 'Wymagane jest potwierdzenie hasła, lecz wiadomość nie mogła zostać wysłana. Skontaktuj się z administratorem w celu upewnienia się, że skrzynka została skonfigurowana prawidłowo.',
 | 
			
		||||
    'email_confirm_success' => 'Adres email został potwierdzony!',
 | 
			
		||||
    'email_confirm_resent' => 'Wiadomość potwierdzająca została wysłana, sprawdź swoją skrzynkę.',
 | 
			
		||||
 | 
			
		||||
    'email_not_confirmed' => 'Adres email niepotwierdzony',
 | 
			
		||||
    'email_not_confirmed_text' => 'Twój adres email nie został jeszcze potwierdzony.',
 | 
			
		||||
    'email_not_confirmed_click_link' => 'Aby potwierdzić swoje konto kliknij w link wysłany w wiadomości po rejestracji.',
 | 
			
		||||
    'email_not_confirmed_resend' => 'Jeśli wiadomość do Ciebie nie dotarła możesz wysłać ją ponownie wypełniając formularz poniżej.',
 | 
			
		||||
    'email_not_confirmed_resend_button' => 'Wyślij ponownie wiadomość z potwierdzeniem',
 | 
			
		||||
];
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,59 @@
 | 
			
		|||
<?php
 | 
			
		||||
return [
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Buttons
 | 
			
		||||
     */
 | 
			
		||||
    'cancel' => 'Anuluj',
 | 
			
		||||
    'confirm' => 'Zatwierdź',
 | 
			
		||||
    'back' => 'Wstecz',
 | 
			
		||||
    'save' => 'Zapisz',
 | 
			
		||||
    'continue' => 'Kontynuuj',
 | 
			
		||||
    'select' => 'Wybierz',
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Form Labels
 | 
			
		||||
     */
 | 
			
		||||
    'name' => 'Nazwa',
 | 
			
		||||
    'description' => 'Opis',
 | 
			
		||||
    'role' => 'Rola',
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Actions
 | 
			
		||||
     */
 | 
			
		||||
    'actions' => 'Akcje',
 | 
			
		||||
    'view' => 'Widok',
 | 
			
		||||
    'create' => 'Utwórz',
 | 
			
		||||
    'update' => 'Zaktualizuj',
 | 
			
		||||
    'edit' => 'Edytuj',
 | 
			
		||||
    'sort' => 'Sortuj',
 | 
			
		||||
    'move' => 'Przenieś',
 | 
			
		||||
    'delete' => 'Usuń',
 | 
			
		||||
    'search' => 'Szukaj',
 | 
			
		||||
    'search_clear' => 'Wyczyść wyszukiwanie',
 | 
			
		||||
    'reset' => 'Resetuj',
 | 
			
		||||
    'remove' => 'Usuń',
 | 
			
		||||
    'add' => 'Dodaj',
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Misc
 | 
			
		||||
     */
 | 
			
		||||
    'deleted_user' => 'Użytkownik usunięty',
 | 
			
		||||
    'no_activity' => 'Brak aktywności do pokazania',
 | 
			
		||||
    'no_items' => 'Brak elementów do wyświetlenia',
 | 
			
		||||
    'back_to_top' => 'Powrót na górę',
 | 
			
		||||
    'toggle_details' => 'Włącz/wyłącz szczegóły',
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Header
 | 
			
		||||
     */
 | 
			
		||||
    'view_profile' => 'Zobacz profil',
 | 
			
		||||
    'edit_profile' => 'Edytuj profil',
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Email Content
 | 
			
		||||
     */
 | 
			
		||||
    'email_action_help' => 'Jeśli masz problem z kliknięciem przycisku ":actionText", skopiuj i wklej poniższy adres URL w nowej karcie swojej przeglądarki:',
 | 
			
		||||
    'email_rights' => 'Wszelkie prawa zastrzeżone',
 | 
			
		||||
];
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,32 @@
 | 
			
		|||
<?php
 | 
			
		||||
return [
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Image Manager
 | 
			
		||||
     */
 | 
			
		||||
    'image_select' => 'Wybór obrazka',
 | 
			
		||||
    'image_all' => 'Wszystkie',
 | 
			
		||||
    'image_all_title' => 'Zobacz wszystkie obrazki',
 | 
			
		||||
    'image_book_title' => 'Zobacz obrazki zapisane w tej księdze',
 | 
			
		||||
    'image_page_title' => 'Zobacz obrazki zapisane na tej stronie',
 | 
			
		||||
    'image_search_hint' => 'Szukaj po nazwie obrazka',
 | 
			
		||||
    'image_uploaded' => 'Udostępniono :uploadedDate',
 | 
			
		||||
    'image_load_more' => 'Wczytaj więcej',
 | 
			
		||||
    'image_image_name' => 'Nazwa obrazka',
 | 
			
		||||
    'image_delete_confirm' => 'Ten obrazek jest używany na stronach poniżej, kliknij ponownie Usuń by potwierdzić usunięcie obrazka.',
 | 
			
		||||
    'image_select_image' => 'Wybierz obrazek',
 | 
			
		||||
    'image_dropzone' => 'Upuść obrazki tutaj lub kliknij by wybrać obrazki do udostępnienia',
 | 
			
		||||
    'images_deleted' => 'Usunięte obrazki',
 | 
			
		||||
    'image_preview' => 'Podgląd obrazka',
 | 
			
		||||
    'image_upload_success' => 'Obrazek wysłany pomyślnie',
 | 
			
		||||
    'image_update_success' => 'Szczegóły obrazka zaktualizowane pomyślnie',
 | 
			
		||||
    'image_delete_success' => 'Obrazek usunięty pomyślnie',
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Code editor
 | 
			
		||||
     */
 | 
			
		||||
    'code_editor' => 'Edytuj kod',
 | 
			
		||||
    'code_language' => 'Język kodu',
 | 
			
		||||
    'code_content' => 'Zawartość kodu',
 | 
			
		||||
    'code_save' => 'Zapisz kod',
 | 
			
		||||
];
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,237 @@
 | 
			
		|||
<?php
 | 
			
		||||
return [
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Shared
 | 
			
		||||
     */
 | 
			
		||||
    'recently_created' => 'Ostatnio utworzone',
 | 
			
		||||
    'recently_created_pages' => 'Ostatnio utworzone strony',
 | 
			
		||||
    'recently_updated_pages' => 'Ostatnio zaktualizowane strony',
 | 
			
		||||
    'recently_created_chapters' => 'Ostatnio utworzone rozdziały',
 | 
			
		||||
    'recently_created_books' => 'Ostatnio utworzone księgi',
 | 
			
		||||
    'recently_update' => 'Ostatnio zaktualizowane',
 | 
			
		||||
    'recently_viewed' => 'Ostatnio wyświetlane',
 | 
			
		||||
    'recent_activity' => 'Ostatnia aktywność',
 | 
			
		||||
    'create_now' => 'Utwórz teraz',
 | 
			
		||||
    'revisions' => 'Rewizje',
 | 
			
		||||
    'meta_revision' => 'Rewizja #:revisionCount',
 | 
			
		||||
    'meta_created' => 'Utworzono :timeLength',
 | 
			
		||||
    'meta_created_name' => 'Utworzono :timeLength przez :user',
 | 
			
		||||
    'meta_updated' => 'Zaktualizowano :timeLength',
 | 
			
		||||
    'meta_updated_name' => 'Zaktualizowano :timeLength przez :user',
 | 
			
		||||
    'x_pages' => ':count stron',
 | 
			
		||||
    'entity_select' => 'Wybór encji',
 | 
			
		||||
    'images' => 'Obrazki',
 | 
			
		||||
    'my_recent_drafts' => 'Moje ostatnie szkice',
 | 
			
		||||
    'my_recently_viewed' => 'Moje ostatnio wyświetlane',
 | 
			
		||||
    'no_pages_viewed' => 'Nie wyświetlano żadnych stron',
 | 
			
		||||
    'no_pages_recently_created' => 'Nie utworzono ostatnio żadnych stron',
 | 
			
		||||
    'no_pages_recently_updated' => 'Nie zaktualizowano ostatnio żadnych stron',
 | 
			
		||||
    'export' => 'Eksportuj',
 | 
			
		||||
    'export_html' => 'Plik HTML',
 | 
			
		||||
    'export_pdf' => 'Plik PDF',
 | 
			
		||||
    'export_text' => 'Plik tekstowy',
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Permissions and restrictions
 | 
			
		||||
     */
 | 
			
		||||
    'permissions' => 'Uprawnienia',
 | 
			
		||||
    'permissions_intro' => 'Jeśli odblokowane, te uprawnienia będą miały priorytet względem pozostałych ustawionych uprawnień ról.',
 | 
			
		||||
    'permissions_enable' => 'Odblokuj własne uprawnienia',
 | 
			
		||||
    'permissions_save' => 'Zapisz uprawnienia',
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Search
 | 
			
		||||
     */
 | 
			
		||||
    'search_results' => 'Wyniki wyszukiwania',
 | 
			
		||||
    'search_total_results_found' => ':count znalezionych wyników|:count ogółem znalezionych wyników',
 | 
			
		||||
    'search_clear' => 'Wyczyść wyszukiwanie',
 | 
			
		||||
    'search_no_pages' => 'Brak stron spełniających zadane kryterium',
 | 
			
		||||
    'search_for_term' => 'Szukaj :term',
 | 
			
		||||
    'search_more' => 'Więcej wyników',
 | 
			
		||||
    'search_filters' => 'Filtry wyszukiwania',
 | 
			
		||||
    'search_content_type' => 'Rodziaj treści',
 | 
			
		||||
    'search_exact_matches' => 'Dokładne frazy',
 | 
			
		||||
    'search_tags' => 'Tagi wyszukiwania',
 | 
			
		||||
    'search_viewed_by_me' => 'Wyświetlone przeze mnie',
 | 
			
		||||
    'search_not_viewed_by_me' => 'Niewyświetlone przeze mnie',
 | 
			
		||||
    'search_permissions_set' => 'Zbiór uprawnień',
 | 
			
		||||
    'search_created_by_me' => 'Utworzone przeze mnie',
 | 
			
		||||
    'search_updated_by_me' => 'Zaktualizowane przeze mnie',
 | 
			
		||||
    'search_updated_before' => 'Zaktualizowane przed',
 | 
			
		||||
    'search_updated_after' => 'Zaktualizowane po',
 | 
			
		||||
    'search_created_before' => 'Utworzone przed',
 | 
			
		||||
    'search_created_after' => 'Utworzone po',
 | 
			
		||||
    'search_set_date' => 'Ustaw datę',
 | 
			
		||||
    'search_update' => 'Zaktualizuj wyszukiwanie',
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Books
 | 
			
		||||
     */
 | 
			
		||||
    'book' => 'Księga',
 | 
			
		||||
    'books' => 'Księgi',
 | 
			
		||||
    'books_empty' => 'Brak utworzonych ksiąg',
 | 
			
		||||
    'books_popular' => 'Popularne księgi',
 | 
			
		||||
    'books_recent' => 'Ostatnie księgi',
 | 
			
		||||
    'books_popular_empty' => 'Najbardziej popularne księgi zostaną wyświetlone w tym miejscu.',
 | 
			
		||||
    'books_create' => 'Utwórz księgę',
 | 
			
		||||
    'books_delete' => 'Usuń księgę',
 | 
			
		||||
    'books_delete_named' => 'Usuń księgę :bookName',
 | 
			
		||||
    'books_delete_explain' => 'To spowoduje usunięcie księgi \':bookName\', Wszystkie strony i rozdziały zostaną usunięte.',
 | 
			
		||||
    'books_delete_confirmation' => 'Czy na pewno chcesz usunąc tę księgę?',
 | 
			
		||||
    'books_edit' => 'Edytuj księgę',
 | 
			
		||||
    'books_edit_named' => 'Edytuj księgę :bookName',
 | 
			
		||||
    'books_form_book_name' => 'Nazwa księgi',
 | 
			
		||||
    'books_save' => 'Zapisz księgę',
 | 
			
		||||
    'books_permissions' => 'Uprawnienia księgi',
 | 
			
		||||
    'books_permissions_updated' => 'Zaktualizowano uprawnienia księgi',
 | 
			
		||||
    'books_empty_contents' => 'Brak stron lub rozdziałów w tej księdze.',
 | 
			
		||||
    'books_empty_create_page' => 'Utwórz nową stronę',
 | 
			
		||||
    'books_empty_or' => 'lub',
 | 
			
		||||
    'books_empty_sort_current_book' => 'posortuj bieżącą księgę',
 | 
			
		||||
    'books_empty_add_chapter' => 'Dodaj rozdział',
 | 
			
		||||
    'books_permissions_active' => 'Uprawnienia księgi aktywne',
 | 
			
		||||
    'books_search_this' => 'Wyszukaj w tej księdze',
 | 
			
		||||
    'books_navigation' => 'Nawigacja po księdze',
 | 
			
		||||
    'books_sort' => 'Sortuj zawartość Księgi',
 | 
			
		||||
    'books_sort_named' => 'Sortuj księgę :bookName',
 | 
			
		||||
    'books_sort_show_other' => 'Pokaż inne księgi',
 | 
			
		||||
    'books_sort_save' => 'Zapisz nowy porządek',
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Chapters
 | 
			
		||||
     */
 | 
			
		||||
    'chapter' => 'Rozdział',
 | 
			
		||||
    'chapters' => 'Rozdziały',
 | 
			
		||||
    'chapters_popular' => 'Popularne rozdziały',
 | 
			
		||||
    'chapters_new' => 'Nowy rozdział',
 | 
			
		||||
    'chapters_create' => 'Utwórz nowy rozdział',
 | 
			
		||||
    'chapters_delete' => 'Usuń rozdział',
 | 
			
		||||
    'chapters_delete_named' => 'Usuń rozdział :chapterName',
 | 
			
		||||
    'chapters_delete_explain' => 'To spowoduje usunięcie rozdziału \':chapterName\', Wszystkie strony zostaną usunięte
 | 
			
		||||
        i dodane bezpośrednio do księgi macierzystej.',
 | 
			
		||||
    'chapters_delete_confirm' => 'Czy na pewno chcesz usunąć ten rozdział?',
 | 
			
		||||
    'chapters_edit' => 'Edytuj rozdział',
 | 
			
		||||
    'chapters_edit_named' => 'Edytuj rozdział :chapterName',
 | 
			
		||||
    'chapters_save' => 'Zapisz rozdział',
 | 
			
		||||
    'chapters_move' => 'Przenieś rozdział',
 | 
			
		||||
    'chapters_move_named' => 'Przenieś rozdział :chapterName',
 | 
			
		||||
    'chapter_move_success' => 'Rozdział przeniesiony do :bookName',
 | 
			
		||||
    'chapters_permissions' => 'Uprawienia rozdziału',
 | 
			
		||||
    'chapters_empty' => 'Brak stron w tym rozdziale.',
 | 
			
		||||
    'chapters_permissions_active' => 'Uprawnienia rozdziału aktywne',
 | 
			
		||||
    'chapters_permissions_success' => 'Zaktualizowano uprawnienia rozdziału',
 | 
			
		||||
    'chapters_search_this' => 'Przeszukaj ten rozdział',
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Pages
 | 
			
		||||
     */
 | 
			
		||||
    'page' => 'Strona',
 | 
			
		||||
    'pages' => 'Strony',
 | 
			
		||||
    'pages_popular' => 'Popularne strony',
 | 
			
		||||
    'pages_new' => 'Nowa strona',
 | 
			
		||||
    'pages_attachments' => 'Załączniki',
 | 
			
		||||
    'pages_navigation' => 'Nawigacja po stronie',
 | 
			
		||||
    'pages_delete' => 'Usuń stronę',
 | 
			
		||||
    'pages_delete_named' => 'Usuń stronę :pageName',
 | 
			
		||||
    'pages_delete_draft_named' => 'Usuń szkic strony :pageName',
 | 
			
		||||
    'pages_delete_draft' => 'Usuń szkic strony',
 | 
			
		||||
    'pages_delete_success' => 'Strona usunięta pomyślnie',
 | 
			
		||||
    'pages_delete_draft_success' => 'Szkic strony usunięty pomyślnie',
 | 
			
		||||
    'pages_delete_confirm' => 'Czy na pewno chcesz usunąć tę stron?',
 | 
			
		||||
    'pages_delete_draft_confirm' => 'Czy na pewno chcesz usunąć szkic strony?',
 | 
			
		||||
    'pages_editing_named' => 'Edytowanie strony :pageName',
 | 
			
		||||
    'pages_edit_toggle_header' => 'Włącz/wyłącz nagłówek',
 | 
			
		||||
    'pages_edit_save_draft' => 'Zapisz szkic',
 | 
			
		||||
    'pages_edit_draft' => 'Edytuj szkic strony',
 | 
			
		||||
    'pages_editing_draft' => 'Edytowanie szkicu strony',
 | 
			
		||||
    'pages_editing_page' => 'Edytowanie strony',
 | 
			
		||||
    'pages_edit_draft_save_at' => 'Szkic zapisany ',
 | 
			
		||||
    'pages_edit_delete_draft' => 'Usuń szkic',
 | 
			
		||||
    'pages_edit_discard_draft' => 'Porzuć szkic',
 | 
			
		||||
    'pages_edit_set_changelog' => 'Ustaw log zmian',
 | 
			
		||||
    'pages_edit_enter_changelog_desc' => 'Opisz zmiany, które zostały wprowadzone',
 | 
			
		||||
    'pages_edit_enter_changelog' => 'Wyświetl log zmian',
 | 
			
		||||
    'pages_save' => 'Zapisz stronę',
 | 
			
		||||
    'pages_title' => 'Tytuł strony',
 | 
			
		||||
    'pages_name' => 'Nazwa strony',
 | 
			
		||||
    'pages_md_editor' => 'Edytor',
 | 
			
		||||
    'pages_md_preview' => 'Podgląd',
 | 
			
		||||
    'pages_md_insert_image' => 'Wstaw obrazek',
 | 
			
		||||
    'pages_md_insert_link' => 'Wstaw łącze do encji',
 | 
			
		||||
    'pages_not_in_chapter' => 'Strona nie została umieszczona w rozdziale',
 | 
			
		||||
    'pages_move' => 'Przenieś stronę',
 | 
			
		||||
    'pages_move_success' => 'Strona przeniesiona do ":parentName"',
 | 
			
		||||
    'pages_permissions' => 'Uprawnienia strony',
 | 
			
		||||
    'pages_permissions_success' => 'Zaktualizowano uprawnienia strony',
 | 
			
		||||
    'pages_revisions' => 'Rewizje strony',
 | 
			
		||||
    'pages_revisions_named' => 'Rewizje strony :pageName',
 | 
			
		||||
    'pages_revision_named' => 'Rewizja stroony :pageName',
 | 
			
		||||
    'pages_revisions_created_by' => 'Utworzona przez',
 | 
			
		||||
    'pages_revisions_date' => 'Data rewizji',
 | 
			
		||||
    'pages_revisions_number' => '#',
 | 
			
		||||
    'pages_revisions_changelog' => 'Log zmian',
 | 
			
		||||
    'pages_revisions_changes' => 'Zmiany',
 | 
			
		||||
    'pages_revisions_current' => 'Obecna wersja',
 | 
			
		||||
    'pages_revisions_preview' => 'Podgląd',
 | 
			
		||||
    'pages_revisions_restore' => 'Przywróć',
 | 
			
		||||
    'pages_revisions_none' => 'Ta strona nie posiada żadnych rewizji',
 | 
			
		||||
    'pages_copy_link' => 'Kopiuj link',
 | 
			
		||||
    'pages_permissions_active' => 'Uprawnienia strony aktywne',
 | 
			
		||||
    'pages_initial_revision' => 'Wydanie pierwotne',
 | 
			
		||||
    'pages_initial_name' => 'Nowa strona',
 | 
			
		||||
    'pages_editing_draft_notification' => 'Edytujesz obecnie szkic, który był ostatnio zapisany :timeDiff.',
 | 
			
		||||
    'pages_draft_edited_notification' => 'Od tego czasu ta strona była zmieniana. Zalecane jest odrzucenie tego szkicu.',
 | 
			
		||||
    'pages_draft_edit_active' => [
 | 
			
		||||
        'start_a' => ':count użytkowników rozpoczęło edytowanie tej strony',
 | 
			
		||||
        'start_b' => ':userName edytuje stronę',
 | 
			
		||||
        'time_a' => ' od czasu ostatniej edycji',
 | 
			
		||||
        'time_b' => 'w ciągu ostatnich :minCount minut',
 | 
			
		||||
        'message' => ':start :time. Pamiętaj by nie nadpisywać czyichś zmian!',
 | 
			
		||||
    ],
 | 
			
		||||
    'pages_draft_discarded' => 'Szkic odrzucony, edytor został uzupełniony najnowszą wersją strony',
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Editor sidebar
 | 
			
		||||
     */
 | 
			
		||||
    'page_tags' => 'Tagi strony',
 | 
			
		||||
    'tag' => 'Tag',
 | 
			
		||||
    'tags' =>  '',
 | 
			
		||||
    'tag_value' => 'Wartość tagu (opcjonalnie)',
 | 
			
		||||
    'tags_explain' => "Dodaj tagi by skategoryzować zawartość. \n W celu dokładniejszej organizacji zawartości możesz dodać wartości do tagów.",
 | 
			
		||||
    'tags_add' => 'Dodaj kolejny tag',
 | 
			
		||||
    'attachments' => 'Załączniki',
 | 
			
		||||
    'attachments_explain' => 'Udostępnij kilka plików lub załącz link. Będą one widoczne na marginesie strony.',
 | 
			
		||||
    'attachments_explain_instant_save' => 'Zmiany są zapisywane natychmiastowo.',
 | 
			
		||||
    'attachments_items' => 'Załączniki',
 | 
			
		||||
    'attachments_upload' => 'Dodaj plik',
 | 
			
		||||
    'attachments_link' => 'Dodaj link',
 | 
			
		||||
    'attachments_set_link' => 'Ustaw link',
 | 
			
		||||
    'attachments_delete_confirm' => 'Kliknij ponownie Usuń by potwierdzić usunięcie załącznika.',
 | 
			
		||||
    'attachments_dropzone' => 'Upuść pliki lub kliknij tutaj by udostępnić pliki',
 | 
			
		||||
    'attachments_no_files' => 'Nie udostępniono plików',
 | 
			
		||||
    'attachments_explain_link' => 'Możesz załączyć link jeśli nie chcesz udostępniać pliku. Może być to link do innej strony lub link do pliku w chmurze.',
 | 
			
		||||
    'attachments_link_name' => 'Nazwa linku',
 | 
			
		||||
    'attachment_link' => 'Link do załącznika',
 | 
			
		||||
    'attachments_link_url' => 'Link do pliku',
 | 
			
		||||
    'attachments_link_url_hint' => 'Strona lub plik',
 | 
			
		||||
    'attach' => 'Załącz',
 | 
			
		||||
    'attachments_edit_file' => 'Edytuj plik',
 | 
			
		||||
    'attachments_edit_file_name' => 'Nazwa pliku',
 | 
			
		||||
    'attachments_edit_drop_upload' => 'Upuść pliki lub kliknij tutaj by udostępnić pliki i nadpisać istniejące',
 | 
			
		||||
    'attachments_order_updated' => 'Kolejność załączników zaktualizowana',
 | 
			
		||||
    'attachments_updated_success' => 'Szczegóły załączników zaktualizowane',
 | 
			
		||||
    'attachments_deleted' => 'Załączniki usunięte',
 | 
			
		||||
    'attachments_file_uploaded' => 'Plik załączony pomyślnie',
 | 
			
		||||
    'attachments_file_updated' => 'Plik zaktualizowany pomyślnie',
 | 
			
		||||
    'attachments_link_attached' => 'Link pomyślnie dodany do strony',
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Profile View
 | 
			
		||||
     */
 | 
			
		||||
    'profile_user_for_x' => 'Użytkownik od :time',
 | 
			
		||||
    'profile_created_content' => 'Utworzona zawartość',
 | 
			
		||||
    'profile_not_created_pages' => ':userName nie utworzył żadnych stron',
 | 
			
		||||
    'profile_not_created_chapters' => ':userName nie utworzył żadnych rozdziałów',
 | 
			
		||||
    'profile_not_created_books' => ':userName nie utworzył żadnych ksiąg',
 | 
			
		||||
];
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,70 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
return [
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Error text strings.
 | 
			
		||||
     */
 | 
			
		||||
 | 
			
		||||
    // Permissions
 | 
			
		||||
    'permission' => 'Nie masz uprawnień do wyświetlenia tej strony.',
 | 
			
		||||
    'permissionJson' => 'Nie masz uprawnień do wykonania tej akcji.',
 | 
			
		||||
 | 
			
		||||
    // Auth
 | 
			
		||||
    'error_user_exists_different_creds' => 'Użytkownik o adresie :email już istnieje.',
 | 
			
		||||
    'email_already_confirmed' => 'Email został potwierdzony, spróbuj się zalogować.',
 | 
			
		||||
    'email_confirmation_invalid' => 'Ten token jest nieprawidłowy lub został już wykorzystany. Spróbuj zarejestrować się ponownie.',
 | 
			
		||||
    'email_confirmation_expired' => 'Ten token potwierdzający wygasł. Wysłaliśmy Ci kolejny.',
 | 
			
		||||
    'ldap_fail_anonymous' => 'Dostęp LDAP przy użyciu anonimowego powiązania nie powiódł się',
 | 
			
		||||
    'ldap_fail_authed' => 'Dostęp LDAP przy użyciu tego dn i hasła nie powiódł się',
 | 
			
		||||
    'ldap_extension_not_installed' => 'Rozszerzenie LDAP PHP nie zostało zainstalowane',
 | 
			
		||||
    'ldap_cannot_connect' => 'Nie można połączyć z serwerem LDAP, połączenie nie zostało ustanowione',
 | 
			
		||||
    'social_no_action_defined' => 'Brak zdefiniowanej akcji',
 | 
			
		||||
    'social_account_in_use' => 'To konto :socialAccount jest już w użyciu, spróbuj zalogować się za pomocą opcji :socialAccount.',
 | 
			
		||||
    'social_account_email_in_use' => 'Email :email jest już w użyciu. Jeśli masz już konto, połącz konto :socialAccount z poziomu ustawień profilu.',
 | 
			
		||||
    'social_account_existing' => 'Konto :socialAccount jest już połączone z Twoim profilem',
 | 
			
		||||
    'social_account_already_used_existing' => 'Konto :socialAccount jest już używane przez innego użytkownika.',
 | 
			
		||||
    'social_account_not_used' => 'To konto :socialAccount nie jest połączone z żadnym użytkownikiem. Połącz je ze swoim kontem w ustawieniach profilu. ',
 | 
			
		||||
    'social_account_register_instructions' => 'Jeśli nie masz jeszcze konta, możesz zarejestrować je używając opcji :socialAccount.',
 | 
			
		||||
    'social_driver_not_found' => 'Funkcja społecznościowa nie została odnaleziona',
 | 
			
		||||
    'social_driver_not_configured' => 'Ustawienia konta :socialAccount nie są poprawne.',
 | 
			
		||||
 | 
			
		||||
    // System
 | 
			
		||||
    'path_not_writable' => 'Zapis do ścieżki :filePath jest niemożliwy. Upewnij się że aplikacja ma prawa do zapisu w niej.',
 | 
			
		||||
    'cannot_get_image_from_url' => 'Nie można pobrać obrazka z :url',
 | 
			
		||||
    'cannot_create_thumbs' => 'Serwer nie może utworzyć miniaturek. Upewnij się że rozszerzenie GD PHP zostało zainstalowane.',
 | 
			
		||||
    'server_upload_limit' => 'Serwer nie pozwala na przyjęcie pliku o tym rozmiarze. Spróbuj udostępnić coś o mniejszym rozmiarze.',
 | 
			
		||||
    'image_upload_error' => 'Wystąpił błąd podczas udostępniania obrazka',
 | 
			
		||||
 | 
			
		||||
    // Attachments
 | 
			
		||||
    'attachment_page_mismatch' => 'Niezgodność stron podczas aktualizacji załącznika',
 | 
			
		||||
 | 
			
		||||
    // Pages
 | 
			
		||||
    'page_draft_autosave_fail' => 'Zapis szkicu nie powiódł się. Upewnij się że posiadasz połączenie z internetem.',
 | 
			
		||||
 | 
			
		||||
    // Entities
 | 
			
		||||
    'entity_not_found' => 'Encja nie została odnaleziona',
 | 
			
		||||
    'book_not_found' => 'Księga nie została odnaleziona',
 | 
			
		||||
    'page_not_found' => 'Strona nie została odnaleziona',
 | 
			
		||||
    'chapter_not_found' => 'Rozdział nie został odnaleziony',
 | 
			
		||||
    'selected_book_not_found' => 'Wybrana księga nie została odnaleziona',
 | 
			
		||||
    'selected_book_chapter_not_found' => 'Wybrana księga lub rozdział nie zostały odnalezione',
 | 
			
		||||
    'guests_cannot_save_drafts' => 'Goście nie mogą zapisywać szkiców',
 | 
			
		||||
 | 
			
		||||
    // Users
 | 
			
		||||
    'users_cannot_delete_only_admin' => 'Nie możesz usunąć jedynego administratora',
 | 
			
		||||
    'users_cannot_delete_guest' => 'Nie możesz usunąć użytkownika-gościa',
 | 
			
		||||
 | 
			
		||||
    // Roles
 | 
			
		||||
    'role_cannot_be_edited' => 'Ta rola nie może być edytowana',
 | 
			
		||||
    'role_system_cannot_be_deleted' => 'Ta rola jest rolą systemową i nie może zostać usunięta',
 | 
			
		||||
    'role_registration_default_cannot_delete' => 'Ta rola nie może zostać usunięta jeśli jest ustawiona jako domyślna rola użytkownika',
 | 
			
		||||
 | 
			
		||||
    // Error pages
 | 
			
		||||
    '404_page_not_found' => 'Strona nie została odnaleziona',
 | 
			
		||||
    'sorry_page_not_found' => 'Przepraszamy, ale strona której szukasz nie została odnaleziona.',
 | 
			
		||||
    'return_home' => 'Powrót do strony głównej',
 | 
			
		||||
    'error_occurred' => 'Wystąpił błąd',
 | 
			
		||||
    'app_down' => ':appName jest aktualnie wyłączona',
 | 
			
		||||
    'back_soon' => 'Niedługo zostanie uruchomiona ponownie.',
 | 
			
		||||
];
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,19 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
return [
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
    |--------------------------------------------------------------------------
 | 
			
		||||
    | Pagination Language Lines
 | 
			
		||||
    |--------------------------------------------------------------------------
 | 
			
		||||
    |
 | 
			
		||||
    | The following language lines are used by the paginator library to build
 | 
			
		||||
    | the simple pagination links. You are free to change them to anything
 | 
			
		||||
    | you want to customize your views to better match your application.
 | 
			
		||||
    |
 | 
			
		||||
    */
 | 
			
		||||
 | 
			
		||||
    'previous' => '« Poprzednia',
 | 
			
		||||
    'next'     => 'Następna »',
 | 
			
		||||
 | 
			
		||||
];
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,22 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
return [
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
    |--------------------------------------------------------------------------
 | 
			
		||||
    | Password Reminder Language Lines
 | 
			
		||||
    |--------------------------------------------------------------------------
 | 
			
		||||
    |
 | 
			
		||||
    | The following language lines are the default lines which match reasons
 | 
			
		||||
    | that are given by the password broker for a password update attempt
 | 
			
		||||
    | has failed, such as for an invalid token or invalid new password.
 | 
			
		||||
    |
 | 
			
		||||
    */
 | 
			
		||||
 | 
			
		||||
    'password' => 'Hasło musi zawierać co najmniej 6 znaków i być zgodne z powtórzeniem.',
 | 
			
		||||
    'user' => "Nie znaleziono użytkownika o takim adresie email.",
 | 
			
		||||
    'token' => 'Ten token resetowania hasła jest nieprawidłowy.',
 | 
			
		||||
    'sent' => 'Wysłaliśmy Ci link do resetowania hasła!',
 | 
			
		||||
    'reset' => 'Twoje hasło zostało zresetowane!',
 | 
			
		||||
 | 
			
		||||
];
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,111 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
return [
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Settings text strings
 | 
			
		||||
     * Contains all text strings used in the general settings sections of BookStack
 | 
			
		||||
     * including users and roles.
 | 
			
		||||
     */
 | 
			
		||||
 | 
			
		||||
    'settings' => 'Ustawienia',
 | 
			
		||||
    'settings_save' => 'Zapisz ustawienia',
 | 
			
		||||
    'settings_save_success' => 'Ustawienia zapisane',
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * App settings
 | 
			
		||||
     */
 | 
			
		||||
 | 
			
		||||
    'app_settings' => 'Ustawienia aplikacji',
 | 
			
		||||
    'app_name' => 'Nazwa aplikacji',
 | 
			
		||||
    'app_name_desc' => 'Ta nazwa jest wyświetlana w nagłówku i emailach.',
 | 
			
		||||
    'app_name_header' => 'Pokazać nazwę aplikacji w nagłówku?',
 | 
			
		||||
    'app_public_viewing' => 'Zezwolić na publiczne przeglądanie?',
 | 
			
		||||
    'app_secure_images' => 'Odblokować wyższe bezpieczeństwo obrazków?',
 | 
			
		||||
    'app_secure_images_desc' => 'Ze względów wydajnościowych wszystkie obrazki są publiczne. Ta opcja dodaje dodatkowy, trudny do zgadnienia losowy ciąg na początku nazwy obrazka. Upewnij się że indeksowanie ścieżek jest zablokowane, by uniknąć problemów z dostępem do obrazka.',
 | 
			
		||||
    'app_editor' => 'Edytor strony',
 | 
			
		||||
    'app_editor_desc' => 'Wybierz edytor używany przez użytkowników do edycji zawartości.',
 | 
			
		||||
    'app_custom_html' => 'Własna zawartość tagu <head>',
 | 
			
		||||
    'app_custom_html_desc' => 'Zawartość dodana tutaj zostanie dołączona do sekcji <head> każdej strony. Przydatne przy nadpisywaniu styli lub dodawaniu analityki.',
 | 
			
		||||
    'app_logo' => 'Logo aplikacji',
 | 
			
		||||
    'app_logo_desc' => 'Ten obrazek powinien mieć nie więcej niż 43px w pionie. <br>Większe obrazki będą skalowane w dół.',
 | 
			
		||||
    'app_primary_color' => 'Podstawowy kolor aplikacji',
 | 
			
		||||
    'app_primary_color_desc' => 'To powinna być wartość HEX. <br>Zostaw to pole puste, by powrócić do podstawowego koloru.',
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Registration settings
 | 
			
		||||
     */
 | 
			
		||||
 | 
			
		||||
    'reg_settings' => 'Ustawienia rejestracji',
 | 
			
		||||
    'reg_allow' => 'Zezwolić na rejestrację?',
 | 
			
		||||
    'reg_default_role' => 'Domyślna rola użytkownika po rejestracji',
 | 
			
		||||
    'reg_confirm_email' => 'Wymagać potwierdzenia adresu email?',
 | 
			
		||||
    'reg_confirm_email_desc' => 'Jeśli restrykcje domenowe zostały uzupełnione potwierdzenie adresu stanie się konieczne, a poniższa wartośc zostanie zignorowana.',
 | 
			
		||||
    'reg_confirm_restrict_domain' => 'Restrykcje domenowe dot. adresu email',
 | 
			
		||||
    'reg_confirm_restrict_domain_desc' => 'Wprowadź listę domen adresów email rozdzieloną przecinkami, którym chciałbyś zezwolić na rejestrację. Wymusi to konieczność potwierdzenia adresu email przez użytkownika przed uzyskaniem dostępu do aplikacji. <br> Pamiętaj, że użytkownicy będą mogli zmienić adres email po rejestracji.',
 | 
			
		||||
    'reg_confirm_restrict_domain_placeholder' => 'Brak restrykcji',
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Role settings
 | 
			
		||||
     */
 | 
			
		||||
 | 
			
		||||
    'roles' => 'Role',
 | 
			
		||||
    'role_user_roles' => 'Role użytkownika',
 | 
			
		||||
    'role_create' => 'Utwórz nową rolę',
 | 
			
		||||
    'role_create_success' => 'Rola utworzona pomyślnie',
 | 
			
		||||
    'role_delete' => 'Usuń rolę',
 | 
			
		||||
    'role_delete_confirm' => 'To spowoduje usunięcie roli \':roleName\'.',
 | 
			
		||||
    'role_delete_users_assigned' => 'Tę rolę ma przypisanych :userCount użytkowników. Jeśli chcesz zmigrować użytkowników z tej roli, wybierz nową poniżej.',
 | 
			
		||||
    'role_delete_no_migration' => "Nie migruj użytkowników",
 | 
			
		||||
    'role_delete_sure' => 'Czy na pewno chcesz usunąć tę rolę?',
 | 
			
		||||
    'role_delete_success' => 'Rola usunięta pomyślnie',
 | 
			
		||||
    'role_edit' => 'Edytuj rolę',
 | 
			
		||||
    'role_details' => 'Szczegóły roli',
 | 
			
		||||
    'role_name' => 'Nazwa roli',
 | 
			
		||||
    'role_desc' => 'Krótki opis roli',
 | 
			
		||||
    'role_system' => 'Uprawnienia systemowe',
 | 
			
		||||
    'role_manage_users' => 'Zarządzanie użytkownikami',
 | 
			
		||||
    'role_manage_roles' => 'Zarządzanie rolami i uprawnieniami ról',
 | 
			
		||||
    'role_manage_entity_permissions' => 'Zarządzanie uprawnieniami ksiąg, rozdziałów i stron',
 | 
			
		||||
    'role_manage_own_entity_permissions' => 'Zarządzanie uprawnieniami własnych ksiąg, rozdziałów i stron',
 | 
			
		||||
    'role_manage_settings' => 'Zarządzanie ustawieniami aplikacji',
 | 
			
		||||
    'role_asset' => 'Zarządzanie zasobami',
 | 
			
		||||
    'role_asset_desc' => 'Te ustawienia kontrolują zarządzanie zasobami systemu. Uprawnienia ksiąg, rozdziałów i stron nadpisują te ustawienia.',
 | 
			
		||||
    'role_all' => 'Wszyscy',
 | 
			
		||||
    'role_own' => 'Własne',
 | 
			
		||||
    'role_controlled_by_asset' => 'Kontrolowane przez zasób, do którego zostały udostępnione',
 | 
			
		||||
    'role_save' => 'Zapisz rolę',
 | 
			
		||||
    'role_update_success' => 'Rola zapisana pomyślnie',
 | 
			
		||||
    'role_users' => 'Użytkownicy w tej roli',
 | 
			
		||||
    'role_users_none' => 'Brak użytkowników zapisanych do tej roli',
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Users
 | 
			
		||||
     */
 | 
			
		||||
 | 
			
		||||
    'users' => 'Użytkownicy',
 | 
			
		||||
    'user_profile' => 'Profil użytkownika',
 | 
			
		||||
    'users_add_new' => 'Dodaj użytkownika',
 | 
			
		||||
    'users_search' => 'Wyszukaj użytkownika',
 | 
			
		||||
    'users_role' => 'Role użytkownika',
 | 
			
		||||
    'users_external_auth_id' => 'Zewnętrzne ID autentykacji',
 | 
			
		||||
    'users_password_warning' => 'Wypełnij poniżej tylko jeśli chcesz zmienić swoje hasło:',
 | 
			
		||||
    'users_system_public' => 'Ten użytkownik reprezentuje każdego gościa odwiedzającego tę aplikację. Nie można się na niego zalogować, lecz jest przyznawany automatycznie.',
 | 
			
		||||
    'users_delete' => 'Usuń użytkownika',
 | 
			
		||||
    'users_delete_named' => 'Usuń :userName',
 | 
			
		||||
    'users_delete_warning' => 'To usunie użytkownika \':userName\' z systemu.',
 | 
			
		||||
    'users_delete_confirm' => 'Czy na pewno chcesz usunąć tego użytkownika?',
 | 
			
		||||
    'users_delete_success' => 'Użytkownik usunięty pomyślnie',
 | 
			
		||||
    'users_edit' => 'Edytuj użytkownika',
 | 
			
		||||
    'users_edit_profile' => 'Edytuj profil',
 | 
			
		||||
    'users_edit_success' => 'Użytkownik zaktualizowany pomyśłnie',
 | 
			
		||||
    'users_avatar' => 'Avatar użytkownika',
 | 
			
		||||
    'users_avatar_desc' => 'Ten obrazek powinien mieć 25px x 256px.',
 | 
			
		||||
    'users_preferred_language' => 'Preferowany język',
 | 
			
		||||
    'users_social_accounts' => 'Konta społecznościowe',
 | 
			
		||||
    'users_social_accounts_info' => 'Tutaj możesz połączyć kilka kont społecznościowych w celu łatwiejszego i szybszego logowania.',
 | 
			
		||||
    'users_social_connect' => 'Podłącz konto',
 | 
			
		||||
    'users_social_disconnect' => 'Odłącz konto',
 | 
			
		||||
    'users_social_connected' => ':socialAccount zostało dodane do Twojego profilu.',
 | 
			
		||||
    'users_social_disconnected' => ':socialAccount zostało odłączone od Twojego profilu.',
 | 
			
		||||
];
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,108 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
return [
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
    |--------------------------------------------------------------------------
 | 
			
		||||
    | Validation Language Lines
 | 
			
		||||
    |--------------------------------------------------------------------------
 | 
			
		||||
    |
 | 
			
		||||
    | The following language lines contain the default error messages used by
 | 
			
		||||
    | the validator class. Some of these rules have multiple versions such
 | 
			
		||||
    | as the size rules. Feel free to tweak each of these messages here.
 | 
			
		||||
    |
 | 
			
		||||
    */
 | 
			
		||||
 | 
			
		||||
    'accepted'             => ':attribute musi zostać zaakceptowany.',
 | 
			
		||||
    'active_url'           => ':attribute nie jest prawidłowym adresem URL.',
 | 
			
		||||
    'after'                => ':attribute musi być datą następującą po :date.',
 | 
			
		||||
    'alpha'                => ':attribute może zawierać wyłącznie litery.',
 | 
			
		||||
    'alpha_dash'           => ':attribute może zawierać wyłącznie litery, cyfry i myślniki.',
 | 
			
		||||
    'alpha_num'            => ':attribute może zawierać wyłącznie litery i cyfry.',
 | 
			
		||||
    'array'                => ':attribute musi być tablicą.',
 | 
			
		||||
    'before'               => ':attribute musi być datą poprzedzającą :date.',
 | 
			
		||||
    'between'              => [
 | 
			
		||||
        'numeric' => ':attribute musi zawierać się w przedziale od :min do :max.',
 | 
			
		||||
        'file'    => 'Waga :attribute musi zawierać się pomiędzy :min i :max kilobajtów.',
 | 
			
		||||
        'string'  => 'Długość :attribute musi zawierać się pomiędzy :min i :max.',
 | 
			
		||||
        'array'   => ':attribute musi mieć od :min do :max elementów.',
 | 
			
		||||
    ],
 | 
			
		||||
    'boolean'              => ':attribute musi być wartością prawda/fałsz.',
 | 
			
		||||
    'confirmed'            => ':attribute i potwierdzenie muszą być zgodne.',
 | 
			
		||||
    'date'                 => ':attribute nie jest prawidłową datą.',
 | 
			
		||||
    'date_format'          => ':attribute musi mieć format :format.',
 | 
			
		||||
    'different'            => ':attribute i :other muszą się różnić.',
 | 
			
		||||
    'digits'               => ':attribute musi mieć :digits cyfr.',
 | 
			
		||||
    'digits_between'       => ':attribute musi mieć od :min do :max cyfr.',
 | 
			
		||||
    'email'                => ':attribute musi być prawidłowym adresem e-mail.',
 | 
			
		||||
    'filled'               => ':attribute jest wymagany.',
 | 
			
		||||
    'exists'               => 'Wybrana wartość :attribute jest nieprawidłowa.',
 | 
			
		||||
    'image'                => ':attribute musi być obrazkiem.',
 | 
			
		||||
    'in'                   => 'Wybrana wartość :attribute jest nieprawidłowa.',
 | 
			
		||||
    'integer'              => ':attribute musi być liczbą całkowitą.',
 | 
			
		||||
    'ip'                   => ':attribute musi być prawidłowym adresem IP.',
 | 
			
		||||
    'max'                  => [
 | 
			
		||||
        'numeric' => 'Wartość :attribute nie może być większa niż :max.',
 | 
			
		||||
        'file'    => 'Wielkość :attribute nie może być większa niż :max kilobajtów.',
 | 
			
		||||
        'string'  => 'Długość :attribute nie może być większa niż :max znaków.',
 | 
			
		||||
        'array'   => 'Rozmiar :attribute nie może być większy niż :max elementów.',
 | 
			
		||||
    ],
 | 
			
		||||
    'mimes'                => ':attribute musi być plikiem typu: :values.',
 | 
			
		||||
    'min'                  => [
 | 
			
		||||
        'numeric' => 'Wartość :attribute nie może być mniejsza od :min.',
 | 
			
		||||
        'file'    => 'Wielkość :attribute nie może być mniejsza niż :min kilobajtów.',
 | 
			
		||||
        'string'  => 'Długość :attribute nie może być mniejsza niż :min znaków.',
 | 
			
		||||
        'array'   => 'Rozmiar :attribute musi posiadać co najmniej :min elementy.',
 | 
			
		||||
    ],
 | 
			
		||||
    'not_in'               => 'Wartość :attribute jest nieprawidłowa.',
 | 
			
		||||
    'numeric'              => ':attribute musi być liczbą.',
 | 
			
		||||
    'regex'                => 'Format :attribute jest nieprawidłowy.',
 | 
			
		||||
    'required'             => 'Pole :attribute jest wymagane.',
 | 
			
		||||
    'required_if'          => 'Pole :attribute jest wymagane jeśli :other ma wartość :value.',
 | 
			
		||||
    'required_with'        => 'Pole :attribute jest wymagane jeśli :values zostało wprowadzone.',
 | 
			
		||||
    'required_with_all'    => 'Pole :attribute jest wymagane jeśli :values są obecne.',
 | 
			
		||||
    'required_without'     => 'Pole :attribute jest wymagane jeśli :values nie zostało wprowadzone.',
 | 
			
		||||
    'required_without_all' => 'Pole :attribute jest wymagane jeśli żadna z wartości :values nie została podana.',
 | 
			
		||||
    'same'                 => 'Pole :attribute i :other muszą być takie same.',
 | 
			
		||||
    'size'                 => [
 | 
			
		||||
        'numeric' => ':attribute musi mieć długość :size.',
 | 
			
		||||
        'file'    => ':attribute musi mieć :size kilobajtów.',
 | 
			
		||||
        'string'  => ':attribute mmusi mieć długość :size znaków.',
 | 
			
		||||
        'array'   => ':attribute musi posiadać :size elementów.',
 | 
			
		||||
    ],
 | 
			
		||||
    'string'               => ':attribute musi być ciągiem znaków.',
 | 
			
		||||
    'timezone'             => ':attribute musi być prawidłową strefą czasową.',
 | 
			
		||||
    'unique'               => ':attribute zostało już zajęte.',
 | 
			
		||||
    'url'                  => 'Format :attribute jest nieprawidłowy.',
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
    |--------------------------------------------------------------------------
 | 
			
		||||
    | Custom Validation Language Lines
 | 
			
		||||
    |--------------------------------------------------------------------------
 | 
			
		||||
    |
 | 
			
		||||
    | Here you may specify custom validation messages for attributes using the
 | 
			
		||||
    | convention "attribute.rule" to name the lines. This makes it quick to
 | 
			
		||||
    | specify a specific custom language line for a given attribute rule.
 | 
			
		||||
    |
 | 
			
		||||
    */
 | 
			
		||||
 | 
			
		||||
    'custom' => [
 | 
			
		||||
        'password-confirm' => [
 | 
			
		||||
            'required_with' => 'Potwierdzenie hasła jest wymagane.',
 | 
			
		||||
        ],
 | 
			
		||||
    ],
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
    |--------------------------------------------------------------------------
 | 
			
		||||
    | Custom Validation Attributes
 | 
			
		||||
    |--------------------------------------------------------------------------
 | 
			
		||||
    |
 | 
			
		||||
    | The following language lines are used to swap attribute place-holders
 | 
			
		||||
    | with something more reader friendly such as E-Mail Address instead
 | 
			
		||||
    | of "email". This simply helps us make messages a little cleaner.
 | 
			
		||||
    |
 | 
			
		||||
    */
 | 
			
		||||
 | 
			
		||||
    'attributes' => [],
 | 
			
		||||
 | 
			
		||||
];
 | 
			
		||||
| 
						 | 
				
			
			@ -56,7 +56,7 @@
 | 
			
		|||
 | 
			
		||||
                <h1>{{$book->name}}</h1>
 | 
			
		||||
                <div class="book-content" v-if="!searching">
 | 
			
		||||
                    <p class="text-muted" v-pre>{{$book->description}}</p>
 | 
			
		||||
                    <p class="text-muted" v-pre>{!! nl2br(e($book->description)) !!}</p>
 | 
			
		||||
 | 
			
		||||
                    <div class="page-list" v-pre>
 | 
			
		||||
                        <hr>
 | 
			
		||||
| 
						 | 
				
			
			@ -118,7 +118,7 @@
 | 
			
		|||
                        <button v-if="searching" v-cloak class="text-neg" v-on:click="clearSearch()" type="button"><i class="zmdi zmdi-close"></i></button>
 | 
			
		||||
                    </form>
 | 
			
		||||
                </div>
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                <div class="activity">
 | 
			
		||||
                    <h3>{{ trans('entities.recent_activity') }}</h3>
 | 
			
		||||
                    @include('partials/activity-list', ['activity' => Activity::entityActivity($book, 20, 0)])
 | 
			
		||||
| 
						 | 
				
			
			@ -127,4 +127,4 @@
 | 
			
		|||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
@stop
 | 
			
		||||
@stop
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,7 +2,7 @@
 | 
			
		|||
    <h4>
 | 
			
		||||
        @if (isset($showPath) && $showPath)
 | 
			
		||||
            <a href="{{ $chapter->book->getUrl() }}" class="text-book">
 | 
			
		||||
                <i class="zmdi zmdi-book"></i>{{ $chapter->book->name }}
 | 
			
		||||
                <i class="zmdi zmdi-book"></i>{{ $chapter->book->getShortName() }}
 | 
			
		||||
            </a>
 | 
			
		||||
            <span class="text-muted">  »  </span>
 | 
			
		||||
        @endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -52,7 +52,7 @@
 | 
			
		|||
            <div class="col-md-7">
 | 
			
		||||
                <h1>{{ $chapter->name }}</h1>
 | 
			
		||||
                <div class="chapter-content" v-if="!searching">
 | 
			
		||||
                    <p class="text-muted">{{ $chapter->description }}</p>
 | 
			
		||||
                    <p class="text-muted">{!! nl2br(e($chapter->description)) !!}</p>
 | 
			
		||||
 | 
			
		||||
                    @if(count($pages) > 0)
 | 
			
		||||
                        <div class="page-list">
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,17 @@
 | 
			
		|||
<div class="page {{$page->draft ? 'draft' : ''}} entity-list-item" data-entity-type="page" data-entity-id="{{$page->id}}">
 | 
			
		||||
    <h4>
 | 
			
		||||
        @if (isset($showPath) && $showPath)
 | 
			
		||||
            <a href="{{ $page->book->getUrl() }}" class="text-book">
 | 
			
		||||
                <i class="zmdi zmdi-book"></i>{{ $page->book->getShortName() }}
 | 
			
		||||
            </a>
 | 
			
		||||
            <span class="text-muted">  »  </span>
 | 
			
		||||
            @if($page->chapter)
 | 
			
		||||
                <a href="{{ $page->chapter->getUrl() }}" class="text-chapter">
 | 
			
		||||
                    <i class="zmdi zmdi-collection-bookmark"></i>{{ $page->chapter->getShortName() }}
 | 
			
		||||
                </a>
 | 
			
		||||
                <span class="text-muted">  »  </span>
 | 
			
		||||
            @endif
 | 
			
		||||
        @endif
 | 
			
		||||
        <a href="{{ $page->getUrl() }}" class="text-page entity-list-item-link"><i class="zmdi zmdi-file-text"></i><span class="entity-list-item-name">{{ $page->name }}</span></a>
 | 
			
		||||
    </h4>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,7 +2,7 @@
 | 
			
		|||
    @if(count($entities) > 0)
 | 
			
		||||
        @foreach($entities as $index => $entity)
 | 
			
		||||
            @if($entity->isA('page'))
 | 
			
		||||
                @include('pages/list-item', ['page' => $entity])
 | 
			
		||||
                @include('pages/list-item', ['page' => $entity, 'showPath' => true])
 | 
			
		||||
            @elseif($entity->isA('book'))
 | 
			
		||||
                @include('books/list-item', ['book' => $entity])
 | 
			
		||||
            @elseif($entity->isA('chapter'))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -133,4 +133,4 @@ class LdapTest extends BrowserKitTest
 | 
			
		|||
            ->dontSee('External Authentication');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,9 @@
 | 
			
		|||
<?php namespace Tests;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
use BookStack\Chapter;
 | 
			
		||||
use BookStack\Page;
 | 
			
		||||
 | 
			
		||||
class EntitySearchTest extends TestCase
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -75,10 +78,10 @@ class EntitySearchTest extends TestCase
 | 
			
		|||
            ])
 | 
			
		||||
        ];
 | 
			
		||||
 | 
			
		||||
        $pageA = \BookStack\Page::first();
 | 
			
		||||
        $pageA = Page::first();
 | 
			
		||||
        $pageA->tags()->saveMany($newTags);
 | 
			
		||||
 | 
			
		||||
        $pageB = \BookStack\Page::all()->last();
 | 
			
		||||
        $pageB = Page::all()->last();
 | 
			
		||||
        $pageB->tags()->create(['name' => 'animal', 'value' => 'dog']);
 | 
			
		||||
 | 
			
		||||
        $this->asEditor();
 | 
			
		||||
| 
						 | 
				
			
			@ -160,8 +163,8 @@ class EntitySearchTest extends TestCase
 | 
			
		|||
 | 
			
		||||
    public function test_ajax_entity_search()
 | 
			
		||||
    {
 | 
			
		||||
        $page = \BookStack\Page::all()->last();
 | 
			
		||||
        $notVisitedPage = \BookStack\Page::first();
 | 
			
		||||
        $page = Page::all()->last();
 | 
			
		||||
        $notVisitedPage = Page::first();
 | 
			
		||||
 | 
			
		||||
        // Visit the page to make popular
 | 
			
		||||
        $this->asEditor()->get($page->getUrl());
 | 
			
		||||
| 
						 | 
				
			
			@ -176,4 +179,20 @@ class EntitySearchTest extends TestCase
 | 
			
		|||
        $defaultListTest->assertSee($page->name);
 | 
			
		||||
        $defaultListTest->assertDontSee($notVisitedPage->name);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function test_ajax_entity_serach_shows_breadcrumbs()
 | 
			
		||||
    {
 | 
			
		||||
        $chapter = Chapter::first();
 | 
			
		||||
        $page = $chapter->pages->first();
 | 
			
		||||
        $this->asEditor();
 | 
			
		||||
 | 
			
		||||
        $pageSearch = $this->get('/ajax/search/entities?term=' . urlencode($page->name));
 | 
			
		||||
        $pageSearch->assertSee($page->name);
 | 
			
		||||
        $pageSearch->assertSee($chapter->getShortName());
 | 
			
		||||
        $pageSearch->assertSee($page->book->getShortName());
 | 
			
		||||
 | 
			
		||||
        $chapterSearch = $this->get('/ajax/search/entities?term=' . urlencode($chapter->name));
 | 
			
		||||
        $chapterSearch->assertSee($chapter->name);
 | 
			
		||||
        $chapterSearch->assertSee($chapter->book->getShortName());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue