Merge branch 'master' into 2019-design

This commit is contained in:
Dan Brown 2018-11-11 11:44:35 +00:00
commit 4a872012c5
No known key found for this signature in database
GPG Key ID: 46D9F943C24A2EF9
80 changed files with 5379 additions and 5278 deletions

View File

@ -48,6 +48,7 @@ GITHUB_APP_ID=false
GITHUB_APP_SECRET=false
GOOGLE_APP_ID=false
GOOGLE_APP_SECRET=false
GOOGLE_SELECT_ACCOUNT=false
OKTA_BASE_URL=false
OKTA_APP_ID=false
OKTA_APP_SECRET=false

View File

@ -40,7 +40,7 @@ class SocialAuthService
public function startLogIn($socialDriver)
{
$driver = $this->validateDriver($socialDriver);
return $this->socialite->driver($driver)->redirect();
return $this->getSocialDriver($driver)->redirect();
}
/**
@ -52,7 +52,7 @@ class SocialAuthService
public function startRegister($socialDriver)
{
$driver = $this->validateDriver($socialDriver);
return $this->socialite->driver($driver)->redirect();
return $this->getSocialDriver($driver)->redirect();
}
/**
@ -247,4 +247,20 @@ class SocialAuthService
session()->flash('success', trans('settings.users_social_disconnected', ['socialAccount' => title_case($socialDriver)]));
return redirect(user()->getEditUrl());
}
/**
* Provide redirect options per service for the Laravel Socialite driver
* @param $driverName
* @return \Laravel\Socialite\Contracts\Provider
*/
public function getSocialDriver(string $driverName)
{
$driver = $this->socialite->driver($driverName);
if ($driverName === 'google' && config('services.google.select_account')) {
$driver->with(['prompt' => 'select_account']);
}
return $driver;
}
}

View File

