mediatheque

This commit is contained in:
armansansd
2023-07-18 10:47:46 +01:00
commit 4b7c97a02e
3044 changed files with 544089 additions and 0 deletions
View File
+17
View File
@@ -0,0 +1,17 @@
lecteur:
access:
admin:
login: false
super: false
cache: false
configuration: false
pages: false
maintenance: false
statistics: false
plugins: false
themes: false
tools: false
users: false
flex-objects: false
readableName: Lecteur
enabled: true
+263
View File
@@ -0,0 +1,263 @@
types:
defaults:
type: file
thumb: media/thumb.png
mime: application/octet-stream
image:
filters:
default: [enableProgressive]
jpg:
type: image
thumb: media/thumb-jpg.png
mime: image/jpeg
image: null
jpe:
type: image
thumb: media/thumb-jpg.png
mime: image/jpeg
image: null
jpeg:
type: image
thumb: media/thumb-jpg.png
mime: image/jpeg
image: null
png:
type: image
thumb: media/thumb-png.png
mime: image/png
image: null
gif:
type: animated
thumb: media/thumb-gif.png
mime: image/gif
image: null
svg:
type: vector
thumb: media/thumb-svg.png
mime: image/svg+xml
image: null
mp4:
type: video
thumb: media/thumb-mp4.png
mime: video/mp4
image: null
mov:
type: video
thumb: media/thumb-mov.png
mime: video/quicktime
image: null
m4v:
type: video
thumb: media/thumb-m4v.png
mime: video/x-m4v
image: null
swf:
type: video
thumb: media/thumb-swf.png
mime: video/x-flv
image: null
flv:
type: video
thumb: media/thumb-flv.png
mime: video/x-flv
image: null
webm:
type: video
thumb: media/thumb-webm.png
mime: video/webm
image: null
ogv:
type: video
thumb: media/thumb-ogg.png
mime: video/ogg
image: null
mp3:
type: audio
thumb: media/thumb-mp3.png
mime: audio/mp3
image: null
ogg:
type: audio
thumb: media/thumb-ogg.png
mime: audio/ogg
image: null
wma:
type: audio
thumb: media/thumb-wma.png
mime: audio/wma
image: null
m4a:
type: audio
thumb: media/thumb-m4a.png
mime: audio/m4a
image: null
wav:
type: audio
thumb: media/thumb-wav.png
mime: audio/wav
image: null
aiff:
type: audio
thumb: media/thumb-aif.png
mime: audio/aiff
image: null
aif:
type: audio
thumb: media/thumb-aif.png
mime: audio/aif
image: null
txt:
type: file
thumb: media/thumb-txt.png
mime: text/plain
image: null
xml:
type: file
thumb: media/thumb-xml.png
mime: application/xml
image: null
doc:
type: file
thumb: media/thumb-doc.png
mime: application/msword
image: null
docx:
type: file
thumb: media/thumb-docx.png
mime: application/msword
image: null
xls:
type: file
thumb: media/thumb-xls.png
mime: application/vnd.ms-excel
image: null
xlsx:
type: file
thumb: media/thumb-xlsx.png
mime: application/vnd.ms-excel
image: null
ppt:
type: file
thumb: media/thumb-ppt.png
mime: application/vnd.ms-powerpoint
image: null
pptx:
type: file
thumb: media/thumb-pptx.png
mime: application/vnd.ms-powerpoint
image: null
pps:
type: file
thumb: media/thumb-pps.png
mime: application/vnd.ms-powerpoint
image: null
rtf:
type: file
thumb: media/thumb-rtf.png
mime: application/rtf
image: null
bmp:
type: file
thumb: media/thumb-bmp.png
mime: image/bmp
image: null
tiff:
type: file
thumb: media/thumb-tiff.png
mime: image/tiff
image: null
mpeg:
type: file
thumb: media/thumb-mpg.png
mime: video/mpeg
image: null
mpg:
type: file
thumb: media/thumb-mpg.png
mime: video/mpeg
image: null
mpe:
type: file
thumb: media/thumb-mpe.png
mime: video/mpeg
image: null
avi:
type: file
thumb: media/thumb-avi.png
mime: video/msvideo
image: null
wmv:
type: file
thumb: media/thumb-wmv.png
mime: video/x-ms-wmv
image: null
html:
type: file
thumb: media/thumb-html.png
mime: text/html
image: null
htm:
type: file
thumb: media/thumb-html.png
mime: text/html
image: null
ics:
type: iCal
thumb: media/thumb-ics.png
mime: text/calendar
image: null
pdf:
type: file
thumb: media/thumb-pdf.png
mime: application/pdf
image: null
ai:
type: file
thumb: media/thumb-ai.png
mime: image/ai
image: null
psd:
type: file
thumb: media/thumb-psd.png
mime: image/psd
image: null
zip:
type: file
thumb: media/thumb-zip.png
mime: application/zip
image: null
7z:
type: file
thumb: media/thumb-7z.png
mime: application/x-7z-compressed
image: null
gz:
type: file
thumb: media/thumb-gz.png
mime: application/gzip
image: null
tar:
type: file
thumb: media/thumb-tar.png
mime: application/x-tar
image: null
css:
type: file
thumb: media/thumb-css.png
mime: text/css
image: null
js:
type: file
thumb: media/thumb-js.png
mime: application/javascript
image: null
json:
type: file
thumb: media/thumb-json.png
mime: application/json
image: null
odt:
type: file
thumb: null
mime: null
image: null
+101
View File
@@ -0,0 +1,101 @@
enabled: true
route: /admin
cache_enabled: true
theme: grav
logo_text: null
body_classes: null
content_padding: true
twofa_enabled: true
sidebar:
activate: tab
hover_delay: 100
size: auto
dashboard:
days_of_stats: 7
widgets_display:
dashboard-maintenance: 'true'
dashboard-statistics: 'true'
dashboard-notifications: 'false'
dashboard-feed: 'false'
dashboard-pages: 'true'
pages:
show_parents: both
show_modular: true
parents_levels: null
session:
timeout: 6000
edit_mode: normal
frontend_preview_target: inline
show_github_msg: true
admin_icons: line-awesome
enable_auto_updates_check: false
notifications:
feed: false
dashboard: false
plugins: false
themes: false
popularity:
enabled: true
ignore:
- '/test*'
- /modular
history:
daily: '30'
monthly: '12'
visitors: '20'
whitelabel:
quicktray_recompile: false
codemirror_theme: paper
codemirror_fontsize: md
codemirror_md_font: sans
logo_custom: { }
logo_login: { }
color_scheme:
accents:
primary-accent: button
secondary-accent: notice
tertiary-accent: critical
colors:
logo-bg: '#323640'
logo-link: '#FFFFFF'
nav-bg: '#3D424E'
nav-text: '#B7B9BD'
nav-link: '#ffffff'
nav-selected-bg: '#323640'
nav-selected-link: '#ffffff'
nav-hover-bg: '#434753'
nav-hover-link: '#ffffff'
toolbar-bg: '#ffffff'
toolbar-text: '#3D424E'
page-bg: '#F6F6F6'
page-text: '#6f7b8a'
page-link: '#0090D9'
content-bg: '#ffffff'
content-text: '#6f7b8a'
content-link: '#0090D9'
content-link2: '#da4b46'
content-header: '#414147'
content-tabs-bg: '#e6e6e6'
content-tabs-text: '#808080'
button-bg: '#0090D9'
button-text: '#ffffff'
notice-bg: '#06A599'
notice-text: '#ffffff'
update-bg: '#77559D'
update-text: '#ffffff'
critical-bg: '#F45857'
critical-text: '#ffffff'
content-highlight: '#ffffd7'
name: null
custom_footer: null
custom_css: null
custom_presets: null
show_beta_msg: null
pagemedia:
resize_width: 0
resize_height: 0
res_min_width: 0
res_min_height: 0
res_max_width: 0
res_max_height: 0
resize_quality: 0.8
+2
View File
@@ -0,0 +1,2 @@
enabled: true
user: true
+11
View File
@@ -0,0 +1,11 @@
enabled: true
description:
enabled: true
length: 30
keywords:
enabled: true
length: 20
facebook:
enabled: true
twitter:
enabled: true
+13
View File
@@ -0,0 +1,13 @@
enabled: true
cdn: true
popup_background_color: '#000000'
popup_text_color: '#ffffff'
button_background_color: '#e94d1a'
button_text_color: '#000000'
button_border_color: '#e94d1a'
position: bottom
theme: block
content_message: 'Ce site contient des cookies déposés via des services de partage de vidéos, ils sont destinés à permettre à l''utilisateur de visualiser le contenu multimédia directement sur le site.'
content_dismiss: 'J''accepte'
content_link: 'En savoir plus'
content_href: 'https://policies.google.com/privacy?hl=fr&gl=fr'
+19
View File
@@ -0,0 +1,19 @@
enabled: true
from: contact@armansansd.net
to: contact@armansansd.net
mailer:
engine: sendmail
smtp:
server: localhost
port: 25
encryption: none
user: null
password: null
sendmail:
bin: '/usr/sbin/sendmail -bs'
content_type: text/html
debug: false
cc: null
bcc: null
reply_to: null
body: null
+3
View File
@@ -0,0 +1,3 @@
enabled: true
built_in_css: true
untranslated_pages_behavior: none
+3
View File
@@ -0,0 +1,3 @@
enabled: true
built_in_css: true
delta: 0
+33
View File
@@ -0,0 +1,33 @@
enabled: true
seo:
robots: without
length: 20
taxonomy:
enabled: true
page_content:
enabled: false
breadcrumb: false
keywords:
taxonomy:
enabled: true
page_content:
enabled: true
length: 20
quote:
convert_simple: true
image:
use_cache: true
social_pages:
pages:
twitter:
enabled: true
type: summary_large_image
username: null
facebook:
opengraph:
enabled: false
insights:
enabled: false
appid: '1234567890'
default:
image: { }
+2
View File
@@ -0,0 +1,2 @@
enabled: true
route: /actualites
+80
View File
@@ -0,0 +1,80 @@
enabled: true
restrictions:
whitelist: false
blacklist: false
whitelist:
items:
- '@root.descendants'
filter:
published: true
non-published: true
blacklist:
items:
- '@none'
filter:
published: true
non-published: true
apikey: r2duxdbywfre1kmk3ft7z998eyt5mnsmkyqcp41hthzk5jcc
plugins:
- advlist
- anchor
- autoresize
- charmap
- code
- colorpicker
- emoticons
- fullscreen
- hr
- image
- insertdatetime
- link
- lists
- media
- nonbreaking
- pagebreak
- paste
- print
- searchreplace
- table
- textcolor
- toc
- visualchars
- wordcount
parameters:
-
name: paste_data_images
value: '1'
-
name: paste_data_images
value: '1'
evals: ''
menubar: false
menu:
-
title: File
items: 'newdocument print'
-
title: Edit
items: 'undo redo | cut copy paste pastetext | selectall | searchreplace'
-
title: Insert
items: 'media link image | pagebreak charmap anchor hr insertdatetime nonbreaking toc'
-
title: View
items: 'visualchars visualaid | fullscreen'
-
title: Format
items: 'bold italic underline strikethrough superscript subscript | formats | removeformat'
-
title: Table
items: 'inserttable tableprops deletetable | cell row column'
-
title: Tools
items: code
toolbar:
-
row: 'formatselect | undo redo | visualchars | image media | link unlink | blockquote | nonbreaking | | bold italic underline | bullist numlist | superscript subscript | removeformat table'
-
row: null
branding: false
statusbar: false
+28
View File
@@ -0,0 +1,28 @@
enabled: true
search_route: /search
query_route: /s
built_in_css: true
built_in_js: true
built_in_search_page: true
enable_admin_page_events: true
search_type: auto
fuzzy: true
phrases: true
stemmer: default
display_route: true
display_hits: true
display_time: true
live_uri_update: true
limit: '20'
min: '3'
snippet: '300'
index_page_by_default: true
scheduled_index:
enabled: true
at: '0 0 * * 1'
logs: logs/tntsearch-index.out
filter:
items:
- root@.descendants
powered_by: true
search_object_type: Grav
View File
+1
View File
@@ -0,0 +1 @@
salt: w2FWPbaOYk5Sxg
+19
View File
@@ -0,0 +1,19 @@
title: 'Tournons la Page'
default_lang: fr
author:
name: 'tournons la page'
email: contact@tournonslapage.org
taxonomies:
- category
- tag
metadata:
description: 'Tournons La Page est un mouvement citoyen qui entend rassembler le plus largement possible autour d''une vision et des valeurs communes de respect des droits humains fondamentaux et des principes démocratiques.'
summary:
enabled: true
format: short
size: 300
delimiter: '==='
redirects: null
routes: null
blog:
route: /blog
View File
+239
View File
@@ -0,0 +1,239 @@
absolute_urls: false
timezone: null
param_sep: ':'
wrapped_site: false
reverse_proxy_setup: false
force_ssl: false
force_lowercase_urls: true
custom_base_url: null
username_regex: '^[a-z0-9_-]{3,16}$'
pwd_regex: '(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}'
intl_enabled: true
http_x_forwarded:
protocol: true
host: false
port: true
ip: true
languages:
supported:
- fr
- en
default_lang: fr
include_default_lang: true
include_default_lang_file_extension: true
translations: true
translations_fallback: true
session_store_active: false
http_accept_language: false
override_locale: false
pages_fallback_only: false
debug: false
home:
alias: /home
hide_in_urls: false
pages:
type: regular
dirs:
- 'page://'
theme: plain
order:
by: default
dir: asc
list:
count: 20
dateformat:
default: null
short: 'jS M Y'
long: 'F jS \a\t g:ia'
publish_dates: true
process:
markdown: true
twig: false
twig_first: false
never_cache_twig: false
events:
page: true
twig: true
markdown:
extra: false
auto_line_breaks: false
auto_url_links: false
escape_markup: false
special_chars:
'>': gt
'<': lt
valid_link_attributes:
- rel
- target
- id
- class
- classes
types:
- html
- htm
- xml
- txt
- json
- rss
- atom
append_url_extension: null
expires: 604800
cache_control: null
last_modified: false
etag: false
vary_accept_encoding: false
redirect_default_code: '302'
redirect_trailing_slash: 1
redirect_default_route: 0
ignore_files:
- .DS_Store
ignore_folders:
- .git
- .idea
ignore_hidden: true
hide_empty_folders: false
url_taxonomy_filters: true
frontmatter:
process_twig: false
ignore_fields:
- form
- forms
cache:
enabled: false
check:
method: file
driver: auto
prefix: g
purge_at: '0 4 * * *'
clear_at: '0 3 * * *'
clear_job_type: all
clear_images_by_default: true
cli_compatibility: false
lifetime: 604800
gzip: true
allow_webserver_gzip: true
redis:
socket: null
password: null
database: null
server: null
port: null
memcache:
server: null
port: null
memcached:
server: null
port: null
twig:
cache: true
debug: false
auto_reload: true
autoescape: false
undefined_functions: true
undefined_filters: true
safe_functions: { }
safe_filters: { }
umask_fix: false
assets:
css_pipeline: true
css_pipeline_include_externals: true
css_pipeline_before_excludes: true
css_minify: true
css_minify_windows: false
css_rewrite: true
js_pipeline: true
js_pipeline_include_externals: true
js_pipeline_before_excludes: true
js_module_pipeline: false
js_module_pipeline_include_externals: true
js_module_pipeline_before_excludes: true
js_minify: true
enable_asset_timestamp: false
enable_asset_sri: false
collections:
jquery: 'system://assets/jquery/jquery-2.x.min.js'
errors:
display: 1
log: false
log:
handler: file
syslog:
facility: local6
tag: grav
debugger:
enabled: true
provider: debugbar
censored: false
shutdown:
close_connection: true
twig: true
images:
default_image_quality: 85
cache_all: false
cache_perms: '0755'
debug: false
auto_fix_orientation: false
seofriendly: false
cls:
auto_sizes: false
aspect_ratio: false
retina_scale: '1'
defaults:
loading: auto
watermark:
image: 'system://images/watermark.png'
position_y: center
position_x: center
scale: 33
watermark_all: false
media:
enable_media_timestamp: false
unsupported_inline_types: null
allowed_fallback_types: null
auto_metadata_exif: false
upload_limit: 8388608
session:
enabled: true
initialize: true
timeout: 3000
name: grav-site
uniqueness: path
secure: false
secure_https: true
httponly: true
samesite: Lax
split: true
domain: null
path: null
gpm:
releases: stable
official_gpm_only: true
method: auto
verify_peer: false
http:
method: auto
enable_proxy: true
proxy_url: null
proxy_cert_path: null
concurrent_connections: 5
verify_peer: true
verify_host: true
accounts:
type: regular
storage: file
avatar: gravatar
flex:
cache:
index:
enabled: true
lifetime: 60
object:
enabled: true
lifetime: 600
render:
enabled: true
lifetime: 600
strict_mode:
yaml_compat: true
twig_compat: true
blueprint_compat: true
+3
View File
@@ -0,0 +1,3 @@
enabled: true
dropdown:
enabled: true
+25
View File
@@ -0,0 +1,25 @@
core:
grav:
version: 1.7.42.1
history:
version: 1.6.31
date: '2021-01-15 14:11:30'
0: { version: 1.7.5, date: '2021-02-08 13:39:58' }
1: { version: 1.7.7, date: '2021-03-04 13:20:41' }
2: { version: 1.7.9, date: '2021-03-22 17:05:54' }
3: { version: 1.7.10, date: '2021-04-07 08:19:14' }
4: { version: 1.7.15, date: '2021-05-20 08:16:55' }
5: { version: 1.7.16, date: '2021-06-04 13:32:43' }
6: { version: 1.7.17, date: '2021-06-21 07:55:11' }
7: { version: 1.7.18, date: '2021-08-19 07:46:49' }
8: { version: 1.7.23, date: '2021-10-26 12:14:15' }
9: { version: 1.7.25, date: '2021-12-11 13:23:27' }
10: { version: 1.7.26.1, date: '2022-01-13 15:56:19' }
11: { version: 1.7.27.1, date: '2022-01-13 15:58:17' }
12: { version: 1.7.30, date: '2022-02-28 13:58:46' }
13: { version: 1.7.31, date: '2022-03-15 10:23:00' }
14: { version: 1.7.32, date: '2022-04-22 09:52:03' }
15: { version: 1.7.33, date: '2022-05-26 10:42:44' }
16: { version: 1.7.35, date: '2022-08-10 12:01:48' }
17: { version: 1.7.42.1, date: '2023-06-27 13:17:25' }
schema: 1.7.0_2020-11-20_1
+12
View File
@@ -0,0 +1,12 @@
DANGER:
ARREST: Arrested since
PRISON: In prison since
FREE: Free since
MENACE: Menaced since
COALITION: Coalitions
MEMBER: Members under threat supported by our emergency fund
ORGA: Organisations
MEDIA:
DOWNLOAD: Download
CONNECTION: Login to access the media
LOGOUT: Log out
+12
View File
@@ -0,0 +1,12 @@
DANGER:
ARREST: Arrêté·e le
PRISON: En prison depuis
FREE: Libéré·e le
MENACE: Menacé·e depuis le
COALITION: Coalitions
MEMBER: Membres en danger appuyés par notre fonds durgence
ORGA: Organisations
MEDIA:
DOWNLOAD: Télécharger
CONNECTION: Connectez-vous pour accéder au média
LOGOUT: Déconnection
View File
+2
View File
@@ -0,0 +1,2 @@
.DS_Store
.php_cs.cache
+83
View File
@@ -0,0 +1,83 @@
<?php
/**
* This file represents the configuration for Code Sniffing PSR-2-related
* checks of coding guidelines and is based on a template from the news extension
* by Georg Ringer for the TYPO3 CMS.
*
* Install @fabpot's great php-cs-fixer tool via
*
* $ composer global require friendsofphp/php-cs-fixer
*
* And then simply run
*
* $ php-cs-fixer fix --config .php_cs
*
* For more information read:
* http://www.php-fig.org/psr/psr-2/
* http://cs.sensiolabs.org
*/
if (PHP_SAPI !== 'cli') {
die('This script supports command line usage only. Please check your command.');
}
// Define in which folders to search and which folders to exclude
// Exclude some directories that are excluded by Git anyways to speed up the sniffing
$finder = PhpCsFixer\Finder::create()
->exclude('vendor/')
->in(__DIR__);
// Return a Code Sniffing configuration using
// all sniffers needed for PSR-2
// and additionally:
// - Remove leading slashes in use clauses.
// - PHP single-line arrays should not have trailing comma.
// - Single-line whitespace before closing semicolon are prohibited.
// - Remove unused use statements in the PHP source code
// - Ensure Concatenation to have at least one whitespace around
// - Remove trailing whitespace at the end of blank lines.
return PhpCsFixer\Config::create()
->setRiskyAllowed(true)
->setRules([
'@PSR2' => true,
'align_multiline_comment' => [
'comment_type' => 'all_multiline',
],
'array_syntax' => [
'syntax' => 'short'
],
'binary_operator_spaces' => [
'default' => 'single_space'
],
'concat_space' => [
'spacing' => 'one'
],
'function_typehint_space' => true,
'hash_to_slash_comment' => true,
'lowercase_cast' => true,
'native_function_casing' => true,
'no_alias_functions' => true,
'no_blank_lines_after_phpdoc' => true,
'no_empty_statement' => true,
'no_extra_consecutive_blank_lines' => true,
'no_leading_import_slash' => true,
'no_leading_namespace_whitespace' => true,
'no_trailing_comma_in_singleline_array' => true,
'no_short_bool_cast' => true,
'no_singleline_whitespace_before_semicolons' => true,
'no_unused_imports' => true,
'no_unneeded_control_parentheses' => true,
'no_whitespace_in_blank_line' => true,
'ordered_imports' => true,
'phpdoc_no_empty_return' => true,
'phpdoc_no_package' => false,
'phpdoc_scalar' => true,
'phpdoc_trim' => true,
'return_type_declaration' => [
'space_before' => 'none'
],
'self_accessor' => true,
'single_quote' => true,
'standardize_not_equals' => true,
'whitespace_after_comma_in_array' => true,
])
->setFinder($finder);
+37
View File
@@ -0,0 +1,37 @@
# v.1.1.0
## 05-06-2020
1. [](#new)
* Page specific media metadata fields can be added to a pages frontmatter (see README --> Configuration)
2. [](#improved)
* meta.yaml file will not be created upon upload anymore: this allows the creation of the file with the setting media.auto_metadata_exif turned on (in Admin Plugin 1.9); in Admin Plugin 1.10 it did not work anyway **NOTE: in Admin Plugin 1.10 with setting media.auto_metadata_exif turned on, make sure to save the page with a newly uploaded image before adding other metadata using this plugin**
# v1.0.2
## 16-04-2020
1. [](#improved)
* The button next to a media file will now also be translated. It was hard-coded to English before.
# v1.0.1
## 10-04-2020
1. [](#bugfix)
* meta.yaml file will now be created for an already uploaded media file that did not have an associated meta.yaml file before
# v1.0.0
## 20-03-2020
1. [](#improved)
* using core technology (Grav\Common\Yaml) for parsing and writing the meta.yaml files  kudos to https://github.com/renards for adding crucial parts to the code
# v0.9.1
## 16-03-2020
1. [](#bugfix)
* adding /vendor/ and composer.lock, needed for composer autoload functionality
# v0.9.0
## 15-03-2020
1. [](#new)
* Initial release
+21
View File
@@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2020 Clive Beckett
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+90
View File
@@ -0,0 +1,90 @@
# Admin Addon Media Metadata Plugin
The **Admin Addon Media Metadata** Plugin is an extension for the [Grav CMS](http://github.com/getgrav/grav) [Admin plugin](https://github.com/getgrav/grav-plugin-admin). It lets you add and **edit metadata for media files** in the Page Media browser.
The Admin plugin has not been offering a feature like this yet. In order to add/edit metadata e.g. for an image you had to create a [image.filename].meta.yaml for the image in your file browser and edit it in a text editor.
## Usage and Features
- the plugin will create and edit [mediafile].meta.yaml files in your page folder via a simple form in the Admin plugin
- by default you can add/edit a **title,** **alt** text, and a **caption** see *Configuration* section below on how to adapt this for your Grav installation
- multiline text can be added (e.g. for caption)
- in case you are storing additional, manually added data in your [mediafile].meta.yaml file, it will not be overwritten even if the form does not let you change it
### How to use it
*(see also screenshots below)*
1. hover any file in your Page Media section
2. hit the small «i» button to open the metadata form *(the regular «i» button which just showed the metadata will be overwritten by the plugin)*
### NOTE on setting “Auto metadata from Exif”
If your system is set to automatically write EXIF metadata
`(system.yaml → media.auto_metadata_exif: true)`
- On **Admin Plugin 1.10:**
Please **save the page** after uploading an image and **before** you write additional metadata using this plugin. On saving the page, the Admin Plugin will create the meta.yaml file including the EXIF data but it wont do so if a meta.yaml file already exists.
- On **Admin Plugin 1.9** and **admin-addon-media-metadata >= 1.1.0:**
Theres no problem here: the EXIF data will be written immediately upon upload whereas this plugin now only writes or edits meta.yaml files when needed.
## Installation
### Grav Package Manager (GPM)
If you can access your Grav installation via the command line, install the plugin by typing the following from your Grav root:
```
bin/gpm install admin-addon-media-metadata
```
### Admin Tool Web Interface
In the **Plugins** section, hit the **[+ Add]** button, search for Admin Addon Media Metadata and install.
### Manual Installation
To install the plugin manually, download the ZIP version of the latest release of this repository and unzip it under `/your/site/grav/user/plugins`. Then rename the folder to `admin-addon-media-metadata`. You can find these files on [GitHub](https://github.com/clivebeckett/grav-plugin-admin-addon-media-metadata/releases).
## Configuration
The default fields in the metadata form are alt, title, and caption. If you want to add more data to your meta.yaml files, please copy
`user/plugins/admin-addon-media-metadata/admin-addon-media-metadata.yaml` to
`user/config/plugins/admin-addon-media-metadata.yaml`
and add more form fields to the form by updating the copy. E.g. if you want to add a field for a web link, you might add the following lines:
```
- type: text
label: Web link
name: weblink
placeholder: https://domain.tld/
```
The URL field will be available in your metadata form and youll be able edit the information.
### Additional Page Specific Metadata Fields (v1.1 and later)
You may also add page specific fields to a pages frontmatter. *Note: The fields will be added to the form, not override the ones from the above mentioned config files:*
```
admin-addon-media-metadata:
metadata_form:
fields:
-
type: text
label: 'Yet another field'
name: yetAnotherField
placeholder: 'yet yet yet'
```
## Credits
I have based the plugin on Dávid Szabó’s [Admin Addon Media Rename plugin](https://github.com/david-szabo97/grav-plugin-admin-addon-media-rename). Much of the code would not have been possible for me without Dávids work.
[@renards](https://github.com/renards) helped a lot in replacing my original self-written Yaml parsing and writing code with Grav core technology and thus made version 1.0.0 possible.
## Screenshots
![](assets/1-open-form.jpg)
![](assets/2-form-opened.jpg)
@@ -0,0 +1,40 @@
span[data-dz-name] {
cursor: text;
}
.dz-metadata-edit {
display: none;
position: absolute;
width: 25px;
height: 25px;
right: -26px;
font-size: 0;
cursor: pointer;
background: #ededed;
/* bottom: 25px; */
top: 49px;
}
.dz-metadata-edit:after {
text-align: center;
display: block;
font-family: FontAwesome;
font-size: 18px;
line-height: 25px;
/* content: "\f044"; */
content: "\f05a";
color: #737c81;
}
.dz-metadata-edit:hover:after {
color: #0082ba;
}
.dropzone .dz-preview:hover .dz-metadata-edit {
display: block;
}
div.form-label { padding-right: 1rem; }
[data-remodal-id=modal-admin-addon-media-metadata] h1 { line-height: 1; }
form h1 span.header { }
form h1 span.filename { font-size: 1rem; }
@@ -0,0 +1,113 @@
/**
* some of the code is based on the Admin Addon Media Rename by Dávid Szabó
* see https://github.com/david-szabo97/grav-plugin-admin-addon-media-rename
*/
$(function() {
adminAddonMediaMetadata.metadata = {};
var clickedElement;
var fileName;
var $elementName;
var modal;
var $modal;
var isPageMedia = false;
// Append modal
$('body').append(adminAddonMediaMetadata.MODAL);
$(document).off('click', '[data-dz-name], .dz-metadata-edit');
$(document).on('click', '[data-dz-name], .dz-metadata-edit', function(e) {
clickedElement = $(this);
modal = $.remodal.lookup[$('[data-remodal-id=modal-admin-addon-media-metadata]').data('remodal')];
$modal = modal.$modal;
modal.open();
// Populate fields
elementName = clickedElement.closest('.dz-preview').find('[data-dz-name]')
fileName = elementName.text();
$('[name=filename]', $modal).val(fileName);
if (mediaListOnLoad[fileName] !== undefined) {
for (var i = 0; i < metadataFormFields.length; i++) {
$('[name=' + metadataFormFields[i] + ']', $modal).val(mediaListOnLoad[fileName][metadataFormFields[i]]);
}
} else {
for (var i = 0; i < metadataFormFields.length; i++) {
$('[name=' + metadataFormFields[i] + ']', $modal).val('');
}
}
$modal.find('form span.filename').text(fileName);
// Reset loading state
$('.loading', $modal).addClass('hidden');
// $('.button', $modal).removeClass('hidden').css('visibility', 'hidden');
$('.button', $modal).removeClass('hidden');
isPageMedia = !clickedElement.closest('.dz-preview').hasClass('dz-no-editor');
$modal.find('.block-toggle').toggleClass('hidden', !isPageMedia);
$modal.find('.page-media-info').toggleClass('hidden', !isPageMedia);
$modal.find('.non-page-media-info').toggleClass('hidden', isPageMedia);
});
/**
* add the new data dynamically to mediaListOnLoad JSON object
* for newly uploaded media files as well as for “older” files, overwriting the data already in that JSON object
* and save it in the YAML file
* Variables from above ($(document).on), like fileName and $modal are still available
*/
$(document).on('click', '[data-remodal-id=modal-admin-addon-media-metadata] .button', function(e) {
// hiding the button and showing the loading icon
$('.loading', $modal).removeClass('hidden');
$('.button', $modal).addClass('hidden');
// create the file object for newly uploaded files
if (mediaListOnLoad[fileName] === undefined) {
mediaListOnLoad[fileName] = new Object();
mediaListOnLoad[fileName]['filename'] = fileName;
}
// Do request with JS Fetch API: https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch
var data = new FormData();
data.append('filename', fileName);
data.append('admin-nonce', GravAdmin.config.admin_nonce);
// add the new values to mediaListOnLoad (for later updates before page reload)
// append the new values to the FormData (data.append)
for (var i = 0; i < metadataFormFields.length; i++) {
var newVal = $('[name=' + metadataFormFields[i] + ']', $modal).val();
mediaListOnLoad[fileName][metadataFormFields[i]] = newVal;
data.append(metadataFormFields[i], newVal);
}
fetch(adminAddonMediaMetadata.PATH, { method: 'POST', body: data, credentials: 'same-origin' })
//.then(res => res.json())
.then(result => {
if (result.error) {
var alertModal = $.remodal.lookup[$('[data-remodal-id=modal-admin-addon-media-metadata-alert]').data('remodal')];
alertModal.open();
$('p', alertModal.$modal).html(result.error.msg);
return;
}
modal.close();
});
});
// adding the “edit metadata” button next to all media files
setInterval(function addMetadataButton() {
$('.dz-preview').each(function(i, dz) {
if ($(this).find('.dz-metadata-edit').length == 0) {
var editButton = document.createElement('a');
//editButton.href = 'javascript:undefined;';
editButton.title = adminAddonMediaMetadataButton;
editButton.className = 'dz-metadata-edit';
editButton.innerText = adminAddonMediaMetadataButton;
var fileName = $(this).find('[data-dz-name]').text();
editButton.setAttribute('data-filename', fileName);
$(this).append(editButton);
}
$(this).find('.dz-metadata').remove();
});
}, 1000);
});
@@ -0,0 +1,321 @@
<?php
namespace Grav\Plugin;
use Composer\Autoload\ClassLoader;
use Grav\Common\Page\Media;
use Grav\Common\Plugin;
use Grav\Common\Yaml;
use RocketTheme\Toolbox\File\File;
/**
* Class AdminAddonMediaMetadataPlugin
* some of the code is based on the Admin Addon Media Rename by Dávid Szabó
* see https://github.com/david-szabo97/grav-plugin-admin-addon-media-rename
* @package Grav\Plugin
*/
class AdminAddonMediaMetadataPlugin extends Plugin
{
const ROUTE = '/admin-addon-media-metadata';
const TASK_METADATA = 'AdminAddonMediaMetadataEdit';
/**
* @return array
*
* The getSubscribedEvents() gives the core a list of events
* that the plugin wants to listen to. The key of each
* array section is the event that the plugin listens to
* and the value (in the form of an array) contains the
* callable (or function) as well as the priority. The
* higher the number the higher the priority.
*/
public static function getSubscribedEvents()
{
return [
['autoload', 100000], // TODO: Remove when plugin requires Grav >=1.7
'onPluginsInitialized' => ['onPluginsInitialized', 0]
];
}
/**
* Composer autoload.
* is
* @return ClassLoader
*/
public function autoload(): ClassLoader
{
return require __DIR__ . '/vendor/autoload.php';
}
public function getPath()
{
return '/' . trim($this->grav['admin']->base, '/') . '/' . trim(self::ROUTE, '/');
}
public function buildBaseUrl()
{
return rtrim($this->grav['uri']->rootUrl(true), '/') . '/' . trim($this->getPath(), '/');
}
/**
* Initialize the plugin
*/
public function onPluginsInitialized()
{
if (!$this->isAdmin() || !$this->grav['user']->authenticated) {
return;
}
if ($this->grav['uri']->path() == $this->getPath()) {
$this->enable([
'onPagesInitialized' => ['processRenameRequest', 0]
]);
return;
}
$this->enable([
'onTwigTemplatePaths' => ['onTwigTemplatePaths', 0],
'onPagesInitialized' => ['onTwigExtensions', 0],
//'onAdminAfterAddMedia' => ['createMetaYaml', 0], // removing the call of this method: see method below
'onAdminTaskExecute' => ['editMetaDataFile', 0],
]);
}
public function onTwigTemplatePaths()
{
$this->grav['twig']->twig_paths[] = __DIR__ . '/templates';
}
public function onTwigExtensions()
{
$page = $this->grav['admin']->page(true);
if (!$page) {
return;
}
/**
* get metadata form field config from plugin admin-addon-media-metadata.yaml file
* or local override in user/config/plugins/admin-addon-media-metadata.yaml
* or from page frontmatter
*/
//$formFields = $this->config->get('plugins.admin-addon-media-metadata.metadata_form');
$config = $this->mergeConfig($page, true);
$formFields = $config->get('metadata_form');
/**
* list all needed data keys from the fields configuration
*/
$arrMetaKeys = $this->editableFields($formFields['fields']);
$path = $page->path();
$media = new Media($path);
$allMedia = $media->all();
$arrFiles = [];
$i = 0;
foreach ($allMedia as $filename => $file) {
$metadata = $file->meta();
$arrFiles[$filename] = [
'filename' => $filename,
];
/**
* for each file: write stored metadata for each editable field into an array
* this will be output as inline JS variable adminAddonMediaMetadata
*/
foreach ($arrMetaKeys as $metaKey => $info) {
$arrFiles[$filename][$metaKey] = $metadata->$metaKey;
}
$i++;
}
$jsArrFormFields = '';
$i = 0;
foreach ($arrMetaKeys as $metaKey => $info) {
$jsArrFormFields .= ($i > 0) ? ",'" . $metaKey . "'" : "'" . $metaKey . "'";
$i++;
}
$inlineJs = 'var metadataFormFields = [' . $jsArrFormFields . '];';
$inlineJs .= PHP_EOL . 'var mediaListOnLoad = ' . json_encode($arrFiles) . ';';
$modal = $this->grav['twig']->twig()->render('metadata-modal.html.twig', $formFields);
$jsConfig = [
'PATH' => $this->buildBaseUrl() . '/' . $page->route() . '/task:' . self::TASK_METADATA,
'MODAL' => $modal
];
$inlineJs .= PHP_EOL . 'var adminAddonMediaMetadata = ' . json_encode($jsConfig) . ';';
$inlineJs .= PHP_EOL . $this->grav['twig']->twig()->render('additionalInlineJS.html.twig');
$this->grav['assets']->addInlineJs($inlineJs, -1000);
$this->grav['assets']->addCss('plugin://admin-addon-media-metadata/admin-addon-media-metadata.css', -1000);
$this->grav['assets']->addJs('plugin://admin-addon-media-metadata/admin-addon-media-metadata.js', -1000);
}
public function editTest()
{
$this->outputError('blob');
}
/**
* writes metadata into the [mediafile].meta.yaml file
* creates the .meta.yaml file if it does not yet exist
*/
public function editMetaDataFile($e)
{
$method = $e['method'];
if ($method === 'task' . self::TASK_METADATA) {
$fileName = $_POST['filename'];
$pageObj = $this->grav['admin']->page();
$basePath = $pageObj->path() . DS;
$filePath = $basePath . $fileName;
/**
* temporarily removing the condition that checks for the media file to exist
* as in Admin plugin 1.10 a media file will be uploaded to a tmp folder first
* and moved to the page folder on saving the page
*
* there needs to be a better solution for this
*
* also: take care of system.yaml → media.auto_metadata_exif
* if set to TRUE, a meta.yaml with EXIF data will be written, but only if the meta.yaml does not yet exist
* in Admin 1.10 you need to save a page in order to have the meta.yaml file with EXIF data created
* in Admin 1.9 this is not a problem since this plugin now (>=1.1.0) writes metadata only when needed
*/
// if (!file_exists($filePath)) {
// $this->outputError($this->grav['language']->translate(['PLUGIN_ADMIN_ADDON_MEDIA_METADATA.ERRORS.MEDIA_FILE_NOT_FOUND', $filePath]));
// } else {
$metaDataFilePath = $filePath . '.meta.yaml';
/**
* get the list of form data from the fields configuration
*/
$arrMetaKeys = $this->editableFields();
if (file_exists($metaDataFilePath)) {
/**
* get array of all current metadata for the file
* this is to avoid overwriting data that has been added to the meta.yaml file in the file browser
*/
$storedMetaData = Yaml::parse(file_get_contents($metaDataFilePath));
/**
* overwrite the currently stored data for each field in the form
*/
foreach ($arrMetaKeys as $metaKey => $info) {
if (isset($_POST[$metaKey])) {
$storedMetaData[$metaKey] = $_POST[$metaKey];
}
}
} else {
/**
* create metaData in case the meta data file does not yet exist
*/
$storedMetaData = [];
foreach ($arrMetaKeys as $metaKey => $info) {
if (isset($_POST[$metaKey])) {
$storedMetaData[$metaKey] = $_POST[$metaKey];
} else {
$storedMetaData[$metaKey] = '';
}
}
}
/**
* Get an instance of the meta file and write the data to it
* @see \Grav\Common\Page\Media
*/
$metaDataFile = File::instance($metaDataFilePath);
$metaDataFile->save(Yaml::dump($storedMetaData));
//$this->outputError($newYamlText);
// }
}
}
/**
* this method will not be called in Admin Plugin v1.10 (up until rc.11 anyway)
* additionally, writing the YAML file on upload will meddle with the system functionality
* that writes exif data
* in Admin Plugin v1.9 this functionality writes the meta.yaml file
* on upload, this plugin will then just add the other metadata
* when writing the meta.yaml file upon upload the system functionality will be overwritten
* in Admin Plugin v1.10 you need to save the page before using this plugin on a file
* if you want the exif data to be stored
*/
/**
* creates an image.meta.yaml file
* this file will be deleted by the core when deleting an image
* will be called after a media file has been added (see onPluginsInitialized())
*/
// public function createMetaYaml()
// {
// $fileName = $_FILES['file']['name'];
//
// $pageObj = $this->grav['admin']->page();
// $basePath = $pageObj->path() . DS;
//
// $filePath = $basePath . $fileName;
// if (!file_exists($filePath)) {
// $this->outputError($this->grav['language']->translate(['PLUGIN_ADMIN_ADDON_MEDIA_METADATA.ERRORS.MEDIA_FILE_NOT_FOUND', $filePath]));
// } else {
// // TODO: do that only for image files?
// $metaDataFileName = $fileName . '.meta.yaml';
// $metaDataFilePath = $basePath . $metaDataFileName;
// if (!file_exists($metaDataFilePath)) {
// /**
// * get the list of form data from the fields configuration
// */
// $arrMetaKeys = $this->editableFields();
//
// $newMetaData = [];
// foreach ($arrMetaKeys as $metaKey => $info) {
// $newMetaData[$metaKey] = '';
// }
//
// /**
// * Get an instance of the meta file and write the data to it
// * @see \Grav\Common\Page\Media
// */
// $metaDataFile = File::instance($metaDataFilePath);
// $metaDataFile->save(Yaml::dump($newMetaData));
// }
// }
// }
/**
* return all editable fields from form configuration
*/
private function editableFields($fieldsConf = null)
{
if ($fieldsConf === null) {
$page = $this->grav['admin']->page(true);
if (!$page) {
return;
}
/**
* get metadata form field config from plugin admin-addon-media-metadata.yaml file
* or local override in user/config/plugins/admin-addon-media-metadata.yaml
* or from page frontmatter
*/
//$formFields = $this->config->get('plugins.admin-addon-media-metadata.metadata_form');
$config = $this->mergeConfig($page, true);
$formFields = $config->get('metadata_form');
$fieldsConf = $formFields['fields'];
}
$arrMetaKeys = [];
foreach ($fieldsConf as $singleFieldConf) {
if (isset($singleFieldConf['name'], $singleFieldConf['type']) && $singleFieldConf['name'] !== 'filename') {
$arrMetaKeys[$singleFieldConf['name']] = [
'name' => $singleFieldConf['name'],
'type' => $singleFieldConf['type']
];
}
}
return $arrMetaKeys;
}
public function outputError($msg)
{
header('HTTP/1.1 400 Bad Request');
die(json_encode(['error' => ['msg' => $msg]]));
}
}
@@ -0,0 +1,21 @@
enabled: true
metadata_form:
fields:
- type: hidden
title: PLUGIN_ADMIN_ADDON_MEDIA_METADATA.FILENAME
name: filename
readonly: true
- type: text
label: PLUGIN_ADMIN_ADDON_MEDIA_METADATA.TITLE
name: title
- type: text
label: PLUGIN_ADMIN_ADDON_MEDIA_METADATA.ALT
name: alt
- type: textarea
label: PLUGIN_ADMIN_ADDON_MEDIA_METADATA.CAPTION
name: caption
rows: 3
Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

+30
View File
@@ -0,0 +1,30 @@
name: Admin Addon Media Metadata
version: 1.1.0
description: 'This plugin is an addon for the Grav CMS Admin plugin and lets you add and edit metadata for media files'
icon: plug
author:
name: Clive Beckett
email: clive@musikinsnetz.de
homepage: https://github.com/clivebeckett/grav-plugin-admin-addon-media-metadata
keywords: grav, admin, plugin, metadata, image, alt, title, caption
bugs: https://github.com/clivebeckett/grav-plugin-admin-addon-media-metadata/issues
docs: https://github.com/clivebeckett/grav-plugin-admin-addon-media-metadata/blob/develop/README.md
license: MIT
dependencies:
- { name: grav, version: '1.5 - 1.7' }
- { name: admin, version: '1.8 - 1.10' }
form:
validation: loose
fields:
enabled:
type: toggle
label: PLUGIN_ADMIN.PLUGIN_STATUS
highlight: 1
default: 0
options:
1: PLUGIN_ADMIN.ENABLED
0: PLUGIN_ADMIN.DISABLED
validate:
type: bool
+29
View File
@@ -0,0 +1,29 @@
{
"name": "clivebeckett/admin-addon-media-metadata",
"type": "grav-plugin",
"description": "Add Metadata (title, alt, caption) to image files in admin plugin",
"keywords": ["plugin"],
"homepage": "https://github.com/clivebeckett/grav-plugin-admin-addon-media-metadata",
"license": "MIT",
"authors": [
{
"name": "Clive Beckett",
"email": "clive@musikinsnetz.de",
"role": "Developer"
}
],
"require": {
"php": ">=7.1.3"
},
"autoload": {
"psr-4": {
"Grav\\Plugin\\AdminAddonMediaMetadata\\": "classes/"
},
"classmap": ["admin-addon-media-metadata.php"]
},
"config": {
"platform": {
"php": "7.1.3"
}
}
}
+23
View File
@@ -0,0 +1,23 @@
{
"_readme": [
"This file locks the dependencies of your project to a known state",
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "b884fad27830ca91d1b5af86da9aff06",
"packages": [],
"packages-dev": [],
"aliases": [],
"minimum-stability": "stable",
"stability-flags": [],
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
"php": ">=7.1.3"
},
"platform-dev": [],
"platform-overrides": {
"php": "7.1.3"
},
"plugin-api-version": "1.1.0"
}
+11
View File
@@ -0,0 +1,11 @@
PLUGIN_ADMIN_ADDON_MEDIA_METADATA:
BUTTON: Metadaten ändern
FORM_HEADER: Metadaten für Mediendatei ändern
FILENAME: Dateiname
TITLE: Titel
ALT: Beschreibung für den Fall, dass die Datei nicht angezeigt werden kann (alternativer Text)
CAPTION: Bildunterschrift
WRITING_DATA: Metadaten werden geschrieben
WRITING_FAILED: Metadaten konnten nicht geschrieben werden
ERRORS:
MEDIA_FILE_NOT_FOUND: Die Mediendatei konnte nicht gefunden werden
+11
View File
@@ -0,0 +1,11 @@
PLUGIN_ADMIN_ADDON_MEDIA_METADATA:
BUTTON: Edit metadata
FORM_HEADER: Edit metadata for media file
FILENAME: Filename
TITLE: Title
ALT: Describe the media file for when it cant be displayed (alternative text)
CAPTION: Caption
WRITING_DATA: Writing metadata
WRITING_FAILED: Writing image metadata failed
ERRORS:
MEDIA_FILE_NOT_FOUND: The media file could not be found
+11
View File
@@ -0,0 +1,11 @@
PLUGIN_ADMIN_ADDON_MEDIA_METADATA:
BUTTON: Editer les métadonnées pour ce média
FORM_HEADER: Editer les métadonnées pour ce média
FILENAME: Nom du fichier
TITLE: Titre
ALT: Description du média lorsqu'il ne peut être affiché (texte alternatif)
CAPTION: Légende
WRITING_DATA: Ajout des métadonnées
WRITING_FAILED: Impossible d'ajouter les métadonnées
ERRORS:
MEDIA_FILE_NOT_FOUND: Le fichier du média ne peut être trouvé
@@ -0,0 +1,2 @@
var adminAddonMediaMetadataButton = '{{ 'PLUGIN_ADMIN_ADDON_MEDIA_METADATA.BUTTON'|t }}';
var adminAddonMediaMetadataLang = '{{ grav.user.language|default('en') }}';
@@ -0,0 +1,36 @@
<div class="remodal" data-remodal-id="modal-admin-addon-media-metadata" data-remodal-options="hashTracking: false">
<form method="post" onsubmit='return false;'>
<div class="block block-section">
<h1>
<span class="header">{{ "PLUGIN_ADMIN_ADDON_MEDIA_METADATA.FORM_HEADER"|t }}</span><br>
<span class="filename"></span>
</h1>
</div>
{% for field in fields %}
{% if field.type %}
{% set value = data.value(field.name) %}
<div class="block block-{{field.type}}">
{% include ["forms/fields/#{field.type}/#{field.type}.html.twig", 'forms/fields/text/text.html.twig'] %}
</div>
{% endif %}
{% endfor %}
<div class="button-bar">
<div class="loading">
{{ "PLUGIN_ADMIN_ADDON_MEDIA_METADATA.WRITING_DATA"|t }} … <i class="fa fa-spinner fa-spin"></i>
</div>
<button class="button primary">{{ "PLUGIN_ADMIN.SAVE"|tu }}</button>
</div>
</form>
</div>
<div class="remodal" data-remodal-id="modal-admin-addon-media-metadata-alert" data-remodal-options="hashTracking: false">
<form method="post" onsubmit='return false;'>
<h1>{{ "PLUGIN_ADMIN_ADDON_MEDIA_METADATA.WRITING_FAILED"|t }}</h1>
<p class="bigger"></p>
<div class="button-bar">
<button data-remodal-action="confirm" class="button primary">{{ "PLUGIN_ADMIN.CONTINUE"|tu }}</button>
</div>
</form>
</div>
+7
View File
@@ -0,0 +1,7 @@
<?php
// autoload.php @generated by Composer
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInit487bda5860f2ea416ef2181e18c0fcbf::getLoader();
+445
View File
@@ -0,0 +1,445 @@
<?php
/*
* This file is part of Composer.
*
* (c) Nils Adermann <naderman@naderman.de>
* Jordi Boggiano <j.boggiano@seld.be>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Composer\Autoload;
/**
* ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
*
* $loader = new \Composer\Autoload\ClassLoader();
*
* // register classes with namespaces
* $loader->add('Symfony\Component', __DIR__.'/component');
* $loader->add('Symfony', __DIR__.'/framework');
*
* // activate the autoloader
* $loader->register();
*
* // to enable searching the include path (eg. for PEAR packages)
* $loader->setUseIncludePath(true);
*
* In this example, if you try to use a class in the Symfony\Component
* namespace or one of its children (Symfony\Component\Console for instance),
* the autoloader will first look for the class under the component/
* directory, and it will then fallback to the framework/ directory if not
* found before giving up.
*
* This class is loosely based on the Symfony UniversalClassLoader.
*
* @author Fabien Potencier <fabien@symfony.com>
* @author Jordi Boggiano <j.boggiano@seld.be>
* @see http://www.php-fig.org/psr/psr-0/
* @see http://www.php-fig.org/psr/psr-4/
*/
class ClassLoader
{
// PSR-4
private $prefixLengthsPsr4 = array();
private $prefixDirsPsr4 = array();
private $fallbackDirsPsr4 = array();
// PSR-0
private $prefixesPsr0 = array();
private $fallbackDirsPsr0 = array();
private $useIncludePath = false;
private $classMap = array();
private $classMapAuthoritative = false;
private $missingClasses = array();
private $apcuPrefix;
public function getPrefixes()
{
if (!empty($this->prefixesPsr0)) {
return call_user_func_array('array_merge', $this->prefixesPsr0);
}
return array();
}
public function getPrefixesPsr4()
{
return $this->prefixDirsPsr4;
}
public function getFallbackDirs()
{
return $this->fallbackDirsPsr0;
}
public function getFallbackDirsPsr4()
{
return $this->fallbackDirsPsr4;
}
public function getClassMap()
{
return $this->classMap;
}
/**
* @param array $classMap Class to filename map
*/
public function addClassMap(array $classMap)
{
if ($this->classMap) {
$this->classMap = array_merge($this->classMap, $classMap);
} else {
$this->classMap = $classMap;
}
}
/**
* Registers a set of PSR-0 directories for a given prefix, either
* appending or prepending to the ones previously set for this prefix.
*
* @param string $prefix The prefix
* @param array|string $paths The PSR-0 root directories
* @param bool $prepend Whether to prepend the directories
*/
public function add($prefix, $paths, $prepend = false)
{
if (!$prefix) {
if ($prepend) {
$this->fallbackDirsPsr0 = array_merge(
(array) $paths,
$this->fallbackDirsPsr0
);
} else {
$this->fallbackDirsPsr0 = array_merge(
$this->fallbackDirsPsr0,
(array) $paths
);
}
return;
}
$first = $prefix[0];
if (!isset($this->prefixesPsr0[$first][$prefix])) {
$this->prefixesPsr0[$first][$prefix] = (array) $paths;
return;
}
if ($prepend) {
$this->prefixesPsr0[$first][$prefix] = array_merge(
(array) $paths,
$this->prefixesPsr0[$first][$prefix]
);
} else {
$this->prefixesPsr0[$first][$prefix] = array_merge(
$this->prefixesPsr0[$first][$prefix],
(array) $paths
);
}
}
/**
* Registers a set of PSR-4 directories for a given namespace, either
* appending or prepending to the ones previously set for this namespace.
*
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param array|string $paths The PSR-4 base directories
* @param bool $prepend Whether to prepend the directories
*
* @throws \InvalidArgumentException
*/
public function addPsr4($prefix, $paths, $prepend = false)
{
if (!$prefix) {
// Register directories for the root namespace.
if ($prepend) {
$this->fallbackDirsPsr4 = array_merge(
(array) $paths,
$this->fallbackDirsPsr4
);
} else {
$this->fallbackDirsPsr4 = array_merge(
$this->fallbackDirsPsr4,
(array) $paths
);
}
} elseif (!isset($this->prefixDirsPsr4[$prefix])) {
// Register directories for a new namespace.
$length = strlen($prefix);
if ('\\' !== $prefix[$length - 1]) {
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
}
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
$this->prefixDirsPsr4[$prefix] = (array) $paths;
} elseif ($prepend) {
// Prepend directories for an already registered namespace.
$this->prefixDirsPsr4[$prefix] = array_merge(
(array) $paths,
$this->prefixDirsPsr4[$prefix]
);
} else {
// Append directories for an already registered namespace.
$this->prefixDirsPsr4[$prefix] = array_merge(
$this->prefixDirsPsr4[$prefix],
(array) $paths
);
}
}
/**
* Registers a set of PSR-0 directories for a given prefix,
* replacing any others previously set for this prefix.
*
* @param string $prefix The prefix
* @param array|string $paths The PSR-0 base directories
*/
public function set($prefix, $paths)
{
if (!$prefix) {
$this->fallbackDirsPsr0 = (array) $paths;
} else {
$this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
}
}
/**
* Registers a set of PSR-4 directories for a given namespace,
* replacing any others previously set for this namespace.
*
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param array|string $paths The PSR-4 base directories
*
* @throws \InvalidArgumentException
*/
public function setPsr4($prefix, $paths)
{
if (!$prefix) {
$this->fallbackDirsPsr4 = (array) $paths;
} else {
$length = strlen($prefix);
if ('\\' !== $prefix[$length - 1]) {
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
}
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
$this->prefixDirsPsr4[$prefix] = (array) $paths;
}
}
/**
* Turns on searching the include path for class files.
*
* @param bool $useIncludePath
*/
public function setUseIncludePath($useIncludePath)
{
$this->useIncludePath = $useIncludePath;
}
/**
* Can be used to check if the autoloader uses the include path to check
* for classes.
*
* @return bool
*/
public function getUseIncludePath()
{
return $this->useIncludePath;
}
/**
* Turns off searching the prefix and fallback directories for classes
* that have not been registered with the class map.
*
* @param bool $classMapAuthoritative
*/
public function setClassMapAuthoritative($classMapAuthoritative)
{
$this->classMapAuthoritative = $classMapAuthoritative;
}
/**
* Should class lookup fail if not found in the current class map?
*
* @return bool
*/
public function isClassMapAuthoritative()
{
return $this->classMapAuthoritative;
}
/**
* APCu prefix to use to cache found/not-found classes, if the extension is enabled.
*
* @param string|null $apcuPrefix
*/
public function setApcuPrefix($apcuPrefix)
{
$this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
}
/**
* The APCu prefix in use, or null if APCu caching is not enabled.
*
* @return string|null
*/
public function getApcuPrefix()
{
return $this->apcuPrefix;
}
/**
* Registers this instance as an autoloader.
*
* @param bool $prepend Whether to prepend the autoloader or not
*/
public function register($prepend = false)
{
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
}
/**
* Unregisters this instance as an autoloader.
*/
public function unregister()
{
spl_autoload_unregister(array($this, 'loadClass'));
}
/**
* Loads the given class or interface.
*
* @param string $class The name of the class
* @return bool|null True if loaded, null otherwise
*/
public function loadClass($class)
{
if ($file = $this->findFile($class)) {
includeFile($file);
return true;
}
}
/**
* Finds the path to the file where the class is defined.
*
* @param string $class The name of the class
*
* @return string|false The path if found, false otherwise
*/
public function findFile($class)
{
// class map lookup
if (isset($this->classMap[$class])) {
return $this->classMap[$class];
}
if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
return false;
}
if (null !== $this->apcuPrefix) {
$file = apcu_fetch($this->apcuPrefix.$class, $hit);
if ($hit) {
return $file;
}
}
$file = $this->findFileWithExtension($class, '.php');
// Search for Hack files if we are running on HHVM
if (false === $file && defined('HHVM_VERSION')) {
$file = $this->findFileWithExtension($class, '.hh');
}
if (null !== $this->apcuPrefix) {
apcu_add($this->apcuPrefix.$class, $file);
}
if (false === $file) {
// Remember that this class does not exist.
$this->missingClasses[$class] = true;
}
return $file;
}
private function findFileWithExtension($class, $ext)
{
// PSR-4 lookup
$logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
$first = $class[0];
if (isset($this->prefixLengthsPsr4[$first])) {
$subPath = $class;
while (false !== $lastPos = strrpos($subPath, '\\')) {
$subPath = substr($subPath, 0, $lastPos);
$search = $subPath . '\\';
if (isset($this->prefixDirsPsr4[$search])) {
$pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
foreach ($this->prefixDirsPsr4[$search] as $dir) {
if (file_exists($file = $dir . $pathEnd)) {
return $file;
}
}
}
}
}
// PSR-4 fallback dirs
foreach ($this->fallbackDirsPsr4 as $dir) {
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
return $file;
}
}
// PSR-0 lookup
if (false !== $pos = strrpos($class, '\\')) {
// namespaced class name
$logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
. strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
} else {
// PEAR-like class name
$logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
}
if (isset($this->prefixesPsr0[$first])) {
foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
if (0 === strpos($class, $prefix)) {
foreach ($dirs as $dir) {
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
return $file;
}
}
}
}
}
// PSR-0 fallback dirs
foreach ($this->fallbackDirsPsr0 as $dir) {
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
return $file;
}
}
// PSR-0 include paths.
if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
return $file;
}
return false;
}
}
/**
* Scope isolated include.
*
* Prevents access to $this/self from included files.
*/
function includeFile($file)
{
include $file;
}
+21
View File
@@ -0,0 +1,21 @@
Copyright (c) Nils Adermann, Jordi Boggiano
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is furnished
to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
@@ -0,0 +1,10 @@
<?php
// autoload_classmap.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'Grav\\Plugin\\AdminAddonMediaMetadataPlugin' => $baseDir . '/admin-addon-media-metadata.php',
);
@@ -0,0 +1,9 @@
<?php
// autoload_namespaces.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
);
+10
View File
@@ -0,0 +1,10 @@
<?php
// autoload_psr4.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'Grav\\Plugin\\AdminAddonMediaMetadata\\' => array($baseDir . '/classes'),
);
+55
View File
@@ -0,0 +1,55 @@
<?php
// autoload_real.php @generated by Composer
class ComposerAutoloaderInit487bda5860f2ea416ef2181e18c0fcbf
{
private static $loader;
public static function loadClassLoader($class)
{
if ('Composer\Autoload\ClassLoader' === $class) {
require __DIR__ . '/ClassLoader.php';
}
}
/**
* @return \Composer\Autoload\ClassLoader
*/
public static function getLoader()
{
if (null !== self::$loader) {
return self::$loader;
}
spl_autoload_register(array('ComposerAutoloaderInit487bda5860f2ea416ef2181e18c0fcbf', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
spl_autoload_unregister(array('ComposerAutoloaderInit487bda5860f2ea416ef2181e18c0fcbf', 'loadClassLoader'));
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
if ($useStaticLoader) {
require_once __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInit487bda5860f2ea416ef2181e18c0fcbf::getInitializer($loader));
} else {
$map = require __DIR__ . '/autoload_namespaces.php';
foreach ($map as $namespace => $path) {
$loader->set($namespace, $path);
}
$map = require __DIR__ . '/autoload_psr4.php';
foreach ($map as $namespace => $path) {
$loader->setPsr4($namespace, $path);
}
$classMap = require __DIR__ . '/autoload_classmap.php';
if ($classMap) {
$loader->addClassMap($classMap);
}
}
$loader->register(true);
return $loader;
}
}
+36
View File
@@ -0,0 +1,36 @@
<?php
// autoload_static.php @generated by Composer
namespace Composer\Autoload;
class ComposerStaticInit487bda5860f2ea416ef2181e18c0fcbf
{
public static $prefixLengthsPsr4 = array (
'G' =>
array (
'Grav\\Plugin\\AdminAddonMediaMetadata\\' => 36,
),
);
public static $prefixDirsPsr4 = array (
'Grav\\Plugin\\AdminAddonMediaMetadata\\' =>
array (
0 => __DIR__ . '/../..' . '/classes',
),
);
public static $classMap = array (
'Grav\\Plugin\\AdminAddonMediaMetadataPlugin' => __DIR__ . '/../..' . '/admin-addon-media-metadata.php',
);
public static function getInitializer(ClassLoader $loader)
{
return \Closure::bind(function () use ($loader) {
$loader->prefixLengthsPsr4 = ComposerStaticInit487bda5860f2ea416ef2181e18c0fcbf::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInit487bda5860f2ea416ef2181e18c0fcbf::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInit487bda5860f2ea416ef2181e18c0fcbf::$classMap;
}, null, ClassLoader::class);
}
}
+1
View File
@@ -0,0 +1 @@
[]
+17
View File
@@ -0,0 +1,17 @@
# EditorConfig is awesome: https://EditorConfig.org
# top-most EditorConfig file
root = true
# Unix-style newlines with a newline ending every file
[*]
charset = utf-8
end_of_line = lf
trim_trailing_whitespace = true
insert_final_newline = true
indent_style = space
indent_size = 2
# 4 space indentation
[*.php]
indent_size = 4
+8
View File
@@ -0,0 +1,8 @@
# Linguist Normalizer
*.yaml linguistic-language=PHP
*.twig linguistic-language=PHP
**/gulpfile.babel.js linguist-vendored
**/webpack.conf.js linguist-vendored
**/js/*.js linguist-vendored
**/js/*.json linguist-vendored
**/css-compiled/*.css linguist-vendored
+8
View File
@@ -0,0 +1,8 @@
# These are supported funding model platforms
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: grav
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
custom: # Replace with a single custom sponsorship URL
+6
View File
@@ -0,0 +1,6 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
+17
View File
@@ -0,0 +1,17 @@
themes/grav/.sass-cache
.DS_Store
crowdin.yaml
# Node Modules
**/node_modules/**
themes/grav/js/admin.js
themes/grav/js/vendor.js
themes/grav/js/*.map
.idea
tests/_output/*
tests/_support/_generated/*
tests/cache/*
tests/error.log
/crowdin.yaml
.vscode
File diff suppressed because it is too large Load Diff
+1
View File
@@ -0,0 +1 @@
Please read the <a href="https://github.com/getgrav/grav/blob/develop/CONTRIBUTING.md" target="_blank">Contributing Guidelines of the Grav Project</a>
+21
View File
@@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2017 Grav
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+152
View File
@@ -0,0 +1,152 @@
# Grav Standard Administration Panel Plugin
This **admin plugin** for [Grav](https://github.com/getgrav/grav) is an HTML user interface that provides a convenient way to configure Grav and easily create and modify pages. This will remain a totally optional plugin, and is not in any way required or needed to use Grav effectively. In fact, the admin provides an intentionally limited view to ensure it remains easy to use and not overwhelming. I'm sure power users will still prefer to work with the configuration files directly.
![](assets/admin-dashboard.png)
# Features
* User login with automatic password encryption
* Forgot password functionality
* Logged-in-user management
* One click Grav core updates
* Dashboard with maintenance status, site activity and latest page updates
* Notifications system for latest news, blogs, and announcements
* Ajax-powered backup capability
* Ajax-powered clear-cache capability
* System configuration management
* Site configuration management
* Normal and Expert modes which allow editing via forms or YAML
* Page listing with filtering and search
* Page creation, editing, moving, copying, and deleting
* Powerful syntax highlighting code editor with instant Grav-powered preview
* Editor features, hot keys, toolbar, and distraction-free fullscreen mode
* Drag-n-drop upload of page media files including drag-n-drop placement in the editor
* One click theme and plugin updates
* Plugin manager that allows listing and configuration of installed plugins
* Theme manager that allows listing and configuration of installed themes
* GPM-powered installation of new plugins and themes
# Support
#### Support
We have tested internally, but we hope to use this public beta phase to identify, isolate, and fix issues related to the plugin to ensure it is as solid and reliable as possible.
For **live chatting**, please use the dedicated [Discord Chat Room](https://getgrav.org/discord) for discussions directly related to Grav.
For **bugs, features, improvements**, please ensure you [create issues in the admin plugin GitHub repository](https://github.com/getgrav/grav-plugin-admin).
# Installation
First ensure you are running the latest **Grav 1.6.7 or later**. This is required for the admin plugin to run properly (`-f` forces a refresh of the GPM index).
```
$ bin/gpm selfupgrade -f
```
The admin plugin actually requires the help of 3 other plugins, so to get the admin plugin to work you first need to install **admin**, **login**, **forms**, and **email** plugins. These are available via GPM, and because the plugin has dependencies you just need to proceed and install the admin plugin, and agree when prompted to install the others:
```
$ bin/gpm install admin
```
### Manual Installation
Manual installation is not the recommended method of installation, however, it is still possible to install the admin plugin manually. Basically, you need to download each of the following plugins individually:
* [admin](https://github.com/getgrav/grav-plugin-admin/archive/develop.zip)
* [login](https://github.com/getgrav/grav-plugin-login/archive/develop.zip)
* [form](https://github.com/getgrav/grav-plugin-form/archive/develop.zip)
* [email](https://github.com/getgrav/grav-plugin-email/archive/develop.zip)
Extract each archive file into your `user/plugins` folder, then ensure the folders are renamed to just `admin/`, `login/`, `form/`, and `email/`. Then proceed with the **Usage instructions below**.
# Usage
### Create User with CLI
After this you need to create a user account with admin privileges:
```
$ bin/plugin login new-user
```
### Create User Manually
Alternatively, you can create a user account manually, in a file called `user/accounts/admin.yaml`. This **filename** is actually the **username** that you will use to login. The contents will contain the other information for the user.
```
password: 'password'
email: 'youremail@mail.com'
fullname: 'Johnny Appleseed'
title: 'Site Administrator'
access:
admin:
login: true
super: true
```
Of course you should edit your `email`, `password`, `fullname`, and `title` to suit your needs.
> You can use any password when you manually put it in this `.yaml` file. However, when you change your password in the admin, it must contain at least one number and one uppercase and lowercase letter, and at least 8 or more characters.
# Accessing the Admin
By default, you can access the admin by pointing your browser to `http://yoursite.com/admin`. You can simply log in with the `username` and `password` set in the YAML file you configured earlier.
> After logging in, your **plaintext password** will be removed and replaced by an **encrypted** one.
# Standard Free & Paid Pro Versions
If you have been following the [blog](https://getgrav.org/blog), [Twitter](https://twitter.com/getgrav), [Discord chat](https://getgrav.org/discord), etc., you probably already know now that our intention is to provide two versions of this plugin.
The **standard free version**, is very powerful, and has more functionality than most commercial flat-file CMS systems.
We also intend to release in the near future a more feature-rich **pro version** that will include enhanced functionality, as well as some additional nice-to-have capabilities. This pro version will be a **paid** plugin the price of which is not yet 100% finalized.
# Admin Events
## General events
- onAdminRegisterPermissions - (admin)
- onAdminThemeInitialized
- onAdminPage - (page)
- onAdminMenu
- onAdminTwigTemplatePaths - (paths)
## Page specific events
- onAdminDashboard
- onAdminTools - (tools)
- onAdminLogFiles - (logs)
- onAdminGenerateReports - (reports)
## Tasks
- onAdminControllerInit - (controller)
- onAdminTaskExecute - (controller, method)
## Editing
- onAdminData
- onAdminSave - (object)
- onAdminAfterSave - (object)
## Pages
- onAdminPageTypes - (types)
- onAdminModularPageTypes
- onAdminSave - (page)
- onAdminAfterSaveAs - (path)
- onAdminAfterSave - (page)
- onAdminAfterDelete - (page)
- onAdminAfterAddMedia - (page)
- onAdminAfterDelMedia - (page)
- onAdminCreatePageFrontmatter - (header, data)
# Running Tests
First install the dev dependencies by running `composer update` from the Grav root.
Then `composer test` will run the Unit Tests, which should be always executed successfully on any site.
+6
View File
@@ -0,0 +1,6 @@
# Upgrading to Admin 1.10
Twig:
* **Admin link**: When linking to another admin page, use `{{ admin_route('/config/site') }}` instead of any other method, such as `{{ base_url_relative }}/config/site` (fixes multi-language issues)
File diff suppressed because it is too large Load Diff
+84
View File
@@ -0,0 +1,84 @@
enabled: true
route: '/admin'
cache_enabled: true
theme: grav
logo_text: ''
body_classes: ''
content_padding: true
twofa_enabled: true
sidebar:
activate: tab
hover_delay: 100
size: auto
dashboard:
days_of_stats: 7
widgets_display:
dashboard-maintenance: true
dashboard-statistics: true
dashboard-notifications: true
dashboard-feed: true
dashboard-pages: true
pages:
show_parents: both
show_modular: true
session:
timeout: 1800
edit_mode: normal
frontend_preview_target: inline
show_github_msg: true
admin_icons: line-awesome
enable_auto_updates_check: true
notifications:
feed: true
dashboard: true
plugins: true
themes: true
popularity:
enabled: true
ignore: ['/test*','/modular']
history:
daily: 30
monthly: 12
visitors: 20
whitelabel:
quicktray_recompile: false
codemirror_theme: paper
codemirror_fontsize: md
codemirror_md_font: sans
logo_custom:
logo_login:
color_scheme:
accents:
primary-accent: button
secondary-accent: notice
tertiary-accent: critical
colors:
logo-bg: '#323640'
logo-link: '#FFFFFF'
nav-bg: '#3D424E'
nav-text: '#B7B9BD'
nav-link: '#ffffff'
nav-selected-bg: '#323640'
nav-selected-link: '#ffffff'
nav-hover-bg: '#434753'
nav-hover-link: '#ffffff'
toolbar-bg: '#ffffff'
toolbar-text: '#3D424E'
page-bg: '#F6F6F6'
page-text: '#6f7b8a'
page-link: '#0090D9'
content-bg: '#ffffff'
content-text: '#6f7b8a'
content-link: '#0090D9'
content-link2: '#da4b46'
content-header: '#414147'
content-tabs-bg: '#e6e6e6'
content-tabs-text: '#808080'
button-bg: '#0090D9'
button-text: '#ffffff'
notice-bg: '#06A599'
notice-text: '#ffffff'
update-bg: '#77559D'
update-text: '#ffffff'
critical-bg: '#F45857'
critical-text: '#ffffff'
Binary file not shown.

After

Width:  |  Height:  |  Size: 236 KiB

+781
View File
@@ -0,0 +1,781 @@
name: Admin Panel
slug: admin
type: plugin
version: 1.10.42
description: Adds an advanced administration panel to manage your site
icon: empire
author:
name: Team Grav
email: devs@getgrav.org
url: https://getgrav.org
homepage: https://github.com/getgrav/grav-plugin-admin
keywords: admin, plugin, manager, panel
bugs: https://github.com/getgrav/grav-plugin-admin/issues
docs: https://github.com/getgrav/grav-plugin-admin/blob/develop/README.md
license: MIT
dependencies:
- { name: grav, version: '>=1.7.42' }
- { name: form, version: '>=6.0.1' }
- { name: login, version: '>=3.7.0' }
- { name: email, version: '>=3.1.6' }
- { name: flex-objects, version: '>=1.2.0' }
form:
validation: loose
fields:
admin_tabs:
type: tabs
fields:
config_tab:
type: tab
title: PLUGIN_ADMIN.CONFIGURATION
fields:
Basics:
type: section
title: PLUGIN_ADMIN.BASICS
underline: false
enabled:
type: hidden
label: PLUGIN_ADMIN.PLUGIN_STATUS
highlight: 1
default: 0
options:
1: PLUGIN_ADMIN.ENABLED
0: PLUGIN_ADMIN.DISABLED
validate:
type: bool
cache_enabled:
type: toggle
label: PLUGIN_ADMIN.ADMIN_CACHING
help: PLUGIN_ADMIN.ADMIN_CACHING_HELP
highlight: 1
options:
1: PLUGIN_ADMIN.YES
0: PLUGIN_ADMIN.NO
validate:
type: bool
twofa_enabled:
type: toggle
label: PLUGIN_LOGIN.2FA_TITLE
help: PLUGIN_LOGIN.2FA_ENABLED_HELP
default: 1
highlight: 1
options:
1: PLUGIN_ADMIN.YES
0: PLUGIN_ADMIN.NO
validate:
type: bool
route:
type: text
label: PLUGIN_ADMIN.ADMIN_PATH
size: medium
placeholder: ADMIN_PATH_PLACEHOLDER
help: ADMIN_PATH_HELP
logo_text:
type: text
label: PLUGIN_ADMIN.LOGO_TEXT
size: medium
placeholder: "Grav"
help: PLUGIN_ADMIN.LOGO_TEXT_HELP
content_padding:
type: toggle
label: PLUGIN_ADMIN.CONTENT_PADDING
help: PLUGIN_ADMIN.CONTENT_PADDING_HELP
highlight: 1
options:
1: PLUGIN_ADMIN.YES
0: PLUGIN_ADMIN.NO
validate:
type: bool
body_classes:
type: text
label: PLUGIN_ADMIN.BODY_CLASSES
size: medium
help: PLUGIN_ADMIN.BODY_CLASSES_HELP
sidebar.activate:
type: select
label: PLUGIN_ADMIN.SIDEBAR_ACTIVATION
help: PLUGIN_ADMIN.SIDEBAR_ACTIVATION_HELP
size: small
default: tab
options:
tab: PLUGIN_ADMIN.SIDEBAR_ACTIVATION_TAB
hover: PLUGIN_ADMIN.SIDEBAR_ACTIVATION_HOVER
sidebar.hover_delay:
type: text
size: x-small
append: PLUGIN_ADMIN.SIDEBAR_HOVER_DELAY_APPEND
label: PLUGIN_ADMIN.SIDEBAR_HOVER_DELAY
default: 500
validate:
type: number
min: 1
sidebar.size:
type: select
label: PLUGIN_ADMIN.SIDEBAR_SIZE
help: PLUGIN_ADMIN.SIDEBAR_SIZE_HELP
size: medium
default: auto
options:
auto: PLUGIN_ADMIN.SIDEBAR_SIZE_AUTO
small: PLUGIN_ADMIN.SIDEBAR_SIZE_SMALL
theme:
type: hidden
label: PLUGIN_ADMIN.THEME
default: grav
edit_mode:
type: select
label: PLUGIN_ADMIN.EDIT_MODE
size: small
default: normal
options:
normal: PLUGIN_ADMIN.NORMAL
expert: PLUGIN_ADMIN.EXPERT
help: PLUGIN_ADMIN.EDIT_MODE_HELP
frontend_preview_target:
type: select
label: PLUGIN_ADMIN.FRONTEND_PREVIEW_TARGET
size: medium
default: inline
options:
inline: PLUGIN_ADMIN.FRONTEND_PREVIEW_TARGET_INLINE
_blank: PLUGIN_ADMIN.FRONTEND_PREVIEW_TARGET_NEW
_self: PLUGIN_ADMIN.FRONTEND_PREVIEW_TARGET_CURRENT
pages.show_parents:
type: select
size: medium
label: PLUGIN_ADMIN.PARENT_DROPDOWN
highlight: 1
options:
both: PLUGIN_ADMIN.PARENT_DROPDOWN_BOTH
folder: PLUGIN_ADMIN.PARENT_DROPDOWN_FOLDER
fullpath: PLUGIN_ADMIN.PARENT_DROPDOWN_FULLPATH
pages.parents_levels:
type: text
label: PLUGIN_ADMIN.PARENTS_LEVELS
size: small
help: PLUGIN_ADMIN.PARENTS_LEVELS_HELP
pages.show_modular:
type: toggle
label: PLUGIN_ADMIN.MODULAR_PARENTS
highlight: 1
default: 1
options:
1: PLUGIN_ADMIN.ENABLED
0: PLUGIN_ADMIN.DISABLED
validate:
type: bool
help: PLUGIN_ADMIN.MODULAR_PARENTS_HELP
show_beta_msg:
type: hidden
show_github_msg:
type: toggle
label: PLUGIN_ADMIN.SHOW_GITHUB_LINK
highlight: 1
default: 1
options:
1: PLUGIN_ADMIN.ENABLED
0: PLUGIN_ADMIN.DISABLED
validate:
type: bool
help: PLUGIN_ADMIN.SHOW_GITHUB_LINK_HELP
enable_auto_updates_check:
type: toggle
label: PLUGIN_ADMIN.AUTO_UPDATES
highlight: 1
default: 1
options:
1: PLUGIN_ADMIN.ENABLED
0: PLUGIN_ADMIN.DISABLED
validate:
type: bool
help: PLUGIN_ADMIN.AUTO_UPDATES_HELP
session.timeout:
type: text
size: small
label: PLUGIN_ADMIN.TIMEOUT
append: GRAV.NICETIME.SECOND_PLURAL
help: PLUGIN_ADMIN.TIMEOUT_HELP
validate:
type: number
min: 1
hide_page_types:
type: select
size: large
label: PLUGIN_ADMIN.HIDE_PAGE_TYPES
classes: fancy
multiple: true
array: true
selectize:
create: true
data-options@: ['\Grav\Plugin\AdminPlugin::pagesTypes', true]
hide_modular_page_types:
type: select
size: large
label: PLUGIN_ADMIN.HIDE_MODULAR_PAGE_TYPES
classes: fancy
multiple: true
array: true
selectize:
create: true
data-options@: ['\Grav\Plugin\AdminPlugin::pagesModularTypes', true]
Dashboard:
type: section
title: PLUGIN_ADMIN.DASHBOARD
underline: true
widgets_display:
type: widgets
label: PLUGIN_ADMIN.WIDGETS_DISPLAY
validate:
type: array
Notifications:
type: section
title: PLUGIN_ADMIN.NOTIFICATIONS
underline: true
notifications.feed:
type: toggle
label: PLUGIN_ADMIN.FEED_NOTIFICATIONS
highlight: 1
default: 1
options:
1: PLUGIN_ADMIN.ENABLED
0: PLUGIN_ADMIN.DISABLED
validate:
type: bool
help: PLUGIN_ADMIN.FEED_NOTIFICATIONS_HELP
notifications.dashboard:
type: toggle
label: PLUGIN_ADMIN.DASHBOARD_NOTIFICATIONS
highlight: 1
default: 1
options:
1: PLUGIN_ADMIN.ENABLED
0: PLUGIN_ADMIN.DISABLED
validate:
type: bool
help: PLUGIN_ADMIN.DASHBOARD_NOTIFICATIONS_HELP
notifications.plugins:
type: toggle
label: PLUGIN_ADMIN.PLUGINS_NOTIFICATIONS
highlight: 1
default: 1
options:
1: PLUGIN_ADMIN.ENABLED
0: PLUGIN_ADMIN.DISABLED
validate:
type: bool
help: PLUGIN_ADMIN.PLUGINS_NOTIFICATIONS_HELP
notifications.themes:
type: toggle
label: PLUGIN_ADMIN.THEMES_NOTIFICATIONS
highlight: 1
default: 1
options:
1: PLUGIN_ADMIN.ENABLED
0: PLUGIN_ADMIN.DISABLED
validate:
type: bool
help: PLUGIN_ADMIN.THEMES_NOTIFICATIONS_HELP
customization_tab:
type: tab
title: PLUGIN_ADMIN.CUSTOMIZATION
fields:
whitelabel.logos:
type: section
underline: true
title: PLUGIN_ADMIN.LOGOS
whitelabel.logo_login:
type: file
label: PLUGIN_ADMIN.LOGIN_SCREEN_CUSTOM_LOGO_LABEL
destination: 'user://assets'
accept:
- image/*
whitelabel.logo_custom:
type: file
label: PLUGIN_ADMIN.TOP_LEFT_CUSTOM_LOGO_LABEL
destination: 'user://assets'
accept:
- image/*
codemirror_section:
type: section
underline: true
title: PLUGIN_ADMIN.CODEMIRROR
whitelabel.codemirror_theme:
type: select
label: PLUGIN_ADMIN.CODEMIRROR_THEME
default: paper
markdown: true
data-options@: '\Grav\Plugin\AdminPlugin::themeOptions'
description: PLUGIN_ADMIN.CODEMIRROR_THEME_DESC
whitelabel.codemirror_fontsize:
type: select
label: PLUGIN_ADMIN.CODEMIRROR_FONTSIZE
default: md
options:
sm: PLUGIN_ADMIN.CODEMIRROR_FONTSIZE_SM
md: PLUGIN_ADMIN.CODEMIRROR_FONTSIZE_MD
lg: PLUGIN_ADMIN.CODEMIRROR_FONTSIZE_LG
whitelabel.codemirror_md_font:
type: select
label: PLUGIN_ADMIN.CODEMIRROR_MD_FONT
default: sans
options:
sans: PLUGIN_ADMIN.CODEMIRROR_MD_FONT_SANS
mono: PLUGIN_ADMIN.CODEMIRROR_MD_FONT_MONO
customization_section:
type: section
underline: true
title: PLUGIN_ADMIN.CUSTOMIZATION
whitelabel.quicktray_recompile:
type: toggle
label: PLUGIN_ADMIN.QUICKTRAY_RECOMPILE
help: PLUGIN_ADMIN.QUICKTRAY_RECOMPILE_HELP
highlight: 0
default: 0
options:
1: PLUGIN_ADMIN.ENABLED
0: PLUGIN_ADMIN.DISABLED
validate:
type: bool
whitelabel.color_scheme.name:
type: text
label: PLUGIN_ADMIN.COLOR_SCHEME_NAME
help: PLUGIN_ADMIN.COLOR_SCHEME_NAME_HELP
placeholder: PLUGIN_ADMIN.COLOR_SCHEME_NAME_PLACEHOLDER
themes-preview:
type: themepreview
ignore: true;
label: PLUGIN_ADMIN.PRESETS
style: vertical
colorschemes:
type: colorscheme
label: PLUGIN_ADMIN.COLOR_SCHEME_LABEL
style: vertical
help: PLUGIN_ADMIN.COLOR_SCHEME_HELP
fields:
whitelabel.color_scheme.colors.logo-bg:
type: colorscheme.color
default: '#1e333e'
help: PLUGIN_ADMIN.LOGO_BG_HELP
whitelabel.color_scheme.colors.logo-link:
type: colorscheme.color
default: '#ffffff'
help: PLUGIN_ADMIN.LOGO_LINK_HELP
whitelabel.color_scheme.colors.nav-bg:
type: colorscheme.color
default: '#253a47'
help: PLUGIN_ADMIN.NAV_BG_HELP
whitelabel.color_scheme.colors.nav-text:
type: colorscheme.color
default: '#afc7d5'
help: PLUGIN_ADMIN.NAV_TEXT_HELP
whitelabel.color_scheme.colors.nav-link:
type: colorscheme.color
default: '#d1dee7'
help: PLUGIN_ADMIN.NAV_LINK_HELP
whitelabel.color_scheme.colors.nav-selected-bg:
type: colorscheme.color
default: '#2d4d5b'
help: PLUGIN_ADMIN.NAV_SELECTED_BG_HELP
whitelabel.color_scheme.colors.nav-selected-link:
type: colorscheme.color
default: '#ffffff'
help: PLUGIN_ADMIN.NAV_SELECTED_LINK_HELP
whitelabel.color_scheme.colors.nav-hover-bg:
type: colorscheme.color
default: '#1e333e'
help: PLUGIN_ADMIN.NAV_HOVER_BG_HELP
whitelabel.color_scheme.colors.nav-hover-link:
type: colorscheme.color
default: '#ffffff'
help: PLUGIN_ADMIN.NAV_HOVER_LINK_HELP
whitelabel.color_scheme.colors.toolbar-bg:
type: colorscheme.color
default: '#349886'
help: PLUGIN_ADMIN.TOOLBAR_BG_HELP
whitelabel.color_scheme.colors.toolbar-text:
type: colorscheme.color
default: '#ffffff'
help: PLUGIN_ADMIN.TOOLBAR_TEXT_HELP
whitelabel.color_scheme.colors.page-bg:
type: colorscheme.color
default: '#314d5b'
help: PLUGIN_ADMIN.PAGE_BG_HELP
whitelabel.color_scheme.colors.page-text:
type: colorscheme.color
default: '#81a5b5'
help: PLUGIN_ADMIN.PAGE_TEXT_HELP
whitelabel.color_scheme.colors.page-link:
type: colorscheme.color
default: '#aad9ed'
help: PLUGIN_ADMIN.PAGE_LINK_HELP
whitelabel.color_scheme.colors.content-bg:
type: colorscheme.color
default: '#eeeeee'
help: PLUGIN_ADMIN.CONTENT_BG_HELP
whitelabel.color_scheme.colors.content-text:
type: colorscheme.color
default: '#737c81'
help: PLUGIN_ADMIN.CONTENT_TEXT_HELP
whitelabel.color_scheme.colors.content-link:
type: colorscheme.color
default: '#0082ba'
help: PLUGIN_ADMIN.CONTENT_LINK_HELP
whitelabel.color_scheme.colors.content-link2:
type: colorscheme.color
default: '#da4b46'
help: PLUGIN_ADMIN.CONTENT_LINK2_HELP
whitelabel.color_scheme.colors.content-header:
type: colorscheme.color
default: '#314d5b'
help: PLUGIN_ADMIN.CONTENT_HEADER_HELP
whitelabel.color_scheme.colors.content-tabs-bg:
type: colorscheme.color
default: '#223a47'
help: PLUGIN_ADMIN.CONTENT_TABS_BG_HELP
whitelabel.color_scheme.colors.content-tabs-text:
type: colorscheme.color
default: '#d1dee7'
help: PLUGIN_ADMIN.CONTENT_TABS_TEXT_HELP
whitelabel.color_scheme.colors.content-highlight:
type: colorscheme.color
default: '#ffffd7'
help: PLUGIN_ADMIN.CONTENT_HIGHLIGHT_HELP
whitelabel.color_scheme.colors.button-bg:
type: colorscheme.color
default: '#41bea8'
help: PLUGIN_ADMIN.BUTTON_BG_HELP
whitelabel.color_scheme.colors.button-text:
type: colorscheme.color
default: '#ffffff'
help: PLUGIN_ADMIN.BUTTON_TEXT_HELP
whitelabel.color_scheme.colors.notice-bg:
type: colorscheme.color
default: '#00a6cf'
help: PLUGIN_ADMIN.NOTICE_BG_HELP
whitelabel.color_scheme.colors.notice-text:
type: colorscheme.color
default: '#ffffff'
help: PLUGIN_ADMIN.NOTICE_TEXT_HELP
whitelabel.color_scheme.colors.update-bg:
type: colorscheme.color
default: '#8f5aad'
help: PLUGIN_ADMIN.UPDATES_BG_HELP
whitelabel.color_scheme.colors.update-text:
type: colorscheme.color
default: '#ffffff'
help: PLUGIN_ADMIN.UPDATES_TEXT_HELP
whitelabel.color_scheme.colors.critical-bg:
type: colorscheme.color
default: '#da4b46'
help: PLUGIN_ADMIN.CRITICAL_BG_HELP
whitelabel.color_scheme.colors.critical-text:
type: colorscheme.color
default: '#ffffff'
help: PLUGIN_ADMIN.CRITICAL_TEXT_HELP
whitelabel.color_scheme.accents.primary-accent:
type: select
size: meidum
classes: fancy
label: PLUGIN_ADMIN.PRIMARY_ACCENT_LABEL
help: PLUGIN_ADMIN.PRIMARY_ACCENT_HELP
options:
button: PLUGIN_ADMIN.BUTTON_COLORS
content: PLUGIN_ADMIN.CONTENT_COLORS
tabs: PLUGIN_ADMIN.TABS_COLORS
critical: PLUGIN_ADMIN.CRITICAL_COLORS
logo: PLUGIN_ADMIN.LOGO_COLORS
nav: PLUGIN_ADMIN.NAV_COLORS
notice: PLUGIN_ADMIN.NOTICE_COLORS
page: PLUGIN_ADMIN.PAGE_COLORS
toolbar: PLUGIN_ADMIN.TOOLBAR_COLORS
update: PLUGIN_ADMIN.UPDATE_COLORS
whitelabel.color_scheme.accents.secondary-accent:
type: select
size: meidum
classes: fancy
label: PLUGIN_ADMIN.SECONDARY_ACCENT_LABEL
help: PLUGIN_ADMIN.SECONDARY_ACCENT_HELP
options:
button: PLUGIN_ADMIN.BUTTON_COLORS
content: PLUGIN_ADMIN.CONTENT_COLORS
tabs: PLUGIN_ADMIN.TABS_COLORS
critical: PLUGIN_ADMIN.CRITICAL_COLORS
logo: PLUGIN_ADMIN.LOGO_COLORS
nav: PLUGIN_ADMIN.NAV_COLORS
notice: PLUGIN_ADMIN.NOTICE_COLORS
page: PLUGIN_ADMIN.PAGE_COLORS
toolbar: PLUGIN_ADMIN.TOOLBAR_COLORS
update: PLUGIN_ADMIN.UPDATE_COLORS
whitelabel.color_scheme.accents.tertiary-accent:
type: select
size: meidum
classes: fancy
label: PLUGIN_ADMIN.TERTIARY_ACCENT_LABEL
help: PLUGIN_ADMIN.TERTIARY_ACCENT_HELP
options:
button: PLUGIN_ADMIN.BUTTON_COLORS
content: PLUGIN_ADMIN.CONTENT_COLORS
tabs: PLUGIN_ADMIN.TABS_COLORS
critical: PLUGIN_ADMIN.CRITICAL_COLORS
logo: PLUGIN_ADMIN.LOGO_COLORS
nav: PLUGIN_ADMIN.NAV_COLORS
notice: PLUGIN_ADMIN.NOTICE_COLORS
page: PLUGIN_ADMIN.PAGE_COLORS
toolbar: PLUGIN_ADMIN.TOOLBAR_COLORS
update: PLUGIN_ADMIN.UPDATE_COLORS
whitelabel.custom_footer:
type: textarea
rows: 2
label: PLUGIN_ADMIN.CUSTOM_FOOTER
help: PLUGIN_ADMIN.CUSTOM_FOOTER_HELP
placeholder: PLUGIN_ADMIN.CUSTOM_FOOTER_PLACEHOLDER
whitelabel.custom_css:
label: PLUGIN_ADMIN.CUSTOM_CSS_LABEL
placeholder: PLUGIN_ADMIN.CUSTOM_CSS_PLACEHOLDER
help: PLUGIN_ADMIN.CUSTOM_CSS_HELP
type: editor
codemirror:
mode: 'css'
indentUnit: 2
autofocus: true
indentWithTabs: true
lineNumbers: true
styleActiveLine: true
whitelabel.custom_presets:
label: PLUGIN_ADMIN.CUSTOM_PRESETS
help: PLUGIN_ADMIN.CUSTOM_PRESETS_HELP
placeholder: PLUGIN_ADMIN.CUSTOM_PRESETS_PLACEHOLDER
type: editor
codemirror:
mode: 'yaml'
indentUnit: 2
autofocus: true
indentWithTabs: false
lineNumbers: true
styleActiveLine: true
gutters: ['CodeMirror-lint-markers']
lint: true
extras_tab:
type: tab
title: PLUGIN_ADMIN.EXTRAS
fields:
Popularity:
type: section
title: PLUGIN_ADMIN.POPULARITY
underline: true
popularity.enabled:
type: toggle
label: PLUGIN_ADMIN.VISITOR_TRACKING
highlight: 1
default: 1
options:
1: PLUGIN_ADMIN.ENABLED
0: PLUGIN_ADMIN.DISABLED
validate:
type: bool
help: PLUGIN_ADMIN.VISITOR_TRACKING_HELP
dashboard.days_of_stats:
type: text
label: PLUGIN_ADMIN.DAYS_OF_STATS
append: days
size: x-small
default: 7
help: PLUGIN_ADMIN.DAYS_OF_STATS_HELP
validate:
type: int
popularity.ignore:
type: array
label: PLUGIN_ADMIN.IGNORE_URLS
size: large
help: PLUGIN_ADMIN.IGNORE_URLS_HELP
default: ['/test*','/modular']
value_only: true
placeholder_value: /ignore-this-route
popularity.history.daily:
type: hidden
label: PLUGIN_ADMIN.DAILY_HISTORY
default: 30
popularity.history.monthly:
type: hidden
label: PLUGIN_ADMIN.MONTHLY_HISTORY
default: 12
popularity.history.visitors:
type: hidden
label: PLUGIN_ADMIN.VISITORS_HISTORY
default: 20
MediaResize:
type: section
title: PLUGIN_ADMIN.MEDIA_RESIZE
underline: true
MediaResizeNote:
type: spacer
text: PLUGIN_ADMIN.PAGEMEDIA_RESIZER
markdown: true
pagemedia.resize_width:
type: number
size: x-small
append: PLUGIN_ADMIN.PIXELS
label: PLUGIN_ADMIN.RESIZE_WIDTH
default: 0
validate:
type: number
help: PLUGIN_ADMIN.RESIZE_WIDTH_HELP
pagemedia.resize_height:
type: number
size: x-small
append: PLUGIN_ADMIN.PIXELS
label: PLUGIN_ADMIN.RESIZE_HEIGHT
default: 0
validate:
type: number
help: PLUGIN_ADMIN.RESIZE_HEIGHT_HELP
pagemedia.res_min_width:
type: number
size: x-small
append: PLUGIN_ADMIN.PIXELS
label: PLUGIN_ADMIN.RES_MIN_WIDTH
default: 0
validate:
type: number
help: PLUGIN_ADMIN.RES_MIN_WIDTH_HELP
pagemedia.res_min_height:
type: number
size: x-small
append: PLUGIN_ADMIN.PIXELS
label: PLUGIN_ADMIN.RES_MIN_HEIGHT
default: 0
validate:
type: number
help: PLUGIN_ADMIN.RES_MIN_HEIGHT_HELP
pagemedia.res_max_width:
type: number
size: x-small
append: PLUGIN_ADMIN.PIXELS
label: PLUGIN_ADMIN.RES_MAX_WIDTH
default: 0
validate:
type: number
help: PLUGIN_ADMIN.RES_MAX_WIDTH_HELP
pagemedia.res_max_height:
type: number
size: x-small
append: PLUGIN_ADMIN.PIXELS
label: PLUGIN_ADMIN.RES_MAX_HEIGHT
default: 0
validate:
type: number
help: PLUGIN_ADMIN.RES_MAX_HEIGHT_HELP
pagemedia.resize_quality:
type: number
size: x-small
append: 0...1
label: PLUGIN_ADMIN.RESIZE_QUALITY
default: 0.8
validate:
type: number
step: 0.01
help: PLUGIN_ADMIN.RESIZE_QUALITY_HELP
@@ -0,0 +1,36 @@
title: PLUGIN_ADMIN.MEDIA
form:
validation: loose
fields:
'types':
name: medias
type: list
label: PLUGIN_ADMIN.MEDIA_TYPES
style: vertical
key: extension
controls: both
collapsed: true
fields:
.extension:
type: key
label: PLUGIN_ADMIN.FILE_EXTENSION
.type:
type: text
label: PLUGIN_ADMIN.TYPE
.thumb:
type: text
label: PLUGIN_ADMIN.THUMB
.mime:
type: text
label: PLUGIN_ADMIN.MIME_TYPE
validate:
type: lower
.image:
type: textarea
yaml: true
label: PLUGIN_ADMIN.IMAGE_OPTIONS
validate:
type: yaml
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+182
View File
@@ -0,0 +1,182 @@
<?php
/**
* @package Grav\Plugin\Admin
*
* @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved.
* @license MIT License; see LICENSE file for details.
*/
namespace Grav\Plugin\Admin;
use ArrayAccess;
use Exception;
use Grav\Common\Data\Blueprint;
use Grav\Common\Data\Data;
use Grav\Framework\Form\Interfaces\FormFlashInterface;
use Grav\Framework\Form\Interfaces\FormInterface;
use Grav\Framework\Form\Traits\FormTrait;
use InvalidArgumentException;
use JsonSerializable;
/**
* Class AdminForm
* @package Grav\Plugin\Admin
*/
class AdminForm implements FormInterface, JsonSerializable
{
use FormTrait;
/** @var string */
protected $nonce_name;
/** @var string */
protected $nonce_action;
/** @var callable */
protected $submitMethod;
/**
* AdminForm constructor.
*
* @param string $name
* @param array $options
*/
public function __construct(string $name, array $options)
{
$this->name = $name;
$this->nonce_name = $options['nonce_name'] ?? 'admin-nonce';
$this->nonce_action = $options['nonce_action'] ?? 'admin-form';
$this->setId($options['id'] ?? $this->getName());
$this->setUniqueId($options['unique_id'] ?? $this->getName());
$this->setBlueprint($options['blueprint']);
$this->setSubmitMethod($options['submit_method'] ?? null);
$this->setFlashLookupFolder('tmp://admin/forms/[SESSIONID]');
if (!empty($options['reset'])) {
$this->getFlash()->delete();
}
$this->initialize();
}
/**
* @return $this
*/
public function initialize(): AdminForm
{
$this->messages = [];
$this->submitted = false;
$this->unsetFlash();
/** @var FormFlashInterface $flash */
$flash = $this->getFlash();
if ($flash->exists()) {
$data = $flash->getData();
if (null !== $data) {
$data = new Data($data, $this->getBlueprint());
$data->setKeepEmptyValues(true);
$data->setMissingValuesAsNull(true);
}
$this->data = $data;
$this->files = $flash->getFilesByFields(false);
} else {
$this->data = new Data([], $this->getBlueprint());
$this->files = [];
}
return $this;
}
/**
* @return string
*/
public function getNonceName(): string
{
return $this->nonce_name;
}
/**
* @return string
*/
public function getNonceAction(): string
{
return $this->nonce_action;
}
/**
* @return string
*/
public function getScope(): string
{
return 'data.';
}
/**
* @param Blueprint $blueprint
*/
public function setBlueprint(Blueprint $blueprint): void
{
if (null === $blueprint) {
throw new InvalidArgumentException('Blueprint is required');
}
$this->blueprint = $blueprint;
}
/**
* @param string $field
* @param mixed $value
*/
public function setData(string $field, $value): void
{
$this->getData()->set($field, $value);
}
/**
* @return Blueprint
*/
public function getBlueprint(): Blueprint
{
return $this->blueprint;
}
/**
* @param callable|null $submitMethod
*/
public function setSubmitMethod(?callable $submitMethod): void
{
if (null === $submitMethod) {
throw new InvalidArgumentException('Submit method is required');
}
$this->submitMethod = $submitMethod;
}
/**
* @param array $data
* @param array $files
* @return void
* @throws Exception
*/
protected function doSubmit(array $data, array $files): void
{
$method = $this->submitMethod;
$method($data, $files);
$this->reset();
}
/**
* Filter validated data.
*
* @param ArrayAccess|Data|null $data
* @return void
*/
protected function filterData($data = null): void
{
if ($data instanceof Data) {
$data->filter(true, true);
}
}
}
@@ -0,0 +1,51 @@
<?php
/**
* @package Grav\Plugin\Admin
*
* @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved.
* @license MIT License; see LICENSE file for details.
*/
declare(strict_types=1);
namespace Grav\Plugin\Admin;
use Grav\Common\Grav;
use Grav\Common\Page\Interfaces\PageInterface;
use Grav\Common\Page\Page;
use Grav\Framework\Form\Interfaces\FormFactoryInterface;
use Grav\Framework\Form\Interfaces\FormInterface;
/**
* Class FlexFormFactory
* @package Grav\Plugin\FlexObjects
*/
class AdminFormFactory implements FormFactoryInterface
{
/**
* @param Page $page
* @param string $name
* @param array $form
* @return FormInterface|null
*/
public function createPageForm(Page $page, string $name, array $form): ?FormInterface
{
return $this->createFormForPage($page, $name, $form);
}
/**
* @param PageInterface $page
* @param string $name
* @param array $form
* @return FormInterface|null
*/
public function createFormForPage(PageInterface $page, string $name, array $form): ?FormInterface
{
/** @var Admin|null $admin */
$admin = Grav::instance()['admin'] ?? null;
$object = $admin->form ?? null;
return $object && $object->getName() === $name ? $object : null;
}
}
@@ -0,0 +1,414 @@
<?php
/**
* @package Grav\Plugin\Admin
*
* @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved.
* @license MIT License; see LICENSE file for details.
*/
declare(strict_types=1);
namespace Grav\Plugin\Admin\Controllers;
use Grav\Common\Debugger;
use Grav\Common\Grav;
use Grav\Common\Inflector;
use Grav\Common\Language\Language;
use Grav\Common\Utils;
use Grav\Framework\Flex\Interfaces\FlexObjectInterface;
use Grav\Framework\Form\Interfaces\FormInterface;
use Grav\Framework\Psr7\Response;
use Grav\Framework\RequestHandler\Exception\NotFoundException;
use Grav\Framework\RequestHandler\Exception\PageExpiredException;
use Grav\Framework\RequestHandler\Exception\RequestException;
use Grav\Framework\Route\Route;
use Grav\Framework\Session\SessionInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
use RocketTheme\Toolbox\Event\Event;
use RocketTheme\Toolbox\Session\Message;
abstract class AbstractController implements RequestHandlerInterface
{
/** @var string */
protected $nonce_action = 'admin-form';
/** @var string */
protected $nonce_name = 'admin-nonce';
/** @var ServerRequestInterface */
protected $request;
/** @var Grav */
protected $grav;
/** @var string */
protected $type;
/** @var string */
protected $key;
/**
* Handle request.
*
* Fires event: admin.[directory].[task|action].[command]
*
* @param ServerRequestInterface $request
* @return Response
*/
public function handle(ServerRequestInterface $request): ResponseInterface
{
$attributes = $request->getAttributes();
$this->request = $request;
$this->grav = $attributes['grav'] ?? Grav::instance();
$this->type = $attributes['type'] ?? null;
$this->key = $attributes['key'] ?? null;
/** @var Route $route */
$route = $attributes['route'];
$post = $this->getPost();
if ($this->isFormSubmit()) {
$form = $this->getForm();
$this->nonce_name = $attributes['nonce_name'] ?? $form->getNonceName();
$this->nonce_action = $attributes['nonce_action'] ?? $form->getNonceAction();
}
try {
$task = $request->getAttribute('task') ?? $post['task'] ?? $route->getParam('task');
if ($task) {
if (empty($attributes['forwarded'])) {
$this->checkNonce($task);
}
$type = 'task';
$command = $task;
} else {
$type = 'action';
$command = $request->getAttribute('action') ?? $post['action'] ?? $route->getParam('action') ?? 'display';
}
$command = strtolower($command);
$event = new Event(
[
'controller' => $this,
'response' => null
]
);
$this->grav->fireEvent("admin.{$this->type}.{$type}.{$command}", $event);
$response = $event['response'];
if (!$response) {
/** @var Inflector $inflector */
$inflector = $this->grav['inflector'];
$method = $type . $inflector::camelize($command);
if ($method && method_exists($this, $method)) {
$response = $this->{$method}($request);
} else {
throw new NotFoundException($request);
}
}
} catch (\Exception $e) {
/** @var Debugger $debugger */
$debugger = $this->grav['debugger'];
$debugger->addException($e);
$response = $this->createErrorResponse($e);
}
if ($response instanceof Response) {
return $response;
}
return $this->createJsonResponse($response);
}
/**
* Get request.
*
* @return ServerRequestInterface
*/
public function getRequest(): ServerRequestInterface
{
return $this->request;
}
/**
* @param string|null $name
* @param mixed $default
* @return mixed
*/
public function getPost(string $name = null, $default = null)
{
$body = $this->request->getParsedBody();
if ($name) {
return $body[$name] ?? $default;
}
return $body;
}
/**
* Check if a form has been submitted.
*
* @return bool
*/
public function isFormSubmit(): bool
{
return (bool)$this->getPost('__form-name__');
}
/**
* Get form.
*
* @param string|null $type
* @return FormInterface
*/
public function getForm(string $type = null): FormInterface
{
$object = $this->getObject();
if (!$object) {
throw new \RuntimeException('Not Found', 404);
}
$formName = $this->getPost('__form-name__');
$uniqueId = $this->getPost('__unique_form_id__') ?: $formName;
$form = $object->getForm($type ?? 'edit');
if ($uniqueId) {
$form->setUniqueId($uniqueId);
}
return $form;
}
/**
* @return FlexObjectInterface
*/
abstract public function getObject();
/**
* Get Grav instance.
*
* @return Grav
*/
public function getGrav(): Grav
{
return $this->grav;
}
/**
* Get session.
*
* @return SessionInterface
*/
public function getSession(): SessionInterface
{
return $this->getGrav()['session'];
}
/**
* Display the current admin page.
*
* @return Response
*/
public function createDisplayResponse(): ResponseInterface
{
return new Response(418);
}
/**
* Create custom HTML response.
*
* @param string $content
* @param int $code
* @return Response
*/
public function createHtmlResponse(string $content, int $code = null): ResponseInterface
{
return new Response($code ?: 200, [], $content);
}
/**
* Create JSON response.
*
* @param array $content
* @return Response
*/
public function createJsonResponse(array $content): ResponseInterface
{
$code = $content['code'] ?? 200;
if ($code >= 301 && $code <= 307) {
$code = 200;
}
return new Response($code, ['Content-Type' => 'application/json'], json_encode($content));
}
/**
* Create redirect response.
*
* @param string $url
* @param int $code
* @return Response
*/
public function createRedirectResponse(string $url, int $code = null): ResponseInterface
{
if (null === $code || $code < 301 || $code > 307) {
$code = $this->grav['config']->get('system.pages.redirect_default_code', 302);
}
$accept = $this->getAccept(['application/json', 'text/html']);
if ($accept === 'application/json') {
return $this->createJsonResponse(['code' => $code, 'status' => 'redirect', 'redirect' => $url]);
}
return new Response($code, ['Location' => $url]);
}
/**
* Create error response.
*
* @param \Exception $exception
* @return Response
*/
public function createErrorResponse(\Exception $exception): ResponseInterface
{
$validCodes = [
400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418,
422, 423, 424, 425, 426, 428, 429, 431, 451, 500, 501, 502, 503, 504, 505, 506, 507, 508, 511
];
if ($exception instanceof RequestException) {
$code = $exception->getHttpCode();
$reason = $exception->getHttpReason();
} else {
$code = $exception->getCode();
$reason = null;
}
if (!in_array($code, $validCodes, true)) {
$code = 500;
}
$message = $exception->getMessage();
$response = [
'code' => $code,
'status' => 'error',
'message' => htmlspecialchars($message, ENT_QUOTES | ENT_HTML5, 'UTF-8')
];
$accept = $this->getAccept(['application/json', 'text/html']);
if ($accept === 'text/html') {
$method = $this->getRequest()->getMethod();
// On POST etc, redirect back to the previous page.
if ($method !== 'GET' && $method !== 'HEAD') {
$this->setMessage($message, 'error');
$referer = $this->request->getHeaderLine('Referer');
return $this->createRedirectResponse($referer, 303);
}
// TODO: improve error page
return $this->createHtmlResponse($response['message']);
}
return new Response($code, ['Content-Type' => 'application/json'], json_encode($response), '1.1', $reason);
}
/**
* Translate a string.
*
* @param string $string
* @return string
*/
public function translate(string $string): string
{
/** @var Language $language */
$language = $this->grav['language'];
return $language->translate($string);
}
/**
* Set message to be shown in the admin.
*
* @param string $message
* @param string $type
* @return $this
*/
public function setMessage($message, $type = 'info')
{
/** @var Message $messages */
$messages = $this->grav['messages'];
$messages->add($message, $type);
return $this;
}
/**
* Check if request nonce is valid.
*
* @param string $task
* @throws PageExpiredException If nonce is not valid.
*/
protected function checkNonce(string $task): void
{
$nonce = null;
if (\in_array(strtoupper($this->request->getMethod()), ['POST', 'PUT', 'PATCH', 'DELETE'])) {
$nonce = $this->getPost($this->nonce_name);
}
if (!$nonce) {
$nonce = $this->grav['uri']->param($this->nonce_name);
}
if (!$nonce) {
$nonce = $this->grav['uri']->query($this->nonce_name);
}
if (!$nonce || !Utils::verifyNonce($nonce, $this->nonce_action)) {
throw new PageExpiredException($this->request);
}
}
/**
* Return the best matching mime type for the request.
*
* @param string[] $compare
* @return string|null
*/
protected function getAccept(array $compare): ?string
{
$accepted = [];
foreach ($this->request->getHeader('Accept') as $accept) {
foreach (explode(',', $accept) as $item) {
if (!$item) {
continue;
}
$split = explode(';q=', $item);
$mime = array_shift($split);
$priority = array_shift($split) ?? 1.0;
$accepted[$mime] = $priority;
}
}
arsort($accepted);
// TODO: add support for image/* etc
$list = array_intersect($compare, array_keys($accepted));
if (!$list && (isset($accepted['*/*']) || isset($accepted['*']))) {
return reset($compare) ?: null;
}
return reset($list) ?: null;
}
}
@@ -0,0 +1,359 @@
<?php
/**
* @package Grav\Plugin\Admin
*
* @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved.
* @license MIT License; see LICENSE file for details.
*/
declare(strict_types=1);
namespace Grav\Plugin\Admin\Controllers;
use Grav\Common\Config\Config;
use Grav\Common\Data\Blueprint;
use Grav\Common\Grav;
use Grav\Common\Language\Language;
use Grav\Common\Page\Interfaces\PageInterface;
use Grav\Common\Page\Page;
use Grav\Common\Page\Pages;
use Grav\Common\Uri;
use Grav\Common\User\Interfaces\UserInterface;
use Grav\Common\Utils;
use Grav\Framework\Controller\Traits\ControllerResponseTrait;
use Grav\Framework\RequestHandler\Exception\PageExpiredException;
use Grav\Framework\Session\SessionInterface;
use Grav\Plugin\Admin\Admin;
use Grav\Plugin\Admin\AdminForm;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use RocketTheme\Toolbox\Session\Message;
abstract class AdminController
{
use ControllerResponseTrait {
createRedirectResponse as traitCreateRedirectResponse;
getErrorJson as traitGetErrorJson;
}
/** @var string */
protected $nonce_action = 'admin-form';
/** @var string */
protected $nonce_name = 'admin-nonce';
/** @var Grav */
protected $grav;
/** @var PageInterface */
protected $page;
/** @var AdminForm|null */
protected $form;
public function __construct(Grav $grav)
{
$this->grav = $grav;
}
/**
* @return PageInterface|null
*/
public function getPage(): ?PageInterface
{
return $this->page;
}
/**
* Get currently active form.
*
* @return AdminForm|null
*/
public function getActiveForm(): ?AdminForm
{
if (null === $this->form) {
$post = $this->getPost();
$active = $post['__form-name__'] ?? null;
$this->form = $active ? $this->getForm($active) : null;
}
return $this->form;
}
/**
* Get a form.
*
* @param string $name
* @param array $options
* @return AdminForm|null
*/
public function getForm(string $name, array $options = []): ?AdminForm
{
$post = $this->getPost();
$page = $this->getPage();
$forms = $page ? $page->forms() : [];
$blueprint = $forms[$name] ?? null;
if (null === $blueprint) {
return null;
}
$active = $post['__form-name__'] ?? null;
$unique_id = $active && $active === $name ? ($post['__unique_form_id__'] ?? null) : null;
$options += [
'unique_id' => $unique_id,
'blueprint' => new Blueprint(null, ['form' => $blueprint]),
'submit_method' => $this->getFormSubmitMethod($name),
'nonce_name' => $this->nonce_name,
'nonce_action' => $this->nonce_action,
];
return new AdminForm($name, $options);
}
abstract protected function getFormSubmitMethod(string $name): callable;
/**
* @param string $route
* @param string|null $lang
* @return string
*/
public function getAdminUrl(string $route, string $lang = null): string
{
/** @var Pages $pages */
$pages = $this->grav['pages'];
$admin = $this->getAdmin();
return $pages->baseUrl($lang) . $admin->base . $route;
}
/**
* @param string $route
* @param string|null $lang
* @return string
*/
public function getAbsoluteAdminUrl(string $route, string $lang = null): string
{
/** @var Pages $pages */
$pages = $this->grav['pages'];
$admin = $this->getAdmin();
return $pages->baseUrl($lang, true) . $admin->base . $route;
}
/**
* Get session.
*
* @return SessionInterface
*/
public function getSession(): SessionInterface
{
return $this->grav['session'];
}
/**
* @return Admin
*/
protected function getAdmin(): Admin
{
return $this->grav['admin'];
}
/**
* @return UserInterface
*/
protected function getUser(): UserInterface
{
return $this->getAdmin()->user;
}
/**
* @return ServerRequestInterface
*/
public function getRequest(): ServerRequestInterface
{
return $this->getAdmin()->request;
}
/**
* @return array
*/
public function getPost(): array
{
return (array)($this->getRequest()->getParsedBody() ?? []);
}
/**
* Translate a string.
*
* @param string $string
* @param mixed ...$args
* @return string
*/
public function translate(string $string, ...$args): string
{
/** @var Language $language */
$language = $this->grav['language'];
array_unshift($args, $string);
return $language->translate($args);
}
/**
* Set message to be shown in the admin.
*
* @param string $message
* @param string $type
* @return $this
*/
public function setMessage(string $message, string $type = 'info'): AdminController
{
/** @var Message $messages */
$messages = $this->grav['messages'];
$messages->add($message, $type);
return $this;
}
/**
* @return Config
*/
protected function getConfig(): Config
{
return $this->grav['config'];
}
/**
* Check if request nonce is valid.
*
* @return void
* @throws PageExpiredException If nonce is not valid.
*/
protected function checkNonce(): void
{
$nonce = null;
$nonce_name = $this->form ? $this->form->getNonceName() : $this->nonce_name;
$nonce_action = $this->form ? $this->form->getNonceAction() : $this->nonce_action;
if (\in_array(strtoupper($this->getRequest()->getMethod()), ['POST', 'PUT', 'PATCH', 'DELETE'])) {
$post = $this->getPost();
$nonce = $post[$nonce_name] ?? null;
}
/** @var Uri $uri */
$uri = $this->grav['uri'];
if (!$nonce) {
$nonce = $uri->param($nonce_name);
}
if (!$nonce) {
$nonce = $uri->query($nonce_name);
}
if (!$nonce || !Utils::verifyNonce($nonce, $nonce_action)) {
throw new PageExpiredException($this->getRequest());
}
}
/**
* Return the best matching mime type for the request.
*
* @param string[] $compare
* @return string|null
*/
protected function getAccept(array $compare): ?string
{
$accepted = [];
foreach ($this->getRequest()->getHeader('Accept') as $accept) {
foreach (explode(',', $accept) as $item) {
if (!$item) {
continue;
}
$split = explode(';q=', $item);
$mime = array_shift($split);
$priority = array_shift($split) ?? 1.0;
$accepted[$mime] = $priority;
}
}
arsort($accepted);
// TODO: add support for image/* etc
$list = array_intersect($compare, array_keys($accepted));
if (!$list && (isset($accepted['*/*']) || isset($accepted['*']))) {
return reset($compare) ?: null;
}
return reset($list) ?: null;
}
/**
* @param string $template
* @return PageInterface
*/
protected function createPage(string $template): PageInterface
{
$page = new Page();
// Plugins may not have the correct Cache-Control header set, force no-store for the proxies.
$page->expires(0);
$filename = "plugin://admin/pages/admin/{$template}.md";
if (!file_exists($filename)) {
throw new \RuntimeException(sprintf('Creating admin page %s failed: not found', $template));
}
Admin::DEBUG && Admin::addDebugMessage("Admin page: {$template}");
$page->init(new \SplFileInfo($filename));
$page->slug($template);
return $page;
}
/**
* @param string|null $url
* @param int|null $code
* @return ResponseInterface
*/
protected function createRedirectResponse(string $url = null, int $code = null): ResponseInterface
{
$request = $this->getRequest();
if (null === $url || '' === $url) {
$url = (string)$request->getUri();
} elseif (mb_strpos($url, '/') === 0) {
$url = $this->getAbsoluteAdminUrl($url);
}
if (null === $code) {
if (in_array($request->getMethod(), ['GET', 'HEAD'])) {
$code = 302;
} else {
$code = 303;
}
}
return $this->traitCreateRedirectResponse($url, $code);
}
/**
* @param \Throwable $e
* @return array
*/
protected function getErrorJson(\Throwable $e): array
{
$json = $this->traitGetErrorJson($e);
$code = $e->getCode();
if ($code === 401) {
$json['redirect'] = $this->getAbsoluteAdminUrl('/');
}
return $json;
}
}
@@ -0,0 +1,634 @@
<?php
/**
* @package Grav\Plugin\Admin
*
* @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved.
* @license MIT License; see LICENSE file for details.
*/
namespace Grav\Plugin\Admin\Controllers\Login;
use Grav\Common\Debugger;
use Grav\Common\Grav;
use Grav\Common\Page\Pages;
use Grav\Common\Uri;
use Grav\Common\User\Interfaces\UserCollectionInterface;
use Grav\Common\User\Interfaces\UserInterface;
use Grav\Common\Utils;
use Grav\Framework\RequestHandler\Exception\PageExpiredException;
use Grav\Framework\RequestHandler\Exception\RequestException;
use Grav\Plugin\Admin\Admin;
use Grav\Plugin\Admin\Controllers\AdminController;
use Grav\Plugin\Email\Email;
use Grav\Plugin\Login\Login;
use Psr\Http\Message\ResponseInterface;
use RobThree\Auth\TwoFactorAuthException;
/**
* Class LoginController
* @package Grav\Plugin\Admin\Controllers\Login
*/
class LoginController extends AdminController
{
/** @var string */
protected $nonce_action = 'admin-login';
/** @var string */
protected $nonce_name = 'login-nonce';
/**
* @return ResponseInterface
*/
public function displayLogin(): ResponseInterface
{
$this->page = $this->createPage('login');
$user = $this->getUser();
if ($this->is2FA($user)) {
$this->form = $this->getForm('login-twofa', ['reset' => true]);
} else {
$this->form = $this->getForm('login', ['reset' => true]);
}
return $this->createDisplayResponse();
}
/**
* @return ResponseInterface
*/
public function displayForgot(): ResponseInterface
{
$this->page = $this->createPage('forgot');
$this->form = $this->getForm('admin-login-forgot', ['reset' => true]);
return $this->createDisplayResponse();
}
/**
* Handle the reset password action.
*
* @param string|null $username
* @param string|null $token
* @return ResponseInterface
*/
public function displayReset(string $username = null, string $token = null): ResponseInterface
{
if ('' === (string)$username || '' === (string)$token) {
$this->setMessage($this->translate('PLUGIN_ADMIN.RESET_INVALID_LINK'), 'error');
return $this->createRedirectResponse('/forgot');
}
$this->page = $this->createPage('reset');
$this->form = $this->getForm('admin-login-reset', ['reset' => true]);
$this->form->setData('username', $username);
$this->form->setData('token', $token);
$this->setMessage($this->translate('PLUGIN_ADMIN.RESET_NEW_PASSWORD'));
return $this->createDisplayResponse();
}
/**
* @return ResponseInterface
*/
public function displayRegister(): ResponseInterface
{
$route = $this->getRequest()->getAttribute('admin')['route'] ?? '';
if ('' !== $route) {
return $this->createRedirectResponse('/');
}
$this->page = $this->createPage('register');
$this->form = $this->getForm('admin-login-register');
return $this->createDisplayResponse();
}
/**
* @return ResponseInterface
*/
public function displayUnauthorized(): ResponseInterface
{
$uri = (string)$this->getRequest()->getUri();
$ext = Utils::pathinfo($uri, PATHINFO_EXTENSION);
$accept = $this->getAccept(['application/json', 'text/html']);
if ($ext === 'json' || $accept === 'application/json') {
return $this->createErrorResponse(new RequestException($this->getRequest(), $this->translate('PLUGIN_ADMIN.LOGGED_OUT'), 401));
}
$this->setMessage($this->translate('PLUGIN_ADMIN.LOGGED_OUT'), 'warning');
return $this->createRedirectResponse('/');
}
/**
* Handle login.
*
* @return ResponseInterface
*/
public function taskLogin(): ResponseInterface
{
$this->page = $this->createPage('login');
$this->form = $this->getActiveForm() ?? $this->getForm('login');
try {
$this->checkNonce();
} catch (PageExpiredException $e) {
$this->setMessage($this->translate('PLUGIN_ADMIN.INVALID_SECURITY_TOKEN'), 'error');
return $this->createDisplayResponse();
}
$post = $this->getPost();
$credentials = (array)($post['data'] ?? []);
$login = $this->getLogin();
$config = $this->getConfig();
$userKey = (string)($credentials['username'] ?? '');
// Pseudonymization of the IP.
$ipKey = sha1(Uri::ip() . $config->get('security.salt'));
$rateLimiter = $login->getRateLimiter('login_attempts');
// Check if the current IP has been used in failed login attempts.
$attempts = count($rateLimiter->getAttempts($ipKey, 'ip'));
$rateLimiter->registerRateLimitedAction($ipKey, 'ip')->registerRateLimitedAction($userKey);
// Check rate limit for both IP and user, but allow each IP a single try even if user is already rate limited.
if ($rateLimiter->isRateLimited($ipKey, 'ip') || ($attempts && $rateLimiter->isRateLimited($userKey))) {
Admin::DEBUG && Admin::addDebugMessage('Admin login: rate limit, redirecting', $credentials);
$this->setMessage($this->translate('PLUGIN_LOGIN.TOO_MANY_LOGIN_ATTEMPTS', $rateLimiter->getInterval()), 'error');
$this->form->reset();
/** @var Pages $pages */
$pages = $this->grav['pages'];
// Redirect to the home page of the site.
return $this->createRedirectResponse($pages->homeUrl(null, true));
}
Admin::DEBUG && Admin::addDebugMessage('Admin login', $credentials);
// Fire Login process.
$event = $login->login(
$credentials,
['admin' => true, 'twofa' => $config->get('plugins.admin.twofa_enabled', false)],
['authorize' => 'admin.login', 'return_event' => true]
);
$user = $event->getUser();
Admin::DEBUG && Admin::addDebugMessage('Admin login: user', $user);
$redirect = (string)$this->getRequest()->getUri();
if ($user->authenticated) {
$rateLimiter->resetRateLimit($ipKey, 'ip')->resetRateLimit($userKey);
if ($user->authorized) {
$event->defMessage('PLUGIN_ADMIN.LOGIN_LOGGED_IN', 'info');
}
$event->defRedirect($redirect);
} elseif ($user->authorized) {
$event->defMessage('PLUGIN_LOGIN.ACCESS_DENIED', 'error');
} else {
$event->defMessage('PLUGIN_LOGIN.LOGIN_FAILED', 'error');
}
$event->defRedirect($redirect);
$message = $event->getMessage();
if ($message) {
$this->setMessage($this->translate($message), $event->getMessageType());
}
$this->form->reset();
return $this->createRedirectResponse($event->getRedirect());
}
/**
* Handle logout when user isn't fully logged in or clicks logout after the session has been expired.
*
* @return ResponseInterface
*/
public function taskLogout(): ResponseInterface
{
// We do not need to check the nonce here as user session has been expired or user hasn't fully logged in (2FA).
// Just be sure we terminate the current session.
$login = $this->getLogin();
$event = $login->logout(['admin' => true], ['return_event' => true]);
$event->defMessage('PLUGIN_ADMIN.LOGGED_OUT', 'info');
$message = $event->getMessage();
if ($message) {
$this->getSession()->setFlashCookieObject(Admin::TMP_COOKIE_NAME, ['message' => $this->translate($message), 'status' => $event->getMessageType()]);
}
return $this->createRedirectResponse('/');
}
/**
* Handle 2FA verification.
*
* @return ResponseInterface
*/
public function taskTwofa(): ResponseInterface
{
$user = $this->getUser();
if (!$this->is2FA($user)) {
Admin::DEBUG && Admin::addDebugMessage('Admin login: user is not logged in or does not have 2FA enabled', $user);
// Task is visible only for users who have enabled 2FA.
return $this->createRedirectResponse('/');
}
$login = $this->getLogin();
$this->page = $this->createPage('login');
$this->form = $this->getForm('login-twofa');
try {
$this->checkNonce();
} catch (PageExpiredException $e) {
$this->setMessage($this->translate('PLUGIN_ADMIN.INVALID_SECURITY_TOKEN'), 'error');
// Failed 2FA nonce check, logout and redirect.
$login->logout(['admin' => true]);
$this->form->reset();
return $this->createRedirectResponse('/');
}
$post = $this->getPost();
$data = $post['data'] ?? [];
try {
$twoFa = $login->twoFactorAuth();
} catch (TwoFactorAuthException $e) {
/** @var Debugger $debugger */
$debugger = $this->grav['debugger'];
$debugger->addException($e);
$twoFa = null;
}
$code = $data['2fa_code'] ?? '';
$secret = $user->twofa_secret ?? '';
$twofa_valid = $twoFa->verifyCode($secret, $code);
$yubikey_otp = $data['yubikey_otp'] ?? '';
$yubikey_id = $user->yubikey_id ?? '';
$yubikey_valid = $twoFa->verifyYubikeyOTP($yubikey_id, $yubikey_otp);
$redirect = (string)$this->getRequest()->getUri();
if (null === $twoFa || !$user->authenticated || (!$twofa_valid && !$yubikey_valid) ) {
Admin::DEBUG && Admin::addDebugMessage('Admin login: 2FA check failed, log out!');
// Failed 2FA auth, logout and redirect to the current page.
$login->logout(['admin' => true]);
$this->grav['session']->setFlashCookieObject(Admin::TMP_COOKIE_NAME, ['message' => $this->translate('PLUGIN_ADMIN.2FA_FAILED'), 'status' => 'error']);
$this->form->reset();
return $this->createRedirectResponse($redirect);
}
// Successful 2FA, authorize user and redirect.
Grav::instance()['user']->authorized = true;
Admin::DEBUG && Admin::addDebugMessage('Admin login: 2FA check succeeded, authorize user and redirect');
$this->setMessage($this->translate('PLUGIN_ADMIN.LOGIN_LOGGED_IN'));
$this->form->reset();
return $this->createRedirectResponse($redirect);
}
/**
* Handle the reset password action.
*
* @param string|null $username
* @param string|null $token
* @return ResponseInterface
*/
public function taskReset(string $username = null, string $token = null): ResponseInterface
{
$this->page = $this->createPage('reset');
$this->form = $this->getForm('admin-login-reset');
try {
$this->checkNonce();
} catch (PageExpiredException $e) {
$this->setMessage($this->translate('PLUGIN_ADMIN.INVALID_SECURITY_TOKEN'), 'error');
return $this->createDisplayResponse();
}
$post = $this->getPost();
$data = $post['data'] ?? [];
$users = $this->getAccounts();
$username = $username ?? $data['username'] ?? null;
$token = $token ?? $data['token'] ?? null;
$user = $username ? $users->load($username) : null;
$password = $data['password'];
if ($user && $user->exists() && !empty($user->get('reset'))) {
[$good_token, $expire] = explode('::', $user->get('reset'));
if ($good_token === $token) {
if (time() > $expire) {
$this->setMessage($this->translate('PLUGIN_ADMIN.RESET_LINK_EXPIRED'), 'error');
$this->form->reset();
return $this->createRedirectResponse('/forgot');
}
// Set new password.
$login = $this->getLogin();
try {
$login->validateField('password1', $password);
} catch (\RuntimeException $e) {
$this->setMessage($this->translate($e->getMessage()), 'error');
return $this->createRedirectResponse("/reset/u/{$username}/{$token}");
}
$user->undef('hashed_password');
$user->undef('reset');
$user->update(['password' => $password]);
$user->save();
$this->form->reset();
$this->setMessage($this->translate('PLUGIN_ADMIN.RESET_PASSWORD_RESET'));
return $this->createRedirectResponse('/login');
}
Admin::DEBUG && Admin::addDebugMessage(sprintf('Failed to reset password: Token %s is not good', $token));
} else {
Admin::DEBUG && Admin::addDebugMessage(sprintf('Failed to reset password: User %s does not exist or has not requested reset', $username));
}
$this->setMessage($this->translate('PLUGIN_ADMIN.RESET_INVALID_LINK'), 'error');
$this->form->reset();
return $this->createRedirectResponse('/forgot');
}
/**
* Handle the email password recovery procedure.
*
* Sends email to the user.
*
* @return ResponseInterface
*/
public function taskForgot(): ResponseInterface
{
$this->page = $this->createPage('forgot');
$this->form = $this->getForm('admin-login-forgot');
try {
$this->checkNonce();
} catch (PageExpiredException $e) {
$this->setMessage($this->translate('PLUGIN_ADMIN.INVALID_SECURITY_TOKEN'), 'error');
return $this->createDisplayResponse();
}
$post = $this->getPost();
$data = $post['data'] ?? [];
$login = $this->getLogin();
$users = $this->getAccounts();
$email = $this->getEmail();
$current = (string)$this->getRequest()->getUri();
$search = isset($data['username']) ? strip_tags($data['username']) : '';
$user = !empty($search) ? $users->load($search) : null;
$username = $user->username ?? null;
$to = $user->email ?? null;
// Only send email to users which are enabled and have an email address.
if (null === $user || $user->state !== 'enabled' || !$to) {
Admin::DEBUG && Admin::addDebugMessage(sprintf('Failed sending email: %s <%s> was not found or is blocked', $search, $to ?? 'N/A'));
$this->form->reset();
$this->setMessage($this->translate('PLUGIN_ADMIN.FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL'));
return $this->createRedirectResponse($current);
}
$config = $this->getConfig();
// Check rate limit for the user.
$rateLimiter = $login->getRateLimiter('pw_resets');
$rateLimiter->registerRateLimitedAction($username);
if ($rateLimiter->isRateLimited($username)) {
Admin::DEBUG && Admin::addDebugMessage(sprintf('Failed sending email: user %s <%s> is rate limited', $search, $to));
$this->form->reset();
$interval = $config->get('plugins.login.max_pw_resets_interval', 2);
$this->setMessage($this->translate('PLUGIN_LOGIN.FORGOT_CANNOT_RESET_IT_IS_BLOCKED', $to, $interval), 'error');
return $this->createRedirectResponse($current);
}
$token = md5(uniqid(mt_rand(), true));
$expire = time() + 3600; // 1 hour
$user->set('reset', $token . '::' . $expire);
$user->save();
$from = $config->get('plugins.email.from');
if (empty($from)) {
Admin::DEBUG && Admin::addDebugMessage('Failed sending email: from address is not configured in email plugin');
$this->form->reset();
$this->setMessage($this->translate('PLUGIN_ADMIN.FORGOT_EMAIL_NOT_CONFIGURED'), 'error');
return $this->createRedirectResponse($current);
}
// Do not trust username from the request.
$fullname = $user->fullname ?: $username;
$author = $config->get('site.author.name', '');
$sitename = $config->get('site.title', 'Website');
$reset_link = $this->getAbsoluteAdminUrl("/reset/u/{$username}/{$token}");
// For testing only!
//Admin::DEBUG && Admin::addDebugMessage(sprintf('Reset link: %s', $reset_link));
$subject = $this->translate('PLUGIN_ADMIN.FORGOT_EMAIL_SUBJECT', $sitename);
$content = $this->translate('PLUGIN_ADMIN.FORGOT_EMAIL_BODY', $fullname, $reset_link, $author, $sitename);
$this->grav['twig']->init();
$body = $this->grav['twig']->processTemplate('email/base.html.twig', ['content' => $content]);
try {
$message = $email->message($subject, $body, 'text/html')->setFrom($from)->setTo($to);
$sent = $email->send($message);
if ($sent < 1) {
throw new \RuntimeException('Sending email failed');
}
$this->setMessage($this->translate('PLUGIN_ADMIN.FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL'));
} catch (\Exception $e) {
$rateLimiter->resetRateLimit($username);
/** @var Debugger $debugger */
$debugger = $this->grav['debugger'];
$debugger->addException($e);
$this->form->reset();
$this->setMessage($this->translate('PLUGIN_ADMIN.FORGOT_FAILED_TO_EMAIL'), 'error');
return $this->createRedirectResponse('/forgot');
}
$this->form->reset();
return $this->createRedirectResponse('/login');
}
/**
* @return ResponseInterface
*/
public function taskRegister(): ResponseInterface
{
$this->page = $this->createPage('register');
$this->form = $form = $this->getForm('admin-login-register');
try {
$this->checkNonce();
} catch (PageExpiredException $e) {
$this->setMessage($this->translate('PLUGIN_ADMIN.INVALID_SECURITY_TOKEN'), 'error');
return $this->createDisplayResponse();
}
// Note: Calls $this->doRegistration() to perform the user registration.
$form->handleRequest($this->getRequest());
$error = $form->getError();
$errors = $form->getErrors();
if ($error || $errors) {
foreach ($errors as $field => $list) {
foreach ((array)$list as $message) {
if ($message !== $error) {
$this->setMessage($message, 'error');
}
}
}
return $this->createDisplayResponse();
}
$this->setMessage($this->translate('PLUGIN_ADMIN.LOGIN_LOGGED_IN'));
return $this->createRedirectResponse('/');
}
/**
* @param UserInterface $user
* @return bool
*/
protected function is2FA(UserInterface $user): bool
{
return $user && $user->authenticated && !$user->authorized && $user->get('twofa_enabled');
}
/**
* @param string $name
* @return callable
*/
protected function getFormSubmitMethod(string $name): callable
{
switch ($name) {
case 'login':
case 'login-twofa':
case 'admin-login-forgot':
case 'admin-login-reset':
return static function(array $data, array $files) {};
case 'admin-login-register':
return function(array $data, array $files) {
$this->doRegistration($data, $files);
};
}
throw new \RuntimeException('Unknown form');
}
/**
* Called by registration form when calling handleRequest().
*
* @param array $data
* @param array $files
*/
private function doRegistration(array $data, array $files): void
{
if (Admin::doAnyUsersExist()) {
throw new \RuntimeException('A user account already exists, please create an admin account manually.', 400);
}
$login = $this->getLogin();
if (!$login) {
throw new \RuntimeException($this->grav['language']->translate('PLUGIN_LOGIN.PLUGIN_LOGIN_DISABLED', 500));
}
$data['title'] = $data['title'] ?? 'Administrator';
// Do not allow form to set the following fields (make super user):
$data['state'] = 'enabled';
$data['access'] = ['admin' => ['login' => true, 'super' => true], 'site' => ['login' => true]];
unset($data['groups']);
// Create user.
$user = $login->register($data, $files);
// Log in the new super admin user.
unset($this->grav['user']);
$this->grav['user'] = $user;
$this->grav['session']->user = $user;
$user->authenticated = true;
$user->authorized = $user->authorize('admin.login') ?? false;
}
/**
* @return Login
*/
private function getLogin(): Login
{
return $this->grav['login'];
}
/**
* @return Email
*/
private function getEmail(): Email
{
return $this->grav['Email'];
}
/**
* @return UserCollectionInterface
*/
private function getAccounts(): UserCollectionInterface
{
return $this->grav['accounts'];
}
}
+442
View File
@@ -0,0 +1,442 @@
<?php
/**
* @package Grav\Plugin\Admin
*
* @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved.
* @license MIT License; see LICENSE file for details.
*/
namespace Grav\Plugin\Admin;
use Grav\Common\Cache;
use Grav\Common\Grav;
use Grav\Common\GPM\GPM as GravGPM;
use Grav\Common\GPM\Licenses;
use Grav\Common\GPM\Installer;
use Grav\Common\GPM\Upgrader;
use Grav\Common\HTTP\Response;
use Grav\Common\Filesystem\Folder;
use Grav\Common\GPM\Common\Package;
/**
* Class Gpm
*
* @package Grav\Plugin\Admin
*/
class Gpm
{
// Probably should move this to Grav DI container?
/** @var GravGPM */
protected static $GPM;
public static function GPM()
{
if (!static::$GPM) {
static::$GPM = new GravGPM();
}
return static::$GPM;
}
/**
* Default options for the install
*
* @var array
*/
protected static $options = [
'destination' => GRAV_ROOT,
'overwrite' => true,
'ignore_symlinks' => true,
'skip_invalid' => true,
'install_deps' => true,
'theme' => false
];
/**
* @param Package[]|string[]|string $packages
* @param array $options
*
* @return string|bool
*/
public static function install($packages, array $options)
{
$options = array_merge(self::$options, $options);
if (!Installer::isGravInstance($options['destination']) || !Installer::isValidDestination($options['destination'],
[Installer::EXISTS, Installer::IS_LINK])
) {
return false;
}
$packages = is_array($packages) ? $packages : [$packages];
$count = count($packages);
$packages = array_filter(array_map(function ($p) {
return !is_string($p) ? $p instanceof Package ? $p : false : self::GPM()->findPackage($p);
}, $packages));
if (!$options['skip_invalid'] && $count !== count($packages)) {
return false;
}
$messages = '';
foreach ($packages as $package) {
if (isset($package->dependencies) && $options['install_deps']) {
$result = static::install($package->dependencies, $options);
if (!$result) {
return false;
}
}
// Check destination
Installer::isValidDestination($options['destination'] . DS . $package->install_path);
if (!$options['overwrite'] && Installer::lastErrorCode() === Installer::EXISTS) {
return false;
}
if (!$options['ignore_symlinks'] && Installer::lastErrorCode() === Installer::IS_LINK) {
return false;
}
$license = Licenses::get($package->slug);
$local = static::download($package, $license);
Installer::install($local, $options['destination'],
['install_path' => $package->install_path, 'theme' => $options['theme']]);
Folder::delete(dirname($local));
$errorCode = Installer::lastErrorCode();
if ($errorCode) {
$msg = Installer::lastErrorMsg();
throw new \RuntimeException($msg);
}
if (count($packages) === 1) {
$message = Installer::getMessage();
if ($message) {
return $message;
}
$messages .= $message;
}
}
Cache::clearCache();
return $messages ?: true;
}
/**
* @param Package[]|string[]|string $packages
* @param array $options
*
* @return string|bool
*/
public static function update($packages, array $options)
{
$options['overwrite'] = true;
return static::install($packages, $options);
}
/**
* @param Package[]|string[]|string $packages
* @param array $options
*
* @return string|bool
*/
public static function uninstall($packages, array $options)
{
$options = array_merge(self::$options, $options);
$packages = (array)$packages;
$count = count($packages);
$packages = array_filter(array_map(function ($p) {
if (is_string($p)) {
$p = strtolower($p);
$plugin = static::GPM()->getInstalledPlugin($p);
$p = $plugin ?: static::GPM()->getInstalledTheme($p);
}
return $p instanceof Package ? $p : false;
}, $packages));
if (!$options['skip_invalid'] && $count !== count($packages)) {
return false;
}
foreach ($packages as $package) {
$location = Grav::instance()['locator']->findResource($package->package_type . '://' . $package->slug);
// Check destination
Installer::isValidDestination($location);
if (!$options['ignore_symlinks'] && Installer::lastErrorCode() === Installer::IS_LINK) {
return false;
}
Installer::uninstall($location);
$errorCode = Installer::lastErrorCode();
if ($errorCode && $errorCode !== Installer::IS_LINK && $errorCode !== Installer::EXISTS) {
$msg = Installer::lastErrorMsg();
throw new \RuntimeException($msg);
}
if (count($packages) === 1) {
$message = Installer::getMessage();
if ($message) {
return $message;
}
}
}
Cache::clearCache();
return true;
}
/**
* Direct install a file
*
* @param string $package_file
*
* @return string|bool
*/
public static function directInstall($package_file)
{
if (!$package_file) {
return Admin::translate('PLUGIN_ADMIN.NO_PACKAGE_NAME');
}
$tmp_dir = Grav::instance()['locator']->findResource('tmp://', true, true);
$tmp_zip = $tmp_dir . '/Grav-' . uniqid('', false);
if (Response::isRemote($package_file)) {
$zip = GravGPM::downloadPackage($package_file, $tmp_zip);
} else {
$zip = GravGPM::copyPackage($package_file, $tmp_zip);
}
if (file_exists($zip)) {
$tmp_source = $tmp_dir . '/Grav-' . uniqid('', false);
$extracted = Installer::unZip($zip, $tmp_source);
if (!$extracted) {
Folder::delete($tmp_source);
Folder::delete($tmp_zip);
return Admin::translate('PLUGIN_ADMIN.PACKAGE_EXTRACTION_FAILED');
}
$type = GravGPM::getPackageType($extracted);
if (!$type) {
Folder::delete($tmp_source);
Folder::delete($tmp_zip);
return Admin::translate('PLUGIN_ADMIN.NOT_VALID_GRAV_PACKAGE');
}
if ($type === 'grav') {
Installer::isValidDestination(GRAV_ROOT . '/system');
if (Installer::IS_LINK === Installer::lastErrorCode()) {
Folder::delete($tmp_source);
Folder::delete($tmp_zip);
return Admin::translate('PLUGIN_ADMIN.CANNOT_OVERWRITE_SYMLINKS');
}
static::upgradeGrav($zip, $extracted);
} else {
$name = GravGPM::getPackageName($extracted);
if (!$name) {
Folder::delete($tmp_source);
Folder::delete($tmp_zip);
return Admin::translate('PLUGIN_ADMIN.NAME_COULD_NOT_BE_DETERMINED');
}
$install_path = GravGPM::getInstallPath($type, $name);
$is_update = file_exists($install_path);
Installer::isValidDestination(GRAV_ROOT . DS . $install_path);
if (Installer::lastErrorCode() === Installer::IS_LINK) {
Folder::delete($tmp_source);
Folder::delete($tmp_zip);
return Admin::translate('PLUGIN_ADMIN.CANNOT_OVERWRITE_SYMLINKS');
}
Installer::install($zip, GRAV_ROOT,
['install_path' => $install_path, 'theme' => $type === 'theme', 'is_update' => $is_update],
$extracted);
}
Folder::delete($tmp_source);
if (Installer::lastErrorCode()) {
return Installer::lastErrorMsg();
}
} else {
return Admin::translate('PLUGIN_ADMIN.ZIP_PACKAGE_NOT_FOUND');
}
Folder::delete($tmp_zip);
Cache::clearCache();
return true;
}
/**
* @param Package $package
*
* @return string
*/
private static function download(Package $package, $license = null)
{
$query = '';
if ($package->premium) {
$query = \json_encode(array_merge($package->premium, [
'slug' => $package->slug,
'license_key' => $license,
'sid' => md5(GRAV_ROOT)
]));
$query = '?d=' . base64_encode($query);
}
try {
$contents = Response::get($package->zipball_url . $query, []);
} catch (\Exception $e) {
throw new \RuntimeException($e->getMessage());
}
$tmp_dir = Admin::getTempDir() . '/Grav-' . uniqid('', false);
Folder::mkdir($tmp_dir);
$bad_chars = array_merge(array_map('chr', range(0, 31)), ['<', '>', ':', '"', '/', '\\', '|', '?', '*']);
$filename = $package->slug . str_replace($bad_chars, '', \Grav\Common\Utils::basename($package->zipball_url));
$filename = preg_replace('/[\\\\\/:"*?&<>|]+/m', '-', $filename);
file_put_contents($tmp_dir . DS . $filename . '.zip', $contents);
return $tmp_dir . DS . $filename . '.zip';
}
/**
* @param array $package
* @param string $tmp
*
* @return string
*/
private static function _downloadSelfupgrade(array $package, $tmp)
{
$output = Response::get($package['download'], []);
Folder::mkdir($tmp);
file_put_contents($tmp . DS . $package['name'], $output);
return $tmp . DS . $package['name'];
}
/**
* @return bool
*/
public static function selfupgrade()
{
$upgrader = new Upgrader();
if (!Installer::isGravInstance(GRAV_ROOT)) {
return false;
}
if (is_link(GRAV_ROOT . DS . 'index.php')) {
Installer::setError(Installer::IS_LINK);
return false;
}
if (method_exists($upgrader, 'meetsRequirements') &&
method_exists($upgrader, 'minPHPVersion') &&
!$upgrader->meetsRequirements()) {
$error = [];
$error[] = '<p>Grav has increased the minimum PHP requirement.<br />';
$error[] = 'You are currently running PHP <strong>' . phpversion() . '</strong>';
$error[] = ', but PHP <strong>' . $upgrader->minPHPVersion() . '</strong> is required.</p>';
$error[] = '<p><a href="https://getgrav.org/blog/changing-php-requirements-to-5.5" class="button button-small secondary">Additional information</a></p>';
Installer::setError(implode("\n", $error));
return false;
}
$update = $upgrader->getAssets()['grav-update'];
$tmp = Admin::getTempDir() . '/Grav-' . uniqid('', false);
if ($tmp) {
$file = self::_downloadSelfupgrade($update, $tmp);
$folder = Installer::unZip($file, $tmp . '/zip');
$keepFolder = false;
} else {
// If you make $tmp empty, you can install your local copy of Grav (for testing purposes only).
$file = 'grav.zip';
$folder = '~/phpstorm/grav-clones/grav';
//$folder = '/home/matias/phpstorm/rockettheme/grav-devtools/grav-clones/grav';
$keepFolder = true;
}
static::upgradeGrav($file, $folder, $keepFolder);
$errorCode = Installer::lastErrorCode();
if ($tmp) {
Folder::delete($tmp);
}
return !(is_string($errorCode) || ($errorCode & (Installer::ZIP_OPEN_ERROR | Installer::ZIP_EXTRACT_ERROR)));
}
private static function upgradeGrav($zip, $folder, $keepFolder = false)
{
static $ignores = [
'backup',
'cache',
'images',
'logs',
'tmp',
'user',
'.htaccess',
'robots.txt'
];
if (!is_dir($folder)) {
Installer::setError('Invalid source folder');
}
try {
$script = $folder . '/system/install.php';
/** Install $installer */
if ((file_exists($script) && $install = include $script) && is_callable($install)) {
$install($zip);
} else {
Installer::install(
$zip,
GRAV_ROOT,
['sophisticated' => true, 'overwrite' => true, 'ignore_symlinks' => true, 'ignores' => $ignores],
$folder,
$keepFolder
);
Cache::clearCache();
}
} catch (\Exception $e) {
Installer::setError($e->getMessage());
}
}
}
+310
View File
@@ -0,0 +1,310 @@
<?php
/**
* @package Grav\Plugin\Admin
*
* @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved.
* @license MIT License; see LICENSE file for details.
*/
namespace Grav\Plugin\Admin;
use Grav\Common\Config\Config;
use Grav\Common\Grav;
use Grav\Common\Page\Interfaces\PageInterface;
/**
* Class Popularity
* @package Grav\Plugin
*/
class Popularity
{
/** @var Config */
protected $config;
protected $data_path;
protected $daily_file;
protected $monthly_file;
protected $totals_file;
protected $visitors_file;
protected $daily_data;
protected $monthly_data;
protected $totals_data;
protected $visitors_data;
const DAILY_FORMAT = 'd-m-Y';
const MONTHLY_FORMAT = 'm-Y';
const DAILY_FILE = 'daily.json';
const MONTHLY_FILE = 'monthly.json';
const TOTALS_FILE = 'totals.json';
const VISITORS_FILE = 'visitors.json';
public function __construct()
{
$this->config = Grav::instance()['config'];
$this->data_path = Grav::instance()['locator']->findResource('log://popularity', true, true);
$this->daily_file = $this->data_path . '/' . self::DAILY_FILE;
$this->monthly_file = $this->data_path . '/' . self::MONTHLY_FILE;
$this->totals_file = $this->data_path . '/' . self::TOTALS_FILE;
$this->visitors_file = $this->data_path . '/' . self::VISITORS_FILE;
}
public function trackHit()
{
// Don't track bot or crawler requests
if (!Grav::instance()['browser']->isHuman()) {
return;
}
// Respect visitors "do not track" setting
if (!Grav::instance()['browser']->isTrackable()) {
return;
}
/** @var PageInterface $page */
$page = Grav::instance()['page'];
$relative_url = str_replace(Grav::instance()['base_url_relative'], '', $page->url());
// Don't track error pages or pages that have no route
if ($page->template() === 'error' || !$page->route()) {
return;
}
// Make sure no 'widcard-style' ignore matches this url
foreach ((array)$this->config->get('plugins.admin.popularity.ignore') as $ignore) {
if (fnmatch($ignore, $relative_url)) {
return;
}
}
// initial creation if it doesn't exist
if (!file_exists($this->data_path)) {
mkdir($this->data_path);
$this->flushPopularity();
}
// Update the data we want to track
$this->updateDaily();
$this->updateMonthly();
$this->updateTotals($page->route());
$this->updateVisitors(Grav::instance()['uri']->ip());
}
protected function updateDaily()
{
if (!$this->daily_data) {
$this->daily_data = $this->getData($this->daily_file);
}
$day_month_year = date(self::DAILY_FORMAT);
// get the daily access count
if (array_key_exists($day_month_year, $this->daily_data)) {
$this->daily_data[$day_month_year] = (int)$this->daily_data[$day_month_year] + 1;
} else {
$this->daily_data[$day_month_year] = 1;
}
// keep correct number as set by history
$count = (int)$this->config->get('plugins.admin.popularity.history.daily', 30);
$total = count($this->daily_data);
if ($total > $count) {
$this->daily_data = array_slice($this->daily_data, -$count, $count, true);
}
file_put_contents($this->daily_file, json_encode($this->daily_data));
}
/**
* @return array
*/
public function getDailyChartData()
{
if (!$this->daily_data) {
$this->daily_data = $this->getData($this->daily_file);
}
$limit = (int)$this->config->get('plugins.admin.popularity.dashboard.days_of_stats', 7);
$chart_data = array_slice($this->daily_data, -$limit, $limit);
$labels = [];
$data = [];
/** @var Admin $admin */
$admin = Grav::instance()['admin'];
foreach ($chart_data as $date => $count) {
$labels[] = $admin::translate([
'PLUGIN_ADMIN.' . strtoupper(date('D', strtotime($date)))]) .
'<br>' . date('M d', strtotime($date));
$data[] = $count;
}
return ['labels' => $labels, 'data' => $data];
}
/**
* @return int
*/
public function getDailyTotal()
{
if (!$this->daily_data) {
$this->daily_data = $this->getData($this->daily_file);
}
if (isset($this->daily_data[date(self::DAILY_FORMAT)])) {
return $this->daily_data[date(self::DAILY_FORMAT)];
}
return 0;
}
/**
* @return int
*/
public function getWeeklyTotal()
{
if (!$this->daily_data) {
$this->daily_data = $this->getData($this->daily_file);
}
$day = 0;
$total = 0;
foreach (array_reverse($this->daily_data) as $daily) {
$total += $daily;
$day++;
if ($day === 7) {
break;
}
}
return $total;
}
/**
* @return int
*/
public function getMonthlyTotal()
{
if (!$this->monthly_data) {
$this->monthly_data = $this->getData($this->monthly_file);
}
if (isset($this->monthly_data[date(self::MONTHLY_FORMAT)])) {
return $this->monthly_data[date(self::MONTHLY_FORMAT)];
}
return 0;
}
protected function updateMonthly()
{
if (!$this->monthly_data) {
$this->monthly_data = $this->getData($this->monthly_file);
}
$month_year = date(self::MONTHLY_FORMAT);
// get the monthly access count
if (array_key_exists($month_year, $this->monthly_data)) {
$this->monthly_data[$month_year] = (int)$this->monthly_data[$month_year] + 1;
} else {
$this->monthly_data[$month_year] = 1;
}
// keep correct number as set by history
$count = (int)$this->config->get('plugins.admin.popularity.history.monthly', 12);
$total = count($this->monthly_data);
$this->monthly_data = array_slice($this->monthly_data, $total - $count, $count);
file_put_contents($this->monthly_file, json_encode($this->monthly_data));
}
/**
* @return array
*/
protected function getMonthyChartData()
{
if (!$this->monthly_data) {
$this->monthly_data = $this->getData($this->monthly_file);
}
$labels = [];
$data = [];
foreach ($this->monthly_data as $date => $count) {
$labels[] = date('M', strtotime($date));
$data[] = $count;
}
return ['labels' => $labels, 'data' => $data];
}
/**
* @param string $url
*/
protected function updateTotals($url)
{
if (!$this->totals_data) {
$this->totals_data = $this->getData($this->totals_file);
}
// get the totals for this url
if (array_key_exists($url, $this->totals_data)) {
$this->totals_data[$url] = (int)$this->totals_data[$url] + 1;
} else {
$this->totals_data[$url] = 1;
}
file_put_contents($this->totals_file, json_encode($this->totals_data));
}
/**
* @param string $ip
*/
protected function updateVisitors($ip)
{
if (!$this->visitors_data) {
$this->visitors_data = $this->getData($this->visitors_file);
}
// update with current timestamp
$this->visitors_data[hash('sha1', $ip)] = time();
$visitors = $this->visitors_data;
arsort($visitors);
$count = (int)$this->config->get('plugins.admin.popularity.history.visitors', 20);
$this->visitors_data = array_slice($visitors, 0, $count, true);
file_put_contents($this->visitors_file, json_encode($this->visitors_data));
}
/**
* @param string $path
*
* @return array
*/
protected function getData($path)
{
if (file_exists($path)) {
return (array)json_decode(file_get_contents($path), true);
}
return [];
}
public function flushPopularity()
{
file_put_contents($this->daily_file, []);
file_put_contents($this->monthly_file, []);
file_put_contents($this->totals_file, []);
file_put_contents($this->visitors_file, []);
}
}
+79
View File
@@ -0,0 +1,79 @@
<?php
/**
* @package Grav\Plugin\Admin
*
* @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved.
* @license MIT License; see LICENSE file for details.
*/
namespace Grav\Plugin\Admin;
use Grav\Common\Grav;
use Grav\Common\Processors\ProcessorBase;
use Grav\Framework\Route\Route;
use Grav\Plugin\Admin\Routers\LoginRouter;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
class Router extends ProcessorBase
{
public $id = 'admin_router';
public $title = 'Admin Panel';
/** @var Admin */
protected $admin;
public function __construct(Grav $container, Admin $admin)
{
parent::__construct($container);
$this->admin = $admin;
}
/**
* Handle routing to the dashboard, group and build objects.
*
* @param ServerRequestInterface $request
* @param RequestHandlerInterface $handler
* @return ResponseInterface
*/
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler) : ResponseInterface
{
$this->startTimer();
$context = $request->getAttributes();
$query = $request->getQueryParams();
/** @var Route $route */
$route = $context['route'];
$normalized = mb_strtolower(trim($route->getRoute(), '/'));
$parts = explode('/', $normalized);
array_shift($parts); // Admin path
$routeStr = implode('/', $parts);
$view = array_shift($parts);
$path = implode('/', $parts);
$task = $this->container['task'] ?? $query['task'] ?? null;
$action = $this->container['action'] ?? $query['action'] ?? null;
$params = ['view' => $view, 'route' => $routeStr, 'path' => $path, 'parts' => $parts, 'task' => $task, 'action' => $action];
$request = $request->withAttribute('admin', $params);
// Run login controller if user isn't fully logged in or asks to logout.
$user = $this->admin->user;
if (!$user->authorized || !$user->authorize('admin.login')) {
$params = (new LoginRouter())->matchServerRequest($request);
$request = $request->withAttribute('admin', $params + $request->getAttribute('admin'));
}
$this->admin->request = $request;
$response = $handler->handle($request);
$this->stopTimer();
// Never allow admin pages to be rendered in <frame>, <iframe>, <embed> or <object> for improved security.
return $response->withHeader('X-Frame-Options', 'DENY');
}
}
@@ -0,0 +1,93 @@
<?php
/**
* @package Grav\Plugin\Admin
*
* @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved.
* @license MIT License; see LICENSE file for details.
*/
namespace Grav\Plugin\Admin\Routers;
use Grav\Plugin\Admin\Admin;
use Grav\Plugin\Admin\Controllers\Login\LoginController;
use Psr\Http\Message\ServerRequestInterface;
class LoginRouter
{
/** @var string[] */
private $taskTemplates = [
'logout' => 'login',
'twofa' => 'login',
'forgot' => 'forgot',
'reset' => 'reset'
];
/**
* @param ServerRequestInterface $request
* @return array
*/
public function matchServerRequest(ServerRequestInterface $request): array
{
$adminInfo = $request->getAttribute('admin');
$task = $adminInfo['task'];
$class = LoginController::class;
// Special controller for the new sites.
if (!Admin::doAnyUsersExist()) {
$method = $task === 'register' ? 'taskRegister' : 'displayRegister';
return [
'controller' => [
'class' => $class,
'method' => $method,
'params' => []
],
'template' => 'register',
];
}
$httpMethod = $request->getMethod();
$template = $this->taskTemplates[$task] ?? $adminInfo['view'];
$params = [];
switch ($template) {
case 'forgot':
break;
case 'reset':
$path = $adminInfo['path'];
if (str_starts_with($path, 'u/')) {
// Path is 'u/username/token'
$parts = explode('/', $path, 4);
$user = $parts[1] ?? null;
$token = $parts[2] ?? null;
} else {
// Old path used to be 'task:reset/user:username/token:token'
if ($httpMethod === 'GET' || $httpMethod === 'HEAD') {
$task = null;
}
$route = $request->getAttribute('route');
$user = $route->getGravParam('user');
$token = $route->getGravParam('token');
}
$params = [$user, $token];
break;
default:
$template = 'login';
}
$method = ($task ? 'task' : 'display') . ucfirst($task ?? $template);
if (!method_exists($class, $method)) {
$method = 'displayUnauthorized';
}
return [
'controller' => [
'class' => $class,
'method' => $method,
'params' => $params
],
'template' => $template,
];
}
}
@@ -0,0 +1,70 @@
<?php
/**
* @package Grav\Plugin\Admin
*
* @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved.
* @license MIT License; see LICENSE file for details.
*/
namespace Grav\Plugin\Admin;
use ScssPhp\ScssPhp\Compiler;
use ScssPhp\ScssPhp\ValueConverter;
class ScssCompiler
{
protected $compiler;
public function compiler()
{
if ($this->compiler === null) {
$this->reset();
}
return $this->compiler;
}
public function reset()
{
$this->compiler = new Compiler();
return $this;
}
public function setVariables(array $variables)
{
// $parsed = ValueConverter::fromPhp($variables);
$parsed = [];
foreach ($variables as $key => $value) {
$parsed[$key] = ValueConverter::parseValue($value);
}
$this->compiler()->addVariables($parsed);
return $this;
}
public function setImportPaths(array $paths)
{
$this->compiler()->setImportPaths($paths);
return $this;
}
public function compile(string $input_file, string $output_file)
{
$input = file_get_contents($input_file);
$output = $this->compiler()->compile($input);
file_put_contents($output_file, $output);
return $this;
}
public function compileAll(array $input_paths, string $output_file)
{
$input = '';
foreach ($input_paths as $input_file) {
$input .= trim(file_get_contents($input_file)) . "\n\n";
}
$output = $this->compiler()->compileString($input)->getCss();
file_put_contents($output_file, $output);
return $this;
}
}
+59
View File
@@ -0,0 +1,59 @@
<?php
/**
* @package Grav\Plugin\Admin
*
* @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved.
* @license MIT License; see LICENSE file for details.
*/
namespace Grav\Plugin\Admin;
class ScssList
{
/** @var string[] */
protected $list = [];
/**
* ScssList constructor.
* @param string|null $item
*/
public function __construct($item = null)
{
if ($item) {
$this->add($item);
}
}
/**
* @return array
*/
public function all(): array
{
return $this->list;
}
/**
* @param string $item
* @return void
*/
public function add($item): void
{
if ($item) {
$this->list[] = $item;
}
}
/**
* @param string $item
* @return void
*/
public function remove($item): void
{
$pos = array_search($item, $this->list, true);
if ($pos) {
unset($this->list[$pos]);
}
}
}
+29
View File
@@ -0,0 +1,29 @@
<?php
/**
* @package Grav\Plugin\Admin
*
* @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved.
* @license MIT License; see LICENSE file for details.
*/
namespace Grav\Plugin\Admin;
/**
* Admin theme object
*
* @author RocketTheme
* @license MIT
*/
class Themes extends \Grav\Common\Themes
{
public function init()
{
/** @var Themes $themes */
$themes = $this->grav['themes'];
$themes->configure();
$themes->initTheme();
$this->grav->fireEvent('onAdminThemeInitialized');
}
}
@@ -0,0 +1,138 @@
<?php
/**
* @package Grav\Plugin\Admin
*
* @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved.
* @license MIT License; see LICENSE file for details.
*/
namespace Grav\Plugin\Admin\Twig;
use Grav\Common\Data\Data;
use Grav\Common\Grav;
use Grav\Common\Page\Interfaces\PageInterface;
use Grav\Common\Utils;
use Grav\Common\Yaml;
use Grav\Common\Language\Language;
use Twig\Extension\AbstractExtension;
use Twig\TwigFilter;
use Twig\TwigFunction;
use Grav\Plugin\Admin\Admin;
class AdminTwigExtension extends AbstractExtension
{
/** @var Grav */
protected $grav;
/** @var Language $lang */
protected $lang;
public function __construct()
{
$this->grav = Grav::instance();
$this->lang = $this->grav['user']->language;
}
public function getFilters(): array
{
return [
new TwigFilter('tu', [$this, 'tuFilter']),
new TwigFilter('toYaml', [$this, 'toYamlFilter']),
new TwigFilter('fromYaml', [$this, 'fromYamlFilter']),
new TwigFilter('adminNicetime', [$this, 'adminNicetimeFilter']),
new TwigFilter('nested', [$this, 'nestedFilter']),
new TwigFilter('flatten', [$this, 'flattenFilter']),
];
}
public function getFunctions(): array
{
return [
new TwigFunction('admin_route', [$this, 'adminRouteFunc']),
new TwigFunction('getPageUrl', [$this, 'getPageUrl']),
new TwigFunction('clone', [$this, 'cloneFunc']),
new TwigFunction('data', [$this, 'dataFunc']),
];
}
public function nestedFilter($current, $name)
{
$path = explode('.', trim($name, '.'));
foreach ($path as $field) {
if (is_object($current) && isset($current->{$field})) {
$current = $current->{$field};
} elseif (is_array($current) && isset($current[$field])) {
$current = $current[$field];
} else {
return null;
}
}
return $current;
}
public function flattenFilter($array)
{
return Utils::arrayFlattenDotNotation($array);
}
public function cloneFunc($obj)
{
return clone $obj;
}
public function adminRouteFunc(string $route = '', string $languageCode = null)
{
/** @var Admin $admin */
$admin = Grav::instance()['admin'];
return $admin->getAdminRoute($route, $languageCode)->toString(true);
}
public function getPageUrl(PageInterface $page)
{
/** @var Admin $admin */
$admin = Grav::instance()['admin'];
return $admin->getAdminRoute('/pages' . $page->rawRoute(), $page->language())->toString(true);
}
public static function tuFilter()
{
$args = func_get_args();
$numargs = count($args);
$lang = null;
if (($numargs === 3 && is_array($args[1])) || ($numargs === 2 && !is_array($args[1]))) {
$lang = array_pop($args);
} elseif ($numargs === 2 && is_array($args[1])) {
$subs = array_pop($args);
$args = array_merge($args, $subs);
}
return Grav::instance()['admin']->translate($args, $lang);
}
public function toYamlFilter($value, $inline = null)
{
return Yaml::dump($value, $inline);
}
public function fromYamlFilter($value)
{
return Yaml::parse($value);
}
public function adminNicetimeFilter($date, $long_strings = true)
{
return Grav::instance()['admin']->adminNiceTime($date, $long_strings);
}
public function dataFunc(array $data, $blueprints = null)
{
return new Data($data, $blueprints);
}
}
+61
View File
@@ -0,0 +1,61 @@
<?php
/**
* @package Grav\Plugin\Admin
*
* @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved.
* @license MIT License; see LICENSE file for details.
*/
namespace Grav\Plugin\Admin;
use Grav\Common\Grav;
use Grav\Common\User\Interfaces\UserCollectionInterface;
use Grav\Common\User\Interfaces\UserInterface;
/**
* Admin utils class
*
* @license MIT
*/
class Utils
{
/**
* Matches an email to a user
*
* @param string $email
*
* @return UserInterface
*/
public static function findUserByEmail(string $email)
{
$grav = Grav::instance();
/** @var UserCollectionInterface $users */
$users = $grav['accounts'];
return $users->find($email, ['email']);
}
/**
* Generates a slug of the given string
*
* @param string $str
* @return string
*/
public static function slug(string $str)
{
if (function_exists('transliterator_transliterate')) {
$str = transliterator_transliterate('Any-Latin; NFD; [:Nonspacing Mark:] Remove; NFC; [:Punctuation:] Remove;', $str);
} else {
$str = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $str);
}
$str = strtolower($str);
$str = preg_replace('/[-\s]+/', '-', $str);
$str = preg_replace('/[^a-z0-9-]/i', '', $str);
$str = trim($str, '-');
return $str;
}
}
+100
View File
@@ -0,0 +1,100 @@
<?php
namespace Grav\Plugin\Admin;
/**
* @package Grav\Plugin\Admin
*
* @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved.
* @license MIT License; see LICENSE file for details.
*/
use Grav\Common\Filesystem\Folder;
use Grav\Common\Grav;
use Grav\Framework\File\File;
use RocketTheme\Toolbox\Event\Event;
use RocketTheme\Toolbox\ResourceLocator\UniformResourceLocator;
use Symfony\Component\Yaml\Yaml;
class WhiteLabel
{
protected $grav;
protected $scss;
public function __construct()
{
$this->grav = Grav::instance();
$this->scss = new ScssCompiler();
}
public function compilePresetScss($config, $options = [
'input' => 'plugin://admin/themes/grav/scss/preset.scss',
'output' => 'asset://admin-preset.css'
])
{
if (is_array($config)) {
$color_scheme = $config['color_scheme'];
} else {
$color_scheme = $config->get('whitelabel.color_scheme');
}
if ($color_scheme) {
/** @var UniformResourceLocator $locator */
$locator = $this->grav['locator'];
// Use ScssList object to make it easier ot handle in event
$scss_list = new ScssList($locator->findResource($options['input']));
$output_css = $locator->findResource(($options['output']), true, true);
Folder::create(dirname($output_css));
Grav::instance()->fireEvent('onAdminCompilePresetSCSS', new Event(['scss' => $scss_list]));
// Convert bak to regular array now we have run the event
$input_scss = $scss_list->all();
$imports = [$locator->findResource('plugin://admin/themes/grav/scss')];
foreach ($input_scss as $scss) {
$input_path = dirname($scss);
if (!in_array($input_path, $imports)) {
$imports[] = $input_path;
}
}
try {
$compiler = $this->scss->reset();
$compiler->setVariables($color_scheme['colors'] + $color_scheme['accents']);
$compiler->setImportPaths($imports);
$compiler->compileAll($input_scss, $output_css);
} catch (\Exception $e) {
return [false, $e->getMessage()];
}
return [true, 'Recompiled successfully'];
}
return [false, ' Could not be recompiled, missing color scheme...'];
}
public function exportPresetScsss($config, $location = 'asset://admin-theme-export.yaml')
{
if (isset($config['color_scheme'])) {
$color_scheme = $config['color_scheme'];
$body = Yaml::dump($color_scheme);
$file = new File($location);
$file->save($body);
// todo: handle errors/exceptions?
return [true, 'File created successfully'];
} else {
return [false, ' Could not export, missing color scheme...'];
}
}
}
+18
View File
@@ -0,0 +1,18 @@
actor: Tester
paths:
tests: tests
log: tests/_output
data: tests/_data
support: tests/_support
envs: tests/_envs
settings:
bootstrap: _bootstrap.php
colors: true
memory_limit: 1024M
extensions:
enabled:
- Codeception\Extension\RunFailed
# - Codeception\Extension\Recorder
modules:
config:
+64
View File
@@ -0,0 +1,64 @@
{
"name": "getgrav/grav-plugin-admin",
"type": "grav-plugin",
"description": "Admin plugin for Grav CMS",
"keywords": ["admin", "plugin", "manager", "panel"],
"homepage": "https://github.com/getgrav/grav-plugin-admin",
"license": "MIT",
"authors": [
{
"name": "Team Grav",
"email": "devs@getgrav.org",
"homepage": "https://getgrav.org",
"role": "Developer"
}
],
"support": {
"issues": "https://github.com/getgrav/grav-plugin-admin/issues",
"irc": "https://chat.getgrav.org",
"forum": "https://discourse.getgrav.org",
"docs": "https://github.com/getgrav/grav-plugin-admin/blob/master/README.md"
},
"require": {
"php": "^7.3.6 || ^8.0",
"ext-json": "*",
"scssphp/scssphp": "^1.11",
"laminas/laminas-zendframework-bridge": "^1.4",
"p3k/picofeed": "@stable"
},
"require-dev": {
"codeception/codeception": "^2.4",
"fzaninotto/faker": "^1.8",
"symfony/yaml": "~4.4",
"symfony/console": "~4.4",
"symfony/finder": "~4.4",
"symfony/event-dispatcher": "~4.4"
},
"replace": {
"symfony/polyfill-php72": "*",
"symfony/polyfill-php73": "*"
},
"autoload": {
"psr-4": {
"Grav\\Plugin\\Admin\\": "classes/plugin"
},
"classmap": [
"admin.php"
]
},
"config": {
"platform": {
"php": "7.3.6"
}
},
"scripts": {
"test": "vendor/bin/codecept run unit",
"test-windows": "vendor\\bin\\codecept run unit"
},
"repositories": [
{
"type": "vcs",
"url": "https://github.com/rhukster/picoFeed"
}
]
}
+3945
View File
File diff suppressed because it is too large Load Diff
+15
View File
@@ -0,0 +1,15 @@
{
"project":"grav-plugin-admin",
"platforms":{
"grav":{
"nodes":{
"plugin":[
{
"source":"/",
"destination":"/user/plugins/admin"
}
]
}
}
}
}
+307
View File
@@ -0,0 +1,307 @@
---
PLUGIN_ADMIN:
ADMIN_BETA_MSG: "هذا إصدار بيتا! استخدم هذا في الإنتاج على مسؤوليتك الخاصة..."
ADMIN_REPORT_ISSUE: "وجدت مشكلة؟ الرجاء الإبلاغ عن GitHub."
EMAIL_FOOTER: "<a href=\"https://getgrav.org\">Powered by Grav</a> - The Modern Flat File CMS"
LOGIN_BTN: "تسجل الدخول"
LOGIN_BTN_FORGOT: "نسيت"
LOGIN_BTN_RESET: "إعادة تعيين كلمة المرور"
LOGIN_BTN_SEND_INSTRUCTIONS: "إرسال إرشادات إعادة تعيين"
LOGIN_BTN_CLEAR: "مسح النموذج"
LOGIN_BTN_CREATE_USER: "أنشاء مستخدم جديد"
LOGIN_LOGGED_IN: "لقد تم تسجيل بنجاح"
LOGIN_FAILED: "فشل تسجيل الخول"
LOGGED_OUT: "لقد قمت بتسجيل الخروج"
RESET_NEW_PASSWORD: "إدخال كلمة سر جديدة رجاءً &hellip;"
RESET_LINK_EXPIRED: "انتهت مدة صلاحية إعادة الارتباط، الرجاء المحاولة مرة أخرى"
RESET_PASSWORD_RESET: "لقد تم إعادة تعيين كلمة المرور"
RESET_INVALID_LINK: "اللينك خاطئ ، الرجاء المحاولة مرة أخرى"
FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "تم إرسال إرشادات إعادة تعيين كلمة المرور الخاصة بك عبر البريد الإلكتروني إلى %s"
FORGOT_FAILED_TO_EMAIL: "فشل في تعليمات البريد الإلكتروني، الرجاء المحاولة مرة أخرى لاحقاً"
FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL: "لا يمكن إعادة تعيين كلمة المرور ل %s، لم يتم تعيين عنوان البريد الإلكتروني"
FORGOT_USERNAME_DOES_NOT_EXIST: "لا يوجد المستخدم مع اسم المستخدم <b>%s</b>"
FORGOT_EMAIL_NOT_CONFIGURED: "لا يمكن إعادة تعيين كلمة المرور. لم يتم تكوين هذا الموقع لإرسال رسائل البريد الإلكتروني"
FORGOT_EMAIL_SUBJECT: "طلب إعادة تعيين كلمة المرور %s"
FORGOT_EMAIL_BODY: "<h1>\"إعادة تعيين كلمة المرور\"</h1><p>عزيزي %1$s،</p><p>طلبا قدم في <b>%4$s</b> لإعادة تعيين كلمة المرور الخاصة بك.</p><p><br /><a href=\"%2$s\" class=\"btn-primary\">انقر فوق هذا الخيار لإعادة تعيين الخاص بك كلمة مرور</a><br /><br /></p><p>بدلاً من ذلك، نسخ عنوان URL التالي في شريط العناوين في المستعرض الخاص بك:</p> <p>%2$s</p><p><br />أطيب التحيات،<br /><br />%3$s</p>"
MANAGE_PAGES: "إدارة الصفحات"
PAGES: "الصفحات"
PLUGINS: "الملحقات"
PLUGIN: "البرنامج الإضافي"
THEMES: "المواضيع"
LOGOUT: "تسجيل الخروج"
BACK: "الرجوع"
NEXT: "التالي"
PREVIOUS: "السابق"
ADD_PAGE: "إضافة صفحة"
MOVE: "انقل"
DELETE: "حذف"
UNSET: "تراجع عن التعيين"
VIEW: "عرض"
SAVE: "حفظ"
NORMAL: "عادي"
EXPERT: "خبير"
EXPAND_ALL: "عرض الكل"
COLLAPSE_ALL: "طي الكل"
ERROR: "خطأ"
CLOSE: "أغلق"
CANCEL: "إلغاء"
CONTINUE: "المتابعة"
MODAL_DELETE_PAGE_CONFIRMATION_REQUIRED_TITLE: "التأكيد مطلوب"
MODAL_CHANGED_DETECTED_TITLE: "تم الكشف عن التغييرات"
MODAL_CHANGED_DETECTED_DESC: "وقد تغييرات غير محفوظة. هل أنت متأكد من أنك تريد ترك دون الحفظ؟"
MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_TITLE: "التأكيد مطلوب"
MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_DESC: "هل أنت متأكد من حذف هذا الملف؟ لا يمكن التراجع عن هذا الإجراء."
ADD_FILTERS: "إضافة عامل تصفية"
SEARCH_PAGES: "صفحات البحث"
VERSION: "النسخة"
WAS_MADE_WITH: "تم عمله مع"
BY: "بواسطة"
UPDATE_THEME: "تحديث الموضوع"
UPDATE_PLUGIN: "تحديث البرنامج الإضافي"
OF_THIS_THEME_IS_NOW_AVAILABLE: "من هذه السمة الآن متوفرة"
OF_THIS_PLUGIN_IS_NOW_AVAILABLE: "من هذه الإضافة متوفرة الآن"
AUTHOR: "المؤلّف"
HOMEPAGE: "الصفحة الرئيسية"
DEMO: "عرض تجريبي"
BUG_TRACKER: "متتبع الأخطاء"
KEYWORDS: "الكلمات الرئيسية"
LICENSE: "الرخصة"
DESCRIPTION: "الوصف"
README: "الملف التمهيدي"
REMOVE_THEME: "إزالة الموضوع"
INSTALL_THEME: "تثبيت الموضوع"
THEME: "الموضوع"
BACK_TO_THEMES: "العودة إلى المواضيع"
BACK_TO_PLUGINS: "العودة إلى البرامج الإضافية"
CHECK_FOR_UPDATES: "التحقق من وجود تحديثات"
ADD: "أَضِف"
CLEAR_CACHE: "مسح ذاكرة التخزين المؤقتة"
CLEAR_CACHE_ALL_CACHE: "كافة المحفوظات"
CLEAR_CACHE_ASSETS_ONLY: "الاصول فقط"
CLEAR_CACHE_IMAGES_ONLY: "الصور فقط"
CLEAR_CACHE_CACHE_ONLY: "المحفوظات فقط"
CLEAR_CACHE_TMP_ONLY: "المؤقتة فقط"
UPDATES_AVAILABLE: "تحديثات متوفّرة"
DAYS: "أيام"
UPDATE: "تحديث"
BACKUP: "نسخة احتياطية"
BACKUPS: "النسخ الاحتياطية"
BACKUP_NOW: "قم بحفض نسخة احتياطية"
BACKUPS_STATS: "قم بحفض نسخة احتياطية لاحصائيات"
BACKUPS_HISTORY: "قم بحفض نسخة احتياطية للسجل"
BACKUPS_PROFILES: "قم بحفض نسخة احتياطي للحسابات"
BACKUPS_COUNT: "عدد النسخ الاحتياطية"
BACKUPS_PROFILES_COUNT: "عدد الحسابات"
BACKUPS_TOTAL_SIZE: "المساحة المستعملة"
BACKUPS_NEWEST: "النسخ الاحتياطية الحديثة"
BACKUPS_OLDEST: "النسخ الاحتياطية القديمة"
BACKUPS_PURGE: "تطهير"
BACKUPS_NOT_GENERATED: "لم يتم إنشاء نسخ احتياطية بعد..."
BACKUPS_PURGE_NUMBER: "استخدام %s من %s من فتحات النسخ الاحتياطي"
BACKUPS_PURGE_TIME: "%s ايام من النسخ الاحتياطية بقية"
BACKUPS_PURGE_SPACE: "استعمال %s من %s"
BACKUP_DELETED: "تم حذف النسخة الاحتياطية بنجاح"
BACKUP_NOT_FOUND: "لم يتم العثور على نسخة احتياطية"
BACKUP_DATE: "تاريخ النسخ الاحتياطي"
STATISTICS: "إحصائيات"
TODAY: "اليوم"
WEEK: "اسبوع"
MONTH: "شهر"
LATEST_PAGE_UPDATES: "آخر التحديثات"
MAINTENANCE: "الصيانه"
UPDATED: "تم تحديثه"
MON: "الإثنين"
TUE: "الثلاثاء"
WED: "الإربعاء"
THU: "الخميس"
FRI: "الجمعة"
SAT: "السبت"
SUN: "الأحد"
COPY: "نسخ"
EDIT: "تحرير"
CREATE: "انشاء"
GRAV_ADMIN: "مدير جريف"
GRAV_OFFICIAL_PLUGIN: "اضاف رسمية ل جريف"
GRAV_OFFICIAL_THEME: "سمة جريف رسمية"
PLUGIN_SYMBOLICALLY_LINKED: "هذه الاضافه مرتبطة بمرجع. لن يام اكتشاف التحديثات."
THEME_SYMBOLICALLY_LINKED: "هذه السمة مرتبطة بمرجع. لم يتم اكتشاف التحديثات"
REMOVE_PLUGIN: "حذف الإضافة"
INSTALL_PLUGIN: "تثبيت الإضافة"
AVAILABLE: "متوفر"
INSTALLED: "مثبت"
INSTALL: "تثبيت"
ACTIVE_THEME: "سمة نشطة"
SWITCHING_TO: "التبديل إلى"
SWITCHING_TO_DESCRIPTION: "بالتبديل إلى سمة مختلفة, لايوجد أي ضمانات بأن صفحات الواجهة مدعومة, من المحتمل أن تحدث أخطاء عند محاولة تحميل الصفحات المذكورة."
SWITCHING_TO_CONFIRMATION: "هل تريد التبديل الى السمة والمتابعة"
CREATE_NEW_USER: "إنشاء مستخدم جديد"
REMOVE_USER: "حذف المستخدم"
ACCESS_DENIED: "الدخول ممنوع"
ACCOUNT_NOT_ADMIN: "لا يملك حسابك أي صلاحيات للإدارة"
PHP_INFO: "معلومات بي إش بي"
INSTALLER: "المثبت"
AVAILABLE_THEMES: "سمات متوفرة"
AVAILABLE_PLUGINS: "إضافات متوفرة"
INSTALLED_THEMES: "السمات المثبتة"
INSTALLED_PLUGINS: "الإضافات المثبتة"
BROWSE_ERROR_LOGS: "سجل أخطاء التصفح"
SITE: "موقع"
INFO: "معلومات"
SYSTEM: "النظام"
USER: "المستخدم"
ADD_ACCOUNT: "إضافة حساب"
SWITCH_LANGUAGE: "تبديل اللغة"
SUCCESSFULLY_ENABLED_PLUGIN: "تم تفعيل الإضافة بنجاح"
SUCCESSFULLY_DISABLED_PLUGIN: "تم إيقاف الإضافة بنجاح"
SUCCESSFULLY_CHANGED_THEME: "تم تبديل السمة الإفتراضية بنجاح"
INSTALLATION_FAILED: "فشل التثبيت"
INSTALLATION_SUCCESSFUL: "تم التثبيت بنجاح"
UNINSTALL_FAILED: "فشل الغاء التثبيت"
UNINSTALL_SUCCESSFUL: "تم إلغاء التثبيت بنجاح"
SUCCESSFULLY_SAVED: "حفظ بنجاح"
SUCCESSFULLY_COPIED: "نسخ بنجاح"
REORDERING_WAS_SUCCESSFUL: "إعادة ترتيب تم بنجاح"
SUCCESSFULLY_DELETED: "تم الحذف بنجاح"
SUCCESSFULLY_SWITCHED_LANGUAGE: "تم تغيير اللغة بنجاح"
INSUFFICIENT_PERMISSIONS_FOR_TASK: "لديك أذونات غير كافية للقيام بالمهمة"
CACHE_CLEARED: "تم مسح الذاكرة المؤقتة"
METHOD: "الأسلوب"
ERROR_CLEARING_CACHE: "خطأ مسح ذاكرة التخزين المؤقت"
AN_ERROR_OCCURRED: "حدث خطأ ما"
YOUR_BACKUP_IS_READY_FOR_DOWNLOAD: "النسخة الاحتياطية جاهزة للتحميل"
DOWNLOAD_BACKUP: "تنزيل النسخة الاحتياطية"
PAGES_FILTERED: "الصفحات التي تمت تصفيتها"
NO_PAGE_FOUND: "لم يتم العثور على أي صفحة"
INVALID_PARAMETERS: "متغيرات غير صالحة"
NO_FILES_SENT: "لا توجد ملفات أرسلت حتى الآن"
EXCEEDED_FILESIZE_LIMIT: "تجاوز الحد الأقصى لحجم ملف التكوين بي إتش بي"
UNKNOWN_ERRORS: "خطأ غير معروف"
EXCEEDED_GRAV_FILESIZE_LIMIT: "تجاوز الحد الأقصى لحجم ملف التكوين بي إتش بي"
UNSUPPORTED_FILE_TYPE: "نوع ملف غير معتمد"
FAILED_TO_MOVE_UPLOADED_FILE: "فشل في تحميل الملف"
FILE_UPLOADED_SUCCESSFULLY: "تم رفع الملف بنجاح"
FILE_DELETED: "تم حذف الملف"
FILE_COULD_NOT_BE_DELETED: "لا يمكن حذف الملف"
FILE_NOT_FOUND: "لم يتم العثور على الملف"
NO_FILE_FOUND: "لا يوجد ملف"
GRAV_WAS_SUCCESSFULLY_UPDATED_TO: "تم تحديث النظام بنجاح الى"
GRAV_UPDATE_FAILED: "فشل تحديث نظام جراف"
EVERYTHING_UPDATED: "تم تحديث كل شيء"
UPDATES_FAILED: "فشل التحديث"
AVATAR_BY: "الصورة الرمزية التي"
AVATAR_UPLOAD_OWN: "أو قم بتحميل الخاصة بك..."
LAST_BACKUP: "آخر نسخ احتياطي"
FULL_NAME: "الإسم الكامل"
USERNAME: "إسم المستخدم"
EMAIL: "البريد الإلكتروني"
USERNAME_EMAIL: "إسم المستخدم أو البريد الإلكتروني"
PASSWORD: "كلمة السر"
PASSWORD_CONFIRM: "تأكيد كلمة السر"
TITLE: "العنوان"
LANGUAGE: "اللّغة"
ACCOUNT: "الحساب"
EMAIL_VALIDATION_MESSAGE: "يجب أن يكون البريد الإلكتروني صحيحاً"
PASSWORD_VALIDATION_MESSAGE: "يجب أن تحتوي كلمة المرور على الأقل على رقم وعلى حرف كبير وعلى حرف صغير، و أن تكون مكونة على الأقل من 8 أحرف أو أكثر"
LANGUAGE_HELP: "تعيين اللغة المفضلة"
MEDIA: "وسائط"
DEFAULTS: "الإعدادات الافتراضية"
SITE_TITLE: "عنوان الموقع"
SITE_TITLE_PLACEHOLDER: "عنوان الموقع العريض"
SITE_TITLE_HELP: "العنوان الإفتراضي لموقعك, غالبا يستخدم في السمات"
SITE_DEFAULT_LANG: "اللغة الإفتراضية"
SITE_DEFAULT_LANG_PLACEHOLDER: "اللغة الإفتراضية المستخدمة في السمات وسم <HTML>"
SITE_DEFAULT_LANG_HELP: "اللغة الإفتراضية المستخدمة في السمات وسم <HTML>"
DEFAULT_AUTHOR: "المؤلف الافتراضي"
DEFAULT_AUTHOR_HELP: "إسم المؤلف الإفتراضي, يستخدم عادة في السمات او محتوى الصفحة"
DEFAULT_EMAIL: "البريد الإلكتروني الإفتراضي"
DEFAULT_EMAIL_HELP: "البريد الإلكتروني للإشارة في المواضيع أو صفحات"
TAXONOMY_TYPES: "أنواع التصنيف"
TAXONOMY_TYPES_HELP: "يجب أن يتم تعريف أنواع التصنيف هنا إذا كنت ترغب في استخدامها في صفحات"
PAGE_SUMMARY: "ملخص الصفحة"
ENABLED: "فعال"
ENABLED_HELP: "تمكين صفحة الموجز (الملخص ترجع نفس محتوى الصفحة)"
'YES': "نعم"
'NO': "لا"
SUMMARY_SIZE: "حجم الملخص"
SUMMARY_SIZE_HELP: "مقدار أحرف صفحة لاستخدامها كمحتوى موجز"
FORMAT: "الشكل"
FORMAT_HELP: "اختصار = الاستخدام الأولى لوقوع محدد أو الحجم؛ = فترة طويلة سيتم تجاهل موجز محدد"
SHORT: "قصير"
LONG: "طويل"
DELIMITER: "الفاصل"
DELIMITER_HELP: "موجز محدد (الافتراضي '= = =')"
METADATA: "البيانات الوصفية"
METADATA_HELP: "قيم بيانات التعريف الافتراضية التي سيتم عرضها في كل صفحة ما لم يتم تجاوز الصفحة"
NAME: "الإسم"
CONTENT: "المحتوى"
SIZE: "حجم"
ACTION: "اجراء"
REDIRECTS_AND_ROUTES: "اعادة التوجيه و المسارات"
CUSTOM_REDIRECTS: "تخصيص اعادة التوجيه"
CUSTOM_REDIRECTS_HELP: "مسارات لإعادة التوجيه إلى صفحات أخرى. الاستبدال الاساسي ل Regex صحيح"
CUSTOM_REDIRECTS_PLACEHOLDER_KEY: "/ الخاص / الاسم المستعار"
CUSTOM_REDIRECTS_PLACEHOLDER_VALUE: "/ الخاص /إعادة التوجيه"
CUSTOM_ROUTES: "تخصيص المسارات"
CUSTOM_ROUTES_HELP: "مسارات لاسماء المستعارة إلى صفحات أخرى. الاستبدال الاساسي ل Regex صحيح"
CUSTOM_ROUTES_PLACEHOLDER_KEY: "/ الخاص / الاسم المستعار"
CUSTOM_ROUTES_PLACEHOLDER_VALUE: "/ الخاص / المسار"
FILE_STREAMS: "تيارات الملف"
DEFAULT: "الإعدادات العامة"
PAGE_MEDIA: "صور و فيديوهات الصفحة"
OPTIONS: "الخيارات"
PUBLISHED: "نُشِرَ"
PUBLISHED_HELP: "بشكل افتراضي، يتم نشر صفحة إلا إذا قمت بتعيين المنشور: false أو عن طريق publish_date يجري في المستقبل، أو unpublish_date في الماضي"
DATE: "التاريخ"
PUBLISHED_DATE: "تاريخ النشر"
ROBOTS: "الروبوتات"
ADVANCED: "خيارات متقدمة"
SETTINGS: "الإعدادات"
FOLDER_NAME: "إسم المجلد"
MENU: "القائمة"
USE_GLOBAL: "الاستخدام العام"
ROUTABLE: "قابل للتوجيه"
ROUTABLE_HELP: "إذا أمكن ولوج هذه الصفحة عبر عنوان URL"
VISIBLE: "مرئي"
ASCENDING: "تصاعدي"
DESCENDING: "تنازلي"
PAGE_TITLE: "موضوع عنوان الصفحة"
PAGE_TITLE_HELP: "عنوان الصفحة"
PAGE: "صفحة"
FILENAME: "اسم الملف"
PARENT_PAGE: "الصفحة الأصل"
HOME_PAGE: "الصفحة الرئيسية"
TIMEZONE: "المنطقة الزمنية"
LANGUAGES: "اللغات"
EXPIRES: "انتهاء الصلاحية"
LAST_MODIFIED: "آخر تعديل"
SESSION: "الجلسة"
CURRENT: "الحالي"
SAVE_AS: "حفظ كـ"
AND: "و"
FULLY_UPDATED: "تم تحديث النظام بالكامل"
GROUPS: "الفِرَق"
SESSION_SECURE: "آمن"
ADD_FOLDER: "إضافة مجلد"
ADD_ITEM: "إضافة عنصر"
LOADING: "جار التحميل …"
PACKAGES_SUCCESSFULLY_UPDATED: "تم تحديث حزمة أو حزمات بنجاح."
INSERT: "إدراج"
UNDO: "تراجع"
REDO: "إعادة"
HEADERS: "العناوين الرأسية"
ITALIC: "مائل"
LINK: "رابط"
IMAGE: "صورة"
PREVIEW: "معاينة"
PUBLISHING: "النشر"
IMAGE_OPTIONS: "خيارات الصورة"
ALL: "الكل"
FROM: "من"
TO: "إلى"
RELEASE_DATE: "تاريخ الإصدار"
DROPZONE_REMOVE_FILE: "إزالة الملف"
TOOLS: "الأدوات"
2FA_CODE_INPUT: "000000"
2FA_REGENERATE: "إعادة التوليد"
CONFIGURATION: "الإعدادات"
DASHBOARD: "لوحة المعلومات"
+356
View File
@@ -0,0 +1,356 @@
---
PLUGIN_ADMIN:
ADMIN_BETA_MSG: "Това е Бета версия! Използвате на ваша отговорност..."
ADMIN_REPORT_ISSUE: "Открили сте проблем? Моля, съобщете за него в GitHub."
EMAIL_FOOTER: "<a href=\"https://getgrav.org\">Задвижван от Grav</a> - Модерният Флат Файл CMS"
LOGIN_BTN: "Вход"
LOGIN_BTN_FORGOT: "Забравена парола"
LOGIN_BTN_RESET: "Промяна на паролата"
LOGIN_BTN_SEND_INSTRUCTIONS: "Изпращане на инструкциите за възстановяването"
LOGIN_BTN_CLEAR: "Изтриване на формуляра"
LOGIN_BTN_CREATE_USER: "Създаване на потребител"
LOGIN_LOGGED_IN: "Влязохте успешно"
LOGIN_FAILED: "Влизането не е успешно"
LOGGED_OUT: "Излязохте от системата"
RESET_NEW_PASSWORD: "Въведете нова парола &hellip;"
RESET_LINK_EXPIRED: "Връзката за нулиране е изтекла, опитайте отново"
RESET_PASSWORD_RESET: "Паролата е променена"
RESET_INVALID_LINK: "Използвана невалидна връзка за нулиране, моля опитайте отново"
FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "На Вашия имейл, бяха изпратени инструкции за възстановяване на паролата"
FORGOT_FAILED_TO_EMAIL: "Неуспешно изпращане на имейл с инструкции, опитайте по-късно"
FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL: "Паролата на %s не може да бъде обновена, няма въведен имейл адрес"
FORGOT_USERNAME_DOES_NOT_EXIST: "Потребител с име <b>%s</b> не съществува"
FORGOT_EMAIL_NOT_CONFIGURED: "Не може да обнови паролата. Този сайт не е конфигуриран да изпраща имейли"
FORGOT_EMAIL_SUBJECT: "%s - искане за смяна на парола"
FORGOT_EMAIL_BODY: "<h1>Смяна на парола</h1><p>Уважаеми %1$s</p><p>На <b>%4$s</b> бе направено искане за смяна на парола.</p><p><br /><a href=\"%2$s\" class=\"btn-primary\">Натиснете тук за да обновите паролата си</a><br /><br /></p><p>Като алтернатива, можете да копирате линка в адресната лента на браузъра си:</p><p>%2$s</p><p><br />С уважение,<br /><br />%3$s</p>"
MANAGE_PAGES: "Управление на страниците"
PAGES: "Страници"
PLUGINS: "Разширения"
PLUGIN: "Разширение"
THEMES: "Теми"
LOGOUT: "Изход"
BACK: "Назад"
NEXT: "Напред"
PREVIOUS: "Назад"
ADD_PAGE: "Добавяне на страница"
MOVE: "Преместване"
DELETE: "Изтриване"
UNSET: "Незададен"
VIEW: "Виж"
SAVE: "Запазване"
NORMAL: "Обикновен"
EXPERT: "Експертен"
EXPAND_ALL: "Разгъване на всички"
COLLAPSE_ALL: "Свиване на всички"
ERROR: "Грешка"
CLOSE: "Затваряне"
CANCEL: "Отказ"
CONTINUE: "Продължаване"
MODAL_DELETE_PAGE_CONFIRMATION_REQUIRED_TITLE: "Изисква се потвърждение"
MODAL_CHANGED_DETECTED_TITLE: "Засечени са промени"
MODAL_CHANGED_DETECTED_DESC: "Имате незапазени промени. Наистина ли искате да излезете без да сте ги запазили?"
MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_TITLE: "Изисква се потвърждение"
MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_DESC: "Наистина ли искате да изтриете този файл? Това действие не може да бъде отменено."
ADD_FILTERS: "Добавяне на филтри"
SEARCH_PAGES: "Търсене"
VERSION: "Версия"
WAS_MADE_WITH: "е създаден с"
BY: "от"
UPDATE_THEME: "Актуализация на тема"
UPDATE_PLUGIN: "Актуализация на разширение"
OF_THIS_THEME_IS_NOW_AVAILABLE: "на тази тема е наличен"
OF_THIS_PLUGIN_IS_NOW_AVAILABLE: "на този плъгин е вече наличен"
AUTHOR: "Автор"
HOMEPAGE: "Страница"
DEMO: "Демо"
BUG_TRACKER: "Докладване за грешки"
KEYWORDS: "Ключови думи"
LICENSE: "Лиценз"
DESCRIPTION: "Описание"
README: "Документация"
REMOVE_THEME: "Премахване на тема"
INSTALL_THEME: "Инсталиране на тема"
THEME: "Тема"
BACK_TO_THEMES: "Обратно към темите"
BACK_TO_PLUGINS: "Обратно към разширенията"
CHECK_FOR_UPDATES: "Проверка за актуализации"
ADD: "Добавяне"
CLEAR_CACHE: "Изтриване на временните файлове"
CLEAR_CACHE_ALL_CACHE: "Всички"
CLEAR_CACHE_ASSETS_ONLY: "Само Assets"
CLEAR_CACHE_IMAGES_ONLY: "Само изображенията"
CLEAR_CACHE_CACHE_ONLY: "Само временните файлове"
CLEAR_CACHE_TMP_ONLY: "само временен"
UPDATES_AVAILABLE: "Налични актуализации"
DAYS: "Дни"
UPDATE: "Актуализация"
BACKUP: "Резервно копие"
BACKUPS: "Резервно копие"
BACKUP_NOW: "Създай резервно копие"
BACKUPS_STATS: "Статистика резервни копия"
BACKUPS_HISTORY: "История резервни копия"
BACKUPS_PURGE_CONFIG: "Настройка изтриване на резервно копие"
BACKUPS_PROFILES: "Профили на резервни копия"
BACKUPS_COUNT: "Брой резервни копия"
BACKUPS_PROFILES_COUNT: "Брой профили"
BACKUPS_TOTAL_SIZE: "Използвано пространство"
BACKUPS_NEWEST: "Най-ново резервно копие"
BACKUPS_OLDEST: "Най-старо резервно копие"
BACKUPS_PURGE: "Изтриване"
BACKUPS_NOT_GENERATED: "Все още не са генериране резервни копия..."
BACKUPS_PURGE_NUMBER: "Използва %s от %s слота за резервни копия"
BACKUPS_PURGE_TIME: "Остават %s дни за резервно копие"
BACKUPS_PURGE_SPACE: "Използва %s от %s"
BACKUP_DELETED: "Успешно изтрито резервно копие"
BACKUP_NOT_FOUND: "Не е намерено резервно копие"
BACKUP_DATE: "Данни за резервно копие"
STATISTICS: "Статистика"
TODAY: "Днес"
WEEK: "Седмица"
MONTH: "Месец"
LATEST_PAGE_UPDATES: "Скоро актуализирани страници"
MAINTENANCE: "Техническа поддръжка"
UPDATED: "Актуализиран"
MON: "пон"
TUE: "вт"
WED: "ср"
THU: "чт"
FRI: "пт"
SAT: "сб"
SUN: "нд"
COPY: "Копиране"
EDIT: "Редактиране"
CREATE: "Създаване"
GRAV_ADMIN: "Grav Admin"
GRAV_OFFICIAL_PLUGIN: "Официално разширение на Grav"
GRAV_OFFICIAL_THEME: "Официална тема на Grav"
PLUGIN_SYMBOLICALLY_LINKED: "Този плъгин е символично свързан. Актуализации няма да бъдат отразени."
THEME_SYMBOLICALLY_LINKED: "Тази тема е символично свързана. Актуализации няма да бъдат отразени."
REMOVE_PLUGIN: "Премахване на разширение"
INSTALL_PLUGIN: "Инсталиране на разширение"
AVAILABLE: "Налични"
INSTALLED: "Инсталирани"
INSTALL: "Инсталиране"
ACTIVE_THEME: "Активна тема"
SWITCHING_TO: "Превключване към"
SWITCHING_TO_DESCRIPTION: "При превключването към различна тема няма гаранция, че всички страници са поддържани, което може да доведе до потенциални грешки при опит за зареждане на тези страници."
SWITCHING_TO_CONFIRMATION: "Искате ли да продължите и да превключите към темата"
CREATE_NEW_USER: "Създаване на нов потребител"
REMOVE_USER: "Премахване на потребител"
ACCESS_DENIED: "Нямате достъп"
ACCOUNT_NOT_ADMIN: "вашият профил няма администраторски права"
PHP_INFO: "Информация за PHP"
INSTALLER: "Инсталатор"
AVAILABLE_THEMES: "Налични теми"
AVAILABLE_PLUGINS: "Налични разширения"
INSTALLED_THEMES: "Инсталирани теми"
INSTALLED_PLUGINS: "Инсталирани разширения"
BROWSE_ERROR_LOGS: "Преглед на дневниците за грешки"
SITE: "Сайт"
INFO: "Информация"
SYSTEM: "Система"
USER: "Потребител"
ADD_ACCOUNT: "Добавяне на профил"
SWITCH_LANGUAGE: "Превключване на езика"
SUCCESSFULLY_ENABLED_PLUGIN: "Разширението е активирано успешно"
SUCCESSFULLY_DISABLED_PLUGIN: "Разширението е спряно"
SUCCESSFULLY_CHANGED_THEME: "Промяната на подразбиращата се тема е успешно"
INSTALLATION_FAILED: "Неуспешна инсталация"
INSTALLATION_SUCCESSFUL: "Инсталацията е успешна"
UNINSTALL_FAILED: "Неуспешно деинсталиране"
UNINSTALL_SUCCESSFUL: "Деинсталирането е успешно"
SUCCESSFULLY_SAVED: "Успешно запазено"
SUCCESSFULLY_COPIED: "Успешно копирано"
REORDERING_WAS_SUCCESSFUL: "Записът бе успешен"
SUCCESSFULLY_DELETED: "Успешно изтрити"
SUCCESSFULLY_SWITCHED_LANGUAGE: "Езикът е променен успешно"
INSUFFICIENT_PERMISSIONS_FOR_TASK: "Нямате достатъчно права за тази задача"
CACHE_CLEARED: "Временните файлове са изчистени"
METHOD: "Метод"
ERROR_CLEARING_CACHE: "Грешка при изтриването на временните файлове"
AN_ERROR_OCCURRED: "Възникна грешка"
YOUR_BACKUP_IS_READY_FOR_DOWNLOAD: "Резервното копие е готово за изтегляне"
DOWNLOAD_BACKUP: "Изтегляне на резервното копие"
PAGES_FILTERED: "Филтрирани страници"
NO_PAGE_FOUND: "Няма намерени страници"
INVALID_PARAMETERS: "Невалидни параметри"
NO_FILES_SENT: "Няма изпратени файлове"
EXCEEDED_FILESIZE_LIMIT: "Надхвърлен лимит за размер на PHP конфигурационен файл"
UNKNOWN_ERRORS: "Неизвестни грешки"
EXCEEDED_GRAV_FILESIZE_LIMIT: "Превишен лимит за размера на конфигурационен GRAV файл"
UNSUPPORTED_FILE_TYPE: "Този файлов формат не се поддържа"
FAILED_TO_MOVE_UPLOADED_FILE: "Преместването на качения файл не е успешно."
FILE_UPLOADED_SUCCESSFULLY: "Файлът е качен успешно"
FILE_DELETED: "Файлът е изтрит"
FILE_COULD_NOT_BE_DELETED: "Файлът не може да бъде изтрит"
FILE_NOT_FOUND: "Файлът не е намерен"
NO_FILE_FOUND: "Няма намерени файлове"
GRAV_WAS_SUCCESSFULLY_UPDATED_TO: "Grav беше успешно актуализиран до"
GRAV_UPDATE_FAILED: "Актуализацията на Grav е неуспешна"
EVERYTHING_UPDATED: "Всичко е актуализирано"
UPDATES_FAILED: "Актуализациите не бяха успшено"
AVATAR_BY: "Аватар от"
AVATAR_UPLOAD_OWN: "Или качи собствени..."
LAST_BACKUP: "Последно резервно копие"
FULL_NAME: "Пълно име"
USERNAME: "Потребителско име"
EMAIL: "Ел. поща"
USERNAME_EMAIL: "Потребителско име или инейл"
PASSWORD: "Парола"
PASSWORD_CONFIRM: "Потвърждение на паролата"
TITLE: "Титла"
LANGUAGE: "Език"
ACCOUNT: "Профил"
EMAIL_VALIDATION_MESSAGE: "Ел. поща трябва да бъде валидна"
PASSWORD_VALIDATION_MESSAGE: "Паролата трябва да съдържа поне един номер, една главна буква, една малка буква и да съдържа поне 8 или повече знака"
LANGUAGE_HELP: "Задаване на любим език"
MEDIA: "Медиа"
DEFAULTS: "По подразбиране"
SITE_TITLE: "Заглавие на сайта"
SITE_TITLE_PLACEHOLDER: "Заглавие за всички страници"
SITE_TITLE_HELP: "Подразбиращо се заглавие за вашият сайт, често се използва от темите"
SITE_DEFAULT_LANG: "Език по подразбиране"
SITE_DEFAULT_LANG_PLACEHOLDER: "Език по подразбиране, използван от <HTML> тага на темите"
SITE_DEFAULT_LANG_HELP: "Език по подразбиране, използван от <HTML> тага на темите"
DEFAULT_AUTHOR: "Подразбиращ се автор"
DEFAULT_AUTHOR_HELP: "Име на автор по подразбиране, често използвано в теми или страници"
DEFAULT_EMAIL: "Имейл по подразбиране"
DEFAULT_EMAIL_HELP: "Имейл по подразбиране, използван в теми или страници"
TAXONOMY_TYPES: "Видове таксономии"
TAXONOMY_TYPES_HELP: "Типовете таксономия трябва да бъдат дефинирани тук, ако искате да ги използвате в страници"
PAGE_SUMMARY: "Резюме на страницата"
ENABLED: "Включен"
ENABLED_HELP: "Разреши извлечение (извлечението връща същото съдържание, като в страницата)"
'YES': "Да"
'NO': "Не"
SUMMARY_SIZE: "Размер на резюмето"
SUMMARY_SIZE_HELP: "Брой знаци, които да бъдат използвани при създаването на резюме за страницата"
FORMAT: "Формат"
SHORT: "Къс"
LONG: "Дълъг"
DELIMITER: "Делител"
DELIMITER_HELP: "Разделител на извлечението (по подразбиране '===')"
METADATA: "Мета-данни"
METADATA_HELP: "Ще бъдат показани метадата стойностите по подразбиране на всяка страница, освен ако не са отхвърлени от страницата"
NAME: "Име"
CONTENT: "Съдържание"
SIZE: "Размер"
ACTION: "Действие"
REDIRECTS_AND_ROUTES: "Пренасочвания и пътища"
CUSTOM_REDIRECTS: "Потребителски пренасочвания"
CUSTOM_REDIRECTS_HELP: "маршрути за пренасочване към сдруга страница. Подмяна със стандартен Regex е валидна"
CUSTOM_REDIRECTS_PLACEHOLDER_KEY: "/your/alias"
CUSTOM_REDIRECTS_PLACEHOLDER_VALUE: "/your/redirect"
CUSTOM_ROUTES: "Потребителски пренасочвания"
CUSTOM_ROUTES_PLACEHOLDER_KEY: "/your/alias"
CUSTOM_ROUTES_PLACEHOLDER_VALUE: "/your/route"
FILE_STREAMS: "Потоци файлове"
DEFAULT: "По подразбиране"
PAGE_MEDIA: "Страница с медия"
OPTIONS: "Опции"
PUBLISHED: "Публикувано"
PUBLISHED_HELP: "По подразбиране страницата се публикува, освен ако не е зададео published: false или publish_date е в бъдеще или unpublish_date е в миналото"
DATE: "Дата"
DATE_HELP: "Променливата за дата позволява да се зададе дата асоциирана със страницата."
PUBLISHED_DATE: "Дата на публикуване"
PUBLISHED_DATE_HELP: "Дата, на която автоматично ще се публикува."
UNPUBLISHED_DATE: "Дата на непубликуване"
UNPUBLISHED_DATE_HELP: "Може да зададе дата за автоматично непубликуване."
ROBOTS: "Роботи"
TAXONOMIES: "Таксономии"
TAXONOMY: "Таксономия"
ADVANCED: "Разширено"
SETTINGS: "Настройки"
FOLDER_NUMERIC_PREFIX: "Цифров префикс на папка"
FOLDER_NUMERIC_PREFIX_HELP: "Цифров префикс осигуряващ ръчно подреждане и по-добра видимост"
FOLDER_NAME: "Име на папка"
FOLDER_NAME_HELP: "Името на папката, която ще се съхрани във файлова система за тази страница"
PARENT: "Родител"
DEFAULT_OPTION_ROOT: "- Коренова папка -"
DEFAULT_OPTION_SELECT: "- Избор -"
DISPLAY_TEMPLATE: "Показване на шаблон"
ORDERING: "Подреждане"
PAGE_ORDER: "Подредба на страниците"
OVERRIDES: "Замени"
MENU: "Меню"
MENU_HELP: "Стрингът, който ще се използва в меню. Ако не се зададе, ще се използва Title."
SLUG: "Слъг"
SLUG_HELP: "Слъг променливата Ви позволява да зададете конкретна порция от URL на страницата"
SLUG_VALIDATE_MESSAGE: "Слъговете могат да съдържат само малки букви, цифри и тирета"
PROCESS: "Обработване"
PROCESS_HELP: "Контролирайте обработката на страниците. Може да бъде за отделна страница или глобално"
DEFAULT_CHILD_TYPE: "Тип по подразбиране"
USE_GLOBAL: "Използвай глобални"
ROUTABLE: "Маршрутизируем"
ROUTABLE_HELP: "Ако страницата е достъпна през URL"
CACHING: "Създаване на временни файлове"
VISIBLE: "Видим"
VISIBLE_HELP: "Определя дали една страница е видима в навигацията."
DISABLED: "Изключено"
ITEMS: "Елементи"
ORDER_BY: "Подреждане по"
ORDER: "Подреждане"
FOLDER: "Папка"
ASCENDING: "Възходящо"
DESCENDING: "Низходящо"
PAGE_TITLE: "Заглавие на страницата"
PAGE_TITLE_HELP: "Заглавието на страницата"
PAGE: "Страница"
FRONTMATTER: "Встъпление"
FILENAME: "Име на файла"
PARENT_PAGE: "Родителска страница"
HOME_PAGE: "Начална страница"
HOME_PAGE_HELP: "Страницата, която Grav ще използва по подразбиране за начална страница"
DEFAULT_THEME: "Тема по подразбиране"
DEFAULT_THEME_HELP: "Задаване на темата по подразбиране, която Grav ще използва (по подразбиране това е Antimatter)"
TIMEZONE: "Часова зона"
TIMEZONE_HELP: "Презаписване на времевата зона на сървъра"
SHORT_DATE_FORMAT: "Кратък формат дата"
SHORT_DATE_FORMAT_HELP: "Задай кратък формат дата, който може да се използва от темите"
LONG_DATE_FORMAT: "Пълен формат дата"
LONG_DATE_FORMAT_HELP: "Задай пълен формат дата, който може да се използва от темите"
DEFAULT_ORDERING: "По подразбиране"
DEFAULT_ORDERING_DEFAULT: "По подразбиране - според име на папка"
DEFAULT_ORDERING_FOLDER: "Папка - според името на папката без префикс"
DEFAULT_ORDERING_TITLE: "Заглавие - според заглавно поле в главата"
DEFAULT_ORDERING_DATE: "Дата - според поле за дата в главата"
DEFAULT_ORDER_DIRECTION: "Подреждане по подразбиране"
DEFAULT_ORDER_DIRECTION_HELP: "Посоката на страниците в списък"
DEFAULT_PAGE_COUNT: "Брой страници по подразбиране"
DEFAULT_PAGE_COUNT_HELP: "Максимален брой страници в списък по подразбиране"
DATE_BASED_PUBLISHING: "Публикуване според датата"
DATE_BASED_PUBLISHING_HELP: "Автоматично (не)публикувай постове според датата"
EVENTS: "Събития"
EVENTS_HELP: "Пускане или спиране на специфични събития. Спирането на някои събития може да счупи определени приставки"
REDIRECT_DEFAULT_ROUTE: "Пренасочване на пътя по подразбиране"
REDIRECT_DEFAULT_ROUTE_HELP: "Автоматично пренасочване към пътя по подразбиране на страницата"
LANGUAGES: "Езици"
SUPPORTED: "Поддържани"
SUPPORTED_HELP: "Списък от двубуквени езикови кодове, отделени със запетая (пример 'bg,en,de')"
HTTP_HEADERS: "HTTP заглавки"
EXPIRES: "Изтича на"
CACHE_CONTROL: "HTTP кеш-контрол"
LAST_MODIFIED: "Последна промяна"
CACHE_CHECK_METHOD: "Мотод проверка на кеша"
CACHE_DRIVER: "Кеш драйвър"
CACHE_PREFIX: "Кеш представка"
CACHE_PURGE: "Изтриване на стр кеш"
LIFETIME: "Продължителност на живот"
GZIP_COMPRESSION: "Gzip компресия"
GZIP_COMPRESSION_HELP: "Разреши GZip компресия на Grav страницата, за оптимизация."
CSS_PIPELINE: "CSS pipeline"
JAVASCRIPT_PIPELINE: "JavaScript pipeline"
LOG_HANDLER: "Обработка на лога"
DEBUGGER: "Дибъгър"
SESSION: "Сесия"
CURRENT: "Текущ"
SAVE_AS: "Запази като"
AND: "и"
UPDATE_AVAILABLE: "Налична актуализация"
FULLY_UPDATED: "Напълно обновен"
SAVE_LOCATION: "Местоположение за запис"
IGNORE_HIDDEN_HELP: "Игнорирай всички файлове и папки, които започват с точка"
WRAPPED_SITE: "Опаковани сайт"
CONFIGURATION: "Настройки"
TIMEOUT: "Таймаут"
DASHBOARD: "Контролен панел"
+4
View File
@@ -0,0 +1,4 @@
---
PLUGIN_ADMIN:
LOGIN_BTN: "লগ ইন"
LOGIN_BTN_FORGOT: "ভুলে গেছি"
+592
View File
@@ -0,0 +1,592 @@
---
PLUGIN_ADMIN:
ADMIN_BETA_MSG: "Un ermaeziadenn beta an hini eo! Arverit en endro produadur gant evezh..."
ADMIN_REPORT_ISSUE: "Kavet hoc'h eus ur gudenn? Danevellit anezhi war Github."
EMAIL_FOOTER: "<a href=\"https://getgrav.org\">Lusket gant Grav</a> - Ar CMS Restr plad modern"
LOGIN_BTN: "Anv arveriad"
LOGIN_BTN_FORGOT: "Ankouaet"
LOGIN_BTN_RESET: "Adderaouekaat ar ger-tremen"
LOGIN_BTN_SEND_INSTRUCTIONS: "Kas an ditouroù adderaouekaat"
LOGIN_BTN_CLEAR: "Skarzhañ ar furmskrid"
LOGIN_BTN_CREATE_USER: "Krouiñ an arveriad"
LOGIN_LOGGED_IN: "Kennasket oc'h gant berzh"
LOGIN_FAILED: "C'hwitadenn war ar c'hennask"
LOGGED_OUT: "Digennasket oc'h"
RESET_NEW_PASSWORD: "Enankit ur ger-tremen nevez &hellip;"
RESET_LINK_EXPIRED: "Diamzeret eo an ere adderaouekaat, klaskit en-dro"
RESET_PASSWORD_RESET: "Adderaouekaet eo bet ar ger-tremen"
RESET_INVALID_LINK: "Ere adderaouekaat didalvoudek, klaskit en-dro"
FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "Kaset eo bet an ditouroù da adderaouekaat ho ker-tremen d'ho chmolec'h postel"
FORGOT_FAILED_TO_EMAIL: "C'hwitadenn en ur gas an ditouroù, klaskit en-dro diwezhatoc'h"
FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL: "N'haller ket adderaouekaat ar ger-tremen evit %s, chomlec'h postel ebet arventennet"
FORGOT_USERNAME_DOES_NOT_EXIST: "N'eus ket eus an arveriad gant an anv <b>%s</b>"
FORGOT_EMAIL_NOT_CONFIGURED: "N'haller ket adderaouekaat ar ger-tremen. N'eo ket kefluniet al lec'hienn evit kas posteloù"
FORGOT_EMAIL_SUBJECT: "%s Goulenn adderaouekaat ar ger-tremen"
FORGOT_EMAIL_BODY: "<h1>Adderaouekaat ar ger-tremen/h1><p>%1$s,</p><p>Graet eo bet un azgoulenn war <b>%4$s</b> evit adderaouekaat ho ker-tremen.</p><p><br /><a href=\"%2$s\" class=\"btn-primary\">Klikit amañ da adderaouekaat ho ker-tremen</a><br /><br /></p><p>Gallout a rit ivez eilañ an URL da heul er varrenn chomlec'h en ho merdeer:</p> <p>%2$s</p><p><br />A galon,<br /><br />%3$s</p>"
MANAGE_PAGES: "Ardeiñ ar pajennoù"
PAGES: "Pajennoù"
PLUGINS: "Enlugelladoù"
PLUGIN: "Enlugellad"
THEMES: "Neuzioù"
LOGOUT: "Digennaskañ"
BACK: "Distreiñ"
NEXT: "War-lerc'h"
PREVIOUS: "Diaraog"
ADD_PAGE: "Ouzhpennañ ur bajenn"
MOVE: "Dilec'hiañ"
DELETE: "Dilemel"
VIEW: "Gwel"
SAVE: "Enrollañ"
NORMAL: "Reoliek"
EXPERT: "Kemplezhoc'h"
EXPAND_ALL: "Astenn an holl"
COLLAPSE_ALL: "Bihanaat an holl"
ERROR: "Fazi"
CLOSE: "Serriñ"
CANCEL: "Nullañ"
CONTINUE: "Kenderc'hel"
MODAL_DELETE_PAGE_CONFIRMATION_REQUIRED_TITLE: "Kadarnadur azgoulennet"
MODAL_CHANGED_DETECTED_TITLE: "Kemmoù dinoet"
MODAL_CHANGED_DETECTED_DESC: "Kemmoù dienrollet a zo. Sur oc'h e fell deoc'h kuitaat hep enrollañ?"
MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_TITLE: "Kadarnadur azgoulennet"
MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_DESC: "Sur oc'h e fell deoc'h dilemel ar restr-mañ? N'haller ket dizober ar gwered-mañ."
ADD_FILTERS: "Ouzhpennañ siloù"
SEARCH_PAGES: "Klask pajennoù"
VERSION: "Handelv"
WAS_MADE_WITH: "Savet eo bet gant"
BY: "Gant"
UPDATE_THEME: "Hizivaat an neuz"
UPDATE_PLUGIN: "Hizivaat an enlugellad"
OF_THIS_THEME_IS_NOW_AVAILABLE: "an neuz-mañ a zo hegerz"
OF_THIS_PLUGIN_IS_NOW_AVAILABLE: "an enlugellad-mañ a zo hegerz"
AUTHOR: "Aozer"
HOMEPAGE: "Pennbajenn"
DEMO: "Tañva"
BUG_TRACKER: "Heulier beugoù"
KEYWORDS: "Gerioù-alc'hwez"
LICENSE: "Lañvaz"
DESCRIPTION: "Deskrivadur"
README: "Skoazell"
REMOVE_THEME: "Dilemel an neuz"
INSTALL_THEME: "Staliañ an neuz"
THEME: "Neuz"
BACK_TO_THEMES: "Distreiñ d'an neuzioù"
BACK_TO_PLUGINS: "Distreiñ d'an enlugelladoù"
CHECK_FOR_UPDATES: "Klask hizivadennoù"
ADD: "Ouzhpenañ"
CLEAR_CACHE: "Skarzhañ ar c'hrubuilh"
CLEAR_CACHE_ALL_CACHE: "Ar c'hrubuilh a-bezh"
CLEAR_CACHE_ASSETS_ONLY: "Loazioù nemetken"
CLEAR_CACHE_IMAGES_ONLY: "Skeudennoù nemetken"
CLEAR_CACHE_CACHE_ONLY: "Krubuilh nemetken"
CLEAR_CACHE_TMP_ONLY: "Padennek hepken"
UPDATES_AVAILABLE: "Hizivadennoù hegerz"
DAYS: "Devezhioù"
UPDATE: "Hizivadenn"
BACKUP: "Gwared"
STATISTICS: "Stadegoù"
TODAY: "Hiziv"
WEEK: "Sizhun"
MONTH: "Miz"
LATEST_PAGE_UPDATES: "Hizivadennoù diwezhañ ar bajenn"
MAINTENANCE: "Trezalc'h"
UPDATED: "Hizivaet"
MON: "Lun"
TUE: "Meu"
WED: "Mer"
THU: "Yao"
FRI: "Gwe"
SAT: "Sad"
SUN: "Sul"
COPY: "Eilañ"
EDIT: "Kemmañ"
CREATE: "Krouiñ"
GRAV_ADMIN: "Merour Grav"
GRAV_OFFICIAL_PLUGIN: "Enlugellad Kefridiel Grav"
GRAV_OFFICIAL_THEME: "Neuz Kefridiel Grav"
PLUGIN_SYMBOLICALLY_LINKED: "Gant un ere arouezus eo lakaet an enlugellad. Ne vo ket dinoet an hizivadennoù."
THEME_SYMBOLICALLY_LINKED: "Gant un ere arouezus eo lakaet an neuz. Ne vo ket dinoet an hizivadennoù"
REMOVE_PLUGIN: "Dilemel an enlugellad"
INSTALL_PLUGIN: "Staliañ an enlugellad"
AVAILABLE: "Hegerz"
INSTALLED: "Staliet"
INSTALL: "Staliañ"
ACTIVE_THEME: "Neuz oberiant"
SWITCHING_TO: "Kemmañ da"
SWITCHING_TO_DESCRIPTION: "En ur gemmañ d'un neuz disheñvel n'eus gwarant ebet e vo skoret an holl frammoù pajenn, ar pezh a zegasfe fazioù en ur gargañ ar pajennoù-mañ."
SWITCHING_TO_CONFIRMATION: "Fellout a ra deoc'h kenderc'hel ha kemmañ an neuz"
CREATE_NEW_USER: "Krouiñ un arveriad nevez"
REMOVE_USER: "Dilemel an arveriad"
ACCESS_DENIED: "Haeziñ nac'het"
ACCOUNT_NOT_ADMIN: "n'hoc'h eus ket an aotreoù a-zere"
PHP_INFO: "Titouroù PHP"
INSTALLER: "Stalier"
AVAILABLE_THEMES: "Neuzioù hegerz"
AVAILABLE_PLUGINS: "Enlugelladoù hegerz"
INSTALLED_THEMES: "Neuzioù staliet"
INSTALLED_PLUGINS: "Enlugelladoù staliet"
BROWSE_ERROR_LOGS: "Furchal er c'herzhlevr fazioù"
SITE: "Lec'hienn"
INFO: "Titouroù"
SYSTEM: "Reizhiad"
USER: "Arveriad"
ADD_ACCOUNT: "Ouzhpennañ ur gont"
SWITCH_LANGUAGE: "Kemmañ ar yezh"
SUCCESSFULLY_ENABLED_PLUGIN: "Gweredekaet an enlugellad gant berzh"
SUCCESSFULLY_DISABLED_PLUGIN: "Diweredekaet an enlugellad gant berzh"
SUCCESSFULLY_CHANGED_THEME: "Kemmet an neuz dre ziouer gant berzh"
INSTALLATION_FAILED: "C'hwitadenn war ar staliadur"
INSTALLATION_SUCCESSFUL: "Berzh war ar staliadur"
UNINSTALL_FAILED: "C'hwitadenn war an distaliadur"
UNINSTALL_SUCCESSFUL: "Berzh war an distaliadur"
SUCCESSFULLY_SAVED: "Enrollet gant berzh"
SUCCESSFULLY_COPIED: "Eilet gant berzh"
REORDERING_WAS_SUCCESSFUL: "Adurzhiet gant berzh"
SUCCESSFULLY_DELETED: "Dilamet gant berzh"
SUCCESSFULLY_SWITCHED_LANGUAGE: "Kemmet ar yezh gant berzh"
INSUFFICIENT_PERMISSIONS_FOR_TASK: "N'ho peus ket trawalc'h a aotreoù evit ar gwered"
CACHE_CLEARED: "Skarzhet ar c'hrubuilh"
METHOD: "Hentenn"
ERROR_CLEARING_CACHE: "Fazi en ur skarzhañ ar c'hrubuilh"
AN_ERROR_OCCURRED: "Degouezhet ez eus bet ur fazi"
YOUR_BACKUP_IS_READY_FOR_DOWNLOAD: "Prest eo ho kwared da vezañ pellgarget"
DOWNLOAD_BACKUP: "Pellgargañ ar gwared"
PAGES_FILTERED: "Pajennoù silet"
NO_PAGE_FOUND: "Pajenn ebet kavet"
INVALID_PARAMETERS: "Arventennoù didalvoudek"
NO_FILES_SENT: "Restr ebet kaset"
UNKNOWN_ERRORS: "Fazioù dianav"
UNSUPPORTED_FILE_TYPE: "Doare restr amskor"
FAILED_TO_MOVE_UPLOADED_FILE: "C'hwitadenn en ur zilec'hiañ ar restr pellgaset."
FILE_UPLOADED_SUCCESSFULLY: "Restr pellgaset gant berzh"
FILE_DELETED: "Restr dilamet"
FILE_COULD_NOT_BE_DELETED: "N'haller ket dilemel ar restr"
FILE_NOT_FOUND: "N'eus ket bet kavet ar restr"
NO_FILE_FOUND: "Restr ebet kavet"
GRAV_WAS_SUCCESSFULLY_UPDATED_TO: "Hizivaet eo bet Grav da"
GRAV_UPDATE_FAILED: "C'hwitadenn war hizivadenn Grav"
EVERYTHING_UPDATED: "Hizivaet pep tra"
UPDATES_FAILED: "C'hwitadenn war a hizivadennoù"
AVATAR_BY: "Avatar gant"
LAST_BACKUP: "Gwared diwezhañ"
FULL_NAME: "Anv klok"
USERNAME: "Anv arveriad"
EMAIL: "Chomlec'h postel"
PASSWORD: "Ger-tremen"
PASSWORD_CONFIRM: "Kadarnat ar ger-tremen"
TITLE: "Titl"
LANGUAGE: "Yezh"
ACCOUNT: "Kont"
EMAIL_VALIDATION_MESSAGE: "Ret eo reiñ ur chomlec'h postel talvoudek"
PASSWORD_VALIDATION_MESSAGE: "Ret eo d'ar ger-tremen enderc'hel ur niverenn, ul lizherenn vras hag ul lizherenn vihan hag 8 arouezenn d'an nebeutañ"
LANGUAGE_HELP: "Dibabit ar yezh"
MEDIA: "Media"
DEFAULTS: "Dre ziouer"
SITE_TITLE: "Titl al lec'hienn"
SITE_TITLE_PLACEHOLDER: "Titl ledan al lec'hienn"
SITE_TITLE_HELP: "Titl dre ziouer ho lec'hienn, arveret en neuzioù"
SITE_DEFAULT_LANG: "Yezh defot"
DEFAULT_AUTHOR: "Aozer dre ziouer"
DEFAULT_AUTHOR_HELP: "Un anv aozer dre ziouer, arveret en neuzioù pe er pajennoù"
DEFAULT_EMAIL: "Chomlec'h postel dre ziouer"
DEFAULT_EMAIL_HELP: "Ur chomlec'h postel dre ziouer, arveret en neuze pe er pajennoù"
TAXONOMY_TYPES: "Doareoù rummadoù"
TAXONOMY_TYPES_HELP: "An doareoù rummadoù a rank bezañ erspizet amañ ma fell deoc'h arverañ anezho er pajennoù"
PAGE_SUMMARY: "Berradenn ar bajenn"
ENABLED: "Gweredekaet"
ENABLED_HELP: "Gweredekaat berradenn ar bajenn (ar verradenn a zistro an hevelep tra hag endalc'had ar bajenn)"
'YES': "Ya"
'NO': "Ket"
SUMMARY_SIZE: "Ment ar verradenn"
SUMMARY_SIZE_HELP: "An niverenn a arouezenn da arverañ evel berradenn ur bajenn"
FORMAT: "Mentrezh"
FORMAT_HELP: "berr = arverañ degouezh kentañ an disranner pe ment; hir = laosket e vo an disranner berradenn a-gostez"
SHORT: "Berr"
LONG: "Hir"
DELIMITER: "Disranner"
DELIMITER_HELP: "Disranner ar verradenn (diouer '===')"
METADATA: "Metaroadennoù"
METADATA_HELP: "Skrammet e vo ar gwerzhioù metaroadennoù dre ziouer war an holl bajennoù war-bouez m'eo flastret gant ar bajenn"
NAME: "Anv"
CONTENT: "Endalc'had"
REDIRECTS_AND_ROUTES: "Adheñchañ ha treugoù"
CUSTOM_REDIRECTS: "Adheñchañ personelaet"
CUSTOM_REDIRECTS_HELP: "treugoù da adheñchañ davet pajennoù all. Talvoudek eo an amsaviñ regex"
CUSTOM_REDIRECTS_PLACEHOLDER_KEY: "/un/anv"
CUSTOM_REDIRECTS_PLACEHOLDER_VALUE: "/un/adeñchañ"
CUSTOM_ROUTES: "Treugoù personelaet"
CUSTOM_ROUTES_HELP: "treugoù da adheñchañ davet pajennoù all. Talvoudek eo an amsaviñ Regex"
CUSTOM_ROUTES_PLACEHOLDER_KEY: "/ho/anv"
CUSTOM_ROUTES_PLACEHOLDER_VALUE: "/ho/treug"
FILE_STREAMS: "Lanvioù restroù"
DEFAULT: "Dre ziouer"
PAGE_MEDIA: "Media ar bajenn"
OPTIONS: "Dibarzhioù"
PUBLISHED: "Embannet"
PUBLISHED_HELP: "Dre ziouer eo embannet ur bajenn war-bouez m'eo lakaet da \"Embannet: ket\" pe dre un deiziad embann en dazont, pe un deiziad diembannañ tremenet"
DATE: "Deiziad"
DATE_HELP: "Ar vaezienn deiziad a laosk ac'hanoc'h da arventennañ un deiziad liammet gant ar bajenn."
PUBLISHED_DATE: "Deiziad embann"
PUBLISHED_DATE_HELP: "Gallout a rit reiñ un deiziad da embann ent emgefreek."
UNPUBLISHED_DATE: "Deiziad diembannañ"
UNPUBLISHED_DATE_HELP: "Gallout a rit reiñ un deiziad evit diembannañ ent emgefreek."
ROBOTS: "Robotoù"
TAXONOMIES: "Rummadoù"
TAXONOMY: "Rummad"
ADVANCED: "Kempleshoc'h"
SETTINGS: "Arventennoù"
FOLDER_NUMERIC_PREFIX: "Rakger niverel an teuliad"
FOLDER_NUMERIC_PREFIX_HELP: "Rakgerioù niverel evit urzhiañ gant an dorn ha emplegañ ar gwelusted"
FOLDER_NAME: "Anv an teuliad"
FOLDER_NAME_HELP: "Anv an teuliad a vo kadavet er reizhiad restroù evit ar bajenn"
PARENT: "Kar"
DEFAULT_OPTION_ROOT: "- Gwrizienn -"
DEFAULT_OPTION_SELECT: "- Diuzañ -"
DISPLAY_TEMPLATE: "Skrammañ ar patrom"
DISPLAY_TEMPLATE_HELP: "An doare pajenn a ziviz peseurt patrom twig a zeznaouo ar bajenn"
ORDERING: "Urzh"
PAGE_ORDER: "Urzh ar pajennoù"
OVERRIDES: "Flastrañ"
MENU: "Lañser"
MENU_HELP: "Ar chadennoù da arverañ el lañser. Ma n'eo ket arventennet, Titl a vo arveret."
SLUG: "Slug"
SLUG_HELP: "An argemenn slug a aotren ac'hanoc'h da arventennañ URL lodenn ar bajenn"
SLUG_VALIDATE_MESSAGE: "Lizherennoù bihan, sifroù ha tiredoù a c'hall bezañ er slug hepken"
PROCESS: "Keweriañ"
PROCESS_HELP: "Reoliañ penaos eo keweriet ar pajennoù. Gallout a ra bezañ lakaet dre bajenn kentoc'h eget en un doare hollek"
DEFAULT_CHILD_TYPE: "Doare bugel dre ziouer"
USE_GLOBAL: "Arverañ Hollek"
ROUTABLE: "Treugus"
ROUTABLE_HELP: "M'eo haezadus ar bajenn dre un URL"
CACHING: "Krubuilhiñ"
VISIBLE: "Gwelus"
VISIBLE_HELP: "Despizañ a ra gwelusted ur bajenn er merdeiñ."
DISABLED: "Diweredekaet"
ITEMS: "Ergorennoù"
ORDER_BY: "Urzhiañ dre"
ORDER: "Urzh"
FOLDER: "Teuliad"
ASCENDING: "War-gresk"
DESCENDING: "War-zigresk"
PAGE_TITLE: "Titl ar bajenn"
PAGE_TITLE_HELP: "Titl ar bajenn"
PAGE: "Pajenn"
FRONTMATTER: "Frontmatter"
FILENAME: "Anv ar restr"
PARENT_PAGE: "Pajenn gar"
HOME_PAGE: "Pennbajenn"
HOME_PAGE_HELP: "Pajenn arveret gant Grav evel pajenn degemer dre ziouer"
DEFAULT_THEME: "Neuz dre ziouer"
DEFAULT_THEME_HELP: "Arventennañ an neuz arveret gant Grav dre ziouer (Antimatter dre ziouer)"
TIMEZONE: "Gwerzhid-eur"
TIMEZONE_HELP: "Flastrañ gwerzhid-eur dre ziouer an dafariad"
SHORT_DATE_FORMAT: "Mentrezh skrammañ an deiziad berr"
SHORT_DATE_FORMAT_HELP: "Arventennan ar mentrezh deiziad berr da arverañ gant an neuzioù"
LONG_DATE_FORMAT: "Mentrezh deiziad hir"
LONG_DATE_FORMAT_HELP: "Arventennañ ar mentrezh deiziad hir a vo arveret en neuzioù"
DEFAULT_ORDERING: "Urzh dre ziouer"
DEFAULT_ORDERING_HELP: "Pajennoù er roll a vo skrammet en urzh-mañ war-bouez m'eo flastret"
DEFAULT_ORDERING_DEFAULT: "Dre ziouer - diazezet war anv an teuliad"
DEFAULT_ORDERING_FOLDER: "Teuliad - diazezet war anv an teuliad hep rakger"
DEFAULT_ORDERING_TITLE: "Titl - diazezet war vaezienn ditl an talbenn"
DEFAULT_ORDERING_DATE: "Deiziad - diazezet war vaezienn deiziad an talbenn"
DEFAULT_ORDER_DIRECTION: "Tu an urzh dre ziouer"
DEFAULT_ORDER_DIRECTION_HELP: "Tu ar pajennoù er roll"
DEFAULT_PAGE_COUNT: "Niver a bajennoù dre ziouer"
DEFAULT_PAGE_COUNT_HELP: "Niver a bajennoù en ur roll d'ar muiañ"
DATE_BASED_PUBLISHING: "Embannadenn diazezet war un deiziad"
DATE_BASED_PUBLISHING_HELP: "(Di)embann pennadoù ent emgefreek hervez o deiziad"
EVENTS: "Darvoudoù"
EVENTS_HELP: "(Di)weredekaat darvoudoù resis. Diweredekaat anezho a c'hall terriñ enlugelladoù"
REDIRECT_DEFAULT_ROUTE: "Adheñchañ an treug dre ziouer"
REDIRECT_DEFAULT_ROUTE_HELP: "Adheñchañ ent emgefreek d'un treug pajenn dre ziouer"
LANGUAGES: "Yezhoù"
SUPPORTED: "Skoret"
SUPPORTED_HELP: "Roll bonegoù yezh 2 lizherenn ennañ disrannet gant skejoù (skouer: 'br, cy, en')"
TRANSLATIONS_FALLBACK: "Troidigezh dre ziouer"
TRANSLATIONS_FALLBACK_HELP: "Arverañ un droidigezh all ma n'eus ket eus ar tezh oberiant"
ACTIVE_LANGUAGE_IN_SESSION: "Yezhoù oberiant en estez"
ACTIVE_LANGUAGE_IN_SESSION_HELP: "Kadaviñ ar yezh oberiant en estez"
HTTP_HEADERS: "Talbennoù HTTP"
EXPIRES: "Diamzer"
EXPIRES_HELP: "Arventennañ an talbenn diamzeriñ e eilennoù."
LAST_MODIFIED: "Kemmet da ziwezhañ"
LAST_MODIFIED_HELP: "Arventennañ an talbenn kemmet da ziwezhañ a c'hall skoazell da wellaat ar proksi ha krubuilh ar merdeer"
ETAG: "ETag"
ETAG_HELP: "Arventennañ an talbenn etag evit skoazell da c'houzout peur eo bet kemmet ur bajenn"
VARY_ACCEPT_ENCODING: "Vary accept encoding"
VARY_ACCEPT_ENCODING_HELP: "Arventennañ a ra an talbenn `Vary: Accept Encoding` evit skoazell gant ar proksi hag ar c'hrubuilh CDN"
MARKDOWN_EXTRA_HELP: "Gweredekaat ar skor dre ziouer evit Markdown Ectra - https://michelf.ca/projects/php-markdown/extra/"
AUTO_LINE_BREAKS: "Tremen d'al linenn ent emgefreek"
AUTO_LINE_BREAKS_HELP: "Gweredekaat skor tremen al linenn ent emgefreek e Markdown"
AUTO_URL_LINKS: "Ereoù URL emgefreek"
AUTO_URL_LINKS_HELP: "Gweredekaat amdroadur emgefreek an URLoù da ereoù HTML"
ESCAPE_MARKUP: "Gwareziñ an HTML"
ESCAPE_MARKUP_HELP: "Gwareziñ ar c'hlavioù e elfennoù HTML"
CACHING_HELP: "Trec'haoler hollek evit (di)weredekaat krubuilh Grav"
CACHE_CHECK_METHOD: "Hentenn gwiriekaat ar c'hrubuilh"
CACHE_CHECK_METHOD_HELP: "Dibab an hentenn arveret gant Grav evit gwiriekaat m'eo bet kemmer ar restoù pajenn."
CACHE_DRIVER: "Sturier Krubuilh"
CACHE_DRIVER_HELP: "Dibab pe sturier krubuilh a zo arveret Grav. 'Dinoiñ emgefreek' a glask kavout pe zoare a zo an hini gwellañ"
CACHE_PREFIX: "Rakger ar c'hrubuilh"
CACHE_PREFIX_HELP: "Lodenn naoudi an alc'hwez Grav. Na gemmit anezhi ma n'ouzit ket petra rit."
CACHE_PREFIX_PLACEHOLDER: "Deveret eus an URL diazez (flastret en un enkañ ur chadenn dargouezhek)"
LIFETIME: "Padelezh buhez"
LIFETIME_HELP: "Arventennañ padelezh ar c'hrubuilh e eilennoù. 0 = anvevenn"
GZIP_COMPRESSION: "Koazhadur Gzip"
GZIP_COMPRESSION_HELP: "Gweredekaat koazhadur Gzip ar bajenn Grav evit kreskiñ an digonusted."
TWIG_TEMPLATING: "Patromiñ Twig"
TWIG_CACHING: "Krubuilh Twig"
TWIG_CACHING_HELP: "Reoliañ wikefre krubuilh Twig. Laoskit gweredekaet evit an digonusted gwellañ."
TWIG_DEBUG: "Diveugañ Twig"
TWIG_DEBUG_HELP: "Aotren an dibarzh evit chom hep kargañ an askouezh diveugañ Twig"
DETECT_CHANGES: "Dinoiñ ar c'hemmoù"
DETECT_CHANGES_HELP: "Adkempunet e vo krubuilh Twig ent emgefreek ma vez dinoet kemmoù er patromoù Twig"
AUTOESCAPE_VARIABLES: "Gwareziñ an argemennoù ent emgefreek"
AUTOESCAPE_VARIABLES_HELP: "Gwareziñ an holl argemennoù ent emgefreek. Moarvat e torro ho lec'hienn"
ASSETS: "Madoù"
CSS_PIPELINE: "Arrevellañ CSS"
CSS_PIPELINE_HELP: "Arrevellañ ar CSS a zo unvanadur meur a loaz CSS en ur restr hepken"
CSS_PIPELINE_INCLUDE_EXTERNALS: "Ebarzhiñ restroù estren en arrevellañ CSS"
CSS_PIPELINE_INCLUDE_EXTERNALS_HELP: "URLoù diavaez a zo gant daveoù restroù daveel a-wechoù ha ne rankont ket bezañ arrevellet"
CSS_PIPELINE_BEFORE_EXCLUDES: "Deoueziñ an arrevellañ CSS da gentañ"
CSS_PIPELINE_BEFORE_EXCLUDES_HELP: "Deoueziñ an arrevellañ CSS a-raok kement dave CSS all ha n'int ket enkorfet"
CSS_MINIFY: "Bihanadur CSS"
CSS_MINIFY_HELP: "Bihanaat ar CSS e-pad an arrevellañ"
CSS_MINIFY_WINDOWS_OVERRIDE: "Amsaviñ bihanadur ar CSS Windows"
CSS_MINIFY_WINDOWS_OVERRIDE_HELP: "Amsaviñ ar bihanadur evit savennoù Windows. Faos dre ziouer abalamour da ThreadStackSize"
CSS_REWRITE: "Adskrivañ CSS"
CSS_REWRITE_HELP: "Adskrivañ kement URL daveel CSS e-pad an arrevellañ"
JAVASCRIPT_PIPELINE: "Arrevellañ Javascript"
JAVASCRIPT_PIPELINE_HELP: "An arrevellañ JS a zo unvanadur meur a restr JS en ur restr hepken"
JAVASCRIPT_PIPELINE_INCLUDE_EXTERNALS: "Enkorfañ ar JS diavaez evit an arrevellañ"
JAVASCRIPT_PIPELINE_INCLUDE_EXTERNALS_HELP: "Urloù diavaez o deus daveoù restroù daveel a-wechoù ha ne rankont ket bezañ arrevellet"
JAVASCRIPT_PIPELINE_BEFORE_EXCLUDES: "Arrevellañ JS da gentañ"
JAVASCRIPT_PIPELINE_BEFORE_EXCLUDES_HELP: "Deoueziñ an arrevellañ JS a-raok kement dave JS all ha n'int ket enkorfet"
JAVASCRIPT_MINIFY: "Bihanat ar javascript"
JAVASCRIPT_MINIFY_HELP: "Bihanaat ar JS e-pad an arrevellañ"
ENABLED_TIMESTAMPS_ON_ASSETS: "Gweredekaat ar boneg-amzer war al loazioù"
ENABLED_TIMESTAMPS_ON_ASSETS_HELP: "Gweredekaat bonegoù-amzer al loazioù"
COLLECTIONS: "Dastumadegoù"
ERROR_HANDLER: "Dornataour fazioù"
DISPLAY_ERRORS: "Skrammañ ar fazioù"
DISPLAY_ERRORS_HELP: "Skrammañ ur bajenn fazi gant munudoù"
LOG_ERRORS: "Kerzhlevr ar fazioù"
LOG_ERRORS_HELP: "Lakaat kerzhlevr ar fazioù en teuliad /logs"
DEBUGGER: "Diveuger"
DEBUGGER_HELP: "Gweredekaat diveuger Grav hag an arventennoù da heul"
DEBUG_TWIG: "Diveugañ Twig"
DEBUG_TWIG_HELP: "Gweredekaat diveugañ ar patromoù Twig"
SHUTDOWN_CLOSE_CONNECTION: "Shutdown a serr ar c'hennask"
SHUTDOWN_CLOSE_CONNECTION_HELP: "Serriñ ar c'hennask a-raok gervel onShutdown(). 'false' evit diveugañ"
DEFAULT_IMAGE_QUALITY: "Perzhded skeudenn dre ziouer"
DEFAULT_IMAGE_QUALITY_HELP: "Perzhded skeudenn dre ziouer da arverañ e-pad adstandilhonañ ar skeudennoù (85%)"
CACHE_ALL: "Lakaat an holl skeudennoù er c'hrubuilh"
CACHE_ALL_HELP: "Lakaat an holl skeudennoù da dremen dre reizhiad krubuilh Grav zoken ma n'o deus dornatadur media ebet"
IMAGES_DEBUG: "Rouedigell diveugañ ar skeudenn"
IMAGES_DEBUG_HELP: "Diskouez un diflugell a-us d'ar skeudennoù a ziskouez an donder piksel pa labourer war Retina da skouer"
UPLOAD_LIMIT: "Bevenn ment ar restroù da bellgas"
UPLOAD_LIMIT_HELP: "Lakaat ar ment restroù uhelañ e eizhbitoù (0 a zo anvevenn)"
ENABLE_MEDIA_TIMESTAMP: "Gweredekaat ar boneg-amzer war ar media"
ENABLE_MEDIA_TIMESTAMP_HELP: "Ouzhpennañ ur boneg-amzer diazezet war an deiziad kemmadur evit pep elfenn media"
SESSION: "Estez"
SESSION_ENABLED_HELP: "Gweredekaat skor an estez evit Grav"
SESSION_NAME_HELP: "Un naoudi arveret da stummañ anv toupin an estez"
ABSOLUTE_URLS: "URL dizave"
ABSOLUTE_URLS_HELP: "URLoù dizave pe daveel evit 'base_url'"
PARAMETER_SEPARATOR: "Disranner arventenn"
PARAMETER_SEPARATOR_HELP: "An disranner evit an arventennoù tremenet a c'hall bezañ kemmet evit Apache war Windows"
TASK_COMPLETED: "Trevell echuet"
EVERYTHING_UP_TO_DATE: "Pep tra a zo hizivaet"
UPDATES_ARE_AVAILABLE: "hizivadennoù hegerz"
IS_AVAILABLE_FOR_UPDATE: "a zo gant un hizivadenn hegerz"
IS_NOW_AVAILABLE: "a zo hegerz"
CURRENT: "Bremanel"
UPDATE_GRAV_NOW: "Hizivaat Grav bremañ"
GRAV_SYMBOLICALLY_LINKED: "Gant un ere arouezel eo staliet Grav. Dihegerz eo an hizivadenn"
UPDATING_PLEASE_WAIT: "Oc'h hizivaat... gortozit, emañ o pellgargañ"
OF_THIS: "eus an"
OF_YOUR: "eus ho"
HAVE_AN_UPDATE_AVAILABLE: "en deus un hizivadenn hegerz"
SAVE_AS: "Enrollañ evel"
MODAL_DELETE_PAGE_CONFIRMATION_REQUIRED_DESC: "Sur oc'h e fell deoc'h dilemel ar bajenn-mañ hag holl he bugale? M'eo troet ar bajenn en ur yezh all e vo miret an troidigezhioù a rankout a reot o dilemel en un doare distag. E mod all e vo dilamet teuliad ar bajenn gant an is-pajennoù. N'haller ket dizober ar gwered-mañ."
AND: "ha"
UPDATE_AVAILABLE: "Hizivadenn hegerz"
METADATA_KEY: "Alc'hwez (sk. 'Gerioù-alc'hwez')"
METADATA_VALUE: "Gwerzh (sk. 'Blog, Grav')"
USERNAME_HELP: "Etre 3 ha 16 arouezenn e rank an anv arveriad bezañ o kontañ al lizherennoù bihan, an niverennoù, an islinennoù hag ar barrennigoù. N'eo ket aotreet al lizherennoù bras, an esaouennoù hag an arouezennoù arbennik"
FULLY_UPDATED: "Hizivaet"
SAVE_LOCATION: "Lec'hiadur enrollañ"
PAGE_FILE: "Patrom pajenn"
PAGE_FILE_HELP: "Anv restr patrom ar bajenn, ha patrom skrammañ ar bajenn dre ziouer"
NO_USER_ACCOUNTS: "Kont arveriad ebet kavet, krouit unan da gentañ..."
REDIRECT_TRAILING_SLASH: "Adheñchañ ar veskell dibenn"
REDIRECT_TRAILING_SLASH_HELP: "Ober un adheñchañ 301 e-lerc'h merañ an beskell dibenn an URI en un doare treuzwelus."
DEFAULT_DATE_FORMAT: "Mentrezh deiziad ar bajenn"
DEFAULT_DATE_FORMAT_HELP: "Mentrezh deiziad ar bajenn arveret gant Grav. Dre ziouer, Grav a glask divinout mentrezh an deiziad met gallout a rit erspizañ unan gant kevreadur deiziad PHP (sk.: Y-m-d H:i)"
DEFAULT_DATE_FORMAT_PLACEHOLDER: "Divinout en emgefreek"
IGNORE_FILES: "Leuskel restroù a-gostez"
IGNORE_FILES_HELP: "Restroù da leuskel a-gostez e-pad keweriañ ar pajennoù"
IGNORE_FOLDERS: "Leuskel teuliadoù a-gostez"
IGNORE_FOLDERS_HELP: "Teuliadoù resis da leuskel a-gostez e-pad keweriañ ar pajennoù"
HTTP_ACCEPT_LANGUAGE: "Lakaat yezh ar merdeer"
HTTP_ACCEPT_LANGUAGE_HELP: "Gallout a rit klask arventennañ ar yezh gant hini ar talbenn `http_accept_language` ar merdeer"
OVERRIDE_LOCALE: "Flastrañ ar yezh"
OVERRIDE_LOCALE_HELP: "Flastrañ arventenn yezh PHP diazezet war ar yezh vremanel"
REDIRECT: "Adheñchañ ar bajenn"
REDIRECT_HELP: "Enankit hent ur bajenn pe un URL diavaez da adheñchañ ar bajenn. Sk. '/un/hent' pe 'http://ulload.bzh'"
PLUGIN_STATUS: "Stad an elugellad"
INCLUDE_DEFAULT_LANG: "Enkorfañ ar yezh dre ziouer"
INCLUDE_DEFAULT_LANG_HELP: "Ouzhpennañ a raio ar yezh dre ziouer en holl URLoù er yezh dre ziouer. Sk. '/br/blog/post'"
ALLOW_URL_TAXONOMY_FILTERS: "URL siloù rummad"
ALLOW_URL_TAXONOMY_FILTERS_HELP: "Dastumadegoù pajennoù a aotren ac'hanoc'h da silañ dre '/rummad:gwerzh'."
REDIRECT_DEFAULT_CODE: "Boneg adheñchan dre ziouer"
REDIRECT_DEFAULT_CODE_HELP: "Boneg stad HTTP da arverañ evit adheñchañ"
IGNORE_HIDDEN: "Leuskel ar re kuzhet a-gostez"
IGNORE_HIDDEN_HELP: "Leuskel an holl restroù ha teuliadoù a grog gant ur POENT"
WRAPPED_SITE: "Lec'hienn enkorfet"
WRAPPED_SITE_HELP: "Evit ma ouife an neuzioù/enlugelladoù m'eo enkorfet Grav en ur savenn all"
FALLBACK_TYPES: "Aotren doareoù fallback"
FALLBACK_TYPES_HELP: "Doareoù restr aotreet a c'hall bezañ kavet m'int haezet dre hent ar bajenn. An holl zoareoù media skoret dre ziouer."
INLINE_TYPES: "Doareoù fallback enkorfet"
INLINE_TYPES_HELP: "Ur roll doareoù restroù a rank bezañ skrammet en un doare enkorfet kentoc'h eget pellgarget"
APPEND_URL_EXT: "Ouzhpennañ an astenn d'an URL"
APPEND_URL_EXT_HELP: "Ouzhpennañ a raio un astenn personelaet da URL ar bajenn. Talvezout a ra e glasko Grav ur patrom anvet `<patrom>.<astenn>.twig`"
PAGE_MODES: "Modoù pajenn"
PAGE_TYPES: "Doareoù pajenn"
ACCESS_LEVELS: "Liveoù haeziñ"
GROUPS: "Strolladoù"
GROUPS_HELP: "Roll ar strolladoù gant an arveriad enno"
ADMIN_ACCESS: "Haeziñ ardoer"
SITE_ACCESS: "Haeziñ d'al lec'hienn"
INVALID_SECURITY_TOKEN: "Reveziadenn diogelroez didalvoudek"
ACTIVATE: "Gweredekaat"
TWIG_UMASK_FIX: "Ratreadur Umask"
TWIG_UMASK_FIX_HELP: "Twig a grou ar restroù krubuilh gant 0755 dre ziouer, ar ratreañ a lak anezho da 0755"
CACHE_PERMS: "Aotreoù ar c'hrubuilh"
CACHE_PERMS_HELP: "Aotreoù dre ziouer teuliad ar c'hrubuilh. 0755 pe 0775 peurvuiañ, hervez ar c'hefluniadur"
REMOVE_SUCCESSFUL: "Dilamet gant berzh"
REMOVE_FAILED: "C'hwitadenn war an dilemel"
HIDE_HOME_IN_URLS: "Kuzhat hent ar pennbajenn en URL"
HIDE_HOME_IN_URLS_HELP: "Gwiriekaat a raio n'eo ket daveet hent skoueriek an degemer gant hentoù dre ziouer ar pajennoù dindan an degemer"
TWIG_FIRST: "Keweriañ an Twig da gentañ"
TWIG_FIRST_HELP: "M'ho peus gweredekaat keweriañ ar bajenn Twig e c'hallit kefluniañ Twig evit e geweriañ a-raok pe goude ar Markdown"
SESSION_SECURE: "Diogel"
SESSION_SECURE_HELP: "M'eo gwir, diskouez a ra eo ret d'ar c'hehentiñ evit an toupin-mañ bezañ graet war un treuzkas diogel. DIWALLIT: Gweredekait an dra-se war lec'hiennoù e HTTPS nemetken"
SESSION_HTTPONLY: "HTTP nemetken"
SESSION_HTTPONLY_HELP: "M'eo gwir, diskouez a ra eo ret d'ar c'hehentiñ evit an toupin-mañ bezañ graet war un treuzkas HTTP ha n'eo ket aotreet kemmañ ar Javascript"
REVERSE_PROXY: "Proksi en tu-gin"
REVERSE_PROXY_HELP: "Gweredekait an dra-se m'hoc'h a-dreñv ur proksi en tu-gin hag ho peus diaesterioù gant an URLoù oc'h enderc'hel ur porzh didalvoudek"
INVALID_FRONTMATTER_COULD_NOT_SAVE: "Frontmatter didalvoudek, n'haller ket enrollan"
ADD_FOLDER: "Ouzhpennañ un teuliad"
PROXY_URL: "URL ar proksi"
PROXY_URL_HELP: "Enankit HERBERC'HIER pe IP ar proksi hag ar PORZH"
NOTHING_TO_SAVE: "Netra da enrollañ"
FILE_ERROR_ADD: "Degouezhet ez eus bet ur fazi en ur glask enrollañ ar restr"
FILE_ERROR_UPLOAD: "Degouezhet ez eus bet ur fazi en ur glask pellgas ar restr"
FILE_UNSUPPORTED: "Doare restr anskor"
ADD_ITEM: "Ouzhpennañ un elfenn"
FILE_TOO_LARGE: "Re leden eo ar restr evit bezañ pellgaset. %s eo an uhelañ aotreet hervez <br> hoc'h arventennoù PHP. Kreskit an arventenn PHP`post_max_size`"
INSTALLING: "O staliañ"
LOADING: "O kargañ.."
DEPENDENCIES_NOT_MET_MESSAGE: "Ret eo deoc'h staliañ an amzalc'hoù da-heul a-raok:"
ERROR_INSTALLING_PACKAGES: "Fazi en ur staliañ ar pakad(où)"
INSTALLING_DEPENDENCIES: "O staliañ an amzalc'hoù..."
INSTALLING_PACKAGES: "O staliañ ar pakad(où).."
PACKAGES_SUCCESSFULLY_INSTALLED: "Pakad(où) staliet gant berzh."
READY_TO_INSTALL_PACKAGES: "Prest da staliañ ar pakad(où)"
PACKAGES_NOT_INSTALLED: "N'eo ket stalied ar pakadoù"
PACKAGES_NEED_UPDATE: "Staliet eo ar pakadoù endeo, met re gozh eo"
PACKAGES_SUGGESTED_UPDATE: "Staliet eo ar pakadoù endeo, dereat eo an handelv, met hizivaet e vint evit ma vefec'h en handelv diwezhañ"
REMOVE_THE: "Dilemel an %s"
CONFIRM_REMOVAL: "Sur oc'h e fell deoc'h dilemel %s?"
REMOVED_SUCCESSFULLY: "%s dilamet gant berzh"
ERROR_REMOVING_THE: "Fazi en ur zilemel %s"
ADDITIONAL_DEPENDENCIES_CAN_BE_REMOVED: "An amzalc'hoù da heul a zo azgoulennet gant %s, met n'eo ket azgoulennet gant ur pakad all. Ma ne arverit ket anezho e c'hallit o dilemel adalek amañ."
READY_TO_UPDATE_PACKAGES: "Prest da hizivaat ar pakad(où)"
ERROR_UPDATING_PACKAGES: "Fazi en ur hizivaat ar pakad(où)"
UPDATING_PACKAGES: "Oc'h hizivaat ar pakad(où).."
PACKAGES_SUCCESSFULLY_UPDATED: "Pakad(où) hizivaet gant berzh."
UPDATING: "Hizivaet"
GPM_RELEASES: "Ermaeziadennoù GPM"
GPM_RELEASES_HELP: "Dibabit 'Amprouiñ' evit staliañ an handelv beta pe amprouiñ"
AUTO: "Oto"
FOPEN: "fopen"
CURL: "cURL"
STABLE: "Stabil"
TESTING: "Amprouiñ"
FRONTMATTER_PROCESS_TWIG: "Keweriañ frontmatter Twig"
FRONTMATTER_PROCESS_TWIG_HELP: "P'eo oberiant e c'hallit arverañ argemennoù kefluniañ Twig e frontmatter ar bajenn"
FRONTMATTER_IGNORE_FIELDS: "Leuskel maeziennoù Frontmatter a-gostez"
FRONTMATTER_IGNORE_FIELDS_HELP: "Maeziennoù Frontmatter a c'hall enderc'hel Twig met ne rankont ket bezañ keweriet, evel 'forms'"
PACKAGE_X_INSTALLED_SUCCESSFULLY: "Pakad %s staliet gant berzh"
ORDERING_DISABLED_BECAUSE_PARENT_SETTING_ORDER: "Urzh ar c'har, diweredekaet eo an urzhiañ"
ORDERING_DISABLED_BECAUSE_PAGE_NOT_VISIBLE: "Diwelus eo ar bajenn, diweredekaet eo an urzhiañ"
ORDERING_DISABLED_BECAUSE_TOO_MANY_SIBLINGS: "N'eo ket skoret an urzhiañ dre an ardeiñ dre ma zo ouzhpenn 200 c'hoar"
CANNOT_ADD_MEDIA_FILES_PAGE_NOT_SAVED: "EVEZHIADENN: n'hallit ket ouzhpennañ restroù media evit enrollañ ar bajenn. Klikit war 'Enrollañ' a-us"
CANNOT_ADD_FILES_PAGE_NOT_SAVED: "EVEZHIADENN: ret eo enrollañ ar bajenn a-raok pellgas restroù dezhi."
DROP_FILES_HERE_TO_UPLOAD: "Lakait ho restroù amañ pe <strong>klikit amañ</strong>"
INSERT: "Enlakaat"
UNDO: "Dizober"
REDO: "Adober"
HEADERS: "Talbennoù"
BOLD: "Tev"
ITALIC: "Stouet"
STRIKETHROUGH: "Barrennet"
SUMMARY_DELIMITER: "Bonner diverrad"
LINK: "Liamm"
IMAGE: "Skeudenn"
BLOCKQUOTE: "Meneg"
UNORDERED_LIST: "Roll dizurzh"
ORDERED_LIST: "Roll urzhiet"
EDITOR: "Embanner"
PREVIEW: "Alberz"
FULLSCREEN: "Skramm a-bezh"
NON_ROUTABLE: "Dihentus"
NON_VISIBLE: "Diwelus"
NON_PUBLISHED: "Diembannet"
CHARACTERS: "arouezioù"
PUBLISHING: "Embann"
MEDIA_TYPES: "Doareoù media"
IMAGE_OPTIONS: "Opsionoù skeudenn"
MIME_TYPE: "Doare Mime"
THUMB: "Miniaturenn"
TYPE: "Doare"
FILE_EXTENSION: "Astenn ar fichenn"
LEGEND: "Alc'hwez ar bajenn"
MEMCACHE_SERVER: "Servijer Memcached"
MEMCACHE_SERVER_HELP: "Chomlec'h ar servijer Memcached"
MEMCACHE_PORT: "Porzh Memcached"
MEMCACHE_PORT_HELP: "Porzh ar servijer Memcached"
MEMCACHED_SERVER: "Servijer Memcached"
MEMCACHED_SERVER_HELP: "Chomlec'h ar servijer Memcached"
MEMCACHED_PORT: "Porzh Memcached"
MEMCACHED_PORT_HELP: "Porzh ar servijer Memcached"
REDIS_SERVER: "Servijer Redis"
REDIS_SERVER_HELP: "Chomlec'h ar servijer Redis"
REDIS_PORT: "Porzh Redis"
REDIS_PORT_HELP: "Porzh ar servijer Redis"
ALL: "Tout"
FROM: "eus"
TO: "da"
RESOURCE_FILTER: "Sil..."
FORCE_SSL: "Forsañ SSL"
DROPZONE_CANCEL_UPLOAD: 'Nullañ ar gargamant'
DROPZONE_REMOVE_FILE: "Dilemel ar fichenn"
PREMIUM_PRODUCT: "Premium"
ERROR_SIMPLE: "Fazi simpl"
ERROR_SYSTEM: "Fazi Sistem"
NOT_SET: "Pas termenet"
PERMISSIONS: "Permisionoù"
REINSTALL_PLUGIN: "Adstaliañ ar Plugin"
REINSTALL_THEME: "Adstaliañ an Tem"
REINSTALL_THE: "Adstaliañ ar %s"
REINSTALLATION_FAILED: "Adstaliañ c'hwitet"
TOOLS: "Ostilhoù"
DIRECT_INSTALL: "Staliañ war-eeun"
2FA_CODE_INPUT: "000000"
CONFIGURATION: "Kefluniadur"
TIMEOUT: "Diamzeriñ"
TIMEOUT_HELP: "Lakaat an amzer diamzeriñ e eilennoù"
DASHBOARD: "Taolenn labour"
NOTIFICATIONS: "Notifiadenn"
+643
View File
@@ -0,0 +1,643 @@
---
PLUGIN_ADMIN:
ADMIN_BETA_MSG: "Aquesta és una versió beta! Utilitza-la en producció sota el teu propi risc..."
ADMIN_REPORT_ISSUE: "Has trobat algun problema? Sisplau, reporta'l a GitHub."
EMAIL_FOOTER: "<a href=\"https://getgrav.org\">Funcionant amb Grav</a> - El CMS de fitxers plans modern"
LOGIN_BTN: "Inicia sessió"
LOGIN_BTN_FORGOT: "Ho he oblidat"
LOGIN_BTN_RESET: "Restablir contrasenya"
LOGIN_BTN_SEND_INSTRUCTIONS: "Envia instruccions pel reset"
LOGIN_BTN_CLEAR: "Netejar formulari"
LOGIN_BTN_CREATE_USER: "Crear usuari"
LOGIN_LOGGED_IN: "S'ha iniciat sessió correctament"
LOGIN_FAILED: "No s'ha pogut iniciar sessió"
LOGGED_OUT: "S'ha tancat la sessió"
RESET_NEW_PASSWORD: "Sisplau introdueix una nova contasenya &hellip;"
RESET_LINK_EXPIRED: "L'enllaç per a restablir contrasenya ha expirat, torna a provar"
RESET_PASSWORD_RESET: "S'ha restablert la contrasenya"
RESET_INVALID_LINK: "L'enllaç per a restablir contrasenya invàl·lid, torna a provar"
FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "Les instruccions per a restablir la contrasenya s'han enviat per correu electrònic a %s"
FORGOT_FAILED_TO_EMAIL: "S'ha fallat al enviar les instruccions, sisplau torna-ho a provar"
FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL: "No es pot restablir la contrasenya per a %s, no té cap email assignat"
FORGOT_USERNAME_DOES_NOT_EXIST: "L'usuari <b>%s</b> no existeix"
FORGOT_EMAIL_NOT_CONFIGURED: "No es pot restablir la contrasenya. Aquest lloc no està configurat per enviar missatges de correu electrònic"
FORGOT_EMAIL_SUBJECT: "%s Petició de restabliment de contrasenya"
FORGOT_EMAIL_BODY: "<h1>Restabliment de contrasenya</h1><p>Benvolgut/da %1$s,</p><p>S'ha fet una petició a <b>%4$s</b> per a restablir la contrasenya.</p><p><br /><a href=\"%2$s\" class=\"btn-primary\">Fes clic aquí per a restablir la contrasenya</a><br /><br /></p><p>Altrament, copia el següent URL al teu navegador:</p><p>%2$s</p><p><br />Atentament,<br /><br />%3$s</p>"
MANAGE_PAGES: "Gestiona pàgines"
PAGES: "Pàgines"
PLUGINS: "Plugins"
PLUGIN: "Plugin"
THEMES: "Temes"
LOGOUT: "Tanca sessió"
BACK: "Enrere"
NEXT: "Següent"
PREVIOUS: "Anterior"
ADD_PAGE: "Afegeix pàgina"
MOVE: "Mou"
DELETE: "Esborra"
VIEW: "Visualitzar"
SAVE: "Desa"
NORMAL: "Normal"
EXPERT: "Expert"
EXPAND_ALL: "Expandeix tot"
COLLAPSE_ALL: "Col·lapsa tot"
ERROR: "Error"
CLOSE: "Tanca"
CANCEL: "Cancel·la"
CONTINUE: "Continua"
MODAL_DELETE_PAGE_CONFIRMATION_REQUIRED_TITLE: "Confirmació requerida"
MODAL_CHANGED_DETECTED_TITLE: "Canvis detectats"
MODAL_CHANGED_DETECTED_DESC: "Tens canvis no desats. Estàs segur que vols sortir sense desar?"
MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_TITLE: "Confirmació requerida"
MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_DESC: "Estàs segur que vols eliminar aquest fitxer? Aquesta acció no es pot desfer."
ADD_FILTERS: "Afegeix filtres"
SEARCH_PAGES: "Cerca pàgines"
VERSION: "Versió"
WAS_MADE_WITH: "Es va fer amb"
BY: "Per"
UPDATE_THEME: "Actualitza tema"
UPDATE_PLUGIN: "Actualitza plugin"
OF_THIS_THEME_IS_NOW_AVAILABLE: "d'aquest tema està disponible"
OF_THIS_PLUGIN_IS_NOW_AVAILABLE: "d'aquest plugin està disponible"
AUTHOR: "Autor/a"
HOMEPAGE: "Pàgina d'inici"
DEMO: "Demo"
BUG_TRACKER: "Rastrejador d'errors"
KEYWORDS: "Paraules clau"
LICENSE: "Llicència"
DESCRIPTION: "Descripció"
README: "Llegiu-me"
REMOVE_THEME: "Elimina tema"
INSTALL_THEME: "Instal·la tema"
THEME: "Tema"
BACK_TO_THEMES: "Torna a Temes"
BACK_TO_PLUGINS: "Torna a Plugins"
CHECK_FOR_UPDATES: "Cerca actualitzacions"
ADD: "Afegeix"
CLEAR_CACHE: "Neteja la memòria cache"
CLEAR_CACHE_ALL_CACHE: "Tota la cache"
CLEAR_CACHE_ASSETS_ONLY: "Només assets"
CLEAR_CACHE_IMAGES_ONLY: "Només imatges"
CLEAR_CACHE_CACHE_ONLY: "Només cache"
CLEAR_CACHE_TMP_ONLY: "Només tmp"
UPDATES_AVAILABLE: "Hi ha actualizacions disponibles"
DAYS: "Dies"
UPDATE: "Actualitza"
BACKUP: "Còpia de seguretat"
BACKUPS: "Còpia de seguretat"
BACKUP_NOW: "Fer còpia de seguretat ara"
BACKUPS_STATS: "Estadístiques de còpia de seguretat"
BACKUPS_HISTORY: "Historial de còpies de seguretat"
BACKUPS_PURGE_CONFIG: "Configuració de depuració de còpia de seguretat"
BACKUPS_PROFILES: "Perfils de còpia de seguretat"
BACKUPS_COUNT: "Nombre de còpies de seguretat"
BACKUPS_PROFILES_COUNT: "Nombre de perfils"
BACKUPS_TOTAL_SIZE: "Espai utilitzat"
STATISTICS: "Estadístiques"
TODAY: "Avui"
WEEK: "Setmana"
MONTH: "Mes"
LATEST_PAGE_UPDATES: "Últimes pàgines actualitzades"
MAINTENANCE: "Manteniment"
UPDATED: "Actualitzat"
MON: "Dl."
TUE: "Dt."
WED: "Dc."
THU: "Dj."
FRI: "Dv."
SAT: "Ds."
SUN: "Dg."
COPY: "Copia"
EDIT: "Edita"
CREATE: "Crea"
GRAV_ADMIN: "Administració Grav"
GRAV_OFFICIAL_PLUGIN: "Plugin oficial de Grav"
GRAV_OFFICIAL_THEME: "Tema oficial de Grav"
PLUGIN_SYMBOLICALLY_LINKED: "Aquest plugin està lligat simbòlicament. Les actualitzacions no seran detectades."
THEME_SYMBOLICALLY_LINKED: "Aquest tema està lligat simbòlicament. Les actualitzacions no seran detectades"
REMOVE_PLUGIN: "Elimina plugin"
INSTALL_PLUGIN: "Instal·la plugin"
AVAILABLE: "Disponible"
INSTALLED: "Instal·lat"
INSTALL: "Instal·la"
ACTIVE_THEME: "Tema actiu"
SWITCHING_TO: "Canviant a"
SWITCHING_TO_DESCRIPTION: "Al canviar a un tema diferent, no es garanteix que tots els estils de pàgina siguin compatibles, potencialment, pot haver-hi errors al intentar carregar aquestes pàgines."
SWITCHING_TO_CONFIRMATION: "Vols continuar i canviar de tema"
CREATE_NEW_USER: "Crea nou usuari"
REMOVE_USER: "Elimina usuari"
ACCESS_DENIED: "Accés denegat"
ACCOUNT_NOT_ADMIN: "el teu compte no té permisos d'administrador"
PHP_INFO: "Informació PHP"
INSTALLER: "Instal·lador"
AVAILABLE_THEMES: "Temes disponibles"
AVAILABLE_PLUGINS: "Plugins disponibles"
INSTALLED_THEMES: "Temes instal·lats"
INSTALLED_PLUGINS: "Plugins instal·lats"
BROWSE_ERROR_LOGS: "Examina registres d'errors"
SITE: "Lloc web"
INFO: "Info"
SYSTEM: "Sistema"
USER: "Usuari"
ADD_ACCOUNT: "Afegeix compte"
SWITCH_LANGUAGE: "Canvia l'idioma"
SUCCESSFULLY_ENABLED_PLUGIN: "El plugin s'ha activat correctament"
SUCCESSFULLY_DISABLED_PLUGIN: "El plugin s'ha desactivat correctament"
SUCCESSFULLY_CHANGED_THEME: "S'ha canviat el tema per defecte correctament"
INSTALLATION_FAILED: "La instal·lació ha fallat"
INSTALLATION_SUCCESSFUL: "Instal·lació satisfactòria"
UNINSTALL_FAILED: "Desinstal·lació fallida"
UNINSTALL_SUCCESSFUL: "Desinstal·lació satisfactòria"
SUCCESSFULLY_SAVED: "Desat satisfactòriament"
SUCCESSFULLY_COPIED: "Copiat satisfactòriament"
REORDERING_WAS_SUCCESSFUL: "Reordenació satisfactòria"
SUCCESSFULLY_DELETED: "Eliminat satisfactòriament"
SUCCESSFULLY_SWITCHED_LANGUAGE: "Idioma canviat satisfactòriament"
INSUFFICIENT_PERMISSIONS_FOR_TASK: "No tens permisos suficients per a la tasca"
CACHE_CLEARED: "Memòria cache esborrada"
METHOD: "Mètode"
ERROR_CLEARING_CACHE: "Error al esborrar cache"
AN_ERROR_OCCURRED: "S'ha produït un error"
YOUR_BACKUP_IS_READY_FOR_DOWNLOAD: "La teva còpia de seguretat està llesta per a descarregar"
DOWNLOAD_BACKUP: "Descarrega còpia de seguretat"
PAGES_FILTERED: "Pàgines filtrades"
NO_PAGE_FOUND: "No s'han trobat pàgines"
INVALID_PARAMETERS: "Els paràmetres són invàlids"
NO_FILES_SENT: "No s'han enviat fitxers"
EXCEEDED_FILESIZE_LIMIT: "S'ha excedit el límit de tamany de fitxer de la configuració de PHP"
UNKNOWN_ERRORS: "Hi ha hagut errors desconeguts"
EXCEEDED_GRAV_FILESIZE_LIMIT: "S'ha excedit el límit de tamany de fitxer de la configuració de Grav"
UNSUPPORTED_FILE_TYPE: "Tipus de fitxer no suportat"
FAILED_TO_MOVE_UPLOADED_FILE: "S'ha fallat al moure el fitxer carregat."
FILE_UPLOADED_SUCCESSFULLY: "S'ha carregat el fitxer amb èxit"
FILE_DELETED: "S'ha esborrat el fitxer"
FILE_COULD_NOT_BE_DELETED: "No s'ha pogut esborrar el fitxer"
FILE_NOT_FOUND: "No s'ha trobat el fitxer"
NO_FILE_FOUND: "No s'han trobat fitxers"
GRAV_WAS_SUCCESSFULLY_UPDATED_TO: "Grav ha estat actualitzat amb èxit a"
GRAV_UPDATE_FAILED: "Ha fallat l'actualització de Grav"
EVERYTHING_UPDATED: "Tot està actualitzat"
UPDATES_FAILED: "Han fallat les actualitzacions"
AVATAR_BY: "Avatar per"
LAST_BACKUP: "Última còpia de seguretat"
FULL_NAME: "Nom complet"
USERNAME: "Nom d'usuari"
EMAIL: "Email"
USERNAME_EMAIL: "Nom d'usuari o correu electrònic"
PASSWORD: "Contrasenya"
PASSWORD_CONFIRM: "Confirma contrasenya"
TITLE: "Títol"
LANGUAGE: "Llengua"
ACCOUNT: "Compte d'usuari"
EMAIL_VALIDATION_MESSAGE: "Ha de ser una adreça de correu electrònic vàl·lida"
PASSWORD_VALIDATION_MESSAGE: "La contrasenya ha de contenir almenys un número i una lletra majúscula i minúscula, i almenys 8 o més caràcters"
LANGUAGE_HELP: "Estableix la llengua preferida"
MEDIA: "Mèdia"
DEFAULTS: "Per defecte"
SITE_TITLE: "Títol del lloc"
SITE_TITLE_PLACEHOLDER: "Títol a tot el lloc"
SITE_TITLE_HELP: "Títol per defecte pel teu lloc, sovint utilitzat en els temes"
SITE_DEFAULT_LANG: "Llenguatge per defecte"
SITE_DEFAULT_LANG_PLACEHOLDER: "Llenguatge per defecte per a ser utilitzat per l'etiqueta del tema <HTML>"
SITE_DEFAULT_LANG_HELP: "Llenguatge per defecte per a ser utilitzat per l'etiqueta del tema <HTML>"
DEFAULT_AUTHOR: "Autor/a per defecte"
DEFAULT_AUTHOR_HELP: "Un nom d'autor/a per defecte, algunes vegades utilitzat en temes o contingut de les pàgines"
DEFAULT_EMAIL: "Email per defecte"
DEFAULT_EMAIL_HELP: "Un correu electrònic per referenciar en temes o pàgines"
TAXONOMY_TYPES: "Tipus de taxonomia"
TAXONOMY_TYPES_HELP: "Els tipus de taxonomia han de definir-se aquí si es desitja utilitzar-les en pàgines"
PAGE_SUMMARY: "Resum de pàgina"
ENABLED: "Habilitat"
ENABLED_HELP: "Habilita resum de pàgina (el resum retorna el mateix que el contingut de la pàgina)"
'YES': "Sí"
'NO': "No"
SUMMARY_SIZE: "Mida del resum"
SUMMARY_SIZE_HELP: "La quantitat de caràcters d'una pàgina a utilitzar com a resum del contingut"
FORMAT: "Format"
FORMAT_HELP: "curt = utilitza la primera ocurrència del delimitador o mida; llarg = s'ignorarà el delimitador del resum"
SHORT: "Curt"
LONG: "Llarg"
DELIMITER: "Delimitador"
DELIMITER_HELP: "El delimitador de resum (per defecte '===')"
METADATA: "Metadades"
METADATA_HELP: "Valors de metadades per defecte que es mostraran a cada pàgina excepte si es sobreescriuen a la pàgina"
NAME: "Nom"
CONTENT: "Contingut"
REDIRECTS_AND_ROUTES: "Redireccions i rutes"
CUSTOM_REDIRECTS: "Redireccions personalitzades"
CUSTOM_REDIRECTS_HELP: "rutes per redirigir a altres pàgines. Substitució de Regex estàndard és vàl·lida"
CUSTOM_REDIRECTS_PLACEHOLDER_KEY: "/el/teu/àlies"
CUSTOM_REDIRECTS_PLACEHOLDER_VALUE: "/la/teva/redirecció"
CUSTOM_ROUTES: "Rutes personalitzades"
CUSTOM_ROUTES_HELP: "rutes a àlies a altres pàgines. Substitució de Regex estàndard és vàl·lida"
CUSTOM_ROUTES_PLACEHOLDER_KEY: "/el/teu/àlies"
CUSTOM_ROUTES_PLACEHOLDER_VALUE: "/la/teva/ruta"
FILE_STREAMS: "Streams de fitxers"
DEFAULT: "Per defecte"
PAGE_MEDIA: "Contingut multimèdia de la pàgina"
OPTIONS: "Opcions"
PUBLISHED: "Publicat"
PUBLISHED_HELP: "Per defect, una pàgina es publica excepte que estableixis explícitament 'published': false o posant una publish_date al futur o una unpublish_date al passat"
DATE: "Data"
DATE_HELP: "La variable data permet definir específicament una data associada a aquesta pàgina."
PUBLISHED_DATE: "Data de publicació"
PUBLISHED_DATE_HELP: "Pots proporcionar una data per provocar automàticament la publicació."
UNPUBLISHED_DATE: "Data de despublicació"
UNPUBLISHED_DATE_HELP: "Pots proporcionar una data per provocar automàticament la despublicació."
ROBOTS: "Robots"
TAXONOMIES: "Taxonomies"
TAXONOMY: "Taxonomia"
ADVANCED: "Avançat"
SETTINGS: "Configuració"
FOLDER_NUMERIC_PREFIX: "Prefix numèric carpeta"
FOLDER_NUMERIC_PREFIX_HELP: "Prefix numèric que proporciona ordenació manual i implica la visibilitat"
FOLDER_NAME: "Nom de la carpeta"
FOLDER_NAME_HELP: "El nom de carpeta que s'emmagatzemarà al sistema de fitxers per a aquesta pàgina"
PARENT: "Pare"
DEFAULT_OPTION_ROOT: "-Root-"
DEFAULT_OPTION_SELECT: "- selecciona -"
DISPLAY_TEMPLATE: "Plantilla a mostrar"
DISPLAY_TEMPLATE_HELP: "El tipus de pàgina que es tradueix a la plantilla de Twig en què es renderitza la pàgina"
ORDERING: "Ordenació"
PAGE_ORDER: "Ordre de pàgines"
OVERRIDES: "Sobreescriu"
MENU: "Menú"
MENU_HELP: "El text a utilitzar en un menú. Si no s'estableix, s'utilitzarà el Títol."
SLUG: "Slug"
SLUG_HELP: "La variable slug permet definir específicament la part de l'URL que correspon a la pàgina"
SLUG_VALIDATE_MESSAGE: "L'slug ha de contenir només caràcters alfanumèrics en minúscules i guions"
PROCESS: "Processa"
PROCESS_HELP: "Control de com es processen les pàgines. Configurable per a pàgina enlloc de globalment"
DEFAULT_CHILD_TYPE: "Tipus de fill per defecte"
USE_GLOBAL: "Ús global"
ROUTABLE: "Accessible"
ROUTABLE_HELP: "Si aquesta pàgina és accessible des d'una URL"
CACHING: "Caching"
VISIBLE: "Visible"
VISIBLE_HELP: "Determina si una pàgina és visible en la navegació."
DISABLED: "Deshabilitat"
ITEMS: "Ítems"
ORDER_BY: "Ordena per"
ORDER: "Ordena"
FOLDER: "Carpeta"
ASCENDING: "Ascendent"
DESCENDING: "Descendent"
PAGE_TITLE: "Títol de pàgina"
PAGE_TITLE_HELP: "El títol de la pàgina"
PAGE: "Pàgina"
FRONTMATTER: "Frontmatter"
FILENAME: "Nom de fitxer"
PARENT_PAGE: "Pàgina pare"
HOME_PAGE: "Pàgina d'inici"
HOME_PAGE_HELP: "La pàgina que utilitzarà Grav com a destinació per defecte"
DEFAULT_THEME: "Tema per defecte"
DEFAULT_THEME_HELP: "Estableix el tema per defecte que utilitzarà Grav (per defecte és Antimatter)"
TIMEZONE: "Zona horària"
TIMEZONE_HELP: "Sobreescriu la zona horària del servidor"
SHORT_DATE_FORMAT: "Format de data curt"
SHORT_DATE_FORMAT_HELP: "Estableix el format de data curt que poden utilitzar els temes"
LONG_DATE_FORMAT: "Format de data llarg"
LONG_DATE_FORMAT_HELP: "Estableix el format de data llarg que poden utilitzar els temes"
DEFAULT_ORDERING: "Ordre per defecte"
DEFAULT_ORDERING_HELP: "Les pàgines de la llista seran generades utilitzant aquest ordre excepte que se sobreescrigui"
DEFAULT_ORDERING_DEFAULT: "Per defecte - basat en el nom de la carpeta"
DEFAULT_ORDERING_FOLDER: "Carpeta - basat en el nom de carpeta sense prefix"
DEFAULT_ORDERING_TITLE: "Títol - basat en el camp de títol de la capçalera"
DEFAULT_ORDERING_DATE: "Data - basat en el camp data de la capçalera"
DEFAULT_ORDER_DIRECTION: "Direcció d'ordre per defecte"
DEFAULT_ORDER_DIRECTION_HELP: "La direcció de les pàgines en una llista"
DEFAULT_PAGE_COUNT: "Compte de pàgina per defecte"
DEFAULT_PAGE_COUNT_HELP: "Nombre màxim de compte de pàgines en una llista"
DATE_BASED_PUBLISHING: "Publicació basada en la data"
DATE_BASED_PUBLISHING_HELP: "(Des)publicar automàticament posts basant-se en la seva data"
EVENTS: "Esdeveniments"
EVENTS_HELP: "Habilita o inhabilita esdeveniments concrets. Deshabilitant-los pot trencar plugins"
REDIRECT_DEFAULT_ROUTE: "Ruta de redirecció per defecte"
REDIRECT_DEFAULT_ROUTE_HELP: "Redirigir automàticament a la ruta per defecte d'una pàgina"
LANGUAGES: "Idiomes"
SUPPORTED: "Suportat"
SUPPORTED_HELP: "Llista separada per comes de codis d'idioma de 2 lletres (per exemple 'en,fr,de')"
TRANSLATIONS_FALLBACK: "Fallback de traduccions"
TRANSLATIONS_FALLBACK_HELP: "Fallback en traduccions suportades si l'idioma actiu no existeix"
ACTIVE_LANGUAGE_IN_SESSION: "Idioma actiu a la sessió"
ACTIVE_LANGUAGE_IN_SESSION_HELP: "Emmagatzema l'idioma actiu a la sessió"
HTTP_HEADERS: "Capçaleres HTTP"
EXPIRES: "Caduca"
EXPIRES_HELP: "Estableix la capçalera d'expiració. El valor és en segons."
LAST_MODIFIED: "Darrera modificació"
LAST_MODIFIED_HELP: "Estableix la capçalera de darrera modificació que pot optimitzar el proxy i la cache del navegador"
ETAG: "ETag"
ETAG_HELP: "Estableix la capçalera d'etag per ajudar a identificar quan una pàgina ha estat modificada"
VARY_ACCEPT_ENCODING: "Variar accept encoding"
VARY_ACCEPT_ENCODING_HELP: "Estableix la capçalera 'Vary: Accept Encoding' per ajudar amb el proxy i la cache CDN"
MARKDOWN_EXTRA_HELP: "Habilita suport per defecte per a Markdown Extra - https://michelf.ca/projects/php-markdown/extra/"
AUTO_LINE_BREAKS: "Salts de línia automàtics"
AUTO_LINE_BREAKS_HELP: "Habilita el suport per a salts de línia automàtics a Markdown"
AUTO_URL_LINKS: "Enllaços URL automàtics"
AUTO_URL_LINKS_HELP: "Habilita l'autoconversió d'URLs a hyperlinks HTML"
ESCAPE_MARKUP: "Escape markup"
ESCAPE_MARKUP_HELP: "Escape markup tags en entitats HTML"
CACHING_HELP: "Interruptor ON/OFF global per habilitar/deshabilitar cache de Grav"
CACHE_CHECK_METHOD: "Mètode de verificació de cache"
CACHE_CHECK_METHOD_HELP: "Seleccionar el mètode que utilitza Grav per comprovar si s'han modificat arxius de pàgina."
CACHE_DRIVER: "Contolador de cache"
CACHE_DRIVER_HELP: "Selecciona quin controlador de cache de Grav cal usar. 'Auto Detect' intenta trobar el millor per a tu"
CACHE_PREFIX: "Prefix de cache"
CACHE_PREFIX_HELP: "Un identificador per part de la clau de Grav. No la canviïs excepte que sàpigues el que estàs fent."
CACHE_PREFIX_PLACEHOLDER: "Derivat de l'URL base (sobreescriu introduint strings aleatòris)"
LIFETIME: "Cicle de vida"
LIFETIME_HELP: "Defineix el cicle de vida de la cache en segons. 0 = infinit"
GZIP_COMPRESSION: "Compressió gzip"
GZIP_COMPRESSION_HELP: "Habilita la compressió GZip de la pàgina de Grav per augmentar el rendiment."
TWIG_TEMPLATING: "Plantilles de Twig"
TWIG_CACHING: "Cache de Twig"
TWIG_CACHING_HELP: "Controla el mecanisme de cache de Twig. Deixa'l habilitat per a millor rendiment."
TWIG_DEBUG: "Depuració de Twig"
TWIG_DEBUG_HELP: "Permet l'opció de no carregar l'extensió de depuració de Twig"
DETECT_CHANGES: "Detectar canvis"
DETECT_CHANGES_HELP: "Twig recompilarà automàticament la cache de Twig si detecta canvis a les plantilles de Twig"
AUTOESCAPE_VARIABLES: "Variables d'autoescape"
AUTOESCAPE_VARIABLES_HELP: "Autoescapa totes les variables. Això probablement trencarà el teu lloc"
ASSETS: "Assets"
CSS_PIPELINE: "CSS pipeline"
CSS_PIPELINE_HELP: "El CSS pipeline és l'unificació de diversos recursos CSS en un sol fitxer"
CSS_PIPELINE_INCLUDE_EXTERNALS: "Inclou fitxers externs en el CSS pipeline"
CSS_PIPELINE_INCLUDE_EXTERNALS_HELP: "A vegades, algunes URLs externes tenen referències relatives de fitxer i no s'hi hauria de fer pipelining"
CSS_PIPELINE_BEFORE_EXCLUDES: "Processar pimer el CSS pipeline"
CSS_PIPELINE_BEFORE_EXCLUDES_HELP: "Intrepreta el CSS pipeline abans de qualsevol altra referència CSS que no estigui inclosa"
CSS_MINIFY: "Minifica CSS"
CSS_MINIFY_HELP: "Minifica el CSS durant el pipelining"
CSS_MINIFY_WINDOWS_OVERRIDE: "Sobreesciu la minificació de CSS a Windows"
CSS_MINIFY_WINDOWS_OVERRIDE_HELP: "Sobreescriu la minificació en plataformes Windows. Fals per defecte degut a ThreadStackSize"
CSS_REWRITE: "Reescriptura CSS"
CSS_REWRITE_HELP: "Reescriu qualsevol URL relativa de CSS durant el pipelining"
JAVASCRIPT_PIPELINE: "JavaScript pipeline"
JAVASCRIPT_PIPELINE_HELP: "El JS pipeline és l'unificació de diversos recursos JS en un sol fitxer"
JAVASCRIPT_PIPELINE_INCLUDE_EXTERNALS: "Inclou fitxers externs en el JS pipeline"
JAVASCRIPT_PIPELINE_INCLUDE_EXTERNALS_HELP: "A vegades, les URLs externes tenen referències d'arxiu i no s'hi hauria de fer pipelining"
JAVASCRIPT_PIPELINE_BEFORE_EXCLUDES: "Interpreta primer el JS pipeline"
JAVASCRIPT_PIPELINE_BEFORE_EXCLUDES_HELP: "Interpreta el JS pipeline abans de qualsevol altra referència JS que no estigui inclosa"
JAVASCRIPT_MINIFY: "Minificació JavaScript"
JAVASCRIPT_MINIFY_HELP: "Minifica el JS durant el pipelining"
ENABLED_TIMESTAMPS_ON_ASSETS: "Habilita les marques de temps als assets"
ENABLED_TIMESTAMPS_ON_ASSETS_HELP: "Habilita les marques de temps a assets"
COLLECTIONS: "Col·leccions"
ERROR_HANDLER: "Controlador d'errors"
DISPLAY_ERRORS: "Mostra errors"
DISPLAY_ERRORS_HELP: "Mostra pàgina d'error full backstrace-style"
LOG_ERRORS: "Registre d'errors"
LOG_ERRORS_HELP: "Registre d'errors a la carpeta /logs"
DEBUGGER: "Depurador"
DEBUGGER_HELP: "Habilita depurador de Grav i les configuracions següents"
DEBUG_TWIG: "Depuració de Twig"
DEBUG_TWIG_HELP: "Habilita la depuració de plantilles de Twig"
SHUTDOWN_CLOSE_CONNECTION: "Al apagar tanca la connexió"
SHUTDOWN_CLOSE_CONNECTION_HELP: "Tanca la connexió abans de cridar onShutdown(). False per a la depuració"
DEFAULT_IMAGE_QUALITY: "Qualitat d'imatge per defecte"
DEFAULT_IMAGE_QUALITY_HELP: "Qualitat d'imatge per defecte per a ser utilitzada quan es remostri o es guardi a cache les imatges (85%)"
CACHE_ALL: "Guardar totes les imatges a cache"
CACHE_ALL_HELP: "Guarda totes les imatges al sistema cache de Grav fins i tot si no tenen cap manipulació de mèdia"
IMAGES_DEBUG: "Marca d'aigua de depuració"
IMAGES_DEBUG_HELP: "Mostra un overlay sobre les imatges indicant la profunditat de píxels quan es treballa amb retina, per exemple"
UPLOAD_LIMIT: "Límit de tamany de fitxer"
UPLOAD_LIMIT_HELP: "Defineix el tamany màxim de càrrega en bytes (0 = il·limitat)"
ENABLE_MEDIA_TIMESTAMP: "Permet timestamps en fitxers multimèdia"
ENABLE_MEDIA_TIMESTAMP_HELP: "Afegeix un timestamp basat en la data d'última modificació a cada element multimèdia"
SESSION: "Sessió"
SESSION_ENABLED_HELP: "Habilita suport de sessions a Grav"
SESSION_NAME_HELP: "Un identificador usat per formar el nom de la galeta de sessió"
ABSOLUTE_URLS: "URLs absolutes"
ABSOLUTE_URLS_HELP: "URLs absolutes o relatives per a 'base_url'"
PARAMETER_SEPARATOR: "Separador de paràmetres"
PARAMETER_SEPARATOR_HELP: "Separador per a paràmetres passats que es poden canviar d'Apache a Windows"
TASK_COMPLETED: "Tasca completada"
EVERYTHING_UP_TO_DATE: "Tot està actualitzat"
UPDATES_ARE_AVAILABLE: "hi ha actualitzacions disponibles"
IS_AVAILABLE_FOR_UPDATE: "està disponible per a l'actualització"
IS_NOW_AVAILABLE: "ja està disponible"
CURRENT: "Actual"
UPDATE_GRAV_NOW: "Actualitza Grav ara"
GRAV_SYMBOLICALLY_LINKED: "Grav està lligat simbòlicament. Les actualitzacions no estaran disponibles"
UPDATING_PLEASE_WAIT: "Actualitzant... descarregant, espera sisplau"
OF_THIS: "d'aquest/a"
OF_YOUR: "del teu"
HAVE_AN_UPDATE_AVAILABLE: "té disponible una actualització"
SAVE_AS: "Desa com a"
MODAL_DELETE_PAGE_CONFIRMATION_REQUIRED_DESC: "Esteu segur que voleu suprimir aquesta pàgina i tots els seus fills? Si la pàgina es tradueix en altres llengües, les traduccions es mantindran i han de ser esborrades per separat. En cas contrari la carpeta de la pàgina serà eliminada juntament amb les seves subpàgines. Aquesta acció no es pot desfer."
AND: "i"
UPDATE_AVAILABLE: "Actualització disponible"
METADATA_KEY: "Clau (p. ex. 'paraules clau')"
METADATA_VALUE: "Valor (per exemple, \"Blog, Grav\")"
USERNAME_HELP: "El nom d'usuari ha de tenir entre 3 i 16 caràcters, incloent minúscules, números, guions i guions baixos. Lletres majúscules, espais i caràcters especials no estan permesos"
FULLY_UPDATED: "Completament actualitzat"
SAVE_LOCATION: "Desa a la ubicació"
PAGE_FILE: "Plantilla de pàgina"
PAGE_FILE_HELP: "Nom d'arxiu de la plantilla de pàgina i plantilla de visualització per defecte"
NO_USER_ACCOUNTS: "No s'han trobat comptes d'usuari, sisplau crea'n una..."
REDIRECT_TRAILING_SLASH: "Redirigeix barra final"
REDIRECT_TRAILING_SLASH_HELP: "Realitza una redirecció 301 en lloc de manteniment transparent de barra final."
DEFAULT_DATE_FORMAT: "Format de data de pàgina"
DEFAULT_DATE_FORMAT_HELP: "Format de data de pàgina utilitzat per Grav. Per defecte, Grav intenta endivinar el format de data, tot i això pots especificar un format utilitzant la sintaxi de data de PHP (p.e., Y-m-d H:i)"
DEFAULT_DATE_FORMAT_PLACEHOLDER: "Endevina automàticament"
IGNORE_FILES: "Ignora fitxers"
IGNORE_FILES_HELP: "Arxius específics a ignorar al processar pàgines"
IGNORE_FOLDERS: "Ignora carpetes"
IGNORE_FOLDERS_HELP: "Carpetes específiques a ignorar al processar pàgines"
HTTP_ACCEPT_LANGUAGE: "Estableix la llengua a partir del navegador"
HTTP_ACCEPT_LANGUAGE_HELP: "Pots optar per intentar establir la llengua basant-se en l'etiqueta de la capçalera 'http_accept_language' en el navegador"
OVERRIDE_LOCALE: "Sobreescriu la configuració local"
OVERRIDE_LOCALE_HELP: "Sobreescriu la configuració local en PHP basant-se en la llengua actual"
REDIRECT: "Redirecció de pàgina"
REDIRECT_HELP: "Escriu una ruta de pàgina o URL externa per aqueta pàgina a redirigir a per exemple, '/alguna/ruta' o 'https://algunlloc.com'"
PLUGIN_STATUS: "Estat del plugin"
INCLUDE_DEFAULT_LANG: "Inclou llengua predeterminada"
INCLUDE_DEFAULT_LANG_HELP: "Això sobreposarà totes les URLs amb la llengua per defecte. Per exemple, 'ca/blog/el-meu-post'"
ALLOW_URL_TAXONOMY_FILTERS: "Filtres de taxonomia d'URL"
ALLOW_URL_TAXONOMY_FILTERS_HELP: "Col·lecions basades en pàgines que et permeten filtrar per '/taxonomia:valor'."
REDIRECT_DEFAULT_CODE: "Codi de redirecció per defecte"
REDIRECT_DEFAULT_CODE_HELP: "El codi d'estat HTTP per utilitzar en redireccions"
IGNORE_HIDDEN: "Ignora ocults"
IGNORE_HIDDEN_HELP: "Ignora tots els fitxers i carpetes que comencin amb un punt"
WRAPPED_SITE: "Lloc encapsulat"
WRAPPED_SITE_HELP: "Per a que els temes/plugins sàpiguen si Grav està encapsulat en una altra plataforma"
FALLBACK_TYPES: "Tipus de fallback permesos"
FALLBACK_TYPES_HELP: "Tipus de fitxers permesos que es poden trobar si s'accedeix per la ruta de la pàgina. Per defecte, qualsevol tipus de mèdia compatible."
INLINE_TYPES: "Tipus de fallback en línia"
INLINE_TYPES_HELP: "Una llista de tipus d'arxius que han de ser mostrats en línia enlloc de descarregats"
APPEND_URL_EXT: "Afegeix extensió de direcció URL"
APPEND_URL_EXT_HELP: "Afegirà una extensió personalitzarà a l'URL de la pàgina. Tingues en compte que això farà que Grav busqui la plantilla '<template>'.<extension>.twig'"
PAGE_MODES: "Modes de pàgina"
PAGE_TYPES: "Tipus de pàgina"
ACCESS_LEVELS: "Nivells d'accés"
GROUPS: "Grups"
GROUPS_HELP: "Llista de grups dels quals l'usuari en forma part"
ADMIN_ACCESS: "Accés d'administrador"
SITE_ACCESS: "Accés al lloc"
INVALID_SECURITY_TOKEN: "Clau de seguretat invàl·lida"
ACTIVATE: "Activa"
TWIG_UMASK_FIX: "Corregeix Umask"
TWIG_UMASK_FIX_HELP: "Per defecte Twig crea arxius cache com a 0755, la correcció ho canvia a 0775"
CACHE_PERMS: "Permisos de cache"
CACHE_PERMS_HELP: "Permisos de carpeta de cache per defecte. Normalment 0755 o 0775 segons la configuració"
REMOVE_SUCCESSFUL: "Eliminació amb èxit"
REMOVE_FAILED: "No s'ha pogut eliminar"
HIDE_HOME_IN_URLS: "Amaga ruta de la pàgina inicial en les URLs"
HIDE_HOME_IN_URLS_HELP: "S'assegurarà que les rutes per defecte de qualsevol pàgina sota la pàgina inicial no facin referència a la ruta regular de la pàgina inicial"
TWIG_FIRST: "Processa Twig primer"
TWIG_FIRST_HELP: "Si el processament de pàgina de Twig està habilitat, es pot configurar que Twig faci el processament després de markdown"
SESSION_SECURE: "Segur"
SESSION_SECURE_HELP: "Si és cert, indica que la comunicació per aquesta cookie ha de ser sobre una connexió encriptada. ALERTA: Habilita aquesta opicó en llocs que funcionen exclusivament en HTTPS"
SESSION_HTTPONLY: "Només HTTP"
SESSION_HTTPONLY_HELP: "Si és cert, indica que les cookies hauran de ser utilitzades només sobre HTTP, i les modificacions de JavaScript no estan permeses"
REVERSE_PROXY: "Proxy invers"
REVERSE_PROXY_HELP: "Habilita-ho si estàs darrere d'un proxy invers i tens problemes amb URLs que continguin ports incorrectes"
INVALID_FRONTMATTER_COULD_NOT_SAVE: "Frontmatter invàlid, no s'ha pogut desar"
ADD_FOLDER: "Afegeix carpeta"
PROXY_URL: "URL del proxy"
PROXY_URL_HELP: "Escriu el HOST proxy o IP i PORt"
NOTHING_TO_SAVE: "Res a desar"
FILE_ERROR_ADD: "S'ha produït un error mentre s'intentava afegir el fitxer"
FILE_ERROR_UPLOAD: "S'ha produït un error mentre s'intentava carregar el fitxer"
FILE_UNSUPPORTED: "Tipus de fitxer no suportat"
ADD_ITEM: "Afegeix ítem"
FILE_TOO_LARGE: "El fitxers és massa gran per carregar-se, el màxim permès és %s segons<br>la teva configuració PHP. Incrementa la opció PHP 'post_max_size'"
INSTALLING: "Instal·lant"
LOADING: "Carregant..."
DEPENDENCIES_NOT_MET_MESSAGE: "Les següents dependències han de ser cobertes primer:"
ERROR_INSTALLING_PACKAGES: "S'ha produït un error mentre s'instal·lava el(s) paquet(s)"
INSTALLING_DEPENDENCIES: "Instal·lant dependències..."
INSTALLING_PACKAGES: "Instal·lant paquet(s)..."
PACKAGES_SUCCESSFULLY_INSTALLED: "Paquet(s) instal·lat(s) correctament."
READY_TO_INSTALL_PACKAGES: "Preparat per instal·lar el(s) paquet(s)"
PACKAGES_NOT_INSTALLED: "No s'han instal·lat els paquets"
PACKAGES_NEED_UPDATE: "Els paquets ja estaven instal·lats, però eren massa antics"
PACKAGES_SUGGESTED_UPDATE: "Els paquets ja estaven instal·lats, i la versió està bé, però s'actualitzaran per tal d'estar al dia"
REMOVE_THE: "Elimina el %s"
CONFIRM_REMOVAL: "Estàs segur que vols eliminar aquest %s?"
REMOVED_SUCCESSFULLY: "S'ha eliminat %s correctament"
ERROR_REMOVING_THE: "S'ha produït un error eliminant el %s"
ADDITIONAL_DEPENDENCIES_CAN_BE_REMOVED: "El %s requeria les següents dependències, les quals no són requerides per cap altre paquet instal·lat. Si no les estàs utilitzant, les pots eliminar directament des d'aquí."
READY_TO_UPDATE_PACKAGES: "Preparat per actualizar el(s) paquet(s)"
ERROR_UPDATING_PACKAGES: "S'ha produït un error al actualitzar el(s) paquet(s)"
UPDATING_PACKAGES: "Actualitzant paquet(s)..."
PACKAGES_SUCCESSFULLY_UPDATED: "Paquet(s) actualitzat(s) correctament."
UPDATING: "Actualitzant"
GPM_RELEASES: "Versions GPM"
GPM_RELEASES_HELP: "Escull 'Provant' per instal·lar versions beta o en proves"
GPM_METHOD: "Mètode de recuperació remota"
GPM_METHOD_HELP: "Quan es posa a Automàtic, Grav determinarà si fopen està disponible i l'utilitzarà, d'altra forma s'utilitzarà cURL. Per a forçar l'ús d'un o altre, canvia la configuració."
GPM_VERIFY_PEER: "Verificació a distància de peer (SSL)"
GPM_VERIFY_PEER_HELP: "Alguns proveïdors semblen fallar en la verificació del certificat SSL de getgrav.org, el qual causa que GPM no funcioni. Si aquest és el teu cas, desactivar aquesta configuració pot ajudar"
AUTO: "Automàtic"
FOPEN: "fopen"
CURL: "cURL"
STABLE: "Estable"
TESTING: "Provant"
FRONTMATTER_PROCESS_TWIG: "Processa frontmatter de Twig"
FRONTMATTER_PROCESS_TWIG_HELP: "Quan està habilitat, pots utilitzar les variables de configuració de Twig a la frontmatter de pàgina"
FRONTMATTER_IGNORE_FIELDS: "Ignora camps frontmatter"
FRONTMATTER_IGNORE_FIELDS_HELP: "Certs camps de frontmatter poden contenir Twig però no han de ser processats, com ara els formularis"
PACKAGE_X_INSTALLED_SUCCESSFULLY: "Paquet %s instal·lat correctament"
ORDERING_DISABLED_BECAUSE_PARENT_SETTING_ORDER: "L'ordre està definit pel pare, l'ordenament està deshabilitat"
ORDERING_DISABLED_BECAUSE_PAGE_NOT_VISIBLE: "La pàgina no és visible, l'ordenament està deshabilitat"
ORDERING_DISABLED_BECAUSE_TOO_MANY_SIBLINGS: "L'ordre a través de l'administrador no està suportat degut a que hi ha més de 200 elements"
CANNOT_ADD_MEDIA_FILES_PAGE_NOT_SAVED: "NOTA: No es poden afegir fitxers multimèdia fins que no s'hagi desat la pàgina. Fes clic a 'Desa' a la part superior"
CANNOT_ADD_FILES_PAGE_NOT_SAVED: "NOTA: Cal desar la pàgina haver de pujar-hi fitxers."
DROP_FILES_HERE_TO_UPLOAD: "Deixa anar els teus arxius aquí o <strong>fes clic en aquesta àrea</strong>"
INSERT: "Inserta"
UNDO: "Desfés"
REDO: "Refés"
HEADERS: "Capçaleres"
BOLD: "Negreta"
ITALIC: "Cursiva"
STRIKETHROUGH: "Tatxat"
SUMMARY_DELIMITER: "Delimitador del resum"
LINK: "Enllaç"
IMAGE: "Imatge"
BLOCKQUOTE: "Citació"
UNORDERED_LIST: "Llista sense ordre"
ORDERED_LIST: "Llista ordenada"
EDITOR: "Editor"
PREVIEW: "Vista prèvia"
FULLSCREEN: "Pantalla completa"
NON_ROUTABLE: "No accessible"
NON_VISIBLE: "No visible"
NON_PUBLISHED: "No publicat"
CHARACTERS: "caràcters"
PUBLISHING: "Publicació"
MEDIA_TYPES: "Tipus de multimèdia"
IMAGE_OPTIONS: "Opcions d'imatge"
MIME_TYPE: "Tipus Mime"
THUMB: "Miniatura"
TYPE: "Tipus"
FILE_EXTENSION: "Extensió de fitxer"
LEGEND: "Llegenda de pàgina"
MEMCACHE_SERVER: "Servidor Memcache"
MEMCACHE_SERVER_HELP: "L'adreça del servidor Memcache"
MEMCACHE_PORT: "Port Memcache"
MEMCACHE_PORT_HELP: "El port del servidor Memcache"
MEMCACHED_SERVER: "Servidor Memcached"
MEMCACHED_SERVER_HELP: "L'adreça del servidor Memcached"
MEMCACHED_PORT: "Port Memcached"
MEMCACHED_PORT_HELP: "El port del servidor Memcached"
REDIS_SERVER: "Servidor de Redis"
REDIS_SERVER_HELP: "L'adreça del servidor de Redis"
REDIS_PORT: "Port Redis"
REDIS_PORT_HELP: "El port del servidor Redis"
ALL: "Tot"
FROM: "de"
TO: "a"
RELEASE_DATE: "Data de llançament"
SORT_BY: "Ordena per"
RESOURCE_FILTER: "Filtrar..."
FORCE_SSL: "Força SSL"
FORCE_SSL_HELP: "Força SSL globalment, si està habilitat, quan el lloc web és accedir per HTTP, Grav envia un redireccionament a la pàgina HTTPS"
NEWS_FEED: "Canal de notícies"
EXTERNAL_URL: "URL externa"
CUSTOM_BASE_URL: "URL base personalitzada"
CUSTOM_BASE_URL_HELP: "Utilitza si vols reescriure el domini del lloc web o utilitzar una subcarpeta diferent que la que utilitza Grav. Per exemple: http://localhost"
FILEUPLOAD_PREVENT_SELF: 'No es pot utilitzar "%s" fora de les pàgines.'
FILEUPLOAD_UNABLE_TO_UPLOAD: 'No es pot pujar el fitxer %s: %s'
FILEUPLOAD_UNABLE_TO_MOVE: 'No es pot moure el fitxer %s to "%s"'
DROPZONE_CANCEL_UPLOAD: 'Cancel·la càrrega'
DROPZONE_CANCEL_UPLOAD_CONFIRMATION: 'Estàs segur que vols cancel·lar aquesta càrrega?'
DROPZONE_DEFAULT_MESSAGE: 'Deixa anar els teus fitxers aquí o <strong>fes clic en aquesta àrea</strong>'
DROPZONE_FALLBACK_MESSAGE: 'El teu navegador no suporta arrosegar i deixar anar per a carregar fitxers.'
DROPZONE_FALLBACK_TEXT: 'Si us plau, utilitza el formulari clàssic inferior per carregar els teus fitxers com es feia abans.'
DROPZONE_FILE_TOO_BIG: 'El fitxer és molt gran ({{filesize}}MiB). Mida màxima de fitxer: {{maxFilesize}}MiB.'
DROPZONE_INVALID_FILE_TYPE: "No pots carregar fitxers d'aquest tipus."
DROPZONE_MAX_FILES_EXCEEDED: "No pots carregar més fitxers."
DROPZONE_REMOVE_FILE: "Esborra fitxer"
DROPZONE_RESPONSE_ERROR: "El servidor ha respost amb el codi {{statusCode}}."
PREMIUM_PRODUCT: "Premium"
DESTINATION_NOT_SPECIFIED: "Destinació no especificat"
UPLOAD_ERR_NO_TMP_DIR: "No es troba una carpeta temporal"
SESSION_SPLIT: "Separació de sessió"
SESSION_SPLIT_HELP: "Separació de sessions independent entre el lloc web i altres plugins (com ara l'administració)"
ERROR_FULL_BACKTRACE: "Error Complert Backtrace"
ERROR_SIMPLE: "Error simple"
ERROR_SYSTEM: "Error del sistema"
IMAGES_AUTO_FIX_ORIENTATION: "Fixar l'orientació automàtica"
IMAGES_AUTO_FIX_ORIENTATION_HELP: "Corregir automàticament l'orientació de la imatge basada en les dades Exif"
REDIS_SOCKET: "Socket Redis"
REDIS_SOCKET_HELP: "El Socket Redis"
NOT_SET: "No establert"
PERMISSIONS: "Permisos"
ALLOW_WEBSERVER_GZIP: "Permetre WebServer Gzip"
OFFLINE_WARNING: "La connexió a la GPM no es pot establir"
CONFIRM_REINSTALL: "Segur que vols re-instal·lar %s?"
REINSTALLED_SUCCESSFULLY: "%s re-instal·lat correctament"
TOOLS: "Eines"
GPM_OFFICIAL_ONLY: "Només GPM oficial"
SORTABLE_PAGES: "Pàgines ordenables:"
ADMIN_CHILDREN_DISPLAY_ORDER: "Ordre de visualització de descendents"
PWD_PLACEHOLDER: "cadena complexa de al menys 8 caràcters"
PWD_REGEX: "Regex clau"
USERNAME_REGEX: "RegEx nom d'usuari"
CONFIGURATION: "Configuració"
ADMIN_CACHING: "Habilita el cache de l'administració"
ADMIN_CACHING_HELP: "El cache a l'administració pot ser controlat independentment del de la pàgina front-end"
TIMEOUT: "Temps d'espera"
TIMEOUT_HELP: "Estableix el temps d'espera de la sessió en segons"
DASHBOARD: "Panell de control"
NOTIFICATIONS: "Notificacions"
File diff suppressed because it is too large Load Diff
+89
View File
@@ -0,0 +1,89 @@
---
PLUGIN_ADMIN:
ADMIN_BETA_MSG: "Mae hwn yn fersiwn beta! Defnyddio hwn yn cynhyrchu ar risg eich hun..."
ADMIN_REPORT_ISSUE: "Canfod problem? Rhowch wybod ar GitHub."
EMAIL_FOOTER: "<a href=\"https://getgrav.org\"> wedi'u pweru gan Grav</a>-ffeil fflat Modern CMS"
LOGIN_BTN: "Mewngofnodi"
LOGIN_BTN_FORGOT: "Anghofio"
LOGIN_BTN_RESET: "Ailosod cyfrinair"
LOGIN_BTN_SEND_INSTRUCTIONS: "Anfon cyfarwyddiadau ailosod"
LOGIN_BTN_CLEAR: "Ffurflen clir"
LOGIN_BTN_CREATE_USER: "Creu defnyddiwr"
LOGIN_LOGGED_IN: "Wedi eich mewngofnodi llwyddiannus"
LOGIN_FAILED: "Wedi methu mewngofnodi"
LOGGED_OUT: "Chi allgofnodi"
RESET_LINK_EXPIRED: "Ailosod cysylltiad wedi dod i ben, rhowch gynnig arall arni"
RESET_PASSWORD_RESET: "Mae wedi'i ailosod cyfrinair"
RESET_INVALID_LINK: "Mae annilys yn ailosod cyswllt a ddefnyddir, rhowch gynnig arni eto"
FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "Mae cyfarwyddiadau i ailosod eich cyfrinair wedi'u hanfon drwy e-bost at %s"
FORGOT_FAILED_TO_EMAIL: "Wedi methu anfon e-bost cyfarwyddiadau, rhowch gynnig arall arni rywbryd eto"
FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL: "Does dim modd ailosod cyfrinair %s, pennir nad oes cyfeiriad e-bost"
FORGOT_USERNAME_DOES_NOT_EXIST: "Nid yw'r defnyddiwr gyda'r enw defnyddiwr <b>%s</b> yn bodoli"
FORGOT_EMAIL_NOT_CONFIGURED: "Does dim modd ailosod cyfrinair. Nid yw'r safle hwn wedi'i ffurfweddu i anfon negeseuon e-bost"
FORGOT_EMAIL_SUBJECT: "Cais ailosod cyfrinair %s"
FORGOT_EMAIL_BODY: "<h1>Ailosod cyfrinair</h1> <p>%1$s Annwyl,</p> <p>Gwnaed cais ar <b>%4$s</b> i ailosod eich cyfrinair.</p> <p>< br / > <a href=\"%2$s\" class=\"btn-primary\"> hyn i ailosod eich cyfrinair cliciwch</a> < br / > < br / ></p> <p>Fel arall, gopïo URL canlynol i'r bar cyfeiriad eich porwr:</p> <p>%2$s</p> <p>< br / > Cofion, < br / > < br / >%3$s</p>"
MANAGE_PAGES: "Rheoli tudalennau"
PAGES: "Tudalennau"
PLUGINS: "Ategion"
PLUGIN: "Ategyn"
THEMES: "Themâu"
LOGOUT: "Allgofnodi"
BACK: "Yn ôl"
ADD_PAGE: "Ychwanegu Tudalen"
MOVE: "Symud"
DELETE: "Dileu"
SAVE: "Cadw"
NORMAL: "Arferol"
EXPERT: "Arbenigol"
EXPAND_ALL: "Ehangu'r cyfan"
COLLAPSE_ALL: "Crebachu'r cyfan"
ERROR: "Gwall"
CLOSE: "Cau"
CANCEL: "Canslo"
CONTINUE: "Yn parhau"
MODAL_DELETE_PAGE_CONFIRMATION_REQUIRED_TITLE: "Cadarnhad sydd yn ofynnol"
MODAL_CHANGED_DETECTED_TITLE: "Ganfod newidiadau"
MODAL_CHANGED_DETECTED_DESC: "Wedi ichi golli'r newidiadau. Ydych chi'n siŵr eich bod am adael heb arbed?"
MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_TITLE: "Cadarnhad sydd yn ofynnol"
MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_DESC: "Ydych chi'n siŵr eich bod am ddileu'r ffeil hon? Ni ellir dad-wneud y cam gweithredu hwn."
ADD_FILTERS: "Ychwanegu hidlydd"
SEARCH_PAGES: "Tudalennau chwilio"
VERSION: "Fersiwn"
WAS_MADE_WITH: "Wedi greu hefo"
BY: "Gan"
AUTHOR: "Awdur"
HOMEPAGE: "Hafan"
KEYWORDS: "Allweddeiriau"
LICENSE: "Trwydded"
DESCRIPTION: "Disgrifiad"
THEME: "Thema"
BACK_TO_THEMES: "Ôl i themâu"
BACK_TO_PLUGINS: "Ôl i ategion"
CHECK_FOR_UPDATES: "Chwilio am ddiweddariadau"
ADD: "Ychwanegu"
CLEAR_CACHE: "Clirio storfa"
CLEAR_CACHE_ALL_CACHE: "Holl storfa"
CLEAR_CACHE_ASSETS_ONLY: "Asedau yn unig"
CLEAR_CACHE_IMAGES_ONLY: "Llyniau yn unig"
CLEAR_CACHE_CACHE_ONLY: "Storfa yn unig"
UPDATES_AVAILABLE: "Diweddariadau ar gael"
DAYS: "Diwrnod"
UPDATE: "Diweddaru"
STATISTICS: "Ystadegau"
TODAY: "Heddiw"
WEEK: "Wythnos"
MONTH: "Mis"
UPDATED: "Wedi'w ddiweddaru"
MON: "Llu"
TUE: "Maw"
WED: "Mer"
THU: "Iau"
FRI: "Gwe"
SAT: "Sad"
SUN: "Sul"
COPY: "Copi"
EDIT: "Golygu"
CREATE: "Creu"
AVAILABLE: "Ar gael"
CONFIGURATION: "Ffurfweddiad"
DASHBOARD: "Dangosfwrdd"
+760
View File
@@ -0,0 +1,760 @@
---
PLUGIN_ADMIN:
ADMIN_NOSCRIPT_MSG: "Aktivér JavaScript i din browser."
ADMIN_BETA_MSG: "Dette er en beta-udgivelse! Brug i produktionsmiljøer er på egen risiko..."
ADMIN_REPORT_ISSUE: "Har du fundet et problem? Så bedes du rapportere det på GitHub."
EMAIL_FOOTER: "<a href=\"https://getgrav.org\">Drevet af Grav</a> - det moderne fladfil-CMS"
LOGIN_BTN: "Login"
LOGIN_BTN_FORGOT: "Glemt"
LOGIN_BTN_RESET: "Nulstil adgangskode"
LOGIN_BTN_SEND_INSTRUCTIONS: "Send nulstillingsinstruktioner"
LOGIN_BTN_CLEAR: "Ryd formular"
LOGIN_BTN_CREATE_USER: "Opret bruger"
LOGIN_LOGGED_IN: "Du er nu logget ind"
LOGIN_FAILED: "Login fejlede"
LOGGED_OUT: "Du er nu logget ud"
RESET_NEW_PASSWORD: "Skriv venligst en ny adgangskode"
RESET_LINK_EXPIRED: "Nulstillingslinket er udløbet; prøv venligst igen"
RESET_PASSWORD_RESET: "Adgangskoden er blevet nulstillet"
RESET_INVALID_LINK: "Du har benyttet et ugyldigt nulstillingslink; prøv venligst igen"
FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "Vejledning i at nulstille din adgangskode er sendt via e-mail til %s"
FORGOT_FAILED_TO_EMAIL: "Mislykkedes at maile vejledninger, forsøg venligst igen senere"
FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL: "Kan ikke nulstille adgangskode til %s; der er ikke angivet en e-mail-adresse"
FORGOT_USERNAME_DOES_NOT_EXIST: "Der findes ikke en bruger med brugernavnet <b>%s</b>"
FORGOT_EMAIL_NOT_CONFIGURED: "Kan ikke nulstille adgangskoden. Dette site er ikke konfigureret til at sende e-mails"
FORGOT_EMAIL_SUBJECT: "%s Anmodning om nulstilling af adgangskode"
FORGOT_EMAIL_BODY: "<h1>Adgangskodenulstilling</h1><p>Hej %1$s</p><p>Der blev den<b>%4$s</b> anmodet om at nulstille din adgangskode.</p><p><br /><a href=\"%2$s\" class=\"btn-primary\">Klik her for at gennemføre adgangskodenulstillingen</a><br /><br /></p><p>Alternativt kan du indsætte flg. URL i din browsers adressebjælke:</p> <p>%2$s</p><p><br />Venlig hilsen,<br /><br />%3$s</p>"
MANAGE_PAGES: "Administrer sider"
PAGES: "Sider"
PLUGINS: "Plugins"
PLUGIN: "Plugin"
THEMES: "Temaer"
LOGOUT: "Logud"
BACK: "Tilbage"
NEXT: "Næste"
PREVIOUS: "Foregående"
ADD_PAGE: "Tilføj side"
MOVE: "Flyt"
DELETE: "Slet"
UNSET: "Ikke-indstillet"
VIEW: "Se"
SAVE: "Gem"
NORMAL: "Normal"
EXPERT: "Ekspert"
EXPAND_ALL: "Udfold alle"
COLLAPSE_ALL: "Sammenfold alle"
ERROR: "Fejl"
CLOSE: "Luk"
CANCEL: "Annullér"
CONTINUE: "Fortsæt"
MODAL_DELETE_PAGE_CONFIRMATION_REQUIRED_TITLE: "Bekræftelse kræves"
MODAL_CHANGED_DETECTED_TITLE: "Ændringer registreret"
MODAL_CHANGED_DETECTED_DESC: "Ændringer er ikke gemt. Sikker på, at du vil fortsætte uden at gemme?"
MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_TITLE: "Bekræftelse kræves"
MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_DESC: "Sikker på, at du vil slette denne fil? Handlingen kan ikke fortrydes."
ADD_FILTERS: "Tilføj filtre"
SEARCH_PAGES: "Søg efter sider"
VERSION: "Version"
WAS_MADE_WITH: "Blev lavet med"
BY: "Af"
UPDATE_THEME: "Opdatere tema"
UPDATE_PLUGIN: "Opdater Plugin"
OF_THIS_THEME_IS_NOW_AVAILABLE: "af dette tema er nu tilgængelig"
OF_THIS_PLUGIN_IS_NOW_AVAILABLE: "af dette plugin er nu tilgængelig"
AUTHOR: "Forfatter"
HOMEPAGE: "Websted"
DEMO: "Demo"
BUG_TRACKER: "Sporing af fejl"
KEYWORDS: "Nøgleord"
LICENSE: "Licens"
DESCRIPTION: "Beskrivelse"
README: "Læs-mig"
REMOVE_THEME: "Fjern Tema"
INSTALL_THEME: "Installer Tema"
THEME: "Tema"
BACK_TO_THEMES: "Tilbage til Temaer"
BACK_TO_PLUGINS: "Tilbage til Plugins"
CHECK_FOR_UPDATES: "Søg efter Opdateringer"
ADD: "Tilføj"
CLEAR_CACHE: "Ryd Cache"
CLEAR_CACHE_ALL_CACHE: "Alle Caches"
CLEAR_CACHE_ASSETS_ONLY: "Kun Aktiver"
CLEAR_CACHE_IMAGES_ONLY: "Kun Billeder"
CLEAR_CACHE_CACHE_ONLY: "Kun Cache"
CLEAR_CACHE_TMP_ONLY: "Kun tmp"
UPDATES_AVAILABLE: "Opdateringer tilgængelige"
DAYS: "Dage"
UPDATE: "Opdatér"
BACKUP: "Backup"
BACKUPS: "Sikkerhedskopier"
BACKUP_NOW: "Sikkerhedskopiér nu"
BACKUPS_STATS: "Sikkerhedskopieringsstatistik"
BACKUPS_HISTORY: "Sikkerhedskopieringshistorik"
BACKUPS_PURGE_CONFIG: "Opsætning, Sikkerhedskopieringsrensning"
BACKUPS_PROFILES: "Sikkerhedskopieringsprofiler"
BACKUPS_COUNT: "Antal Sikkerhedskopier"
BACKUPS_PROFILES_COUNT: "Antal Profiler"
BACKUPS_TOTAL_SIZE: "Forbrugt lagerplads"
BACKUPS_NEWEST: "Seneste sikkerhedskopi"
BACKUPS_OLDEST: "Ældste sikkerhedskopi"
BACKUPS_PURGE: "Rense"
BACKUPS_NOT_GENERATED: "Ingen sikkerhedskopier oprettet endnu..."
BACKUPS_PURGE_NUMBER: "Benytter %s af %s sikkerhedskopipladser"
BACKUPS_PURGE_TIME: "%s dages sikkerhedskopiering resterer"
BACKUPS_PURGE_SPACE: "Benytter %s af %s"
BACKUP_DELETED: "Sikkerhedskopi blev slettet"
BACKUP_NOT_FOUND: "Sikkerhedskopi ikke fundet"
BACKUP_DATE: "Sikkerhedskopieringsdato"
STATISTICS: "Statistikker"
TODAY: "I dag"
WEEK: "Uge"
MONTH: "Måned"
LATEST_PAGE_UPDATES: "Seneste Sideopdateringer"
MAINTENANCE: "Vedligeholdelse"
UPDATED: "Opdateret"
MON: "Man"
TUE: "Tirs"
WED: "Ons"
THU: "Tor"
FRI: "Fre"
SAT: "Lør"
SUN: "Søn"
COPY: "Kopiér"
EDIT: "Redigér"
CREATE: "Opret"
GRAV_ADMIN: "Grav Admin"
GRAV_OFFICIAL_PLUGIN: "Grav Officielt Plugin"
GRAV_OFFICIAL_THEME: "Grav Officielt Tema"
PLUGIN_SYMBOLICALLY_LINKED: "Dette plugin er symbolsk linket. Ændringer opdages ikke."
THEME_SYMBOLICALLY_LINKED: "Dette tema er symbolsk linket. Ændringer opdaget ikke"
REMOVE_PLUGIN: "Fjern Plugin"
INSTALL_PLUGIN: "Installér Plugin"
AVAILABLE: "Tilgængelig"
INSTALLED: "Installeret"
INSTALL: "Installér"
ACTIVE_THEME: "Aktivt tema"
SWITCHING_TO: "Skifte til"
SWITCHING_TO_DESCRIPTION: "Der er ingen garanti for, at alle layoutsider understøttes ved skift til andet tema, hvilket potentielt kan forårsage fejl under indlæsning af nævnte sider."
SWITCHING_TO_CONFIRMATION: "Vil du forsætte og skifte til temaet"
CREATE_NEW_USER: "Opret ny bruger"
REMOVE_USER: "Fjern bruger"
ACCESS_DENIED: "Adgang nægtet"
ACCOUNT_NOT_ADMIN: "din konto har ikke administratorrettigheder"
PHP_INFO: "PHP-info"
INSTALLER: "Installation"
AVAILABLE_THEMES: "Tilgængelige temaer"
AVAILABLE_PLUGINS: "Tilgængelige plugins"
INSTALLED_THEMES: "Installerede temaer"
INSTALLED_PLUGINS: "Installerede plugins"
BROWSE_ERROR_LOGS: "Gennemse Fejl-logs"
SITE: "Site"
INFO: "Info"
SYSTEM: "System"
USER: "Bruger"
ADD_ACCOUNT: "Tilføj konto"
SWITCH_LANGUAGE: "Skift Sprog"
SUCCESSFULLY_ENABLED_PLUGIN: "Plugin aktiveret"
SUCCESSFULLY_DISABLED_PLUGIN: "Plugin deaktiveret"
SUCCESSFULLY_CHANGED_THEME: "Standardtema ændret"
INSTALLATION_FAILED: "Installation mislykkedes"
INSTALLATION_SUCCESSFUL: "Installation fuldført"
UNINSTALL_FAILED: "Afinstallation mislykkedes"
UNINSTALL_SUCCESSFUL: "Afinstallation fuldført"
SUCCESSFULLY_SAVED: "Gemt"
SUCCESSFULLY_COPIED: "Kopieret"
REORDERING_WAS_SUCCESSFUL: "Rækkefølge ændret"
SUCCESSFULLY_DELETED: "Slettet"
SUCCESSFULLY_SWITCHED_LANGUAGE: "Sprog skiftet"
INSUFFICIENT_PERMISSIONS_FOR_TASK: "Du har ikke tilstrækkelige tilladelser til opgaven"
CACHE_CLEARED: "Cache ryddet"
METHOD: "Metode"
ERROR_CLEARING_CACHE: "Fejl under sletning af cache"
AN_ERROR_OCCURRED: "Der opstod en fejl"
YOUR_BACKUP_IS_READY_FOR_DOWNLOAD: "Din backup er klar til download"
DOWNLOAD_BACKUP: "Download backup"
PAGES_FILTERED: "Filtrerede sider"
NO_PAGE_FOUND: "Ingen side fundet"
INVALID_PARAMETERS: "Ugyldige parametre"
NO_FILES_SENT: "Ingen filer sendt"
EXCEEDED_FILESIZE_LIMIT: "Størrelsesbegrænsning for PHP-configurationsfil overskredet"
UNKNOWN_ERRORS: "Ukendt fejl"
EXCEEDED_GRAV_FILESIZE_LIMIT: "Størrelsesbegrænsning for Grav-configurationsfil overskredet"
UNSUPPORTED_FILE_TYPE: "Ikke-understøttet filtype"
FAILED_TO_MOVE_UPLOADED_FILE: "Kunne ikke flytte den uploadede fil."
FILE_UPLOADED_SUCCESSFULLY: "Fil-upload lykkedes"
FILE_DELETED: "Filen blev slettet"
FILE_COULD_NOT_BE_DELETED: "Filen kunne ikke slettes"
FILE_NOT_FOUND: "Filen blev ikke fundet"
NO_FILE_FOUND: "Ingen fil blev fundet"
GRAV_WAS_SUCCESSFULLY_UPDATED_TO: "Grav blev opdateret til"
GRAV_UPDATE_FAILED: "Opdatering af Grav mislykkedes"
EVERYTHING_UPDATED: "Alt opdateret"
UPDATES_FAILED: "Opdateringer mislykkedes"
AVATAR_BY: "Avatar af"
AVATAR_UPLOAD_OWN: "Eller upload din egen..."
LAST_BACKUP: "Seneste backup"
FULL_NAME: "Fulde navn"
USERNAME: "Brugernavn"
EMAIL: "E-mail"
USERNAME_EMAIL: "Brugernavn eller e-mail"
PASSWORD: "Adgangskode"
PASSWORD_CONFIRM: "Bekræft adgangskode"
TITLE: "Titel"
LANGUAGE: "Sprog"
ACCOUNT: "Konto"
EMAIL_VALIDATION_MESSAGE: "Skal være en gyldig e-mail"
PASSWORD_VALIDATION_MESSAGE: "Adgangskode skal indeholde minimum ét ciffer, én versal, én minuskel samt udgøres af minimum otte tegn"
LANGUAGE_HELP: "Opsæt foretrukne sprog"
MEDIA: "Medier"
DEFAULTS: "Standarder"
SITE_TITLE: "Sitets Titel"
SITE_TITLE_PLACEHOLDER: "Overordnet webstedstitel"
SITE_TITLE_HELP: "Sitets standard-titel. Bruges ofte i temaer"
SITE_DEFAULT_LANG: "Standardsprog"
SITE_DEFAULT_LANG_PLACEHOLDER: "Standardsprog benyttet af temaets <HTML>-etiket"
SITE_DEFAULT_LANG_HELP: "Standardsprog benyttet af temaets <HTML>-etiket"
DEFAULT_AUTHOR: "Standard-forfatter"
DEFAULT_AUTHOR_HELP: "Standard-forfatternavn. Bruges ofte i temaer og sideindhold"
DEFAULT_EMAIL: "Standard-e-mail"
DEFAULT_EMAIL_HELP: "En standard-e-mail, som der kan henvises til i temaer og på sider"
TAXONOMY_TYPES: "Taksonomi-typer"
TAXONOMY_TYPES_HELP: "Taksonomi-typer skal defineres her hvis du vil bruge dem på sider"
PAGE_SUMMARY: "Side-resume"
ENABLED: "Aktiveret"
ENABLED_HELP: "Aktiver side-resume (resumeet returnerer det samme som sideindholdet)"
'YES': "Ja"
'NO': "Nej"
SUMMARY_SIZE: "Resume-længde"
SUMMARY_SIZE_HELP: "Det antal af en sides karakter, som skal bruges som resume"
FORMAT: "Format"
FORMAT_HELP: "kort = brug første forekomst af afgrænser eller størrelse; lang = afgrænser ignoreres"
SHORT: "Kort"
LONG: "Lang"
DELIMITER: "Afgrænser"
DELIMITER_HELP: "Resume-afgrænseren (standard: '===')"
METADATA: "Metadata"
METADATA_HELP: "Standard-metadataværdier, som vises på alle sider, medmindre de tilsidesættes af siden"
NAME: "Navn"
CONTENT: "Indhold"
SIZE: "Størrelse"
ACTION: "Handling"
REDIRECTS_AND_ROUTES: "Omdirigeringer og ruter"
CUSTOM_REDIRECTS: "Brugerdefinerede omdirigeringer"
CUSTOM_REDIRECTS_HELP: "ruter til omdirigering til andre sider. Gængse regex-erstatninger kan benyttes"
CUSTOM_REDIRECTS_PLACEHOLDER_KEY: "/dit/alias"
CUSTOM_REDIRECTS_PLACEHOLDER_VALUE: "/din/omdirigering"
CUSTOM_ROUTES: "Tilpassede ruter"
CUSTOM_ROUTES_HELP: "ruter til alias til andre sider. Gængs regex-erstatning er gyldig"
CUSTOM_ROUTES_PLACEHOLDER_KEY: "/dit/alias"
CUSTOM_ROUTES_PLACEHOLDER_VALUE: "/din/rute"
FILE_STREAMS: "Filstrømme"
DEFAULT: "Standard"
PAGE_MEDIA: "Sidemedier"
OPTIONS: "Indstillinger"
PUBLISHED: "Udgivet"
PUBLISHED_HELP: "Som standard offentliggøres en side medmindre du udtrykkeligt sætter published: false eller via en fremtidig publish_date eller fortidig unpublish_date"
DATE: "Dato"
DATE_HELP: "Dato-variablen tillader dig at sætte en specifik dato associeret med denne side."
PUBLISHED_DATE: "Udgivelsesdato"
PUBLISHED_DATE_HELP: "Kan give en dato for automatisk at udløse udgivelse."
UNPUBLISHED_DATE: "Afpubliceringsdato"
UNPUBLISHED_DATE_HELP: "Opsætning en dato for automatisk at afpublisere."
ROBOTS: "Robotter"
TAXONOMIES: "Taksonomier"
TAXONOMY: "Taksonomi"
ADVANCED: "Avanceret"
SETTINGS: "Indstillinger"
FOLDER_NUMERIC_PREFIX: "Numerisk Mappepræfiks"
FOLDER_NUMERIC_PREFIX_HELP: "Numerisk præfiks, der muliggør manuel sortering og indebærer synlighed"
FOLDER_NAME: "Mappenavn"
FOLDER_NAME_HELP: "Mappenavnet, som skal gemmes i filsystemet, for denne side"
PARENT: "Overordnet"
DEFAULT_OPTION_ROOT: "- Rod -"
DEFAULT_OPTION_SELECT: "- Vælg -"
DISPLAY_TEMPLATE: "Visningsskabelon"
DISPLAY_TEMPLATE_HELP: "Sidetypen, som oversættes til den twig-template, som viser siden"
ORDERING: "Soreting"
PAGE_ORDER: "Side-sortering"
OVERRIDES: "Tilsidesættelser"
MENU: "Menu"
MENU_HELP: "Den streng, som skal anvendes i en menu. Hvis ingen angives, bruges Title."
SLUG: "Slug"
SLUG_HELP: "Slug-variablen bruges til specifikt at angive sidens andel af URL'en"
SLUG_VALIDATE_MESSAGE: "En slug må kun indeholde små alfanumeriske karakterer og bindestreger"
PROCESS: "Processer"
PROCESS_HELP: "Kontroller hvordan sider processeres. Kan angives per side i stedet for globalt"
DEFAULT_CHILD_TYPE: "Standardtitel for underordnede"
USE_GLOBAL: "Anvend Global"
ROUTABLE: "Kan routes"
ROUTABLE_HELP: "Om denne side kan tilgås via en URL"
CACHING: "Caching"
VISIBLE: "Synlig"
VISIBLE_HELP: "Afgør om en side er synlig i navigationen."
DISABLED: "Deaktiveret"
ITEMS: "Elementer"
ORDER_BY: "Sortér Efter"
ORDER: "Sortering"
FOLDER: "Mappe"
ASCENDING: "Stigende"
DESCENDING: "Faldende"
PAGE_TITLE: "Sidetitel"
PAGE_TITLE_HELP: "Sidens titel"
PAGE: "Side"
FRONTMATTER: "Forskræp"
FILENAME: "Filnavn"
PARENT_PAGE: "Overordnet Side"
HOME_PAGE: "Hjem-side"
HOME_PAGE_HELP: "Siden som Grav bruger som standard-destinationsside"
DEFAULT_THEME: "Standardtema"
DEFAULT_THEME_HELP: "Gravs standardtema (som udgangspunkt Antimatter)"
TIMEZONE: "Tidszone"
TIMEZONE_HELP: "Tilsidesæt serverens standardtidszone"
SHORT_DATE_FORMAT: "Kort datoformat-visning"
SHORT_DATE_FORMAT_HELP: "Angiv det korte datoformat, der kan bruges af temaer"
LONG_DATE_FORMAT: "Lang datoformat-visning"
LONG_DATE_FORMAT_HELP: "Angiv det lange datoformat, der kan bruges af temaer"
DEFAULT_ORDERING: "Standardsortering"
DEFAULT_ORDERING_HELP: "Sider i en liste bliver vist i denne rækkefølge, medmindre den tilsidesættes"
DEFAULT_ORDERING_DEFAULT: "Standard - baseret på mappenavn"
DEFAULT_ORDERING_FOLDER: "Mappe - baseret på mappenavn uden præfiks"
DEFAULT_ORDERING_TITLE: "Titel - baseret på titel-felt i headeren"
DEFAULT_ORDERING_DATE: "Dato - baseret på dato-felt i headeren"
DEFAULT_ORDER_DIRECTION: "Standard-sorteringsretning"
DEFAULT_ORDER_DIRECTION_HELP: "Den retning, som siderne i en liste skal sorteres i"
DEFAULT_PAGE_COUNT: "Standard-sideantal"
DEFAULT_PAGE_COUNT_HELP: "Standard for maksimalt antal sider i en liste"
DATE_BASED_PUBLISHING: "Datobaseret publicering"
DATE_BASED_PUBLISHING_HELP: "(Af)publicer automatisk indhold baseret på dets dato"
EVENTS: "Begivenheder"
EVENTS_HELP: "Aktiver og deaktiver specifikke begivenheder. Deaktivering af disse kan ødelægge plugins"
REDIRECT_DEFAULT_ROUTE: "Standardrute for omdirigeringer"
REDIRECT_DEFAULT_ROUTE_HELP: "Omdiriger automatisk til en sides standardrute"
LANGUAGES: "Sprog"
SUPPORTED: "Understøttet"
SUPPORTED_HELP: "Kommasepareret liste af sprogkoder på hver to bogstaver (f.eks. 'en,da,fr')"
TRANSLATIONS_FALLBACK: "Fallback til oversættelser"
TRANSLATIONS_FALLBACK_HELP: "Fallback gennem understøttede oversættelser hvis det aktive sprog ikke findes"
ACTIVE_LANGUAGE_IN_SESSION: "Aktivt sprog i session"
ACTIVE_LANGUAGE_IN_SESSION_HELP: "Gem det aktive sprog i sessionen"
HTTP_HEADERS: "HTTP-headere"
EXPIRES: "Udløber"
EXPIRES_HELP: "Indstiller expires-headeren. Værdien angives i sekunder."
CACHE_CONTROL: "HTTP Cache-kontrol"
CACHE_CONTROL_HELP: "Angive en gyldig cache-kontrolværdi såsom 'no-cache, no-butik, must-revalidate'"
LAST_MODIFIED: "Senest ændret"
LAST_MODIFIED_HELP: "Angiver \"last modified\"-headeren, der kan hjælpe med at optimere proxy og browsercachelagring"
ETAG: "ETag"
ETAG_HELP: "Indstiller etag-header for at hjælpe med at identificere, hvornår en side er blevet ændret"
VARY_ACCEPT_ENCODING: "Vary accept encoding"
VARY_ACCEPT_ENCODING_HELP: "Angiver \"Vary: Accept Encoding\"-headeren, der hjælper med proxy og CDN-cachelagring"
MARKDOWN: "Markdown"
MARKDOWN_EXTRA: "Markdown Extra"
MARKDOWN_EXTRA_HELP: "Aktiver standardunderstøttelse for Markdown Extra - https://michelf.ca/projects/php-markdown/extra/"
MARKDOWN_EXTRA_ESCAPE_FENCES: "Escape HTML-elementer i Markdown Extra-låger"
MARKDOWN_EXTRA_ESCAPE_FENCES_HELP: "Escaper HTML-elementer i Markdown Extra-låger"
AUTO_LINE_BREAKS: "Automatiske linjeskift"
AUTO_LINE_BREAKS_HELP: "Aktiver understøttelse af automatiske linjeskift i markdown"
AUTO_URL_LINKS: "Automatiske URL-links"
AUTO_URL_LINKS_HELP: "Aktiver automatisk konvertering af URL'er til HTML-hyperlinks"
ESCAPE_MARKUP: "Escape markup"
ESCAPE_MARKUP_HELP: "Escape markup-tags til HMTL-entiteter"
CACHING_HELP: "Global TÆND/SLUK-kontakt til aktivering/deaktivering af Grav-caching"
CACHE_CHECK_METHOD: "Metode til cache-tjek"
CACHE_CHECK_METHOD_HELP: "Angiv den metode, som Grav skal bruge til at tjekke om en side er blevet ændret."
CACHE_DRIVER: "Cache-driver"
CACHE_DRIVER_HELP: "Angiv hvilken cache-driver, som Grav skal bruge. 'Auto-detekter' forsøger at finde den bedste for dig"
CACHE_PREFIX: "Cache-præfiks"
CACHE_PREFIX_HELP: "Identifikator for en del af Grav-nøglen. Ændr kun hvis du ved, hvad du laver."
CACHE_PREFIX_PLACEHOLDER: "Afledt af base-URL'en (tilsidesæt ved at indtaste en arbitrær streng)"
CACHE_PURGE_JOB: "Kør planlagt rensningsjob"
CACHE_PURGE_JOB_HELP: "Du kan med planlæggeren periodisk rydde ud gamle Doctrine-filcachemapper med dette job"
CACHE_CLEAR_JOB: "Kør planlagt rydningsjob"
CACHE_CLEAR_JOB_HELP: "Du kan med planlæggeren periodisk rydde Grav-cachen"
CACHE_JOB_TYPE: "Cache Jobtype"
CACHE_JOB_TYPE_HELP: "Ryd cachen enten for 'standard' eller 'alle' mapper"
CACHE_PURGE: "Rens gammel cache"
LIFETIME: "Livstid"
LIFETIME_HELP: "Angiver cache-livstiden i sekunder. 0 = uendelig"
GZIP_COMPRESSION: "Gzip-kompression"
GZIP_COMPRESSION_HELP: "Aktiver GZip komprimering af Grav siden for øget ydeevne."
TWIG_TEMPLATING: "Twig-skabeloner"
TWIG_CACHING: "Twig-cache"
TWIG_CACHING_HELP: "Indstil Twigs cache-mekanisme. Lad feltet være aktiveret for at opnå den bedste ydeevne."
TWIG_DEBUG: "Twig-debug"
TWIG_DEBUG_HELP: "Giver mulighed for ikke at indlæse Twigs debugger-udvidelse"
DETECT_CHANGES: "Registrer ændringer"
DETECT_CHANGES_HELP: "Twig genkompilerer automatisk sin cache hvis den registrerer ændringer i Twig-skabeloner"
AUTOESCAPE_VARIABLES: "Escape automatisk variabler"
AUTOESCAPE_VARIABLES_HELP: "Escaper automatisk alle variabler. Dette vil højst sandsynligt ødelægge dit site"
ASSETS: "Aktiver"
CSS_PIPELINE: "CSS-pipeline"
CSS_PIPELINE_HELP: "CSS-pipelinen forener flere CSS-ressourcer i én fil"
CSS_PIPELINE_INCLUDE_EXTERNALS: "Inkluder eksterne enheder i CSS pipelinen"
CSS_PIPELINE_INCLUDE_EXTERNALS_HELP: "Eksterne URL'er har, til tider, relative fil referencer, og bør ikke blive pipelinet"
CSS_PIPELINE_BEFORE_EXCLUDES: "Pre-rendering af CSS pipelinen"
CSS_PIPELINE_BEFORE_EXCLUDES_HELP: "Render CSS pipelinen før alle andre CSS referencer, der ikke er inkluderet"
CSS_MINIFY: "CSS-minificering"
CSS_MINIFY_HELP: "Minificer CSS ved brug af pipeline"
CSS_MINIFY_WINDOWS_OVERRIDE: "Tilsidesæt Windows' CSS-minificering"
CSS_MINIFY_WINDOWS_OVERRIDE_HELP: "Tilsidesættelse af minificering på Windows-platforme. Standard = Fra pga. ThreadStackSize"
CSS_REWRITE: "CSS-omskrivning"
CSS_REWRITE_HELP: "Omskriv relative CSS-URL'er under pipelining"
JAVASCRIPT_PIPELINE: "Javascript-pipeline"
JAVASCRIPT_PIPELINE_HELP: "JS-pipelinen samler flere JS-ressourcer i én fil"
JAVASCRIPT_PIPELINE_INCLUDE_EXTERNALS: "Inkluder eksterne enheder i JS pipelinen"
JAVASCRIPT_PIPELINE_INCLUDE_EXTERNALS_HELP: "Eksterne URL'er har, til tider, relative fil referencer, og bør ikke blive pipelinet"
JAVASCRIPT_PIPELINE_BEFORE_EXCLUDES: "Pre-rendering af JS pipelinen"
JAVASCRIPT_PIPELINE_BEFORE_EXCLUDES_HELP: "Render JS pipelinen før alle andre JS referencer, der ikke er inkluderet"
JAVASCRIPT_MINIFY: "Javascript-minificering"
JAVASCRIPT_MINIFY_HELP: "Minificer JS ved brug af pipeline"
ENABLED_TIMESTAMPS_ON_ASSETS: "Aktiver tidsstempler på aktiver"
ENABLED_TIMESTAMPS_ON_ASSETS_HELP: "Aktiver tidsstempler på aktiver"
COLLECTIONS: "Kollektioner"
ERROR_HANDLER: "Fejlbehandler"
DISPLAY_ERRORS: "Visningsfejl"
DISPLAY_ERRORS_HELP: "Vis fuld backtrace på fejlside"
LOG_ERRORS: "Log fejl"
LOG_ERRORS_HELP: "Log fejl i mappen /logs"
LOG_HANDLER: "Loghåndtering"
LOG_HANDLER_HELP: "Hvor loggerne skal placeres"
SYSLOG_FACILITY: "Syslog-facilitet"
SYSLOG_FACILITY_HELP: "Syslog-facilitet til output"
DEBUGGER: "Fejlfinder"
DEBUGGER_HELP: "Aktivér Grav-fejlfinder og flg. indstillinger"
DEBUG_TWIG: "Fejlfind i Twig"
DEBUG_TWIG_HELP: "Aktivér fejlfinding i Twig-skabeloner"
SHUTDOWN_CLOSE_CONNECTION: "Luk forbindelse ved nedlukning"
SHUTDOWN_CLOSE_CONNECTION_HELP: "Luk forbindelsen inden onShutdown()-kald. Slået fra ved debugging"
DEFAULT_IMAGE_QUALITY: "Standard-billedkvalitet"
DEFAULT_IMAGE_QUALITY_HELP: "Standardbilledkvalitet til brug ved cachelagring af billeder (85%)"
CACHE_ALL: "Cache alle billeder"
CACHE_ALL_HELP: "Kør alle billeder - også ikke-manipulerede - gennem Gravs cache-system"
IMAGES_DEBUG: "Vandmærke ved debugging af billeder"
IMAGES_DEBUG_HELP: "Vis overlejring på billeder. Overlejringen indikerer billedets pixel-dybde til brug ved f.eks. visning på retina-skærme"
IMAGES_SEOFRIENDLY: "SEO-venlige billednavne"
IMAGES_SEOFRIENDLY_HELP: "Når aktiveret, vises billednavnet først, dernæst en mindre hash, der afspejler udførte operationer"
UPLOAD_LIMIT: "Fil-upload grænse"
UPLOAD_LIMIT_HELP: "Angiv maks. filstørrelse i bytes (0 = ubegrænset)"
ENABLE_MEDIA_TIMESTAMP: "Aktivér tidsstempler på medier"
ENABLE_MEDIA_TIMESTAMP_HELP: "Føjer et tidsstempel baseret på seneste ændringsdato til hvert medieemne"
SESSION: "Session"
SESSION_ENABLED_HELP: "Aktivér sessionsunderstøttelse i Grav"
SESSION_NAME_HELP: "En identifikator, der benytts til at danne navnet på sessionens-cookie'en"
SESSION_UNIQUENESS: "Unik streng"
SESSION_UNIQUENESS_HELP: "MD5-hash af Gravs rodsti, dvs. `GRAV_ROOT` (standard) eller én baseret på den tilfældige` security.salt`-streng."
ABSOLUTE_URLS: "Absolutte URL'er"
ABSOLUTE_URLS_HELP: "Absolutte eller relative URL'er til 'base_url'"
PARAMETER_SEPARATOR: "Parameterseparator"
PARAMETER_SEPARATOR_HELP: "Separator til godkendte parametre, som kan ændres til Apache på Windows"
TASK_COMPLETED: "Opgave fuldført"
EVERYTHING_UP_TO_DATE: "Alt er opdateret"
UPDATES_ARE_AVAILABLE: "opdatering(-er) er tilgængelige"
IS_AVAILABLE_FOR_UPDATE: "er tilgængelig for opdatering"
IS_NOW_AVAILABLE: "er nu tilgængelig"
CURRENT: "Aktuel"
UPDATE_GRAV_NOW: "Opdater Grav nu"
GRAV_SYMBOLICALLY_LINKED: "Grav er forbundet med symbolsk link. Opgraderingen vil ikke være tilgængelig"
UPDATING_PLEASE_WAIT: "Opdatering... Vent venligst; downloader"
OF_THIS: "af denne"
OF_YOUR: "af dit"
HAVE_AN_UPDATE_AVAILABLE: "har en tilgængelig opdatering"
SAVE_AS: "Gem som"
MODAL_DELETE_PAGE_CONFIRMATION_REQUIRED_DESC: "Sikker på, at du vil slette denne side og alle dens undersider? Er siden oversat til andre sprog, vil disse oversættelser blive bevaret og skal slettes separat. I modsat fald bliver sidemappen og dens undersider slettet. Denne handling er irreversibel."
AND: "og"
UPDATE_AVAILABLE: "Opdatering tilgængelig"
METADATA_KEY: "Nøgle (f.eks. 'Nøgleord')"
METADATA_VALUE: "Værdi (f.eks. 'Blog, Grav')"
USERNAME_HELP: "Brugernavnet skal være mellem 3 og 16 karakterer og kan indeholde små bogstaver, tal, understreger og bindestreger. Store bogstaver, mellemrum og specielle karakter er ikke tilladt"
FULLY_UPDATED: "Fuldt opdateret"
SAVE_LOCATION: "Gemmeplacering"
PAGE_FILE: "Sideskabelon"
PAGE_FILE_HELP: "Sideskabelon filnavn, og standard visnings-skabelonen for denne side"
NO_USER_ACCOUNTS: "Der blev ikke fundet nogen brugerkonto; opret venligst en først..."
NO_USER_EXISTS: "Ingen lokalbruger til denne konto, kan ikke gemme..."
REDIRECT_TRAILING_SLASH: "Omdiriger efterstillet skråstreg"
REDIRECT_TRAILING_SLASH_HELP: "Udfør en 301-omdirigering i stedet for gennemsigtigt at håndtere URI'er med efterstillet skråstreg."
DEFAULT_DATE_FORMAT: "Sidedatoformat"
DEFAULT_DATE_FORMAT_HELP: "Det side-datoformat, som Grav skal bruge. Som standard forsøger Grav at gætte dit datoformat, men du kan specificeret et format med PHP's dato-syntaks (f.eks. Y-m-d H:i)"
DEFAULT_DATE_FORMAT_PLACEHOLDER: "Gæt automatisk"
IGNORE_FILES: "Ignorer filer"
IGNORE_FILES_HELP: "Specifikke filer, som skal ignoreres ved behandlingen af sider"
IGNORE_FOLDERS: "Ignorer mapper"
IGNORE_FOLDERS_HELP: "Specifikke mapper, som skal ignoreres ved behandlingen af sider"
HIDE_EMPTY_FOLDERS: "Skjul tomme mapper"
HIDE_EMPTY_FOLDERS_HELP: "Har mappen ikke en .md-fil, skal den være skjult i navigationen og være ikke-rootbar"
HTTP_ACCEPT_LANGUAGE: "Indstil sprog fra browser"
HTTP_ACCEPT_LANGUAGE_HELP: "Du kan forsøge at indstille sproget på basis af browserens \"http_accept_language\"-headertag"
OVERRIDE_LOCALE: "Tilsidesæt lokation"
OVERRIDE_LOCALE_HELP: "Tilsidesæt PHP's \"locale\"-indstilling baseret på det nuværende sprog"
REDIRECT: "Side-omdirigering"
REDIRECT_HELP: "Angiv en side-rute eller ekstern URL, som denne side skal omdirigere til, f.eks. \"/en/rute\" eller \"http://etsite.com\""
PLUGIN_STATUS: "Plugin-status"
INCLUDE_DEFAULT_LANG: "Inkluder standardsproget"
INCLUDE_DEFAULT_LANG_HELP: "Dette foranstiller standardsproget i alle standardsprogets URL'er, f.eks. \"/da/blog/mit-indlæg\""
PAGES_FALLBACK_ONLY: "Kun tilbagefaldsside"
PAGES_FALLBACK_ONLY_HELP: "Kun 'fallback' for at finde sideindhold via understøttede sprog. Standardadfærd er at vise et hvilket som helst tilgængeligt sprog, såfremt det aktivt sprog mangler"
ALLOW_URL_TAXONOMY_FILTERS: "URL-taksonomifiltre"
ALLOW_URL_TAXONOMY_FILTERS_HELP: "Sidebaserede samlingergør det muligt at filtrere via \"/taxonomy:værdi\"."
REDIRECT_DEFAULT_CODE: "Standardomdirigeringskode"
REDIRECT_DEFAULT_CODE_HELP: "HTTP-statuskode til brug ved omdirigeringer"
IGNORE_HIDDEN: "Ignorer skjulte"
IGNORE_HIDDEN_HELP: "Ignorer alle filer og mapper, der begynder med punktum"
WRAPPED_SITE: "Indpakket site"
WRAPPED_SITE_HELP: "Bruges af temaer/plugins til at bestemme, om Grav er pakket ind i en anden platform"
FALLBACK_TYPES: "Tilladte fallback-typer"
FALLBACK_TYPES_HELP: "Tilladte filtyper, der kan tilgås med en side-rute. Som standard sat til alle understøttede medietyper."
INLINE_TYPES: "Indlejrede fallback-typer"
INLINE_TYPES_HELP: "En liste over filtyper, der skal vises indlejret i stedet for hentes"
APPEND_URL_EXT: "Tilføj URL-efternavn"
APPEND_URL_EXT_HELP: "Tilføjer et brugerdefineret efternavn til sidens webadresse. Bemærk, at dette vil få Grav til at kigge efter \"<skabelon>. <efternavn>. twig\"-skabeloner"
PAGE_MODES: "Side-tilstande"
PAGE_TYPES: "Sidetyper"
PAGE_TYPES_HELP: "Bestemmer de sidetyper, som Grav understøtter, og rækkefølgen bestemmer fallback-typen, der skal benyttes, såfremt anmodningen er tvetydig"
ACCESS_LEVELS: "Adgangsniveauer"
GROUPS: "Grupper"
GROUPS_HELP: "Liste af grupper, som brugeren er medlem af"
ADMIN_ACCESS: "Admin-adgang"
SITE_ACCESS: "Webstedsadgang"
INVALID_SECURITY_TOKEN: "Ugyldigt sikkerhedstoken"
ACTIVATE: "Aktivér"
TWIG_UMASK_FIX: "Afmaskeringsfiks"
TWIG_UMASK_FIX_HELP: "Som standard opretter Twig cachede filer som 0755. Dette fiks skifter dette til 0775"
CACHE_PERMS: "Cachetilladelser"
CACHE_PERMS_HELP: "Standard cachemappetilladelser. Som regel 0755 eller 0775, afhængig af opsætningen"
REMOVE_SUCCESSFUL: "Fjernet"
REMOVE_FAILED: "Fjernelse mislykkedes"
HIDE_HOME_IN_URLS: "Skjul hjem-route i URL'er"
HIDE_HOME_IN_URLS_HELP: "Sikrer at standard-routes for enhver side under hjem ikke henviser til hjemsidens normale route"
TWIG_FIRST: "Behandl Twig først"
TWIG_FIRST_HELP: "Har du aktiveret Twig-sidebehandling, kan du opsætte Twig til at gøre dette før eller efter markdown"
SESSION_SECURE: "Sikker"
SESSION_SECURE_HELP: "Angiver, om kommunikation med denne cookie skal ske krypteret. ADVARSEL: Brug kun dette på sites, der kører udelukkende på HTTPS"
SESSION_HTTPONLY: "Kun HTTP"
SESSION_HTTPONLY_HELP: "Hvis denne indstilling er aktiveret bruges cookes kun over HTTP og Javascript-ændringer tillades ikke"
REVERSE_PROXY: "Omvendt proxy"
REVERSE_PROXY_HELP: "Aktiver denne hvis du er bag en omvendt proxy og har problemer med URL'er, der indeholder ukorrekte porte"
INVALID_FRONTMATTER_COULD_NOT_SAVE: "Ugyldigt forskræp; kunne ikke gemme"
ADD_FOLDER: "Tilføj mappe"
COPY_PAGE: "Kopiér side"
PROXY_URL: "Proxy-URL"
PROXY_URL_HELP: "Indtast proxyens host eller IP og port"
NOTHING_TO_SAVE: "Intet at gemme"
FILE_ERROR_ADD: "Der opstod en fejl under forsøg på at tilføje filen"
FILE_ERROR_UPLOAD: "Der opstod en fejl under forsøget på at uploade filer"
FILE_UNSUPPORTED: "Ikke-understøttet filtype"
ADD_ITEM: "Tilføj element"
FILE_TOO_LARGE: "Filen er for stor til at blive uploadet, maksimal tilladt er %s ifølge <br>dine PHP-indstillinger. Øge din 'post_max_size' PHP indstilling"
INSTALLING: "Installerer"
LOADING: "Indlæser.."
DEPENDENCIES_NOT_MET_MESSAGE: "De følgende afhængigheder skal være opfyldt først:"
ERROR_INSTALLING_PACKAGES: "Fejl under installering af af pakke(r)"
INSTALLING_DEPENDENCIES: "Installerer afhængigheder..."
INSTALLING_PACKAGES: "Installerer pakke(r).."
PACKAGES_SUCCESSFULLY_INSTALLED: "Pakke(r) installeret korrekt."
READY_TO_INSTALL_PACKAGES: "Klar til at installere pakke(r)"
PACKAGES_NOT_INSTALLED: "Pakker ikke installeret"
PACKAGES_NEED_UPDATE: "Pakker allerede installeret, men forældede"
PACKAGES_SUGGESTED_UPDATE: "Pakker allerede installeret, og versionen er i orden, men vil blive opdateret for at holde dig up to date"
REMOVE_THE: "Fjern %s"
CONFIRM_REMOVAL: "Er du sikker på, at du ønsker at slette %s?"
REMOVED_SUCCESSFULLY: "%s fjernet korrekt"
ERROR_REMOVING_THE: "Fejl i forsøget på at fjerne %s"
ADDITIONAL_DEPENDENCIES_CAN_BE_REMOVED: "%s krævede følgende afhængigheder, som ikke er påkrævet af andre pakker. Hvis du ikke bruger dem, kan du fjerne dem her."
READY_TO_UPDATE_PACKAGES: "Klar til at opdatere pakke(r)"
ERROR_UPDATING_PACKAGES: "Fejl under opdatering af pakke(r)"
UPDATING_PACKAGES: "Opdaterer pakke(r).."
PACKAGES_SUCCESSFULLY_UPDATED: "Pakke(r) opdateret korrekt."
UPDATING: "Updaterer"
GPM_RELEASES: "GPM udgivelser"
GPM_RELEASES_HELP: "Vælg 'Test' for at installere beta eller testversioner"
GPM_METHOD: "Fjernhentningsmetode"
GPM_METHOD_HELP: "Når indstillet til Auto afgør Grav, om fopen er tilgængelig og benytter den, ellers benyttes cURL. For at gennemtvinge brugen af den ene eller den, skift indstillingen."
GPM_VERIFY_PEER: "Fjerngodkend Peer (SSL)"
GPM_VERIFY_PEER_HELP: "Visse udbydere synes at svigte med at verificere getgrav.org SSL-certifikat, hvilket betyder, at GPM ikke vil fungere. Er dette tilfældet for dig, vil deaktivering af denne indstilling måske hjælpe"
AUTO: "Auto"
FOPEN: "fopen"
CURL: "cURL"
STABLE: "Stabil"
TESTING: "Tester"
FRONTMATTER_PROCESS_TWIG: "Processer frontmatter Twig"
FRONTMATTER_PROCESS_TWIG_HELP: "Når aktiveret kan du bruge Twig's konfigurationsvariabler i sidens frontmatter"
FRONTMATTER_IGNORE_FIELDS: "Ignorer frontmatter felter"
FRONTMATTER_IGNORE_FIELDS_HELP: "Visse frontmatter felter kan indeholde Twig, men skal ikke behandles. Så som \"formularer\""
PACKAGE_X_INSTALLED_SUCCESSFULLY: "Pakke %s installeret"
ORDERING_DISABLED_BECAUSE_PARENT_SETTING_ORDER: "Overordnet rækkefølge-indstilling, orden de-aktiveret"
ORDERING_DISABLED_BECAUSE_PAGE_NOT_VISIBLE: "Siden er ikke synlig, orden de-aktiveret"
ORDERING_DISABLED_BECAUSE_TOO_MANY_SIBLINGS: "Sortering af rækkefølge via administrationen er ikke tilgængelig, fordi der er mere end 200 under-elementer"
ORDERING_DISABLED_BECAUSE_PAGE_NO_PREFIX: "Sidebestilling er deaktiveret for denne side, da <strong>Numerisk Mappenpræfiks</strong> ikke er aktiveret"
CANNOT_ADD_MEDIA_FILES_PAGE_NOT_SAVED: "OBS: Du kan ikke tilføje medie-filer før du har gemt siden. Klik på \"Gem\" øverst"
CANNOT_ADD_FILES_PAGE_NOT_SAVED: "OBS: Siden skal gemmes før du kan tilføje filer til den."
DROP_FILES_HERE_TO_UPLOAD: "Smid dine filer her eller, <strong>Klik i dette område</strong>"
INSERT: "Indsæt"
UNDO: "Fortryd"
REDO: "Gendan"
HEADERS: "Overskrifter"
BOLD: "Fed"
ITALIC: "Kursiv"
STRIKETHROUGH: "Gennemstreget"
SUMMARY_DELIMITER: "Sammendragsafgrænser"
LINK: "Link"
IMAGE: "Billede"
BLOCKQUOTE: "Citatblok"
UNORDERED_LIST: "Usorteret liste"
ORDERED_LIST: "Sorteret liste"
EDITOR: "Editor"
PREVIEW: "Eksempelvisning"
FULLSCREEN: "Fuld skærm"
NON_ROUTABLE: "Ikke tilgængelig"
NON_VISIBLE: "Ikke-synlig"
NON_PUBLISHED: "Ikke udgivet"
CHARACTERS: "tegn"
PUBLISHING: "Udgivelse"
MEDIA_TYPES: "Medietyper"
IMAGE_OPTIONS: "Billedmuligheder"
MIME_TYPE: "MIME-type"
THUMB: "Miniature"
TYPE: "Type"
FILE_EXTENSION: "Filendelse"
LEGEND: "Sideoversigt"
MEMCACHE_SERVER: "Memcache-server"
MEMCACHE_SERVER_HELP: "Memcache-serveradressen"
MEMCACHE_PORT: "Memcache-port"
MEMCACHE_PORT_HELP: "Memcache-serverporten"
MEMCACHED_SERVER: "Memcachet-server"
MEMCACHED_SERVER_HELP: "Memcachet-serveradresse"
MEMCACHED_PORT: "Memcache-port"
MEMCACHED_PORT_HELP: "Memcachet-serverport"
REDIS_SERVER: "Redis-server"
REDIS_SERVER_HELP: "Redis-serveradressen"
REDIS_PORT: "Redis-port"
REDIS_PORT_HELP: "Redis-serverport"
REDIS_PASSWORD: "Redis-adgangskode/hemmelighed"
ALL: "Alle"
FROM: "fra"
TO: "til"
RELEASE_DATE: "Udgivelsesdato"
SORT_BY: "Sortér efter"
RESOURCE_FILTER: "Filtrér..."
FORCE_SSL: "Gennemtving SSL"
FORCE_SSL_HELP: "Gennemtving SSL globalt, hvis aktiveret, når webstedet nås via HTTP, Grav sender en omdirigering til HTTPS-siden"
NEWS_FEED: "Nyhedsfeed"
EXTERNAL_URL: "Ekstern URL"
CUSTOM_BASE_URL: "Tilpasset basis-URL"
CUSTOM_BASE_URL_HELP: "Benyt, hvis du ønsker at omskrive webstedsdomæne eller benytte en anden undermappe end den, Grav benytter. Eksempel: http://localhost"
FILEUPLOAD_PREVENT_SELF: 'Kan ikke benytte "%s" uden for sider.'
FILEUPLOAD_UNABLE_TO_UPLOAD: 'Kan ikke uploade fil %s: %s'
FILEUPLOAD_UNABLE_TO_MOVE: 'Kan ikke flytte fil %s til "%s"'
DROPZONE_CANCEL_UPLOAD: 'Annullér upload'
DROPZONE_CANCEL_UPLOAD_CONFIRMATION: 'Sikker på, at du vil annullere denne upload?'
DROPZONE_DEFAULT_MESSAGE: 'Slip dine filer hér eller, <strong>klik i dette område</strong>'
DROPZONE_FALLBACK_MESSAGE: 'Din browser understøtter ikke træk-og-slip fil-uploads.'
DROPZONE_FALLBACK_TEXT: 'Benyt venligst formularen nedenfor for alternativt at uploade filer ''som i gamle dage''.'
DROPZONE_FILE_TOO_BIG: 'Filen er for stor ({{filesize}}MiB). Maks. filstørrelse: {{maxFilesize}}MiB.'
DROPZONE_INVALID_FILE_TYPE: "Filer af denne type kan ikke uploades."
DROPZONE_MAX_FILES_EXCEEDED: "Der kan ikke uploades flere filer."
DROPZONE_REMOVE_FILE: "Fjern fil"
DROPZONE_RESPONSE_ERROR: "Serveren svarede med koden {{statusCode}}."
PREMIUM_PRODUCT: "Premium"
DESTINATION_NOT_SPECIFIED: "Destination er ikke angivet"
UPLOAD_ERR_NO_TMP_DIR: "Mangler en midlertidige mappe"
SESSION_SPLIT: "Sessionsopdeling"
SESSION_SPLIT_HELP: "Opdel sessioner uafhængigt mellem websted og andre plugins (f.eks. Admin)"
ERROR_FULL_BACKTRACE: "Vis detaljeret Backtrace fejlinfo"
ERROR_SIMPLE: "Vis simpel fejlinfo"
ERROR_SYSTEM: "Systemfejl"
IMAGES_AUTO_FIX_ORIENTATION: "Korrigér orientering automatisk"
IMAGES_AUTO_FIX_ORIENTATION_HELP: "Korrigér automatisk billedretningen baseret på Exif-dataene"
REDIS_SOCKET: "Redis socket"
REDIS_SOCKET_HELP: "Redis socket"
NOT_SET: "Ikke indstillet"
PERMISSIONS: "Rettigheder"
NEVER_CACHE_TWIG: "Mellemlagre aldrig Twig"
NEVER_CACHE_TWIG_HELP: "Cache kun indhold og behandle Twig for hver side. Ignorerer twig_first-indstilling."
ALLOW_WEBSERVER_GZIP: "Tillad WebServer Gzip"
ALLOW_WEBSERVER_GZIP_HELP: "Deaktiveret som standard. Når aktiveret, vil WebServer-konfigureret Gzip-/Deflate-kompression fungere, men HTTP-forbindelsen vil ikke blive lukket før onShutDown() begivenheden forårsager langsommere sideindlæsning"
OFFLINE_WARNING: "Kan ikke etablere forbindelse til GPM"
CLEAR_IMAGES_BY_DEFAULT: "Ryd som standard billede-cachen"
CLEAR_IMAGES_BY_DEFAULT_HELP: "Som standard ryddes behandlede billeder for alle caches. Dette kan deaktiveres"
CLI_COMPATIBILITY: "CLI-kompatibilitet"
CLI_COMPATIBILITY_HELP: "Sikrer, at kun ikke-flygtig Cache-drivere benyttes (fil, redis, memcache etc.)"
REINSTALL_PLUGIN: "Geninstallere plugin"
REINSTALL_THEME: "Geninstallere tema"
REINSTALL_THE: "Geninstallér %s"
CONFIRM_REINSTALL: "Sikker på, at du vil geninstallere dette %s?"
REINSTALLED_SUCCESSFULLY: "%s geninstalleret"
ERROR_REINSTALLING_THE: "Fejl under geninstallering af %s"
PACKAGE_X_REINSTALLED_SUCCESSFULLY: "Pakke %s geninstalleret"
REINSTALLATION_FAILED: "Geninstallation mislykkedes"
WARNING_REINSTALL_NOT_LATEST_RELEASE: "Den installerede version er ikke den seneste udgivelse. Ved at klikke på Fortsæt fjerner du fjerne den aktuelle version og installerer den senest tilgængelige version"
TOOLS: "Værktøjer"
NO_PACKAGE_NAME: "Pakkenavn ikke angivet"
PACKAGE_EXTRACTION_FAILED: "Pakkeudpakning mislykkedes"
NOT_VALID_GRAV_PACKAGE: "Ikke en gyldig Grav-pakke"
NAME_COULD_NOT_BE_DETERMINED: "Navn kunne ikke fastslås"
CANNOT_OVERWRITE_SYMLINKS: "Kan ikke overskrive symlinks"
ZIP_PACKAGE_NOT_FOUND: "ZIP-pakke blev ikke fundet"
GPM_OFFICIAL_ONLY: "Kun officiel GPM"
GPM_OFFICIAL_ONLY_HELP: "Tillade kun direkte installationer fra det officielle GPM-repositorie."
NO_CHILD_TYPE: "Ingen underordnet type for denne rawroute"
SORTABLE_PAGES: "Sorterbare sider:"
ADMIN_SPECIFIC_OVERRIDES: "Admin-specifikke tilsidesætter"
ADMIN_CHILDREN_DISPLAY_ORDER: "Underordnedes visningsrækkefølge"
ADMIN_CHILDREN_DISPLAY_ORDER_HELP: "Rækkefølgen, hvori undersider til denne side skal vises i visningen 'Sider' i Admin-plugin"
PWD_PLACEHOLDER: "kompleks streng minimum 8 tegn lang"
PWD_REGEX: "Adgangskode Regex"
PWD_REGEX_HELP: "Adgangskode skal som standard indeholde mindst ét ciffer, én versal og én minuskel samt udgøres af minimum otte tegn"
USERNAME_PLACEHOLDER: "kun minuskler, f.eks. 'admin'"
USERNAME_REGEX: "Brugernavn Regex"
USERNAME_REGEX_HELP: "Som standard kun minuskler, cifre, bindestreger og understregninger på 3-16 tegn"
ENABLE_AUTO_METADATA: "Auto-metadata fra Exif"
ENABLE_AUTO_METADATA_HELP: "Automatisk generere metadatafiler til billeder med exif-oplysninger"
2FA_TITLE: "Totrinsautentificering"
2FA_INSTRUCTIONS: "### 2-faktor Autentificering \nDu har **2FA** aktiveret for denne konto. Benyt venligst din **2FA**-app til at angive den aktuelle **6-cifrede kode** for at fuldføre loginprocessen."
2FA_LABEL: "Admin-adgang"
2FA_FAILED: "Ugyldig 2-faktor autentificeringskode, forsøg venligst igen..."
2FA_ENABLED: "2FA aktiveret"
2FA_CODE_INPUT: "000000"
2FA_SECRET: "2FA hemmelighed"
2FA_REGENERATE: "Regenerér"
FORCE_LOWERCASE_URLS: "Brug små bogstaver i URL'er"
VIEW_SITE_TIP: "Vis site"
TOOLS_DIRECT_INSTALL_TITLE: "Direkte installation af Grav-pakker"
TOOLS_DIRECT_INSTALL_UPLOAD_BUTTON: "Upload og installer"
OPEN_NEW_TAB: "Åbn i nyt faneblad"
STRICT_YAML_COMPAT: "YAML Kompatibilitet"
STRICT_TWIG_COMPAT: "Twig Kompatibilitet"
SCHEDULER_OUTPUT: "Output Fil"
SCHEDULER_EMAIL: "E-mail"
SECURITY: "Sikkerhed"
REPORTS: "Rapporter"
LOGS: "Logfiler"
BACKUPS_MAX_COUNT: "Maksimalt Antal Sikkerhedskopier"
BACKUPS_MAX_COUNT_HELP: "0 er ubegrænset"
BACKUPS_PROFILE_NAME: "Backup navn"
COMMAND: "Kommando"
CONFIGURATION: "Opsætning"
ADMIN_CACHING: "Aktivere Admin-cachelagring"
ADMIN_CACHING_HELP: "Cachelagring i admin kan styres uafhængigt af frontend-webstedet"
CONTENT_PADDING: "Indholdsrammer"
CONTENT_PADDING_HELP: "Aktivér/Deaktivér indholdsrammer omkring indholdsområde for at give mere plads"
TIMEOUT: "Timeout"
TIMEOUT_HELP: "Angiver sessionstimeout i sekunder"
DASHBOARD: "Kontrolpanel"
NOTIFICATIONS: "Notifikationer"
CONTENT_HIGHLIGHT_HELP: "Indholdsfremhævning"
REDIRECT_OPTION_NO_REDIRECT: "Ingen omdirigering"
REDIRECT_OPTION_DEFAULT_REDIRECT: "Benyt standardomdirigeringskode"
REDIRECT_OPTION_301: "301 - Flyttet permanent"
REDIRECT_OPTION_302: "302 - Flyttet midlertidigt"
REDIRECT_OPTION_303: "303 - Se andre"
IMAGES_CLS_TITLE: "Cumative Layer Shift (CLS)"
IMAGES_CLS_AUTO_SIZES: "Aktivér Auto-størrelser"
IMAGES_CLS_AUTO_SIZES_HELP: "Føj automatisk 'bredde'- og 'højde'-attributter til billeder for at adressere CLS"
IMAGES_CLS_ASPECT_RATIO: "Aktivér Størrelsesforhold"
IMAGES_CLS_ASPECT_RATIO_HELP: "Valgfri CSS-variabel, der bliver anvendt via en 'stil'-attribut, der kan bruges i CSS til tilpasset styling"
IMAGES_CLS_RETINA_SCALE: "Retinaskaleringsfaktor"
IMAGES_CLS_RETINA_SCALE_HELP: "Vil tage den beregnede størrelse og dividere med skaleringsfaktoren for at vise et billede med højere opløsning ved en mindre pixelstørrelse for bedre håndtering af HiDPI-opløsninger"
AUTOREGENERATE_FOLDER_SLUG: "Auto-regenerér baseret på sidetitel"
ENABLE: Aktivér
PLUGINS_MUST_BE_ENABLED: "Plugin skal være aktiveret for at opsætte"
ACTIVATION_REQUIRED: "Aktivering krævet for at opsætte"
+965
View File
@@ -0,0 +1,965 @@
---
PLUGIN_ADMIN:
ADMIN_NOSCRIPT_MSG: "Bitte aktivieren Sie JavaScript in Ihrem Browser."
ADMIN_BETA_MSG: "Dies ist eine Beta-Version! Benutzung auf eigene Gefahr..."
ADMIN_REPORT_ISSUE: "Fehler gefunden? Bitte melden Sie ihn auf GitHub."
EMAIL_FOOTER: "<a href=\"https://getgrav.org\"> Umgesetzt mit Grav</a> - dem modernen Flat-File CMS"
LOGIN_BTN: "Anmelden"
LOGIN_BTN_FORGOT: "Passwort vergessen"
LOGIN_BTN_RESET: "Passwort zurücksetzen"
LOGIN_BTN_SEND_INSTRUCTIONS: "Neues Passwort anfordern"
LOGIN_BTN_CLEAR: "Formular leeren"
LOGIN_BTN_CREATE_USER: "Benutzer erstellen"
LOGIN_LOGGED_IN: "Anmeldung erfolgreich"
LOGIN_FAILED: "Anmeldung fehlgeschlagen"
LOGGED_OUT: "Sie wurden abgemeldet"
RESET_NEW_PASSWORD: "Bitte geben Sie ein neues Passwort ein &hellip;"
RESET_LINK_EXPIRED: "Der Link zum Zurücksetzen Ihres Passwortes ist abgelaufen, bitte probieren Sie es erneut"
RESET_PASSWORD_RESET: "Das Passwort wurde zurückgesetzt"
RESET_INVALID_LINK: "Der Link zum Zurücksetzen Ihres Passwortes ist ungültig, bitte probieren Sie es erneut"
FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "Anweisungen zum Zurücksetzen des Passwortes wurden an %s gesendet"
FORGOT_FAILED_TO_EMAIL: "Anweisungen zum Zurücksetzen des Passwortes konnten nicht versendet werden, bitte probieren Sie es später erneut"
FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL: "Das Passwort für %s kann nicht geändert werden, da keine E-Mail-Adresse hinterlegt ist"
FORGOT_USERNAME_DOES_NOT_EXIST: "Es existiert kein Benutzer mit dem Namen <b>%s</b>"
FORGOT_EMAIL_NOT_CONFIGURED: "Passwort konnte nicht zurückgesetzt werden, da diese Seite nicht zum Versenden von E-Mails konfiguriert worden ist"
FORGOT_EMAIL_SUBJECT: "Zurücksetzen des Passwortes von %s"
FORGOT_EMAIL_BODY: "<h1>Passwort zurücksetzen</h1><p>Hallo %1$s,</p><p>Auf <b>%4$s</b> wurde die Zurücksetzung Ihres Passwortes angefordert.</p><p><br /><a href=\"%2$s\" class=\"btn-primary\">Klicken Sie hier um Ihr Passwort zurückzusetzen.</a><br /><br /></p><p>Alternativ können Sie auch die folgende Adresse in die Adresszeile Ihres Browsers kopieren:</p> <p>%2$s</p><p><br />Viele Grüße,<br /><br />%3$s</p>"
MANAGE_PAGES: "Seiten verwalten"
PAGES: "Seiten"
PLUGINS: "Plugins"
PLUGIN: "Plugin"
THEMES: "Themes"
LOGOUT: "Abmelden"
BACK: "Zurück"
NEXT: "Nächste"
PREVIOUS: "Vorherige"
ADD_PAGE: "Seite hinzufügen"
MOVE: "Verschieben"
DELETE: "Löschen"
UNSET: "Zurücksetzen"
VIEW: "Anzeigen"
SAVE: "Speichern"
NORMAL: "Normal"
EXPERT: "Expertenansicht"
EXPAND_ALL: "Alle ausklappen"
COLLAPSE_ALL: "Alle einklappen"
ERROR: "Fehler"
CLOSE: "Schließen"
CANCEL: "Abbrechen"
CONTINUE: "Weiter"
CONFIRM: "Bestätigen"
MODAL_DELETE_PAGE_CONFIRMATION_REQUIRED_TITLE: "Bestätigung erforderlich"
MODAL_CHANGED_DETECTED_TITLE: "Änderungen erkannt"
MODAL_CHANGED_DETECTED_DESC: "Einige Änderungen wurden noch nicht gespeichert. Wollen Sie diese Seite wirklich verlassen?"
MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_TITLE: "Bestätigung erforderlich"
MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_DESC: "Wollen Sie diese Datei wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden."
MODAL_UPDATE_GRAV_CONFIRMATION_REQUIRED_DESC: "Sie sind dabei, Grav auf die neueste Version zu aktualisieren. Möchten Sie fortfahren?"
ADD_FILTERS: "Filter hinzufügen"
SEARCH_PAGES: "Seiten durchsuchen"
VERSION: "Version"
WAS_MADE_WITH: "Erstellt mit"
BY: "Von"
UPDATE_THEME: "Theme aktualisieren"
UPDATE_PLUGIN: "Plugins aktualisieren"
OF_THIS_THEME_IS_NOW_AVAILABLE: "dieses Themes ist verfügbar"
OF_THIS_PLUGIN_IS_NOW_AVAILABLE: "dieses Plugins ist verfügbar"
AUTHOR: "Autor"
HOMEPAGE: "Homepage"
DEMO: "Demo"
BUG_TRACKER: "Bug-Tracker"
KEYWORDS: "Schlagwörter"
LICENSE: "Lizenz"
DESCRIPTION: "Beschreibung"
README: "Readme"
DOCS: "Dokumentation"
REMOVE_THEME: "Theme löschen"
INSTALL_THEME: "Theme installieren"
THEME: "Theme"
BACK_TO_THEMES: "Zurück zu den Themes"
BACK_TO_PLUGINS: "Zurück zu den Plugins"
CHECK_FOR_UPDATES: "Updates suchen"
ADD: "Hinzufügen"
CLEAR_CACHE: "Cache leeren"
CLEAR_CACHE_ALL_CACHE: "Alle Caches"
CLEAR_CACHE_ASSETS_ONLY: "Nur Assets"
CLEAR_CACHE_IMAGES_ONLY: "Nur Bilder"
CLEAR_CACHE_CACHE_ONLY: "Nur Cache"
CLEAR_CACHE_TMP_ONLY: "nur temporär"
UPDATES_AVAILABLE: "Updates verfügbar"
DAYS: "Tage"
UPDATE: "Aktualisieren"
BACKUP: "Sicherung"
BACKUPS: "Sicherungen"
BACKUP_NOW: "Sicherung jetzt erstellen"
BACKUPS_STATS: "Sicherungsstatistiken"
BACKUPS_HISTORY: "Sicherungsverlauf"
BACKUPS_PURGE_CONFIG: "Automatisches Löschen von Sicherungen"
BACKUPS_PROFILES: "Sicherungsprofile"
BACKUPS_COUNT: "Anzahl an Sicherungen"
BACKUPS_PROFILES_COUNT: "Anzahl der Profile"
BACKUPS_TOTAL_SIZE: "Belegter Speicherplatz"
BACKUPS_NEWEST: "Neuste Sicherung"
BACKUPS_OLDEST: "Älteste Sicherung"
BACKUPS_PURGE: "Bereinigen"
BACKUPS_NOT_GENERATED: "Bisher wurden keine Backups generiert..."
BACKUPS_PURGE_NUMBER: "Sie nutzen %s von insgesamt %s möglichen Backups"
BACKUPS_PURGE_TIME: "%s Tage an Sicherungen übrig"
BACKUPS_PURGE_SPACE: "%s von %s verwendet"
BACKUP_DELETED: "Backup erfolgreich gelöscht"
BACKUP_NOT_FOUND: "Sicherung wurde nicht gefunden"
BACKUP_DATE: "Sicherungsdatum"
STATISTICS: "Statistiken"
VIEWS_STATISTICS: "Seiten Statistik"
TODAY: "Heute"
WEEK: "Woche"
MONTH: "Monat"
LATEST_PAGE_UPDATES: "Zuletzt bearbeitete Seiten"
MAINTENANCE: "Wartung"
UPDATED: "Aktualisiert"
MON: "Mo"
TUE: "Di"
WED: "Mi"
THU: "Do"
FRI: "Fr"
SAT: "Sa"
SUN: "So"
COPY: "Kopieren"
EDIT: "Bearbeiten"
CREATE: "Erstellen"
GRAV_ADMIN: "Grav-Admin"
GRAV_OFFICIAL_PLUGIN: "Offizielles Grav Plugin"
GRAV_OFFICIAL_THEME: "Offizielles Grav Theme"
PLUGIN_SYMBOLICALLY_LINKED: "Dieses Plugin basiert auf einer symbolischen Verknüpfung. Updates werden daher nicht erkannt."
THEME_SYMBOLICALLY_LINKED: "Dieses Theme basiert auf einer symbolischen Verknüpfung. Updates werden daher nicht erkannt."
REMOVE_PLUGIN: "Plugin entfernen"
INSTALL_PLUGIN: "Plugin installieren"
AVAILABLE: "Verfügbar"
INSTALLED: "Installiert"
INSTALL: "Installieren"
ACTIVE_THEME: "Ausgewähltes Theme"
SWITCHING_TO: "Wechseln zu"
SWITCHING_TO_DESCRIPTION: "Durch das Wechseln des Themes kann nicht garantiert werden, dass das Layout aller Seiten unterstützt wird. Daher können beim Aufrufen der Seiten Fehler entstehen."
SWITCHING_TO_CONFIRMATION: "Möchten Sie fortfahren und zum Theme wechseln"
CREATE_NEW_USER: "Neuen Benutzer erstellen"
REMOVE_USER: "Benutzer entfernen"
ACCESS_DENIED: "Zugriff verweigert"
ACCOUNT_NOT_ADMIN: "Ihr Account verfügt über keine Administrationsberechtigungen"
PHP_INFO: "PHP-Info"
INSTALLER: "Installationsprogramm"
AVAILABLE_THEMES: "Verfügbare Themes"
AVAILABLE_PLUGINS: "Verfügbare Plugins"
INSTALLED_THEMES: "Installierte Themes"
INSTALLED_PLUGINS: "Installierte Plugins"
BROWSE_ERROR_LOGS: "Error Logs anzeigen"
SITE: "Site"
INFO: "Info"
SYSTEM: "System"
USER: "Benutzer"
ADD_ACCOUNT: "Benutzer hinzufügen"
SWITCH_LANGUAGE: "Sprache wechseln"
SUCCESSFULLY_ENABLED_PLUGIN: "Plugin erfolgreich aktiviert"
SUCCESSFULLY_DISABLED_PLUGIN: "Plugin erfolgreich deaktiviert"
SUCCESSFULLY_CHANGED_THEME: "Standard Theme erfolgreich geändert"
INSTALLATION_FAILED: "Installation fehlgeschlagen"
INSTALLATION_SUCCESSFUL: "Installation erfolgreich"
UNINSTALL_FAILED: "Deinstallation fehlgeschlagen"
UNINSTALL_SUCCESSFUL: "Deinstallation erfolgreich"
SUCCESSFULLY_SAVED: "Speichern erfolgreich"
SUCCESSFULLY_COPIED: "Kopieren erfolgreich"
REORDERING_WAS_SUCCESSFUL: "Umsortieren war erfolgreich"
SUCCESSFULLY_DELETED: "Erfolgreich gelöscht"
SUCCESSFULLY_SWITCHED_LANGUAGE: "Sprache erfolgreich gewechselt"
INSUFFICIENT_PERMISSIONS_FOR_TASK: "Sie haben unzureichende Berechtigungen für diese Aktion"
CACHE_CLEARED: "Cache geleert"
METHOD: "Methode"
ERROR_CLEARING_CACHE: "Fehler beim leeren des Cache"
AN_ERROR_OCCURRED: "Ein Fehler ist aufgetreten"
YOUR_BACKUP_IS_READY_FOR_DOWNLOAD: "Ihr Backup steht zum Download bereit"
DOWNLOAD_BACKUP: "Backup herunterladen"
PAGES_FILTERED: "Seiten gefiltert"
NO_PAGE_FOUND: "Keine Seite gefunden"
INVALID_PARAMETERS: "Ungültige Eingabe"
NO_FILES_SENT: "Keine Dateien übertragen"
EXCEEDED_FILESIZE_LIMIT: "Dateigrößenbeschränkung aus PHP-Konfiguration überschritten"
EXCEEDED_POSTMAX_LIMIT: "PHP-Einstellung post_max_size überschritten"
UNKNOWN_ERRORS: "Unbekannte Fehler"
EXCEEDED_GRAV_FILESIZE_LIMIT: "Dateigrößenbeschränkung in Grav-Konfiguration überschritten"
UNSUPPORTED_FILE_TYPE: "Dateityp nicht unterstützt"
FAILED_TO_MOVE_UPLOADED_FILE: "Hochgeladene Datei konnte nicht verschoben werden."
FILE_UPLOADED_SUCCESSFULLY: "Datei erfolgreich hochgeladen"
FILE_DELETED: "Datei gelöscht"
FILE_COULD_NOT_BE_DELETED: "Datei konnte nicht gelöscht werden"
FILE_NOT_FOUND: "Datei nicht gefunden"
NO_FILE_FOUND: "Keine Datei gefunden"
GRAV_WAS_SUCCESSFULLY_UPDATED_TO: "Grav wurde erfolgreich aktualisiert auf"
GRAV_UPDATE_FAILED: "Grav Update fehlgeschlagen"
EVERYTHING_UPDATED: "Alles aktualisiert"
UPDATES_FAILED: "Updates fehlgeschlagen"
AVATAR_BY: "Avatar von"
AVATAR_UPLOAD_OWN: "Oder laden Sie Ihr eigenes hoch..."
LAST_BACKUP: "Letztes Backup"
FULL_NAME: "Voller Name"
USERNAME: "Benutzername"
EMAIL: "E-Mail"
USERNAME_EMAIL: "Benutzername oder E-Mail"
PASSWORD: "Passwort"
PASSWORD_CONFIRM: "Passwort bestätigen"
TITLE: "Titel"
LANGUAGE: "Sprache"
ACCOUNT: "Benutzer"
EMAIL_VALIDATION_MESSAGE: "Muss eine gültige E-Mail Adresse sein"
PASSWORD_VALIDATION_MESSAGE: "Das Passwort muss mindestens eine Zahl, einen Groß- und einen Kleinbuchstaben enthalten sowie mindestens 8 Zeichen lang sein."
LANGUAGE_HELP: "Bevorzugte Sprache einstellen"
MEDIA: "Medien"
DEFAULTS: "Standards"
SITE_TITLE: "Website Titel"
SITE_TITLE_PLACEHOLDER: "Titel der Website"
SITE_TITLE_HELP: "Titel der Site. Wird häufig von Themes verwendet."
SITE_DEFAULT_LANG: "Standardsprache"
SITE_DEFAULT_LANG_PLACEHOLDER: "Standardsprache die im Theme <HTML> Tag benutzt werden soll"
SITE_DEFAULT_LANG_HELP: "Standardsprache die im Theme <HTML> Tag benutzt werden soll"
DEFAULT_AUTHOR: "Hauptautor"
DEFAULT_AUTHOR_HELP: "Name des Hauptautors, häufig verwendet in Themes und Inhalten"
DEFAULT_EMAIL: "Standard E-Mail Adresse"
DEFAULT_EMAIL_HELP: "Standard E-Mail Adresse, die in Plugins und Themes verwendet wird"
TAXONOMY_TYPES: "Tag-Typen"
TAXONOMY_TYPES_HELP: "Wenn sie verschiedene Tag-Typen verwenden wollen, müssen Sie hier die verschiedenen Typen angeben."
PAGE_SUMMARY: "Seitenzusammenfassung"
ENABLED: "Aktiviert"
ENABLED_HELP: "Aktiviert die Seitenzusammenfassung (die Seitenzusammenfassung entspricht dem Inhalt der Seite)"
'YES': "Ja"
'NO': "Nein"
SUMMARY_SIZE: "Zusammenfassungslänge"
SUMMARY_SIZE_HELP: "Länge der Zusammenfassung in Buchstaben"
FORMAT: "Format"
FORMAT_HELP: "kurz = Kürzung der Zusammenfassung bis zum Trennzeichen oder der Zusammenfassungslänge; lang = Trennzeichen wird ignoriert"
SHORT: "Kurz"
LONG: "Lang"
DELIMITER: "Trennzeichen"
DELIMITER_HELP: "Das Trennzeichen für die Zusammenfassung (Standard '===')"
METADATA: "Metadaten"
METADATA_HELP: "Standardmetadaten, die auf jeder Seite angezeigt werden, es sei denn sie werden von einer Seite überschrieben"
NAME: "Name"
CONTENT: "Inhalt"
SIZE: "Größe"
ACTION: "Aktion"
REDIRECTS_AND_ROUTES: "Weiterleitungen & Routen"
CUSTOM_REDIRECTS: "Eigene Weiterleitungen"
CUSTOM_REDIRECTS_HELP: "Routen, die auf andere Seiten weiterleiten. Standard Regex Ersetzungen sind erlaubt"
CUSTOM_REDIRECTS_PLACEHOLDER_KEY: "/dein/alias"
CUSTOM_REDIRECTS_PLACEHOLDER_VALUE: "/deine/umleitung"
CUSTOM_ROUTES: "Eigene Routen"
CUSTOM_ROUTES_HELP: "Routen, die auf andere Seiten verweisen. Standard Regex Ersetzungen sind erlaubt"
CUSTOM_ROUTES_PLACEHOLDER_KEY: "/dein/alias"
CUSTOM_ROUTES_PLACEHOLDER_VALUE: "/deine/route"
FILE_STREAMS: "Datei Streams"
DEFAULT: "Standard"
PAGE_MEDIA: "Seitenmedien"
OPTIONS: "Optionen"
PUBLISHED: "Veröffentlicht"
PUBLISHED_HELP: "Standardmäßig ist eine Seite veröffentlicht, es sei denn sie wird explizit auf nicht veröffentlicht gesetzt, das Veröffentlichungsdatum liegt in der Zukunft oder das Ablaufdatum wurde erreicht."
DATE: "Datum"
DATE_HELP: "Die Datumsangabe erlaubt es diese Seite mit einem Datum zu versehen."
PUBLISHED_DATE: "Veröffentlichungsdatum"
PUBLISHED_DATE_HELP: "Datum ab dem die Seite automatisch veröffentlicht wird."
UNPUBLISHED_DATE: "Ablaufdatum"
UNPUBLISHED_DATE_HELP: "Datum ab dem die Veröffentlichung der Seite zurückgenommen wird."
ROBOTS: "Robots"
TAXONOMIES: "Tags"
TAXONOMY: "Tag"
ADVANCED: "Erweitert"
SETTINGS: "Einstellungen"
FOLDER_NUMERIC_PREFIX: "Numerischer Ordnerprefix"
FOLDER_NUMERIC_PREFIX_HELP: "Numerischer Prefix der die Reihenfolge und Sichtbarkeit der Seiten beeinflusst"
FOLDER_NAME: "Ordnername"
FOLDER_NAME_HELP: "Name des Ordners, der für diese Seite angelegt werden sollen"
PARENT: "Übergeordnet"
DEFAULT_OPTION_ROOT: "- Ursprung -"
DEFAULT_OPTION_SELECT: "- Auswählen -"
DISPLAY_TEMPLATE: "Template anzeigen"
DISPLAY_TEMPLATE_HELP: "Der Seitentyp der zur Wahl des richtigen Twig Templates verwendet wird."
ORDERING: "Sortierung"
PAGE_ORDER: "Seitensortierung"
OVERRIDES: "Überschreibungen"
MENU: "Menü"
MENU_HELP: "Text zur Anzeige im Menu. Wenn nicht gesetzt, wird der Titel verwendet."
SLUG: "Slug"
SLUG_HELP: "Der Slug bestimmt den Namen der Seite innerhalb der URL."
SLUG_VALIDATE_MESSAGE: "Ein Slug darf nur aus Kleinbuchstaben und Bindestrichen bestehen"
PROCESS: "Verarbeitung"
PROCESS_HELP: "Steuert die Verarbeitung einer Seite. Sollte pro Seite und nicht global gesetzt werden."
DEFAULT_CHILD_TYPE: "Standardtyp für Unterseiten"
USE_GLOBAL: "Globale Einstellungen verwenden"
ROUTABLE: "Aufrufbar"
ROUTABLE_HELP: "Ob diese Seite mit einer URL aufgerufen werden kann"
CACHING: "Caching"
VISIBLE: "Sichtbar"
VISIBLE_HELP: "Steuert die Sichtbarkeit einer Seite im Menü."
DISABLED: "Deaktiviert"
ITEMS: "Elemente"
ORDER_BY: "Sortieren nach"
ORDER: "Sortierung"
FOLDER: "Ordner"
ASCENDING: "Aufsteigend"
DESCENDING: "Absteigend"
PAGE_TITLE: "Seitentitel"
PAGE_TITLE_HELP: "Titel der Seite"
PAGE: "Seite"
FRONTMATTER: "Frontmatter"
FILENAME: "Dateiname"
PARENT_PAGE: "Übergeordnete Seite"
HOME_PAGE: "Startseite"
HOME_PAGE_HELP: "Seite die von Grav als Startseite genutzt werden soll"
DEFAULT_THEME: "Standard Theme"
DEFAULT_THEME_HELP: "Setzt den Standard Theme von Grav (Standard ist Antimatter)"
TIMEZONE: "Zeitzone"
TIMEZONE_HELP: "Überschreibt die Zeitzone des Servers"
SHORT_DATE_FORMAT: "Kurzes Datumsformat"
SHORT_DATE_FORMAT_HELP: "Setzt das von Themes genutzte Kurzdatumsformat"
LONG_DATE_FORMAT: "Langes Datumsformat"
LONG_DATE_FORMAT_HELP: "Setzt das von Themes genutzte Langdatumsformat"
DEFAULT_ORDERING: "Standard Sortierung"
DEFAULT_ORDERING_HELP: "Seiten in einer Liste werden in der Standard Sortierung angezeigt, falls diese nicht überschrieben wird."
DEFAULT_ORDERING_DEFAULT: "Standard - basierend auf dem Ordnernamen"
DEFAULT_ORDERING_FOLDER: "Ordner - basierend auf dem Ordnernamen ohne Prefix"
DEFAULT_ORDERING_TITLE: "Titel - basieren auf dem Seitentitel"
DEFAULT_ORDERING_DATE: "Datum - basierend auf dem Datum der Seite"
DEFAULT_ORDER_DIRECTION: "Standard Sortierrichtung"
DEFAULT_ORDER_DIRECTION_HELP: "Sortierrichtung von Seiten in einer Liste"
DEFAULT_PAGE_COUNT: "Standard Seitenzahl"
DEFAULT_PAGE_COUNT_HELP: "Maximale Anzahl von Seiten in einer Liste"
DATE_BASED_PUBLISHING: "Datumsbasierte Veröffentlichungen"
DATE_BASED_PUBLISHING_HELP: "Seiten mit Veröffentlichungs- und Ablaufdatum automatisch veröffentlichen oder zurückziehen"
EVENTS: "Ereignisse"
EVENTS_HELP: "Von Grav gesteuerte Ereignisse aktivieren. Ein Deaktivieren kann Plugins in ihrer Funktionsweise stören."
REDIRECT_DEFAULT_ROUTE: "Weiterleiten auf Standardroute"
REDIRECT_DEFAULT_ROUTE_HELP: "Automatisches Weiterleiten auf die Route einer Seite"
LANGUAGES: "Sprachen"
SUPPORTED: "Unterstützt"
SUPPORTED_HELP: "Durch Kommata getrennte Liste mit 2-stelligen Sprachcodes (zum Beispiel 'en,fr,de')"
SUPPORTED_PLACEHOLDER: "z.B. de, fr"
TRANSLATIONS_FALLBACK: "Fallbacksprache"
TRANSLATIONS_FALLBACK_HELP: "Falls Übersetzungen in einer Sprache nicht vorhanden sind, wird auf diese Sprache zurückgegriffen"
ACTIVE_LANGUAGE_IN_SESSION: "Aktive Sprache in Session speichern"
ACTIVE_LANGUAGE_IN_SESSION_HELP: "Speichert die aktive Sprache in der Session"
HTTP_HEADERS: "HTTP-Header"
EXPIRES: "Läuft ab"
EXPIRES_HELP: "Ändert den Expires-Header (Cache-Ablaufdatum). Angabe in Sekunden"
CACHE_CONTROL: "HTTP-Cache-Control"
CACHE_CONTROL_HELP: "Muss auf einen validen Cache-Control-Wert gesetzt werden, wie zum Beispiel 'no-cache, no-store, must-revalidate\""
CACHE_CONTROL_PLACEHOLDER: "z.B. public, max-age=31536000"
LAST_MODIFIED: "Zuletzt geändert"
LAST_MODIFIED_HELP: "Setzt das Datum der letzten Änderung um Caching zu optimieren"
ETAG: "ETag"
ETAG_HELP: "Setzt den ETag-Header um Änderungen der Seite für Proxies erkenntlich zu machen"
VARY_ACCEPT_ENCODING: "Vary Accept Encoding"
VARY_ACCEPT_ENCODING_HELP: "Setzt den `Vary: Accept Encoding`-Header um Proxies und CDNs zu optimieren"
MARKDOWN: "Markdown"
MARKDOWN_EXTRA: "Markdown extra"
MARKDOWN_EXTRA_HELP: "Aktiviert Markdown Extra Unterstützung - https://michelf.ca/projects/php-markdown/extra/"
MARKDOWN_EXTRA_ESCAPE_FENCES: "Escape HTML-Elemente in Markdown extra fences"
MARKDOWN_EXTRA_ESCAPE_FENCES_HELP: "Escapes HTML-Elemente in Markdown extra fences"
AUTO_LINE_BREAKS: "Automatische Zeilenumbrüche"
AUTO_LINE_BREAKS_HELP: "Aktiviert Unterstützung für automatische Zeilenumbrüche in Markdown"
AUTO_URL_LINKS: "URLs zu Links verwandeln"
AUTO_URL_LINKS_HELP: "Verwandelt jede URL in einen HTML-Link"
ESCAPE_MARKUP: "HTML Ausgabe unterdrücken"
ESCAPE_MARKUP_HELP: "Ersetzt Markup-Tags durch HTML-Zeichen"
CACHING_HELP: "Globaler an/aus Schalter um Caching in Grav zu aktivieren/deaktivieren"
CACHE_CHECK_METHOD: "Cacheprüfungsmethode"
CACHE_CHECK_METHOD_HELP: "Methode, die Grav verwendet, um zu erkennen, ob Seiten geändert wurden."
CACHE_DRIVER: "Cache-Treiber"
CACHE_DRIVER_HELP: "Cache-Treiber den Grav verwendet um Dateien vorzuhalten. 'Automatisch' versucht selbstständig den besten Treiber zu ermitteln."
CACHE_PREFIX: "Cache-Prefix"
CACHE_PREFIX_HELP: "Cache-Prefix der verwendet wird um Dateien zu cachen. Sollte nicht verändert werden, wenn man nicht genau weiß, was man tut."
CACHE_PREFIX_PLACEHOLDER: "Abgeleitet von der Basis-URL (überschreiben durch einen zufälligen Text)"
CACHE_PURGE_JOB: "Geplante Bereinigung ausführen"
CACHE_PURGE_JOB_HELP: "Mit dem Zeitplaner können Sie die alten Ordner für den Cache der Doctrine-Datei mit diesem Job regelmäßig löschen"
CACHE_CLEAR_JOB: "Geplante Bereinigung ausführen"
CACHE_CLEAR_JOB_HELP: "Mit dem Scheduler können Sie den Grav-Cache periodisch löschen"
CACHE_JOB_TYPE: "Cache Job Typ"
CACHE_JOB_TYPE_HELP: "Entweder mit dem Cache Clear der 'Standard' Ordner löschen, oder mit 'allen' Ordnern"
CACHE_PURGE: "Alten Cache bereinigen"
LIFETIME: "Cache-Lebensdauer"
LIFETIME_HELP: "Setzt die Dauer des Caches in Sekunden. 0 = unendlich"
GZIP_COMPRESSION: "Gzip-Komprimierung"
GZIP_COMPRESSION_HELP: "Aktiviert Gzip-Komprimierung um Grav schneller an Browser senden zu können."
TWIG_TEMPLATING: "Twig Templates"
TWIG_CACHING: "Twig Caching"
TWIG_CACHING_HELP: "Twig Cache-Einstellungen. Sollte aktiviert bleiben um die beste Performance zu gewährleisten."
TWIG_DEBUG: "Twig debuggen"
TWIG_DEBUG_HELP: "Deaktiviert die Twig-Debug-Extension"
DETECT_CHANGES: "Änderungen erkennen"
DETECT_CHANGES_HELP: "Twig erkennt automatisch, wenn Themes geändert werden und baut den Cache neu auf"
AUTOESCAPE_VARIABLES: "Variablen automatisch escapen"
AUTOESCAPE_VARIABLES_HELP: "Alle Veriablen escapen. Ihre Seite könnte dadurch nicht korrekt angezeigt werden"
ASSETS: "Assets"
CSS_PIPELINE: "CSS Pipeline"
CSS_PIPELINE_HELP: "Die CSS Pipeline fasst alle Ihre CSS Dateien in einer einzigen Datei zusammen"
CSS_PIPELINE_INCLUDE_EXTERNALS: "Externe CSS-Dateien mit in die Pipeline aufnehmen"
CSS_PIPELINE_INCLUDE_EXTERNALS_HELP: "Externe Resourcen haben evtl. relative Pfadangaben und sollten deshalb nicht mit in die Pipeline aufgenommen werden"
CSS_PIPELINE_BEFORE_EXCLUDES: "CSS Pipeline zuerst"
CSS_PIPELINE_BEFORE_EXCLUDES_HELP: "Führt die CSS Pipeline vor ausgeschlossen CSS-Verweisen aus"
CSS_MINIFY: "CSS minifizieren"
CSS_MINIFY_HELP: "Komprimiert ihre CSS Dateien nach dem pipelining"
CSS_MINIFY_WINDOWS_OVERRIDE: "CSS minify Windows"
CSS_MINIFY_WINDOWS_OVERRIDE_HELP: "Verwendet eine andere minify Version, die auf Windows-Betriebssystemen besser funktioniert"
CSS_REWRITE: "CSS Umschreiben"
CSS_REWRITE_HELP: "Ersetze alle relativen CSS URLs beim pipelining"
JAVASCRIPT_PIPELINE: "Javascript Pipeline"
JAVASCRIPT_PIPELINE_HELP: "Kombiniert alle JavaScript Dateien zu einer"
JAVASCRIPT_PIPELINE_INCLUDE_EXTERNALS: "Externe Javascript-Dateien mit in die Pipeline aufnehmen"
JAVASCRIPT_PIPELINE_INCLUDE_EXTERNALS_HELP: "Externe Resourcen haben evtl. relative Pfadangaben und sollten deshalb nicht mit in die Pipeline aufgenommen werden"
JAVASCRIPT_PIPELINE_BEFORE_EXCLUDES: "Javascript Pipeline zuerst"
JAVASCRIPT_PIPELINE_BEFORE_EXCLUDES_HELP: "Bindet zuerst die Pipline und dann die ausgenommenen Skripte ein"
JAVASCRIPT_MINIFY: "JavaScript minifizieren"
JAVASCRIPT_MINIFY_HELP: "Komprimiert die JavaScript Dateien nach dem pipelining"
ENABLED_TIMESTAMPS_ON_ASSETS: "Zeitstempel für Assets aktivieren"
ENABLED_TIMESTAMPS_ON_ASSETS_HELP: "Aktviert die Zeitstempel für Assets"
ENABLED_SRI_ON_ASSETS: "Aktiviere SRI für Assets"
ENABLED_SRI_ON_ASSETS_HELP: "Aktiviert Subresource Integrity (SRI) für Assets. Mehr Informationen: https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity"
COLLECTIONS: "Sammlungen"
ERROR_HANDLER: "Fehlerbehandlung"
DISPLAY_ERRORS: "Fehler Anzeigen"
DISPLAY_ERRORS_HELP: "Volle Backtrace-Fehler-Seite anzeigen"
LOG_ERRORS: "Fehler protokollieren"
LOG_ERRORS_HELP: "Fehler im /logs Ordner speichern"
LOG_HANDLER: "Log-Handler"
LOG_HANDLER_HELP: "Ausgabeort von Logs"
SYSLOG_FACILITY: "Syslog-Facility"
SYSLOG_FACILITY_HELP: "Syslog-Facility für die Ausgabe"
DEBUGGER: "Debugger"
DEBUGGER_HELP: "Aktiviert den Grav Debugger und die folgenden Einstellungen"
DEBUG_TWIG: "Twig debuggen"
DEBUG_TWIG_HELP: "Twig Templates debuggen"
SHUTDOWN_CLOSE_CONNECTION: "Verbindung trennen"
SHUTDOWN_CLOSE_CONNECTION_HELP: "Trennt die Verbindung vor dem Aufruf von onShutdown(). Deaktivieren für Debugging"
DEFAULT_IMAGE_QUALITY: "Standard Bildqualität"
DEFAULT_IMAGE_QUALITY_HELP: "Standardbildqualität beim Speichern von Bildern (85%)"
CACHE_ALL: "Alle Bilder cachen"
CACHE_ALL_HELP: "Alle Bilder, auch ohne Bearbeitung, im Grav Cache ablegen"
IMAGES_DEBUG: "Bild Debug Wasserzeichen"
IMAGES_DEBUG_HELP: "Wasserzeichen mit der Auflösung der Bilder anzeigen um Retina-Displays zu testen"
IMAGES_LOADING: "Bildladeverhalten"
IMAGES_LOADING_HELP: "Das \"loading\" Attribut erlaubt es dem Browser, Bilder oder iFrames erst zu laden, wenn sie in den Sichtbereich des Nutzers gelangen"
IMAGES_SEOFRIENDLY: "SEO freundliche Bildnamen"
IMAGES_SEOFRIENDLY_HELP: "Wenn diese Option aktiviert ist, wird zuerst der Bildname und dann ein kleinerer Hash angezeigt, um verarbeitete Vorgänge anzuzeigen"
UPLOAD_LIMIT: "Datei Upload Limit"
UPLOAD_LIMIT_HELP: "Maximale Dateigröße in Bytes (0 = ohne Beschränkung)"
ENABLE_MEDIA_TIMESTAMP: "Zeitstempel für Mediadateien"
ENABLE_MEDIA_TIMESTAMP_HELP: "Fügt jedem Medienelement einen Zeitstempel der letzten Bearbeitung hinzu"
SESSION: "Sitzung"
SESSION_ENABLED_HELP: "Sessions in Grav aktivieren"
SESSION_NAME_HELP: "Name für den Session-Cookie"
SESSION_UNIQUENESS: "Primärschlüssel"
SESSION_UNIQUENESS_HELP: "MD5 Hash des Root-Path von Grav, z.B. `GRAV_ROOT` (Standard) oder ein auf dem zufälligen `security.salt` basierender String."
ABSOLUTE_URLS: "Absolute URLs"
ABSOLUTE_URLS_HELP: "Absolute oder Relative Pfadangaben für `base_url`"
PARAMETER_SEPARATOR: "Parameter Trennzeichen"
PARAMETER_SEPARATOR_HELP: "Trennzeichen für Parameter in der URL"
TASK_COMPLETED: "Aufgabe erledigt"
EVERYTHING_UP_TO_DATE: "Keine Aktualisierungen verfügbar"
UPDATES_ARE_AVAILABLE: "Aktualisierung(en) verfügbar"
IS_AVAILABLE_FOR_UPDATE: "ist zur Aktualisierung verfügbar"
IS_NOW_AVAILABLE: "ist jetzt verfügbar"
CURRENT: "Aktuell"
UPDATE_GRAV_NOW: "Grav jetzt aktualisieren"
GRAV_SYMBOLICALLY_LINKED: "Grav ist symbolisch Verknüpft und kann daher nicht aktualisiert werden"
UPDATING_PLEASE_WAIT: "Aktualisiere, bitte warten…"
OF_THIS: "von diesem"
OF_YOUR: "von deinem"
HAVE_AN_UPDATE_AVAILABLE: "hat ein Update verfügbar"
SAVE_AS: "Speichern als"
MODAL_DELETE_PAGE_CONFIRMATION_REQUIRED_DESC: "Sind Sie sicher, dass Sie diese Seite und all deren Kinder löschen wollen? Wenn diese Seite noch in anderen Sprachen vorliegt, werden diese Übersetzungen behalten & müssen separat gelöscht werden. Ansonsten wird die Seite samt Ordner mit allen Unterseiten gelöscht. Diese Aktion kann nicht rückgängig gemacht werden."
AND: "und"
UPDATE_AVAILABLE: "Aktualisierung verfügbar"
METADATA_KEY: "Schlüssel (z.B. 'Stichwort')"
METADATA_VALUE: "Wert (z.B. 'Blog, Grav')"
USERNAME_HELP: "Der Nutzername sollte zwischen 3 bis 16 Zeichen lang sein und darf Kleinbuchstaben, Zahlen, Unterstrichen und Bindestrichen enthalten. Großbuchstaben, Leerzeichen und Sonderzeichen sind nicht erlaubt"
FULLY_UPDATED: "Vollständig aktualisiert"
SAVE_LOCATION: "Gespeichert unter"
PAGE_FILE: "Seiten-Template"
PAGE_FILE_HELP: "Seiten-Template Dateiname, und als Standard das Anzeige-Template für diese Seite"
NO_USER_ACCOUNTS: "Keine Benutzerkonten gefunden, bitte erstellen Sie zuerst eines..."
NO_USER_EXISTS: "Für dieses Konto existiert kein lokaler Benutzer, es kann nicht gespeichert werden..."
REDIRECT_TRAILING_SLASH: "Weiterleiten von nachgestellten '/'"
REDIRECT_TRAILING_SLASH_HELP: "Eine 301 Weiterleitung durchführen anstatt nachgestellte '/' transparent zu verarbeiten."
DEFAULT_DATE_FORMAT: "Seiten-Datumsformat"
DEFAULT_DATE_FORMAT_HELP: "Das von Grav für die Seite verwendete Datumsformat. Standardmässig versucht Grav das Datum anhand Ihrer Herkunft festzulegen. Sie können das Datumsformat mithilfe der PHP Syntax festlegen (z.B. Y-m-d-H:i)"
DEFAULT_DATE_FORMAT_PLACEHOLDER: "Automatisch vorschlagen"
IGNORE_FILES: "Dateien ignorieren"
IGNORE_FILES_HELP: "Dateien die beim Verarbeiten von Seiten ignoriert werden sollen"
IGNORE_FOLDERS: "Ignoriere Ordner"
IGNORE_FOLDERS_HELP: "Verzeichnisse die beim Verarbeiten von Seiten ignoriert werden sollen"
HIDE_EMPTY_FOLDERS: "Leere Ordner verstecken"
HIDE_EMPTY_FOLDERS_HELP: "Wenn der Ordner keine .md-Datei hat, sollte er in der Navigation versteckt werden und nicht routbar sein"
HTTP_ACCEPT_LANGUAGE: "Sprache vom Browser übernehmen"
HTTP_ACCEPT_LANGUAGE_HELP: "Sie können sich entscheiden die Sprache automatisch über den 'http_accept_language' Header einzustellen"
OVERRIDE_LOCALE: "Spracheinstellung überschreiben"
OVERRIDE_LOCALE_HELP: "Lokale PHP Spracheinstellung mit aktueller Sprache überschreiben"
REDIRECT: "Seiten-Weiterleitung"
REDIRECT_HELP: "Geben Sie eine Seiten-Adresse oder externe URL ein, auf welche diese Seite weiterleiten soll - z.B. '/eine/adresse' oder 'http://www.seite.de'"
PLUGIN_STATUS: "Plugin Status"
INCLUDE_DEFAULT_LANG: "Standardsprache hinzufügen"
INCLUDE_DEFAULT_LANG_HELP: "Dies wird alle URLs der Standardsprache um die Sprache ergänzen z.B. '/en/blog/post' oder '/de/blog/post'"
INCLUDE_DEFAULT_LANG_FILE_EXTENSION: "Standardsprache zu Dateiendung hinzufügen"
INCLUDE_DEFAULT_LANG_HELP_FILE_EXTENSION: "Dies fügt die Standardsprache zur Dateiendung hinzu (z.B. `.de.md`). Um `.md` für die Standardsprache beizubehalten, deaktiviere diese Option."
PAGES_FALLBACK_ONLY: "Seiten nur 'fallback'"
PAGES_FALLBACK_ONLY_HELP: "'Fallback' nur um Seiteninhalte durch unterstützte Sprachen zu finden, Standardverhalten ist es, jede Sprache anzuzeigen, die gefunden wird, wenn eine aktive Sprache fehlt"
ALLOW_URL_TAXONOMY_FILTERS: "URL Kategoriefilter"
ALLOW_URL_TAXONOMY_FILTERS_HELP: "Seiten-basierende Sammlungen erlauben das Filtern via '/taxonomy:value'."
REDIRECT_DEFAULT_CODE: "Standard Weiterleitungscode"
REDIRECT_DEFAULT_CODE_HELP: "HTTP Statuscode für Weiterleitungen"
IGNORE_HIDDEN: "Versteckte ignorieren"
IGNORE_HIDDEN_HELP: "Alle Dateien und Ordner ignorieren, die mit einem Punkt beginnen"
WRAPPED_SITE: "Eingefasste Seite"
WRAPPED_SITE_HELP: "Damit Themes/Plugins wissen, ob Grav in eine andere Plattform eingebunden ist"
FALLBACK_TYPES: "Zugelassene Fallback-Typen"
FALLBACK_TYPES_HELP: "Erlaubte Datei-Typen auf die über Seiten-Routen zugegriffen werden kann. Standardmäßig alle unterstützen Media Typen."
INLINE_TYPES: "Inline Ersatz Typ"
INLINE_TYPES_HELP: "Eine Liste an Datei Typen die Inline angezeigt werden sollte, statt heruntergeladen zu werden"
APPEND_URL_EXT: "URL Endung hinzufügen"
APPEND_URL_EXT_HELP: "Wird eine eigene Erweiterung zu der URL der Seite hinzufügen. Damit wird Grav nach `<template>.<extension>.twig` suchen"
PAGE_MODES: "Seitenmodus"
PAGE_TYPES: "Seitentyp"
PAGE_TYPES_HELP: "Bestimmt die Seitentypen, die Grav unterstützt, und die Reihenfolge bestimmt, auf welche Art per 'fallback' zurückgegriffen werden soll, wenn die Anfrage nicht eindeutig ist"
ACCESS_LEVELS: "Zugriffslevels"
GROUPS: "Gruppen"
GROUPS_HELP: "Liste aller Gruppen in denen der Benutzer Mitglied ist"
ADMIN_ACCESS: "Admin Zugriff"
SITE_ACCESS: "Website Zugriff"
INVALID_SECURITY_TOKEN: "Ungültiger Sicherheitstoken"
ACTIVATE: "Aktivieren"
TWIG_UMASK_FIX: "Umask Fix"
TWIG_UMASK_FIX_HELP: "Twig erstellt Cache Dateien standardmäßig mit 0755, Fix setzt dass auf 0775"
CACHE_PERMS: "Cache Berechtigungen"
CACHE_PERMS_HELP: "Standardberechtigungen für den Cache-Ordner. In der Regel 0755 oder 0775 je nach Setup"
REMOVE_SUCCESSFUL: "Entfernen erfolgreich"
REMOVE_FAILED: "Entfernen fehlgeschlagen"
HIDE_HOME_IN_URLS: "Startseiten Adresse in URLs ausblenden"
HIDE_HOME_IN_URLS_HELP: "Wird sicherstellen, dass die Standard-Adresse für alle Seiten unterhalb der Startseite nicht auf die Standard-Adresse der Startseite verweisen"
TWIG_FIRST: "Twig-Verarbeitung zuerst ausführen"
TWIG_FIRST_HELP: "Falls Sie die Seiten-Generierung mittels Twig aktiviert haben, können Sie einstellen, ob diese vor oder nach der Markdown-Verarbeitung geschehen soll"
SESSION_SECURE: "Sicher"
SESSION_SECURE_HELP: "Wenn aktiviert muss die Kommunikation für Cookies über eine verschlüsselte Verbindung stattfinden. Warnung: Aktivieren Sie diese Option nur auf Seiten, die ausschließlich auf HTTPS laufen"
SESSION_HTTPONLY: "Nur HTTP"
SESSION_HTTPONLY_HELP: "Wenn aktiv, werden Cookies nur über HTTP genutzt. Eine Änderung per JavaScript ist nicht erlaubt"
REVERSE_PROXY: "Reverse Proxy"
REVERSE_PROXY_HELP: "Aktivieren Sie dies, wenn sie sich hinter einem Reverse Proxy befinden und Probleme mit URLs und inkorrekten Ports haben"
INVALID_FRONTMATTER_COULD_NOT_SAVE: "Ungültiger Frontmatter, speichern nicht möglich"
ADD_FOLDER: "Ordner hinzufügen"
COPY_PAGE: "Seite kopieren"
PROXY_URL: "Proxy-URL"
PROXY_URL_HELP: "Geben Sie den Proxy-HOST oder IP und PORT ein"
NOTHING_TO_SAVE: "Nichts zu speichern"
FILE_ERROR_ADD: "Beim Versuch, die Dateien hinzuzufügen, ist ein Fehler aufgetreten"
FILE_ERROR_UPLOAD: "Beim Versuch, die Dateien hochzuladen, ist ein Fehler aufgetreten"
FILE_UNSUPPORTED: "Nicht unterstützter Dateityp"
ADD_ITEM: "Eintrag hinzufügen"
FILE_TOO_LARGE: "Die Datei ist zu groß für den Upload, maximal zulässig sind %s <br>entsprechend Ihrer PHP-Einstellungen. Erhöhen Sie die Einstellung von 'post_max_size'"
INSTALLING: "Installiere"
LOADING: "Laden..."
DEPENDENCIES_NOT_MET_MESSAGE: "Die folgenden Abhängigkeiten müssen zuerst erfüllt sein:"
ERROR_INSTALLING_PACKAGES: "Fehler während der Paketinstallation"
INSTALLING_DEPENDENCIES: "Installiere Abhängigkeiten…"
INSTALLING_PACKAGES: "Installiere Paket(e)…"
PACKAGES_SUCCESSFULLY_INSTALLED: "Paket(e) erfolgreich installiert."
READY_TO_INSTALL_PACKAGES: "Bereit das/die Paket(e) zu installieren"
PACKAGES_NOT_INSTALLED: "Pakete nicht installiert"
PACKAGES_NEED_UPDATE: "Pakete bereits installiert, aber zu alt"
PACKAGES_SUGGESTED_UPDATE: "Pakete bereits installiert und die Version ist ok, werden aber trotzdem installiert um sie aktuell zu halten"
REMOVE_THE: "Entferne %s"
CONFIRM_REMOVAL: "Sind sie sicher, dass sie %s löschen möchten?"
REMOVED_SUCCESSFULLY: "%s erfolgreich entfernt"
ERROR_REMOVING_THE: "Fehler beim Entfernen der %s"
ADDITIONAL_DEPENDENCIES_CAN_BE_REMOVED: "Das %s benötigt die folgenden Abhängigkeiten, die nicht von anderen installierten Pakete benötigt werden. Wenn Sie diese nicht verwenden, können Sie direkt hier entfernt werden."
READY_TO_UPDATE_PACKAGES: "Bereit das/die Paket(e) zu aktualisieren"
ERROR_UPDATING_PACKAGES: "Fehler beim Aktualisieren des/der Pakete(s)"
UPDATING_PACKAGES: "Aktualisiere Paket(e) ..."
PACKAGES_SUCCESSFULLY_UPDATED: "Paket(e) erfolgreich aktualisiert."
UPDATING: "Aktualisiere"
GPM_RELEASES: "GPM-Releases"
GPM_RELEASES_HELP: "Wählen Sie 'Testbetrieb' um Beta- oder Test-Versionen zu installieren"
GPM_METHOD: "Methode um entfernte Inhalte zu laden"
GPM_METHOD_HELP: "Wenn auf Auto gestellt, wird Grav feststellen ob PHP fopen Funktion verfügbar ist und diese nutzen, ansonsten cURL. Um die Nutzung einer der beiden Optionen zu erzwingen bitten den Schalter umstellen."
GPM_VERIFY_PEER: "Zertifikatsüberprüfung externer Server (SSL)"
GPM_VERIFY_PEER_HELP: "Einige Provider scheinen an der Überprüfung des getgrav.org SSL Zertifikates zu scheitern. Dies führt dazu das GPM nicht funktioniert. Ist dies der Fall, hilft vielleicht das abstellen dieser Einstellung"
AUTO: "Automatisch"
FOPEN: "fopen"
CURL: "cURL"
STABLE: "Stabil"
TESTING: "Testbetrieb"
FRONTMATTER_PROCESS_TWIG: "Verarbeite Frontmatter Twig"
FRONTMATTER_PROCESS_TWIG_HELP: "Wenn aktiviert können Twig Konfigurationsvariablen im Seiten Frontmatter verwendet werden"
FRONTMATTER_IGNORE_FIELDS: "Ignoriere Frontmatter Felder"
FRONTMATTER_IGNORE_FIELDS_HELP: "Bestimmte Frontmatter Felder können Twig enthalten sollten aber möglicherweise nicht verarbeitet werden, z. B. \"Formulare\""
FRONTMATTER_IGNORE_FIELDS_PLACEHOLDER: "z.B. Formulare"
PACKAGE_X_INSTALLED_SUCCESSFULLY: "Paket %s erfolgreich installiert"
ORDERING_DISABLED_BECAUSE_PARENT_SETTING_ORDER: "Übergeordnete Sortiereinstellung, Sortierung deaktiviert"
ORDERING_DISABLED_BECAUSE_PAGE_NOT_VISIBLE: "Seite ist nicht sichtbar, Sortierung deaktiviert"
ORDERING_DISABLED_BECAUSE_TOO_MANY_SIBLINGS: "Sortierung via Admin wird nicht unterstützt, weil es mehr als 200 Elemente auf gleicher Ebene gibt"
ORDERING_DISABLED_BECAUSE_PAGE_NO_PREFIX: "Die Sortierung ist für diese Seite deaktiviert, weil <strong>Numerisches Ordner Präfix</strong> nicht aktiviert ist"
CANNOT_ADD_MEDIA_FILES_PAGE_NOT_SAVED: "Hinweis: Sie können keine Medien-Dateien hochladen bis die Seite gespeichert ist. Klicken Sie dazu \"Speichern\" oben rechts."
CANNOT_ADD_FILES_PAGE_NOT_SAVED: "Hinweis: Seite muss gespeichert werden, bevor Sie Dateien hochladen können."
DROP_FILES_HERE_TO_UPLOAD: "Ziehen Sie Dateien hierauf oder <strong>klicken Sie in diesem Bereich</strong>"
INSERT: "Einfügen"
UNDO: "Rückgängigmachen"
REDO: "Wiederholen"
HEADERS: "Überschriften"
BOLD: "Fett gedruckt"
ITALIC: "Kursiv"
STRIKETHROUGH: "Durchgestrichen"
SUMMARY_DELIMITER: "Trennzeichen für Zusammenfassung"
LINK: "Link"
IMAGE: "Bild"
BLOCKQUOTE: "Zitat"
UNORDERED_LIST: "Ungeordnete Liste"
ORDERED_LIST: "Geordnete Liste"
EDITOR: "Editor"
PREVIEW: "Vorschau"
FULLSCREEN: "Vollbild"
NON_ROUTABLE: "Nicht aufrufbar"
NON_VISIBLE: "Nicht sichtbar"
NON_PUBLISHED: "Nicht veröffentlicht"
CHARACTERS: "Zeichen"
PUBLISHING: "Veröffentlichen"
MEDIA_TYPES: "Medien-Typen"
IMAGE_OPTIONS: "Bildoptionen"
MIME_TYPE: "MIME-Typ"
THUMB: "Vorschaubild"
TYPE: "Typ"
FILE_EXTENSION: "Dateiendung"
LEGEND: "Seitenlegende"
MEMCACHE_SERVER: "Memcache Server"
MEMCACHE_SERVER_HELP: "Die Memcache-Server-Adresse"
MEMCACHE_PORT: "Memcache Port"
MEMCACHE_PORT_HELP: "Der Memcache-Server Port"
MEMCACHED_SERVER: "Memcached server"
MEMCACHED_SERVER_HELP: "Die Memcache-Server-Adresse"
MEMCACHED_PORT: "Memcache Port"
MEMCACHED_PORT_HELP: "Der Memcache-Server Port"
REDIS_SERVER: "Redis server"
REDIS_SERVER_HELP: "Die Redis-Server-Adresse"
REDIS_PORT: "Redis port"
REDIS_PORT_HELP: "Der Redis-Server Port"
REDIS_PASSWORD: "Redis Passwort/Geheimnis"
REDIS_DATABASE: "Redis-Datenbank-ID"
REDIS_DATABASE_HELP: "Die Datenbank-ID der Redis Instanz"
ALL: "Alle"
FROM: "von"
TO: "an"
RELEASE_DATE: "Veröffentlichungsdatum"
SORT_BY: "Sortieren nach"
RESOURCE_FILTER: "Filtere..."
FORCE_SSL: "SSL erzwingen"
FORCE_SSL_HELP: "Globales SSL erzwingen, wenn aktiviert sendet Grav für eine HTTP Anfrage eine Weiterleitung zur HTTPS-Seite"
NEWS_FEED: "Neuigkeiten"
EXTERNAL_URL: "Externe URL"
SESSION_SAMESITE: "Session SameSite Attribut"
SESSION_SAMESITE_HELP: "Lax|Strict|None. Mehr Informationen: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite"
CUSTOM_BASE_URL: "Benutzerdefinierte Base-URL"
CUSTOM_BASE_URL_HELP: "Verwenden Sie diese Einstellung, wenn ein Rewrite der Site-Domain durchgeführt oder ein anderer Unterordner als der von Grav verwendete genutzt werden soll. Beispiel: http://localhost"
FILEUPLOAD_PREVENT_SELF: 'Kann "%s" nicht außerhalb von Seiten verwenden.'
FILEUPLOAD_UNABLE_TO_UPLOAD: 'Kann Datei nicht hochladen %s: %s'
FILEUPLOAD_UNABLE_TO_MOVE: 'Kann Datei %s nicht nach "%s" verschieben'
DROPZONE_CANCEL_UPLOAD: 'Upload abbrechen'
DROPZONE_CANCEL_UPLOAD_CONFIRMATION: 'Sind Sie sicher, dass Sie den Upload abbrechen wollen?'
DROPZONE_DEFAULT_MESSAGE: 'Ziehen Sie Dateien hierher oder <strong>klicken Sie in diesem Bereich</strong>'
DROPZONE_FALLBACK_MESSAGE: 'Ihr Browser unterstützt Drag und Drop Datei-Uploads nicht.'
DROPZONE_FALLBACK_TEXT: 'Bitte nutzen Sie das untenstehende Formular um Dateien wie in alten Zeiten hochzuladen.'
DROPZONE_FILE_TOO_BIG: 'Die Datei ist zu groß ({{filesize}}MiB). Maximale Dateigröße: {{maxFilesize}}MiB.'
DROPZONE_INVALID_FILE_TYPE: "Sie können Dateien dieses Typs nicht hochladen."
DROPZONE_MAX_FILES_EXCEEDED: "Sie können keine weiteren Dateien hochladen."
DROPZONE_REMOVE_FILE: "Datei entfernen"
DROPZONE_RESPONSE_ERROR: "Server antwortete mit Statuscode {{statusCode}}."
PREMIUM_PRODUCT: "Premium"
DESTINATION_NOT_SPECIFIED: "Ziel nicht angegeben"
UPLOAD_ERR_NO_TMP_DIR: "Ordner für temporäre Dateien fehlt"
SESSION_SPLIT: "Geteilte Session"
SESSION_SPLIT_HELP: "Unabhängig geteilte Sessions zwischen der Site und anderen Plugins (wie zum Beispiel Admin)"
ERROR_FULL_BACKTRACE: "Vollständiger Fehler-Backtrace"
ERROR_SIMPLE: "Einfacher Fehler"
ERROR_SYSTEM: "Systemfehler"
IMAGES_AUTO_FIX_ORIENTATION: "Bildausrichtung automatisch beheben"
IMAGES_AUTO_FIX_ORIENTATION_HELP: "Bildausrichtung anhand der Exif-Daten automatisch beheben"
REDIS_SOCKET: "Redis Socket"
REDIS_SOCKET_HELP: "Der Redis-Socket"
NOT_SET: "Nicht eingestellt"
PERMISSIONS: "Zugriffsrechte"
NEVER_CACHE_TWIG: "Twig niemals chachen"
NEVER_CACHE_TWIG_HELP: "Nur Inhalte zwischenspeichern und Twig für Seiten jedes Mal verarbeiten. Ignoriert die Einstellung twig_first."
ALLOW_WEBSERVER_GZIP: "Webserver Gzip erlauben"
ALLOW_WEBSERVER_GZIP_HELP: "Ist standardmäßig deaktiviert. Wenn diese Option aktiviert ist, wird die WebServer konfigurierte Gzip/Deflate-Komprimierung verwendet, aber die HTTP-Verbindung wird nicht vor dem onShutDown() Ereignis geschlossen, was ein langsameres laden der Seite bedeutet"
OFFLINE_WARNING: "Es kann keine Verbindung zu GPM hergestellt werden"
CLEAR_IMAGES_BY_DEFAULT: "Standardmässig wird der image cache gelöscht"
CLEAR_IMAGES_BY_DEFAULT_HELP: "Standardmäßig werden bearbeitete Bilder bei alle Cache-Löschungen gelöscht, dies kann deaktiviert werden"
CLI_COMPATIBILITY: "CLI Kompatibilität"
CLI_COMPATIBILITY_HELP: "Sorgt dafür, dass nur nicht-flüchtige Cache Treiber verwendet werden (Datei, Redis, Memcache, etc.)"
REINSTALL_PLUGIN: "Plugin erneut installieren"
REINSTALL_THEME: "Theme erneut installieren"
REINSTALL_THE: "%s erneut installieren"
CONFIRM_REINSTALL: "Sind sie sicher, dass sie %s erneut installieren möchten?"
REINSTALLED_SUCCESSFULLY: "%s erfolgreich erneut installiert"
ERROR_REINSTALLING_THE: "Fehler bei der erneuten Installation von %s"
PACKAGE_X_REINSTALLED_SUCCESSFULLY: "Paket %s erfolgreich erneut installiert"
REINSTALLATION_FAILED: "Erneute Installation fehlgeschlagen"
WARNING_REINSTALL_NOT_LATEST_RELEASE: "Die installierte Version ist nicht die neueste verfügbare Version. Durch Klicken auf Weiter, entfernen Sie die aktuelle Version und installieren Sie die neueste verfügbare Version"
TOOLS: "Werkzeuge"
DIRECT_INSTALL: "Direkte Installation"
NO_PACKAGE_NAME: "Name des Pakets nicht angegeben"
PACKAGE_EXTRACTION_FAILED: "Paket konnte nicht ausgepackt werden"
NOT_VALID_GRAV_PACKAGE: "Kein gültiges Grav-Paket"
NAME_COULD_NOT_BE_DETERMINED: "Name konnte nicht ermittelt werden"
CANNOT_OVERWRITE_SYMLINKS: "Symbolische Links können nicht überschrieben werden"
ZIP_PACKAGE_NOT_FOUND: "ZIP Archiv wurde nicht gefunden"
GPM_OFFICIAL_ONLY: "Nur offizielle GPM Server"
GPM_OFFICIAL_ONLY_HELP: "Erlauben Sie direkte Installationen nur aus dem offiziellen GPM-Repository."
NO_CHILD_TYPE: "Kein Unterseitentyp für diese Rawroute"
SORTABLE_PAGES: "Sortierbare Seiten:"
UNSORTABLE_PAGES: "Nicht sortierbare Seiten"
ADMIN_SPECIFIC_OVERRIDES: "Administrative Anpassungen"
ADMIN_CHILDREN_DISPLAY_ORDER: "Sortierung der Unterseiten"
ADMIN_CHILDREN_DISPLAY_ORDER_HELP: "Die Reihenfolge, die vom Admin Plugin verwendet werden soll um Unterseiten in der \"Seiten\" Ansicht anzuzeigen"
PWD_PLACEHOLDER: "komplexe Zeichenfolge mindestens 8 Zeichen lang"
PWD_REGEX: "Regulärer Ausdruck für Passwörter"
PWD_REGEX_HELP: "Standard: Das Passwort muss mindestens eine Zahl, einen Groß- und einen Kleinbuchstaben enthalten sowie mindestens 8 Zeichen lang sein"
USERNAME_PLACEHOLDER: "nur Kleinbuchstaben, z.B. 'admin'"
USERNAME_REGEX: "Regulärer Ausdruck für Benutzernamen"
USERNAME_REGEX_HELP: "Standard: nur Kleinbuchstaben, Ziffern, Bindestriche und Unterstriche. 3 - 16 Zeichen"
ENABLE_AUTO_METADATA: "Auto-Metadaten aus Exif"
ENABLE_AUTO_METADATA_HELP: "Automatische Generierung von Metadaten-Dateien für Bilder mit Exif-Informationen"
2FA_TITLE: "2-Faktor-Authentifizierung"
2FA_INSTRUCTIONS: "##### 2-Faktor-Authentifizierung\nSie haben **2FA** für dieses Konto aktiviert. Bitte benutzen Sie Ihre **2FA** App, um den aktuellen **6-stelligen Code** einzugeben, um den Anmeldevorgang abzuschließen."
2FA_REGEN_HINT: "Das Erneuern des Geheimnisses erfordert es, dass Sie Ihre Authenticator App aktualisieren"
2FA_LABEL: "Admin Zugriff"
2FA_FAILED: "Ungültiger 2-Faktor-Authentifizierungscode, bitte versuchen Sie es erneut..."
2FA_ENABLED: "2FA aktiviert"
2FA_CODE_INPUT: "000000"
2FA_SECRET: "2FA Geheimnis"
2FA_SECRET_HELP: "Scannen Sie diesen QR-Code in Ihre [Authenticator App] (https://learn.getgrav.org/admin-panel/2fa#apps). Außerdem ist es eine gute Idee, das Geheimnis an einem sicheren Ort zu sichern, falls Sie Ihre App neu installieren müssen. Weitere Informationen finden Sie in den [Grav docs] (https://learn.getgrav.org/admin-panel/2fa) "
2FA_REGENERATE: "Neu generieren"
FORCE_LOWERCASE_URLS: "Erzwinge URLs in Kleinbuchstaben"
FORCE_LOWERCASE_URLS_HELP: "Standardmäßig setzt Grav alle Slugs und Routen in Kleinbuchstaben. Wenn dieser Wert auf \"false\" gesetzt wird, können auch Großbuchstaben für Slugs und Routen verwendet werden"
INTL_ENABLED: "Intl Modulintegration"
INTL_ENABLED_HELP: "Verwenden Sie das Intl PHP-Modul um UTF8-basierte Sammlungen zu sortieren"
VIEW_SITE_TIP: "Seite anzeigen"
TOOLS_DIRECT_INSTALL_TITLE: "Direktinstallation von Grav-Paketen"
TOOLS_DIRECT_INSTALL_UPLOAD_TITLE: "Paket mittels \"Direct ZIP Upload\" installieren"
TOOLS_DIRECT_INSTALL_UPLOAD_DESC: "Sie können einfach ein gültiges Grav <strong>Theme</strong>, <strong>Plugin</strong>oder sogar <strong>Grav</strong> Update-Zip-Paket über diese Methode aktualisieren. Dieses Paket muss nicht über GPM registriert werden und erlaubt es Ihnen, einfach auf eine vorherige Version zurückzurollen oder zu testen."
TOOLS_DIRECT_INSTALL_URL_TITLE: "Paket mittels \"Remote URL Reference\" installieren"
TOOLS_DIRECT_INSTALL_URL_DESC: "Alternativ können Sie auch eine vollständige URL zu der gezippten Paketdatei angeben um das Paket über eine Fremd-URL zu installieren."
TOOLS_DIRECT_INSTALL_UPLOAD_BUTTON: "Hochladen und installieren"
ROUTE_OVERRIDES: "Route Overrides"
ROUTE_DEFAULT: "Standardroute"
ROUTE_CANONICAL: "Canonical Route"
ROUTE_ALIASES: "Routen-Aliase"
OPEN_NEW_TAB: "In neuem Tab öffnen"
SESSION_INITIALIZE: "Session initialisieren"
SESSION_INITIALIZE_HELP: "Lässt Grav eine Sitzung starten. Diese Funktion ist erforderlich, damit jede Benutzerinteraktion funktioniert, wie z. B. Login, Formulare usw. Das Admin-Plugin ist von dieser Einstellung nicht betroffen."
STRICT_YAML_COMPAT: "YAML Kompatibilität"
STRICT_YAML_COMPAT_HELP: "Greift zurück auf Symfony 2.4 YAML Parser, wenn Native oder 3.4 Parser nicht funktioniert"
STRICT_TWIG_COMPAT: "Twig Kompatibilität"
STRICT_TWIG_COMPAT_HELP: "Aktiviert die veraltete Twig Autoescape Einstellung. Wenn sie deaktiviert ist, wird der |raw Filter benötigt, um HTML auszugeben, da Twig Autoescape ausgibt"
SCHEDULER: "Planer"
SCHEDULER_INSTALL_INSTRUCTIONS: "Installationsanleitung"
SCHEDULER_INSTALLED_READY: "Installiert und bereit"
SCHEDULER_CRON_NA: "Cron nicht verfügbar für Benutzer: <b>%s</b>"
SCHEDULER_NOT_ENABLED: "Nicht aktiviert für Benutzer: <b>%s</b>"
SCHEDULER_SETUP: "Planer-Setup"
SCHEDULER_INSTRUCTIONS: "Mit dem <b>Grav Scheduler</b> können benutzerdefinierte Jobs erstellt und geplant werden. Es stehe auch eine Schnittstelle für Grav-Plugins bereit um dynamisch Jobs hinzuzufügen, welche in regelmäßigen Abständen ausgeführt werden sollen."
SCHEDULER_JOBS: "Individuelle Scheduler Jobs"
SCHEDULER_STATUS: "Planer-Status"
SCHEDULER_RUNAT: "Starten um"
SCHEDULER_RUNAT_HELP: "Cron formatierte 'at' Syntax"
SCHEDULER_OUTPUT: "Ausgabedatei"
SCHEDULER_OUTPUT_HELP: "Pfad/Dateiname der Ausgabedatei (aus dem Root der Grav-Installation)"
SCHEDULER_OUTPUT_TYPE: "Ausgabetyp"
SCHEDULER_OUTPUT_TYPE_HELP: "Entweder an die gleiche Datei bei jedem Run anhängen oder die Datei bei jedem Run überschreiben"
SCHEDULER_EMAIL: "E-Mail"
SCHEDULER_EMAIL_HELP: "E-Mail-Adresse zum Empfangen der Ausgabedatei. HINWEIS: Die Ausgabedatei muss konfiguriert sein"
SECURITY: "Sicherheit"
XSS_SECURITY: "XSS-Sicherheit für Inhalte"
XSS_WHITELIST_PERMISSIONS: "Whitelist-Berechtigungen"
XSS_WHITELIST_PERMISSIONS_HELP: "Benutzer mit diesen Berechtigungen können die XSS-Regeln beim Speichern von Inhalten überspringen"
XSS_ON_EVENTS: "Filter On-events"
XSS_INVALID_PROTOCOLS: "Filter Ungültige Protokolle"
XSS_INVALID_PROTOCOLS_LIST: "Liste ungültiger Protokolle"
XSS_MOZ_BINDINGS: "Filter Moz-Bindungen"
XSS_HTML_INLINE_STYLES: "Filter HTML Inline Styles"
XSS_DANGEROUS_TAGS: "Filter Gefährliche HTML-Tags"
XSS_DANGEROUS_TAGS_LIST: "Liste gefährlicher HTML-Tags"
XSS_ONSAVE_ISSUE: "Speichern fehlgeschlagen: XSS-Problem erkannt..."
XSS_ISSUE: "<strong>HINWEIS:</strong> Grav hat potenzielle XSS-Probleme in <strong>%s</strong> gefunden"
UPLOADS_SECURITY: "Uploads Sicherheit"
UPLOADS_DANGEROUS_EXTENSIONS: "Gefährliche Erweiterungen"
UPLOADS_DANGEROUS_EXTENSIONS_HELP: "Diese Dateierweiterungen können auch unabhängig der freigegebenen MIME-Types nicht hochgeladen werden"
REPORTS: "Berichte"
LOGS: "Logs"
LOG_VIEWER_FILES: "Log Viewer Dateien"
LOG_VIEWER_FILES_HELP: "Dateien in /logs/ welche unter Werkzeuge - Logs angezeigt werden. z.B. 'grav' = /logs/grav.log"
BACKUPS_STORAGE_PURGE_TRIGGER: "Auslöser für Löschung alter Sicherungen"
BACKUPS_MAX_COUNT: "Maximale Anzahl an Sicherungen"
BACKUPS_MAX_COUNT_HELP: "0 = unbegrenzt"
BACKUPS_MAX_SPACE: "Maximaler Speicherplatz für Sicherungen"
BACKUPS_MAX_RETENTION_TIME: "Maximale Speicherungsdauer"
BACKUPS_MAX_RETENTION_TIME_APPEND: "in Tagen"
BACKUPS_PROFILE_NAME: "Sicherungsname"
BACKUPS_PROFILE_ROOT_FOLDER: "Stammordner"
BACKUPS_PROFILE_ROOT_FOLDER_HELP: "Kann ein absoluter Pfad oder ein Stream sein"
BACKUPS_PROFILE_EXCLUDE_PATHS: "Pfade ausschließen"
BACKUPS_PROFILE_EXCLUDE_PATHS_HELP: "Absolute Pfade zum Ausschließen, einer pro Zeile"
BACKUPS_PROFILE_EXCLUDE_FILES: "Dateien ausschließen"
BACKUPS_PROFILE_EXCLUDE_FILES_HELP: "Bestimmte Dateien oder Ordner, die ausgeschlossen werden sollen, eine pro Zeile"
BACKUPS_PROFILE_SCHEDULE: "Geplanten Job aktivieren"
BACKUPS_PROFILE_SCHEDULE_AT: "Geplanten Job ausführen"
COMMAND: "Befehl"
EXTRA_ARGUMENTS: "Zusätzliche Argumente"
DEFAULT_LANG: "Standardsprache überschreiben"
DEBUGGER_PROVIDER: "Debugger-Provider"
DEBUGGER_DEBUGBAR: "PHP Debug Bar"
DEBUGGER_CLOCKWORK: "Clockwork-Browser-Erweiterung"
CONTENT_LANGUAGE_FALLBACKS: "Ausweichsprache für Inhalte"
CONTENT_LANGUAGE_FALLBACKS_HELP: "Standardmäßig wird Grav Inhalte in der Standardsprache anzeigen, solange der jeweilige Inhalt nicht übersetzt ist. Verwenden Sie diese Einstellung, um das Verhalten pro Sprache zu überschreiben."
CONTENT_LANGUAGE_FALLBACK: "Fallback-Sprachen"
CONTENT_FALLBACK_LANGUAGE_HELP: "Geben Sie den Sprachcode an, den Sie anpassen möchten."
EXPERIMENTAL: "Experimentell"
FLEX: "Flex-Objekt (EXPERIMENTELL)"
REGULAR: "Standard"
FILE: "Datei"
SANITIZE_SVG: "SVG säubern"
SANITIZE_SVG_HELP: "Entfernt XSS-Code aus SVG"
ACCOUNTS: "Benutzerkonten"
USER_ACCOUNTS: "Benutzerkonten"
USER_GROUPS: "Benutzergruppen"
GROUP_NAME: "Gruppenname"
DISPLAY_NAME: "Anzeigename"
ICON: "Icon"
ACCESS: "Zugriff"
NO_ACCESS: "Kein Zugriff"
ALLOWED: "Erlaubt"
DENIED: "Verweigert"
MODULE: "Modul"
ADD_MODULE: "Modul hinzufügen"
MODULE_SETUP: "Modul einrichten"
MODULE_TEMPLATE: "Modulvorlage"
ADD_MODULE_CONTENT: "Modulinhalt hinzufügen"
CHANGELOG: "Änderungsprotokoll"
PAGE_ACCESS: "Seitenzugriff"
PAGE PERMISSIONS: "Seitenberechtigungen"
PAGE_ACCESS_HELP: "Benutzer mit folgenden Zugriffsberechtigungen kann auf die Seite zugreifen."
PAGE_VISIBILITY_REQUIRES_ACCESS: "Menüsichtbarkeit erfordert Zugriff"
PAGE_VISIBILITY_REQUIRES_ACCESS_HELP: "Auf Ja setzen, wenn die Seite nur im Menü angezeigt werden soll, wenn der Benutzer auf sie zugreifen kann."
PAGE_INHERIT_PERMISSIONS: "Berechtigungen erben"
PAGE_INHERIT_PERMISSIONS_HELP: "ACL der übergeordneten Seite erben"
PAGE_AUTHORS: "Seitenautoren"
PAGE_AUTHORS_HELP: "Mitglieder von Seitenautoren haben Zugriff auf die Eigentümerebene auf diese Seite, die in einer speziellen Gruppe \"Autoren\" definiert ist."
PAGE_GROUPS: "Seitengruppen"
PAGE_GROUPS_HELP: "Mitglieder von Seitengruppen haben besonderen Zugriff auf diese Seite."
READ: "Lesen"
PUBLISH: "Veröffentlichen"
LIST: "Liste"
ACCESS_SITE: "Website"
ACCESS_SITE_LOGIN: "An der Website anmelden"
ACCESS_ADMIN: "Admin"
ACCESS_ADMIN_LOGIN: "An der Administrationsoberfläche anmelden"
ACCESS_ADMIN_SUPER: "Superbenutzer"
ACCESS_ADMIN_CACHE: "Cache leeren"
ACCESS_ADMIN_CONFIGURATION: "Konfiguration"
ACCESS_ADMIN_CONFIGURATION_SYSTEM: "Systemkonfiguration verwalten"
ACCESS_ADMIN_CONFIGURATION_SITE: "Seitenkonfiguration verwalten"
ACCESS_ADMIN_CONFIGURATION_INFO: "Serverinformationen anzeigen"
ACCESS_ADMIN_SETTINGS: "Einstellungen"
ACCESS_ADMIN_PAGES: "Seiten verwalten"
ACCESS_ADMIN_STATISTICS: "Seiten-Statistik"
ACCESS_ADMIN_PLUGINS: "Plugins verwalten"
ACCESS_ADMIN_THEMES: "Themes verwalten"
ACCESS_ADMIN_USERS: "Benutzer verwalten"
USERS: "Benutzer"
ACL: "Zugriffskontrolle"
FLEX_OBJECT_CACHE_ENABLED: "Objekt-Cache aktivieren"
FLEX_RENDER_CACHE_ENABLED: "Render-Cache aktivieren"
DEBUGGER_CENSORED: "Sensible Daten verbergen"
LANGUAGE_TRANSLATIONS: "Übersetzungen"
RESET: "Zurücksetzen"
LOGOS: "Logos"
PRESETS: "Vorlagen"
COLOR_SCHEME_LABEL: "Farbschema"
COLOR_SCHEME_NAME_PLACEHOLDER: "Blautöne"
PRIMARY_ACCENT_LABEL: "Primärer Farbton"
SECONDARY_ACCENT_LABEL: "Sekundärer Farbton"
TERTIARY_ACCENT_LABEL: "Tertiärer Farbton"
WEB_FONTS_LABEL: "Web-Schriftarten"
HEADER_FONT_LABEL: "Schriftart Kopfzeile"
CUSTOM_CSS_LABEL: "Benutzerdefiniertes CSS"
CUSTOM_FOOTER: "Benutzerdefinierte Fußzeile"
CUSTOM_FOOTER_HELP: "Sie können hier HTML- und/oder Markdown-Syntax verwenden"
LOAD_PRESET: "Voreinstellung laden"
RECOMPILE: "Neu kompilieren"
EXPORT: "Exportieren"
CODEMIRROR_THEME_DESC: "**HINWEIS:** Benutze die [CodeMirror Themes Demo](https://codemirror.net/demo/theme.html?target=_blank), um diese in Aktion zu sehen. **_Paper_** ist das Standard Grav Theme."
CODEMIRROR_FONTSIZE_SM: "Kleine Schriftgröße"
CODEMIRROR_FONTSIZE_MD: "Mittlere Schriftgröße"
CODEMIRROR_FONTSIZE_LG: "Große Schriftgröße"
CUSTOM_PRESETS: "Benutzerdefinierte Voreinstellung"
GENERAL: "Allgemein"
BAD_FILENAME: "Ungültiger Dateiname"
SHOW_SENSITIVE: "Sensible Daten anzeigen"
CONFIGURATION: "Einstellungen"
EXTRAS: "Extras"
BASICS: "Grundlagen"
ADMIN_CACHING: "Aktivere Admin Caching"
ADMIN_CACHING_HELP: "Caching für den Admin-Bereich kann unabhängig vom Front-End kontrolliert werden"
ADMIN_PATH: "Administratorpfad"
ADMIN_PATH_HELP: "Wenn Sie die URL für den Administrator ändern möchten, können Sie hier einen Pfad angeben"
LOGO_TEXT: "Logotext"
LOGO_TEXT_HELP: "Text, der anstelle des Standard-Grav-Logos angezeigt wird"
CONTENT_PADDING: "Abstand um Inhalte"
CONTENT_PADDING_HELP: "Abstand um Inhalte aktivieren/deaktivieren um mehr Platz anzubieten"
BODY_CLASSES: "Body-CSS-Klassen"
BODY_CLASSES_HELP: "Fügen Sie einen durch Leerzeichen getrennten Namen benutzerdefinierter Body-CSS-Klassen hinzu"
SIDEBAR_ACTIVATION: "Seitenleistenaktivierung"
SIDEBAR_ACTIVATION_HELP: "Legen Sie fest, wie die Seitenleiste aktiviert wird"
SIDEBAR_HOVER_DELAY_APPEND: "Millisekunde"
SIDEBAR_ACTIVATION_TAB: "Tab"
SIDEBAR_SIZE: "Seitenleistengröße"
SIDEBAR_SIZE_HELP: "Steuert die Breite der Seitenleiste"
SIDEBAR_SIZE_AUTO: "Automatische Breite"
SIDEBAR_SIZE_SMALL: "Kleine Breite"
EDIT_MODE: "Bearbeitungsmodus"
FRONTEND_PREVIEW_TARGET_NEW: "Neuer Tab"
FRONTEND_PREVIEW_TARGET_CURRENT: "Aktueller Tab"
PARENT_DROPDOWN: "Übergeordnete Dropdown-Liste"
PARENT_DROPDOWN_FOLDER: "Ordner anzeigen"
PARENT_DROPDOWN_FULLPATH: "Vollständigen Pfad anzeigen"
PARENTS_LEVELS: "Übergeordnete Ebenen"
PARENTS_LEVELS_HELP: "Anzahl der Ebenen, die in der übergeordneten Auswahlliste angezeigt werden sollen"
MODULAR_PARENTS_HELP: "Zeige modulare Seiten in der übergeordneten Auswahlliste"
SHOW_GITHUB_LINK: "Zeige GitHub Link"
SHOW_GITHUB_LINK_HELP: "Zeige die Nachricht \"Problem gefunden? Bitte melde es auf GitHub\" an."
PAGES_LIST_DISPLAY_FIELD: "Seitenlistenanzeigefeld"
AUTO_UPDATES: "Automatisch nach Updates suchen"
AUTO_UPDATES_HELP: "Zeigt eine informative Nachricht im Admin-Panel, wenn ein Update verfügbar ist."
TIMEOUT: "Zeitüberschreitung"
TIMEOUT_HELP: "Session Timeout in Sekunden"
HIDE_PAGE_TYPES: "Seitentypen im Admin ausblenden"
HIDE_MODULAR_PAGE_TYPES: "Modulare Seitentypen im Admin ausblenden"
DASHBOARD: "Übersicht"
WIDGETS_DISPLAY: "Widget-Anzeigestatus"
NOTIFICATIONS: "Benachrichtigungen"
FEED_NOTIFICATIONS: "Feed-Benachrichtigungen"
BUTTON_BG_HELP: "Schaltflächenhintergrund"
BUTTON_TEXT_HELP: "Schaltflächentext"
BUTTON_COLORS: "Schaltflächenfarben"
LOGO_COLORS: "Logofarben"
PAGE_COLORS: "Seitenfarben"
POPULARITY: "Beliebtheit"
IGNORE_URLS: "Ignorieren"
IGNORE_URLS_HELP: "Zu ignorierende URLs"
DAILY_HISTORY: "Tagesverlauf"
MONTHLY_HISTORY: "Monatsverlauf"
VISITORS_HISTORY: "Besucherverlauf"
PAGEMEDIA_RESIZER: "> Die folgenden Einstellungen gelten für Bilder, die über die \"Media\" Seite hochgeladen werden. \"Resize Width / Height\" verkleinert ein Bild automatisch und proportional, wenn die voreingestellten Limits überschritten werden. Die Min- und Max-Werte der Auflösung definieren die Größenbereiche für hochgeladene Bilder. Setzen Sie die Felder auf 0, um Manipulationen zu vermeiden."
RESIZE_WIDTH: "Breite ändern"
RESIZE_HEIGHT: "Höhe ändern"
PIXELS: "Pixel"
IMAGES_CLS_AUTO_SIZES: "Automatische Größenanpassung aktivieren"
+710
View File
@@ -0,0 +1,710 @@
---
PLUGIN_ADMIN:
ADMIN_BETA_MSG: "Αυτή είναι δοκιμαστική έκδοση (beta)! Χρησιμοποιήστε την στην παραγωγή με δική σας ευθύνη..."
ADMIN_REPORT_ISSUE: "Βρήκατε κάποιο πρόβλημα; Παρακαλείστε να το αναφέρετε στο GitHub."
EMAIL_FOOTER: "<a href=\"https://getgrav.org\"> με την ισχύ του Grav</a> - Το μοντέρνο CMS χωρίς τη χρήση Βάσης Δεδομένων"
LOGIN_BTN: "Σύνδεση"
LOGIN_BTN_FORGOT: "Το ξέχασα"
LOGIN_BTN_RESET: "Επαναφορά συνθηματικού"
LOGIN_BTN_SEND_INSTRUCTIONS: "Αποστολή οδηγιών επαναφοράς"
LOGIN_BTN_CLEAR: "Καθαρισμός Φόρμας"
LOGIN_BTN_CREATE_USER: "Δημιουργία χρήστη"
LOGIN_LOGGED_IN: "Έχετε συνδεθεί με επιτυχία"
LOGIN_FAILED: "Αποτυχία Σύνδεσης"
LOGGED_OUT: "Έχετε αποσυνδεθεί"
RESET_NEW_PASSWORD: "Παρακαλούμε εισαγάγετε νέο συνθηματικό &hellip;"
RESET_LINK_EXPIRED: "Ο σύνδεσμος επαναφοράς έχει λήξει, παρακαλώ προσπαθήστε ξανά"
RESET_PASSWORD_RESET: "Έχει γίνει επαναφορά του συνθηματικού"
RESET_INVALID_LINK: "Ο σύνδεσμος γιά την επαναφορά δεν είναι έγκυρος, παρακαλώ προσπαθήστε πάλι"
FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "Οι οδηγίες για να επαναφέρετε το συνθηματικό σας έχουν σταλεί στη διεύθυνση ηλεκτρονικού σας ταχυδρομείου"
FORGOT_FAILED_TO_EMAIL: "Απέτυχε η αποστολή οδηγιών με email, παρακαλώ προσπαθήστε ξανά αργότερα"
FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL: "Δεν είναι δυνατή η επαναφορά του συνθηματικού για %s, δεν έχει καθοριστεί διεύθυνση ηλεκτρονικού ταχυδρομείου"
FORGOT_USERNAME_DOES_NOT_EXIST: "Χρήστης με όνομα χρήστη <b>%s</b> δεν υπάρχει"
FORGOT_EMAIL_NOT_CONFIGURED: "Δεν είναι δυνατή η επαναφορά του συνθηματικού σας. Αυτός ο ιστότοπος δεν έχει ρυθμιστεί για αποστολή μηνυμάτων ηλεκτρονικού ταχυδρομείου"
FORGOT_EMAIL_SUBJECT: "%s Αίτηση Επαναφοράς Κωδικού Πρόσβασης"
FORGOT_EMAIL_BODY: "<h1>Επαναφορά συνθηματικού</h1> <p>Αγαπητέ/ή %1$s,</p> <p>Έγινε μία αίτηση στις <b>%4$s</b> για επαναφορά του συνθηματικού σας.</p> <p>< br / > <a href=\"%2$s\" class=\"btn-primary\"> Κάντε κλικ εδώ για να επαναφέρετε το συνθηματικό σας</a> < br / > < br / ></p> <p>Εναλλακτικά, αντιγράψτε την ακόλουθη διεύθυνση URL στη γραμμή διευθύνσεων του προγράμματος περιήγησής σας:</p> <p>%2$s</p> <p>< br / > Με εκτίμηση, < br / > < br / >%3$s</p>"
MANAGE_PAGES: "Διαχείριση σελίδων"
PAGES: "Σελίδες"
PLUGINS: "Πρόσθετα"
PLUGIN: "Πρόσθετο"
THEMES: "Θέματα"
LOGOUT: "Αποσύνδεση"
BACK: "Επιστροφή"
NEXT: "Επόμενο"
PREVIOUS: "Προηγούμενο"
ADD_PAGE: "Προσθήκη σελίδας"
MOVE: "Μετακίνηση"
DELETE: "Διαγραφή"
UNSET: "Μη ορισμένο"
VIEW: "Προβολή"
SAVE: "Αποθήκευση"
NORMAL: "Κανονικό"
EXPERT: "Ειδικός"
EXPAND_ALL: "Ανάπτυξη Όλων"
COLLAPSE_ALL: "Σύμπτυξη όλων"
ERROR: "Σφάλμα"
CLOSE: "Κλείσιμο"
CANCEL: "Ακύρωση"
CONTINUE: "Συνέχεια"
MODAL_DELETE_PAGE_CONFIRMATION_REQUIRED_TITLE: "Απαιτείται Επιβεβαίωση"
MODAL_CHANGED_DETECTED_TITLE: "Εντοπίστηκαν Αλλαγές"
MODAL_CHANGED_DETECTED_DESC: "Έχετε μη αποθηκευμένες αλλαγές. Είστε βέβαιοι ότι θέλετε να φύγετε χωρίς να γίνει αποθήκευση;"
MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_TITLE: "Απαιτείται Επιβεβαίωση"
MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_DESC: "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτό το αρχείο; Αυτή η ενέργεια δεν μπορεί να αναιρεθεί."
ADD_FILTERS: "Προσθήκη φίλτρων"
SEARCH_PAGES: "Αναζήτηση στις σελίδες"
VERSION: "Έκδοση"
WAS_MADE_WITH: "Δημιουργήθηκε με"
BY: "Από"
UPDATE_THEME: "Ενημέρωση Θέματος"
UPDATE_PLUGIN: "Ενημέρωση Προσθέτου"
OF_THIS_THEME_IS_NOW_AVAILABLE: "αυτού του θέματος είναι τώρα διαθέσιμη"
OF_THIS_PLUGIN_IS_NOW_AVAILABLE: "αυτού του πρόσθετου είναι τώρα διαθέσιμη"
AUTHOR: "Συντάκτης"
HOMEPAGE: "Αρχική σελίδα"
DEMO: "Επίδειξη"
BUG_TRACKER: "Παρακολούθηση Σφαλμάτων"
KEYWORDS: "Λέξεις κλειδιά"
LICENSE: "Άδεια Χρήσης"
DESCRIPTION: "Περιγραφή"
README: "Διάβασέ με"
REMOVE_THEME: "Κατάργηση Θέματος"
INSTALL_THEME: "Εγκατάσταση Θέματος"
THEME: "Θέμα"
BACK_TO_THEMES: "Πίσω στα Θέματα"
BACK_TO_PLUGINS: "Πίσω στα Πρόσθετα"
CHECK_FOR_UPDATES: "Ελέγχος για Ενημερώσεις"
ADD: "Προσθήκη"
CLEAR_CACHE: "Εκκαθάριση προσωρινής μνήμης"
CLEAR_CACHE_ALL_CACHE: "Όλης της Cache"
CLEAR_CACHE_ASSETS_ONLY: "Μόνον οι διαθέσιμοι πόροι"
CLEAR_CACHE_IMAGES_ONLY: "Μόνον των Εικόνων"
CLEAR_CACHE_CACHE_ONLY: "Μόνον τη μνήμη cache"
CLEAR_CACHE_TMP_ONLY: "Tmp μόνο"
UPDATES_AVAILABLE: "Υπάρχουν Διαθέσιμες Ενημερώσεις"
DAYS: "Ημέρες"
UPDATE: "Ενημέρωση"
BACKUP: "Δημιουργία αντιγράφου ασφαλείας"
BACKUPS: "Αντίγραφα Ασφαλείας"
BACKUP_NOW: "Πάρτε Αντίγραφο Ασφαλείας τώρα"
BACKUPS_STATS: "Στατιστικά Αντιγράφων Ασφαλείας"
BACKUPS_HISTORY: "Ιστορικό Αντιγράφων Ασφαλείας"
BACKUPS_PURGE_CONFIG: "Ρυθμίσεις Καθαρισμού Αντιγράφων Ασφαλείας"
BACKUPS_PROFILES: "Προφίλ Αντιγράφων Ασφαλείας"
BACKUPS_COUNT: "Αριθμός των Αντιγράφων Ασφαλείας"
BACKUPS_PROFILES_COUNT: "Αριθμός των Προφίλ"
BACKUPS_TOTAL_SIZE: "Χώρος Χρήσης"
STATISTICS: "Στατιστικά"
TODAY: "Σήμερα"
WEEK: "Εβδομάδα"
MONTH: "Μήνας"
LATEST_PAGE_UPDATES: "Πιο πρόσφατες ενημερώσεις της σελίδας"
MAINTENANCE: "Συντήρηση"
UPDATED: "Ενημερωμένο"
MON: "Δευ"
TUE: "Τρί"
WED: "Τετ"
THU: "Πέμ"
FRI: "Παρ"
SAT: "Σάβ"
SUN: "Κυρ"
COPY: "Αντιγραφή"
EDIT: "Επεξεργασία"
CREATE: "Δημιουργία"
GRAV_ADMIN: "Διαχειριστής του Grav"
GRAV_OFFICIAL_PLUGIN: "Επίσημο πρόσθετο του Grav"
GRAV_OFFICIAL_THEME: "Επίσημο Θέμα του Grav"
PLUGIN_SYMBOLICALLY_LINKED: "Αυτό το πρόσθετο είναι συμβολικά συνδεδεμένο. Οποιεσδήποτε ενημερώσεις δεν θα εντοπιστούν."
THEME_SYMBOLICALLY_LINKED: "Αυτό το θέμα είναι συμβολικά συνδεδεμένο. Οποιεσδήποτε ενημερώσεις δεν θα εντοπιστούν"
REMOVE_PLUGIN: "Αφαιρέστε το Πρόσθετο"
INSTALL_PLUGIN: "Εγκατάσταση Πρόσθετου"
AVAILABLE: "Διαθέσιμα"
INSTALLED: "Εγκατεστημένα"
INSTALL: "Εγκατάσταση"
ACTIVE_THEME: "Ενεργό Θέμα"
SWITCHING_TO: "Μετάβαση σε"
SWITCHING_TO_DESCRIPTION: "Εάν αλλάξετε το θέμα, δεν υπάρχει καμία εγγύηση ότι θα υποστηρίζονται όλα τα layouts σελίδων, ενδεχομένως προκαλώντας σφάλματα όταν θα φορτώσουν οι σελίδες αυτές."
SWITCHING_TO_CONFIRMATION: "Θέλετε να συνεχίσετε και να μεταβείτε στο θέμα"
CREATE_NEW_USER: "Δημιουργία νέου χρήστη"
REMOVE_USER: "Διαγραφή χρήστη"
ACCESS_DENIED: "Απαγορεύεται η Πρόσβαση"
ACCOUNT_NOT_ADMIN: "ο λογαριασμός σας δεν έχει δικαιώματα διαχειριστή"
PHP_INFO: "Πληροφορίες της PHP"
INSTALLER: "Πρόγραμμα εγκατάστασης"
AVAILABLE_THEMES: "Διαθέσιμα Θέματα"
AVAILABLE_PLUGINS: "Διαθέσιμα πρόσθετα"
INSTALLED_THEMES: "Εγκατεστημένα Θέματα"
INSTALLED_PLUGINS: "Εγκατεστημένα πρόσθετα"
BROWSE_ERROR_LOGS: "Περιήγηση στα αρχεία σφαλμάτων"
SITE: "Ιστότοπος"
INFO: "Πληροφορίες"
SYSTEM: "Σύστημα"
USER: "Χρήστης"
ADD_ACCOUNT: "Προσθήκη λογαριασμού"
SWITCH_LANGUAGE: "Εναλλαγή γλώσσας"
SUCCESSFULLY_ENABLED_PLUGIN: "Το πρόσθετο ενεργοποιήθηκε με επιτυχία"
SUCCESSFULLY_DISABLED_PLUGIN: "Το πρόσθετο απενεργοποιήθηκε με επιτυχία"
SUCCESSFULLY_CHANGED_THEME: "Έγινε επιτυχής αλλαγή του προεπιλεγμένου θέματος"
INSTALLATION_FAILED: "Η εγκατάσταση απέτυχε"
INSTALLATION_SUCCESSFUL: "Επιτυχής εγκατάσταση"
UNINSTALL_FAILED: "Η απεγκατάσταση έχει αποτύχει"
UNINSTALL_SUCCESSFUL: "Η απεγκατάσταση έγινε με επιτυχία"
SUCCESSFULLY_SAVED: "Επιτυχής αποθήκευση"
SUCCESSFULLY_COPIED: "Επιτυχής αντιγραφή"
REORDERING_WAS_SUCCESSFUL: "Η αναδιάταξη ήταν επιτυχής"
SUCCESSFULLY_DELETED: "Επιτυχής διαγραφή"
SUCCESSFULLY_SWITCHED_LANGUAGE: "Επιτυχία στην αλλαγή γλώσσας"
INSUFFICIENT_PERMISSIONS_FOR_TASK: "Έχετε ανεπαρκή δικαιώματα για την εργασία"
CACHE_CLEARED: "Η προσωρινή μνήμη καθάρισε"
METHOD: "Μέθοδος"
ERROR_CLEARING_CACHE: "Σφάλμα κατά την εκκαθάριση της μνήμης cache"
AN_ERROR_OCCURRED: "Παρουσιάστηκε ένα σφάλμα"
YOUR_BACKUP_IS_READY_FOR_DOWNLOAD: "Το αντίγραφο ασφαλείας είναι έτοιμο για λήψη"
DOWNLOAD_BACKUP: "Λήψη αντιγράφου ασφαλείας"
PAGES_FILTERED: "Σελίδες που φιλτραρίστηκαν"
NO_PAGE_FOUND: "Δεν βρέθηκαν σελίδες"
INVALID_PARAMETERS: "Μη έγκυρες παράμετροι"
NO_FILES_SENT: "Δεν απεστάλη κανένα αρχείο"
EXCEEDED_FILESIZE_LIMIT: "Υπέρβαση ορίου μεγέθους αρχείων ρύθμισης παραμέτρων της PHP"
UNKNOWN_ERRORS: "Άγνωστο Σφάλμα"
EXCEEDED_GRAV_FILESIZE_LIMIT: "Το αρχείο υπερβαίνει το προκαθορισμένο όριο μεγέθους"
UNSUPPORTED_FILE_TYPE: "Μη υποστηριζόμενος τύπος αρχείου"
FAILED_TO_MOVE_UPLOADED_FILE: "Απέτυχε η μετακίνηση του μεταφορτωμένου αρχείου."
FILE_UPLOADED_SUCCESSFULLY: "Το αρχείο μεταφορτώθηκε με επιτυχία"
FILE_DELETED: "Το αρχείο διεγράφη"
FILE_COULD_NOT_BE_DELETED: "Δεν ήταν δυνατή η διαγραφή του αρχείου"
FILE_NOT_FOUND: "Το αρχείο δεν βρέθηκε"
NO_FILE_FOUND: "Δεν βρέθηκαν αρχεία"
GRAV_WAS_SUCCESSFULLY_UPDATED_TO: "Το Grav ενημερώθηκε επιτυχώς σε"
GRAV_UPDATE_FAILED: "Η ενημέρωση του Grav απέτυχε"
EVERYTHING_UPDATED: "Τα πάντα έχουν ενημερωθεί"
UPDATES_FAILED: "Αποτυχία ενημέρωσης"
AVATAR_BY: "Avatar από"
AVATAR_UPLOAD_OWN: "Ή ανέβασε το δικό σου avatar..."
LAST_BACKUP: "Τελευταία δημιουργία αντιγράφων ασφαλείας"
FULL_NAME: "Ονοματεπώνυμο"
USERNAME: "Όνομα χρήστη"
EMAIL: "Διεύθυνση ηλεκτρονικού ταχυδρομείου"
USERNAME_EMAIL: "Όνομα χρήστη ή διεύθυνση ηλεκτρονικού ταχυδρομείου"
PASSWORD: "Συνθηματικό"
PASSWORD_CONFIRM: "Επιβεβαίωση συνθηματικού"
TITLE: "Τίτλος"
LANGUAGE: "Γλώσσα"
ACCOUNT: "Λογαριασμός"
EMAIL_VALIDATION_MESSAGE: "Πρέπει να είναι μια έγκυρη διεύθυνση email"
PASSWORD_VALIDATION_MESSAGE: "Το συνθηματικό πρέπει να περιέχει τουλάχιστον έναν αριθμό, ένα κεφαλαίο και ένα πεζό γράμμα και τουλάχιστον 8 ή περισσότερους χαρακτήρες"
LANGUAGE_HELP: "Ορίστε την αγαπημένη γλώσσα"
MEDIA: "Πολυμέσα"
DEFAULTS: "Προεπιλογές"
SITE_TITLE: "Τίτλος Ιστοχώρου"
SITE_TITLE_PLACEHOLDER: "Τίτλος σε όλο τον ιστοχώρο"
SITE_TITLE_HELP: "Προεπιλεγμένος τίτλος για το site σας, χρησιμοποιείται συχνά στα θέματα"
SITE_DEFAULT_LANG: "Προεπιλεγμένη γλώσσα"
SITE_DEFAULT_LANG_PLACEHOLDER: "Προεπιλεγμένη γλώσσα που θα χρησιμοποιείται από <HTML> tag του θέματος"
SITE_DEFAULT_LANG_HELP: "Προεπιλεγμένη γλώσσα που θα χρησιμοποιείται από <HTML> tag του θέματος"
DEFAULT_AUTHOR: "Προεπιλεγμένος συντάκτης"
DEFAULT_AUTHOR_HELP: "Ένα προεπιλεγμένο όνομα συντάκτη, που χρησιμοποιείται συχνά στα θέματα ή στο περιεχόμενο της σελίδας"
DEFAULT_EMAIL: "Προεπιλεγμένη διεύθυνση ηλεκτρονικού ταχυδρομείου"
DEFAULT_EMAIL_HELP: "Μία ηλεκτρονική διεύθυνση email για να χρησιμοποιηθεί σε θέματα ή σελίδες"
TAXONOMY_TYPES: "Τύποι ταξινομίας"
TAXONOMY_TYPES_HELP: "Τύποι ταξινόμησης πρέπει να οριστούν εδώ εάν θέλετε να τους χρησιμοποιήσετε σε σελίδες"
PAGE_SUMMARY: "Περίληψη Σελίδας"
ENABLED: "Ενεργοποιημένη"
ENABLED_HELP: "Ενεργοποίηση σύνοψης σελίδας (η σύνοψη επιστρέφει το ίδιο με το περιεχόμενο της σελίδας)"
'YES': "Ναι"
'NO': "Όχι"
SUMMARY_SIZE: "Μέγεθος Περίληψης"
SUMMARY_SIZE_HELP: "Το πλήθος των χαρακτήρων μίας σελίδας που θα χρησιμοποιηθεί για τη σύνοψη της σελίδας"
FORMAT: "Μορφοποίηση"
FORMAT_HELP: "short = χρησιμοποίησε την πρώτη εμφάνιση του delimiter ή την υπέρβαση του πλήθους χαρακτήρων; long = η σύνοψη θα αγνοηθεί"
SHORT: "Σύντομη"
LONG: "Εκτεταμένη"
DELIMITER: "Διαχωριστικό"
DELIMITER_HELP: "Ο οριοθέτης σύνοψης (προεπιλογή ' ===')"
METADATA: "Μεταδεδομένα"
METADATA_HELP: "Προεπιλεγμένες τιμές μεταδεδομένων που θα εμφανίζονται σε κάθε σελίδα εκτός εάν παρακάμπτονται από την εκάστοτε σελίδα"
NAME: "Όνομα"
CONTENT: "Περιεχόμενο"
REDIRECTS_AND_ROUTES: "Ανακατευθύνσεις και Διαδρομές"
CUSTOM_REDIRECTS: "Προσαρμοσμένες Ανακατευθύνσεις"
CUSTOM_REDIRECTS_HELP: "διαδρομές για την ανακατεύθυνση σε άλλες σελίδες. Η αντικατάσταση με μία κανονική παράσταση είναι έγκυρη"
CUSTOM_REDIRECTS_PLACEHOLDER_KEY: "/your/alias"
CUSTOM_REDIRECTS_PLACEHOLDER_VALUE: "/your/redirect"
CUSTOM_ROUTES: "Προσαρμοσμένες Διαδρομές"
CUSTOM_ROUTES_HELP: "διαδρομές για την ανακατεύθυνση σε άλλες σελίδες. Η αντικατάσταση με μία κανονική παράσταση είναι έγκυρη"
CUSTOM_ROUTES_PLACEHOLDER_KEY: "/your/alias"
CUSTOM_ROUTES_PLACEHOLDER_VALUE: "/your/route"
FILE_STREAMS: "File Streams"
DEFAULT: "Προεπιλογή"
PAGE_MEDIA: "Σελίδα Media"
OPTIONS: "Επιλογές"
PUBLISHED: "Δημοσιευμένο"
PUBLISHED_HELP: "Από προεπιλογή, μια σελίδα δημοσιεύεται κατευθείαν, εκτός αν ορίσετε την επιλογή published: false, εάν το publish_date αναφέρεται σε μελλοντική στιγμή, ή αν το unpublish_date αναφέρεται στο παρελθόν"
DATE: "Ημερομηνία"
DATE_HELP: "Η μεταβλητή date σας επιτρέπει να ορίσετε συγκεκριμένα μία ημερομηνία που να σχετίζεται με τη σελίδα αυτή."
PUBLISHED_DATE: "Ημερομηνία δημοσίευσης"
PUBLISHED_DATE_HELP: "Μπορεί να δοθεί μία ημερομηνία για την αυτόματη δημοσίευση της ανάρτησης."
UNPUBLISHED_DATE: "Ημερομηνία παύσης δημοσίευσης"
UNPUBLISHED_DATE_HELP: "Μπορεί να δοθεί μία ημερομηνία για την αυτόματη ιδιωτικοποίηση της ανάρτησης."
ROBOTS: "Ρομπότ"
TAXONOMIES: "Ταξινομίες"
TAXONOMY: "Ταξινομία"
ADVANCED: "Γιά Προχωρημένους"
SETTINGS: "Ρυθμίσεις"
FOLDER_NUMERIC_PREFIX: "Αριθμητικό Πρόθεμα Φακέλου"
FOLDER_NUMERIC_PREFIX_HELP: "Αριθμητικό πρόθεμα που παρέχει χειροκίνητη ταξινόμηση και υπονοεί την ορατότητα"
FOLDER_NAME: "Όνομα φακέλου"
FOLDER_NAME_HELP: "Το όνομα του φακέλου που θα χρησιμοποιηθεί στο σύστημα αρχείων γι αυτή τη σελίδα"
PARENT: "Γονικό"
DEFAULT_OPTION_ROOT: "-Ρίζα-"
DEFAULT_OPTION_SELECT: "-Επιλέξτε-"
DISPLAY_TEMPLATE: "Εμφάνιση Προτύπου"
DISPLAY_TEMPLATE_HELP: "Το τύπος της σελίδας που ορίζει ποιο twig template θα χρησιμοποιηθεί για να αποδοθεί η σελίδα"
ORDERING: "Ταξινόμηση"
PAGE_ORDER: "Σειρά Σελίδων"
OVERRIDES: "Παρακάμψεις"
MENU: "Μενού"
MENU_HELP: "Η συμβολοσειρά που θα χρησιμοποιηθεί σε ένα μενού. Εάν δεν έχει καθοριστεί, θα χρησιμοποιηθεί ο τίτλος."
SLUG: "Slug"
SLUG_HELP: "Η μεταβλητή slug σας επιτρέπει να ορίσετε συγκεκριμένα το sub-URL μίας σελίδας"
SLUG_VALIDATE_MESSAGE: "Ένα slug πρέπει να περιέχει μόνο πεζούς αλφαριθμητικούς χαρακτήρες και παύλες"
PROCESS: "Διαδικασία"
PROCESS_HELP: "Ελέγχει τον τρόπο που οι σελίδες δέχονται επεξεργασία. Μπορεί να ρυθμιστεί για την εκάστοτε σελίδα ή καθολικά"
DEFAULT_CHILD_TYPE: "Προεπιλεγμένος τύπος Child"
USE_GLOBAL: "Χρησιμοποίησε τη Global τιμή"
ROUTABLE: "Μπορεί να δρομολογηθεί"
ROUTABLE_HELP: "Εάν η σελίδα είναι προσβάσιμα από μια διεύθυνση URL"
CACHING: "Προσωρινή μνήμη αποθήκευσης"
VISIBLE: "Ορατή"
VISIBLE_HELP: "Προσδιορίζει αν μια σελίδα είναι ορατή στην πλοήγηση."
DISABLED: "Ανενεργή"
ITEMS: "Αντικείμενα"
ORDER_BY: "Ταξινόμιση κατά"
ORDER: "Ταξινόμηση"
FOLDER: "Φάκελος"
ASCENDING: "Αύξουσα"
DESCENDING: "Φθίνουσα"
PAGE_TITLE: "Τίτλος σελίδας"
PAGE_TITLE_HELP: "Ο τίτλος της σελίδας"
PAGE: "Σελίδα"
FRONTMATTER: "Frontmatter"
FILENAME: "Όνομα αρχείου"
PARENT_PAGE: "Γονική σελίδα"
HOME_PAGE: "Αρχική σελίδα"
HOME_PAGE_HELP: "Η σελίδα που το Grav θα χρησιμοποιήσει ως προεπιλεγμένη σελίδα προσγείωσης"
DEFAULT_THEME: "Προεπιλεγμένο Θέμα"
DEFAULT_THEME_HELP: "Ορίσετε το προεπιλεγμένο θέμα που θα χρησιμοποιεί το Grav (η προεπιλογή είναι το θέμα Antimatter)"
TIMEZONE: "Ζώνη ώρας"
TIMEZONE_HELP: "Παράκαμψη της προεπιλεγμένης ζώνης ώρας του διακομιστή"
SHORT_DATE_FORMAT: "Σύντομη μορφή ημερομηνίας"
SHORT_DATE_FORMAT_HELP: "Ρύθμισε τη σύντομη μορφή ημερομηνίας που θα χρησιμοποιείται από τα θέματα"
LONG_DATE_FORMAT: "Εκτενής μορφή ημερομηνίας"
LONG_DATE_FORMAT_HELP: "Ρύθμισε την εκτενή μορφή ημερομηνίας που θα χρησιμοποιείται από τα θέματα"
DEFAULT_ORDERING: "Προεπιλεγμένη Ταξινόμηση"
DEFAULT_ORDERING_HELP: "Οι σελίδες μίας λίστας θα εμφανίζονται χρησιμοποιώντας την σειρά εκτός αν αυτό παρακαμφθεί"
DEFAULT_ORDERING_DEFAULT: "Default - βάσει του όνομα φακέλου"
DEFAULT_ORDERING_FOLDER: "Folder - βάσει του όνομα φακέλου"
DEFAULT_ORDERING_TITLE: "Title - βάσει του τίτλου που έχει οριστεί στο header"
DEFAULT_ORDERING_DATE: "Date - βάσει της ημερομηνίας που έχει οριστεί στο header"
DEFAULT_ORDER_DIRECTION: "Προεπιλεγμένη σειρά εμφάνισης"
DEFAULT_ORDER_DIRECTION_HELP: "Η κατεύθυνση των σελίδων σε μια λίστα"
DEFAULT_PAGE_COUNT: "Προεπιλεγμένο πλήθος σελίδων"
DEFAULT_PAGE_COUNT_HELP: "Προεπιλεγμένο μέγιστο πλήθος σελίδων σε μία λίστα"
DATE_BASED_PUBLISHING: "Δημοσίευση βάσει ημερομηνίας"
DATE_BASED_PUBLISHING_HELP: "Αυτόματη δημοσίευση ή ιδιωτικοποίηση των αναρτήσεων βασισμένη στην ημερομηνία τους"
EVENTS: "Συμβάντα"
EVENTS_HELP: "Ενεργοποίησε ή απενεργοποίησε συγκεκριμένα events. Απενεργοποιώντας τα ίσως διακοπεί η λειτουργία κάποιου προσθέτου"
REDIRECT_DEFAULT_ROUTE: "Ανακατεύθυνση της προεπιλεγμένης διαδρομής"
REDIRECT_DEFAULT_ROUTE_HELP: "Αυτόματη ανακατεύθυνση στην προεπιλεγμένη διαδρομή μιας σελίδας"
LANGUAGES: "Γλώσσες"
SUPPORTED: "Υποστηρίζεται"
SUPPORTED_HELP: "Λίστα χωρισμένη με κόμματα κωδικών γλωσσών 2 γραμμάτων (π.χ. 'en,fr,de')"
TRANSLATIONS_FALLBACK: "Εναλλακτική μετάφραση"
TRANSLATIONS_FALLBACK_HELP: "Fallback σε κάποια άλλη μετάφραση εάν η επιλεγμένη γλώσσα δεν έχει μεταφραστεί"
ACTIVE_LANGUAGE_IN_SESSION: "Ενεργή γλώσσα κατά τη συνεδρία"
ACTIVE_LANGUAGE_IN_SESSION_HELP: "Αποθήκευση της ενεργής γλώσσας στη συνεδρία"
HTTP_HEADERS: "Κεφαλίδες HTTP"
EXPIRES: "Λήξη"
EXPIRES_HELP: "Ορίζει την κεφαλίδα λήξης. Η τιμή είναι σε δευτερόλεπτα."
CACHE_CONTROL: "HTTP Cache-Control"
CACHE_CONTROL_HELP: "Ορίστε μια έγκυρη τιμή cache-ελέγχου όπως 'όχι-cache, όχι-αποθήκευση, να-επανεπικυρωθεί'"
LAST_MODIFIED: "Τελευταία τροποποίηση"
LAST_MODIFIED_HELP: "Ορίζει την τελευταία τροποποιημένη κεφαλίδα που μπορεί να σας βοηθήσει να βελτιστοποιήσετε τον διακομιστή μεσολάβησης και την προσωρινή αποθήκευση του προγράμματος περιήγησης"
ETAG: "ETag"
ETAG_HELP: "Καθορίζει την κεφαλίδα etag για να βοηθήσει στον εντοπισμό όταν μια σελίδα έχει τροποποιηθεί"
VARY_ACCEPT_ENCODING: "Ποικίλλει η δεκτή κωδικοποίηση"
VARY_ACCEPT_ENCODING_HELP: "Ορίζει την κεφαλίδα «Ποικίλλει: Δεκτή Κωδικοποίηση» για να βοηθήσει με το διακομιστή μεσολάβησης και την προσωρινή αποθήκευση CDN"
MARKDOWN_EXTRA: "Markdown extra"
MARKDOWN_EXTRA_HELP: "Ενεργοποιήσετε την προεπιλεγμένη υποστήριξη για Markdown Extra - https://michelf.ca/projects/php-markdown/extra/"
MARKDOWN_EXTRA_ESCAPE_FENCES: "Διάφυγε τα HTML στοιχεία σε markdown extra fences"
MARKDOWN_EXTRA_ESCAPE_FENCES_HELP: "Διαφεύγει τα HTML στοιχεία σε markdown extra fences"
AUTO_LINE_BREAKS: "Αυτόματες αλλαγές γραμμών"
AUTO_LINE_BREAKS_HELP: "Ενεργοποιήσετε την υποστήριξη για αυτόματη αλλαγή γραμμής στη markdown"
AUTO_URL_LINKS: "Αυτόματες συνδέσεις URL"
AUTO_URL_LINKS_HELP: "Ενεργοποιήσετε την αυτόματη μετατροπή των διευθύνσεων URL σε HTML υπερ-συνδέσεις"
ESCAPE_MARKUP: "Σημειοθέτηση αποσπάσματος"
ESCAPE_MARKUP_HELP: "Ετικέτες σήμανσης διαφυγής σε HTML οντότητες"
CACHING_HELP: "Γενικός διακόπτης ενεργοποίησης/απενεργοποίησης της προσωρινής αποθήκευσης του Grav"
CACHE_CHECK_METHOD: "Μέθοδος ελέγχου μνήμης προσωρινής αποθήκευσης (cache)"
CACHE_CHECK_METHOD_HELP: "Επιλέξτε τη μέθοδο που χρησιμοποιεί το Grav για να ελέγξει αν έχουν τροποποιηθεί αρχεία σελίδων."
CACHE_DRIVER: "Πρόγραμμα οδήγησης της μνήμης cache"
CACHE_DRIVER_HELP: "Επιλέξτε ποιο πρόγραμμα οδήγησης της προσωρινής αποθήκευσης να χρησιμοποιήσει το Grav. Ο 'Αυτόματος εντοπισμός' προσπαθεί να βρει το καλύτερο για εσάς"
CACHE_PREFIX: "Πρόθεμα cache"
CACHE_PREFIX_HELP: "Ένα αναγνωριστικό για το μέρος του κλειδιού Grav. Μην το αλλάξετε εκτός και αν γνωρίζετε τι κάνετε."
CACHE_PREFIX_PLACEHOLDER: "Προέρχεται από τη βασική διεύθυνση URL (παράκαμψη εισάγοντας τυχαία συμβολοσειρά)"
LIFETIME: "Διάρκεια ζωής"
LIFETIME_HELP: "Ορίζει τη διάρκεια ζωής της cache σε δευτερόλεπτα. 0 = άπειρο"
GZIP_COMPRESSION: "Συμπίεση Gzip"
GZIP_COMPRESSION_HELP: "Ενεργοποιήστε τη GZip συμπίεση της σελίδας του Grav για αυξημένη απόδοση."
TWIG_TEMPLATING: "Πρότυπα Twig"
TWIG_CACHING: "Προσωρινή αποθήκευση Twig"
TWIG_CACHING_HELP: "Ελέγχει το μηχανισμό προσωρινής αποθήκευσης του Twig. Αφήστε το ενεργοποιημένο για καλύτερη απόδοση."
TWIG_DEBUG: "Εντοπισμός σφαλμάτων Twig"
TWIG_DEBUG_HELP: "Επιτρέπει την επιλογή της μη φόρτωσης της επέκτασης Αποσφαλμάτωση Twig"
DETECT_CHANGES: "Ανίχνευση μεταβολών"
DETECT_CHANGES_HELP: "Το Twig θα μεταγλωττίσει αυτόματα την προσωρινή μνήμη του αν εντοπίσει αλλαγές σε πρότυπα Twig"
AUTOESCAPE_VARIABLES: "Εφαρμογή Autoescape στις μεταβλητές"
AUTOESCAPE_VARIABLES_HELP: "Κάνει autoescape όλες τις μεταβλητές. Αυτό πιθανότατα θα σπάσει το site σας"
ASSETS: "Αντικείμενα"
CSS_PIPELINE: "Αγωγός CSS"
CSS_PIPELINE_HELP: "Ο αγωγός CSS είναι η ενοποίηση πολλαπλών CSS πόρων σε ένα αρχείο"
CSS_PIPELINE_INCLUDE_EXTERNALS: "Συμπεριλάβετε εξωτερικούς αγωγούς CSS"
CSS_PIPELINE_INCLUDE_EXTERNALS_HELP: "Οι εξωτερικές διευθύνσεις URL μερικές φορές έχουν σχετικές αναφορές αρχείων και δεν θα έπρεπε να διοχετεύονται"
CSS_PIPELINE_BEFORE_EXCLUDES: "Πρώτα επεξεργασία CSS αγωγού"
CSS_PIPELINE_BEFORE_EXCLUDES_HELP: "Επεξεργάζεται τον CSS αγωγό πριν από οποιαδήποτε άλλη αναφορά CSS που δεν περιλαμβάνεται"
CSS_MINIFY: "Συμπίεση της CSS"
CSS_MINIFY_HELP: "Ελαχιστοποίησε το CSS κατά τη διοχέτευση"
CSS_MINIFY_WINDOWS_OVERRIDE: "Παράκαψη ελαχιστοποίησης CSS για Windows"
CSS_MINIFY_WINDOWS_OVERRIDE_HELP: "Παράκαμψη Ελαχιστοποίησης για Windows. False από προεπιλογή λόγω ThreadStackSize"
CSS_REWRITE: "Επανεγγραφή CSS"
CSS_REWRITE_HELP: "Επανεγγραφή κάθε αναφορικού CSS URL κατά τη διοχέτευση"
JAVASCRIPT_PIPELINE: "Αγωγός JavaScript"
JAVASCRIPT_PIPELINE_HELP: "Ο αγωγός JS είναι η ενοποίηση πολλαπλών JS πόρων σε ένα αρχείο"
JAVASCRIPT_PIPELINE_INCLUDE_EXTERNALS: "Συμπεριλάβετε εξωτερικούς αγωγούς JS"
JAVASCRIPT_PIPELINE_INCLUDE_EXTERNALS_HELP: "Οι εξωτερικές διευθύνσεις URL μερικές φορές έχουν σχετικές αναφορές αρχείων και δεν θα έπρεπε να διοχετεύονται"
JAVASCRIPT_PIPELINE_BEFORE_EXCLUDES: "Πρώτα επεξεργασία JS αγωγού"
JAVASCRIPT_PIPELINE_BEFORE_EXCLUDES_HELP: "Επεξεργάζεται τον JS αγωγό πριν από οποιαδήποτε άλλη αναφορά JS που δεν περιλαμβάνεται"
JAVASCRIPT_MINIFY: "Συμπίεση του κώδικα JavaScript"
JAVASCRIPT_MINIFY_HELP: "Ελαχιστοποίησε το JS κατά τη διοχέτευση"
ENABLED_TIMESTAMPS_ON_ASSETS: "Ενεργοποιήστε τις χρονοσημάνσεις στους διαθέσιμους πόρους"
ENABLED_TIMESTAMPS_ON_ASSETS_HELP: "Ενεργοποίηση χρονοσημάνσεων στους διαθέσιμους πόρους"
COLLECTIONS: "Συλλογές"
ERROR_HANDLER: "Πρόγραμμα χειρισμού σφαλμάτων"
DISPLAY_ERRORS: "Εμφάνιση των μηνυμάτων λάθους"
DISPLAY_ERRORS_HELP: "Εμφάνιση πλήρους backtrace στιλ σελίδας σφάλματος"
LOG_ERRORS: "Καταγραφή σφαλμάτων σε αρχείο"
LOG_ERRORS_HELP: "Καταγραφή σφαλμάτων στο φάκελο /logs"
DEBUGGER: "Πρόγραμμα εντοπισμού σφαλμάτων"
DEBUGGER_HELP: "Ενεργοποιήσετε το πρόγραμμα εντοπισμού σφαλμάτων του Grav και τις ακόλουθες ρυθμίσεις"
DEBUG_TWIG: "Εκσφαλμάτωση του Twig"
DEBUG_TWIG_HELP: "Ενεργοποίηση του εντοπισμού σφαλμάτων στα πρότυπα του Twig"
SHUTDOWN_CLOSE_CONNECTION: "Τερματισμός στενής σύνδεσης"
SHUTDOWN_CLOSE_CONNECTION_HELP: "Κλείσε τη σύνδεση πριν από την κλήση onShutdown(). False για εντοπισμό σφαλμάτων"
DEFAULT_IMAGE_QUALITY: "Προεπιλεγμένη ποιότητα εικόνας"
DEFAULT_IMAGE_QUALITY_HELP: "Η προεπιλεγμένη ποιότητα εικόνας που θα χρησιμοποιείται όταν γίνεται αναδειγματοληψία ή προσωρινή αποθήκευση εικόνων (85%)"
CACHE_ALL: "Προσωρινή αποθήκευση όλων των εικόνων"
CACHE_ALL_HELP: "Πέρασε όλες τις εικόνες μέσω του Grav cache συστήματος ακόμη και αν δεν έχουν επεξεργασία μέσων"
IMAGES_DEBUG: "Υδατογράφημα αποσφαλμάτωσης εικόνας"
IMAGES_DEBUG_HELP: "Εμφάνιση μιας επικάλυψης πάνω από τις εικόνες που δείχνει το βάθος pixel της εικόνας, όταν εργάζεστε με retina για παράδειγμα"
UPLOAD_LIMIT: "Όριο μεταφόρτωσης αρχείων"
UPLOAD_LIMIT_HELP: "Ορίσετε το μέγιστο μέγεθος μεταφόρτωσης σε byte (0 είναι απεριόριστο)"
ENABLE_MEDIA_TIMESTAMP: "Ενεργοποιήστε τις χρονοσημάνσεις στα μέσα"
ENABLE_MEDIA_TIMESTAMP_HELP: "Προσθέτει μια χρονική σήμανση με βάση την τελευταία ημερομηνία τροποποίησης σε κάθε στοιχείο πολυμέσων"
SESSION: "Συνεδρία"
SESSION_ENABLED_HELP: "Ενεργοποιήσετε την υποστήριξη συνεδριών λειτουργίας εντός Grav"
SESSION_NAME_HELP: "Ένα αναγνωριστικό που χρησιμοποιείται για το σχηματισμό του όνόματος του cookie της συνεδρίας"
ABSOLUTE_URLS: "Απόλυτες διευθύνσεις URL"
ABSOLUTE_URLS_HELP: "Απόλυτες ή σχετικές διευθύνσεις URL για «base_url»"
PARAMETER_SEPARATOR: "Διαχωριστικό παραμέτρων"
PARAMETER_SEPARATOR_HELP: "Διαχωριστικό για τις παραμέτρους που διαβιβάστηκαν, που μπορούν να αλλάξουν για τον Apache στα Windows"
TASK_COMPLETED: "Η εργασία ολοκληρώθηκε"
EVERYTHING_UP_TO_DATE: "Τα πάντα είναι ενημερωμένα"
UPDATES_ARE_AVAILABLE: "υπάρχουν διαθέσιμες ενημερώσεις"
IS_AVAILABLE_FOR_UPDATE: "είναι διαθέσιμη για ενημέρωση"
IS_NOW_AVAILABLE: "είναι τώρα διαθέσιμη"
CURRENT: "Τρέχουσα έκδοση"
UPDATE_GRAV_NOW: "Αναβαθμίστε το Grav τώρα"
GRAV_SYMBOLICALLY_LINKED: "Το Grav είναι symlinked. Δε θα υπάρχει διαθέσιμη αναβάθμιση"
UPDATING_PLEASE_WAIT: "Ενημέρωση... παρακαλώ περιμένετε, λήψη"
OF_THIS: "αυτό"
OF_YOUR: "σας"
HAVE_AN_UPDATE_AVAILABLE: "έχει διαθέσιμη ενημέρωση"
SAVE_AS: "Αποθήκευση ως"
MODAL_DELETE_PAGE_CONFIRMATION_REQUIRED_DESC: "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτή τη σελίδα και όλα τα τέκνα; Εάν η σελίδα είναι μεταφρασμένη σε άλλες γλώσσες, αυτές οι μεταφράσεις θα κρατηθούν και πρέπει να διαγραφούν ξεχωριστά. Αλλιώς ο φάκελος σελίδας θα διαγραφεί μαζί με τις υποσελίδες. Αυτή η ενέργεια δεν μπορεί να αναιρεθεί."
AND: "και"
UPDATE_AVAILABLE: "Υπάρχει διαθέσιμη ενημέρωση"
METADATA_KEY: "Κλειδί (π.χ. «λέξεις-κλειδιά»)"
METADATA_VALUE: "Τιμή (π.χ. «Blog, Grav»)"
USERNAME_HELP: "Το όνομα χρήστη πρέπει να είναι μεταξύ 3 και 16 χαρακτήρες, με πεζά, αριθμούς, κάτω παύλες και ενωτικά. Κεφαλαία γράμματα, διαστήματα και ειδικοί χαρακτήρες δεν επιτρέπονται"
FULLY_UPDATED: "Πλήρως Ενημερωμένο"
SAVE_LOCATION: "Τοποθεσία Αποθήκευσης"
PAGE_FILE: "Πρότυπο σελίδας"
PAGE_FILE_HELP: "Ονομασία αρχείου προτύπου σελίδας, και από προεπιλογή το πρότυπο εμφάνισης για αυτή τη σελίδα"
NO_USER_ACCOUNTS: "Δεν βρέθηκε κανένας λογαριασμός χρήστη, παρακαλώ δημιουργήστε έναν πρώτα..."
REDIRECT_TRAILING_SLASH: "Ανακατευθύνει την τελική κάθετο"
REDIRECT_TRAILING_SLASH_HELP: "Εκτέλεσε μια ανακατεύθυνση 301 αντί για διαφανή χειρισμό των καταληκτικών καθέτων URIs."
DEFAULT_DATE_FORMAT: "Μορφή ημερομηνίας σελίδας"
DEFAULT_DATE_FORMAT_HELP: "Μορφή ημερομηνίας σελίδας που χρησιμοποιείται από το Grav. Από προεπιλογή, το Grav επιχειρεί να μαντέψει τη μορφή, εντούτοις μπορείτε να ορίσετε μορφή σύμφωνα με τη σύνταξη PHP"
DEFAULT_DATE_FORMAT_PLACEHOLDER: "Μάντεψε αυτόματα"
IGNORE_FILES: "Αγνόηση αρχείων"
IGNORE_FILES_HELP: "Συγκεκριμένα αρχεία που θα αγνοηθούν κατά την επεξεργασία σελίδων"
IGNORE_FOLDERS: "Αγνόηση φακέλων"
IGNORE_FOLDERS_HELP: "Συγκεκριμένοι φάκελοι που θα αγνοηθούν κατά την επεξεργασία σελίδων"
HTTP_ACCEPT_LANGUAGE: "Όρισε την γλώσσα βάσει του φυλλομετρητή"
HTTP_ACCEPT_LANGUAGE_HELP: "Μπορείτε να επιλέξετε να δοκιμάσετε να ορίσετε τη γλώσσα που βασίζεται στην ετικέτα κεφαλίδας «http_accept_language» στο πρόγραμμα περιήγησης"
OVERRIDE_LOCALE: "Παράκαμψη των Τοπικών Ρυθμίσεων"
OVERRIDE_LOCALE_HELP: "Αντικαθιστά τις ρυθμίσεις τοπικότητας στην PHP με βάση την τρέχουσα γλώσσα"
REDIRECT: "Ανακατεύθυνση σελίδας"
REDIRECT_HELP: "Εισαγάγετε μια διαδρομή σελίδας ή εξωτερική διεύθυνση URL για αυτήν τη σελίδα για να ανακατευθύνετε σε. π.χ. «/κάποια/διαδρομή» ή «http://somesite.com»"
PLUGIN_STATUS: "Κατάσταση πρόσθετου"
INCLUDE_DEFAULT_LANG: "Περιλαμβάνει την προεπιλεγμένη γλώσσα"
INCLUDE_DEFAULT_LANG_HELP: "Αυτό θα προτάξει όλες τις διευθύνσεις URL στην προεπιλεγμένη γλώσσα με την προεπιλεγμένη γλώσσα. π.χ. «/en/blog/my-post»"
ALLOW_URL_TAXONOMY_FILTERS: "Φίλτρα Ταξινόμησης URL"
ALLOW_URL_TAXONOMY_FILTERS_HELP: "Συλλογές βασισμένες σε σελίδα σας επιτρέπουν να φιλτράρετε μέσω «/taxonomy:value»."
REDIRECT_DEFAULT_CODE: "Προεπιλεγμένος κωδικός ανακατεύθυνσης"
REDIRECT_DEFAULT_CODE_HELP: "Ο κωδικός κατάστασης HTTP που θα χρησιμοποιηθεί για ανακατευθύνσεις"
IGNORE_HIDDEN: "Παράβλεψη των κρυφών"
IGNORE_HIDDEN_HELP: "Παράβλεψη όλων των αρχείων και των φακέλων που ξεκινούν με μια ΤΕΛΕΙΑ"
WRAPPED_SITE: "Wrapped site"
WRAPPED_SITE_HELP: "Για να γνωρίζουν τα θέματα/plugins αν το Grav είναι wrapped από άλλη πλατφόρμα"
FALLBACK_TYPES: "Επιτρεπόμενοι εναλλακτικοί τύποι"
FALLBACK_TYPES_HELP: "Επιτρεπτοί τύποι αρχείων που μπορούν να βρεθούν αν έχετε αποκτήσει πρόσβαση μέσω της οδού Σελίδα. Προεπιλέγει οποιοδήποτε τύπο μέσων που υποστηρίζονται."
INLINE_TYPES: "Ένθετοι εναλλακτικοί τύποι"
INLINE_TYPES_HELP: "Μια λίστα των τύπων αρχείων που πρέπει να εμφανίζονται ένθετα αντί να γίνεται λήψη αυτών"
APPEND_URL_EXT: "Προσάρτηση επέκτασης URL"
APPEND_URL_EXT_HELP: "Θα προσθέσει μια προσαρμοσμένη επέκταση στο URL της Σελίδας. Σημείωση, αυτό θα σημαίνει ότι το Grav θα αναζητήσει ' <template>. <extension>. twig ' πρότυπο"
PAGE_MODES: "Λειτουργίες Σελίδας"
PAGE_TYPES: "Τύποι σελίδας"
ACCESS_LEVELS: "Επίπεδα πρόσβασης"
GROUPS: "Ομάδες"
GROUPS_HELP: "Λίστα των ομάδων που ο χρήστης είναι μέλος"
ADMIN_ACCESS: "Πρόσβαση Διαχειριστή"
SITE_ACCESS: "Πρόσβαση στον Ιστοχώρο"
INVALID_SECURITY_TOKEN: "Το διακριτικό ασφαλείας δεν είναι έγκυρο"
ACTIVATE: "Eνεργοποίηση"
TWIG_UMASK_FIX: "Unmask Fix"
TWIG_UMASK_FIX_HELP: "Από προεπιλογή το Twig δημιουργεί προσωρινά αρχεία ως 0755, η διόρθωση τα αλλάζει σε 0775"
CACHE_PERMS: "Δικαιώματα μνήμης cache"
CACHE_PERMS_HELP: "Προεπιλεγμένα δικαιώματα φακέλων cache. Συνήθως 0755 ή 0775"
REMOVE_SUCCESSFUL: "Επιτυχής Κατάργηση"
REMOVE_FAILED: "Η Κατάργηση Απέτυχε"
HIDE_HOME_IN_URLS: "Απόκρυψη της αρχικής διαδρομής στις διευθύνσεις URL"
HIDE_HOME_IN_URLS_HELP: "Θα εξασφαλίσει ότι οι προεπιλεγμένες διαδρομές για όλες τις σελίδες κάτω από την αρχική δε θα αναφέρουν την κανονική διαδρομή της"
TWIG_FIRST: "Επεξεργασία πρώτα των αρχείων του Twig"
TWIG_FIRST_HELP: "Εάν έχετε ενεργοποιήσει την επεξεργασία σελίδων Twig, τότε μπορείτε να ρυθμίσετε το Twig να επεξεργαστεί πριν ή μετά από τη markdown"
SESSION_SECURE: "Ασφαλής"
SESSION_SECURE_HELP: "Εάν είναι αληθές, δείχνει ότι η επικοινωνία για αυτό το cookie πρέπει να γίνει πάνω από μιά κρυπτογραφημένη μετάδοση. Προειδοποίηση: Ενεργοποιήστε την μόνο στις τοποθεσίες που εκτελούνται αποκλειστικά σε HTTPS"
SESSION_HTTPONLY: "HTTP μόνο"
SESSION_HTTPONLY_HELP: "Εάν είναι αληθές, δείχνει ότι τα cookies πρέπει να χρησιμοποιούνται μόνο μέσω HTTP, και δεν επιτρέπεται η τροποποίηση μέσω JavaScript"
REVERSE_PROXY: "Αντίστροφoς Διακομιστής Μεσολάβησης"
REVERSE_PROXY_HELP: "Ενεργοποιήστε το άν είστε πίσω από έναν διακομιστή αντίστροφης μεσολάβηση αντιμετωπίζετε δυσκολία με τις διευθύνσεις URL που περιέχουν εσφαλμένες θύρες"
INVALID_FRONTMATTER_COULD_NOT_SAVE: "Μη έγκυρος πρόλογος (frontmatter), αδύνατη η αποθήκευση"
ADD_FOLDER: "Προσθήκη φακέλου"
PROXY_URL: "Διεύθυνση URL του διακομιστή μεσολάβησης"
PROXY_URL_HELP: "Εισάγετε το Διακομιστή proxy ή τη διεύθυνση IP και τη ΘΥΡΑ (PORT)"
NOTHING_TO_SAVE: "Δεν υπάρχει τίποτα γιά αποθήκευση"
FILE_ERROR_ADD: "Παρουσιάστηκε σφάλμα κατά την προσθήκη του αρχείου"
FILE_ERROR_UPLOAD: "Παρουσιάστηκε σφάλμα κατά τη μεταφόρτωση του αρχείου"
FILE_UNSUPPORTED: "Μη υποστηριζόμενος τύπος αρχείου"
ADD_ITEM: "Προσθήκη στοιχείου"
FILE_TOO_LARGE: "Το αρχείο είναι πολύ μεγάλο για να φορτωθεί, το μέγιστο επιτρεπόμενο είναι %s σύμφωνα με <br>τις ρυθμίσεις της PHP. Αυξήστε τη ρύθμιση PHP σας `post_max_size`"
INSTALLING: "Γίνεται εγκατάσταση"
LOADING: "Φόρτωση…"
DEPENDENCIES_NOT_MET_MESSAGE: "Οι ακόλουθες εξαρτήσεις πρέπει να εκπληρωθούν πρώτα:"
ERROR_INSTALLING_PACKAGES: "Σφάλμα κατά την εγκατάσταση πακέτων"
INSTALLING_DEPENDENCIES: "Εγκατάσταση εξαρτήσεων..."
INSTALLING_PACKAGES: "Εγκατάσταση πακέτων..."
PACKAGES_SUCCESSFULLY_INSTALLED: "Τα πακέτα εγκαταστάθηκαν με επιτυχία."
READY_TO_INSTALL_PACKAGES: "Είστε έτοιμοι να εγκαταστήσετε τα πακέτα"
PACKAGES_NOT_INSTALLED: "Τα πακέτα δεν εγκαταστάθηκαν"
PACKAGES_NEED_UPDATE: "Πακέτα που έχουν ήδη εγκατασταθεί, αλλά πολύ παλιά"
PACKAGES_SUGGESTED_UPDATE: "Πακέτα που είναι ήδη εγκατεστημένα, καθώς και η έκδοση είναι εντάξει, αλλά θα ενημερώνονται"
REMOVE_THE: "Αφαιρέστε το %s"
CONFIRM_REMOVAL: "Είστε βέβαιοι ότι θέλετε να διαγράψετε το %s; ?"
REMOVED_SUCCESSFULLY: "Το %s καταργήθηκε με επιτυχία"
ERROR_REMOVING_THE: "Σφάλμα κατά την αφαίρεση του %s"
ADDITIONAL_DEPENDENCIES_CAN_BE_REMOVED: "Το %s απαιτεί τις ακόλουθες εξαρτήσεις, που δεν απαιτούνται από άλλα εγκατεστημένα πακέτα. Εάν δεν τις χρησιμοποιείτε, μπορείτε να τις καταργήσετε απευθείας από εδώ."
READY_TO_UPDATE_PACKAGES: "Είστε έτοιμοι να ενημερώσετε τα πακέτα"
ERROR_UPDATING_PACKAGES: "Σφάλμα κατά την ενημέρωση πακέτων."
UPDATING_PACKAGES: "Ενημέρωση πακέτων..."
PACKAGES_SUCCESSFULLY_UPDATED: "Τα πακέτα ενημερώθηκαν με επιτυχία."
UPDATING: "Ενημέρωση"
GPM_RELEASES: "GPM κυκλοφορίες"
GPM_RELEASES_HELP: "Επιλέξτε «Testing» για να εγκαταστήσετε beta ή testing εκδόσεις"
GPM_METHOD: "Μέθοδος Remote Fetch"
GPM_METHOD_HELP: "Όταν οριστεί σε αυτόματο, το Grav θα καθορίσει αν το fopen είναι διαθέσιμο και θα το χρησιμοποιήσει, αλλιώς θα επιστρέψει στο cURL. Για να επιβάλετε τη χρήση του ενός ή του άλλου αλλάξτε τη ρύθμιση."
GPM_VERIFY_PEER: "Εξ αποστάσεως επαλήθευση Peer (SSL)"
GPM_VERIFY_PEER_HELP: "Ορισμένες υπηρεσίες παροχής φαίνεται να αποτυγχάνουν στην επαλήθευση πιστοποιητικύ SSL του getgrav.org, κάνοντας το GPM να μην λειτουργεί. Αν αυτή είναι η περίπτωση για εσάς, η απενεργοποίηση αυτής της ρύθμισης μπορεί να βοηθήσει"
AUTO: "Αυτόματο"
FOPEN: "fopen"
CURL: "cURL"
STABLE: "Stable"
TESTING: "Testing"
FRONTMATTER_PROCESS_TWIG: "Επεξεργασία frontmatter Twig"
FRONTMATTER_PROCESS_TWIG_HELP: "Όταν ενεργοποιηθεί μπορείτε να χρησιμοποιήσετε μεταβλητές Twig config στο frontmatter"
FRONTMATTER_IGNORE_FIELDS: "Παράβλεψη frontmatter πεδίων"
FRONTMATTER_IGNORE_FIELDS_HELP: "Ορισμένα πεδία frontmatter μπορεί να περιέχουν Twig, αλλά δεν πρέπει να υποστούν επεξεργασία, όπως οι «φόρμες»"
PACKAGE_X_INSTALLED_SUCCESSFULLY: "Το πακέτο %s εγκαταστάθηκε με επιτυχία"
ORDERING_DISABLED_BECAUSE_PARENT_SETTING_ORDER: "Γονική ρύθμιση ταξινόμησης, η ταξινόμηση απενεργοποιήθηκε"
ORDERING_DISABLED_BECAUSE_PAGE_NOT_VISIBLE: "Η σελίδα δεν είναι ορατή, η ταξινόμηση απενεργοποιήθηκε"
ORDERING_DISABLED_BECAUSE_TOO_MANY_SIBLINGS: "Η ταξινόμηση μέσω διαχειριστή δεν υποστηρίζεται γιατί υπάρχουν περισσότερα από 200 παράγωγα"
ORDERING_DISABLED_BECAUSE_PAGE_NO_PREFIX: "Η ταξινόμηση σελίδων είναι απενεργοποιημένη για αυτήν τη σελίδα, επειδή το <strong>Αριθμητικό Πρόθεμα Φακέλου</strong> δεν είναι ενεργοποιημένο"
CANNOT_ADD_MEDIA_FILES_PAGE_NOT_SAVED: "ΣΗΜΕΙΩΣΗ: Δεν μπορείτε να προσθέσετε αρχεία πολυμέσων, μέχρι να αποθηκεύσετε τη σελίδα. Απλά κάντε κλικ «Αποθήκευση» στην κορυφή"
CANNOT_ADD_FILES_PAGE_NOT_SAVED: "ΣΗΜΕΙΩΣΗ: Η σελίδα πρέπει να αποθηκευτεί πριν να μπορείτε να ανεβάσετε αρχεία σε αυτή."
DROP_FILES_HERE_TO_UPLOAD: "Ρίξτε τα αρχεία σας εδώ ή <strong>κάντε κλικ σε αυτόν τον τομέα</strong>"
INSERT: "Εισαγωγή"
UNDO: "Αναίρεση"
REDO: "Ακύρωση Αναίρεσης"
HEADERS: "Επικεφαλίδες"
BOLD: "Έντονα"
ITALIC: "Πλάγια"
STRIKETHROUGH: "Διακριτή διαγραφή"
SUMMARY_DELIMITER: "Περίληψη οριοθέτη"
LINK: "Σύνδεσμος"
IMAGE: "Εικόνα"
BLOCKQUOTE: "Μπλοκ κειμένου παράθεσης"
UNORDERED_LIST: "Μη ταξινομημένη λίστα"
ORDERED_LIST: "Ταξινομημένη λίστα"
EDITOR: "Επεξεργαστής"
PREVIEW: "Προεπισκόπιση"
FULLSCREEN: "Πλήρης οθόνη"
NON_ROUTABLE: "Απροσπέλαστη"
NON_VISIBLE: "Αόρατη"
NON_PUBLISHED: "Μη δημοσιευμένες"
CHARACTERS: "χαρακτήρες"
PUBLISHING: "Δημοσίευση"
MEDIA_TYPES: "Τύποι μέσων"
IMAGE_OPTIONS: "Επιλογές εικόνας"
MIME_TYPE: "Τύπος MIME"
THUMB: "Μικρογραφία"
TYPE: "Τύπος"
FILE_EXTENSION: "Επέκταση αρχείου"
LEGEND: "Υπόμνημα σελίδων"
MEMCACHE_SERVER: "Διακομιστής Memcache"
MEMCACHE_SERVER_HELP: "Η διεύθυνση του διακομιστή Memcache"
MEMCACHE_PORT: "Θύρα Memcache"
MEMCACHE_PORT_HELP: "Η θύρα του διακομιστή Memcache"
MEMCACHED_SERVER: "Διακομιστής Memcached"
MEMCACHED_SERVER_HELP: "Η διεύθυνση του διακομιστή Memcached"
MEMCACHED_PORT: "Θύρα Memcached"
MEMCACHED_PORT_HELP: "Η θύρα του διακομιστή Memcached"
REDIS_SERVER: "Διακομιστής Redis"
REDIS_SERVER_HELP: "Η διεύθυνση του διακομιστή Redis"
REDIS_PORT: "Θύρα Redis"
REDIS_PORT_HELP: "Η θύρα του διακομιστή Redis"
REDIS_PASSWORD: "Συνθηματικό Redis"
ALL: "Όλα"
FROM: "από"
TO: "έως"
RELEASE_DATE: "Ημερομηνία κυκλοφορίας"
SORT_BY: "Ταξινόμηση κατά"
RESOURCE_FILTER: "Φίλτρο..."
FORCE_SSL: "Εξαναγκασμός SSL"
FORCE_SSL_HELP: "Γενικός εξαναγκασμός SSL, αν ενεργοποιηθεί όταν η σελίδα είναι προσβάσιμη μέσω HTTP, το Grav αποστέλλει ανακατεύθυνση στη σελίδα HTTPS"
NEWS_FEED: "Ροή ειδήσεων"
EXTERNAL_URL: "Εξωτερική διεύθυνση URL"
CUSTOM_BASE_URL: "Προσαρμοσμένο URL βάσης"
CUSTOM_BASE_URL_HELP: "Χρησιμοποιήστε το αν θέλετε να ξαναγράψετε τον τομέα του ιστότοπου ή να χρησιμοποιήσετε κάποιον υποφάκελο, διαφορετικό από εκείνο που χρησιμοποιείται από το Grav. Παράδειγμα: http://localhost"
FILEUPLOAD_PREVENT_SELF: 'Δεν είναι δυνατό να χρησιμοποιήσετε «%s» εκτός σελίδων.'
FILEUPLOAD_UNABLE_TO_UPLOAD: 'Δεν μπορείτε να ανεβάσετε το αρχείο %s: %s'
FILEUPLOAD_UNABLE_TO_MOVE: 'Δεν μπορείτε να μετακινήσετε το αρχείο %s σε «%s»'
DROPZONE_CANCEL_UPLOAD: 'Ακύρωση ανεβάσματος'
DROPZONE_CANCEL_UPLOAD_CONFIRMATION: 'Είστε βέβαιοι ότι θέλετε να ακυρώσετε αυτό το ανέβασμα;'
DROPZONE_DEFAULT_MESSAGE: 'Ρίξτε τα αρχεία σας εδώ ή <strong>κάντε κλικ σε αυτόν τον τομέα</strong>'
DROPZONE_FALLBACK_MESSAGE: 'Το πρόγραμμα περιήγησής σας δεν υποστηρίζει drag and drop ανέβασμα αρχείων.'
DROPZONE_FALLBACK_TEXT: 'Παρακαλούμε χρησιμοποιήστε την παρακάτω φόρμα για να φορτώσετε τα αρχεία σας όπως γινόταν παλαιότερα.'
DROPZONE_FILE_TOO_BIG: 'Το αρχείο είναι πολύ μεγάλο ({{filesize}}MiB). Μέγιστο μέγεθος αρχείου: {{maxFilesize}}MiB.'
DROPZONE_INVALID_FILE_TYPE: "Δεν μπορείτε να ανεβάσετε αρχεία αυτού του τύπου."
DROPZONE_MAX_FILES_EXCEEDED: "Δεν μπορείτε να ανεβάσετε άλλα αρχεία."
DROPZONE_REMOVE_FILE: "Αφαίρεση αρχείου"
DROPZONE_RESPONSE_ERROR: "Ο διακομιστής ανταποκρίθηκε με κωδικό {{statusCode}}."
PREMIUM_PRODUCT: "Premium"
DESTINATION_NOT_SPECIFIED: "Δεν ορίστηκε προορισμός"
UPLOAD_ERR_NO_TMP_DIR: "Λείπει ένας προσωρινός φάκελος"
SESSION_SPLIT: "Συνεδρία Σπλιτ"
SESSION_SPLIT_HELP: "Ανεξάρτητες split συνεδρίες μεταξύ σελίδας και άλλων plugins (όπως admin)"
ERROR_FULL_BACKTRACE: "Πλήρες Backtrace σφάλμα"
ERROR_SIMPLE: "Απλό σφάλμα"
ERROR_SYSTEM: "Σφάλμα συστήματος"
IMAGES_AUTO_FIX_ORIENTATION: "Αυτόματη επιδιόρθωση του προσανατολισμού"
IMAGES_AUTO_FIX_ORIENTATION_HELP: "Διορθώσετε αυτόματα τον προσανατολισμό της εικόνας που βασίζεται στα δεδομένα Exif"
REDIS_SOCKET: "Υποδοχή Redis"
REDIS_SOCKET_HELP: "Η υποδοχή Redis"
NOT_SET: "Μη ορισμένο"
PERMISSIONS: "Δικαιώματα"
NEVER_CACHE_TWIG: "Ποτέ Twig Cache"
NEVER_CACHE_TWIG_HELP: "Μόνο cache περιεχόμενου και επεξεργασια του Twig κάθε φορά για τις σελίδες. Παραβλέπει τη ρύθμιση twig_first."
ALLOW_WEBSERVER_GZIP: "Επίτρεψε WebServer Gzip"
ALLOW_WEBSERVER_GZIP_HELP: "Απενεργοποιημένη από προεπιλογή. Όταν είναι ενεργοποιημένη, η WebServer-configured Gzip/Deflate συμπίεση θα λειτουργήσει, αλλά δεν θα κλείσει πριν από το onShutDown() προκαλώντας αργή φόρτωση της σελίδας"
OFFLINE_WARNING: "Αδύνατη η σύνδεση με το GPM"
CLEAR_IMAGES_BY_DEFAULT: "Καθαρισμός cache εικόνων από προεπιλογή"
CLEAR_IMAGES_BY_DEFAULT_HELP: "Από προεπιλογή, οι επεξεργασμένες εικόνες καθαρίζονται για κάθε καθαρισμό cache, αυτό μπορεί να απενεργοποιηθεί"
CLI_COMPATIBILITY: "CLI Συμβατότητα"
CLI_COMPATIBILITY_HELP: "Εξασφαλίζει ότι χρησιμοποιούνται μόνο non-volatile Cache οδηγοί (αρχείο, redis, memcache, κλπ.)"
REINSTALL_PLUGIN: "Επανεγκατάσταση Πρόσθετου"
REINSTALL_THEME: "Εγκατάσταση Θέματος"
REINSTALL_THE: "Εγκαταστήστε ξανά το %s"
CONFIRM_REINSTALL: "Είστε βέβαιοι ότι θέλετε να επανεγκαταστήσετε το %s;"
REINSTALLED_SUCCESSFULLY: "Το %s επανεγκαταστάθηκε με επιτυχία"
ERROR_REINSTALLING_THE: "Σφάλμα κατά την επανεγκατάσταση του %s"
PACKAGE_X_REINSTALLED_SUCCESSFULLY: "Το πακέτο %s επανεγκαταστάθηκε με επιτυχία"
REINSTALLATION_FAILED: "Η επανεγκατάσταση απέτυχε"
WARNING_REINSTALL_NOT_LATEST_RELEASE: "Η εγκατεστημένη έκδοση δεν είναι η τελευταία έκδοση. Κάνοντας κλικ στο κουμπί Συνέχεια, θα αφαιρέσετε την τρέχουσα έκδοση και θα εγκαταστήσετε την πιο πρόσφατη διαθέσιμη έκδοση"
TOOLS: "Εργαλεία"
DIRECT_INSTALL: "Άμεση Εγκατάσταση"
NO_PACKAGE_NAME: "Δεν επιλέχθηκε όνομα πακέτου"
PACKAGE_EXTRACTION_FAILED: "Η εξαγωγή πακέτου απέτυχε"
NOT_VALID_GRAV_PACKAGE: "Δεν είναι ένα έγκυρο πακέτο Grav"
NAME_COULD_NOT_BE_DETERMINED: "Δεν μπορούσε να προσδιοριστεί το όνομα"
CANNOT_OVERWRITE_SYMLINKS: "Δεν μπορεί να αντικαταστήσει symlinks"
ZIP_PACKAGE_NOT_FOUND: "Δεν βρέθηκε ZIP"
GPM_OFFICIAL_ONLY: "Επίσημo GPM μόνο"
GPM_OFFICIAL_ONLY_HELP: "Επιτρέπει μόνο άμεση εγκατάσταση από το επίσημο αποθετήριο GPM."
NO_CHILD_TYPE: "Κανένα θυγατρικό τύπο για αυτό το rawroute"
SORTABLE_PAGES: "Ταξινομήσιμες σελίδες:"
UNSORTABLE_PAGES: "Μη Ταξινομήσιμες Σελίδες"
ADMIN_SPECIFIC_OVERRIDES: "Συγκεκριμένες Παρακάμψεις Διαχειριστή"
ADMIN_CHILDREN_DISPLAY_ORDER: "Σειρά Εμφάνισης Θυγατρικών"
ADMIN_CHILDREN_DISPLAY_ORDER_HELP: "Η σειρά με την οποία οι θυγατρικές αυτής της σελίδας θα πρέπει να εμφανίζονται στην προβολή 'Σελίδες' του Admin plugin"
PWD_PLACEHOLDER: "πολύπλοκη συμβολοσειρά μήκους τουλάχιστον 8 χαρακτήρων"
PWD_REGEX: "Κανονική έκφραση (regex) συνθηματικού"
PWD_REGEX_HELP: "Από προεπιλογή: Το συνθηματικό πρέπει να περιέχει τουλάχιστον έναν αριθμό, ένα κεφαλαίο και ένα πεζό γράμμα και τουλάχιστον 8 ή περισσότερους χαρακτήρες"
USERNAME_PLACEHOLDER: "πεζούς χαρακτήρες μόνο, π.χ. «admin»"
USERNAME_REGEX: "Όνομα χρήστη Regex"
USERNAME_REGEX_HELP: "Από προεπιλογή: πεζούς μόνο χαρακτήρες, αριθμούς, παύλες και κάτω παύλες. 3 - 16 χαρακτήρες"
ENABLE_AUTO_METADATA: "Αυτόματα μεταδεδομένα από Exif"
ENABLE_AUTO_METADATA_HELP: "Δημιουργεί αυτόματα αρχεία μεταδεδομένων για εικόνες με exif πληροφορίες"
2FA_TITLE: "Έλεγχος ταυτότητας δύο παραγόντων"
2FA_INSTRUCTIONS: "##### Έλεγχος Ταυτότητας Δύο Παραγόντων\nΈχετε ενεργοποιημένο τον **ΕΤΔΠ** σε αυτόν το λογαριασμό. Παρακαλώ χρησιμοποιήστε την **ΕΤΔΠ** εφαρμογή σας για να εισαγάγετε τον τρέχοντα **6-ψήφιο κωδικό** ώστε να ολοκληρώσετε τη διαδικασία σύνδεσης."
2FA_REGEN_HINT: "Η αναδημιουργία του κωδικού θα απαιτήσει να ενημερώσετε την εφαρμογή επαλήθευσής σας"
2FA_LABEL: "Πρόσβαση Διαχειριστή"
2FA_FAILED: "Μη έγκυρος κωδικός ελέγχου ταυτότητας δύο παραγόντων, παρακαλούμε προσπαθήστε ξανά..."
2FA_ENABLED: "ΕΤΔΠ Ενεργοποιημένος"
2FA_CODE_INPUT: "000000"
2FA_SECRET: "Μυστικό ΕΤΔΠ"
2FA_SECRET_HELP: "Σαρώστε αυτόν τον κωδικό QR με την [εφαρμογή ελέγχου ταυτότητας] (https://learn.getgrav.org/admin-panel/2fa#apps) της επιλογής σας. Επίσης είναι καλή ιδέα να κρατήσετε αντίγραφο ασφαλείας του μυστικού κωδικού σε μια ασφαλή τοποθεσία, σε περίπτωση που χρειαστεί να επανεγκαταστήσετε την εφαρμογή σας. Ελέγξτε τα [εγχειρίδια του Grav] (https://learn.getgrav.org/admin-panel/2fa) για περισσότερες πληροφορίες "
2FA_REGENERATE: "Επαναδημιουργία"
FORCE_LOWERCASE_URLS: "Εξαναγκασμός πεζών URLs"
FORCE_LOWERCASE_URLS_HELP: "Ως προεπιλογή το Grav θα ορίσει τις διαδρομές με πεζά. Αν αυτό είναι απενεργοποιημένο, μπορούν να χρησιμοποιηθούν κεφαλαία"
INTL_ENABLED: "Ενσωμάτωση intl ενότητας"
INTL_ENABLED_HELP: "Χρησιμοποιήστε την Intl PHP ενότητα και διαταξινόμηση για να ταξινομήσετε τις συλλογές που βασίζονται στο UTF8"
VIEW_SITE_TIP: "Δείτε τη σελίδα"
TOOLS_DIRECT_INSTALL_TITLE: "Απευθείας Εγκατάσταση των Grav Πακέτων"
TOOLS_DIRECT_INSTALL_UPLOAD_TITLE: "Εγκατάσταση Πακέτου με Απευθείας Μεταφόρτωση ZIP"
TOOLS_DIRECT_INSTALL_UPLOAD_DESC: "Μπορείτε να εγκαταστήσετε εύκολα ένα έγκυρο <strong>θέμα</strong>, <strong>πρόσθετο</strong>, ή ακόμα και πακέτο zip αναβάθμισης του <strong>Grav</strong> με αυτή τη μέθοδο. Αυτό το πακέτο δε χρειάζεται να είναι καταχωρημένο στο GPM και σας επιτρέπει να επιστρέψετε εύκολα σε προηγούμενη έκδοση ή να εγκαταστήσετε για δοκιμή."
TOOLS_DIRECT_INSTALL_URL_TITLE: "Εγκατάσταση Πακέτου μέσω Απομακρυσμένης Αναφοράς URL"
TOOLS_DIRECT_INSTALL_URL_DESC: "Εναλλακτικά, μπορείτε επίσης να αναφέρετε το πλήρες URL για το αρχείο ZIP του πακέτου και να το εγκαταστήσετε μέσω απομακρυσμένου URL."
TOOLS_DIRECT_INSTALL_UPLOAD_BUTTON: "Μεταφόρτωση και εγκατάσταση"
ROUTE_OVERRIDES: "Παρακάμψεις Διαδρομών"
ROUTE_DEFAULT: "Προεπιλεγμένη Διαδρομή"
ROUTE_CANONICAL: "Κανονική Διαδρομή"
ROUTE_ALIASES: "Ψευδώνυμα Διαδρομών"
CONFIGURATION: "Διαμόρφωση"
ADMIN_CACHING: "Ενεργοποιήσετε την προσωρινή αποθήκευση Admin"
ADMIN_CACHING_HELP: "Η προσωρινή αποθήκευση στο admin μπορεί να ελέγχεται αυτόνομα από τη front-end ιστοσελίδα"
CONTENT_PADDING: "Περιθώριο περιεχομένου"
CONTENT_PADDING_HELP: "Ενεργοποίηση/απενεργοποίηση του περιθωρίου περιεχομένου γύρω από την περιοχή περιεχομένου για να παρέχει περισσότερο χώρο"
TIMEOUT: "Λήξη χρονικού ορίου"
TIMEOUT_HELP: "Ορίζει το χρονικό όριο της συνεδρίας σε δευτερόλεπτα"
DASHBOARD: "Πίνακας Ελέγχου"
NOTIFICATIONS: "Ειδοποιήσεις"
File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More