diff --git a/_config/routes.yml b/_config/routes.yml
index 95273ebc4..947adfbe7 100644
--- a/_config/routes.yml
+++ b/_config/routes.yml
@@ -7,8 +7,10 @@ Director:
'': 'Controller'
---
Name: coreroutes
-After: cms/routes#modelascontrollerroutes
Before: '*'
+After:
+ - framework/routes#rootroutes
+ - cms/routes#modelascontrollerroutes
---
Director:
rules:
@@ -21,7 +23,11 @@ Director:
'interactive': 'SapphireREPL'
---
Name: adminroutes
-After: framework/routes#coreroutes
+Before: '*'
+After:
+ - framework/routes#rootroutes
+ - framework/routes#coreroutes
+ - cms/routes#modelascontrollerroutes
---
Director:
rules:
diff --git a/admin/code/LeftAndMain.php b/admin/code/LeftAndMain.php
index e96b1c665..e789450cc 100644
--- a/admin/code/LeftAndMain.php
+++ b/admin/code/LeftAndMain.php
@@ -336,9 +336,8 @@ class LeftAndMain extends Controller implements PermissionProvider {
}
function handleRequest(SS_HTTPRequest $request, DataModel $model = null) {
- $title = $this->Title();
-
$response = parent::handleRequest($request, $model);
+ $title = $this->Title();
if(!$response->getHeader('X-Controller')) $response->addHeader('X-Controller', $this->class);
if(!$response->getHeader('X-Title')) $response->addHeader('X-Title', $title);
@@ -1342,8 +1341,10 @@ class LeftAndMain extends Controller implements PermissionProvider {
* @return string
*/
function SectionTitle() {
- if($title = $this->stat('menu_title')) return $title;
-
+ $class = get_class($this);
+ $defaultTitle = LeftAndMain::menu_title_for_class($class);
+ if($title = _t("{$class}.MENUTITLE", $defaultTitle)) return $title;
+
foreach($this->MainMenu() as $menuItem) {
if($menuItem->LinkingMode != 'link') return $menuItem->Title;
}
diff --git a/core/ClassInfo.php b/core/ClassInfo.php
index 39baa1765..7aa17fa56 100644
--- a/core/ClassInfo.php
+++ b/core/ClassInfo.php
@@ -231,6 +231,25 @@ class ClassInfo {
return $matchedClasses;
}
+
+ private static $method_from_cache = array();
+
+ static function has_method_from($class, $method, $compclass) {
+ if (!isset(self::$method_from_cache[$class])) self::$method_from_cache[$class] = array();
+
+ if (!array_key_exists($method, self::$method_from_cache[$class])) {
+ self::$method_from_cache[$class][$method] = false;
+
+ $classRef = new ReflectionClass($class);
+
+ if ($classRef->hasMethod($method)) {
+ $methodRef = $classRef->getMethod($method);
+ self::$method_from_cache[$class][$method] = $methodRef->getDeclaringClass()->getName();
+ }
+ }
+
+ return self::$method_from_cache[$class][$method] == $compclass;
+ }
}
diff --git a/core/Config.php b/core/Config.php
index 6bc413be3..4cf55611b 100644
--- a/core/Config.php
+++ b/core/Config.php
@@ -173,12 +173,6 @@ class Config {
$this->collectConfigPHPSettings = false;
}
- static $extra_static_sources = array();
-
- static function add_static_source($forclass, $donorclass) {
- self::$extra_static_sources[$forclass][] = $donorclass;
- }
-
/** @var [Config_ForClass] - The list of Config_ForClass instances, keyed off class */
static protected $for_class_instances = array();
@@ -371,14 +365,17 @@ class Config {
// Then look at the static variables
$nothing = new stdClass();
- $classes = array($class);
+
+ $sources = array($class);
// Include extensions only if not flagged not to, and some have been set
- if ((($sourceOptions & self::EXCLUDE_EXTRA_SOURCES) != self::EXCLUDE_EXTRA_SOURCES) && isset(self::$extra_static_sources[$class])) {
- $classes = array_merge($classes, self::$extra_static_sources[$class]);
+ if (($sourceOptions & self::EXCLUDE_EXTRA_SOURCES) != self::EXCLUDE_EXTRA_SOURCES) {
+ $extraSources = Object::get_extra_config_sources($class);
+ if ($extraSources) $sources = array_merge($sources, $extraSources);
}
- foreach ($classes as $staticSource) {
- $value = Object::static_lookup($staticSource, $name, $nothing);
+ foreach ($sources as $staticSource) {
+ if (is_array($staticSource)) $value = isset($staticSource[$name]) ? $staticSource[$name] : $nothing;
+ else $value = Object::static_lookup($staticSource, $name, $nothing);
if ($value !== $nothing) {
self::merge_low_into_high($result, $value, $suppress);
diff --git a/core/DAG.php b/core/DAG.php
index 9988af21a..c2acc7f31 100644
--- a/core/DAG.php
+++ b/core/DAG.php
@@ -4,7 +4,7 @@
* A Directed Acyclic Graph - used for doing topological sorts on dependencies, such as the before/after conditions
* in config yaml fragments
*/
-class SS_DAG {
+class SS_DAG implements IteratorAggregate {
/** @var array|null - The nodes/vertices in the graph. Should be a numeric sequence of items (no string keys, no gaps). */
protected $data;
@@ -68,7 +68,68 @@ class SS_DAG {
$dag = $withedges;
}
- if ($dag) throw new Exception("DAG has cyclic requirements");
+ if ($dag) {
+ $remainder = new SS_DAG($data); $remainder->dag = $dag;
+ throw new SS_DAG_CyclicException("DAG has cyclic requirements", $remainder);
+ }
return $sorted;
}
+
+ function getIterator() {
+ return new SS_DAG_Iterator($this->data, $this->dag);
+ }
+}
+
+class SS_DAG_CyclicException extends Exception {
+
+ public $dag;
+
+ function __construct($message, $dag) {
+ $this->dag = $dag;
+ parent::__construct($message);
+ }
+
+}
+
+class SS_DAG_Iterator implements Iterator {
+
+ protected $data;
+ protected $dag;
+
+ protected $dagkeys;
+ protected $i;
+
+ function __construct($data, $dag) {
+ $this->data = $data;
+ $this->dag = $dag;
+ $this->rewind();
+ }
+
+ function key() {
+ return $this->i;
+ }
+
+ function current() {
+ $res = array();
+
+ $res['from'] = $this->data[$this->i];
+
+ $res['to'] = array();
+ foreach ($this->dag[$this->i] as $to) $res['to'][] = $this->data[$to];
+
+ return $res;
+ }
+
+ function next() {
+ $this->i = array_shift($this->dagkeys);
+ }
+
+ function rewind() {
+ $this->dagkeys = array_keys($this->dag);
+ $this->next();
+ }
+
+ function valid() {
+ return $this->i !== null;
+ }
}
diff --git a/core/Extension.php b/core/Extension.php
index 7eb2a8ce7..70072616f 100644
--- a/core/Extension.php
+++ b/core/Extension.php
@@ -46,14 +46,11 @@ abstract class Extension {
/**
* Called when this extension is added to a particular class
*
- * TODO: This is likely to be replaced by event sytem before 3.0 final, so be aware
- * this API is fairly unstable.
- *
* @static
* @param $class
*/
static function add_to_class($class, $extensionClass, $args = null) {
- Config::add_static_source($class, $extensionClass);
+ // NOP
}
/**
diff --git a/core/Object.php b/core/Object.php
index b37423762..1b7f98a07 100755
--- a/core/Object.php
+++ b/core/Object.php
@@ -463,6 +463,7 @@ abstract class Object {
if($subclasses) foreach($subclasses as $subclass) {
unset(self::$classes_constructed[$subclass]);
unset(self::$extra_methods[$subclass]);
+ unset(self::$extension_sources[$subclass]);
}
Config::inst()->update($class, 'extensions', array($extension));
@@ -505,6 +506,7 @@ abstract class Object {
if($subclasses) foreach($subclasses as $subclass) {
unset(self::$classes_constructed[$subclass]);
unset(self::$extra_methods[$subclass]);
+ unset(self::$extension_sources[$subclass]);
}
}
@@ -531,38 +533,66 @@ abstract class Object {
// -----------------------------------------------------------------------------------------------------------------
- private static $_added_extensions = array();
+ private static $extension_sources = array();
+
+ // Don't bother checking some classes that should never be extended
+ private static $unextendable_classes = array('Object', 'ViewableData', 'RequestHandler');
+
+ static public function get_extra_config_sources($class = null) {
+ if($class === null) $class = get_called_class();
+
+ // If this class is unextendable, NOP
+ if(in_array($class, self::$unextendable_classes)) return;
+
+ // If we have a pre-cached version, use that
+ if(array_key_exists($class, self::$extension_sources)) return self::$extension_sources[$class];
+
+ // Variable to hold sources in
+ $sources = null;
+
+ // Get a list of extensions
+ $extensions = Config::inst()->get($class, 'extensions', Config::UNINHERITED | Config::EXCLUDE_EXTRA_SOURCES);
+
+ if($extensions) {
+ // Build a list of all sources;
+ $sources = array();
+
+ foreach($extensions as $extension) {
+ list($extensionClass, $extensionArgs) = self::parse_class_spec($extension);
+ $sources[] = $extensionClass;
+
+ if(!ClassInfo::has_method_from($extensionClass, 'add_to_class', 'Extension')) {
+ Deprecation::notice('3.1.0', "add_to_class deprecated on $extensionClass. Use get_extra_config instead");
+ }
+
+ call_user_func(array($extensionClass, 'add_to_class'), $class, $extensionClass, $extensionArgs);
+
+ foreach(array_reverse(ClassInfo::ancestry($extensionClass)) as $extensionClassParent) {
+ if (ClassInfo::has_method_from($extensionClassParent, 'get_extra_config', $extensionClassParent)) {
+ $extras = $extensionClassParent::get_extra_config($class, $extensionClass, $extensionArgs);
+ if ($extras) $sources[] = $extras;
+ }
+ }
+ }
+ }
+
+ return self::$extension_sources[$class] = $sources;
+ }
public function __construct() {
$this->class = get_class($this);
- // Don't bother checking some classes that should never be extended
- static $notExtendable = array('Object', 'ViewableData', 'RequestHandler');
-
- if($extensionClasses = ClassInfo::ancestry($this->class)) foreach($extensionClasses as $class) {
- if(in_array($class, $notExtendable)) continue;
- if($extensions = Config::inst()->get($class, 'extensions', Config::UNINHERITED)) {
- foreach($extensions as $extension) {
- // Get the extension class for this extension
- list($extensionClass, $extensionArgs) = self::parse_class_spec($extension);
+ foreach(ClassInfo::ancestry(get_called_class()) as $class) {
+ if(in_array($class, self::$unextendable_classes)) continue;
+ $extensions = Config::inst()->get($class, 'extensions', Config::UNINHERITED | Config::EXCLUDE_EXTRA_SOURCES);
- // If we haven't told that extension it's attached to this class yet, do that now
- if (!isset(self::$_added_extensions[$extensionClass][$class])) {
- // First call the add_to_class method - this will inherit down & is defined on Extension, so if not defined, no worries
- call_user_func(array($extensionClass, 'add_to_class'), $class, $extensionClass, $extensionArgs);
-
- // Then register it as having been told about us
- if (!isset(self::$_added_extensions[$extensionClass])) self::$_added_extensions[$extensionClass] = array($class => true);
- else self::$_added_extensions[$extensionClass][$class] = true;
- }
-
- $instance = self::create_from_string($extension);
- $instance->setOwner(null, $class);
- $this->extension_instances[$instance->class] = $instance;
- }
+ if($extensions) foreach($extensions as $extension) {
+ $instance = self::create_from_string($extension);
+ $instance->setOwner(null, $class);
+ $this->extension_instances[$instance->class] = $instance;
}
}
-
+
if(!isset(self::$classes_constructed[$this->class])) {
$this->defineMethods();
self::$classes_constructed[$this->class] = true;
diff --git a/core/manifest/ConfigManifest.php b/core/manifest/ConfigManifest.php
index fcf894a26..076bc98e2 100644
--- a/core/manifest/ConfigManifest.php
+++ b/core/manifest/ConfigManifest.php
@@ -217,7 +217,8 @@ class SS_ConfigManifest {
foreach (array('before', 'after') as $order) {
if (isset($header[$order])) {
// First, splice into parts (multiple before or after parts are allowed, comma separated)
- $orderparts = preg_split('/\s+,\s+/', $header[$order], PREG_SPLIT_NO_EMPTY);
+ if (is_array($header[$order])) $orderparts = $header[$order];
+ else $orderparts = preg_split('/\s*,\s*/', $header[$order], -1, PREG_SPLIT_NO_EMPTY);
// For each, parse out into module/file#name, and set any missing to "*"
$header[$order] = array();
@@ -267,7 +268,30 @@ class SS_ConfigManifest {
}
}
- $this->yamlConfigFragments = $dag->sort();
+ try {
+ $this->yamlConfigFragments = $dag->sort();
+ }
+ catch (SS_DAG_CyclicException $e) {
+
+ if (!Director::isLive() && isset($_REQUEST['debug'])) {
+ $res = '
Remaining config fragment graph
';
+ $res .= '
';
+
+ foreach ($e->dag as $node) {
+ $res .= "
{$node['from']['module']}/{$node['from']['file']}#{$node['from']['name']} marked to come after
";
+ foreach ($node['to'] as $to) {
+ $res .= "
{$to['module']}/{$to['file']}#{$to['name']}
";
+ }
+ $res .= "
";
+ }
+
+ $res .= '
';
+ echo $res;
+ }
+
+ throw $e;
+ }
+
}
/**
@@ -279,46 +303,55 @@ class SS_ConfigManifest {
* @return string "after", "before" or "undefined"
*/
protected function relativeOrder($a, $b) {
- $matchesSomeRule = array();
-
+ $matches = array();
+
// Do the same thing for after and before
- foreach (array('after'=>'before', 'before'=>'after') as $rulename => $opposite) {
- $matchesSomeRule[$rulename] = false;
-
- // If no rule specified, we don't match it
- if (isset($a[$rulename])) {
-
- foreach ($a[$rulename] as $rule) {
- $matchesRule = true;
-
- foreach(array('module', 'file', 'name') as $part) {
- $partMatches = true;
-
- // If part is *, we match _unless_ the opposite rule has a non-* matcher than also matches $b
- if ($rule[$part] == '*') {
- if (isset($a[$opposite])) foreach($a[$opposite] as $oppositeRule) {
- if ($oppositeRule[$part] == $b[$part]) { $partMatches = false; break; }
- }
- }
- else {
- $partMatches = ($rule[$part] == $b[$part]);
- }
-
- $matchesRule = $matchesRule && $partMatches;
- if (!$matchesRule) break;
+ foreach (array('before', 'after') as $rulename) {
+ $matches[$rulename] = array();
+
+ // Figure out for each rule, which part matches
+ if (isset($a[$rulename])) foreach ($a[$rulename] as $rule) {
+ $match = array();
+
+ foreach(array('module', 'file', 'name') as $part) {
+ // If part is *, we match _unless_ the opposite rule has a non-* matcher than also matches $b
+ if ($rule[$part] == '*') {
+ $match[$part] = 'wild';
+ }
+ else {
+ $match[$part] = ($rule[$part] == $b[$part]);
}
-
- $matchesSomeRule[$rulename] = $matchesSomeRule[$rulename] || $matchesRule;
}
+
+ $matches[$rulename][] = $match;
}
}
-
- // Check if it matches both rules - problem if so
- if ($matchesSomeRule['before'] && $matchesSomeRule['after']) {
+
+ // Figure out the specificness of each match. 1 an actual match, 0 for a wildcard match, remove if no match
+ $matchlevel = array('before' => -1, 'after' => -1);
+
+ foreach (array('before', 'after') as $rulename) {
+ foreach ($matches[$rulename] as $i => $rule) {
+ $level = 0;
+
+ foreach ($rule as $part => $partmatches) {
+ if ($partmatches === false) continue 2;
+ if ($partmatches === true) $level += 1;
+ }
+
+ if ($matchlevel[$rulename] === false || $level > $matchlevel[$rulename]) $matchlevel[$rulename] = $level;
+ }
+ }
+
+ if ($matchlevel['before'] === -1 && $matchlevel['after'] === -1) {
+ return 'undefined';
+ }
+ else if ($matchlevel['before'] === $matchlevel['after']) {
user_error('Config fragment requires itself to be both before _and_ after another fragment', E_USER_ERROR);
}
-
- return $matchesSomeRule['before'] ? 'before' : ($matchesSomeRule['after'] ? 'after' : 'undefined');
+ else {
+ return ($matchlevel['before'] > $matchlevel['after']) ? 'before' : 'after';
+ }
}
/**
diff --git a/filesystem/File.php b/filesystem/File.php
index 730401c48..c09cc0364 100644
--- a/filesystem/File.php
+++ b/filesystem/File.php
@@ -749,27 +749,27 @@ class File extends DataObject {
*/
function getFileType() {
$types = array(
- 'gif' => 'GIF image - good for diagrams',
- 'jpg' => 'JPEG image - good for photos',
- 'jpeg' => 'JPEG image - good for photos',
- 'png' => 'PNG image - good general-purpose format',
- 'ico' => 'Icon image',
- 'tiff' => 'Tagged image format',
- 'doc' => 'Word document',
- 'xls' => 'Excel spreadsheet',
- 'zip' => 'ZIP compressed file',
- 'gz' => 'GZIP compressed file',
- 'dmg' => 'Apple disk image',
- 'pdf' => 'Adobe Acrobat PDF file',
- 'mp3' => 'MP3 audio file',
- 'wav' => 'WAV audo file',
- 'avi' => 'AVI video file',
- 'mpg' => 'MPEG video file',
- 'mpeg' => 'MPEG video file',
- 'js' => 'Javascript file',
- 'css' => 'CSS file',
- 'html' => 'HTML file',
- 'htm' => 'HTML file'
+ 'gif' => _t('File.GifType', 'GIF image - good for diagrams'),
+ 'jpg' => _t('File.JpgType', 'JPEG image - good for photos'),
+ 'jpeg' => _t('File.JpgType', 'JPEG image - good for photos'),
+ 'png' => _t('File.PngType', 'PNG image - good general-purpose format'),
+ 'ico' => _t('File.IcoType', 'Icon image'),
+ 'tiff' => _t('File.TiffType', 'Tagged image format'),
+ 'doc' => _t('File.DocType', 'Word document'),
+ 'xls' => _t('File.XlsType', 'Excel spreadsheet'),
+ 'zip' => _t('File.ZipType', 'ZIP compressed file'),
+ 'gz' => _t('File.GzType', 'GZIP compressed file'),
+ 'dmg' => _t('File.DmgType', 'Apple disk image'),
+ 'pdf' => _t('File.PdfType', 'Adobe Acrobat PDF file'),
+ 'mp3' => _t('File.Mp3Type', 'MP3 audio file'),
+ 'wav' => _t('File.WavType', 'WAV audo file'),
+ 'avi' => _t('File.AviType', 'AVI video file'),
+ 'mpg' => _t('File.MpgType', 'MPEG video file'),
+ 'mpeg' => _t('File.MpgType', 'MPEG video file'),
+ 'js' => _t('File.JsType', 'Javascript file'),
+ 'css' => _t('File.CssType', 'CSS file'),
+ 'html' => _t('File.HtmlType', 'HTML file'),
+ 'htm' => _t('File.HtlType', 'HTML file')
);
$ext = $this->getExtension();
diff --git a/javascript/HtmlEditorField.js b/javascript/HtmlEditorField.js
index 5c19463fd..d99cdcdde 100644
--- a/javascript/HtmlEditorField.js
+++ b/javascript/HtmlEditorField.js
@@ -599,7 +599,11 @@ ss.editorWrappers['default'] = ss.editorWrappers.tinyMCE;
}
selector.empty();
- selector.append($(''));
+ selector.append($(
+ ''
+ ));
for (var j = 0; j < anchors.length; j++) {
selector.append($(''));
}
diff --git a/javascript/lang/en_US.js b/javascript/lang/en_US.js
index ec022a545..5432118e0 100644
--- a/javascript/lang/en_US.js
+++ b/javascript/lang/en_US.js
@@ -18,6 +18,7 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
'FILEIFRAMEFIELD.CONFIRMDELETE': 'Are you sure you want to delete this file?',
'LeftAndMain.IncompatBrowserWarning': 'Your browser is not compatible with the CMS interface. Please use Internet Explorer 7+, Google Chrome 10+ or Mozilla Firefox 3.5+.',
'GRIDFIELD.ERRORINTRANSACTION': 'An error occured while fetching data from the server\n Please try again later.',
+ 'HtmlEditorField.SelectAnchor': 'Select an anchor',
'UploadField.ConfirmDelete': 'Are you sure you want to remove this file from the server filesystem?',
'UploadField.PHP_MAXFILESIZE': 'File exceeds upload_max_filesize (php.ini directive)',
'UploadField.HTML_MAXFILESIZE': 'File exceeds MAX_FILE_SIZE (HTML form directive)',
diff --git a/lang/de.yml.orig b/lang/de.yml.orig
deleted file mode 100644
index cc94e8843..000000000
--- a/lang/de.yml.orig
+++ /dev/null
@@ -1,591 +0,0 @@
-de:
- AssetAdmin:
-<<<<<<< HEAD
- ADDFILES: 'Add files'
-=======
- ADDFILES: 'Dateien hinzufügen'
->>>>>>> origin/translation-staging
- EditOrgMenu: 'Edit & organize'
- NEWFOLDER: 'Neuer Ordner'
- AssetTableField:
- CREATED: 'Erstmalig hochgeladen'
- DIM: Dimensionen
- FILENAME: Dateiname
- FOLDER: Ordner
- LASTEDIT: 'Letzte Änderung'
- OWNER: Eigentümer
- SIZE: Größe
- TITLE: Titel
- TYPE: Typ
- URL: URL
- AssetUploadField:
- ChooseFiles: 'Dateien auswählen'
- DRAGFILESHERE: 'Dateien hier ablegen'
- DROPAREA: Dateiablage
- EDITALL: 'Alle Bearbeiten'
- EDITANDORGANIZE: Bearbeiten
- EDITINFO: 'Dateien bearbeiten'
- FILES: Dateien
- FROMCOMPUTER: 'Dateien auf Ihrem Computer auswählen'
- FROMCOMPUTERINFO: 'Von ihrem Computer hochladen'
- TOTAL: Gesamt
- UPLOADINPROGRESS: 'Bitte warten sie... Upload im Gang'
- UPLOADOR: ODER
- BBCodeParser:
- ALIGNEMENT: Ausrichtung
- ALIGNEMENTEXAMPLE: 'Rechts ausgerichtet'
- BOLD: 'Fett gedruckter Text'
- BOLDEXAMPLE: Fett
- CODE: 'Code Block'
- CODEDESCRIPTION: 'Unformatierter Code Block'
- CODEEXAMPLE: 'Code Block'
- COLORED: 'Farbiger Text'
- COLOREDEXAMPLE: 'Blauer Text'
- EMAILLINK: 'E-Mail Link'
- EMAILLINKDESCRIPTION: 'Link zu einer E-Mail Adresse erzeugen'
- IMAGE: Bild
- IMAGEDESCRIPTION: 'Bild im Post anzeigen'
- ITALIC: 'Kursiv gedruckter Text'
- ITALICEXAMPLE: Kursiv
- LINK: 'Webseiten Link'
- LINKDESCRIPTION: 'Link auf eine andere Webseite oder URL'
- STRUCK: 'Durchgestrichener Text'
- STRUCKEXAMPLE: Durchgestrichen
- UNDERLINE: 'Unterstrichener Text'
- UNDERLINEEXAMPLE: Unterstrichen
- UNORDERED: 'Ungeordnete Liste'
- UNORDEREDDESCRIPTION: 'Ungeordnete Liste'
- UNORDEREDEXAMPLE1: 'Ungeordneter Eintrag 1'
- BackLink_Button.ss:
- Back: Zurück
- BasicAuth:
- ENTERINFO: 'Bitte geben Sie einen Nutzernamen und ein Passwort ein'
- ERRORNOTADMIN: 'Dieser Nutzer ist kein Administrator'
- ERRORNOTREC: 'Dieser/s Nutzername/Passwort wurde nicht erkannt'
- Boolean:
- 0: Falsch
- ANY: alle
- 1: Wahr
- CMSLoadingScreen.ss:
- LOADING: 'Lade Daten ...'
- REQUIREJS: 'Für die Benutzung des CMS wird JavaScript benötigt.'
- CMSMain:
- ACCESS: 'Zugang zum Bereich ''{title}'''
- ACCESSALLINTERFACES: 'Zugriff auf alle Bereiche des CMS'
- ACCESSALLINTERFACESHELP: 'Hebt alle bereichspezifischen Berechtigungen auf.'
- SAVE: Speichern
- CMSProfileController:
- MENUTITLE: CMSProfileController
- ChangePasswordEmail.ss:
- CHANGEPASSWORDTEXT1: 'Sie haben Ihr Passwort geändert für'
- CHANGEPASSWORDTEXT2: 'Sie können nun folgende Angaben benutzen um sich einzuloggen'
- EMAIL: E-Mail
- HELLO: Hi
- PASSWORD: Passwort
- CheckboxField:
- - Falsch
- - Wahr
- ComplexTableField:
- CLOSEPOPUP: 'Popup schließen'
- SUCCESSADD2: '{name} hinzugefügt'
- SUCCESSEDIT: 'Gespeichert %s %s %s'
- ComplexTableField.ss:
- ADDITEM: '%s hinzufügen'
- NOITEMSFOUND: 'Keine Elemente gefunden'
- SORTASC: 'Aufsteigend sortieren'
- SORTDESC: 'Absteigend sortieren'
- ComplexTableField_popup.ss:
- NEXT: nächste
- PREVIOUS: vorherige
- ConfirmedPasswordField:
- ATLEAST: 'Passwörter müssen mindestens {min} Zeichen lang sein.'
- BETWEEN: 'Passwörter müssen mindestens {min} bis maximal {max} Zeichen lang sein.'
- MAXIMUM: 'Passwörter dürfen maxinal {max} Zeichen lang sein.'
- SHOWONCLICKTITLE: 'Passwort ändern'
- CreditCardField:
- FIRST: Zuerst
- FOURTH: vierte
- SECOND: erste
- THIRD: dritte
- CurrencyField:
- CURRENCYSYMBOL: €
- DataObject:
- PLURALNAME: DataObjects
- SINGULARNAME: DataObject
- Date:
- DAY: Tag
- DAYS: Tage
- HOUR: Stunde
- HOURS: Stunden
- MIN: Minuten
- MINS: Minuten
- MONTH: Monat
- MONTHS: Monat
- SEC: Sekunden
- SECS: Sekunden
- TIMEDIFFAGO: 'vor {difference}'
- TIMEDIFFIN: 'in {difference}'
- YEAR: Jahr
- YEARS: Jahre
- DateField:
- NOTSET: 'nicht gesetzt'
- TODAY: heute
- VALIDDATEFORMAT2: 'Bitte geben sie das Datum im korrekten Format ein ({format})'
- VALIDDATEMAXDATE: 'Ihr Datum muss nach dem erlaubtem Datum ({date}) liegen oder gleich sein'
- VALIDDATEMINDATE: 'Ihr Datum muss vor dem erlaubtem Datum ({date}) liegen oder gleich sein'
- DatetimeField:
-<<<<<<< HEAD
- NOTSET: 'Not set'
-=======
- NOTSET: 'nicht gesetzt'
->>>>>>> origin/translation-staging
- Director:
- INVALID_REQUEST: 'Ungültige Anfrage'
- DropdownField:
- CHOOSE: (Auswahl)
- EmailField:
- VALIDATION: 'Bitte geben Sie eine E-Mail Adresse ein'
- Email_BounceRecord:
- PLURALNAME: 'E-Mail Rückläufer'
- SINGULARNAME: 'E-Mail Rückläufer'
- Enum:
- ANY: alle
- File:
- Content: Inhalt
- Filename: Dateiname
- INVALIDEXTENSION: 'Dateityp ist nicht erlaubt (erlaubt sind: {extensions})'
- INVALIDEXTENSIONSHORT: 'Dateityp ist nicht erlaubt'
- NOFILESIZE: 'Dateigröße ist 0 bytes'
- NOVALIDUPLOAD: 'Datei ist kein gültiger Upload'
- Name: Dateiname
- PLURALNAME: Dateien
- SINGULARNAME: Datei
- TOOLARGE: 'Die Datei ist zu groß, maximal sind {size} erlaubt'
- TOOLARGESHORT: 'Dateigröße übersteigt {size}'
- Title: Titel
- FileIFrameField:
- ATTACH: '{type} anhängen'
- ATTACHONCESAVED: '{type}s können angehängt werden, sobald das Dokument zum ersten Mal gespeichert wurde.'
- ATTACHONCESAVED2: 'Dateien können angehängt werden, sobald das Dokument zum ersten Mal gespeichert wurde.'
- DELETE: 'Lösche {type}'
- DISALLOWEDFILETYPE: 'Der Upload dieses Dateityps ist nicht erlaubt'
- FILE: Datei
- FROMCOMPUTER: 'Von Ihrem Computer'
- FROMFILESTORE: 'Aus dem Datei-Storage'
- NOSOURCE: 'Bitte wählen Sie eine Datei aus'
- REPLACE: '{type} ersetzen'
- FileIFrameField_iframe.ss:
- TITLE: 'Iframe Bilderupload'
- Filesystem:
- SYNCRESULTS: 'Synchronisation beendet: {createdcount} Objekte erstellt, {deletedcount} Objekte gelöscht'
- Folder:
- PLURALNAME: Folders
- SINGULARNAME: Folder
- ForgotPasswordEmail.ss:
- HELLO: Hallo
- TEXT1: 'Hier ist Ihr'
- TEXT2: 'Link zum Zurücksetzen des Passworts'
- TEXT3: für
- Form:
- FIELDISREQUIRED: '%s wird benötigt'
-<<<<<<< HEAD
- SubmitBtnLabel: Go
-=======
- SubmitBtnLabel: Los
->>>>>>> origin/translation-staging
- VALIDATIONCREDITNUMBER: 'Bitte stellen Sie sicher, dass Sie die Kreditkartennummer ({number}) korrekt eingegeben haben'
- VALIDATIONNOTUNIQUE: 'Der eingegebene Wert ist nicht einzigartig'
- VALIDATIONPASSWORDSDONTMATCH: 'Passwörter stimmen nicht überein'
- VALIDATIONPASSWORDSNOTEMPTY: 'Passwortfelder dürfen nicht leer sein'
- VALIDATIONSTRONGPASSWORD: 'Passwörter müssen mindestens eine Zahl und ein alphanumerisches Zeichen enthalten'
- VALIDATOR: Prüfer
- VALIDCURRENCY: 'Bitte geben Sie einen korrekten Betrag ein'
- FormField:
- NONE: keine
- GridAction:
- DELETE_DESCRIPTION: Löschen
- Delete: Löschen
- UnlinkRelation: 'Verbindung entfernen'
- GridField:
- Add: '{name} hinzufügen'
- Filter: Filter
- FilterBy: 'Filter nach'
- Find: Suchen
- LEVELUP: 'Eine Ebene hoch'
- LinkExisting: Verknüpfen
- NewRecord: 'Neue(r) %s'
- NoItemsFound: 'Keine Elemente gefunden'
- PRINTEDAT: 'Gedruckt am'
- PRINTEDBY: 'Gedruckt von'
- PlaceHolder: '{type} Suchen'
- PlaceHolderWithLabels: 'Suche {type} über {name}'
- RelationSearch: Relationssuche
- ResetFilter: Zurücksetzen
- GridFieldAction_Delete:
- DeletePermissionsFailure: 'Keine Berechtigung zum Löschen'
- GridFieldDetailForm:
- Create: Erstellen
- Delete: Löschen
- DeletePermissionsFailure: 'Keine Berechtigung zum Löschen'
- Deleted: 'Gelöscht %s %s'
- Save: Speichern
- Saved: 'Gespeichert %s %s'
- GridFieldItemEditView.ss: null
- Group:
- AddRole: 'Rolle für die Gruppe hinzufügen'
- Code: 'Gruppen Code'
- DefaultGroupTitleAdministrators: Administratoren
- DefaultGroupTitleContentAuthors: Inhaltsautoren
- Description: Beschreibung
- GroupReminder: 'Bei Zuweisung einer Übergruppe werden alle ihre Rollen übernommen'
- Locked: 'Gesperrt?'
- NoRoles: 'Keine Rollen gefunden'
- PLURALNAME: Groups
- Parent: Elterngruppe
- RolesAddEditLink: 'Rollen hinzufügen/editieren'
- SINGULARNAME: Group
- Sort: Sortierreihenfolge
- has_many_Permissions: Berechtigungen
- many_many_Members: Mitglieder
- GroupImportForm:
- Help1: '
Eine oder mehrere Gruppen im CSV-Format (kommaseparierte Werte) importieren. Erweiterte Nutzung
'
- Help2: '
Erweiterte Nutzung
Gültige Spalten: %s
Vorhandene Gruppen werden über ihren eindeutigen Code ermittelt und mit den Werten aus der importierten Datei aktualisiert.
Gruppen-Hierarchien können über die ParentCode Spalte definiert werden.
Berechtigungscodes können über die Splate PermissionCode zugewiesen werden, vorhandene Berechtigungen werden nicht gelöscht.
'
- ResultCreated: '{count} Gruppe(n) wurden erstellt'
- ResultDeleted: '%d Gruppen gelöscht'
- ResultUpdated: '%d Gruppen aktualisiert'
- Hierarchy:
- InfiniteLoopNotAllowed: 'Es wurde eine Endlosschleife innerhalb der "{type}"-Hierarchie gefunden. Bitte ändern Sie die übergeordnete Seite, um den Fehler zu beheben'
- HtmlEditorField:
- ADDURL: 'URL hinzufügen'
- ADJUSTDETAILSDIMENSIONS: 'Details & Dimensionen'
- ANCHORVALUE: Anker
- BUTTONINSERT: Einfügen
- BUTTONINSERTLINK: 'Verweis einfügen'
- BUTTONREMOVELINK: 'Verweise entfernen'
- BUTTONUpdate: Aktualisieren
- CAPTIONTEXT: Beschriftungstext
- CSSCLASS: Ausrichtung/Stil
- CSSCLASSCENTER: 'Zentriert, selbstständig'
- CSSCLASSLEFT: 'Links, mit umfließendem Text'
- CSSCLASSLEFTALONE: 'Links, alleinstehend'
- CSSCLASSRIGHT: 'Rechts, mit umfließendem Text'
- DETAILS: Details
- EMAIL: E-Mail-Adresse
- FILE: Datei
- FOLDER: Ordner
- FROMCMS: 'Aus dem CMS'
- FROMCOMPUTER: 'Von Ihrem Computer'
- FROMWEB: 'Aus dem Internet'
- FindInFolder: 'In Ordner suchen'
- IMAGEALT: 'Alternativer Text (alt)'
- IMAGEALTTEXT: 'Alternativer Text (alt) - angezeigt, wenn das Bild nicht dargestellt werden kann'
- IMAGEALTTEXTDESC: 'Wird von Screenreadern vorgelesen oder angezeigt, falls das Bild nicht dargestellt werden kann'
- IMAGEDIMENSIONS: Dimensionen
- IMAGEHEIGHTPX: 'Höhe (px)'
- IMAGETITLE: 'Titeltext (Tooltip) - für zusätzliche Informationen über das Bild'
- IMAGETITLETEXT: 'Titeltext (Tooltip)'
- IMAGETITLETEXTDESC: 'Weiterführende Informationen über das Bild'
- IMAGEWIDTHPX: 'Breite (px)'
- INSERTMEDIA: 'Medienobject einfügen'
- LINK: Verweis
- LINKANCHOR: 'Anker auf dieser Seite'
- LINKDESCR: 'Beschreibung des Verweises'
- LINKEMAIL: E-Mail-Adresse
- LINKEXTERNAL: 'Andere Website'
- LINKFILE: 'Datei herunterladen'
- LINKINTERNAL: 'Seite auf der Website'
- LINKOPENNEWWIN: 'Verweis in neuem Fenster öffnen?'
- LINKTO: 'Verweis zu'
- PAGE: Seite
- URL: URL
- URLNOTANOEMBEDRESOURCE: 'Die URL ''{url}'' konnte nicht in eine Medienquelle umgewandelt werden'
- UpdateMEDIA: 'Medienobjekt aktualisieren'
- Image:
- PLURALNAME: Files
-<<<<<<< HEAD
- SINGULARNAME: File
-=======
- SINGULARNAME: Datei
->>>>>>> origin/translation-staging
- ImageField:
- IMAGE: Bild
- Image_Cached:
- PLURALNAME: Files
- SINGULARNAME: File
- Image_iframe.ss:
- TITLE: 'Iframe Bilder hochladen'
- LeftAndMain:
- CANT_REORGANISE: 'Sie besitzen nicht die benötigten Zugriffsrechte um Seiten der höchsten Ebene zu bearbeiten. Ihre Änderungen wurden nicht gespeichert.'
- DELETED: Gelöscht.
- DropdownBatchActionsDefault: Aktionen
- HELP: Hilfe
- PAGETYPE: 'Seitentyp:'
- PERMAGAIN: 'Sie wurden aus dem System ausgeloggt. Falls Sie sich wieder einloggen möchten, geben Sie bitte Benutzernamen und Passwort im untenstehenden Formular an.'
- PERMALREADY: 'Leider dürfen Sie diesen Teil des CMS nicht aufrufen. Wenn Sie sich als jemand anderes einloggen wollen, benutzen Sie bitte das nachstehende Formular.'
- PERMDEFAULT: 'Bitte wählen Sie eine Authentifizierungsmethode und geben Sie Ihre Benutzerdaten für den Zugang zum CMS ein.'
- PLEASESAVE: 'Diese Seite konnte nicht aktualisiert werden weil sie noch nicht gespeichert wurde - bitte speichern.'
- PreviewButton: Vorschau
- REORGANISATIONSUCCESSFUL: 'Der Seitenbaum wurde erfolgreich sortiert.'
- SAVEDUP: Gespeichert.
- VersionUnknown: Unbekannt
- LeftAndMain_Menu.ss:
- Hello: Hi
- LOGOUT: Ausloggen
- LoginAttempt:
- Email: E-Mail-Adresse
- IP: IP-Adresse
- PLURALNAME: 'Login Attempts'
- SINGULARNAME: 'Login Attempt'
- Status: Status
- Member:
- ADDGROUP: 'Gruppe hinzufügen'
- BUTTONCHANGEPASSWORD: 'Passwort ändern'
- BUTTONLOGIN: Einloggen
- BUTTONLOGINOTHER: 'Als jemand anders einloggen'
- BUTTONLOSTPASSWORD: 'Ich habe mein Passwort vergessen'
- CONFIRMNEWPASSWORD: 'Neues Passwort bestätigen'
- CONFIRMPASSWORD: 'Passwort bestätigen'
-<<<<<<< HEAD
- DATEFORMAT: 'Date format'
-=======
- DATEFORMAT: 'Bitte geben sie das Datum im korrekten Format ein ({format})'
->>>>>>> origin/translation-staging
- DefaultAdminFirstname: Standardadmin
- DefaultDateTime: Standard
- EMAIL: E-Mail
- EMPTYNEWPASSWORD: 'Das neue Passwort darf nicht leer sein. Bitte versuchen Sie es erneut.'
- ENTEREMAIL: 'Bitte geben Sie eine E-Mail-Adresse ein, um einen Link zum Zurücksetzen des Passworts zu erhalten.'
- ERRORLOCKEDOUT: 'Ihr Zugang wurde auf Grund von einer unzulässig hohen Anzahl von falschen Zugangsversuchen gesperrt. Bitte versuchen Sie es in 20 Minuten noch einmal.'
- ERRORNEWPASSWORD: 'Sie haben Ihr neues Passwort unterschiedlich eingegeben, bitte versuchen Sie es erneut.'
- ERRORPASSWORDNOTMATCH: 'Das Passwort stimmt nicht mit dem hinterlegten Passwort überein, bitte versuchen Sie es noch einmal'
- ERRORWRONGCRED: 'Das Passwort oder die E-Mail-Adresse scheinen nicht richtig zu sein. Bitte versuchen Sie es erneut.'
- FIRSTNAME: Vorname
- INTERFACELANG: CMS-Sprache
- INVALIDNEWPASSWORD: 'Das Passwort konnte nicht akzeptiert werden: {password}'
- LOGGEDINAS: 'Sie sind als {name} eingeloggt.'
- NEWPASSWORD: 'Neues Passwort'
- PASSWORD: Passwort
- PLURALNAME: Benutzer
- PROFILESAVESUCCESS: 'Erfolgreich gespeichert.'
- REMEMBERME: 'Für das nächste Mal merken?'
- SINGULARNAME: Benutzer
- SUBJECTPASSWORDCHANGED: 'Ihr Passwort wurde geändert'
- SUBJECTPASSWORDRESET: 'Ihr Link zur Passwortrücksetzung'
- SURNAME: Nachname
-<<<<<<< HEAD
- TIMEFORMAT: 'Time format'
-=======
- TIMEFORMAT: 'Bitte geben Sie die Uhrzeit im korrekten Format ein ({format})'
->>>>>>> origin/translation-staging
- VALIDATIONMEMBEREXISTS: 'Es gibt bereits ein Mitglied mit dieser E-Mail-Adresse'
- ValidationIdentifierFailed: 'Das vorhandene Mitglied #{id} mit identischer Bezeichnung kann nicht überschrieben werden ({name} = {value}))'
- WELCOMEBACK: 'Hallo {firstname}. Schön, dass du wieder da bist'
- YOUROLDPASSWORD: 'Ihr alten Passwort'
- belongs_many_many_Groups: Gruppe
- db_LastVisited: 'Zuletzt Besucht'
- db_Locale: 'Interface Sprachumgebung'
- db_LockedOutUntil: 'Gesperrt bis'
- db_NumVisit: 'Anzahl der Besuche'
- db_Password: Passwort
- db_PasswordExpiry: 'Ablaufdatum des Passworts'
- MemberAuthenticator:
- TITLE: 'E-Mail & Passwort'
- MemberDatetimeOptionsetField:
- AMORPM: 'AM (vormittag) oder PM (nachmittag)'
- 'APPLY FILTER': 'Filter anwenden'
- Custom: Benutzerdefiniert
- DATEFORMATBAD: 'Ungültiges Datumsformat'
- DAYNOLEADING: 'Tag des Monats ohne führende Null'
- DIGITSDECFRACTIONSECOND: 'Eine oder mehrere Ziffern, die einen Dezimalbruch einer Sekunde darstellen'
- FOURDIGITYEAR: 'Vierstellige Jahreszahl'
- FULLNAMEMONTH: 'Volle Monatsbezeichnung (z.B. Juni)'
- HOURNOLEADING: 'Stunde ohne führende Null'
- MINUTENOLEADING: Minute
- MONTHNOLEADING: 'Monat ohne führende Null'
- Preview: Vorschau
- SHORTMONTH: 'Kurzname des Monats (z.B. Jun)'
- TOGGLEHELP: 'Formatierungshilfe anzeigen'
- TWODIGITDAY: 'Tag des Monats mit führender Null'
- TWODIGITHOUR: 'Stunde im 24-Stunden-Format, mit führenden Nullen'
- TWODIGITMINUTE: 'Minute mit führenden Nullen'
- TWODIGITMONTH: 'Monat mit führender Null (z.B. 01 = Januar, usw.)'
- TWODIGITSECOND: Sekunde
- TWODIGITYEAR: 'Zweistellige Jahreszahl'
- MemberImportForm:
- Help1: '
Mitglieder im CSV-Format (kommaseparierte Werte) importieren. Erweiterte Nutzung
'
- Help2: '
Advanced usage
Gültige Spalten: %s
Vorhandene Mitglieder werden über ihren eindeutigen Code ermittelt und mit den Werten aus der importierten Datei aktualisiert.
Gruppen können über die Spalte Gruppen zugewiesen werden. Gruppen werden über ihren eindeutigen Code ermittelt, mehrere Gruppen können durch ein Komma getrennt werden. Vorhandene Gruppenzugehörigkeiten werden nicht gelöscht.
'
- ResultCreated: '{count} Mitglied(er) wurden erstellt'
- ResultDeleted: '%d Mitglieder gelöscht'
- ResultNone: 'Keine Änderungen'
- ResultUpdated: '{count} Mitglied(er) wurde(n) aktualisiert'
- MemberPassword:
-<<<<<<< HEAD
- PLURALNAME: 'Member Passwords'
- SINGULARNAME: 'Member Password'
-=======
- PLURALNAME: Benutzerpasswörter
- SINGULARNAME: Benutzerpasswort
->>>>>>> origin/translation-staging
- MemberTableField: null
- ModelAdmin:
- DELETE: Löschen
- DELETEDRECORDS: '{count} Datensätze wurden gelöscht.'
- IMPORT: 'CSV Import'
- IMPORTEDRECORDS: '{count} Datensätze wurden importiert.'
- NOCSVFILE: 'Wählen Sie eine CSV-Datei zum Importieren'
- NOIMPORT: 'Kein Import notwendig.'
- RESET: Zurücksetzen
- Title: Datenmodelle
- UPDATEDRECORDS: '{count} Datensätze wurden aktualisiert.'
- ModelAdmin_ImportSpec.ss:
- IMPORTSPECFIELDS: Datenbankspalten
- IMPORTSPECLINK: 'Show Specification for %s'
- IMPORTSPECRELATIONS: Relationen
- IMPORTSPECTITLE: 'Specification for %s'
- ModelAdmin_Tools.ss:
- FILTER: Filter
- IMPORT: Importieren
- ModelSidebar.ss:
- IMPORT_TAB_HEADER: Importieren
- SEARCHLISTINGS: Suche
- MoneyField:
- FIELDLABELAMOUNT: Betrag
- FIELDLABELCURRENCY: Währung
- NullableField:
- IsNullLabel: 'ist NULL'
- NumericField:
- VALIDATION: '''{value}'' ist kein numerischer Wert, nur nummerische Werte sind in diesem Feld erlaubt'
- Pagination:
-<<<<<<< HEAD
- Page: Page
- View: View
-=======
- Page: Seite
- View: Anzeige
->>>>>>> origin/translation-staging
- Permission:
- AdminGroup: Administrator
- CMS_ACCESS_CATEGORY: 'CMS Zugriff'
- FULLADMINRIGHTS: 'Unbeschränkte Administratorenrechte'
- FULLADMINRIGHTS_HELP: 'Schließt alle anderen verfügbaren Berechtigungen ein'
-<<<<<<< HEAD
- PLURALNAME: Permissions
- SINGULARNAME: Permission
-=======
- PLURALNAME: Berechtigungen
- SINGULARNAME: Berechtigung
->>>>>>> origin/translation-staging
- PermissionCheckboxSetField:
- AssignedTo: 'Zugewiesen an "{title}"'
- FromGroup: 'abgeleited von Gruppe "{title}"'
- FromRole: 'abgeleited von Rolle "{title}"'
- FromRoleOnGroup: 'geerbt von Rolle "%s" für die Gruppe "%s"'
- PermissionRole:
- PLURALNAME: Roles
- SINGULARNAME: Role
- PermissionRoleCode:
- PLURALNAME: 'Permission Role Cods'
- SINGULARNAME: 'Permission Role Code'
- Permissions:
- PERMISSIONS_CATEGORY: 'Rollen und Zugriffsberechtigungen'
- PhoneNumberField:
- VALIDATION: 'Bitte geben Sie eine gültige Telefonnummer ein'
- RelationComplexTableField.ss:
- ADD: Hinzufügen
- CSVEXPORT: 'Als CSV exportieren'
- NOTFOUND: 'Keine Elemente gefunden.'
- Security:
- ALREADYLOGGEDIN: 'Sie haben keinen Zugriff auf diese Seite. Wenn Sie ein anderes Konto besitzen, mit dem Sie auf diese Seite zugreifen können, melden Sie sich bitte unten an.'
- BUTTONSEND: 'Senden Sie mir den Link zur Passwortrücksetzung'
- CHANGEPASSWORDBELOW: 'Sie können Ihr Passwort unten ändern.'
- CHANGEPASSWORDHEADER: 'Passwort ändern'
- ENTERNEWPASSWORD: 'Bitte geben Sie ein neues Passwort ein'
- ERRORPASSWORDPERMISSION: 'Sie müssen eingeloggt sein, um Ihr Passwort ändern zu können!'
- LOGGEDOUT: 'Sie wurden ausgeloggt. Wenn Sie sich wieder einloggen möchten, geben Sie bitte unten Ihre Zugangsdaten ein.'
- LOGIN: Anmelden
- NOTEPAGESECURED: 'Diese Seite ist geschützt. Bitte melden Sie sich an und Sie werden sofort weitergeleitet.'
- NOTERESETLINKINVALID: '
Der Link zum Zurücksetzen des Passworts ist entweder nicht korrekt oder abgelaufen
Ka whakaritea ngā kaiwhakamahi mā tō rātou āhuatangaWaehere ahurei, ā, ka whakahōutia ki ngā uara hōu mai i te kōnae kua kawea mai.
\\n
Ka taea te tautapa rōpū mā te tīwae Ngā Rōpū. Ka tautohua ngā rōpū mā tō rātou āhuatanga Waehere, ka taea te whakawehe i ngā rōpū maha ki te piko. Kāore e ūkuia ngā mematanga rōpū o naianei.
\\n
\\n
"
- ResultCreated: 'I hangaia e {count} ngā mema'
- ResultDeleted: 'Kua mukua e %d ngā mema'
- ResultNone: 'Kāore he huringa'
- ResultUpdated: 'I whakahōutia e {count} mhā mema'
- MemberPassword:
-<<<<<<< HEAD
- PLURALNAME: 'Member Passwords'
- SINGULARNAME: 'Member Password'
-=======
- PLURALNAME: 'Ngā Kupuhipa Mema'
- SINGULARNAME: 'Kupuhipa Mema'
->>>>>>> origin/translation-staging
- MemberTableField: null
- ModelAdmin:
- DELETE: Muku
- DELETEDRECORDS: 'I mukua e {count} ngā pūkete.'
- IMPORT: 'Kawemai i CSV'
- IMPORTEDRECORDS: 'I kawea mai e {count} ngā pūkete.'
- NOCSVFILE: 'Pūtirotiro kia kitea he kōnae CSV hei kawemai'
- NOIMPORT: 'Kāore he mea hei kawemai'
- RESET: 'Tautuhi Anō'
- Title: 'Ngā Tauira Raraunga'
- UPDATEDRECORDS: 'I whakahōutia e {count} ngā pūkete.'
- ModelAdmin_ImportSpec.ss:
- IMPORTSPECFIELDS: 'Ngā tīwae pātengi raraunga'
- IMPORTSPECLINK: 'Whakaatu Whakapūtātanga mō %s'
- IMPORTSPECRELATIONS: 'Ngā Pānga'
- IMPORTSPECTITLE: 'Whakapūtātanga mō %s'
- ModelAdmin_Tools.ss:
- FILTER: Tātari
- IMPORT: Kawemai
- ModelSidebar.ss:
- IMPORT_TAB_HEADER: Kawemai
- SEARCHLISTINGS: Rapu
- MoneyField:
- FIELDLABELAMOUNT: Rahinga
- FIELDLABELCURRENCY: Moni
- NullableField:
- IsNullLabel: 'He Kore Tēnei'
- NumericField:
- VALIDATION: 'Ehara te ''{value}'' i te tau, ka taea ngā tau anake ki tēnei āpure'
- Pagination:
- Page: Whārangi
-<<<<<<< HEAD
- View: View
-=======
- View: Tiro
->>>>>>> origin/translation-staging
- Permission:
- AdminGroup: Kaiwhakahaere
- CMS_ACCESS_CATEGORY: 'Uru CMS'
- FULLADMINRIGHTS: 'Ngā motika kaiwhakahaere katoa'
- FULLADMINRIGHTS_HELP: 'Ka whakapae me te takahi i ērā atu whakaaetanga katoa kua tautapatia.'
- PLURALNAME: Permissions
-<<<<<<< HEAD
- SINGULARNAME: Permission
-=======
- SINGULARNAME: Whakaaetanga
->>>>>>> origin/translation-staging
- PermissionCheckboxSetField:
- AssignedTo: 'kua tautapatia ki "{title}"'
- FromGroup: 'I tukuna iho i te rōpū "{title}"'
- FromRole: 'I tukuna iho i te tūnga "{title}"'
- FromRoleOnGroup: 'i tukuna iho i "%s" i te rōpū "%s"'
- PermissionRole:
- PLURALNAME: 'Ngā Tūnga'
-<<<<<<< HEAD
- SINGULARNAME: Role
-=======
- SINGULARNAME: Tūranga
->>>>>>> origin/translation-staging
- PermissionRoleCode:
- PLURALNAME: 'Permission Role Cods'
- SINGULARNAME: 'Permission Role Code'
- Permissions:
- PERMISSIONS_CATEGORY: 'Ngā tūnga me ngā whakaaetanga uru'
- PhoneNumberField:
- VALIDATION: 'Tāurua he tau waea tika'
- RelationComplexTableField.ss:
- ADD: Tāpiri
- CSVEXPORT: 'Kaweatu ki CSV'
- NOTFOUND: 'Kāore i kitea he tūemi'
- Security:
- ALREADYLOGGEDIN: 'Kāore i te whakaaetia kia uru koe ki tēnei whārangi. Mēnā he pūkete anō tōu e taea ai te uru ki tēnā whārangi, ka taea te takiuru anō i raro.'
- BUTTONSEND: 'Tukuna mai te hono tautuhi kupuhipa anō'
- CHANGEPASSWORDBELOW: 'Ka taea te huri i tō kupuhipa i raro'
- CHANGEPASSWORDHEADER: 'Hurihia tō kupuhipa'
- ENTERNEWPASSWORD: 'Tāurua he kupuhipa hōu'
- ERRORPASSWORDPERMISSION: 'Me takiuru koe i mua i te huri i tō kupuhipa!'
- LOGGEDOUT: 'Kua takiputaina atu koe. Ki te pīrangi koe ki te takiuru atu anō, tāurutia ō taipitopito tuakiri ki raro. '
- LOGIN: Takiuru
- NOTEPAGESECURED: 'Kua ngita tēnā whārangi. Tāurua ō taipitoptio tuakiri ki raro, ā, mā mātou koe e tuku kia haere tonu.'
- NOTERESETLINKINVALID: '
He muhu, kua mōnehu rānei te hono tautuhi kupuhipa anō.
Ka taea te tono i te mea hōui konei ka huri rānei i tō kupuhipa ā muri i tōtakiuru.
'
- NOTERESETPASSWORD: 'Tāurua tō wāhitau īmēra, mā mātou e tuku tētahi hono ki a koe e taea ai te tautuhi anō i tō kupuhipa'
- PASSWORDSENTHEADER: 'I tukuna he hono tautuhi kupuhipa anō ki ''{email}'''
- PASSWORDSENTTEXT: 'Kia ora! Kua tukuna he hono tautuhi anō ki ''{email}'',engari rā kei te tīariari he pūkete mō taua wāhitau īmēra.'
- SecurityAdmin:
- ACCESS_HELP: 'Tukuna te tiro, te tāpiri me te whakatika i ngā kaiwhakamahi, me te tautapa anō hoki i ngā whakaaetanga me ngā tūnga ki a rātou.'
- APPLY_ROLES: 'Hoatu tūnga ki ngā rōpū'
- APPLY_ROLES_HELP: 'Te āhei ki te whakatika tūnga kua tautapatia ki tētahi rōpū. Ka hiahiatia te whakaaetanga "Uru ki te wāhanga ''Ngā Kaiwhakamahi''"'
- EDITPERMISSIONS: 'Whakahaere whakaaetanga mō ngā rōpū'
- EDITPERMISSIONS_HELP: 'Te āhei ki te whakatika i Ngā Whakaaetanga me Ngā Wāhitau KI mō tētahi rōpū. Ka hiahiatia te whakaaetanga "Uru ki te wāhanga ''Haumarutanga''".'
- GROUPNAME: 'Ingoa rōpū'
- IMPORTGROUPS: 'Kawea mai ngā rōpū'
- IMPORTUSERS: 'Kawe kaiwhakamahi mai'
- MEMBERS: 'Ngā Mema'
- MENUTITLE: Haumarutanga
- MemberListCaution: 'Whakatūpato: Mā te tango mema i tēnei rārangi, ka tangohia i ngā rōpū katoa me te pātengi raraunga'
- NEWGROUP: 'Rōpū Hōu'
- PERMISSIONS: 'Ngā Whakaaetanga'
- ROLES: 'Ngā Tūnga'
- ROLESDESCRIPTION: 'Ko ngā tūnga he huinga o ngā whakaaetanga i tautuhia i mua, ā, ka taea te tautapa i ēnei ki ngā rōpū. I tukuna iho i ngā rōpū matua ki te hiahiatia.'
- TABROLES: 'Ngā Tūnga'
- Users: 'Ngā Kaiwhakamahi'
- SecurityAdmin_MemberImportForm:
- BtnImport: 'Kawemai i CSV'
- FileFieldLabel: 'Kōnae CSV (Ngā toronga ka whakaaetia: *.csv)'
- SilverStripeNavigator:
- Edit: Whakatika
- SimpleImageField:
- NOUPLOAD: 'Kāore He Atahanga Tukuatu'
- SiteTree:
- TABMAIN: Matua
- TableField:
- ISREQUIRED: 'Ka hiahiatia te %s i te ''%s'' '
- TableField.ss:
- ADD: 'Tāpiri haupae hōu'
- ADDITEM: 'Tāpiri %s'
- TableListField:
- CSVEXPORT: 'Kaweake ki CSV'
- PRINT: Tā
- Print: Tā
- SELECT: 'Tīpako:'
- TableListField.ss:
- NOITEMSFOUND: 'Kāore i kitea he tūemi'
- SORTASC: 'Kōmakatia ki te raupapa aupiki'
- SORTDESC: 'Kōmakatia ki te raupapa auheke'
- TableListField_PageControls.ss:
- DISPLAYING: 'Whakaatu ana'
- OF: o
- TO: ki
- VIEWFIRST: 'Tirohia te tuatahi'
- VIEWLAST: 'Tirohia te whakamutunga'
- VIEWNEXT: 'Tiro panuku'
- VIEWPREVIOUS: 'Tiro tōmua'
- TimeField:
- VALIDATEFORMAT: 'Tāurua he hōputu wā tika ({format})'
- ToggleField:
- LESS: 'iti iho'
- MORE: 'nui ake'
- UploadField:
- ATTACHFILE: 'Tāpiritia tētahi kōnae'
- ATTACHFILES: 'Tāpiri kōnae'
- AttachFile: 'Tāpiritia t/ētahi kōnae'
- DELETE: 'Muku i ngā kōnae'
- DELETEINFO: 'Muku pūmautia tēnei kōnae i te pātaka kōnae'
- DOEDIT: Tiaki
- DROPFILE: 'whakamakeretia tētahi kōnae'
- DROPFILES: 'taka kōnae'
- Dimensions: 'Ngā Rahinga'
- EDIT: Whakatika
- EDITINFO: 'Whakatikatia tēnei kōnae'
- FIELDNOTSET: 'Kāore i kitea te mōhiohio kōnae'
- FROMCOMPUTER: 'Mai i tō rorohiko'
- FROMCOMPUTERINFO: 'Tīpako mai i ngā kōnae'
- FROMFILES: 'I ngā kōnae'
- HOTLINKINFO: 'Info: This image will be hotlinked. Please ensure you have permissions from the original site creator to do so.'
- MAXNUMBEROFFILES: 'Kua hipa te mōrahi o ngā kōnae {count}.'
- MAXNUMBEROFFILESSHORT: 'Ka taea te tukuatu i ngā kōnae {count} anake '
- REMOVE: Tango
- REMOVEERROR: 'Kua rarua te tango kōnae'
- REMOVEINFO: 'Tangohia tēnei kōane i konei, engari kaua e muku i te pātaka kōnae'
- STARTALL: 'Tīmata katoa'
- STARTALLINFO: 'Tīmataria ngā tukuatu katoa'
- Saved: 'Kua Tiakina'
- Versioned:
- has_many_Versions: 'Ngā Putanga'
diff --git a/lang/nl.yml.orig b/lang/nl.yml.orig
deleted file mode 100644
index 423ae54af..000000000
--- a/lang/nl.yml.orig
+++ /dev/null
@@ -1,556 +0,0 @@
-nl:
- AssetAdmin:
- ADDFILES: 'Add files'
- EditOrgMenu: 'Edit & organize'
- NEWFOLDER: 'Nieuwe Map'
- AssetTableField:
- CREATED: 'Eerste upload'
- DIM: Dimensies
- FILENAME: Bestandsnaam
- FOLDER: Folder
- LASTEDIT: 'Laatste wijziging'
- OWNER: Eigenaar
- SIZE: Grootte
- TITLE: Titel
- TYPE: Type
- URL: URL
- AssetUploadField:
- ChooseFiles: 'Selecteer bestanden'
- DRAGFILESHERE: 'Sleep bestanden hiernaar toe'
- DROPAREA: 'Hierheen slepen'
- EDITALL: 'Alles bewerken'
- EDITANDORGANIZE: 'Bewerk en beheer'
- EDITINFO: 'Edit files'
- FILES: Bestanden
- FROMCOMPUTER: 'Choose files from your computer'
- FROMCOMPUTERINFO: 'Upload from your computer'
- TOTAL: Totaal
- UPLOADINPROGRESS: 'Ogenblikje... bezig met uploaden'
- UPLOADOR: OF
- BBCodeParser:
- ALIGNEMENT: Uitlijning
- ALIGNEMENTEXAMPLE: 'rechts uitgelijnd'
- BOLD: 'Vetgedrukte tekst'
- BOLDEXAMPLE: Vetgedrukt
- CODE: 'Code Blok'
- CODEDESCRIPTION: 'niet opgemaakt code blok'
- CODEEXAMPLE: 'Code Blok'
- COLORED: 'Gekleurde tekst'
- COLOREDEXAMPLE: 'blauwe tekst'
- EMAILLINK: 'Email link'
- EMAILLINKDESCRIPTION: 'Maak een koppeling naar een e-mailadres'
- IMAGE: Foto
- IMAGEDESCRIPTION: 'Toon een afbeelding in uw bericht'
- ITALIC: 'Cursieve tekst'
- ITALICEXAMPLE: Cursief
- LINK: 'Website link'
- LINKDESCRIPTION: 'Link naar een andere website of URL'
- STRUCK: 'Doorgehaalde tekst'
- STRUCKEXAMPLE: Doorgehaald
- UNDERLINE: 'Onderstreepte tekst'
- UNDERLINEEXAMPLE: Onderstreept
- UNORDERED: 'Ongesorteerde lijst'
- UNORDEREDDESCRIPTION: 'Ongesorteerde lijst'
- UNORDEREDEXAMPLE1: 'ongesorteerd item 1'
- BackLink_Button.ss:
- Back: Terug
- BasicAuth:
- ENTERINFO: 'Voer een gebruikers naam en wachtwoord in.'
- ERRORNOTADMIN: 'Die gebruiker is geen beheerder.'
- ERRORNOTREC: 'De gebruikersnaam en/of wachtwoord wordt niet herkend'
- Boolean:
- 0: 'False'
- ANY: Elke
- 1: 'True'
- CMSLoadingScreen.ss:
- LOADING: Laden...
- REQUIREJS: 'The CMS requires that you have JavaScript enabled.'
- CMSMain:
- ACCESS: 'Toegang tot het ''{title}'' gedeelte'
- ACCESSALLINTERFACES: 'Toegang tot alle CMS onderdelen'
- ACCESSALLINTERFACESHELP: 'Overstemt meer specifieke toegangsinstellingen'
- SAVE: Bewaar
- CMSProfileController:
- MENUTITLE: CMSProfileController
- ChangePasswordEmail.ss:
- CHANGEPASSWORDTEXT1: 'U heeft het wachtwoord veranderd voor'
- CHANGEPASSWORDTEXT2: 'U kunt nu onderstaande gegevens gebruiken om in te loggen:'
- EMAIL: E-mail
- HELLO: Hallo
- PASSWORD: Wachtwoord
- CheckboxField:
- - 'False'
- - 'True'
- ComplexTableField:
- CLOSEPOPUP: 'Sluit Popup'
- SUCCESSADD2: 'Toegevoegd {name}'
- SUCCESSEDIT: '%s %s %s Opgeslagen'
- ComplexTableField.ss:
- ADDITEM: 'Add %s'
- NOITEMSFOUND: 'No items found'
- SORTASC: 'Sorteer oplopend'
- SORTDESC: 'Sorteer aflopend'
- ComplexTableField_popup.ss:
- NEXT: Volgende
- PREVIOUS: Vorige
- ConfirmedPasswordField:
- ATLEAST: 'Passwords must be at least {min} characters long.'
- BETWEEN: 'Passwords must be {min} to {max} characters long.'
- MAXIMUM: 'Passwords must be at most {max} characters long.'
- SHOWONCLICKTITLE: 'Verander wachtwoord'
- CreditCardField:
- FIRST: eerste
- FOURTH: vierde
- SECOND: tweede
- THIRD: derde
- CurrencyField:
- CURRENCYSYMBOL: $
- DataObject:
- PLURALNAME: 'Gegeven Objecten'
- SINGULARNAME: 'Gegeven Object'
- Date:
- DAY: dag
- DAYS: dagen
- HOUR: uur
- HOURS: uren
- MIN: minuut
- MINS: minuten
- MONTH: maand
- MONTHS: maanden
- SEC: seconde
- SECS: seconden
- TIMEDIFFAGO: '{difference} geleden'
- TIMEDIFFIN: 'in {difference}'
- YEAR: jaar
- YEARS: jaren
- DateField:
- NOTSET: 'niet ingesteld'
- TODAY: vandaag
- VALIDDATEFORMAT2: 'Vul een valide datum in ({format})'
- VALIDDATEMAXDATE: 'De datum moet eerder of gelijk zijn aan de maximale datum ({date})'
- VALIDDATEMINDATE: 'De datum moet nieuwer of gelijk zijn aan de minimale datum ({date})'
- DatetimeField:
- NOTSET: 'Not set'
- Director:
- INVALID_REQUEST: 'Fout bij verwerken'
- DropdownField:
- CHOOSE: (Kies)
- EmailField:
- VALIDATION: 'Please enter an email address'
- Email_BounceRecord:
- PLURALNAME: 'Onbezorgbare emails'
- SINGULARNAME: 'Onbezorgbare email'
- Enum:
- ANY: Elke
- File:
- Content: Inhoud
- Filename: 'Bestandsnaam '
- INVALIDEXTENSION: 'Extension is not allowed (valid: {extensions})'
- INVALIDEXTENSIONSHORT: 'Extension is not allowed'
- NOFILESIZE: 'Bestandsgrootte is nul bytes.'
- NOVALIDUPLOAD: 'Geen geldig bestand'
- Name: Naam
- PLURALNAME: Bestanden
- SINGULARNAME: Bestand
- TOOLARGE: 'Filesize is too large, maximum {size} allowed'
- TOOLARGESHORT: 'Filesize exceeds {size}'
- Title: 'Titel '
- FileIFrameField:
- ATTACH: 'Attach {type}'
- ATTACHONCESAVED: '{type}s can be attached once you have saved the record for the first time.'
- ATTACHONCESAVED2: 'Files can be attached once you have saved the record for the first time.'
- DELETE: 'Delete {type}'
- DISALLOWEDFILETYPE: 'Dit type bestand mag niet worden opgeslagen'
- FILE: Bestand
- FROMCOMPUTER: 'Vanaf computer'
- FROMFILESTORE: 'Vanaf de website''s bestandsopslag'
- NOSOURCE: 'Selecteer een bron bestand om toe te voegen'
- REPLACE: 'Replace {type}'
- FileIFrameField_iframe.ss:
- TITLE: 'Afbeelding uploaden'
- Filesystem:
- SYNCRESULTS: 'Synchroniseren compleet: {createdcount} bestanden aangemaakt, {deletedcount} bestanden verwijderd.'
- Folder:
- PLURALNAME: Folders
- SINGULARNAME: Folder
- ForgotPasswordEmail.ss:
- HELLO: Hallo
- TEXT1: 'Hier is uw'
- TEXT2: 'wachtwoord reset link'
- TEXT3: voor
- Form:
- FIELDISREQUIRED: '%s is verplicht'
- SubmitBtnLabel: Go
- VALIDATIONCREDITNUMBER: 'Please ensure you have entered the {number} credit card number correctly'
- VALIDATIONNOTUNIQUE: 'De ingevoerde waarde is niet uniek'
- VALIDATIONPASSWORDSDONTMATCH: 'Wachtwoorden komen niet overeen'
- VALIDATIONPASSWORDSNOTEMPTY: 'Wachtwoorden mogen niet leeg zijn'
- VALIDATIONSTRONGPASSWORD: 'Passwords must have at least one digit and one alphanumeric character'
- VALIDATOR: Controleur
- VALIDCURRENCY: 'Please enter a valid currency'
- FormField:
- NONE: geen
- GridAction:
- DELETE_DESCRIPTION: Verwijder
- Delete: Verwijder
- UnlinkRelation: Ontkoppelen
- GridField:
- Add: '{name} toevoegen'
- Filter: Filteren
- FilterBy: Filteren
- Find: Zoek
- LEVELUP: 'Niveau hoger'
- LinkExisting: 'Koppelen aan'
- NewRecord: 'Nieuw %s'
- NoItemsFound: 'Geen items gevonden.'
- PRINTEDAT: 'Geprint om'
- PRINTEDBY: 'Geprint door'
- PlaceHolder: 'Zoek {type}'
- PlaceHolderWithLabels: 'Zoek {type} op {name}'
- RelationSearch: 'Relation search'
- ResetFilter: Herstel
- GridFieldAction_Delete:
- DeletePermissionsFailure: 'Onvoldoende rechten om te verwijderen'
- GridFieldDetailForm:
- Create: Create
- Delete: Verwijder
- DeletePermissionsFailure: 'Onvoldoende rechten om te verwijderen'
- Deleted: 'Deleted %s %s'
- Save: Opslaan
- Saved: '%s %s %s Opgeslagen'
- GridFieldItemEditView.ss: null
- Group:
- AddRole: 'Voeg een rol toe aan deze groep'
- Code: 'Groep code'
- DefaultGroupTitleAdministrators: Beheerders
- DefaultGroupTitleContentAuthors: 'Inhoud Auteurs'
- Description: 'Omschrijving '
- GroupReminder: 'Als je de bovenliggende groep selecteert, neemt deze groep alle rollen over'
- Locked: 'Gesloten?'
- NoRoles: 'Geen rollen gevonden'
- PLURALNAME: Groups
- Parent: 'Bovenliggende groep'
- RolesAddEditLink: 'Toevoegen/wijzigingen rollen'
- SINGULARNAME: Group
- Sort: Sorteer-richting
- has_many_Permissions: Rechten
- many_many_Members: Lid
- GroupImportForm:
- Help1: '
Importeer en of meerdere groepen in CSV formaat (Kommagescheiden bestandsformaat). Toon geavanceerd gebruik
'
- Help2: '
Geavanceerd gebruik
Toegestane kolommen: %s
Bestaande groepen worden geïdentificeerd door middel van hun unieke Code waarde en aangepast met de nieuwe waarden van het geïmporteerde bestand
Groep hiërarchieën kunnen aangemaakt worden met behulp van een ParentCode kolom.
Toegangsrechten kunnen worden toegekend met de PermissionCode kolom. Bestaande toegangsrechten worden niet gewist.
'
- ResultCreated: 'Created {count} groups'
- ResultDeleted: '%d groepen verwijderd'
- ResultUpdated: '%d groepen aangepast'
- Hierarchy:
- InfiniteLoopNotAllowed: 'Infinite loop found within the "{type}" hierarchy. Please change the parent to resolve this'
- HtmlEditorField:
- ADDURL: 'Voeg URL toe'
- ADJUSTDETAILSDIMENSIONS: 'Details $amp; afmeting'
- ANCHORVALUE: Anker
- BUTTONINSERT: Invoegen
- BUTTONINSERTLINK: 'Link invoegen'
- BUTTONREMOVELINK: 'Link verwijderen'
- BUTTONUpdate: Update
- CAPTIONTEXT: Onderschrift
- CSSCLASS: 'Uitlijning / stijl'
- CSSCLASSCENTER: 'Gecentreerd, op zichzelf staand.'
- CSSCLASSLEFT: 'Aan de linkerkant, met tekst eromheen.'
- CSSCLASSLEFTALONE: 'Links, losstaand.'
- CSSCLASSRIGHT: 'Aan de rechterkant, met tekst eromheen.'
- DETAILS: Details
- EMAIL: Emailadres
- FILE: Bestand
- FOLDER: Map
- FROMCMS: 'Vanaf CMS'
- FROMCOMPUTER: 'Vanaf computer'
- FROMWEB: 'Vanaf een website'
- FindInFolder: 'Zoek in map'
- IMAGEALT: 'Alternatieve tekst (alt tekst) - wordt getoond als de afbeelding niet kan worden geladen'
- IMAGEALTTEXT: 'Alternatieve tekst (alt tekst) - wordt getoond als de afbeelding niet kan worden geladen'
- IMAGEALTTEXTDESC: 'Shown to screen readers or if image can not be displayed'
- IMAGEDIMENSIONS: Dimensies
- IMAGEHEIGHTPX: Hoogte
- IMAGETITLE: 'Titel tekst (tooltip) - Toon extra informatie over de afbeelding'
- IMAGETITLETEXT: 'Titel tekst (tooltip) - Toon extra informatie over de afbeelding'
- IMAGETITLETEXTDESC: 'Titel tekst (tooltip) - Toon extra informatie over de afbeelding'
- IMAGEWIDTHPX: Breedte
- INSERTMEDIA: Invoegen
- LINK: Link
- LINKANCHOR: 'Anker op deze pagina'
- LINKDESCR: 'Link omschrijving'
- LINKEMAIL: Emailadres
- LINKEXTERNAL: 'Een andere website'
- LINKFILE: 'Een bestand downloaden'
- LINKINTERNAL: 'Pagina op deze site'
- LINKOPENNEWWIN: 'Link in een nieuw venster openen?'
- LINKTO: 'Verwijs naar'
- PAGE: Pagina
- URL: URL
- URLNOTANOEMBEDRESOURCE: 'The URL ''{url}'' could not be turned into a media resource.'
- UpdateMEDIA: 'Update Media'
- Image:
- PLURALNAME: Files
- SINGULARNAME: File
- ImageField:
- IMAGE: Afbeelding
- Image_Cached:
- PLURALNAME: Files
- SINGULARNAME: File
- Image_iframe.ss:
- TITLE: 'Afbeelding uploaden'
- LeftAndMain:
- CANT_REORGANISE: 'You do not have permission to alter Top level pages. Your change was not saved.'
- DELETED: Verwijderd.
- DropdownBatchActionsDefault: Acties
- HELP: Help
- PAGETYPE: 'Pagina type: '
- PERMAGAIN: 'U bent uitgelogd uit het CMS. Als U weer wilt inloggen vul dan uw gebruikersnaam en wachtwoord hier beneden in.'
- PERMALREADY: 'Helaas, dat deel van het CMS is niet toegankelijk voor U. Hieronder kunt U als iemand anders inloggen.'
- PERMDEFAULT: 'Geef uw e-mailadres en wachtwoord voor toegang tot het CMS.'
- PLEASESAVE: 'Deze pagina kon niet bijgewerkt worden, omdat deze nog niet is bewaard.'
- PreviewButton: Preview
- REORGANISATIONSUCCESSFUL: 'Menu-indeling is aangepast'
- SAVEDUP: 'Succesvol opgeslagen'
- VersionUnknown: onbekend
- LeftAndMain_Menu.ss:
- Hello: Hi
- LOGOUT: 'Log out'
- LoginAttempt:
- Email: 'Email adres '
- IP: 'IP Adres'
- PLURALNAME: 'Login Attempts'
- SINGULARNAME: 'Login Attempt'
- Status: Status
- Member:
- ADDGROUP: 'Groep toevoegen'
- BUTTONCHANGEPASSWORD: 'Wachtwoord veranderen'
- BUTTONLOGIN: Inloggen
- BUTTONLOGINOTHER: 'Als iemand anders inloggen'
- BUTTONLOSTPASSWORD: 'Ik ben mijn wachtwoord vergeten...'
- CONFIRMNEWPASSWORD: 'Bevestig het nieuwe wachtwoord'
- CONFIRMPASSWORD: 'Bevestig wachtwoord'
- DATEFORMAT: 'Date format'
- DefaultAdminFirstname: 'Standaard Beheerder'
- DefaultDateTime: Standaard
- EMAIL: Email
- EMPTYNEWPASSWORD: 'Het nieuwe wachtwoord mag niet leeg zijn, probeer opnieuw'
- ENTEREMAIL: 'Typ uw e-mailadres om een link te ontvangen waarmee u uw wachtwoord kunt resetten.'
- ERRORLOCKEDOUT: 'Je account is tijdelijk geblokkeerd wegens te veel mislukte pogingen tot aanmelding. Gelieve het over 20 minuten opnieuw te proberen.'
- ERRORNEWPASSWORD: 'Het nieuwe wachtwoord komt niet overeen met de bevestiging, probeer het nogmaals'
- ERRORPASSWORDNOTMATCH: 'Huidige wachtwoord kom niet overeen, probeer het nogmaals'
- ERRORWRONGCRED: 'Dat is niet het juiste email adres of wachtwoord. Probeert U het a.u.b. opnieuw.'
- FIRSTNAME: Voornaam
- INTERFACELANG: 'Interface Taal'
- INVALIDNEWPASSWORD: 'Het wachtwoord {password} is niet geldig'
- LOGGEDINAS: 'U bent ingelogd als {name}.'
-<<<<<<< HEAD
- NEWPASSWORD: 'Nieuw Wachtwoord'
-=======
- NEWPASSWORD: 'Nieuw wachtwoord'
->>>>>>> origin/translation-staging
- PASSWORD: Wachtwoord
- PLURALNAME: Leden
- PROFILESAVESUCCESS: 'Succesvol opgeslagen'
- REMEMBERME: 'Wachtwoord onthouden voor de volgende keer?'
- SINGULARNAME: Lid
- SUBJECTPASSWORDCHANGED: 'Uw wachtwoord is veranderd'
- SUBJECTPASSWORDRESET: 'Link om Uw wachtwoord opnieuw aan te maken'
- SURNAME: Achternaam
- TIMEFORMAT: 'Time format'
- VALIDATIONMEMBEREXISTS: 'Er bestaat reeds een gebruiker met dit emailadres'
- ValidationIdentifierFailed: 'Een bestaande gebruiker #{id} kan niet dezelfde unieke velden hebben ({name} = {value}))'
- WELCOMEBACK: 'Welkom terug {firstname}'
- YOUROLDPASSWORD: 'Uw oude wachtwoord'
- belongs_many_many_Groups: Groepen
- db_LastVisited: 'Datum van het laatste bezoek'
- db_Locale: 'Interface taal'
- db_LockedOutUntil: 'Gesloten tot'
- db_NumVisit: 'Aantal bezoeken'
- db_Password: Wachtwoord
- db_PasswordExpiry: 'Wachtwoord Vervaldatum'
- MemberAuthenticator:
- TITLE: 'Email & Wachtwoord'
- MemberDatetimeOptionsetField:
- AMORPM: 'AM (Ante meridiem) or PM (Post meridiem)'
- 'APPLY FILTER': 'Filter toepassen'
- Custom: Aangepast
- DATEFORMATBAD: 'Datum is niet correct opgegeven'
- DAYNOLEADING: 'Dag van de maand zonder voorloop-nul'
- DIGITSDECFRACTIONSECOND: 'One or more digits representing a decimal fraction of a second'
- FOURDIGITYEAR: 'Four-digit year'
- FULLNAMEMONTH: 'Full name of month (e.g. June)'
- HOURNOLEADING: 'Hour without leading zero'
- MINUTENOLEADING: 'Minute without leading zero'
- MONTHNOLEADING: 'Month digit without leading zero'
- Preview: Voorbeeld
- SHORTMONTH: 'Short name of month (e.g. Jun)'
- TOGGLEHELP: 'Toggle formatting help'
- TWODIGITDAY: 'Two-digit day of month'
- TWODIGITHOUR: 'Twee cijfer van het uur (00 tot 23)'
- TWODIGITMINUTE: 'Two digits of minute (00 through 59)'
- TWODIGITMONTH: 'Two-digit month (01=January, etc.)'
- TWODIGITSECOND: 'Two digits of second (00 through 59)'
- TWODIGITYEAR: 'Twee-cijferig jaar'
- MemberImportForm:
- Help1: '
Bestaande leden worden geïdentificeerd door middel van hun unieke Code waarde en aangepast met de nieuwe waarden van het geïmporteerde bestand
Groepen kunnen toegewezen worden met de Groups kolom. Groepen worden geïdentificeerd met hun Code waarde en meerdere groepen kunnen worden gescheiden met een komma. Bestaande groep lidmaatschappen worden niet gewist.
'
- ResultCreated: 'Created {count} members'
- ResultDeleted: '%d leden verwijderd'
- ResultNone: 'Geen wijzingen'
- ResultUpdated: 'Updated {count} members'
- MemberPassword:
- PLURALNAME: 'Member Passwords'
- SINGULARNAME: 'Member Password'
- MemberTableField: null
- ModelAdmin:
- DELETE: Verwijderen
- DELETEDRECORDS: 'Deleted {count} records.'
- IMPORT: 'Importeren vanuit CSV'
- IMPORTEDRECORDS: 'Imported {count} records.'
- NOCSVFILE: 'Selecteer een CSV bestand op uw computer om te importeren'
- NOIMPORT: 'Niks om te importeren'
- RESET: Reset
- Title: 'Data Models'
- UPDATEDRECORDS: 'Updated {count} records.'
- ModelAdmin_ImportSpec.ss:
- IMPORTSPECFIELDS: 'Database columns'
- IMPORTSPECLINK: 'Show Specification for %s'
- IMPORTSPECRELATIONS: Relations
- IMPORTSPECTITLE: 'Specification for %s'
- ModelAdmin_Tools.ss:
- FILTER: Filter
- IMPORT: Importeer
- ModelSidebar.ss:
- IMPORT_TAB_HEADER: Importeer
- SEARCHLISTINGS: Zoeken
- MoneyField:
- FIELDLABELAMOUNT: Aantal
- FIELDLABELCURRENCY: Valuta
- NullableField:
- IsNullLabel: 'is nul'
- NumericField:
- VALIDATION: '''{value}'' is not a number, only numbers can be accepted for this field'
- Pagination:
- Page: Page
- View: View
- Permission:
- AdminGroup: Beheerder
- CMS_ACCESS_CATEGORY: 'CMS Toegang'
- FULLADMINRIGHTS: 'Volledige admin rechten'
- FULLADMINRIGHTS_HELP: 'Impliceert en overstemt alle andere toegewezen rechten.'
- PLURALNAME: Permissions
- SINGULARNAME: Permission
- PermissionCheckboxSetField:
- AssignedTo: 'assigned to "{title}"'
- FromGroup: 'inherited from group "{title}"'
- FromRole: 'inherited from role "{title}"'
- FromRoleOnGroup: 'geërfd van rol "%s" in groep "%s"'
- PermissionRole:
- PLURALNAME: Roles
- SINGULARNAME: Role
- PermissionRoleCode:
- PLURALNAME: 'Permission Role Cods'
- SINGULARNAME: 'Permission Role Code'
- Permissions:
- PERMISSIONS_CATEGORY: 'Rollen en toegangsrechten'
- PhoneNumberField:
- VALIDATION: 'Voer een geldig telefoonnummer in'
- RelationComplexTableField.ss:
- ADD: Toevoegen
- CSVEXPORT: 'Export to CSV'
- NOTFOUND: 'No items found'
- Security:
- ALREADYLOGGEDIN: 'Je hebt niet de juiste rechten, om deze pagina te kunnen bekijken. Als je een ander account met de juiste rechten hebt, kun je hier opnieuw inloggen.'
- BUTTONSEND: 'Zend mij de link om mijn wachtwoord opnieuw aan te maken'
- CHANGEPASSWORDBELOW: 'U kunt Uw wachtwoord hier beneden veranderen.'
- CHANGEPASSWORDHEADER: 'Verander Uw wachtwoord'
- ENTERNEWPASSWORD: 'Voer een nieuw wachtwoord in.'
- ERRORPASSWORDPERMISSION: 'U moet ingelogd zijn om Uw wachtwoord te kunnen veranderen!'
- LOGGEDOUT: 'U bent uitgelogd. Als U weer wilt inloggen kunt U Uw gegevens hier beneden invoeren.'
- LOGIN: 'Meld aan'
- NOTEPAGESECURED: 'Deze pagina is beveiligd. Voer Uw gegevens in en U wordt automatisch doorgestuurd.'
- NOTERESETLINKINVALID: '
De link om uw wachtwoord te kunnen wijzigen is niet meer geldig.
Existing users are matched by their unique Code property, and updated with any new values from the imported file.
Groups can be assigned by the Groups column. Groups are identified by their Code property, multiple groups can be separated by comma. Existing group memberships are not cleared.
'
- ResultCreated: 'Создано {count} пользователей'
- ResultDeleted: 'Deleted %d members'
- ResultNone: 'No changes'
- ResultUpdated: 'Updated {count} members'
- MemberPassword:
- PLURALNAME: 'Member Passwords'
- SINGULARNAME: 'Member Password'
- MemberTableField: null
- ModelAdmin:
- DELETE: Удалить
- DELETEDRECORDS: 'Deleted {count} records.'
- IMPORT: 'Импорт из CSV'
- IMPORTEDRECORDS: 'Imported {count} records.'
- NOCSVFILE: 'Выберите CSV-файл для импорта'
- NOIMPORT: 'Нечего импортировать'
- RESET: Reset
- Title: 'Data Models'
- UPDATEDRECORDS: 'Updated {count} records.'
- ModelAdmin_ImportSpec.ss:
- IMPORTSPECFIELDS: 'Database columns'
- IMPORTSPECLINK: 'Show Specification for %s'
- IMPORTSPECRELATIONS: Relations
- IMPORTSPECTITLE: 'Specification for %s'
- ModelAdmin_Tools.ss:
- FILTER: Filter
- IMPORT: Import
- ModelSidebar.ss:
- IMPORT_TAB_HEADER: Import
- SEARCHLISTINGS: Search
- MoneyField:
- FIELDLABELAMOUNT: Amount
- FIELDLABELCURRENCY: Currency
- NullableField:
- IsNullLabel: Недействительно
- NumericField:
- VALIDATION: '''{value}'' is not a number, only numbers can be accepted for this field'
- Pagination:
- Page: Page
- View: View
- Permission:
- AdminGroup: Administrator
- CMS_ACCESS_CATEGORY: 'Доступ к CMS'
- FULLADMINRIGHTS: 'Все права администратора'
- FULLADMINRIGHTS_HELP: 'Implies and overrules all other assigned permissions.'
- PLURALNAME: Permissions
-<<<<<<< HEAD
- SINGULARNAME: Permission
-=======
- SINGULARNAME: 'Право доступа'
->>>>>>> origin/translation-staging
- PermissionCheckboxSetField:
- AssignedTo: 'assigned to "{title}"'
- FromGroup: 'inherited from group "{title}"'
- FromRole: 'inherited from role "{title}"'
- FromRoleOnGroup: 'inherited from role "%s" on group "%s"'
- PermissionRole:
- PLURALNAME: Roles
- SINGULARNAME: Role
- PermissionRoleCode:
- PLURALNAME: 'Permission Role Cods'
- SINGULARNAME: 'Permission Role Code'
- Permissions:
- PERMISSIONS_CATEGORY: 'Роли и разрешения доступа'
- PhoneNumberField:
- VALIDATION: 'Пожалуйста, введите верный номер телефона'
- RelationComplexTableField.ss:
- ADD: Добавить
- CSVEXPORT: 'Export to CSV'
- NOTFOUND: 'No items found'
- Security:
- ALREADYLOGGEDIN: 'У Вас нет доступа к этой странице. Если у вас имеется другая учетная запись, имеющая доступ к этой странице, введите ее данные ниже.'
- BUTTONSEND: 'Отправить мне ссылку переустановки пароля'
- CHANGEPASSWORDBELOW: 'Ниже Вы можете изменить свой пароль.'
- CHANGEPASSWORDHEADER: 'Измените свой пароль'
- ENTERNEWPASSWORD: 'Пожалуйста, введите новый пароль.'
- ERRORPASSWORDPERMISSION: 'Вы должны войти в систему, чтобы изменить Ваш пароль!'
- LOGGEDOUT: 'Вы вышли. Если Вы хотите войти снова, введите ваши учетные данные ниже.'
- LOGIN: Вход
- NOTEPAGESECURED: 'Эта страница защищена. Пожалуйста, введите свои учетные данные для входа.'
- NOTERESETLINKINVALID: '
The password reset link is invalid or expired.
You can request a new one here or change your password after you logged in.
'
- NOTERESETPASSWORD: 'Введите Ваш адрес email, и Вам будет отправлена ссылка, по которой Вы сможете переустановить свой пароль'
- PASSWORDSENTHEADER: 'Ссылка для переустановки пароля выслана на ''{email}'''
- PASSWORDSENTTEXT: 'Thank you! A reset link has been sent to ''{email}'', provided an account exists for this email address.'
- SecurityAdmin:
- ACCESS_HELP: 'Allow viewing, adding and editing users, as well as assigning permissions and roles to them.'
- APPLY_ROLES: 'Apply roles to groups'
- APPLY_ROLES_HELP: 'Возможность редактировать роли, присвоенные той или иной группе. Необходимо разрешение на доступ к разделу "Пользователи".'
- EDITPERMISSIONS: 'Задать разрешения и IP адреса для каждой группы'
- EDITPERMISSIONS_HELP: 'Возможность редактировать права доступа и IP-адреса определенной группы. Необходимо разрешение на доступ к разделу "Безопасность".'
- GROUPNAME: 'Имя группы'
- IMPORTGROUPS: 'Импортировать группы'
- IMPORTUSERS: 'Импортировать пользователей'
- MEMBERS: Участники
- MENUTITLE: Безопасность
- MemberListCaution: 'Внимание: при удалении участников из этого списка они будут удалены из всех групп и из базы данных'
- NEWGROUP: 'Новая группа'
- PERMISSIONS: 'Права доступа'
- ROLES: Роли
- ROLESDESCRIPTION: 'Roles are predefined sets of permissions, and can be assigned to groups. They are inherited from parent groups if required.'
- TABROLES: Роли
- Users: Пользователи
- SecurityAdmin_MemberImportForm:
- BtnImport: 'Import from CSV'
- FileFieldLabel: 'CSV File (Allowed extensions: *.csv)'
- SilverStripeNavigator:
- Edit: Edit
- SimpleImageField:
- NOUPLOAD: 'Не загружено ни одного изображения'
- SiteTree:
- TABMAIN: Основное
- TableField:
- ISREQUIRED: 'In %s ''%s'' is required'
- TableField.ss:
- ADD: 'Добавить новый ряд'
- ADDITEM: 'Add %s'
- TableListField:
- CSVEXPORT: 'Экспорт в CSV'
- PRINT: Печать
- Print: Печать
- SELECT: 'Выбрать:'
- TableListField.ss:
- NOITEMSFOUND: 'No items found'
- SORTASC: 'По возрастанию'
- SORTDESC: 'По убыванию'
- TableListField_PageControls.ss:
- DISPLAYING: Displaying
- OF: of
- TO: to
- VIEWFIRST: Первый
- VIEWLAST: Последний
- VIEWNEXT: Следующий
- VIEWPREVIOUS: Предыдущий
- TimeField:
- VALIDATEFORMAT: 'Please enter a valid time format ({format})'
- ToggleField:
- LESS: меньше
- MORE: больше
- UploadField:
- ATTACHFILE: 'Прикрепить файл'
- ATTACHFILES: 'Прикрепить файл(ы)'
- AttachFile: 'Прикрепить файл(ы)'
- DELETE: 'Delete from files'
- DELETEINFO: 'Permanently delete this file from the file store'
- DOEDIT: Сохранить
- DROPFILE: 'drop a file'
- DROPFILES: 'drop files'
- Dimensions: Dimensions
- EDIT: Edit
- EDITINFO: 'Редактировать этот файл'
- FIELDNOTSET: 'Информация о файле не найдена'
- FROMCOMPUTER: 'С компьютера'
- FROMCOMPUTERINFO: 'Select from files'
-<<<<<<< HEAD
- FROMFILES: 'From files'
- HOTLINKINFO: 'Info: This image will be hotlinked. Please ensure you have permissions from the original site creator to do so.'
- MAXNUMBEROFFILES: 'Max number of {count} file(s) exceeded.'
- MAXNUMBEROFFILESSHORT: 'Can only upload {count} files'
- REMOVE: Remove
- REMOVEERROR: 'Error removing file'
-=======
- FROMFILES: 'Из файлов'
- HOTLINKINFO: 'Info: This image will be hotlinked. Please ensure you have permissions from the original site creator to do so.'
- MAXNUMBEROFFILES: 'Превышено максимальное количество файлов ({count}).'
- MAXNUMBEROFFILESSHORT: 'Можно загрузить не более {count} файлов'
- REMOVE: Удалить
- REMOVEERROR: 'Ошибка при удалении файла'
->>>>>>> origin/translation-staging
- REMOVEINFO: 'Remove this file from here, but do not delete it from the file store'
- STARTALL: 'Стартовать все'
- STARTALLINFO: 'Start all uploads'
- Saved: Saved
- Versioned:
- has_many_Versions: Версии
diff --git a/model/DataExtension.php b/model/DataExtension.php
index b2dae0611..d975f7db2 100644
--- a/model/DataExtension.php
+++ b/model/DataExtension.php
@@ -31,34 +31,21 @@ abstract class DataExtension extends Extension {
'api_access' => false,
);
- static function add_to_class($class, $extensionClass, $args = null) {
- if(method_exists($class, 'extraDBFields')) {
+ static function get_extra_config($class, $extension, $args) {
+ if(method_exists($extension, 'extraDBFields')) {
$extraStaticsMethod = 'extraDBFields';
} else {
$extraStaticsMethod = 'extraStatics';
}
- $statics = Injector::inst()->get($extensionClass, true, $args)->$extraStaticsMethod($class, $extensionClass);
+ $statics = Injector::inst()->get($extension, true, $args)->$extraStaticsMethod();
if ($statics) {
- Deprecation::notice('3.1.0', "$extraStaticsMethod deprecated. Just define statics on your extension, or use add_to_class", Deprecation::SCOPE_GLOBAL);
-
- // TODO: This currently makes extraStatics the MOST IMPORTANT config layer, not the least
- foreach (self::$extendable_statics as $key => $merge) {
- if (isset($statics[$key])) {
- if (!$merge) Config::inst()->remove($class, $key);
- Config::inst()->update($class, $key, $statics[$key]);
- }
- }
-
- // TODO - remove this
- DataObject::$cache_has_own_table[$class] = null;
- DataObject::$cache_has_own_table_field[$class] = null;
+ Deprecation::notice('3.1.0', "$extraStaticsMethod deprecated. Just define statics on your extension, or use get_extra_config", Deprecation::SCOPE_GLOBAL);
+ return $statics;
}
-
- parent::add_to_class($class, $extensionClass, $args);
}
-
+
public static function unload_extra_statics($class, $extension) {
throw new Exception('unload_extra_statics gone');
}
diff --git a/model/Hierarchy.php b/model/Hierarchy.php
index 7aefd0868..dad6185db 100644
--- a/model/Hierarchy.php
+++ b/model/Hierarchy.php
@@ -25,9 +25,10 @@ class Hierarchy extends DataExtension {
function augmentWrite(&$manipulation) {
}
- static function add_to_class($class, $extensionClass, $args = null) {
- Config::inst()->update($class, 'has_one', array('Parent' => $class));
- parent::add_to_class($class, $extensionClass, $args);
+ static function get_extra_config($class, $extension, $args) {
+ return array(
+ 'has_one' => array('Parent' => $class)
+ );
}
/**
diff --git a/model/Versioned.php b/model/Versioned.php
index 5930424d6..25da1a7c4 100644
--- a/model/Versioned.php
+++ b/model/Versioned.php
@@ -107,9 +107,10 @@ class Versioned extends DataExtension {
'Version' => 'Int'
);
- static function add_to_class($class, $extensionClass, $args = null) {
- Config::inst()->update($class, 'has_many', array('Versions' => $class));
- parent::add_to_class($class, $extensionClass, $args);
+ static function get_extra_config($class, $extension, $args) {
+ array(
+ 'has_many' => array('Versions' => $class)
+ );
}
/**
diff --git a/search/FulltextSearchable.php b/search/FulltextSearchable.php
index 77f660fb1..006ac028b 100644
--- a/search/FulltextSearchable.php
+++ b/search/FulltextSearchable.php
@@ -75,14 +75,16 @@ class FulltextSearchable extends DataExtension {
parent::__construct();
}
- static function add_to_class($class, $extensionClass, $args = null) {
- Config::inst()->update($class, 'indexes', array('SearchFields' => array(
- 'type' => 'fulltext',
- 'name' => 'SearchFields',
- 'value' => $args[0]
- )));
-
- parent::add_to_class($class, $extensionClass, $args);
+ static function get_extra_config($class, $extensionClass, $args) {
+ return array(
+ 'indexes' => array(
+ 'SearchFields' => array(
+ 'type' => 'fulltext',
+ 'name' => 'SearchFields',
+ 'value' => $args[0]
+ )
+ )
+ );
}
/**
diff --git a/templates/AssetUploadField.ss b/templates/AssetUploadField.ss
index 6d7dc0746..70f270438 100644
--- a/templates/AssetUploadField.ss
+++ b/templates/AssetUploadField.ss
@@ -9,7 +9,7 @@