@ -92,10 +92,15 @@ function baseUrl($path, $forceAppDomain = false)
if ($isFullUrl && !$forceAppDomain) {
return $path;
}
$path = trim($path, '/');
$base = rtrim(config('app.url'), '/');
// Remove non-specified domain if forced and we have a domain
if ($isFullUrl && $forceAppDomain) {
if (!empty($base) && strpos($path, $base) === 0) {
$path = trim(substr($path, strlen($base) - 1));
}
$explodedPath = explode('/', $path);
$path = implode('/', array_splice($explodedPath, 3));
}
@ -105,7 +110,7 @@ function baseUrl($path, $forceAppDomain = false)
return url($path);
}
return rtrim(config('app.url'), '/') . '/' . $path;
return $base . '/' . $path;
}
/**

View File

@ -8,7 +8,7 @@
"php": ">=7.0.0",
"ext-tidy": "*",
"ext-dom": "*",
"laravel/framework": "~5.5.42",
"laravel/framework": "~5.5.44",
"fideloper/proxy": "~3.3",
"intervention/image": "^2.4",
"laravel/socialite": "^3.0",

811
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -84,7 +84,7 @@ return [
*/
'locale' => env('APP_LANG', 'en'),
'locales' => ['en', 'ar', 'de', 'es', 'es_AR', 'fr', 'nl', 'pt_BR', 'sk', 'sv', 'ja', 'pl', 'it', 'ru', 'zh_CN', 'zh_TW'],
'locales' => ['en', 'ar', 'de', 'es', 'es_AR', 'fr', 'nl', 'pt_BR', 'sk', 'sv', 'kr', 'ja', 'pl', 'it', 'ru', 'zh_CN', 'zh_TW'],
/*
|--------------------------------------------------------------------------

View File

@ -59,6 +59,7 @@ return [
'name' => 'Google',
'auto_register' => env('GOOGLE_AUTO_REGISTER', false),
'auto_confirm' => env('GOOGLE_AUTO_CONFIRM_EMAIL', false),
'select_account' => env('GOOGLE_SELECT_ACCOUNT', false),
],
'slack' => [

8360
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -10,34 +10,34 @@
"permissions": "chown -R $USER:$USER bootstrap/cache storage public/uploads"
},
"devDependencies": {
"@babel/core": "^7.0.0-beta.40",
"@babel/polyfill": "^7.0.0-beta.40",
"@babel/preset-env": "^7.0.0-beta.40",
"autoprefixer": "^8.1.0",
"babel-loader": "^8.0.0-beta.0",
"css-loader": "^0.28.10",
"@babel/core": "^7.1.5",
"@babel/polyfill": "^7.0.0",
"@babel/preset-env": "^7.1.5",
"autoprefixer": "^8.6.5",
"babel-loader": "^8.0.4",
"css-loader": "^0.28.11",
"extract-text-webpack-plugin": "^4.0.0-beta.0",
"livereload": "^0.7.0",
"node-sass": "^4.9.2",
"npm-run-all": "^4.1.2",
"postcss-loader": "^2.1.1",
"sass-loader": "^7.0.1",
"node-sass": "^4.10.0",
"npm-run-all": "^4.1.3",
"postcss-loader": "^2.1.6",
"sass-loader": "^7.1.0",
"style-loader": "^0.21.0",
"uglifyjs-webpack-plugin": "^1.2.3",
"webpack": "^4.16.3",
"webpack-cli": "^2.0.11"
"uglifyjs-webpack-plugin": "^1.3.0",
"webpack": "^4.25.1",
"webpack-cli": "^3.1.2"
},
"dependencies": {
"axios": "^0.18.0",
"clipboard": "^2.0.0",
"codemirror": "^5.26.0",
"dropzone": "^5.4.0",
"clipboard": "^2.0.1",
"codemirror": "^5.41.0",
"dropzone": "^5.5.1",
"jquery": "^3.3.1",
"jquery-sortable": "^0.9.13",
"markdown-it": "^8.3.1",
"markdown-it-task-lists": "^2.0.0",
"vue": "^2.2.6",
"vuedraggable": "^2.14.1"
"markdown-it": "^8.4.2",
"markdown-it-task-lists": "^2.1.1",
"vue": "^2.5.17",
"vuedraggable": "^2.16.0"
},
"browser": {
"vue": "vue/dist/vue.common.js"

View File

@ -41,6 +41,8 @@
<env name="GOOGLE_APP_SECRET" value="aaaaaaaaaaaaaa"/>
<env name="GOOGLE_AUTO_REGISTER" value=""/>
<env name="GOOGLE_AUTO_CONFIRM_EMAIL" value=""/>
<env name="GOOGLE_SELECT_ACCOUNT" value=""/>
<env name="APP_URL" value="http://bookstack.dev"/>
<env name="DEBUGBAR_ENABLED" value="false"/>
</php>
</phpunit>

View File

@ -56,4 +56,4 @@ class BackToTop {
}
module.exports = BackToTop;
export default BackToTop;

View File

@ -69,4 +69,4 @@ class ChapterToggle {
}
module.exports = ChapterToggle;
export default ChapterToggle;

View File

@ -34,4 +34,4 @@ class Collapsible {
}
module.exports = Collapsible;
export default Collapsible;

View File

@ -45,4 +45,4 @@ class DropDown {
}
module.exports = DropDown;
export default DropDown;

View File

@ -44,4 +44,4 @@ class EditorToolbox {
}
module.exports = EditorToolbox;
export default EditorToolbox;

View File

@ -44,4 +44,4 @@ class EntitySelectorPopup {
}
}
module.exports = EntitySelectorPopup;
export default EntitySelectorPopup;

View File

@ -115,4 +115,4 @@ class EntitySelector {
}
module.exports = EntitySelector;
export default EntitySelector;

View File

@ -62,4 +62,4 @@ class ExpandToggle {
}
module.exports = ExpandToggle;
export default ExpandToggle;

View File

@ -19,4 +19,4 @@ class HomepageControl {
}
module.exports = HomepageControl;
export default HomepageControl;

View File

@ -56,4 +56,4 @@ class ImagePicker {
}
module.exports = ImagePicker;
export default ImagePicker;

View File

@ -1,31 +1,53 @@
import dropdown from "./dropdown";
import overlay from "./overlay";
import backToTop from "./back-to-top";
import notification from "./notification";
import chapterToggle from "./chapter-toggle";
import expandToggle from "./expand-toggle";
import entitySelectorPopup from "./entity-selector-popup";
import entitySelector from "./entity-selector";
import sidebar from "./sidebar";
import pagePicker from "./page-picker";
import pageComments from "./page-comments";
import wysiwygEditor from "./wysiwyg-editor";
import markdownEditor from "./markdown-editor";
import editorToolbox from "./editor-toolbox";
import imagePicker from "./image-picker";
import collapsible from "./collapsible";
import toggleSwitch from "./toggle-switch";
import pageDisplay from "./page-display";
import shelfSort from "./shelf-sort";
import homepageControl from "./homepage-control";
import headerMobileToggle from "./header-mobile-toggle";
let componentMapping = {
'dropdown': require('./dropdown'),
'overlay': require('./overlay'),
'back-to-top': require('./back-top-top'),
'notification': require('./notification'),
'chapter-toggle': require('./chapter-toggle'),
'expand-toggle': require('./expand-toggle'),
'entity-selector-popup': require('./entity-selector-popup'),
'entity-selector': require('./entity-selector'),
'sidebar': require('./sidebar'),
'page-picker': require('./page-picker'),
'page-comments': require('./page-comments'),
'wysiwyg-editor': require('./wysiwyg-editor'),
'markdown-editor': require('./markdown-editor'),
'editor-toolbox': require('./editor-toolbox'),
'image-picker': require('./image-picker'),
'collapsible': require('./collapsible'),
'toggle-switch': require('./toggle-switch'),
'page-display': require('./page-display'),
'shelf-sort': require('./shelf-sort'),
'homepage-control': require('./homepage-control'),
'header-mobile-toggle': require('./header-mobile-toggle'),
const componentMapping = {
'dropdown': dropdown,
'overlay': overlay,
'back-to-top': backToTop,
'notification': notification,
'chapter-toggle': chapterToggle,
'expand-toggle': expandToggle,
'entity-selector-popup': entitySelectorPopup,
'entity-selector': entitySelector,
'sidebar': sidebar,
'page-picker': pagePicker,
'page-comments': pageComments,
'wysiwyg-editor': wysiwygEditor,
'markdown-editor': markdownEditor,
'editor-toolbox': editorToolbox,
'image-picker': imagePicker,
'collapsible': collapsible,
'toggle-switch': toggleSwitch,
'page-display': pageDisplay,
'shelf-sort': shelfSort,
'homepage-control': homepageControl,
'header-mobile-toggle': headerMobileToggle,
};
window.components = {};
let componentNames = Object.keys(componentMapping);
const componentNames = Object.keys(componentMapping);
/**
* Initialize components of the given name within the given element.
@ -59,4 +81,4 @@ function initAll(parentElement) {
window.components.init = initAll;
export default initAll;
export default initAll;

View File

@ -1,8 +1,8 @@
const MarkdownIt = require("markdown-it");
const mdTasksLists = require('markdown-it-task-lists');
const code = require('../services/code');
import MarkdownIt from "markdown-it";
import mdTasksLists from 'markdown-it-task-lists';
import code from '../services/code';
const DrawIO = require('../services/drawio');
import DrawIO from "../services/drawio";
class MarkdownEditor {
@ -272,14 +272,15 @@ class MarkdownEditor {
let placeHolderText = `![${selectedText}](${placeholderImage})`;
let cursor = cm.getCursor();
cm.replaceSelection(placeHolderText);
cm.setCursor({line: cursor.line, ch: cursor.ch + selectedText.length + 2});
cm.setCursor({line: cursor.line, ch: cursor.ch + selectedText.length + 3});
let remoteFilename = "image-" + Date.now() + "." + ext;
let formData = new FormData();
formData.append('file', file, remoteFilename);
window.$http.post('/images/gallery/upload', formData).then(resp => {
replaceContent(placeholderImage, resp.data.thumbs.display);
const newContent = `[![${selectedText}](${resp.data.thumbs.display})](${resp.data.url})`;
replaceContent(placeHolderText, newContent);
}).catch(err => {
window.$events.emit('error', trans('errors.image_upload_error'));
replaceContent(placeHolderText, selectedText);
@ -304,7 +305,7 @@ class MarkdownEditor {
let cursorPos = this.cm.getCursor('from');
window.ImageManager.show(image => {
let selectedText = this.cm.getSelection();
let newText = "![" + (selectedText || image.name) + "](" + image.thumbs.display + ")";
let newText = "[![" + (selectedText || image.name) + "](" + image.thumbs.display + ")](" + image.url + ")";
this.cm.focus();
this.cm.replaceSelection(newText);
this.cm.setCursor(cursorPos.line, cursorPos.ch + newText.length);
@ -427,4 +428,4 @@ class MarkdownEditor {
}
module.exports = MarkdownEditor ;
export default MarkdownEditor ;

View File

@ -43,4 +43,4 @@ class Notification {
}
module.exports = Notification;
export default Notification;

View File

@ -36,4 +36,4 @@ class Overlay {
}
module.exports = Overlay;
export default Overlay;

View File

@ -1,4 +1,4 @@
const MarkdownIt = require("markdown-it");
import MarkdownIt from "markdown-it";
const md = new MarkdownIt({ html: false });
class PageComments {
@ -172,4 +172,4 @@ class PageComments {
}
module.exports = PageComments;
export default PageComments;

View File

@ -1,4 +1,4 @@
import Clipboard from "clipboard";
import Clipboard from "clipboard/dist/clipboard.min";
import Code from "../services/code";
class PageDisplay {
@ -233,4 +233,4 @@ class PageDisplay {
}
}
module.exports = PageDisplay;
export default PageDisplay;

View File

@ -59,4 +59,4 @@ function toggleElem(elem, show) {
elem.style.display = show ? display : 'none';
}
module.exports = PagePicker;
export default PagePicker;

View File

@ -1,3 +1,4 @@
import "jquery-sortable";
class ShelfSort {
@ -9,9 +10,8 @@ class ShelfSort {
}
initSortable() {
const sortable = require('jquery-sortable');
const placeHolderContent = this.getPlaceholderHTML();
// TODO - Load sortable at this point
return $('.scroll-box').sortable({
group: 'shelf-books',
exclude: '.instruction,.scroll-box-placeholder',
@ -68,4 +68,4 @@ class ShelfSort {
}
module.exports = ShelfSort;
export default ShelfSort;

View File

@ -13,4 +13,4 @@ class Sidebar {
}
module.exports = Sidebar;
export default Sidebar;

View File

@ -16,4 +16,4 @@ class ToggleSwitch {
}
module.exports = ToggleSwitch;
export default ToggleSwitch;

View File

@ -1,5 +1,5 @@
const Code = require('../services/code');
const DrawIO = require('../services/drawio');
import Code from "../services/code";
import DrawIO from "../services/drawio";
/**
* Handle pasting images from clipboard.
@ -593,4 +593,4 @@ class WysiwygEditor {
}
module.exports = WysiwygEditor;
export default WysiwygEditor;

View File

@ -1,27 +1,27 @@
const CodeMirror = require('codemirror');
const Clipboard = require("clipboard");
import CodeMirror from "codemirror";
import Clipboard from "clipboard/dist/clipboard.min";
// Modes
require('codemirror/mode/css/css');
require('codemirror/mode/clike/clike');
require('codemirror/mode/diff/diff');
require('codemirror/mode/go/go');
require('codemirror/mode/htmlmixed/htmlmixed');
require('codemirror/mode/javascript/javascript');
require('codemirror/mode/markdown/markdown');
require('codemirror/mode/nginx/nginx');
require('codemirror/mode/php/php');
require('codemirror/mode/powershell/powershell');
require('codemirror/mode/python/python');
require('codemirror/mode/ruby/ruby');
require('codemirror/mode/shell/shell');
require('codemirror/mode/sql/sql');
require('codemirror/mode/toml/toml');
require('codemirror/mode/xml/xml');
require('codemirror/mode/yaml/yaml');
import 'codemirror/mode/css/css';
import 'codemirror/mode/clike/clike';
import 'codemirror/mode/diff/diff';
import 'codemirror/mode/go/go';
import 'codemirror/mode/htmlmixed/htmlmixed';
import 'codemirror/mode/javascript/javascript';
import 'codemirror/mode/markdown/markdown';
import 'codemirror/mode/nginx/nginx';
import 'codemirror/mode/php/php';
import 'codemirror/mode/powershell/powershell';
import 'codemirror/mode/python/python';
import 'codemirror/mode/ruby/ruby';
import 'codemirror/mode/shell/shell';
import 'codemirror/mode/sql/sql';
import 'codemirror/mode/toml/toml';
import 'codemirror/mode/xml/xml';
import 'codemirror/mode/yaml/yaml';
// Addons
require('codemirror/addon/scroll/scrollpastend');
import 'codemirror/addon/scroll/scrollpastend';
const modeMap = {
css: 'css',
@ -255,7 +255,7 @@ function getMetaKey() {
return mac ? "Cmd" : "Ctrl";
}
module.exports = {
export default {
highlight: highlight,
wysiwygView: wysiwygView,
popupEditor: popupEditor,

View File

@ -66,4 +66,4 @@ function drawPostMessage(data) {
iFrame.contentWindow.postMessage(JSON.stringify(data), '*');
}
module.exports = {show, close};
export default {show, close};

View File

@ -25,4 +25,4 @@ class Events {
}
}
module.exports = Events;
export default Events;

View File

@ -107,4 +107,4 @@ class Translator {
}
module.exports = Translator;
export default Translator;

View File

@ -1,5 +1,5 @@
const draggable = require('vuedraggable');
const dropzone = require('./components/dropzone');
import draggable from "vuedraggable";
import dropzone from "./components/dropzone";
function mounted() {
this.pageId = this.$el.getAttribute('page-id');
@ -137,6 +137,6 @@ let methods = {
};
module.exports = {
export default {
data, methods, mounted, components,
};

View File

@ -1,4 +1,4 @@
const codeLib = require('../services/code');
import codeLib from "../services/code";
const methods = {
show() {
@ -37,7 +37,7 @@ const data = {
callback: null
};
module.exports = {
export default {
methods,
data
};

View File

@ -125,4 +125,4 @@ const methods = {
};
module.exports = {template, data, props, methods};
export default {template, data, props, methods};

View File

@ -1,4 +1,4 @@
const DropZone = require("dropzone");
import DropZone from "dropzone";
const template = `
<div class="dropzone-container">
@ -60,7 +60,7 @@ const methods = {
}
};
module.exports = {
export default {
template,
props,
mounted,

View File

@ -39,6 +39,6 @@ function mounted() {
this.type = this.$el.getAttribute('entity-type');
}
module.exports = {
export default {
data, computed, methods, mounted
};

View File

@ -1,7 +1,5 @@
import * as Dates from "../services/dates";
const dropzone = require('./components/dropzone');
import dropzone from "./components/dropzone";
let page = 0;
let previousClickTime = 0;
@ -193,7 +191,7 @@ function mounted() {
baseUrl = window.baseUrl('/images/' + this.imageType + '/all/')
}
module.exports = {
export default {
mounted,
methods,
data,

View File

@ -145,6 +145,6 @@ let computed = {
}
};
module.exports = {
export default {
mounted, data, methods, computed,
};

View File

@ -188,6 +188,6 @@ function created() {
this.dateParse(this.termString);
}
module.exports = {
export default {
data, computed, methods, created
};

View File

@ -1,5 +1,5 @@
const draggable = require('vuedraggable');
const autosuggest = require('./components/autosuggest');
import draggable from 'vuedraggable';
import autosuggest from './components/autosuggest';
let data = {
entityId: false,
@ -63,6 +63,6 @@ function mounted() {
});
}
module.exports = {
export default {
data, methods, mounted, components, directives
};

View File

@ -1,17 +1,25 @@
const Vue = require("vue");
import Vue from "vue";
function exists(id) {
return document.getElementById(id) !== null;
}
import searchSystem from "./search";
import entityDashboard from "./entity-dashboard";
import codeEditor from "./code-editor";
import imageManager from "./image-manager";
import tagManager from "./tag-manager";
import attachmentManager from "./attachment-manager";
import pageEditor from "./page-editor";
let vueMapping = {
'search-system': require('./search'),
'entity-dashboard': require('./entity-dashboard'),
'code-editor': require('./code-editor'),
'image-manager': require('./image-manager'),
'tag-manager': require('./tag-manager'),
'attachment-manager': require('./attachment-manager'),
'page-editor': require('./page-editor'),
'search-system': searchSystem,
'entity-dashboard': entityDashboard,
'code-editor': codeEditor,
'image-manager': imageManager,
'tag-manager': tagManager,
'attachment-manager': attachmentManager,
'page-editor': pageEditor,
};
window.vues = {};

View File

@ -144,6 +144,7 @@ return [
'pt_BR' => 'Português do Brasil',
'sk' => 'Slovensky',
'sv' => 'Svenska',
'kr' => '한국어',
'ja' => '日本語',
'pl' => 'Polski',
'it' => 'Italian',

View File

@ -37,6 +37,14 @@ return [
'book_sort' => 'a réordonné le livre',
'book_sort_notification' => 'Livre réordonné avec succès',
// Bookshelves
'bookshelf_create' => 'a créé l\'étagère',
'bookshelf_create_notification' => 'Étagère créée avec succès',
'bookshelf_update' => 'a modifié l\'étagère',
'bookshelf_update_notification' => 'Étagère modifiée avec succès',
'bookshelf_delete' => 'a supprimé l\'étagère',
'bookshelf_delete_notification' => 'Étagère supprimée avec succès',
// Other
'commented_on' => 'a commenté'
];

View File

@ -52,6 +52,7 @@ return [
'details' => 'Détails',
'grid_view' => 'Vue en grille',
'list_view' => 'Vue en liste',
'default' => 'Défaut',
/**
* Header

View File

@ -52,11 +52,13 @@ return [
'search_content_type' => 'Type de contenu',
'search_exact_matches' => 'Correspondances exactes',
'search_tags' => 'Recherche par tags',
'search_options' => 'Options',
'search_viewed_by_me' => 'Vu par moi',
'search_not_viewed_by_me' => 'Non vu par moi',
'search_permissions_set' => 'Ensemble d\'autorisations',
'search_created_by_me' => 'Créé par moi',
'search_updated_by_me' => 'Mis à jour par moi',
'search_date_options' => 'Recherche par date',
'search_updated_before' => 'Mis à jour avant',
'search_updated_after' => 'Mis à jour après',
'search_created_before' => 'Créé avant',
@ -64,6 +66,38 @@ return [
'search_set_date' => 'Choisir la date',
'search_update' => 'Actualiser la recherche',
/**
* Shelves
*/
'shelf' => 'Étagère',
'shelves' => 'Étagères',
'shelves_long' => 'Étagères',
'shelves_empty' => 'Aucune étagère n\'a été créée',
'shelves_create' => 'Créer une nouvelle étagère',
'shelves_popular' => 'Étagères populaires',
'shelves_new' => 'Nouvelles Étagères',
'shelves_popular_empty' => 'Les étagères les plus populaires apparaîtront ici.',
'shelves_new_empty' => 'Les étagères les plus récentes apparaitront ici.',
'shelves_save' => 'Enregistrer l\'étagère',
'shelves_books' => 'Livres sur cette étagère',
'shelves_add_books' => 'Ajouter des livres sur cette étagère',
'shelves_drag_books' => 'Déposez des livres ici pour les ajouter a cette étagère',
'shelves_empty_contents' => 'Aucun livre n\'a été assigné à cette étagère',
'shelves_edit_and_assign' => 'Modifier cette étagère pour y ajouter des livres',
'shelves_edit_named' => 'Modifier l\'étagère :name',
'shelves_edit' => 'Modifier l\'étagère',
'shelves_delete' => 'Supprimer l\'étagère',
'shelves_delete_named' => 'Supprimer l\'étagère :name',
'shelves_delete_explain' => "Ceci va supprimer l\'étagère nommée \':bookName\'. Les livres contenus dans cette étagère ne seront pas supprimés.",
'shelves_delete_confirmation' => 'Êtes-vous sûr(e) de vouloir supprimer cette étagère ?',
'shelves_permissions' => 'Permissions de l\'étagère',
'shelves_permissions_updated' => 'Permissions de l\'étagère mises à jour',
'shelves_permissions_active' => 'Permissions de l\'étagère activées',
'shelves_copy_permissions_to_books' => 'Copier les permissions vers les livres',
'shelves_copy_permissions' => 'Copier les permissions',
'shelves_copy_permissions_explain' => 'Ceci va appliquer les permissions actuelles de cette étagère à tous les livres qu\'elle contient. Avant de continuer, assurez-vous que toutes les permissions de cette étagère ont été sauvegardées.',
'shelves_copy_permission_success' => 'Permissions de l\'étagère transférées à :count livres',
/**
* Books
*/
@ -199,6 +233,7 @@ return [
'message' => ':start :time. Attention à ne pas écraser les mises à jour de quelqu\'un d\'autre !',
],
'pages_draft_discarded' => 'Brouillon écarté, la page est dans sa version actuelle.',
'pages_specific' => 'Page Spécifique',
/**
* Editor sidebar
@ -206,6 +241,7 @@ return [
'page_tags' => 'Mots-clés de la page',
'chapter_tags' => 'Mots-clés du chapitre',
'book_tags' => 'Mots-clés du livre',
'shelf_tags' => 'Mots-clés de l\'étagère',
'tag' => 'Mot-clé',
'tags' => 'Mots-clés',
'tag_value' => 'Valeur du mot-clé (Optionnel)',

View File

@ -49,6 +49,7 @@ return [
// Entities
'entity_not_found' => 'Entité non trouvée',
'bookshelf_not_found' => 'Étagère non trouvée',
'book_not_found' => 'Livre non trouvé',
'page_not_found' => 'Page non trouvée',
'chapter_not_found' => 'Chapitre non trouvé',

View File

@ -33,8 +33,7 @@ return [
'app_primary_color_desc' => 'Cela devrait être une valeur hexadécimale. <br>Laisser vide pour rétablir la couleur par défaut.',
'app_homepage' => 'Page d\'accueil de l\'application',
'app_homepage_desc' => 'Choisissez une page à afficher sur la page d\'accueil au lieu de la vue par défaut. Les permissions sont ignorées pour les pages sélectionnées.',
'app_homepage_default' => 'Page d\'accueil par défaut sélectionnée',
'app_homepage_books' => 'Ou sélectionner la page des livres comme page d\'accueil. Cela va ignorer la page séléctionnée comme page d\'accueil.',
'app_homepage_select' => 'Choisissez une page',
'app_disable_comments' => 'Désactiver les commentaires',
'app_disable_comments_desc' => 'Désactive les commentaires sur toutes les pages de l\'application. Les commentaires existants ne sont pas affichés.',
@ -91,6 +90,7 @@ return [
'role_manage_settings' => 'Gérer les préférences de l\'application',
'role_asset' => 'Permissions des ressources',
'role_asset_desc' => 'Ces permissions contrôlent l\'accès par défaut des ressources dans le système. Les permissions dans les livres, les chapitres et les pages ignoreront ces permissions',
'role_asset_admins' => 'Les administrateurs ont automatiquement accès à tous les contenus mais les options suivantes peuvent afficher ou masquer certaines options de l\'interface.',
'role_all' => 'Tous',
'role_own' => 'Propres',
'role_controlled_by_asset' => 'Contrôlé par les ressources les ayant envoyés',
@ -111,7 +111,6 @@ return [
'users_external_auth_id' => 'Identifiant d\'authentification externe',
'users_password_warning' => 'Remplissez ce formulaire uniquement si vous souhaitez changer de mot de passe:',
'users_system_public' => 'Cet utilisateur représente les invités visitant votre instance. Il est assigné automatiquement aux invités.',
'users_books_view_type' => 'Disposition d\'affichage préférée pour les livres',
'users_delete' => 'Supprimer un utilisateur',
'users_delete_named' => 'Supprimer l\'utilisateur :userName',
'users_delete_warning' => 'Ceci va supprimer \':userName\' du système.',

View File

@ -0,0 +1,40 @@
<?php
return [
/**
* Activity text strings.
* Is used for all the text within activity logs & notifications.
*/
// Pages
'page_create' => '페이지 생성',
'page_create_notification' => '페이지를 만들었습니다.',
'page_update' => '페이지 업데이트',
'page_update_notification' => '페이지를 업데이트하였습니다.',
'page_delete' => '페이지 삭제',
'page_delete_notification' => '페이지를 삭제하였습니다.',
'page_restore' => '페이지 복원',
'page_restore_notification' => '페이지를 복원하였습니다.',
'page_move' => '페이지 이동',
// Chapters
'chapter_create' => '챕터 만들기',
'chapter_create_notification' => '챕터를 만들었습니다.',
'chapter_update' => '챕터 업데이트',
'chapter_update_notification' => '챕터를 업데이트하였습니다.',
'chapter_delete' => '챕터 삭제',
'chapter_delete_notification' => '챔터를 삭제하였습니다.',
'chapter_move' => '챕터 이동',
// Books
'book_create' => '책 만들기',
'book_create_notification' => '책을 만들었습니다.',
'book_update' => '책 업데이트',
'book_update_notification' => '책을 업데이트하였습니다.',
'book_delete' => '책 삭제',
'book_delete_notification' => '책을 삭제하였습니다.',
'book_sort' => '책 정렬',
'book_sort_notification' => '책을 정렬하였습니다.',
];

