From: Dan Brown Date: Sun, 11 Feb 2018 11:44:09 +0000 (+0000) Subject: Merge branch 'master' of git://github.com/moutonnoireu/BookStack into moutonnoireu... X-Git-Tag: v0.20.0~1^2~4 X-Git-Url: http://source.bookstackapp.com/bookstack/commitdiff_plain/110f32a16dc23a9f14d9c185d60fbcb921732b85?hp=addfb9600277f0ce7d9a4159f3b77d9daf4ea36f Merge branch 'master' of git://github.com/moutonnoireu/BookStack into moutonnoireu-master Also updated composer deps --- diff --git a/.env.example b/.env.example index d06ef675b..86f99f30f 100644 --- a/.env.example +++ b/.env.example @@ -47,10 +47,13 @@ GITHUB_APP_SECRET=false GOOGLE_APP_ID=false GOOGLE_APP_SECRET=false OKTA_BASE_URL=false -OKTA_KEY=false -OKTA_SECRET=false +OKTA_APP_ID=false +OKTA_APP_SECRET=false TWITCH_APP_ID=false TWITCH_APP_SECRET=false +GITLAB_APP_ID=false +GITLAB_APP_SECRET=false +GITLAB_BASE_URI=false # External services such as Gravatar DISABLE_EXTERNAL_SERVICES=false diff --git a/app/Http/Controllers/BookController.php b/app/Http/Controllers/BookController.php index 7a98bd49e..2c3946239 100644 --- a/app/Http/Controllers/BookController.php +++ b/app/Http/Controllers/BookController.php @@ -36,11 +36,11 @@ class BookController extends Controller */ public function index() { - $books = $this->entityRepo->getAllPaginated('book', 20); + $books = $this->entityRepo->getAllPaginated('book', 18); $recents = $this->signedIn ? $this->entityRepo->getRecentlyViewed('book', 4, 0) : false; $popular = $this->entityRepo->getPopular('book', 4, 0); $new = $this->entityRepo->getRecentlyCreated('book', 4, 0); - $booksViewType = setting()->getUser($this->currentUser, 'books_view_type', 'list'); + $booksViewType = setting()->getUser($this->currentUser, 'books_view_type', config('app.views.books', 'list')); $this->setPageTitle(trans('entities.books')); return view('books/index', [ 'books' => $books, diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index 5a690069c..cc3e4d993 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -18,6 +18,7 @@ class EventServiceProvider extends ServiceProvider 'SocialiteProviders\Slack\SlackExtendSocialite@handle', 'SocialiteProviders\Azure\AzureExtendSocialite@handle', 'SocialiteProviders\Okta\OktaExtendSocialite@handle', + 'SocialiteProviders\GitLab\GitLabExtendSocialite@handle', 'SocialiteProviders\Twitch\TwitchExtendSocialite@handle', ], ]; diff --git a/app/Services/SocialAuthService.php b/app/Services/SocialAuthService.php index 6eb5202ae..02361e59b 100644 --- a/app/Services/SocialAuthService.php +++ b/app/Services/SocialAuthService.php @@ -16,7 +16,7 @@ class SocialAuthService protected $socialite; protected $socialAccount; - protected $validSocialDrivers = ['google', 'github', 'facebook', 'slack', 'twitter', 'azure', 'okta', 'twitch']; + protected $validSocialDrivers = ['google', 'github', 'facebook', 'slack', 'twitter', 'azure', 'okta', 'gitlab', 'twitch']; /** * SocialAuthService constructor. diff --git a/composer.json b/composer.json index 54eb3f26c..5106ed0bb 100644 --- a/composer.json +++ b/composer.json @@ -19,6 +19,7 @@ "socialiteproviders/slack": "^3.0", "socialiteproviders/microsoft-azure": "^3.0", "socialiteproviders/okta": "^1.0", + "socialiteproviders/gitlab": "^3.0", "socialiteproviders/twitch": "^3.0" }, "require-dev": { diff --git a/composer.lock b/composer.lock index bf9bc489f..9370bebff 100644 --- a/composer.lock +++ b/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "96d5f23f0652b8093d7939e8c29bdf18", + "content-hash": "ed85d10e69b1071020178cb400a80e48", "packages": [ { "name": "aws/aws-sdk-php", - "version": "3.52.2", + "version": "3.52.6", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "69ba4e07288a532fe7635f7cdd73cffa6509f538" + "reference": "c9af7657eddc0267cc7ac4f969c10d5c18459992" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/69ba4e07288a532fe7635f7cdd73cffa6509f538", - "reference": "69ba4e07288a532fe7635f7cdd73cffa6509f538", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/c9af7657eddc0267cc7ac4f969c10d5c18459992", + "reference": "c9af7657eddc0267cc7ac4f969c10d5c18459992", "shasum": "" }, "require": { @@ -84,25 +84,25 @@ "s3", "sdk" ], - "time": "2018-01-26T22:17:57+00:00" + "time": "2018-02-09T22:53:37+00:00" }, { "name": "barryvdh/laravel-dompdf", - "version": "v0.8.1", + "version": "v0.8.2", "source": { "type": "git", "url": "https://github.com/barryvdh/laravel-dompdf.git", - "reference": "3b2235e589616331d68482d61b7763789a2600fe" + "reference": "7dcdecfa125c174d0abe723603633dc2756ea3af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-dompdf/zipball/3b2235e589616331d68482d61b7763789a2600fe", - "reference": "3b2235e589616331d68482d61b7763789a2600fe", + "url": "https://api.github.com/repos/barryvdh/laravel-dompdf/zipball/7dcdecfa125c174d0abe723603633dc2756ea3af", + "reference": "7dcdecfa125c174d0abe723603633dc2756ea3af", "shasum": "" }, "require": { "dompdf/dompdf": "^0.8", - "illuminate/support": "5.1.x|5.2.x|5.3.x|5.4.x|5.5.x", + "illuminate/support": "5.1.x|5.2.x|5.3.x|5.4.x|5.5.x|5.6.x", "php": ">=5.5.9" }, "type": "library", @@ -140,32 +140,32 @@ "laravel", "pdf" ], - "time": "2017-07-29T19:01:17+00:00" + "time": "2018-02-07T17:43:25+00:00" }, { "name": "barryvdh/laravel-snappy", - "version": "v0.4.0", + "version": "v0.4.1", "source": { "type": "git", "url": "https://github.com/barryvdh/laravel-snappy.git", - "reference": "f08c7e5b4ddea585bfcd48ab4f40f920e58dd1cf" + "reference": "5f6e7f3ba15c867d1b8e2885d454110270616ebe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-snappy/zipball/f08c7e5b4ddea585bfcd48ab4f40f920e58dd1cf", - "reference": "f08c7e5b4ddea585bfcd48ab4f40f920e58dd1cf", + "url": "https://api.github.com/repos/barryvdh/laravel-snappy/zipball/5f6e7f3ba15c867d1b8e2885d454110270616ebe", + "reference": "5f6e7f3ba15c867d1b8e2885d454110270616ebe", "shasum": "" }, "require": { - "illuminate/filesystem": "5.0.x|5.1.x|5.2.x|5.3.x|5.4.x|5.5.x", - "illuminate/support": "5.0.x|5.1.x|5.2.x|5.3.x|5.4.x|5.5.x", - "knplabs/knp-snappy": "*", + "illuminate/filesystem": "5.0.x|5.1.x|5.2.x|5.3.x|5.4.x|5.5.x|5.6.x", + "illuminate/support": "5.0.x|5.1.x|5.2.x|5.3.x|5.4.x|5.5.x|5.6.x", + "knplabs/knp-snappy": "^1", "php": ">=5.4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "0.3-dev" + "dev-master": "0.4-dev" }, "laravel": { "providers": [ @@ -201,7 +201,7 @@ "wkhtmltoimage", "wkhtmltopdf" ], - "time": "2017-08-14T06:48:50+00:00" + "time": "2018-02-08T15:58:26+00:00" }, { "name": "cogpowered/finediff", @@ -964,16 +964,16 @@ }, { "name": "laravel/framework", - "version": "v5.5.32", + "version": "v5.5.34", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "254e4c3e133f5bc8d6068cdf28ea062abc10adf2" + "reference": "1de7c0aec13eadbdddc2d1ba4019b064b2c6b966" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/254e4c3e133f5bc8d6068cdf28ea062abc10adf2", - "reference": "254e4c3e133f5bc8d6068cdf28ea062abc10adf2", + "url": "https://api.github.com/repos/laravel/framework/zipball/1de7c0aec13eadbdddc2d1ba4019b064b2c6b966", + "reference": "1de7c0aec13eadbdddc2d1ba4019b064b2c6b966", "shasum": "" }, "require": { @@ -1094,7 +1094,7 @@ "framework", "laravel" ], - "time": "2018-01-18T13:27:23+00:00" + "time": "2018-02-06T15:36:55+00:00" }, { "name": "laravel/socialite", @@ -2075,6 +2075,43 @@ ], "time": "2016-07-19T19:14:21+00:00" }, + { + "name": "socialiteproviders/gitlab", + "version": "v3.0.1", + "source": { + "type": "git", + "url": "https://github.com/SocialiteProviders/GitLab.git", + "reference": "c96dc004563a3caf157608fe9aa9e45c79065d00" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/SocialiteProviders/GitLab/zipball/c96dc004563a3caf157608fe9aa9e45c79065d00", + "reference": "c96dc004563a3caf157608fe9aa9e45c79065d00", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "socialiteproviders/manager": "~3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "SocialiteProviders\\GitLab\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christoffer Martinsen", + "email": "christoffermartinsen@gmail.com" + } + ], + "description": "GitLab OAuth2 Provider for Laravel Socialite", + "time": "2017-01-31T05:06:13+00:00" + }, { "name": "socialiteproviders/manager", "version": "v3.3.1", @@ -2758,16 +2795,16 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.6.0", + "version": "v1.7.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296" + "reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", - "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/78be803ce01e55d3491c1397cf1c64beb9c1b63b", + "reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b", "shasum": "" }, "require": { @@ -2779,7 +2816,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6-dev" + "dev-master": "1.7-dev" } }, "autoload": { @@ -2813,7 +2850,7 @@ "portable", "shim" ], - "time": "2017-10-11T12:05:26+00:00" + "time": "2018-01-30T19:27:44+00:00" }, { "name": "symfony/process", @@ -3176,26 +3213,26 @@ "packages-dev": [ { "name": "barryvdh/laravel-debugbar", - "version": "v3.1.0", + "version": "v3.1.1", "source": { "type": "git", "url": "https://github.com/barryvdh/laravel-debugbar.git", - "reference": "01a859752094e00aa8548832312366753272f8af" + "reference": "f0018d359a2ad6968ad11b283283a925e017f3c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/01a859752094e00aa8548832312366753272f8af", - "reference": "01a859752094e00aa8548832312366753272f8af", + "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/f0018d359a2ad6968ad11b283283a925e017f3c9", + "reference": "f0018d359a2ad6968ad11b283283a925e017f3c9", "shasum": "" }, "require": { - "illuminate/routing": "5.5.x", - "illuminate/session": "5.5.x", - "illuminate/support": "5.5.x", - "maximebf/debugbar": "~1.14.0", + "illuminate/routing": "5.5.x|5.6.x", + "illuminate/session": "5.5.x|5.6.x", + "illuminate/support": "5.5.x|5.6.x", + "maximebf/debugbar": "~1.15.0", "php": ">=7.0", - "symfony/debug": "^3", - "symfony/finder": "^3" + "symfony/debug": "^3|^4", + "symfony/finder": "^3|^4" }, "require-dev": { "illuminate/framework": "5.5.x" @@ -3203,7 +3240,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.2-dev" }, "laravel": { "providers": [ @@ -3240,34 +3277,34 @@ "profiler", "webprofiler" ], - "time": "2017-09-18T13:32:46+00:00" + "time": "2018-02-07T08:29:09+00:00" }, { "name": "barryvdh/laravel-ide-helper", - "version": "v2.4.1", + "version": "v2.4.3", "source": { "type": "git", "url": "https://github.com/barryvdh/laravel-ide-helper.git", - "reference": "2b1273c45e2f8df7a625563e2283a17c14f02ae8" + "reference": "5c304db44fba8e9c4aa0c09739e59f7be7736fdd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/2b1273c45e2f8df7a625563e2283a17c14f02ae8", - "reference": "2b1273c45e2f8df7a625563e2283a17c14f02ae8", + "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/5c304db44fba8e9c4aa0c09739e59f7be7736fdd", + "reference": "5c304db44fba8e9c4aa0c09739e59f7be7736fdd", "shasum": "" }, "require": { "barryvdh/reflection-docblock": "^2.0.4", - "illuminate/console": "^5.0,<5.6", - "illuminate/filesystem": "^5.0,<5.6", - "illuminate/support": "^5.0,<5.6", + "illuminate/console": "^5.0,<5.7", + "illuminate/filesystem": "^5.0,<5.7", + "illuminate/support": "^5.0,<5.7", "php": ">=5.4.0", "symfony/class-loader": "^2.3|^3.0" }, "require-dev": { "doctrine/dbal": "~2.3", - "illuminate/config": "^5.0,<5.6", - "illuminate/view": "^5.0,<5.6", + "illuminate/config": "^5.0,<5.7", + "illuminate/view": "^5.0,<5.7", "phpunit/phpunit": "4.*", "scrutinizer/ocular": "~1.1", "squizlabs/php_codesniffer": "~2.3" @@ -3313,7 +3350,7 @@ "phpstorm", "sublime" ], - "time": "2017-07-16T00:24:12+00:00" + "time": "2018-02-08T07:56:07+00:00" }, { "name": "barryvdh/reflection-docblock", @@ -3627,22 +3664,22 @@ }, { "name": "maximebf/debugbar", - "version": "v1.14.1", + "version": "v1.15.0", "source": { "type": "git", "url": "https://github.com/maximebf/php-debugbar.git", - "reference": "64251a392344e3d22f3d21c3b7c531ba96eb01d2" + "reference": "30e7d60937ee5f1320975ca9bc7bcdd44d500f07" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/64251a392344e3d22f3d21c3b7c531ba96eb01d2", - "reference": "64251a392344e3d22f3d21c3b7c531ba96eb01d2", + "url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/30e7d60937ee5f1320975ca9bc7bcdd44d500f07", + "reference": "30e7d60937ee5f1320975ca9bc7bcdd44d500f07", "shasum": "" }, "require": { "php": ">=5.3.0", "psr/log": "^1.0", - "symfony/var-dumper": "^2.6|^3.0" + "symfony/var-dumper": "^2.6|^3.0|^4.0" }, "require-dev": { "phpunit/phpunit": "^4.0|^5.0" @@ -3684,7 +3721,7 @@ "debug", "debugbar" ], - "time": "2017-09-13T12:19:36+00:00" + "time": "2017-12-15T11:13:46+00:00" }, { "name": "mockery/mockery", @@ -4364,16 +4401,16 @@ }, { "name": "phpunit/phpunit", - "version": "6.5.5", + "version": "6.5.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "83d27937a310f2984fd575686138597147bdc7df" + "reference": "3330ef26ade05359d006041316ed0fa9e8e3cefe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/83d27937a310f2984fd575686138597147bdc7df", - "reference": "83d27937a310f2984fd575686138597147bdc7df", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3330ef26ade05359d006041316ed0fa9e8e3cefe", + "reference": "3330ef26ade05359d006041316ed0fa9e8e3cefe", "shasum": "" }, "require": { @@ -4444,7 +4481,7 @@ "testing", "xunit" ], - "time": "2017-12-17T06:31:19+00:00" + "time": "2018-02-01T05:57:37+00:00" }, { "name": "phpunit/phpunit-mock-objects", @@ -4552,21 +4589,21 @@ }, { "name": "sebastian/comparator", - "version": "2.1.2", + "version": "2.1.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "11c07feade1d65453e06df3b3b90171d6d982087" + "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/11c07feade1d65453e06df3b3b90171d6d982087", - "reference": "11c07feade1d65453e06df3b3b90171d6d982087", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/34369daee48eafb2651bea869b4b15d75ccc35f9", + "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9", "shasum": "" }, "require": { "php": "^7.0", - "sebastian/diff": "^2.0", + "sebastian/diff": "^2.0 || ^3.0", "sebastian/exporter": "^3.1" }, "require-dev": { @@ -4612,7 +4649,7 @@ "compare", "equality" ], - "time": "2018-01-12T06:34:42+00:00" + "time": "2018-02-01T13:46:46+00:00" }, { "name": "sebastian/diff", diff --git a/config/app.php b/config/app.php index e408fb3a5..7e2e1487f 100755 --- a/config/app.php +++ b/config/app.php @@ -2,11 +2,14 @@ return [ - 'env' => env('APP_ENV', 'production'), 'editor' => env('APP_EDITOR', 'html'), + 'views' => [ + 'books' => env('APP_VIEWS_BOOKS', 'list') + ], + /* |-------------------------------------------------------------------------- | Application Debug Mode @@ -58,7 +61,7 @@ return [ */ 'locale' => env('APP_LANG', 'en'), - 'locales' => ['en', 'de', 'es', 'es_AR', 'fr', 'nl', 'pt_BR', 'sk', 'sv', 'ja', 'pl', 'it', 'ru'], + 'locales' => ['en', 'de', 'es', 'es_AR', 'fr', 'nl', 'pt_BR', 'sk', 'sv', 'ja', 'pl', 'it', 'ru', 'zh_CN'], /* |-------------------------------------------------------------------------- diff --git a/config/services.php b/config/services.php index 81f2af360..8b602a5d5 100644 --- a/config/services.php +++ b/config/services.php @@ -94,6 +94,14 @@ return [ 'name' => 'Okta', ], + 'gitlab' => [ + 'client_id' => env('GITLAB_APP_ID'), + 'client_secret' => env('GITLAB_APP_SECRET'), + 'redirect' => env('APP_URL') . '/login/service/gitlab/callback', + 'instance_uri' => env('GITLAB_BASE_URI'), // needs only for GitLab self hosted + 'name' => 'Gitlab', + ], + 'twitch' => [ 'client_id' => env('TWITCH_APP_ID'), 'client_secret' => env('TWITCH_APP_SECRET'), diff --git a/resources/assets/icons/gitlab.svg b/resources/assets/icons/gitlab.svg new file mode 100644 index 000000000..fa1e92a56 --- /dev/null +++ b/resources/assets/icons/gitlab.svg @@ -0,0 +1 @@ + diff --git a/resources/assets/sass/_grid.scss b/resources/assets/sass/_grid.scss index c145f4280..880c619d1 100644 --- a/resources/assets/sass/_grid.scss +++ b/resources/assets/sass/_grid.scss @@ -175,6 +175,43 @@ div[class^="col-"] img { margin-right: -$-m; } +.grid { + display: grid; + grid-column-gap: $-l; + grid-row-gap: $-l; + &.third { + grid-template-columns: 1fr 1fr 1fr; + } +} + +.grid-card { + display: flex; + flex-direction: column; + border: 1px solid #ddd; + min-width: 100px; + .grid-card-content { + flex: 1; + } + .grid-card-content, .grid-card-footer { + padding: $-l; + } + .grid-card-content + .grid-card-footer { + padding-top: 0; + } +} + +@include smaller-than($m) { + .grid.third { + grid-template-columns: 1fr 1fr; + } +} + +@include smaller-than($s) { + .grid.third { + grid-template-columns: 1fr; + } +} + .float { float: left; &.right { @@ -195,14 +232,6 @@ div[class^="col-"] img { display: inline-block; } -@include larger-than(991px) { - .row.auto-clear .col-md-4:nth-child(3n+1){clear:left;} -} - -@include smaller-than(992px) { - .row.auto-clear .col-xs-6:nth-child(2n+1){clear:left;} -} - .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { position: relative; min-height: 1px; diff --git a/resources/assets/sass/_lists.scss b/resources/assets/sass/_lists.scss index 0496d794e..604334415 100644 --- a/resources/assets/sass/_lists.scss +++ b/resources/assets/sass/_lists.scss @@ -382,13 +382,15 @@ ul.pagination { position: relative; overflow: hidden; background: #F2F2F2; - border: 1px solid #ddd; - border-bottom: 0; + a { + display: block; + } img { display: block; + width: 100%; max-width: 100%; height: auto; - transition: all .5s ease; + transition: all .5s ease-in-out; } img:hover { transform: scale(1.15); @@ -396,31 +398,33 @@ ul.pagination { } } -.book-grid-content { - padding: 30px; - border: 1px solid #ddd; +.book-grid-item .grid-card-content { border-top: 0; border-bottom-width: 2px; h2 { + width: 100%; font-size: 1.5em; margin: 0 0 10px; } h2 a { display: block; + width: 100%; line-height: 1.2; color: #009688;; text-decoration: none; + white-space: pre-wrap; /* css-3 */ + word-wrap: break-word; /* Internet Explorer 5.5+ */ } p { font-size: .85em; - margin: 0 0 10px; + margin: 0; line-height: 1.6em; } +} + +.book-grid-item .grid-card-footer { p.small { font-size: .8em; + margin: 0; } } - -.book-grid-item { - margin-bottom : 20px; -} diff --git a/resources/assets/sass/export-styles.scss b/resources/assets/sass/export-styles.scss index 1f7caf1d9..bea516baa 100644 --- a/resources/assets/sass/export-styles.scss +++ b/resources/assets/sass/export-styles.scss @@ -13,4 +13,15 @@ table { border-spacing: 0; border-collapse: collapse; +} + +// Prevent code block overflow on export +pre { + padding-left: 12px; +} +pre:after { + display: none; +} +pre code { + white-space: pre-wrap; } \ No newline at end of file diff --git a/resources/lang/en/settings.php b/resources/lang/en/settings.php index 345624147..d5ef4840e 100755 --- a/resources/lang/en/settings.php +++ b/resources/lang/en/settings.php @@ -131,7 +131,8 @@ return [ 'ja' => '日本語', 'pl' => 'Polski', 'it' => 'Italian', - 'ru' => 'Русский' + 'ru' => 'Русский', + 'zh_CN' => '简体中文' ] /////////////////////////////////// ]; diff --git a/resources/lang/zh_CN/activities.php b/resources/lang/zh_CN/activities.php new file mode 100644 index 000000000..6ef10b67f --- /dev/null +++ b/resources/lang/zh_CN/activities.php @@ -0,0 +1,42 @@ + '创建了页面', + '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' => '图书已重新排序成功', + + // Other + 'commented_on' => '评论', +]; diff --git a/resources/lang/zh_CN/auth.php b/resources/lang/zh_CN/auth.php new file mode 100644 index 000000000..046f2360b --- /dev/null +++ b/resources/lang/zh_CN/auth.php @@ -0,0 +1,76 @@ + '用户名或密码错误。', + 'throttle' => '您的登录次数过多,请在:seconds秒后重试。', + + /** + * Login & Register + */ + 'sign_up' => '注册', + 'log_in' => '登录', + 'log_in_with' => '以:socialDriver登录', + 'sign_up_with' => '注册:socialDriver', + 'logout' => '注销', + + 'name' => '姓名', + 'username' => '用户名', + 'email' => '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' => '请点击查收您的Email,并点击确认。', + 'registrations_disabled' => '注册目前被禁用', + 'registration_email_domain_invalid' => '该Email域名无权访问此应用程序', + 'register_success' => '感谢您注册:appName,您现在已经登录。', + + + /** + * Password Reset + */ + 'reset_password' => '重置密码', + 'reset_password_send_instructions' => '在下面输入您的Email地址,您将收到一封带有密码重置链接的邮件。', + '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地址', + 'email_confirm_greeting' => '感谢您加入:appName!', + 'email_confirm_text' => '请点击下面的按钮确认您的Email地址:', + 'email_confirm_action' => '确认Email', + 'email_confirm_send_error' => '需要Email验证,但系统无法发送电子邮件,请联系网站管理员。', + 'email_confirm_success' => '您的Email地址已成功验证!', + 'email_confirm_resent' => '验证邮件已重新发送,请检查收件箱。', + + 'email_not_confirmed' => 'Email地址未验证', + 'email_not_confirmed_text' => '您的电子邮件地址尚未确认。', + 'email_not_confirmed_click_link' => '请检查注册时收到的电子邮件,然后点击确认链接。', + 'email_not_confirmed_resend' => '如果找不到电子邮件,请通过下面的表单重新发送确认Email。', + 'email_not_confirmed_resend_button' => '重新发送确认Email', +]; \ No newline at end of file diff --git a/resources/lang/zh_CN/common.php b/resources/lang/zh_CN/common.php new file mode 100644 index 000000000..a6efde672 --- /dev/null +++ b/resources/lang/zh_CN/common.php @@ -0,0 +1,64 @@ + '取消', + 'confirm' => '确认', + 'back' => '返回', + 'save' => '保存', + 'continue' => 'ç»§ç»­', + 'select' => '选择', + 'more' => '更多', + + /** + * Form Labels + */ + 'name' => '姓名', + 'description' => '概要', + 'role' => '角色', + 'cover_image' => '封面图片', + 'cover_image_description' => '该图像大小需要为440x250px。', + + /** + * Actions + */ + 'actions' => '操作', + 'view' => '视图', + 'create' => '创建', + 'update' => '更新', + 'edit' => '编辑', + 'sort' => '排序', + 'move' => '移动', + 'reply' => '回复', + 'delete' => '删除', + 'search' => '搜索', + 'search_clear' => '清除搜索', + 'reset' => '重置', + 'remove' => '删除', + 'add' => '添加', + + /** + * Misc + */ + 'deleted_user' => '删除用户', + 'no_activity' => '没有活动要显示', + 'no_items' => '没有可用的项目', + 'back_to_top' => '回到顶部', + 'toggle_details' => '显示/隐藏详细信息', + 'toggle_thumbnails' => '显示/隐藏缩略图', + 'details' => '详细信息', + + /** + * Header + */ + 'view_profile' => '查看资料', + 'edit_profile' => '编辑资料', + + /** + * Email Content + */ + 'email_action_help' => '如果您无法点击“:actionText”按钮,请将下面的网址复制到您的浏览器中打开:', + 'email_rights' => 'All rights reserved', +]; diff --git a/resources/lang/zh_CN/components.php b/resources/lang/zh_CN/components.php new file mode 100644 index 000000000..9e6f28649 --- /dev/null +++ b/resources/lang/zh_CN/components.php @@ -0,0 +1,32 @@ + '选择图片', + '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_confirm' => '该图像用于以下页面,如果你想删除它,请再次按下按钮。', + 'image_select_image' => '选择图片', + 'image_dropzone' => '拖放图片或点击此处上传', + 'images_deleted' => '图片已删除', + 'image_preview' => '图片预览', + 'image_upload_success' => '图片上传成功', + 'image_update_success' => '图片详细信息更新成功', + 'image_delete_success' => '图片删除成功', + + /** + * Code editor + */ + 'code_editor' => '编辑代码', + 'code_language' => '编程语言', + 'code_content' => '代码内容', + 'code_save' => '保存代码', +]; \ No newline at end of file diff --git a/resources/lang/zh_CN/entities.php b/resources/lang/zh_CN/entities.php new file mode 100644 index 000000000..3c04c442d --- /dev/null +++ b/resources/lang/zh_CN/entities.php @@ -0,0 +1,260 @@ + '最近创建', + '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' => '由 :user 创建于 :timeLength', + 'meta_updated' => '更新于 :timeLength', + 'meta_updated_name' => '由 :user 更新于 :timeLength', + 'entity_select' => '实体选择', + 'images' => '图片', + 'my_recent_drafts' => '我最近的草稿', + 'my_recently_viewed' => '我最近看过', + 'no_pages_viewed' => '您尚未查看任何页面', + 'no_pages_recently_created' => '最近没有页面被创建', + 'no_pages_recently_updated' => '最近没有页面被更新', + 'export' => '导出', + 'export_html' => '网页文件', + 'export_pdf' => 'PDF文件', + 'export_text' => '纯文本文件', + + /** + * Permissions and restrictions + */ + 'permissions' => '权限', + 'permissions_intro' => '本设置优先于每个用户角色本身所具有的权限。', + 'permissions_enable' => '启用自定义权限', + 'permissions_save' => '保存权限', + + /** + * Search + */ + 'search_results' => '搜索结果', + 'search_total_results_found' => '共找到了:count个结果', + 'search_clear' => '清除搜索', + 'search_no_pages' => '没有找到相匹配的页面', + 'search_for_term' => '“:term”的搜索结果', + 'search_more' => '更多结果', + 'search_filters' => '过滤搜索结果', + 'search_content_type' => '种类', + 'search_exact_matches' => '精确匹配', + 'search_tags' => '标签搜索', + 'search_viewed_by_me' => '我看过的', + 'search_not_viewed_by_me' => '我没看过的', + 'search_permissions_set' => '权限设置', + 'search_created_by_me' => '我创建的', + 'search_updated_by_me' => '我更新的', + 'search_updated_before' => '在此之前更新', + 'search_updated_after' => '在此之后更新', + 'search_created_before' => '在此之前创建', + 'search_created_after' => '在此之后创建', + 'search_set_date' => '设置日期', + 'search_update' => '只显示更新操作', + + /** + * Books + */ + 'book' => '图书', + 'books' => '图书', + 'x_books' => ':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个章节', + '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个页面', + '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' => '预览', + 'pages_md_insert_image' => '插入图片', + 'pages_md_insert_link' => '插入实体链接', + 'pages_not_in_chapter' => '本页面不在某章节中', + 'pages_move' => '移动页面', + 'pages_move_success' => '页面已移动到「:parentName」', + 'pages_permissions' => '页面权限', + 'pages_permissions_success' => '页面权限已更新', + 'pages_revision' => '修订', + 'pages_revisions' => '页面修订', + 'pages_revisions_named' => '“:pageName”页面修订', + 'pages_revision_named' => '“:pageName”页面修订', + 'pages_revisions_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_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' => ':time,:start。注意不要覆盖对方的更新!', + ], + 'pages_draft_discarded' => '草稿已丢弃,编辑器已更新到当前页面内容。', + + /** + * Editor sidebar + */ + 'page_tags' => '页面标签', + 'tag' => '标签', + 'tags' => '', + 'tag_value' => '标签值 (Optional)', + 'tags_explain' => "添加一些标签以更好地对您的内容进行分类。\n您可以为标签分配一个值,以进行更深入的组织。", + 'tags_add' => '添加另一个标签', + 'attachments' => '附件', + 'attachments_explain' => '上传一些文件或附加一些链接显示在您的网页上。这些在页面的侧边栏中可见。', + 'attachments_explain_instant_save' => '这里的更改将立即保存。Changes here are saved instantly.', + 'attachments_items' => '附加项目', + 'attachments_upload' => '上传文件', + 'attachments_link' => '附加链接', + 'attachments_set_link' => '设置链接', + 'attachments_delete_confirm' => '确认您想要删除此附件后,请点击删除。', + 'attachments_dropzone' => '删除文件或点击此处添加文件', + 'attachments_no_files' => '尚未上传文件', // No files have been uploaded + 'attachments_explain_link' => '如果您不想上传文件,则可以附加链接,这可以是指向其他页面的链接,也可以是指向云端文件的链接。', + 'attachments_link_name' => '链接名', + 'attachment_link' => '附件链接', + 'attachments_link_url' => '链接到文件', + 'attachments_link_url_hint' => '网站或文件的网址', + '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_placeholder' => '在这里评论', + 'comment_count' => '{0} 无评论|[1,*] :count条评论', + 'comment_save' => '保存评论', + 'comment_saving' => '正在保存评论...', + 'comment_deleting' => '正在删除评论...', + 'comment_new' => '新评论', + 'comment_created' => '评论于 :createDiff', + 'comment_updated' => '更新于 :updateDiff (:username)', + 'comment_deleted_success' => '评论已删除', + 'comment_created_success' => '评论已添加', + 'comment_updated_success' => '评论已更新', + 'comment_delete_confirm' => '你确定要删除这条评论?', + 'comment_in_reply_to' => '回复 :commentId', +]; diff --git a/resources/lang/zh_CN/errors.php b/resources/lang/zh_CN/errors.php new file mode 100644 index 000000000..1a5ee4fb6 --- /dev/null +++ b/resources/lang/zh_CN/errors.php @@ -0,0 +1,79 @@ + '您无权访问所请求的页面。', + 'permissionJson' => '您无权执行所请求的操作。', + + // Auth + 'error_user_exists_different_creds' => 'Email为 :email 的用户已经存在,但具有不同的凭据。', + 'email_already_confirmed' => 'Email已被确认,请尝试登录。', + 'email_confirmation_invalid' => '此确认令牌无效或已被使用,请重新注册。', + 'email_confirmation_expired' => '确认令牌已过期,已发送新的确认电子邮件。', + 'ldap_fail_anonymous' => '使用匿名绑定的LDAP访问失败。', + 'ldap_fail_authed' => '带有标识名称和密码的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 :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' => '上传图片时发生错误。', + 'image_upload_error' => '上传图片时发生错误', + + // Attachments + 'attachment_page_mismatch' => '附件更新期间的页面不匹配', + + // Pages + 'page_draft_autosave_fail' => '无法保存草稿,确保您在保存页面之前已经连接到互联网', + 'page_custom_home_deletion' => '无法删除一个被设置为主页的页面', + + // Entities + 'entity_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' => '返回主页', + 'error_occurred' => '出现错误', + 'app_down' => ':appName现在正在关闭', + 'back_soon' => '请耐心等待网站的恢复。', +]; \ No newline at end of file diff --git a/resources/lang/zh_CN/pagination.php b/resources/lang/zh_CN/pagination.php new file mode 100644 index 000000000..f1fc4b5ae --- /dev/null +++ b/resources/lang/zh_CN/pagination.php @@ -0,0 +1,19 @@ + '« 上一页', + 'next' => '下一页 »', + +]; diff --git a/resources/lang/zh_CN/passwords.php b/resources/lang/zh_CN/passwords.php new file mode 100644 index 000000000..d4ba50c49 --- /dev/null +++ b/resources/lang/zh_CN/passwords.php @@ -0,0 +1,22 @@ + '密码必须至少包含六个字符并与确认相符。', + 'user' => "使用该Email地址的用户不存在。", + 'token' => '此密码重置令牌无效。', + 'sent' => '我们已经通过Email发送您的密码重置链接!', + 'reset' => '您的密码已被重置!', + +]; diff --git a/resources/lang/zh_CN/settings.php b/resources/lang/zh_CN/settings.php new file mode 100755 index 000000000..9b731777f --- /dev/null +++ b/resources/lang/zh_CN/settings.php @@ -0,0 +1,117 @@ + '设置', + 'settings_save' => '保存设置', + 'settings_save_success' => '设置已保存', + + /** + * App settings + */ + + 'app_settings' => 'App设置', + 'app_name' => 'App名', + 'app_name_desc' => '此名称将在网页头部和Email中显示。', + 'app_name_header' => '在网页头部显示应用名?', + 'app_public_viewing' => '允许公众查看?', + 'app_secure_images' => '启用更高安全性的图片上传?', + 'app_secure_images_desc' => '出于性能原因,所有图像都是公开的。这个选项会在图像的网址前添加一个随机的,难以猜测的字符串,从而使直接访问变得困难。', + 'app_editor' => '页面编辑器', + 'app_editor_desc' => '选择所有用户将使用哪个编辑器来编辑页面。', + 'app_custom_html' => '自定义HTML头部内容', + 'app_custom_html_desc' => '此处添加的任何内容都将插入到每个页面的部分的底部,这对于覆盖样式或添加分析代码很方便。', + 'app_logo' => 'App Logo', + 'app_logo_desc' => '这个图片的高度应该为43px。
大图片将会被缩小。', + 'app_primary_color' => 'App主色', + 'app_primary_color_desc' => '这应该是一个十六进制值。
保留为空以重置为默认颜色。', + 'app_homepage' => 'App主页', + 'app_homepage_desc' => '选择要在主页上显示的页面来替换默认的视图,选定页面的访问权限将被忽略。', + 'app_homepage_default' => '默认主页视图选择', + 'app_disable_comments' => '禁用评论', + 'app_disable_comments_desc' => '在App的所有页面上禁用评论,现有评论也不会显示出来。', + + /** + * Registration settings + */ + + 'reg_settings' => '注册设置', + 'reg_allow' => '允许注册?', + 'reg_default_role' => '注册后的默认用户角色', + 'reg_confirm_email' => '需要Email验证?', + 'reg_confirm_email_desc' => '如果使用域名限制,则需要Email验证,并且该值将被忽略。', + 'reg_confirm_restrict_domain' => '域名限制', + 'reg_confirm_restrict_domain_desc' => '输入您想要限制注册的Email域名列表,用逗号隔开。在被允许与应用程序交互之前,用户将被发送一封Email来确认他们的地址。
注意用户在注册成功后可以修改他们的Email地址。', + 'reg_confirm_restrict_domain_placeholder' => '尚未设置限制', + + /** + * 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_system' => '系统权限', + 'role_manage_users' => '管理用户', + 'role_manage_roles' => '管理角色与角色权限', + 'role_manage_entity_permissions' => '管理所有图书,章节和页面的权限', + 'role_manage_own_entity_permissions' => '管理自己的图书,章节和页面的权限', + 'role_manage_settings' => '管理App设置', + 'role_asset' => '资源许可', + 'role_asset_desc' => '对系统内资源的默认访问许可将由这些权限控制。单独设置在书籍,章节和页面上的权限将覆盖这里的权限设定。', + 'role_all' => '全部的', + 'role_own' => '拥有的', + 'role_controlled_by_asset' => '由其所在的资源来控制', + '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' => '此用户代表访问您的App的任何访客。它不能用于登录,而是自动分配。', + 'users_books_view_type' => '图书浏览布局偏好', + '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' => '当前图片应该为约256px的正方形。', + 'users_preferred_language' => '语言', + 'users_social_accounts' => '社交账户', + 'users_social_accounts_info' => '在这里,您可以绑定您的其他帐户,以便更快更轻松地登录。如果您选择解除绑定,之后将不能通过此社交账户登录,请设置社交账户来取消本App的访问权限。', + 'users_social_connect' => '绑定账户', + 'users_social_disconnect' => '解除绑定账户', + 'users_social_connected' => ':socialAccount 账户已经成功绑定到您的资料。', + 'users_social_disconnected' => ':socialAccount 账户已经成功解除绑定。', +]; diff --git a/resources/lang/zh_CN/validation.php b/resources/lang/zh_CN/validation.php new file mode 100644 index 000000000..ae1ffd619 --- /dev/null +++ b/resources/lang/zh_CN/validation.php @@ -0,0 +1,108 @@ + ':attribute 需要被同意。', + 'active_url' => ':attribute 并不是一个有效的网址', + '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 KB。', + 'string' => ':attribute 必须在:min到:max个字符之间。', + 'array' => ':attribute 必须在:min到:max项之间.', + ], + 'boolean' => ':attribute 字段必须为真或假。', + 'confirmed' => ':attribute 确认不符。', + 'date' => ':attribute 不是一个有效的日期。', + 'date_format' => ':attribute 不匹配格式 :format。', + 'different' => ':attribute 和 :other 必须不同。', + 'digits' => ':attribute 必须为:digits位数。', + 'digits_between' => ':attribute 必须为:min到:max位数。', + 'email' => ':attribute 必须是有效的电子邮件地址。', + 'filled' => ':attribute 字段是必需的。', + 'exists' => '选中的 :attribute 无效。', + 'image' => ':attribute 必须是一个图片。', + 'in' => '选中的 :attribute 无效。', + 'integer' => ':attribute 必须是一个整数。', + 'ip' => ':attribute 必须是一个有效的IP地址。', + 'max' => [ + 'numeric' => ':attribute 不能超过:max。', + 'file' => ':attribute 不能超过:max KB。', + 'string' => ':attribute 不能超过:max个字符。', + 'array' => ':attribute 不能有超过:max项。', + ], + 'mimes' => ':attribute 必须是 :values 类型的文件。', + 'min' => [ + 'numeric' => ':attribute 至少为:min。', + 'file' => ':attribute 至少为:min KB。', + 'string' => ':attribute 至少为:min个字符。', + 'array' => ':attribute 至少有:min项。', + ], + 'not_in' => '选中的 :attribute 无效。', + 'numeric' => ':attribute 必须是一个数。', + 'regex' => ':attribute 格式无效。', + 'required' => ':attribute 字段是必需的。', + 'required_if' => '当:other为:value时,:attribute 字段是必需的。', + 'required_with' => '当:values存在时,:attribute 字段是必需的。', + 'required_with_all' => '当:values存在时,:attribute 字段是必需的。', + 'required_without' => '当:values不存在时,:attribute 字段是必需的。', + 'required_without_all' => '当:values均不存在时,:attribute 字段是必需的。', + 'same' => ':attribute 与 :other 必须匹配。', + 'size' => [ + 'numeric' => ':attribute 必须为:size。', + 'file' => ':attribute 必须为:size KB。', + 'string' => ':attribute 必须为:size个字符。', + 'array' => ':attribute 必须包含:size项。', + ], + 'string' => ':attribute 必须是字符串。', + 'timezone' => ':attribute 必须是有效的区域。', + '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' => [], + +]; diff --git a/resources/views/books/grid-item.blade.php b/resources/views/books/grid-item.blade.php index cb2b447b0..bb1914b90 100644 --- a/resources/views/books/grid-item.blade.php +++ b/resources/views/books/grid-item.blade.php @@ -1,18 +1,18 @@ -
+
-
-

{{$book->getShortName(35)}}

+
+

{{$book->getShortName(35)}}

@if(isset($book->searchSnippet))

{!! $book->searchSnippet !!}

@else

{{ $book->getExcerpt(130) }}

@endif -
- @include('partials.entity-meta', ['entity' => $book]) -
+
+
\ No newline at end of file diff --git a/resources/views/books/index.blade.php b/resources/views/books/index.blade.php index 2ab819327..0d8a5fad9 100644 --- a/resources/views/books/index.blade.php +++ b/resources/views/books/index.blade.php @@ -66,14 +66,14 @@ @endforeach {!! $books->render() !!} @else -
+
@foreach($books as $key => $book) @include('books/grid-item', ['book' => $book]) @endforeach -
+
+
{!! $books->render() !!}
-
@endif @else

{{ trans('entities.books_empty') }}

diff --git a/resources/views/components/image-manager.blade.php b/resources/views/components/image-manager.blade.php index a4612a4ac..a21f14099 100644 --- a/resources/views/components/image-manager.blade.php +++ b/resources/views/components/image-manager.blade.php @@ -18,7 +18,7 @@
-