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
*/
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,
'SocialiteProviders\Slack\SlackExtendSocialite@handle',
'SocialiteProviders\Azure\AzureExtendSocialite@handle',
'SocialiteProviders\Okta\OktaExtendSocialite@handle',
+ 'SocialiteProviders\GitLab\GitLabExtendSocialite@handle',
'SocialiteProviders\Twitch\TwitchExtendSocialite@handle',
],
];
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.
"socialiteproviders/slack": "^3.0",
"socialiteproviders/microsoft-azure": "^3.0",
"socialiteproviders/okta": "^1.0",
+ "socialiteproviders/gitlab": "^3.0",
"socialiteproviders/twitch": "^3.0"
},
"require-dev": {
"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": {
"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",
"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": [
"wkhtmltoimage",
"wkhtmltopdf"
],
- "time": "2017-08-14T06:48:50+00:00"
+ "time": "2018-02-08T15:58:26+00:00"
},
{
"name": "cogpowered/finediff",
},
{
"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": {
"framework",
"laravel"
],
- "time": "2018-01-18T13:27:23+00:00"
+ "time": "2018-02-06T15:36:55+00:00"
},
{
"name": "laravel/socialite",
],
"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",
+ }
+ ],
+ "description": "GitLab OAuth2 Provider for Laravel Socialite",
+ "time": "2017-01-31T05:06:13+00:00"
+ },
{
"name": "socialiteproviders/manager",
"version": "v3.3.1",
},
{
"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": {
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.6-dev"
+ "dev-master": "1.7-dev"
}
},
"autoload": {
"portable",
"shim"
],
- "time": "2017-10-11T12:05:26+00:00"
+ "time": "2018-01-30T19:27:44+00:00"
},
{
"name": "symfony/process",
"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"
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.0-dev"
+ "dev-master": "3.2-dev"
},
"laravel": {
"providers": [
"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"
"phpstorm",
"sublime"
],
- "time": "2017-07-16T00:24:12+00:00"
+ "time": "2018-02-08T07:56:07+00:00"
},
{
"name": "barryvdh/reflection-docblock",
},
{
"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"
"debug",
"debugbar"
],
- "time": "2017-09-13T12:19:36+00:00"
+ "time": "2017-12-15T11:13:46+00:00"
},
{
"name": "mockery/mockery",
},
{
"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": {
"testing",
"xunit"
],
- "time": "2017-12-17T06:31:19+00:00"
+ "time": "2018-02-01T05:57:37+00:00"
},
{
"name": "phpunit/phpunit-mock-objects",
},
{
"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": {
"compare",
"equality"
],
- "time": "2018-01-12T06:34:42+00:00"
+ "time": "2018-02-01T13:46:46+00:00"
},
{
"name": "sebastian/diff",
return [
-
'env' => env('APP_ENV', 'production'),
'editor' => env('APP_EDITOR', 'html'),
+ 'views' => [
+ 'books' => env('APP_VIEWS_BOOKS', 'list')
+ ],
+
/*
|--------------------------------------------------------------------------
| Application Debug Mode
*/
'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'],
/*
|--------------------------------------------------------------------------
'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'),
--- /dev/null
+<svg viewBox="0 0 64 64" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;"><g id="Group"><path id="Fill-4" d="M32.134,64.345l11.785,-39.372l-23.569,0l11.784,39.372Z" style="fill:#e24329;"/><path id="Fill-8" d="M32.134,64.345l-11.784,-39.372l-16.515,0l28.299,39.372Z" style="fill:#fc6d26;"/><path id="Fill-12" d="M3.835,24.973l-3.581,11.965c-0.327,1.091 0.031,2.287 0.886,2.961l30.994,24.446l-28.299,-39.372Z" style="fill:#fca326;"/><path id="Fill-16" d="M3.835,24.973l16.515,0l-7.097,-23.713c-0.366,-1.22 -1.956,-1.22 -2.321,0l-7.097,23.713Z" style="fill:#e24329;"/><path id="Fill-18" d="M32.134,64.345l11.785,-39.372l16.515,0l-28.3,39.372Z" style="fill:#fc6d26;"/><path id="Fill-20" d="M60.434,24.973l3.581,11.965c0.326,1.091 -0.031,2.287 -0.886,2.961l-30.995,24.446l28.3,-39.372Z" style="fill:#fca326;"/><path id="Fill-22" d="M60.434,24.973l-16.515,0l7.097,-23.713c0.365,-1.22 1.955,-1.22 2.32,0l7.098,23.713Z" style="fill:#e24329;"/></g></svg>
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 {
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;
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);
}
}
-.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;
-}
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
'ja' => '日本語',
'pl' => 'Polski',
'it' => 'Italian',
- 'ru' => 'Русский'
+ 'ru' => 'Русский',
+ 'zh_CN' => '简体中文'
]
///////////////////////////////////
];
--- /dev/null
+<?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' => '图书已重新排序成功',
+
+ // Other
+ 'commented_on' => '评论',
+];
--- /dev/null
+<?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' => '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
--- /dev/null
+<?php
+return [
+
+ /**
+ * Buttons
+ */
+ 'cancel' => '取消',
+ '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',
+];
--- /dev/null
+<?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_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
--- /dev/null
+<?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' => '由 :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',
+];
--- /dev/null
+<?php
+
+return [
+
+ /**
+ * Error text strings.
+ */
+
+ // Permissions
+ 'permission' => '您无权访问所请求的页面。',
+ '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
--- /dev/null
+<?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' => '« 上一页',
+ 'next' => '下一页 »',
+
+];
--- /dev/null
+<?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' => '密码必须至少包含六个字符并与确认相符。',
+ 'user' => "使用该Email地址的用户不存在。",
+ 'token' => '此密码重置令牌无效。',
+ 'sent' => '我们已经通过Email发送您的密码重置链接!',
+ 'reset' => '您的密码已被重置!',
+
+];
--- /dev/null
+<?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设置',
+ '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' => '此处添加的任何内容都将插入到每个页面的<head>部分的底部,这对于覆盖样式或添加分析代码很方便。',
+ 'app_logo' => 'App Logo',
+ 'app_logo_desc' => '这个图片的高度应该为43px。<br>大图片将会被缩小。',
+ 'app_primary_color' => 'App主色',
+ 'app_primary_color_desc' => '这应该是一个十六进制值。<br>保留为空以重置为默认颜色。',
+ '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来确认他们的地址。<br>注意用户在注册成功后可以修改他们的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 账户已经成功解除绑定。',
+];
--- /dev/null
+<?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 并不是一个有效的网址',
+ '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' => [],
+
+];
-<div class="col-xs-12 col-sm-4 col-md-4 col-lg-4 book-grid-item" data-entity-type="book" data-entity-id="{{$book->id}}">
+<div class="book-grid-item grid-card" data-entity-type="book" data-entity-id="{{$book->id}}">
<div class="featured-image-container">
<a href="{{$book->getUrl()}}" title="{{$book->name}}">
- <img width="1600" height="900" src="{{$book->getBookCover()}}" alt="{{$book->name}}">
+ <img src="{{$book->getBookCover()}}" alt="{{$book->name}}">
</a>
</div>
- <div class="book-grid-content">
- <h2><a href="{{$book->getUrl()}}" title="{{$book->name}}" > {{$book->getShortName(35)}} </a></h2>
+ <div class="grid-card-content">
+ <h2><a href="{{$book->getUrl()}}" title="{{$book->name}}">{{$book->getShortName(35)}}</a></h2>
@if(isset($book->searchSnippet))
<p >{!! $book->searchSnippet !!}</p>
@else
<p >{{ $book->getExcerpt(130) }}</p>
@endif
- <div >
- <span>@include('partials.entity-meta', ['entity' => $book])</span>
- </div>
+ </div>
+ <div class="grid-card-footer">
+ <span>@include('partials.entity-meta', ['entity' => $book])</span>
</div>
</div>
\ No newline at end of file
@endforeach
{!! $books->render() !!}
@else
- <div class="row auto-clear">
+ <div class="grid third">
@foreach($books as $key => $book)
@include('books/grid-item', ['book' => $book])
@endforeach
- <div class="col-xs-12">
+ </div>
+ <div>
{!! $books->render() !!}
</div>
- </div>
@endif
@else
<p class="text-muted">{{ trans('entities.books_empty') }}</p>
</div>
</div>
<div v-show="view === 'all'" >
- <form @submit="searchImages" class="contained-search-box">
+ <form @submit.prevent="searchImages" class="contained-search-box">
<input placeholder="{{ trans('components.image_search_hint') }}" v-model="searchTerm">
<button :class="{active: searching}" title="{{ trans('common.search_clear') }}" type="button" @click="cancelSearch()" class="text-button cancel"><i class="zmdi zmdi-close-circle-o"></i></button>
<button title="{{ trans('common.search') }}" class="text-button"><i class="zmdi zmdi-search"></i></button>
</tr>
</table>
- <h6 class="text-muted">Options</h6>
- <label class="checkbox">
- <input type="checkbox" v-on:change="optionChange('viewed_by_me')"
- v-model="search.option.viewed_by_me" value="page">
- {{ trans('entities.search_viewed_by_me') }}
- </label>
- <label class="checkbox">
- <input type="checkbox" v-on:change="optionChange('not_viewed_by_me')"
- v-model="search.option.not_viewed_by_me" value="page">
- {{ trans('entities.search_not_viewed_by_me') }}
- </label>
- <label class="checkbox">
- <input type="checkbox" v-on:change="optionChange('is_restricted')"
- v-model="search.option.is_restricted" value="page">
- {{ trans('entities.search_permissions_set') }}
- </label>
- <label class="checkbox">
- <input type="checkbox" v-on:change="optionChange('created_by:me')"
- v-model="search.option['created_by:me']" value="page">
- {{ trans('entities.search_created_by_me') }}
- </label>
- <label class="checkbox">
- <input type="checkbox" v-on:change="optionChange('updated_by:me')"
- v-model="search.option['updated_by:me']" value="page">
- {{ trans('entities.search_updated_by_me') }}
- </label>
+ @if(signedInUser())
+ <h6 class="text-muted">Options</h6>
+ <label class="checkbox">
+ <input type="checkbox" v-on:change="optionChange('viewed_by_me')"
+ v-model="search.option.viewed_by_me" value="page">
+ {{ trans('entities.search_viewed_by_me') }}
+ </label>
+ <label class="checkbox">
+ <input type="checkbox" v-on:change="optionChange('not_viewed_by_me')"
+ v-model="search.option.not_viewed_by_me" value="page">
+ {{ trans('entities.search_not_viewed_by_me') }}
+ </label>
+ <label class="checkbox">
+ <input type="checkbox" v-on:change="optionChange('is_restricted')"
+ v-model="search.option.is_restricted" value="page">
+ {{ trans('entities.search_permissions_set') }}
+ </label>
+ <label class="checkbox">
+ <input type="checkbox" v-on:change="optionChange('created_by:me')"
+ v-model="search.option['created_by:me']" value="page">
+ {{ trans('entities.search_created_by_me') }}
+ </label>
+ <label class="checkbox">
+ <input type="checkbox" v-on:change="optionChange('updated_by:me')"
+ v-model="search.option['updated_by:me']" value="page">
+ {{ trans('entities.search_updated_by_me') }}
+ </label>
+ @endif
<h6 class="text-muted">Date Options</h6>
<table cellpadding="0" cellspacing="0" border="0" class="no-style form-table">
<a href="{{ $nextPageLink }}" class="button">{{ trans('entities.search_more') }}</a>
@endif
</div>
-@stop
\ No newline at end of file
+@stop