View File

@ -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' => '이 자격 증명은 등록되어 있지 않습니다.',
'throttle' => '로그인 시도 횟수 제한을 초과했습니다. :seconds초 후에 다시 시도하십시오.',
/**
* Login & Register
*/
'sign_up' => '신규등록',
'log_in' => '로그인',
'log_in_with' => ':socialDriver에 로그인',
'sign_up_with' => ':socialDriver로 등록',
'logout' => '로그아웃',
'name' => '이름',
'username' => '사용자이름',
'email' => '이메일',
'password' => '비밀번호',
'password_confirm' => '비밀번호 (확인)',
'password_hint' => '5자 이상이어야 합니다.',
'forgot_password' => '비밀번호를 잊으셨습니까?',
'remember_me' => '자동로그인',
'ldap_email_hint' => '이 계정에서 사용하는 이메일을 입력해 주세요.',
'create_account' => '계정 만들기',
'social_login' => 'SNS로그인',
'social_registration' => 'SNS등록',
'social_registration_text' => '다른 서비스를 사용하여 등록하고 로그인.',
'register_thanks' => '등록이완료되었습니다!',
'register_confirm' => '당신의 이메일을 확인하신후 확인 버튼을 눌러 :appName에 액세스하십시오.',
'registrations_disabled' => '현재 등록이 불가합니다.',
'registration_email_domain_invalid' => '해당 이메일 도메인으로 액세스 할 수 없습니다.',
'register_success' => '등록을 완료하고 로그인 할 수 있습니다!',
/**
* Password Reset
*/
'reset_password' => '암호 재설정',
'reset_password_send_instructions' => '다음에 메일 주소를 입력하면 비밀번호 재설정 링크가 포함 된 이메일이 전송됩니다.',
'reset_password_send_button' => '재설정 링크 보내기',
'reset_password_sent_success' => ':email로 재설정 링크를 보냈습니다.',
'reset_password_success' => '비밀번호가 재설정되었습니다.',
'email_reset_subject' => ':appName 암호를 재설정',
'email_reset_text' => '귀하의 계정에 대한 비밀번호 재설정 요청을 받았기 때문에 본 이메일이 발송되었습니다.',
'email_reset_not_requested' => '암호 재설정을 요청하지 않은 경우 더 이상의 조치는 필요하지 않습니다.',
/**
* Email Confirmation
*/
'email_confirm_subject' => ':appName의 이메일 주소 확인',
'email_confirm_greeting' => ':appName에 가입 ​​해 주셔서 감사합니다!',
'email_confirm_text' => '다음 버튼을 눌러 이메일 주소를 확인하십시오',
'email_confirm_action' => '이메일 주소를 확인',
'email_confirm_send_error' => 'E메일 확인이 필요하지만 시스템에서 메일을 보낼 수 없습니다. 관리자에게 문의하여 메일이 제대로 설정되어 있는지 확인하십시오.',
'email_confirm_success' => '메일 주소가 확인되었습니다.',
'email_confirm_resent' => '확인 메일을 다시 보냈습니다. 받은 편지함을 확인하십시오.',
'email_not_confirmed' => '메일 주소가 확인되지 않습니다',
'email_not_confirmed_text' => '메일 주소 확인이 완료되지 않습니다.',
'email_not_confirmed_click_link' => '등록시 받은 이메일을 확인하고 확인 링크를 클릭하십시오.',
'email_not_confirmed_resend' => '메일이 없으면 아래 양식을 통해 다시 제출하십시오.',
'email_not_confirmed_resend_button' => '확인 메일을 다시 전송',
];

View File

@ -0,0 +1,68 @@
<?php
return [
/**
* Buttons
*/
'cancel' => '취소',
'confirm' => '확인',
'back' => '뒤로',
'save' => '저장',
'continue' => '계속하기',
'select' => '선택',
'more' => '더보기',
/**
* Form Labels
*/
'name' => '이름',
'description' => '설명',
'role' => '역할',
'cover_image' => '대표 이미지',
'cover_image_description' => '이 이미지는 약 440x250px 정도의 크기여야 합니다.',
/**
* Actions
*/
'actions' => 'Actions',
'view' => '뷰',
'create' => '생성',
'update' => '업데이트',
'edit' => '수정',
'sort' => '정렬',
'move' => '이동',
'copy' => '복사',
'reply' => 'Reply',
'delete' => '삭제',
'search' => '검색',
'search_clear' => '검색기록 삭제',
'reset' => '초기화',
'remove' => '제거',
'add' => '추가',
/**
* Misc
*/
'deleted_user' => '삭제된 사용자',
'no_activity' => '활동내역이 없음',
'no_items' => '사용가능한 항목이 없음',
'back_to_top' => '맨위로',
'toggle_details' => '상세 토글',
'toggle_thumbnails' => '썸내일 토글',
'details' => '상세',
'grid_view' => '그리드 뷰',
'list_view' => '리스트뷰',
'default' => '기본설정',
/**
* Header
*/
'view_profile' => '프로파일 보기',
'edit_profile' => '프로파일 수정하기',
/**
* Email Content
*/
'email_action_help' => '":actionText"버튼을 클릭하는 데 문제가 있으면 아래 URL을 복사하여 웹 브라우저에 붙여 넣으십시오:',
'email_rights' => 'All rights reserved',
];

View File

@ -0,0 +1,34 @@
<?php
return [
/**
* Image Manager
*/
'image_select' => '이미지 선택',
'image_all' => '전체',
'image_all_title' => '모든 이미지 보기',
'image_book_title' => '이 책에 업로드된 이미지 보기',
'image_page_title' => '이 페이지에 업로드된 이미지 보기',
'image_search_hint' => '이미지 이름으로 검색',
'image_uploaded' => ':uploadedDate에 업로드됨',
'image_load_more' => '더 불러오기',
'image_image_name' => '이미지 이름',
'image_delete_used' => '이 이미지는 다음 페이지에서 이용되고 있습니다.',
'image_delete_confirm' => '삭제해도 괜찮으시면 다시 삭제 버튼을 눌러주세요.',
'image_select_image' => '선택',
'image_dropzone' => '업로드를 위해 이미지를 가져와 놓거나 클릭하세요',
'images_deleted' => '이미지 삭제',
'image_preview' => '이미지 미리보기',
'image_upload_success' => '이미지 업로드가 완료되었습니다.',
'image_update_success' => '이미지 상세정보가 업데이트 되었습니다.',
'image_delete_success' => '이미지가 삭제되었습니다.',
'image_upload_remove' => '제거',
/**
* Code editor
*/
'code_editor' => '코드 수정',
'code_language' => '코드 언어',
'code_content' => '코드 내용',
'code_save' => '코드 저장',
];

View File

@ -0,0 +1,311 @@
<?php
return [
/**
* Shared
*/
'recently_created' => '최근작성',
'recently_created_pages' => '최근 작성된 페이지',
'recently_updated_pages' => '최근 업데이트된 페이지',
'recently_created_chapters' => '최근 만들어진 챕터',
'recently_created_books' => '최근 만들어진 책',
'recently_update' => '최근 작성',
'recently_viewed' => '검색 기록',
'recent_activity' => '최근 활동',
'create_now' => '지금 만들기',
'revisions' => '변경이력',
'meta_revision' => '수정 #:revisionCount',
'meta_created' => '작성: :timeLength',
'meta_created_name' => '작성: :timeLength by :user',
'meta_updated' => '업데이트 :timeLength',
'meta_updated_name' => '업데이트 :timeLength by :user',
'entity_select' => '엔티티선택',
'images' => '이미지',
'my_recent_drafts' => '내 최근 초안',
'my_recently_viewed' => '검색 기록',
'no_pages_viewed' => '조회한 페이지가 없습니다.',
'no_pages_recently_created' => '최근 만들어진 페이지가 없습니다',
'no_pages_recently_updated' => '최근 업데이트된 페이지가없습니다',
'export' => '내보내기',
'export_html' => 'html 내보내기',
'export_pdf' => 'PDF 파일',
'export_text' => '일반 텍스트 파일',
/**
* Permissions and restrictions
*/
'permissions' => '권한',
'permissions_intro' => '이 설정은 각 사용자의 역할보다 우선하여 적용됩니다.',
'permissions_enable' => '커스텀 권한 활성화',
'permissions_save' => '권한 저장',
/**
* Search
*/
'search_results' => '검색 결과',
'search_total_results_found' => ':count 개의 결과를 찾았습니다.|총 :count 개의 결과를 찾았습니다.',
'search_clear' => '검색기록 초기화',
'search_no_pages' => '검색결과가 없습니다.',
'search_for_term' => ':term 을(를) 검색합니다.',
'search_more' => '결과 더보기',
'search_filters' => '검색 필터',
'search_content_type' => '컨텐츠 타입',
'search_exact_matches' => '정확히 일치합니다.',
'search_tags' => '테그 검색',
'search_options' => '설정',
'search_viewed_by_me' => '내가본것',
'search_not_viewed_by_me' => '내가안본것',
'search_permissions_set' => '권한 설정',
'search_created_by_me' => '내가 만듦',
'search_updated_by_me' => '내가 업데이트함',
'search_date_options' => '날짜 설정',
'search_updated_before' => '이전에 업데이트함',
'search_updated_after' => '이후에 업데이트함',
'search_created_before' => '이전에 생성함',
'search_created_after' => '이후에 생성함',
'search_set_date' => '날짜 설정',
'search_update' => '검색 업데이트',
/**
* Shelves
*/
'shelf' => '책꽃이',
'shelves' => '책꽃이',
'shelves_long' => '책꽃이',
'shelves_empty' => '책꽃이가 만들어지지 않았습니다.',
'shelves_create' => '새책꽃이 만들기',
'shelves_popular' => '인기있는 책꽃이',
'shelves_new' => '새로운 책꽃이',
'shelves_popular_empty' => '인기있는 책꽃이가 여기에 나타납니다.',
'shelves_new_empty' => '가장 최근에 만들어진 책꽃이가 여기에 나타납니다.',
'shelves_save' => '책꽃이 저장',
'shelves_books' => '이 책꽃이에 있는 책',
'shelves_add_books' => '이 책꽃이에 책을 추가합니다',
'shelves_drag_books' => '이 책꽃이에 책을 추가하기 위해 끌어놓으세요.',
'shelves_empty_contents' => '이책꽃이엔 등록된 책이 없습니다.',
'shelves_edit_and_assign' => '책을 등록하기 위해 책꽃이를 수정',
'shelves_edit_named' => ':name 책꽃이 수정',
'shelves_edit' => '책꽃이 수정',
'shelves_delete' => '책꽃이 삭제',
'shelves_delete_named' => ':name 책꽃이를 삭제합니다.',
'shelves_delete_explain' => "':name' 이름의 책꽃이가 삭제됩니다. 포함된 책은 삭제되지 않습니다.",
'shelves_delete_confirmation' => '이 책꽃이를 삭제하시겠습니까?',
'shelves_permissions' => '책꽃이 권한',
'shelves_permissions_updated' => '책꽃이 권한이 업데이트 되었습니다.',
'shelves_permissions_active' => '책꽃이 권한 활성화',
'shelves_copy_permissions_to_books' => '책에 권한을 복사합니다.',
'shelves_copy_permissions' => '권한 복사',
'shelves_copy_permissions_explain' => '이 책꽂이의 현재 권한 설정이 안에 포함 된 모든 책에 적용됩니다. 활성화하기 전에이 책꽂이의 사용 권한이 변경되었는지 확인하십시오.',
'shelves_copy_permission_success' => '책꽃이의 권한이 :count 개의 책에 복사되었습니다.',
/**
* Books
*/
'book' => '책',
'books' => '책들',
'x_books' => ':count 책|:count 책들',
'books_empty' => '책이 만들어지지 않았습니다.',
'books_popular' => '인기있는 책',
'books_recent' => '최근 책',
'books_new' => '새로운 책',
'books_popular_empty' => '가장 인기있는 책이 여기에 보입니다.',
'books_new_empty' => '가장 최근에 만든 책이 여기에 표시됩니다.',
'books_create' => '새로운 책 만들기',
'books_delete' => '책 삭제하기',
'books_delete_named' => ':bookName 책 삭제하기',
'books_delete_explain' => '\':bookName\' 이름의 책이 삭제됩니다. 모든 페이지와 챕터가 삭제됩니다.',
'books_delete_confirmation' => '이 책을 삭제 하시겠습니까?',
'books_edit' => '책 수정',
'books_edit_named' => ':bookName 책 수정',
'books_form_book_name' => '책 이름',
'books_save' => '책 저장',
'books_permissions' => '책 권한',
'books_permissions_updated' => '책 권한이 업데이트 되었습니다.',
'books_empty_contents' => '이 책에 대한 페이지 또는 장이 작성되지 않았습니다.',
'books_empty_create_page' => '새로운 페이지 만들기',
'books_empty_or' => '또는',
'books_empty_sort_current_book' => '현제 책 정렬하기',
'books_empty_add_chapter' => '챕터 추가하기',
'books_permissions_active' => '책 권한 활성화',
'books_search_this' => '이책 찾기',
'books_navigation' => '책 네비게이션',
'books_sort' => '책 구성 정렬하기',
'books_sort_named' => ':bookName 책 정렬하기',
'books_sort_show_other' => '다른책 보기',
'books_sort_save' => '새로운 순서 저장',
/**
* Chapters
*/
'chapter' => '챕터',
'chapters' => '챕터',
'x_chapters' => ':count 개 챕터|:count 챔터들',
'chapters_popular' => '인기있는 챕터',
'chapters_new' => '새로운 챕처',
'chapters_create' => '새로운 챕터 만들기',
'chapters_delete' => '챕터 삭제',
'chapters_delete_named' => ':chapterName 챕터 지우기',
'chapters_delete_explain' => '\':chapterName\' 챕터를 지웁니다. 챕터에서 모든 페이지가 삭제되며 페이지가 상위 책에 추가됩니다.',
'chapters_delete_confirm' => '정말로 챕터를 지우시겠습니따?',
'chapters_edit' => '챕터 수정',
'chapters_edit_named' => ':chapterName 챕터 수정',
'chapters_save' => '챕터 저장',
'chapters_move' => '챕터 이동',
'chapters_move_named' => ':chapterName 챕터 이동',
'chapter_move_success' => ':bookName 으로 챕터를 이동하였습니다.',
'chapters_permissions' => '챕터 권한',
'chapters_empty' => '챕터에 포함된 페이지가 없습니다.',
'chapters_permissions_active' => '챕터 권한 활동',
'chapters_permissions_success' => '챕터 권한 수정됨',
'chapters_search_this' => '이 챕터 찾기',
/**
* Pages
*/
'page' => '페이지',
'pages' => '페이지들',
'x_pages' => ':count 개의 페이지|:count 개의 페이지들',
'pages_popular' => '인기있는 페이지',
'pages_new' => '새로운 페이지',
'pages_attachments' => '첨부파일',
'pages_navigation' => '페이지 네비게이션',
'pages_delete' => '페이지 지우기',
'pages_delete_named' => ':pageName 페이지 지우기',
'pages_delete_draft_named' => ':pageName 초안 페이지 지우기',
'pages_delete_draft' => '초안 페이지 지우기',
'pages_delete_success' => '페이지 삭제됨',
'pages_delete_draft_success' => '초안페이지 삭제됨',
'pages_delete_confirm' => '정말로 이 페이지를 지우시겠습니까?',
'pages_delete_draft_confirm' => '정말로 초안페이지를 지우시겠습니까?',
'pages_editing_named' => ':pageName 페이지 수정',
'pages_edit_toggle_header' => '헤더 숨김/보이기',
'pages_edit_save_draft' => '초안 저장',
'pages_edit_draft' => '페이지 초안 수정',
'pages_editing_draft' => '초안 수정중',
'pages_editing_page' => '페이지 수정중',
'pages_edit_draft_save_at' => '초안이 저장됨 ',
'pages_edit_delete_draft' => '초안 삭제',
'pages_edit_discard_draft' => '초안 버리기',
'pages_edit_set_changelog' => '변경내역 남기기',
'pages_edit_enter_changelog_desc' => '어떤 내용에 대하여 변경하셨나요?',
'pages_edit_enter_changelog' => '변경내역 입력',
'pages_save' => '페이지 저장',
'pages_title' => '페이지 제목',
'pages_name' => '페이지 이름',
'pages_md_editor' => '편집자',
'pages_md_preview' => 'Preview',
'pages_md_insert_image' => '이미지 삽입',
'pages_md_insert_link' => '전체링크 입력',
'pages_md_insert_drawing' => '드로잉 넣기',
'pages_not_in_chapter' => '페이지가 챕터에 있지않습니다.',
'pages_move' => '페이지 옮기기',
'pages_move_success' => '":parentName"로 페이지를 이동하였습니다.',
'pages_copy' => '페이지 복사',
'pages_copy_desination' => '경로(desination) 복사',
'pages_copy_success' => '페이지가 성공적으로 복사되었습니다',
'pages_permissions' => '페이지 권한',
'pages_permissions_success' => '페이지 권한이 업데이트 되었습니다.',
'pages_revision' => '변경이력',
'pages_revisions' => '페이지 변경이력',
'pages_revisions_named' => ':pageName페이지의 변경이력내역',
'pages_revision_named' => ':pageName페이지의 변경이력',
'pages_revisions_created_by' => 'Created By',
'pages_revisions_date' => '변경일',
'pages_revisions_number' => '#',
'pages_revisions_changelog' => '변경내역',
'pages_revisions_changes' => '변경사항 보기',
'pages_revisions_current' => '현재 버전',
'pages_revisions_preview' => '미리보기',
'pages_revisions_restore' => '되돌리기',
'pages_revisions_none' => '이 페이지에는 변경이력이 없습니다.',
'pages_copy_link' => '링크복사',
'pages_edit_content_link' => '링크 수정',
'pages_permissions_active' => '페이지 권한 활성화',
'pages_initial_revision' => '최초 작성',
'pages_initial_name' => '새 페이지',
'pages_editing_draft_notification' => ':timeDiff 전에 저장된 초안을 최근 편집하셨습니다.',
'pages_draft_edited_notification' => '이 페이지는 그 이후로 업데이트되었습니다. 이 초안을 폐기하는 것이 좋습니다.',
'pages_draft_edit_active' => [
'start_a' => ':count명의 사용자가 이 페이지를 수정중입니다.',
'start_b' => ':userName가(이) 페이지를 수정중입니다.',
'time_a' => '페이지가 마지막으로 업데이트 된 이후',
'time_b' => '지난 :minCount분 동안',
'message' => ':start :time. 서로의 업데이트를 덮어 쓰지 않도록 주의하십시오!',
],
'pages_draft_discarded' => '초안이 삭제되었습니다. 편집기가 현재 페이지 작성자로 업데이트되었습니다.',
'pages_specific' => '특정 페이지',
/**
* Editor sidebar
*/
'page_tags' => '페이지 테그',
'chapter_tags' => '챕터 테그',
'book_tags' => '책 테그',
'shelf_tags' => '책꽃이 테그',
'tag' => '테그',
'tags' => '테그들',
'tag_value' => '테그 값 (선택사항)',
'tags_explain' => "컨텐츠를 더 잘 분류하기 위해 테그를 추가하세요! \n 보다 상세한 구성을 위해 태그값을 할당 할 수 있습니다.",
'tags_add' => '다른 테그 추가',
'attachments' => '첨부',
'attachments_explain' => '일부 파일을 업로드하거나 페이지에 표시 할 링크를 첨부하십시오. 페이지 사이드 바에 표시됩니다.',
'attachments_explain_instant_save' => '변경 사항은 즉시 저장됩니다.',
'attachments_items' => '첨부된 항목',
'attachments_upload' => '차일 업로드',
'attachments_link' => '링크 첨부',
'attachments_set_link' => '링크 설정',
'attachments_delete_confirm' => '삭제를 다시 클릭하면 첨부파일이 완전히 삭제됩니다.',
'attachments_dropzone' => '파일 놓기 또는 여기를 클릭하여 파일 첨부',
'attachments_no_files' => '업로드 된 파일이 없습니다.',
'attachments_explain_link' => '파일을 업로드하지 않으려는 경우 링크를 첨부 할 수 있습니다. 이 링크는 다른 페이지에 대한 링크이거나 클라우드에있는 파일에 대한 링크 일 수 있습니다.',
'attachments_link_name' => '링크 이름',
'attachment_link' => '첨부 링크',
'attachments_link_url' => '파일로 첨부',
'attachments_link_url_hint' => 'Url, 사이트 또는 파일',
'attach' => '첨부',
'attachments_edit_file' => '파일 수정',
'attachments_edit_file_name' => '파일이름',
'attachments_edit_drop_upload' => '파일을 놓거나 여기를 클릭하여 업로드 및 덮어 쓰기',
'attachments_order_updated' => '첨부 순서 업데이트',
'attachments_updated_success' => '첨부파일 상세내용 업데이트 성공',
'attachments_deleted' => '첨부파일 삭제',
'attachments_file_uploaded' => '파일이 성공적으로 업로드 되었습니다.',
'attachments_file_updated' => '파일이 성공적으로 업데이트 되었습니다.',
'attachments_link_attached' => '링크가 성공적으로 페이지에 첨부되었습니다.',
/**
* Profile View
*/
'profile_user_for_x' => ':time 전에 작성',
'profile_created_content' => '생성한 컨텐츠',
'profile_not_created_pages' => ':userName가 작성한 페이지가 없습니다.',
'profile_not_created_chapters' => ':userName가 작성한 챕터가 없습니다.',
'profile_not_created_books' => ':userName가 작성한 책이 없습니다.',
/**
* Comments
*/
'comment' => '코멘트',
'comments' => '코멘트들',
'comment_add' => '코멘트 추가',
'comment_placeholder' => '여기에 코멘트를 남기세요',
'comment_count' => '{0} 코멘트 없음|{1} 1개 코멘트|[2,*] :count개의 코멘트',
'comment_save' => '코멘트 저장',
'comment_saving' => '코멘트 저장중...',
'comment_deleting' => '코멘트 삭제중...',
'comment_new' => '새로운 코멘트',
'comment_created' => '코멘트를 작성하였습니다. :createDiff',
'comment_updated' => ':username이 코멘트를 수정하였습니다 :updateDiff',
'comment_deleted_success' => '코멘트 삭제성공',
'comment_created_success' => '코멘트 추가성공',
'comment_updated_success' => '코멘트 업데이트 성공',
'comment_delete_confirm' => '정말로 코멘트를 지우시겠습니까?',
'comment_in_reply_to' => ':commentId 응답',
/**
* Revision
*/
'revision_delete_confirm' => '해당 개정판을 지우시겠습니까??',
'revision_delete_success' => '개정판 삭제성공',
'revision_cannot_delete_latest' => '최신버전은 지울수 없습니다.'
];

View File

@ -0,0 +1,83 @@
<?php
return [
/**
* Error text strings.
*/
// Permissions
'permission' => '요청한 페이지에 권한이 없습니다.',
'permissionJson' => '요청한 작업을 수행 할 권한이 없습니다.',
// Auth
'error_user_exists_different_creds' => '전자 메일 :email을 가진 사용자가 이미 존재하지만 자격 증명이 다릅니다.',
'email_already_confirmed' => '이메일이 이미 확인되었습니다. 로그인 해주세요.',
'email_confirmation_invalid' => '이 확인 토큰이 유효하지 않거나 이미 사용되었습니다. 다시 등록하세요.',
'email_confirmation_expired' => '확인 토큰이 만료되었습니다. 새 확인 이메일이 전송되었습니다.',
'ldap_fail_anonymous' => '익명 바인드를 이용한 LDAP 액세스에 실패하였습니다.',
'ldap_fail_authed' => '주어진 dn 및 비밀번호 세부 정보를 사용하여 LDAP 액세스하는 것이 실패했습니다.',
'ldap_extension_not_installed' => 'LDAP PHP 확장기능이 설치되지 않았습니다.',
'ldap_cannot_connect' => 'LDAP 서버에 연결할 수 없습니다. 초기 연결에 실패했습니다.',
'social_no_action_defined' => '동작이 정의되지 않았습니다.',
'social_login_bad_response' => ":socialAccount 로그인에 실패하였습니다 : \n:error",
'social_account_in_use' => '이 :socialAccount 계정이 이미 사용 중입니다. :socialAccount 옵션을 통해 로그인하십시오.',
'social_account_email_in_use' => ' 이메일 :email이 이미 사용 중입니다. 이미 계정이있는 경우 프로필 설정에서 :socialAccount 계정을 연결할 수 있습니다.',
'social_account_existing' => ':socialAccount가 이미 프로필에 첨부되어 있습니다.',
'social_account_already_used_existing' => '이 :socialAccount 계정은 이미 다른 사용자가 사용하고 있습니다.',
'social_account_not_used' => '이 :socialAccount 계정이 모든 사용자에게 연결되어 있지 않습니다. 프로필 설정에 첨부하십시오. ',
'social_account_register_instructions' => '아직 계정이없는 경우 :socialAccount 옵션을 사용하여 계정을 등록 할 수 있습니다.',
'social_driver_not_found' => '소셜 드라이버를 찾을 수 없음',
'social_driver_not_configured' => '귀하의 :socialAccount 소셜 설정이 올바르게 구성되지 않았습니다.',
// System
'path_not_writable' => '파일 경로 :filePath에 업로드 할 수 없습니다. 서버에 쓰기 기능이 활성화 되어있는지 확인하세요.',
'cannot_get_image_from_url' => ':url에서 이미지를 가져올 수 없습니다.',
'cannot_create_thumbs' => '서버에서 썸네일을 생성할 수 없습니다. GD PHP확장기능이 설치되어있는지 확인하세요.',
'server_upload_limit' => '해당 크기의 파일을 업로드하는것이 서버에서 제한됩니다. 파일 사이즈를 작게 줄이거나 서버 설정을 변경하세요.',
'uploaded' => '해당 크기의 파일을 업로드하는것이 서버에서 제한됩니다. 파일 사이즈를 작게 줄이거나 서버 설정을 변경하세요.',
'image_upload_error' => '이미지를 업로드하는 중에 오류가 발생했습니다.',
'image_upload_type_error' => '업로드중인 이미지 유형이 잘못되었습니다.',
// Attachments
'attachment_page_mismatch' => '첨부 파일 업데이트 중 페이지 불일치하였습니다.',
'attachment_not_found' => '첨부 파일을 찾을 수 없습니다.',
// Pages
'page_draft_autosave_fail' => '초안을 저장하지 못했습니다. 이 페이지를 저장하기 전에 인터넷에 연결되어 있는지 확인하십시오.',
'page_custom_home_deletion' => '홈페이지로 설정되어있는 페이지는 삭제할 수 없습니다.',
// Entities
'entity_not_found' => '개체(Entity)를 찾을 수 없음.',
'bookshelf_not_found' => '책꽂이를 찾을 수 없음.',
'book_not_found' => '책을 찾을 수 없음.',
'page_not_found' => '페이지를 찾을 수 없음.',
'chapter_not_found' => '챕터를 찾을 수 없음.',
'selected_book_not_found' => '선택한 책을 찾을 수 없습니다.',
'selected_book_chapter_not_found' => '선택한 책 또는 챕터를 찾을 수 없습니다.',
'guests_cannot_save_drafts' => '게스트는 임시저장을 할 수 없습니다.',
// Users
'users_cannot_delete_only_admin' => '어드민 계정은 삭제할 수 없습니다.',
'users_cannot_delete_guest' => '게스트 사용자는 삭제할 수 없습니다.',
// Roles
'role_cannot_be_edited' => '역할을 수정할 수 없습니다.',
'role_system_cannot_be_deleted' => '이 역할은 시스템 역할입니다. 삭제할 수 없습니다.',
'role_registration_default_cannot_delete' => '이 역할은 기본 등록 역할로 설정되어있는 동안 삭제할 수 없습니다.',
// Comments
'comment_list' => '댓글을 가져 오는 중에 오류가 발생했습니다.',
'cannot_add_comment_to_draft' => '초안에 주석을 추가 할 수 없습니다.',
'comment_add' => '댓글을 추가 / 업데이트하는 중에 오류가 발생했습니다.',
'comment_delete' => '댓글을 삭제하는 중에 오류가 발생했습니다.',
'empty_comment' => '빈 주석을 추가 할 수 없습니다.',
// Error pages
'404_page_not_found' => '페이지를 찾을 수 없습니다.',
'sorry_page_not_found' => '죄송합니다, 찾고 있던 페이지를 찾을 수 없습니다.',
'return_home' => 'home으로 가기',
'error_occurred' => '오류가 발생하였습니다.',
'app_down' => ':appName가 다운되었습니다.',
'back_soon' => '곧 복구될 예정입니다.',
];

View File

@ -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' => '&laquo; 이전',
'next' => '다음 &raquo;',
];

View File

@ -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' => '비밀번호는 6자 이상이어야 하며 확인과 일치해야 합니다.',
'user' => "해당 이메일 주소의 사용자가 없습니다.",
'token' => '해당 비밀번호의 초기화 토큰이 만료되었습니다.',
'sent' => '페스워드 초기화 링크를 메일로 보냈습니다!',
'reset' => '비밀번호가 초기화 되었습니다!',
];

124
resources/lang/kr/settings.php Executable file
View File

@ -0,0 +1,124 @@
<?php
return [
/**
* Settings text strings
* Contains all text strings used in the general settings sections of BookStack
* including users and roles.
*/
'settings' => '설정',
'settings_save' => '설정 저장',
'settings_save_success' => '설정이 저장되었습니다.',
/**
* App settings
*/
'app_settings' => '앱 설정',
'app_name' => '어플리케이션 이름',
'app_name_desc' => '해당 이름은 헤더와 모든 이메일에 표시됩니다.',
'app_name_header' => '헤더에 어플리케이션 이름을 표시하시겠습니까?',
'app_public_viewing' => '공개 보기를 허용하시겠습니까?',
'app_secure_images' => '더 높은 보안 이미지 업로드를 사용하시겠습니까?',
'app_secure_images_desc' => '성능상의 이유로 모든 이미지를 공개합니다. 해당 옵션은 이미지 URL 앞에 추측하기 어려운 임의의 문자열을 추가합니다. 간편한 접근을 방지하기 위해 디렉토리 색인을 비활성화하십시오.',
'app_editor' => '페이지 에디터',
'app_editor_desc' => '모든 사용자가 페이지를 편집하는데 사용할 에디터를 선택하십시오.',
'app_custom_html' => '사용자 정의 HTML 헤드 컨텐츠',
'app_custom_html_desc' => '여기에 추가된 모든 내용은 모든 페이지의 <head> 섹션 아래쪽에 삽입됩니다. 이는 스타일 오버라이딩이나 분석 코드 삽입에 편리합니다.',
'app_logo' => '어플리케이션 로고',
'app_logo_desc' => '해당 이미지는 반드시 높이가 43픽셀이어야 합니다. <br>대용량 이미지는 축소됩니다.',
'app_primary_color' => '어플리케이션 기본 색상',
'app_primary_color_desc' => '해당 값은 16진수이어야 합니다. <br>입력하지 않으면 기본 색상으로 재설정됩니다.',
'app_homepage' => '어플리케이션 홈페이지',
'app_homepage_desc' => '기본 화면 대신에 홈페이지에 표시할 화면을 선택하십시오. 선택된 페이지에서는 페이지 권한이 무시됩니다.',
'app_homepage_select' => '페이지를 선택하십시오',
'app_disable_comments' => '주석 비활성화',
'app_disable_comments_desc' => '어플리케이션의 모든 페이지에서 주석을 비활성화합니다. 기존의 주석은 표시되지 않습니다.',
/**
* Registration settings
*/
'reg_settings' => '등록 설정',
'reg_allow' => '등록을 허가하시겠습니까?',
'reg_default_role' => '등록 후 기본 사용자 역할',
'reg_confirm_email' => '이메일 확인을 요구하시겠습니까?',
'reg_confirm_email_desc' => '도메인 제한이 사용되면 이메일 확인이 요구되며, 하단의 값은 무시됩니다.',
'reg_confirm_restrict_domain' => '도메인 등록 제한',
'reg_confirm_restrict_domain_desc' => '등록을 제한할 이메일 도메인의 목록을 쉼표로 구분하여 입력해주십시오. 사용자는 어플리케이션과의 상호작용을 허가받기 전에 이메일 주소를 확인하는 이메일을 받게 됩니다, <br> 등록이 완료된 후에는 이메일 주소를 변경할 수 있습니다.',
'reg_confirm_restrict_domain_placeholder' => '제한 없음 설정',
/**
* Maintenance settings
*/
'maint' => 'Maintenance',
'maint_image_cleanup' => '이미지 정리',
'maint_image_cleanup_desc' => "페이지를 스캔하여 현재 사용중인 이미지와 도면에서 수정된 내용 및 중복된 이미지를 확인합니다. 이를 실행하기 전에 전체 데이터베이스와 이미지의 백업을 작성했는지 확인하십시오.",
'maint_image_cleanup_ignore_revisions' => '수정본의 이미지를 무시합니다.',
'maint_image_cleanup_run' => '정리 실행',
'maint_image_cleanup_warning' => '잠재적으로 사용되지 않는 이미지를 찾았습니다. 해당 이미지들을 삭제하시겠습니까?',
'maint_image_cleanup_success' => ':잠재적으로 사용되지 않는 이미지들이 삭제되었습니다.',
'maint_image_cleanup_nothing_found' => '사용되지 않는 이미지를 찾을 수 없습니다. 아무것도 삭제되지 않았습니다.',
/**
* Role settings
*/
'roles' => '역할',
'role_user_roles' => '사용자 역할',
'role_create' => '신규 역할 생성',
'role_create_success' => '역할이 생성되었습니다.',
'role_delete' => '역할을 삭제합니다.',
'role_delete_confirm' => '\':roleName\'(이)라는 이름의 역할이 삭제됩니다.',
'role_delete_users_assigned' => '해당 역할에 :userCount 명의 사용자가 할당되어 있습니다. 이 역할로부터 사용자를 재할당하고 싶다면 아래에서 새 역할을 선택하십시오.',
'role_delete_no_migration' => "사용자 재배치 안함",
'role_delete_sure' => '이 역할을 삭제하시겠습니까?',
'role_delete_success' => '역할이 삭제되었습니다.',
'role_edit' => '역할 편집',
'role_details' => '역할 상세정보',
'role_name' => '역할명',
'role_desc' => '역할에 대한 간략한 설명',
'role_external_auth_id' => '외부 인증 ID',
'role_system' => '시스템 권한',
'role_manage_users' => '사용자 관리',
'role_manage_roles' => '역할 및 역할 권한 관리',
'role_manage_entity_permissions' => '모든 책, 챕터, 페이지 관리',
'role_manage_own_entity_permissions' => '보유한 책, 챕터, 페이지에 대한 권한 관리',
'role_manage_settings' => '어플리케이선 설정 관리',
'role_asset' => '자산 관리',
'role_asset_desc' => '해당 권한들은 시스템 내의 Assets 파일에 대한 기본적인 접근을 제어합니다.',
'role_asset_admins' => '관리자는 모든 컨텐츠에 대한 접근 권한을 자동으로 부여받지만, 해당 옵션들은 UI 옵션을 표시하거나 숨길 수 있습니다.',
'role_all' => '전체',
'role_own' => '보유한 것만',
'role_controlled_by_asset' => '업로드된 Assets 파일에 의해 제어됩니다.',
'role_save' => '역할 저장',
'role_update_success' => '역할이 업데이트되었습니다.',
'role_users' => '해당 역할의 사용자',
'role_users_none' => '현재 이 역할에 할당된 사용자가 없습니다.',
/**
* Users
*/
'users' => '사용자',
'user_profile' => '사용자 프로필',
'users_add_new' => '사용자 추가',
'users_search' => '사용자 검색',
'users_role' => '사용자 역할',
'users_external_auth_id' => '외부 인증 ID',
'users_password_warning' => '비밀번호를 변경하시려면 다음을 입력하십시오:',
'users_system_public' => '이 사용자는 당신의 인스턴스를 방문하는 게스트 사용자를 나타냅니다. 로그인하는 데는 사용할 수 없지만 자동으로 할당됩니다.',
'users_delete' => '사용자 삭제',
'users_delete_named' => '사용자 :userName 삭제',
'users_delete_warning' => '시스템에서 \':userName\'(이)라는 사용자가 완전히 삭제됩니다.',
'users_delete_confirm' => '이 사용자를 삭제하시겠습니까?',
'users_delete_success' => '사용자가 삭제되었습니다.',
'users_edit' => '사용자 편집',
'users_edit_profile' => '프로필 편집',
'users_edit_success' => '사용자가 업데이트되었습니다.',
'users_avatar' => '사용자 아바타',
'users_avatar_desc' => '해당 이미지는 256픽셀의 정사각형 이미지여야합니다.',
'users_preferred_language' => '선호하는 언어',
'users_social_accounts' => '소셜 계정',
'users_social_accounts_info' => '여기에서 다른 계정을 연결하여 더 빠르고 쉽게 로그인할 수 있습니다. 여기에서 계정 연결을 해제하면 이전에 승인된 접근이 제공되지 않습니다 연결된 소셜 계정의 프로필 설정에서 접근 권한을 취소하십시오.',
'users_social_connect' => '계정 연결',
'users_social_disconnect' => '계정 연결 해제',
'users_social_connected' => ':socialAccount 계정이 당신의 프로필에 연결되었습니다.',
'users_social_disconnected' => ':socialAccount 계정이 당신의 프로필에서 연결해제되었습니다.',
];

View File

@ -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가 반드시 허용되어야 합니다.',
'active_url' => ':attribute가 올바른 URL이 아닙니다.',
'after' => ':attribute는 :date이후 날짜여야 합니다.',
'alpha' => ':attribute는 문자만 포함해야 합니다.',
'alpha_dash' => ':attribute는 문자, 숫자, 대시만 포함해야 합니다.',
'alpha_num' => ':attribute는 문자와 숫자만 포함됩니다.',
'array' => ':attribute는 배열이어야 합니다.',
'before' => ':attribute는 :date이전 날짜여야 합니다.',
'between' => [
'numeric' => ':attribute는 반드시 :min이상 :max이하여야 합니다.',
'file' => ':attribute는 반드시 :min이상 :max kilobytes이하여야 합니다.',
'string' => ':attribute는 반드시 :min이상 :max 문자 이하여야 합니다.',
'array' => ':attribute는 반드시 :min이상 :max이하 항목이어야 합니다.',
],
'boolean' => ':attribute 는 true혹은 false값만 가능합니다.',
'confirmed' => ':attribute 확인이 일치하지 않습니다.',
'date' => ':attribute 는 잘못된 날짜입니다.',
'date_format' => ':attribute 이 :format 포멧과 일치하지 않습니다.',
'different' => ':attribute 와 :other는 반드시 달라야 합니다.',
'digits' => ':attribute 는 반드시 :digits 숫자(digit)여야 합니다.',
'digits_between' => ':attribute 는 반드시 :min이상 :max이하 숫자여야 합니다.',
'email' => ':attribute 는 반드시 이메일 이어야 합니다.',
'filled' => ':attribute 항목이 꼭 필요합니다.',
'exists' => '선택된 :attribute 은(는) 사용 불가합니다.',
'image' => ':attribute 는 반드시 이미지여야 합니다.',
'in' => '선택된 :attribute 은(는) 사용 불가합니다.',
'integer' => ':attribute 는 반드시(integer)여야 합니다.',
'ip' => ':attribute 는 반드시 IP주소 여야 합니다.',
'max' => [
'numeric' => ':attribute :max 보다 크면 안됩니다.',
'file' => ':attribute :max kilobytes보다 크면 안됩니다.',
'string' => ':attribute :max 문자보다 길면 안됩니다.',
'array' => ':attribute :max 를 초과하면 안됩니다.',
],
'mimes' => ':attribute 은(는) 반드시 :values 타입이어야 합니다.',
'min' => [
'numeric' => ':attribute 은(는) 최소한 :min 이어야 합니다.',
'file' => ':attribute 은(는) 최소한 :min kilobytes여야 합니다.',
'string' => ':attribute 은(는) 최소한 :min 개 문자여야 합니다.',
'array' => ':attribute 은(는) 적어도 :min 개의 항목이어야 합니다.',
],
'not_in' => '선택된 :attribute 는 사용할 수 없습니다',
'numeric' => ':attribute 반드시 숫자여야 합니다.',
'regex' => ':attribute 포멧이 잘못되었습니다.',
'required' => ':attribute 항목은 필수입니다..',
'required_if' => ':attribute 은(는) :other 가 :value 일때 필수항목입니다.',
'required_with' => ':attribute 은(는) :values 가 있을때 필수항목입니다.',
'required_with_all' => ':attribute 은(는) :values 가 있을때 필수항목입니다.',
'required_without' => ':attribute 은(는) :values 가 없을때 필수항목입니다.',
'required_without_all' => ':attribute 은(는) :values 가 전혀 없을때 필수항목입니다.',
'same' => ':attribute 와 :other 은(는) 반드시 일치해야합니다.',
'size' => [
'numeric' => ':attribute 은(는) :size 여야합니다.',
'file' => ':attribute 은(는) :size kilobytes여야합니다.',
'string' => ':attribute 은(는) :size 문자여야합니다.',
'array' => ':attribute 은(는) :size 개 항목을 포함해야 합니다.',
],
'string' => ':attribute 문자열이어야 합니다.',
'timezone' => ':attribute 정상적인 지역(zone)이어야 합니다.',
'unique' => ':attribute 은(는) 이미 사용중입니다..',
'url' => ':attribute 포멧이 사용 불가합니다.',
/*
|--------------------------------------------------------------------------
| 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' => '비밀번호 확인이 필요합니다.',
],
],
/*
|--------------------------------------------------------------------------
| 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' => [],
];

View File

@ -37,6 +37,14 @@ return [
'book_sort' => 'livro classificado',
'book_sort_notification' => 'Livro reclassificado com sucesso',
// Bookshelves
'bookshelf_create' => 'prateleira de livros criada',
'bookshelf_create_notification' => 'Prateleira de Livros criada com sucesso',
'bookshelf_update' => 'prateleira de livros atualizada',
'bookshelf_update_notification' => 'Prateleira de Livros atualizada com sucesso',
'bookshelf_delete' => 'prateleira de livros excluída',
'bookshelf_delete_notification' => 'Prateleira de Livros excluída com sucesso',
// Other
'commented_on' => 'comentou em',
];

View File

@ -52,6 +52,7 @@ return [
'details' => 'Detalhes',
'grid_view' => 'Visualização em Grade',
'list_view' => 'Visualização em Lista',
'default' => 'Padrão',
/**
* Header

View File

@ -52,11 +52,13 @@ return [
'search_content_type' => 'Tipo de Conteúdo',
'search_exact_matches' => 'Correspondências Exatas',
'search_tags' => 'Tags',
'search_options' => 'Opções',
'search_viewed_by_me' => 'Visto por mim',
'search_not_viewed_by_me' => 'Não visto por mim',
'search_permissions_set' => 'Permissão definida',
'search_created_by_me' => 'Criado por mim',
'search_updated_by_me' => 'Atualizado por mim',
'search_date_options' => 'Opções de Data',
'search_updated_before' => 'Atualizado antes de',
'search_updated_after' => 'Atualizado depois de',
'search_created_before' => 'Criado antes de',
@ -64,6 +66,38 @@ return [
'search_set_date' => 'Definir data',
'search_update' => 'Refazer Pesquisa',
/**
* Shelves
*/
'shelf' => 'Prateleira',
'shelves' => 'Prateleiras',
'shelves_long' => 'Prateleiras de Livros',
'shelves_empty' => 'Nenhuma prateleira foi criada',
'shelves_create' => 'Criar nova Prateleira',
'shelves_popular' => 'Prateleiras populares',
'shelves_new' => 'Prateleiras novas',
'shelves_popular_empty' => 'As prateleiras mais populares aparecerão aqui.',
'shelves_new_empty' => 'As prateleiras criadas mais recentemente aparecerão aqui.',
'shelves_save' => 'Salvar Prateleira',
'shelves_books' => 'Livros nesta prateleira',
'shelves_add_books' => 'Adicionar livros a esta prateleira',
'shelves_drag_books' => 'Arraste livros aqui para adicioná-los a esta prateleira',
'shelves_empty_contents' => 'Esta prateleira não possui livros atribuídos a ela',
'shelves_edit_and_assign' => 'Edit shelf to assign books',
'shelves_edit_named' => 'Editar Prateleira de Livros :name',
'shelves_edit' => 'Edit Prateleira de Livros',
'shelves_delete' => 'Excluir Prateleira de Livros',
'shelves_delete_named' => 'Excluir Prateleira de Livros :name',
'shelves_delete_explain' => "A ação vai excluír a prateleira de livros com o nome ':name'. Livros contidos não serão excluídos",
'shelves_delete_confirmation' => 'Você tem certeza que quer excluir esta prateleira de livros?',
'shelves_permissions' => 'Permissões da Prateleira de Livros',
'shelves_permissions_updated' => 'Permissões da Prateleira de Livros Atualizada',
'shelves_permissions_active' => 'Permissões da Prateleira de Livros Ativadas',
'shelves_copy_permissions_to_books' => 'Copiar Permissões para Livros',
'shelves_copy_permissions' => 'Copiar Permissões',
'shelves_copy_permissions_explain' => 'Isto aplicará as configurações de permissões atuais desta prateleira de livros a todos os livros contidos nela. Antes de ativar, assegure-se de que quaisquer alterações nas permissões desta prateleira de livros tenham sido salvas.',
'shelves_copy_permission_success' => 'Permissões da prateleira de livros copiada para :count livros',
/**
* Books
*/
@ -199,6 +233,7 @@ return [
'message' => ':start :time. Tome cuidado para não sobrescrever atualizações de outras pessoas!',
],
'pages_draft_discarded' => 'Rascunho descartado. O editor foi atualizado com a página atualizada',
'pages_specific' => 'Página Específica',
/**
* Editor sidebar
@ -206,6 +241,7 @@ return [
'page_tags' => 'Tags de Página',
'chapter_tags' => 'Tags de Capítulo',
'book_tags' => 'Tags de Livro',
'shelf_tags' => 'Tags de Prateleira',
'tag' => 'Tag',
'tags' => '',
'tag_value' => 'Valor da Tag (Opcional)',

View File

@ -49,6 +49,7 @@ return [
// Entities
'entity_not_found' => 'Entidade não encontrada',
'bookshelf_not_found' => 'Prateleira de Livros não encontrada',
'book_not_found' => 'Livro não encontrado',
'page_not_found' => 'Página não encontrada',
'chapter_not_found' => 'Capítulo não encontrado',

View File

@ -33,9 +33,8 @@ return [
'app_primary_color_desc' => 'Esse valor deverá ser Hexadecimal. <br>Deixe em branco para que o Bookstack assuma a cor padrão.',
'app_homepage' => 'Página incial',
'app_homepage_desc' => 'Selecione a página para ser usada como página inicial em vez da padrão. Permissões da página serão ignoradas.',
'app_homepage_default' => 'Escolhida página inicial padrão',
'app_homepage_select' => 'Selecione uma página',
'app_disable_comments' => 'Desativar comentários',
'app_homepage_books' => 'Ou selecione a página de livros como sua página inicial. Isso substituirá qualquer página selecionada como sua página inicial.',
'app_disable_comments_desc' => 'Desativar comentários em todas as páginas no aplicativo. Os comentários existentes não são exibidos.',
/**
@ -91,6 +90,7 @@ return [
'role_manage_settings' => 'Gerenciar configurações de app',
'role_asset' => 'Permissões de Ativos',
'role_asset_desc' => 'Essas permissões controlam o acesso padrão para os ativos dentro do sistema. Permissões em Livros, Capítulos e Páginas serão sobrescritas por essas permissões.',
'role_asset_admins' => 'Administradores recebem automaticamente acesso a todo o conteúdo, mas essas opções podem mostrar ou ocultar as opções da UI.',
'role_all' => 'Todos',
'role_own' => 'Próprio',
'role_controlled_by_asset' => 'Controlado pelos ativos que você fez upload',
@ -111,7 +111,6 @@ return [
'users_external_auth_id' => 'ID de Autenticação Externa',
'users_password_warning' => 'Preencha os dados abaixo caso queira modificar a sua senha:',
'users_system_public' => 'Esse usuário representa quaisquer convidados que visitam o aplicativo. Ele não pode ser usado para login.',
'users_books_view_type' => 'Layout preferido para mostrar livros',
'users_delete' => 'Excluir Usuário',
'users_delete_named' => 'Excluir :userName',
'users_delete_warning' => 'A ação vai excluir completamente o usuário de nome \':userName\' do sistema.',

View File

@ -36,6 +36,14 @@ return [
'book_delete_notification' => '图书已删除成功',
'book_sort' => '排序了图书',
'book_sort_notification' => '图书已重新排序成功',
// Bookshelves
'bookshelf_create' => '创建了书架',
'bookshelf_create_notification' => '书架已成功创建',
'bookshelf_update' => '更新了书架',
'bookshelf_update_notification' => '书架已成功更新',
'bookshelf_delete' => '删除了书架',
'bookshelf_delete_notification' => '书架已成功删除',
// Other
'commented_on' => '评论',

View File

@ -15,7 +15,7 @@ return [
/**
* Form Labels
*/
'name' => '名',
'name' => '',
'description' => '概要',
'role' => '角色',
'cover_image' => '封面图片',
@ -25,12 +25,13 @@ return [
* Actions
*/
'actions' => '操作',
'view' => '视图',
'view' => '浏览',
'create' => '创建',
'update' => '更新',
'edit' => '编辑',
'sort' => '排序',
'move' => '移动',
'copy' => '复制',
'reply' => '回复',
'delete' => '删除',
'search' => '搜索',
@ -49,7 +50,10 @@ return [
'toggle_details' => '显示/隐藏详细信息',
'toggle_thumbnails' => '显示/隐藏缩略图',
'details' => '详细信息',
'grid_view' => '网格视图',
'list_view' => '列表视图',
'default' => '默认',
/**
* Header
*/

View File

@ -22,6 +22,7 @@ return [
'image_upload_success' => '图片上传成功',
'image_update_success' => '图片详细信息更新成功',
'image_delete_success' => '图片删除成功',
'image_upload_remove' => '去掉',
/**
* Code editor
@ -30,4 +31,4 @@ return [
'code_language' => '编程语言',
'code_content' => '代码内容',
'code_save' => '保存代码',
];
];

View File

@ -52,11 +52,13 @@ return [
'search_content_type' => '种类',
'search_exact_matches' => '精确匹配',
'search_tags' => '标签搜索',
'search_options' => '选项',
'search_viewed_by_me' => '我看过的',
'search_not_viewed_by_me' => '我没看过的',
'search_permissions_set' => '权限设置',
'search_created_by_me' => '我创建的',
'search_updated_by_me' => '我更新的',
'search_date_options' => '日期选项',
'search_updated_before' => '在此之前更新',
'search_updated_after' => '在此之后更新',
'search_created_before' => '在此之前创建',
@ -64,6 +66,38 @@ return [
'search_set_date' => '设置日期',
'search_update' => '只显示更新操作',
/**
* Shelves
*/
'shelf' => '书架',
'shelves' => '书架',
'shelves_long' => '书架',
'shelves_empty' => '当前未创建书架',
'shelves_create' => '创建新书架',
'shelves_popular' => '热门书架',
'shelves_new' => '新书架',
'shelves_popular_empty' => '最热门的书架',
'shelves_new_empty' => '最新创建的书架',
'shelves_save' => '保存书架',
'shelves_books' => '书籍已在此书架里',
'shelves_add_books' => '将书籍加入此书架',
'shelves_drag_books' => '拖动图书将其添加到此书架',
'shelves_empty_contents' => '这个书架没有分配图书',
'shelves_edit_and_assign' => '编辑书架以分配图书',
'shelves_edit_named' => '编辑书架 :name',
'shelves_edit' => '编辑书架',
'shelves_delete' => '删除书架',
'shelves_delete_named' => '删除书架 :name',
'shelves_delete_explain' => "此操作将删除书架 ':name'。 其中包含的图书不会被删除。",
'shelves_delete_confirmation' => '您确定要删除此书架吗?',
'shelves_permissions' => '书架权限',
'shelves_permissions_updated' => '书架权限已更新',
'shelves_permissions_active' => '书架权限激活',
'shelves_copy_permissions_to_books' => '将权限复制到图书',
'shelves_copy_permissions' => '复制权限',
'shelves_copy_permissions_explain' => '这会将此书架的当前权限设置应用于其中包含的所有图书。 在激活之前,请确保已保存对此书架权限的任何更改。',
'shelves_copy_permission_success' => '书架权限复制到图书 :count ',
/**
* Books
*/
@ -162,9 +196,13 @@ return [
'pages_md_preview' => '预览',
'pages_md_insert_image' => '插入图片',
'pages_md_insert_link' => '插入实体链接',
'pages_md_insert_drawing' => '插入图表',
'pages_not_in_chapter' => '本页面不在某章节中',
'pages_move' => '移动页面',
'pages_move_success' => '页面已移动到「:parentName」',
'pages_copy' => '复制页面',
'pages_copy_desination' => '复制目的地',
'pages_copy_success' => '页面复制完成',
'pages_permissions' => '页面权限',
'pages_permissions_success' => '页面权限已更新',
'pages_revision' => '修订',
@ -195,13 +233,17 @@ return [
'message' => ':time:start。注意不要覆盖对方的更新',
],
'pages_draft_discarded' => '草稿已丢弃,编辑器已更新到当前页面内容。',
'pages_specific' => '具体页面',
/**
* Editor sidebar
*/
'page_tags' => '页面标签',
'chapter_tags' => '章节标签',
'book_tags' => '图书标签',
'shelf_tags' => '书架标签',
'tag' => '标签',
'tags' => '',
'tags' => '标签',
'tag_value' => '标签值 (Optional)',
'tags_explain' => "添加一些标签以更好地对您的内容进行分类。\n您可以为标签分配一个值,以进行更深入的组织。",
'tags_add' => '添加另一个标签',
@ -245,6 +287,7 @@ return [
*/
'comment' => '评论',
'comments' => '评论',
'comment_add' => '添加评论',
'comment_placeholder' => '在这里评论',
'comment_count' => '{0} 无评论|[1,*] :count条评论',
'comment_save' => '保存评论',

View File

@ -34,11 +34,14 @@ return [
'path_not_writable' => '无法上传到文件路径“:filePath”请确保它可写入服务器。',
'cannot_get_image_from_url' => '无法从 :url 中获取图片',
'cannot_create_thumbs' => '服务器无法创建缩略图请检查您是否安装了GD PHP扩展。',
'server_upload_limit' => '上传图片时发生错误。',
'server_upload_limit' => '服务器不允许上传此大小的文件。 请尝试较小的文件。',
'uploaded' => 'The server does not allow uploads of this size. Please try a smaller file size.',
'image_upload_error' => '上传图片时发生错误',
'image_upload_type_error' => '上传的图像类型无效',
// Attachments
'attachment_page_mismatch' => '附件更新期间的页面不匹配',
'attachment_not_found' => '找不到附件',
// Pages
'page_draft_autosave_fail' => '无法保存草稿,确保您在保存页面之前已经连接到互联网',
@ -46,6 +49,7 @@ return [
// Entities
'entity_not_found' => '未找到实体',
'bookshelf_not_found' => '未找到书架',
'book_not_found' => '未找到图书',
'page_not_found' => '未找到页面',
'chapter_not_found' => '未找到章节',
@ -76,4 +80,4 @@ return [
'error_occurred' => '出现错误',
'app_down' => ':appName现在正在关闭',
'back_soon' => '请耐心等待网站的恢复。',
];
];

View File

@ -81,6 +81,7 @@ return [
'role_details' => '角色详细信息',
'role_name' => '角色名',
'role_desc' => '角色简述',
'role_external_auth_id' => '外部身份认证ID',
'role_system' => '系统权限',
'role_manage_users' => '管理用户',
'role_manage_roles' => '管理角色与角色权限',
@ -89,6 +90,7 @@ return [
'role_manage_settings' => '管理App设置',
'role_asset' => '资源许可',
'role_asset_desc' => '对系统内资源的默认访问许可将由这些权限控制。单独设置在书籍,章节和页面上的权限将覆盖这里的权限设定。',
'role_asset_admins' => '管理员可自动获得对所有内容的访问权限但这些选项可能会显示或隐藏UI选项。',
'role_all' => '全部的',
'role_own' => '拥有的',
'role_controlled_by_asset' => '由其所在的资源来控制',
@ -109,7 +111,6 @@ return [
'users_external_auth_id' => '外部身份认证ID',
'users_password_warning' => '如果您想更改密码,请填写以下内容:',
'users_system_public' => '此用户代表访问您的App的任何访客。它不能用于登录而是自动分配。',
'users_books_view_type' => '图书浏览布局偏好',
'users_delete' => '删除用户',
'users_delete_named' => '删除用户 :userName',
'users_delete_warning' => '这将从系统中完全删除名为 \':userName\' 的用户。',

View File

@ -37,6 +37,14 @@ return [
'book_sort' => '排序了圖書',
'book_sort_notification' => '圖書已重新排序成功',
// Bookshelves
'bookshelf_create' => '建立了書架',
'bookshelf_create_notification' => '書架已建立成功',
'bookshelf_update' => '更新了書架',
'bookshelf_update_notification' => '書架已更新成功',
'bookshelf_delete' => '刪除了書架',
'bookshelf_delete_notification' => '書架已刪除成功',
// Other
'commented_on' => '評論',
];

View File

@ -20,7 +20,7 @@ return [
'role' => '角色',
'cover_image' => '封面圖片',
'cover_image_description' => '所使用圖片大小必須是440x250px。',
/**
* Actions
*/
@ -31,7 +31,8 @@ return [
'edit' => '編輯',
'sort' => '排序',
'move' => '移動',
'reply' => '回複',
'copy' => '複製',
'reply' => '回覆',
'delete' => '刪除',
'search' => '搜尋',
'search_clear' => '清除搜尋',
@ -51,6 +52,7 @@ return [
'details' => '詳細資訊',
'grid_view' => '縮圖檢視',
'list_view' => '清單撿視',
'default' => '預設',
/**
* Header

View File

@ -22,6 +22,7 @@ return [
'image_upload_success' => '圖片上傳成功',
'image_update_success' => '圖片詳細資訊更新成功',
'image_delete_success' => '圖片刪除成功',
'image_upload_remove' => '移除',
/**
* Code editor
@ -30,4 +31,4 @@ return [
'code_language' => '程式語言',
'code_content' => '程式碼內容',
'code_save' => '儲存程式碼',
];
];

View File

@ -52,11 +52,13 @@ return [
'search_content_type' => '種類',
'search_exact_matches' => '精確符合',
'search_tags' => '標籤搜尋',
'search_options' => '選項',
'search_viewed_by_me' => '我看過的',
'search_not_viewed_by_me' => '我沒看過的',
'search_permissions_set' => '權限設定',
'search_created_by_me' => '我建立的',
'search_updated_by_me' => '我更新的',
'search_date_options' => '日期選項',
'search_updated_before' => '在此之前更新',
'search_updated_after' => '在此之後更新',
'search_created_before' => '在此之前建立',
@ -64,6 +66,38 @@ return [
'search_set_date' => '設定日期',
'search_update' => '更新搜尋結果',
/**
* Shelves
*/
'shelf' => '書架',
'shelves' => '書架',
'shelves_long' => '書架',
'shelves_empty' => '不存在已建立的書架',
'shelves_create' => '建立書架',
'shelves_popular' => '熱門書架',
'shelves_new' => '新書架',
'shelves_popular_empty' => '最受歡迎的書架將出現在這裡。',
'shelves_new_empty' => '最近建立的書架將出現在這裡。',
'shelves_save' => '儲存書架',
'shelves_books' => '此書架上的書本',
'shelves_add_books' => '將書本添加到此書架中',
'shelves_drag_books' => '拖動書本到此處來將它添加至此書架中',
'shelves_empty_contents' => '此書架沒有分配任何書本',
'shelves_edit_and_assign' => '編輯書架以分配書本',
'shelves_edit_named' => '編輯書架「:name」',
'shelves_edit' => '編輯書架',
'shelves_delete' => '刪除書架',
'shelves_delete_named' => '刪除書架「:name」',
'shelves_delete_explain' => "這將刪除名為「:name」的書架。包含在其中的書本不會被刪除。",
'shelves_delete_confirmation' => '您確定要刪除此書架嗎?',
'shelves_permissions' => '書架權限',
'shelves_permissions_updated' => '書架權限已更新',
'shelves_permissions_active' => '已啟用此書架的自訂權限',
'shelves_copy_permissions_to_books' => '將權限複製到書本',
'shelves_copy_permissions' => '複製權限',
'shelves_copy_permissions_explain' => '這會將此書架目前的權限設定套用到所有包含的書本上。在生效之前,請確認您已儲存任何對此書架權限的變更。',
'shelves_copy_permission_success' => '已將書架的權限複製到:count本書上',
/**
* Books
*/
@ -92,7 +126,7 @@ return [
'books_empty_or' => '或',
'books_empty_sort_current_book' => '排序目前書本',
'books_empty_add_chapter' => '加入章節',
'books_permissions_active' => '有效的書本權限',
'books_permissions_active' => '已啟用此書本的自訂權限',
'books_search_this' => '搜尋這本書',
'books_navigation' => '書本導覽',
'books_sort' => '排序書本內容',
@ -121,7 +155,7 @@ return [
'chapter_move_success' => '章節移動到「:bookName」',
'chapters_permissions' => '章節權限',
'chapters_empty' => '本章目前沒有頁面。',
'chapters_permissions_active' => '有效的章節權限',
'chapters_permissions_active' => '已啟用此章節的自訂權限',
'chapters_permissions_success' => '章節權限已更新',
'chapters_search_this' => '從本章節搜尋',
@ -166,6 +200,9 @@ return [
'pages_not_in_chapter' => '本頁面不在某章節中',
'pages_move' => '移動頁面',
'pages_move_success' => '頁面已移動到「:parentName」',
'pages_copy' => '複製頁面',
'pages_copy_desination' => '複製的目的地',
'pages_copy_success' => '頁面已成功複製',
'pages_permissions' => '頁面權限',
'pages_permissions_success' => '頁面權限已更新',
'pages_revision' => '修訂',
@ -183,7 +220,7 @@ return [
'pages_revisions_none' => '此頁面沒有修訂',
'pages_copy_link' => '複製連結',
'pages_edit_content_link' => '编辑内容',
'pages_permissions_active' => '有效的頁面權限',
'pages_permissions_active' => '已啟用此頁面的自訂權限',
'pages_initial_revision' => '初次發布',
'pages_initial_name' => '新頁面',
'pages_editing_draft_notification' => '您正在編輯在 :timeDiff 內儲存的草稿.',
@ -196,11 +233,15 @@ return [
'message' => ':time:start。注意不要覆蓋到對方的更新。',
],
'pages_draft_discarded' => '草稿已丟棄,編輯器已更新到目前頁面內容。',
'pages_specific' => '指定頁面',
/**
* Editor sidebar
*/
'page_tags' => '頁面標籤',
'chapter_tags' => '章節標籤',
'book_tags' => '書本標籤',
'shelf_tags' => '書架標籤',
'tag' => '標籤',
'tags' => '',
'tag_value' => '標籤值 (非必要)',
@ -246,6 +287,7 @@ return [
*/
'comment' => '評論',
'comments' => '評論',
'comment_add' => '新增評論',
'comment_placeholder' => '在這裡評論',
'comment_count' => '{0} 無評論|[1,*] :count條評論',
'comment_save' => '儲存評論',

View File

@ -34,7 +34,8 @@ return [
'path_not_writable' => '無法上傳到檔案路徑“:filePath”請確保它可寫入伺服器。',
'cannot_get_image_from_url' => '無法從 :url 中獲取圖片',
'cannot_create_thumbs' => '伺服器無法建立縮圖請檢查您是否安裝了GD PHP外掛。',
'server_upload_limit' => '上傳圖片時發生錯誤。',
'server_upload_limit' => '上傳的檔案大小超過伺服器允許上限。請嘗試較小的檔案。',
'uploaded' => '上傳的檔案大小超過伺服器允許上限。請嘗試較小的檔案。',
'image_upload_error' => '上傳圖片時發生錯誤',
'image_upload_type_error' => '上傳圖片類型錯誤',
@ -48,6 +49,7 @@ return [
// Entities
'entity_not_found' => '未找到實體',
'bookshelf_not_found' => '未找到書架',
'book_not_found' => '未找到圖書',
'page_not_found' => '未找到頁面',
'chapter_not_found' => '未找到章節',
@ -78,4 +80,4 @@ return [
'error_occurred' => '發生錯誤',
'app_down' => ':appName現在正在關閉',
'back_soon' => '請耐心等待網站的恢複。',
];
];

View File

@ -33,7 +33,7 @@ return [
'app_primary_color_desc' => '請使用十六進位數值。<br>保留空白則重置回預設配色。',
'app_homepage' => 'App首頁',
'app_homepage_desc' => '選擇要做為首頁的頁面,這將會替換預設首頁,而且這個頁面的權限設定將被忽略。',
'app_homepage_default' => '預設首頁選擇',
'app_homepage_select' => '預設首頁選擇',
'app_disable_comments' => '關閉評論',
'app_disable_comments_desc' => '在App的所有頁面上關閉評論已經存在的評論也不會顯示。',
@ -81,6 +81,7 @@ return [
'role_details' => '角色詳細資訊',
'role_name' => '角色名',
'role_desc' => '角色簡述',
'role_external_auth_id' => '外部身份驗證ID',
'role_system' => '系統權限',
'role_manage_users' => '管理使用者',
'role_manage_roles' => '管理角色與角色權限',
@ -89,6 +90,7 @@ return [
'role_manage_settings' => '管理App設定',
'role_asset' => '資源項目',
'role_asset_desc' => '對系統內資源的預設權限將由這裡的權限控制。若有單獨設定在書本、章節和頁面上的權限,將會覆蓋這裡的權限設定。',
'role_asset_admins' => '管理員會自動獲得對所有內容的存取權限但這些選項可能會顯示或隱藏UI的選項。',
'role_all' => '全部',
'role_own' => '擁有',
'role_controlled_by_asset' => '依據隸屬的資源來決定',
@ -109,7 +111,6 @@ return [
'users_external_auth_id' => '外部身份驗證ID',
'users_password_warning' => '如果您想更改密碼,請填寫以下內容:',
'users_system_public' => '此使用者代表進入您的App的任何訪客。它不能用於登入而是自動分配。',
//'users_books_view_type' => '圖書瀏覽佈局偏好',
'users_delete' => '刪除使用者',
'users_delete_named' => '刪除使用者 :userName',
'users_delete_warning' => '這將從系統中完全刪除名為 \':userName\' 的使用者。',

View File

@ -148,4 +148,12 @@ class SocialAuthTest extends TestCase
$this->assertDatabaseHas('social_accounts', ['user_id' => $user->id]);
}
public function test_google_select_account_option_changes_redirect_url()
{
config()->set('services.google.select_account', 'true');
$resp = $this->get('/login/service/google');
$this->assertContains('prompt=select_account', $resp->headers->get('Location'));
}
}

19
tests/HelpersTest.php Normal file
View File

@ -0,0 +1,19 @@
<?php namespace Tests;
class HelpersTest extends TestCase
{
public function test_base_url_takes_config_into_account()
{
config()->set('app.url', 'http://example.com/bookstack');
$result = baseUrl('/');
$this->assertEquals('http://example.com/bookstack/', $result);
}
public function test_base_url_takes_extra_path_into_account_on_forced_domain()
{
config()->set('app.url', 'http://example.com/bookstack');
$result = baseUrl('http://example.com/bookstack/', true);
$this->assertEquals('http://example.com/bookstack/', $result);
}
}