Merge remote-tracking branch 'origin/3.0'

This commit is contained in:
Ingo Schommer 2012-08-27 09:25:59 +02:00
commit a8f335360b
24 changed files with 395 additions and 2460 deletions

View File

@ -7,8 +7,10 @@ Director:
'': 'Controller' '': 'Controller'
--- ---
Name: coreroutes Name: coreroutes
After: cms/routes#modelascontrollerroutes
Before: '*' Before: '*'
After:
- framework/routes#rootroutes
- cms/routes#modelascontrollerroutes
--- ---
Director: Director:
rules: rules:
@ -21,7 +23,11 @@ Director:
'interactive': 'SapphireREPL' 'interactive': 'SapphireREPL'
--- ---
Name: adminroutes Name: adminroutes
After: framework/routes#coreroutes Before: '*'
After:
- framework/routes#rootroutes
- framework/routes#coreroutes
- cms/routes#modelascontrollerroutes
--- ---
Director: Director:
rules: rules:

View File

@ -336,9 +336,8 @@ class LeftAndMain extends Controller implements PermissionProvider {
} }
function handleRequest(SS_HTTPRequest $request, DataModel $model = null) { function handleRequest(SS_HTTPRequest $request, DataModel $model = null) {
$title = $this->Title();
$response = parent::handleRequest($request, $model); $response = parent::handleRequest($request, $model);
$title = $this->Title();
if(!$response->getHeader('X-Controller')) $response->addHeader('X-Controller', $this->class); if(!$response->getHeader('X-Controller')) $response->addHeader('X-Controller', $this->class);
if(!$response->getHeader('X-Title')) $response->addHeader('X-Title', $title); if(!$response->getHeader('X-Title')) $response->addHeader('X-Title', $title);
@ -1342,8 +1341,10 @@ class LeftAndMain extends Controller implements PermissionProvider {
* @return string * @return string
*/ */
function SectionTitle() { 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) { foreach($this->MainMenu() as $menuItem) {
if($menuItem->LinkingMode != 'link') return $menuItem->Title; if($menuItem->LinkingMode != 'link') return $menuItem->Title;
} }

View File

@ -231,6 +231,25 @@ class ClassInfo {
return $matchedClasses; 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;
}
} }

View File

@ -173,12 +173,6 @@ class Config {
$this->collectConfigPHPSettings = false; $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 */ /** @var [Config_ForClass] - The list of Config_ForClass instances, keyed off class */
static protected $for_class_instances = array(); static protected $for_class_instances = array();
@ -371,14 +365,17 @@ class Config {
// Then look at the static variables // Then look at the static variables
$nothing = new stdClass(); $nothing = new stdClass();
$classes = array($class);
$sources = array($class);
// Include extensions only if not flagged not to, and some have been set // 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])) { if (($sourceOptions & self::EXCLUDE_EXTRA_SOURCES) != self::EXCLUDE_EXTRA_SOURCES) {
$classes = array_merge($classes, self::$extra_static_sources[$class]); $extraSources = Object::get_extra_config_sources($class);
if ($extraSources) $sources = array_merge($sources, $extraSources);
} }
foreach ($classes as $staticSource) { foreach ($sources as $staticSource) {
$value = Object::static_lookup($staticSource, $name, $nothing); if (is_array($staticSource)) $value = isset($staticSource[$name]) ? $staticSource[$name] : $nothing;
else $value = Object::static_lookup($staticSource, $name, $nothing);
if ($value !== $nothing) { if ($value !== $nothing) {
self::merge_low_into_high($result, $value, $suppress); self::merge_low_into_high($result, $value, $suppress);

View File

@ -4,7 +4,7 @@
* A Directed Acyclic Graph - used for doing topological sorts on dependencies, such as the before/after conditions * A Directed Acyclic Graph - used for doing topological sorts on dependencies, such as the before/after conditions
* in config yaml fragments * 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). */ /** @var array|null - The nodes/vertices in the graph. Should be a numeric sequence of items (no string keys, no gaps). */
protected $data; protected $data;
@ -68,7 +68,68 @@ class SS_DAG {
$dag = $withedges; $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; 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;
}
} }

View File

@ -46,14 +46,11 @@ abstract class Extension {
/** /**
* Called when this extension is added to a particular class * 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 * @static
* @param $class * @param $class
*/ */
static function add_to_class($class, $extensionClass, $args = null) { static function add_to_class($class, $extensionClass, $args = null) {
Config::add_static_source($class, $extensionClass); // NOP
} }
/** /**

View File

@ -463,6 +463,7 @@ abstract class Object {
if($subclasses) foreach($subclasses as $subclass) { if($subclasses) foreach($subclasses as $subclass) {
unset(self::$classes_constructed[$subclass]); unset(self::$classes_constructed[$subclass]);
unset(self::$extra_methods[$subclass]); unset(self::$extra_methods[$subclass]);
unset(self::$extension_sources[$subclass]);
} }
Config::inst()->update($class, 'extensions', array($extension)); Config::inst()->update($class, 'extensions', array($extension));
@ -505,6 +506,7 @@ abstract class Object {
if($subclasses) foreach($subclasses as $subclass) { if($subclasses) foreach($subclasses as $subclass) {
unset(self::$classes_constructed[$subclass]); unset(self::$classes_constructed[$subclass]);
unset(self::$extra_methods[$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() { public function __construct() {
$this->class = get_class($this); $this->class = get_class($this);
// Don't bother checking some classes that should never be extended foreach(ClassInfo::ancestry(get_called_class()) as $class) {
static $notExtendable = array('Object', 'ViewableData', 'RequestHandler'); if(in_array($class, self::$unextendable_classes)) continue;
$extensions = Config::inst()->get($class, 'extensions', Config::UNINHERITED | Config::EXCLUDE_EXTRA_SOURCES);
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);
// If we haven't told that extension it's attached to this class yet, do that now if($extensions) foreach($extensions as $extension) {
if (!isset(self::$_added_extensions[$extensionClass][$class])) { $instance = self::create_from_string($extension);
// First call the add_to_class method - this will inherit down & is defined on Extension, so if not defined, no worries $instance->setOwner(null, $class);
call_user_func(array($extensionClass, 'add_to_class'), $class, $extensionClass, $extensionArgs); $this->extension_instances[$instance->class] = $instance;
// 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(!isset(self::$classes_constructed[$this->class])) { if(!isset(self::$classes_constructed[$this->class])) {
$this->defineMethods(); $this->defineMethods();
self::$classes_constructed[$this->class] = true; self::$classes_constructed[$this->class] = true;

View File

@ -217,7 +217,8 @@ class SS_ConfigManifest {
foreach (array('before', 'after') as $order) { foreach (array('before', 'after') as $order) {
if (isset($header[$order])) { if (isset($header[$order])) {
// First, splice into parts (multiple before or after parts are allowed, comma separated) // 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 "*" // For each, parse out into module/file#name, and set any missing to "*"
$header[$order] = array(); $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 = '<h1>Remaining config fragment graph</h1>';
$res .= '<dl>';
foreach ($e->dag as $node) {
$res .= "<dt>{$node['from']['module']}/{$node['from']['file']}#{$node['from']['name']} marked to come after</dt><dd><ul>";
foreach ($node['to'] as $to) {
$res .= "<li>{$to['module']}/{$to['file']}#{$to['name']}</li>";
}
$res .= "</ul></dd>";
}
$res .= '</dl>';
echo $res;
}
throw $e;
}
} }
/** /**
@ -279,46 +303,55 @@ class SS_ConfigManifest {
* @return string "after", "before" or "undefined" * @return string "after", "before" or "undefined"
*/ */
protected function relativeOrder($a, $b) { protected function relativeOrder($a, $b) {
$matchesSomeRule = array(); $matches = array();
// Do the same thing for after and before // Do the same thing for after and before
foreach (array('after'=>'before', 'before'=>'after') as $rulename => $opposite) { foreach (array('before', 'after') as $rulename) {
$matchesSomeRule[$rulename] = false; $matches[$rulename] = array();
// If no rule specified, we don't match it // Figure out for each rule, which part matches
if (isset($a[$rulename])) { if (isset($a[$rulename])) foreach ($a[$rulename] as $rule) {
$match = array();
foreach ($a[$rulename] as $rule) {
$matchesRule = true; foreach(array('module', 'file', 'name') as $part) {
// If part is *, we match _unless_ the opposite rule has a non-* matcher than also matches $b
foreach(array('module', 'file', 'name') as $part) { if ($rule[$part] == '*') {
$partMatches = true; $match[$part] = 'wild';
}
// If part is *, we match _unless_ the opposite rule has a non-* matcher than also matches $b else {
if ($rule[$part] == '*') { $match[$part] = ($rule[$part] == $b[$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;
} }
$matchesSomeRule[$rulename] = $matchesSomeRule[$rulename] || $matchesRule;
} }
$matches[$rulename][] = $match;
} }
} }
// Check if it matches both rules - problem if so // Figure out the specificness of each match. 1 an actual match, 0 for a wildcard match, remove if no match
if ($matchesSomeRule['before'] && $matchesSomeRule['after']) { $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); user_error('Config fragment requires itself to be both before _and_ after another fragment', E_USER_ERROR);
} }
else {
return $matchesSomeRule['before'] ? 'before' : ($matchesSomeRule['after'] ? 'after' : 'undefined'); return ($matchlevel['before'] > $matchlevel['after']) ? 'before' : 'after';
}
} }
/** /**

View File

@ -749,27 +749,27 @@ class File extends DataObject {
*/ */
function getFileType() { function getFileType() {
$types = array( $types = array(
'gif' => 'GIF image - good for diagrams', 'gif' => _t('File.GifType', 'GIF image - good for diagrams'),
'jpg' => 'JPEG image - good for photos', 'jpg' => _t('File.JpgType', 'JPEG image - good for photos'),
'jpeg' => 'JPEG image - good for photos', 'jpeg' => _t('File.JpgType', 'JPEG image - good for photos'),
'png' => 'PNG image - good general-purpose format', 'png' => _t('File.PngType', 'PNG image - good general-purpose format'),
'ico' => 'Icon image', 'ico' => _t('File.IcoType', 'Icon image'),
'tiff' => 'Tagged image format', 'tiff' => _t('File.TiffType', 'Tagged image format'),
'doc' => 'Word document', 'doc' => _t('File.DocType', 'Word document'),
'xls' => 'Excel spreadsheet', 'xls' => _t('File.XlsType', 'Excel spreadsheet'),
'zip' => 'ZIP compressed file', 'zip' => _t('File.ZipType', 'ZIP compressed file'),
'gz' => 'GZIP compressed file', 'gz' => _t('File.GzType', 'GZIP compressed file'),
'dmg' => 'Apple disk image', 'dmg' => _t('File.DmgType', 'Apple disk image'),
'pdf' => 'Adobe Acrobat PDF file', 'pdf' => _t('File.PdfType', 'Adobe Acrobat PDF file'),
'mp3' => 'MP3 audio file', 'mp3' => _t('File.Mp3Type', 'MP3 audio file'),
'wav' => 'WAV audo file', 'wav' => _t('File.WavType', 'WAV audo file'),
'avi' => 'AVI video file', 'avi' => _t('File.AviType', 'AVI video file'),
'mpg' => 'MPEG video file', 'mpg' => _t('File.MpgType', 'MPEG video file'),
'mpeg' => 'MPEG video file', 'mpeg' => _t('File.MpgType', 'MPEG video file'),
'js' => 'Javascript file', 'js' => _t('File.JsType', 'Javascript file'),
'css' => 'CSS file', 'css' => _t('File.CssType', 'CSS file'),
'html' => 'HTML file', 'html' => _t('File.HtmlType', 'HTML file'),
'htm' => 'HTML file' 'htm' => _t('File.HtlType', 'HTML file')
); );
$ext = $this->getExtension(); $ext = $this->getExtension();

View File

@ -599,7 +599,11 @@ ss.editorWrappers['default'] = ss.editorWrappers.tinyMCE;
} }
selector.empty(); selector.empty();
selector.append($('<option value="" selected="1">Select an anchor</option>')); selector.append($(
'<option value="" selected="1">' +
ss.i18n._t('HtmlEditorField.SelectAnchor') +
'</option>'
));
for (var j = 0; j < anchors.length; j++) { for (var j = 0; j < anchors.length; j++) {
selector.append($('<option value="'+anchors[j]+'">'+anchors[j]+'</option>')); selector.append($('<option value="'+anchors[j]+'">'+anchors[j]+'</option>'));
} }

View File

@ -18,6 +18,7 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
'FILEIFRAMEFIELD.CONFIRMDELETE': 'Are you sure you want to delete this file?', '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+.', '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.', '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.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.PHP_MAXFILESIZE': 'File exceeds upload_max_filesize (php.ini directive)',
'UploadField.HTML_MAXFILESIZE': 'File exceeds MAX_FILE_SIZE (HTML form directive)', 'UploadField.HTML_MAXFILESIZE': 'File exceeds MAX_FILE_SIZE (HTML form directive)',

View File

@ -1,591 +0,0 @@
de:
AssetAdmin:
<<<<<<< HEAD
ADDFILES: 'Add files'
=======
ADDFILES: 'Dateien hinzufügen'
>>>>>>> origin/translation-staging
EditOrgMenu: 'Edit &amp; 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: '<p>Eine oder mehrere Gruppen im <em>CSV</em>-Format (kommaseparierte Werte) importieren. <small><a href="#" class="toggle-advanced">Erweiterte Nutzung</a></small></p>'
Help2: '<div class="advanced"><h4>Erweiterte Nutzung</h4><ul><li>Gültige Spalten: <em>%s</em></li><li>Vorhandene Gruppen werden über ihren eindeutigen <em>Code</em> ermittelt und mit den Werten aus der importierten Datei aktualisiert.</li><li>Gruppen-Hierarchien können über die <em>ParentCode</em> Spalte definiert werden.</li><li>Berechtigungscodes können über die Splate <em>PermissionCode</em> zugewiesen werden, vorhandene Berechtigungen werden nicht gelöscht.</li></ul></div>'
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 &amp; 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 &amp; 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: '<p>Mitglieder im <em>CSV</em>-Format (kommaseparierte Werte) importieren. <small><a href="#" class="toggle-advanced">Erweiterte Nutzung</a></small></p>'
Help2: '<div class="advanced"><h4>Advanced usage</h4><ul><li>Gültige Spalten: <em>%s</em></li><li>Vorhandene Mitglieder werden über ihren eindeutigen <em>Code</em> ermittelt und mit den Werten aus der importierten Datei aktualisiert.</li><li>Gruppen können über die Spalte <em>Gruppen</em> zugewiesen werden. Gruppen werden über ihren eindeutigen <em>Code</em> ermittelt, mehrere Gruppen können durch ein Komma getrennt werden. Vorhandene Gruppenzugehörigkeiten werden nicht gelöscht.</li></ul></div>'
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: '<p>Der Link zum Zurücksetzen des Passworts ist entweder nicht korrekt oder abgelaufen</p><p>Sie können <a href="{link1}">einen neuen Link anfordern</a> oder Ihr Passwort nach dem <a href="{link2}">einloggen</a> ändern.</p>'
NOTERESETPASSWORD: 'Geben Sie Ihre E-Mail-Adresse ein und wir werden Ihnen einen Link zuschicken, mit dem Sie Ihr Passwort zurücksetzen können.'
PASSWORDSENTHEADER: 'Der Link zum Zurücksetzen des Passworts wurde an {email} gesendet'
PASSWORDSENTTEXT: 'Vielen Dank! Wenn ein Account zu der E-Mail Adresse {email} existiert, wurde eine E-Mail mit dem Link zum Zurücksetzen des Passworts verschickt.'
SecurityAdmin:
ACCESS_HELP: 'Benutzer hinzufügen, anzeigen und editieren sowie diesen Berechtigungen und Rollen zuweisen.'
APPLY_ROLES: 'Rollen zu Gruppen zuweisen'
APPLY_ROLES_HELP: 'Möglichkeit die Zuweisungen von Rollen zu Gruppen zu editieren. Erfordert Zugriff auf den Bereich "Sicherheit".'
EDITPERMISSIONS: 'Bearbeiten der Rechte und IP-Adressen für jede Gruppe'
EDITPERMISSIONS_HELP: 'Möglichkeit Berechtigungen und IP-Adressen einer Gruppen zu editieren. Erfordert Zugriff auf den Bereich "Sicherheit".'
GROUPNAME: Gruppenname
IMPORTGROUPS: 'Gruppen importieren'
IMPORTUSERS: 'Benutzer importieren'
MEMBERS: Mitglieder
MENUTITLE: Sicherheit
MemberListCaution: 'Achtung: Das Entfernen von Mitgliedern aus dieser Liste löscht diese auch aus der Datenbank sowie die entsprechenden Gruppenzuweisungen.'
NEWGROUP: 'Neue Gruppe'
PERMISSIONS: Berechtigungen
ROLES: Rollen
ROLESDESCRIPTION: 'Hier können Sie der Gruppe Rollen zuweisen. Rollen sind logische Gruppierungen von Berechtigungen.'
TABROLES: Rollen
Users: Benutzer
SecurityAdmin_MemberImportForm:
BtnImport: Import
FileFieldLabel: 'CSV Datei <small>(Erlaubte Dateierweiterung: *.csv)</small>'
SilverStripeNavigator:
Edit: Bearbeiten
SimpleImageField:
NOUPLOAD: 'Es wurde kein Bild hochgeladen'
SiteTree:
TABMAIN: Hauptteil
TableField:
ISREQUIRED: 'In %s wird ''%s'' benötigt'
TableField.ss:
ADD: 'Eine neue Zeile hinzufügen'
ADDITEM: '%s hinzufügen'
TableListField:
CSVEXPORT: 'Als CSV-Datei exportieren'
PRINT: drucken
Print: Drucken
SELECT: 'Auswählen:'
TableListField.ss:
NOITEMSFOUND: 'Keine Elemente gefunden'
SORTASC: 'Aufsteigend sortieren'
SORTDESC: 'Absteigend sortieren'
TableListField_PageControls.ss:
DISPLAYING: Zeige
OF: von
TO: bis
VIEWFIRST: 'Ersten anzeigen'
VIEWLAST: 'Letzten anzeigen'
VIEWNEXT: 'Nächsten anzeigen'
VIEWPREVIOUS: 'Vorherigen anzeigen'
TimeField:
VALIDATEFORMAT: 'Bitte geben Sie die Uhrzeit im korrekten Format ein ({format})'
ToggleField:
LESS: weniger
MORE: mehr
UploadField:
ATTACHFILE: 'Datei anhängen'
ATTACHFILES: 'Dateien anhängen'
AttachFile: 'Dateien anhängen'
DELETE: 'Aus Dateien löschen'
DELETEINFO: 'Löscht die Datei dauerhaft aus dem Dateisystem'
DOEDIT: Speichern
DROPFILE: 'Datei hier ablegen'
DROPFILES: 'Dateien hier ablegen'
Dimensions: Dimensionen
EDIT: Bearbeiten
EDITINFO: 'Diese Datei bearbeiten'
FIELDNOTSET: 'Dateiinformationen nicht gefunden'
FROMCOMPUTER: 'Von Ihrem Computer'
FROMCOMPUTERINFO: 'Aus Dateien auswählen'
FROMFILES: 'Von "Dateien"'
HOTLINKINFO: 'Info: This image will be hotlinked. Please ensure you have permissions from the original site creator to do so.'
MAXNUMBEROFFILES: 'Maximale Anzahl an {count} Datei(en) überschritten'
MAXNUMBEROFFILESSHORT: 'SIe können maximal {count} Datei(en) hochladen'
REMOVE: Entfernen
REMOVEERROR: 'Fehler beim Entfernen der Datei'
REMOVEINFO: 'Entfernt die Datei von hier, löscht Sie aber nicht aus dem Dateisystem.'
STARTALL: 'Alle starten'
STARTALLINFO: 'Alle Uploads starten'
Saved: Gespeichert
Versioned:
has_many_Versions: Versionen

View File

@ -25,6 +25,7 @@ en:
FROMCOMPUTER: 'Choose files from your computer' FROMCOMPUTER: 'Choose files from your computer'
FROMCOMPUTERINFO: 'Upload from your computer' FROMCOMPUTERINFO: 'Upload from your computer'
TOTAL: Total TOTAL: Total
TOUPLOAD: 'Choose files to upload...'
UPLOADINPROGRESS: 'Please wait… upload in progress' UPLOADINPROGRESS: 'Please wait… upload in progress'
UPLOADOR: OR UPLOADOR: OR
BBCodeParser: BBCodeParser:
@ -143,18 +144,37 @@ en:
Enum: Enum:
ANY: Any ANY: Any
File: File:
AviType: 'AVI video file'
Content: Content Content: Content
CssType: 'CSS file'
DmgType: 'Apple disk image'
DocType: 'Word document'
Filename: Filename Filename: Filename
GifType: 'GIF image - good for diagrams'
GzType: 'GZIP compressed file'
HtlType: 'HTML file'
HtmlType: 'HTML file'
INVALIDEXTENSION: 'Extension is not allowed (valid: {extensions})' INVALIDEXTENSION: 'Extension is not allowed (valid: {extensions})'
INVALIDEXTENSIONSHORT: 'Extension is not allowed' INVALIDEXTENSIONSHORT: 'Extension is not allowed'
IcoType: 'Icon image'
JpgType: 'JPEG image - good for photos'
JsType: 'Javascript file'
Mp3Type: 'MP3 audio file'
MpgType: 'MPEG video file'
NOFILESIZE: 'Filesize is zero bytes.' NOFILESIZE: 'Filesize is zero bytes.'
NOVALIDUPLOAD: 'File is not a valid upload' NOVALIDUPLOAD: 'File is not a valid upload'
Name: Name Name: Name
PLURALNAME: Files PLURALNAME: Files
PdfType: 'Adobe Acrobat PDF file'
PngType: 'PNG image - good general-purpose format'
SINGULARNAME: File SINGULARNAME: File
TOOLARGE: 'Filesize is too large, maximum {size} allowed' TOOLARGE: 'Filesize is too large, maximum {size} allowed'
TOOLARGESHORT: 'Filesize exceeds {size}' TOOLARGESHORT: 'Filesize exceeds {size}'
TiffType: 'Tagged image format'
Title: Title Title: Title
WavType: 'WAV audo file'
XlsType: 'Excel spreadsheet'
ZipType: 'ZIP compressed file'
FileIFrameField: FileIFrameField:
ATTACH: 'Attach {type}' ATTACH: 'Attach {type}'
ATTACHONCESAVED: '{type}s can be attached once you have saved the record for the first time.' ATTACHONCESAVED: '{type}s can be attached once you have saved the record for the first time.'

View File

@ -1,586 +0,0 @@
mi_NZ:
AssetAdmin:
ADDFILES: 'Tāpiri Kōnae'
EditOrgMenu: 'Whakatika me te Whakaraupapa'
NEWFOLDER: KōpakiHōu
AssetTableField:
CREATED: 'Tukuatu tuatahi'
DIM: 'Ngā Rahinga'
FILENAME: 'Ingoa Kōnae'
FOLDER: Kōpaki
LASTEDIT: 'Hurihanga tōmuri'
OWNER: Kaiūmanga
SIZE: Nuinga
TITLE: Taitara
TYPE: 'Tūmomo '
URL: PRO
AssetUploadField:
ChooseFiles: 'Kōwhiri kōnae'
DRAGFILESHERE: 'Tōia mai ngā kōnae ki konei'
DROPAREA: 'Wāhi Taka'
EDITALL: 'Whakatika katoa'
EDITANDORGANIZE: 'Whakatika me te Whakaraupapa'
EDITINFO: 'Whakatika kōnae'
FILES: 'Ngā kōnae'
FROMCOMPUTER: 'Kōwhiri kōnae mai i tō rorohiko'
FROMCOMPUTERINFO: 'Tukuatu i tō rorohiko'
TOTAL: Tapeke
UPLOADINPROGRESS: 'Taihoa...he tukuatu kei te haere'
UPLOADOR: 'TĒNEI RĀNEI'
BBCodeParser:
ALIGNEMENT: Tiaroaro
ALIGNEMENTEXAMPLE: 'i tiaro matautia'
BOLD: 'Tuhinga Taekaha'
BOLDEXAMPLE: Taekaha
CODE: 'Paraka Waehere'
CODEDESCRIPTION: 'Paraka waehere kāore hōpututia'
CODEEXAMPLE: 'Paraka Waehere'
COLORED: 'Tuhinga whaikano'
COLOREDEXAMPLE: 'tuhinga kikorangi'
EMAILLINK: 'Hono īmēra'
EMAILLINKDESCRIPTION: 'Hanga hononga ki tētahi wāhitau īmēra'
IMAGE: Atahanga
IMAGEDESCRIPTION: 'Whakaaturia tētahi atahanga i tō tare'
ITALIC: 'Tuhinga Tītaha'
ITALICEXAMPLE: Tītaha
LINK: 'Hono paetukutuku'
LINKDESCRIPTION: 'Hono ki tētahi atu paetukutuku, PRO rānei'
STRUCK: 'Tuhinga i Tāhīpaetia'
STRUCKEXAMPLE: 'I tāhīpaetia'
UNDERLINE: 'Tuhinga i tōrarotia'
UNDERLINEEXAMPLE: 'I tōrarotia'
UNORDERED: 'Rārangi kāore i raupapatia'
UNORDEREDDESCRIPTION: 'Rārangi kāore i raupapatia'
UNORDEREDEXAMPLE1: 'tūemi 1 kāore i raupapatia'
BackLink_Button.ss:
Back: Hoki
BasicAuth:
ENTERINFO: 'Tāurua he ingoa kaiwhakamahi me te kupuhipa'
ERRORNOTADMIN: 'Ehara tēnā kaiwhakamahi i te kaiwhakahaere'
ERRORNOTREC: 'Kāore i te mōhiotia tēnā ingoa kaiwhakamahi / kupuhipa'
Boolean:
0:
ANY: 'Ko tētahi'
1: Pono
CMSLoadingScreen.ss:
LOADING: 'Uta ana...'
REQUIREJS: 'Ka hiahia te CMS kia whakahohea te JavaScript'
CMSMain:
ACCESS: 'Uru ki te wāhanga ''{title}'''
ACCESSALLINTERFACES: 'Uru ki ngā wāhanga CMS katoa'
ACCESSALLINTERFACESHELP: 'Ka takahi i ngā tautuhinga uru tauwhāiti ake'
SAVE: Tiaki
CMSProfileController:
MENUTITLE: PūwhakamanaKōtahaCMS
ChangePasswordEmail.ss:
CHANGEPASSWORDTEXT1: 'Kua hurihia tō kupuhipa mō'
CHANGEPASSWORDTEXT2: 'Ka taea te whakamahi i ēnei taipitopito tuakiri ināianei hei takiuru:'
EMAIL: Īmēra
HELLO: 'Kia ora'
PASSWORD: Kupuhipa
CheckboxField:
-
- Pono
ComplexTableField:
CLOSEPOPUP: 'Kati Pakū-Ake'
SUCCESSADD2: 'Kua tāpiritia a {name}'
SUCCESSEDIT: 'I tiakina a %s %s %s'
ComplexTableField.ss:
ADDITEM: 'Tāpiri %s'
NOITEMSFOUND: 'Kāore i kitea he tūemi'
SORTASC: 'Kōmaka aupiki'
SORTDESC: 'Kōmaka auheke'
ComplexTableField_popup.ss:
NEXT: Panuku
PREVIOUS: Tōmua
ConfirmedPasswordField:
ATLEAST: 'Kia {min} pūāhua i te iti rawa te roa o ngā kupuhipa.'
BETWEEN: 'Me noho te roa o ngā kupuhipa i waenga i te {min} ki te {max} ngā pūāhua'
MAXIMUM: 'Kaua i hipa i te {max} pūāhua te roa o ngā kupuhipa.'
SHOWONCLICKTITLE: 'Huri Kupuhipa'
CreditCardField:
FIRST: tuatahi
FOURTH: tuawhā
SECOND: tuarua
THIRD: tuatoru
CurrencyField:
CURRENCYSYMBOL: $
DataObject:
PLURALNAME: 'Ngā Ahanoa Raraunga'
SINGULARNAME: 'Ahanoa Raraunga'
Date:
DAY:
DAYS: 'ngā rā'
HOUR: haora
HOURS: 'ngā haora'
MIN: meneti
MINS: 'ngā meneti'
MONTH: marama
MONTHS: 'ngā marama'
SEC: hēkona
SECS: 'ngā hēkona'
TIMEDIFFAGO: '{difference} i mua'
TIMEDIFFIN: 'i roto i te {difference}'
YEAR: tau
YEARS: 'ngā tau'
DateField:
NOTSET: 'kāore i tautuhia'
TODAY: 'i tēnei rā'
VALIDDATEFORMAT2: 'Tāurua he hōputu rā tika ({format})'
VALIDDATEMAXDATE: 'Me tawhito ake tō rā, kia ōrite rānei ki te rā mōrahi ({date}) kua whakaaetia'
VALIDDATEMINDATE: 'Me hōu ake tō rā, kia ōrite rānei ki te rā moroiti ({date}) kua whakaaetia'
DatetimeField:
NOTSET: 'Kāore i tautuhia'
Director:
INVALID_REQUEST: 'Tono muhu'
DropdownField:
CHOOSE: (Kōwhiri)
EmailField:
VALIDATION: 'Tāurua he wāhitau īmēra '
Email_BounceRecord:
PLURALNAME: 'Ngā Pūrongo Tāwhana Īmēra'
SINGULARNAME: 'Pūrongo Tāwhana Īmēra'
Enum:
ANY: 'Ko tētahi'
File:
Content: 'Ngā Ihirangi'
Filename: 'Ingoa Kōnae'
INVALIDEXTENSION: 'Kāore e whakaaetia te toronga (valid: {extensions})'
INVALIDEXTENSIONSHORT: 'Kāore e whakaaetia te toronga'
NOFILESIZE: 'He kore ngā paita kei te kōnae'
NOVALIDUPLOAD: 'Ehara te kōnae i te tukuatu pono'
Name: Ingoa
PLURALNAME: 'Ngā Kōnae'
SINGULARNAME: Kōnae
TOOLARGE: 'He rahi rawa te rahi kōnae, he {size} te rahi mōrahi ka taea'
TOOLARGESHORT: 'Ka hipa te {size} i te rahi kōnae'
Title: Taitara
FileIFrameField:
ATTACH: 'Āpiti {type}'
ATTACHONCESAVED: 'Ka taea te āpiti i ngā {type} ina oti te tiaki tuatahi o te pūkete.'
ATTACHONCESAVED2: 'Ka taea te āpiti kōnae ina oti te tiaki tuatahi o te pūkete.'
DELETE: 'Muku {type}'
DISALLOWEDFILETYPE: 'Kāore e whakaaetia ki te tukuatu i tēnei momo kōnae'
FILE: Kōnae
FROMCOMPUTER: 'Mai i tō Rorohiko'
FROMFILESTORE: 'Mai i te pātaka kōnae'
NOSOURCE: 'Kōwhiria he kōnae pūtake hei tāpiri'
REPLACE: 'Whakakapi {type}'
FileIFrameField_iframe.ss:
TITLE: 'Iframe Tukuatu Atahanga'
Filesystem:
SYNCRESULTS: 'Kua oti te tukutahi: e {createdcount} ngā tūemi i hangaia, e {deletedcount} ngā tūemi i mukua'
Folder:
<<<<<<< HEAD
PLURALNAME: Folders
SINGULARNAME: Folder
=======
PLURALNAME: 'Ngā Kōpaki'
SINGULARNAME: Kōpaki
>>>>>>> origin/translation-staging
ForgotPasswordEmail.ss:
HELLO: 'Kia ora'
TEXT1: 'Anei tō'
TEXT2: 'hono tautuhi kupuhipa anō'
TEXT3:
Form:
FIELDISREQUIRED: 'Ka hiahiatia a %s'
SubmitBtnLabel: Haere
VALIDATIONCREDITNUMBER: 'Tirohia kua tika tō tāuru i te tau kāri nama {number}'
VALIDATIONNOTUNIQUE: 'Ehara te uara i tāurua i te ahurei'
VALIDATIONPASSWORDSDONTMATCH: 'Kāore ngā kupuhipa i te ōrite'
VALIDATIONPASSWORDSNOTEMPTY: 'Kia kaua e noho piako ngā kupuhipa'
VALIDATIONSTRONGPASSWORD: 'Kia kotahi tonu te mati, kia tahi hoki te pūāhua retawhika i te iti rawa o ngā kupuhipa'
VALIDATOR: Pūwhakamana
VALIDCURRENCY: 'Tāurua he moni tika'
FormField:
NONE: Kore
GridAction:
DELETE_DESCRIPTION: Muku
Delete: Muku
UnlinkRelation: Wetehono
GridField:
Add: 'Tāpiri {name}'
Filter: Tātari
FilterBy: 'Tātari mā'
Find: Rapu
LEVELUP: 'Whakaawhiwhi ki runga'
LinkExisting: 'Hono Tīari'
NewRecord: '%s hōu'
NoItemsFound: 'Kāore i kitea he tūemi'
PRINTEDAT: 'I tāngia i'
PRINTEDBY: 'I tāngia e'
PlaceHolder: 'Tapu {type}'
PlaceHolderWithLabels: 'Rapu {type} mā te {name}'
RelationSearch: 'Rapu whanaunga'
ResetFilter: 'Tautuhi anō'
GridFieldAction_Delete:
DeletePermissionsFailure: 'Kāore he muku whakaaetanga'
GridFieldDetailForm:
Create: Hanga
Delete: Muku
DeletePermissionsFailure: 'Kāore he muku whakaaetanga'
Deleted: 'Kua mukua %s %s'
Save: Tiaki
Saved: 'I tiakina a %s %s'
GridFieldItemEditView.ss: null
Group:
AddRole: 'Tāpiritia he tūnga mō tēnei rōpū'
Code: 'Waehere Rōpū'
DefaultGroupTitleAdministrators: 'Ngā Kaiwhakahaere'
DefaultGroupTitleContentAuthors: 'Ngā Kaituhi Ihirangi'
Description: Whakaahuatanga
GroupReminder: 'Mēnā ka kōwhiri koe i tētahi rōpū matua, ka whiwhi tēnei rōpū i ōna tūnga katoa'
Locked: 'Kua raka?'
NoRoles: 'Kāore i kitea he tūnga'
<<<<<<< HEAD
PLURALNAME: Groups
Parent: 'Rōpū Matua'
RolesAddEditLink: 'Whakahaere tūnga'
SINGULARNAME: Group
=======
PLURALNAME: 'Ngā Rōpū'
Parent: 'Rōpū Matua'
RolesAddEditLink: 'Whakahaere tūnga'
SINGULARNAME: Rōpū
>>>>>>> origin/translation-staging
Sort: 'Raupapa Kōmaka'
has_many_Permissions: 'Ngā Whakaaetanga'
many_many_Members: 'Ngā Mema'
GroupImportForm:
Help1: '<p>Kawea mai ngā kaiwhakamahi i te hōputu <em>CSV </em> (ngā uara ka wehea ki te piko). <small><a href="#" class="toggle-advanced">Whakaatu whakamahinga ara atu anō</a></small></p>'
Help2: "<div class=\"advanced\">\\n<h4>Whakamahinga ara atu anō</h4>\\n<ul>\\n<li>Ngā tīwae ka whakaaetia: <em>%s</em></li>\\n<li>Ka whakaritea ngā kaiwhakamahi mā tō rātou āhuatanga<em>Waehere</em> ahurei, ā, ka whakahōutia ki ngā uara hōu mai i te kōnae kua kawea mai</li>\\n<li>Ka taea te hanga aroākapanga rōpū mā te whakamahi i te tīwae <em>WaehereMatua</em>.</li>\\n<li>Ka taea te tautapa waehere whakaaetanga mā te tīwae<em>WaehereWhakaaetanga</em>. Kāore e ūkuia ngā waehere whakaaetanga o nāianei.</li>\\n</ul>\\n</div>"
ResultCreated: 'I hangaia e {count} ngā rōpū'
ResultDeleted: 'Kua mukua e %d ngā rōpū'
ResultUpdated: 'Kua whakahōutia e %d ngā rōpū'
Hierarchy:
InfiniteLoopNotAllowed: 'Kua kitea he koromeke mutunga kore i roto i te aroākapanga "{type}". Hurihia te matua hei whakaea i tēnei'
HtmlEditorField:
ADDURL: 'Tāpiri PRO'
ADJUSTDETAILSDIMENSIONS: 'Ngā taipitopito &amp; ngā rahinga'
ANCHORVALUE: Punga
BUTTONINSERT: Kōkohu
BUTTONINSERTLINK: 'Kōkuhu hono'
BUTTONREMOVELINK: 'Tango hono'
BUTTONUpdate: Whakahōu
CAPTIONTEXT: 'Tuhinga tapanga'
CSSCLASS: 'Tiaroaro / kāhua'
CSSCLASSCENTER: 'I tauwaengatia, i tōna kotahi'
CSSCLASSLEFT: 'I te taha mauī, me te tuhinga e takai huri noa ana'
CSSCLASSLEFTALONE: 'Kei te mauī, i tōna kotahi'
CSSCLASSRIGHT: 'I te taha matau, me te tuhinga e takai huri noa ana'
DETAILS: 'Ngā Taipitopito'
EMAIL: 'Wāhitau Īmēra'
FILE: 'Ngā kōnae'
FOLDER: Kōpaki
FROMCMS: 'Mai i te CMS'
FROMCOMPUTER: 'Mai i tō rorohiko'
FROMWEB: 'Mai i te tukutuku'
FindInFolder: 'Rapu i te Kōpaki'
IMAGEALT: 'Tuhinga kē (alt)'
IMAGEALTTEXT: 'Tuhinga kē - ka whakaaturia ki te kore e taea te whakaatu atahanga'
IMAGEALTTEXTDESC: 'Ka whakaaturia ki ngā pūpānui mata, mēnā rānei kāore e taea te atahanga te whakaatu'
IMAGEDIMENSIONS: 'Ngā Rahinga'
IMAGEHEIGHTPX: Teitei
IMAGETITLE: 'Tuhinga taitara (ākiutauta) - mō ngā mōhiohio tāpiri mō te atahanga'
IMAGETITLETEXT: 'Tuhinga taitara (ākiutauta) '
IMAGETITLETEXTDESC: 'Mō ētahi atu mōhiohio mō te atahanga'
IMAGEWIDTHPX: Whānui
INSERTMEDIA: 'Kōkuhu Pāpāho'
LINK: 'Kōkuhu hono'
LINKANCHOR: 'He punga kei tēnei whārangi'
LINKDESCR: 'Whakaahuatanga hono'
LINKEMAIL: 'Wāhitau Īmēra'
LINKEXTERNAL: 'Tētahi atu paetukutuku'
LINKFILE: 'Tīkina ake he kōnae'
LINKINTERNAL: 'Whārangi kei te pae'
LINKOPENNEWWIN: 'Ka whakatuwhera hono i te matapihi hōu?'
LINKTO: 'Hono ki'
PAGE: Whārangi
URL: PRO
URLNOTANOEMBEDRESOURCE: 'Kāore e taea te huri i te PRO ''{url}'' hei rawa pāpāho.'
UpdateMEDIA: 'Whakahōu Pāpāho'
Image:
PLURALNAME: 'Ngā Kōnae'
SINGULARNAME: Kōnae
ImageField:
IMAGE: Atahanga
Image_Cached:
PLURALNAME: 'Ngā kōnae'
SINGULARNAME: Kōnae
Image_iframe.ss:
TITLE: 'Iframe Tukuatu Atahanga'
LeftAndMain:
CANT_REORGANISE: 'Kāore tō mana whakakē i ngā whārangi taumata Matua. Kāore tō huringa i tiakina.'
DELETED: 'I mukua'
DropdownBatchActionsDefault: 'Ngā Mahi'
HELP: Āwhina
PAGETYPE: 'Momo whārangi:'
PERMAGAIN: 'Kua takiputaina atu koe i te CMS. Ki te pīrangi koe ki te takiuru atu anō, tāurutia tētahi ingoa kaiwhakamahi me te kupuhipa. '
PERMALREADY: 'Aroha mai, kāore e taea te whakauru i tērā wāhanga o te CMS. Ki te pīrangi koe ki te takiuru atu mā tētahi atu ingoa, whakamahia ki raro nei.'
PERMDEFAULT: 'Whiriwhiria koa tētahi aratuka motuhēhēnga me te tāuru i ō pūkenga ki te whakauru i te CMS.'
PLEASESAVE: 'Tiaki Whārangi: Kāore i taea tēnei whārangi te whakahōu nā te mea kāore anō kia tiakina.'
PreviewButton: Arokite
REORGANISATIONSUCCESSFUL: 'Kua momoho te whakaraupapa anō i te rākau pae'
SAVEDUP: 'Kua Tiakina'
VersionUnknown: 'tē mōhiotia'
LeftAndMain_Menu.ss:
Hello: 'Kia ora'
LOGOUT: Takiputa
LoginAttempt:
Email: 'Wāhitau Īmēra'
IP: 'Wāhitau KI'
<<<<<<< HEAD
PLURALNAME: 'Login Attempts'
SINGULARNAME: 'Login Attempt'
=======
PLURALNAME: 'Ngā Whakamātau Takiuru'
SINGULARNAME: 'Whakamātau Takiuru'
>>>>>>> origin/translation-staging
Status: Tūnga
Member:
ADDGROUP: 'Tāpiri rōpū'
BUTTONCHANGEPASSWORD: 'Huri Kupuhipa'
BUTTONLOGIN: Takiuru
BUTTONLOGINOTHER: 'Takiuru hei tangata kē'
BUTTONLOSTPASSWORD: 'Kua ngaro i a au taku kupuhipa'
CONFIRMNEWPASSWORD: 'Whakaū Kupuhipa Hōu'
CONFIRMPASSWORD: 'Whakaū Kupuhipa'
DATEFORMAT: 'Date format'
DefaultAdminFirstname: 'Kaiwhakahaere Taunoa'
DefaultDateTime: taunoa
EMAIL: Īmēra
EMPTYNEWPASSWORD: 'Kāore e whakaaetia kia piako te kupuhipa hōu, ngana anō'
ENTEREMAIL: 'Tāurua he wāhitau īmēra kia whiwhi i te hono tautuhi kupuhipa anō.'
ERRORLOCKEDOUT: 'Kua mono rangitahitia tō pūkete nā te nui rawa o ngā whakamātau hē ki te takiuru. Ngana anō ā te 20 meneti.'
ERRORNEWPASSWORD: 'Kua rerekē tō tāuru kupuhipa, whakamātau anō'
ERRORPASSWORDNOTMATCH: 'Kāore i te ōrite tō kupuhipa o nāianei, ngana anō'
ERRORWRONGCRED: 'Te āhua nei ehara i te wāhitau īmerā tika, i te kuphipa tika rānei. Ngana anō'
FIRSTNAME: 'Ingoa Tuatahi'
INTERFACELANG: 'Reo Atanga'
INVALIDNEWPASSWORD: 'Kāore i taea te whakaae ki taua kupuhipa: {password}'
LOGGEDINAS: 'Kua takiuru koe hei {name}.'
NEWPASSWORD: 'Kupuhipa Hōu'
PASSWORD: Kupuhipa
PLURALNAME: 'Ngā Mema'
PROFILESAVESUCCESS: 'I momoho te tiaki'
REMEMBERME: 'Ka maumahara mai ā muri atu?'
SINGULARNAME: Mema
SUBJECTPASSWORDCHANGED: 'Kua hurihia tō kupuhipa'
SUBJECTPASSWORDRESET: 'Tō hono tautuhi kupuhipa anō'
SURNAME: 'Ingoa Whānau'
TIMEFORMAT: 'Time format'
VALIDATIONMEMBEREXISTS: 'Tīari kē ana tētahi mema me te %s ōrite'
ValidationIdentifierFailed: 'Kāore e whakaaetia ki te tuhirua i te mema #{id} ki te pūtautuhi ōrite ({name} = {value}))'
WELCOMEBACK: 'Nau mai, hoki mai, {firstname}'
YOUROLDPASSWORD: 'Tō kupuhipa tawhito'
belongs_many_many_Groups: 'Ngā Rōpū'
db_LastVisited: 'Rā Toronga Tōmua'
db_Locale: 'Tauwāhi Atanga'
db_LockedOutUntil: 'Ka maukatia tae atu ki te'
db_NumVisit: 'Maha o ngā Toronga'
db_Password: Kupuhipa
db_PasswordExpiry: 'Rā Mōnehu Kupuhipa'
MemberAuthenticator:
TITLE: 'Īmērā &amp; Kupuhipa'
MemberDatetimeOptionsetField:
AMORPM: 'AM (Ante meridiem), PM (Post meridiem) rānei'
'APPLY FILTER': 'Hoatu Tātari'
Custom: Ritenga
DATEFORMATBAD: 'He muhu te hōputu rā'
DAYNOLEADING: 'Rā o te marama kāore he kore i mua'
DIGITSDECFRACTIONSECOND: 'Kotahi neke atu ngā mati e tohu ana i te hautau ā-ira o te hēkona'
FOURDIGITYEAR: 'Tau matiwhā'
FULLNAMEMONTH: 'Ingoa marama katoa (hei tauira, Pipiri)'
HOURNOLEADING: 'Haora, kāore he kore i mua'
MINUTENOLEADING: 'Meneti, kāore he kore i mua'
MONTHNOLEADING: 'Mati marama kāore he kore i mua'
Preview: Arokite
SHORTMONTH: 'Ingoa marama poto (hei tauira, Pip)'
TOGGLEHELP: 'Takahurihia te āwhina whakahōputu'
TWODIGITDAY: 'Rā marama matirua'
TWODIGITHOUR: 'Ngā mati haora e rua (00 ki te 23)'
TWODIGITMINUTE: 'Ngā mati meneti e rua (00 ki te 59)'
TWODIGITMONTH: 'Marama matirua (01=Kohitātea)'
TWODIGITSECOND: 'Ngā mati hēkona e rua (00 ki te 59)'
TWODIGITYEAR: 'Tau matirua'
MemberImportForm:
Help1: '<p>Kawea mai ngā kaiwhakamahi i te <em>hōputu CSV </em> (ngā uara ka wehea ki te piko). <small><a href="#" class="toggle-advanced">Whakaatu whakamahinga ara atu anō</a></small></p>'
Help2: "<div class=\"advanced\">\\n<h4>Whakamahinga ara atu anō</h4>\\n<ul>\\n<li>Ngā tīwae ka whakaaetia: <em>%s</em></li>\\n<li>Ka whakaritea ngā kaiwhakamahi mā tō rātou āhuatanga<em>Waehere</em> ahurei, ā, ka whakahōutia ki ngā uara hōu mai i te kōnae kua kawea mai.</li>\\n<li>Ka taea te tautapa rōpū mā te tīwae <em>Ngā Rōpū</em>. Ka tautohua ngā rōpū mā tō rātou āhuatanga <em>Waehere</em>, ka taea te whakawehe i ngā rōpū maha ki te piko. Kāore e ūkuia ngā mematanga rōpū o naianei.</li>\\n</ul>\\n</div>"
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: '<p>He muhu, kua mōnehu rānei te hono tautuhi kupuhipa anō.</p><p>Ka taea te tono i te mea hōu<a href="{link1}">i konei</a> ka huri rānei i tō kupuhipa ā muri i tō<a href="{link2}">takiuru</a>.</p>'
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ū.<br />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 <small>(Ngā toronga ka whakaaetia: *.csv)</small>'
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:
Print:
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'

View File

@ -1,556 +0,0 @@
nl:
AssetAdmin:
ADDFILES: 'Add files'
EditOrgMenu: 'Edit &amp; 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: '<p>Importeer en of meerdere groepen in <em>CSV</em> formaat (Kommagescheiden bestandsformaat). <small><a href="#" class="toggle-advanced">Toon geavanceerd gebruik</a></small></p>'
Help2: '<div class="advanced"><h4>Geavanceerd gebruik</h4><ul><li>Toegestane kolommen: <em>%s</em></li><li>Bestaande groepen worden geïdentificeerd door middel van hun unieke <em>Code</em> waarde en aangepast met de nieuwe waarden van het geïmporteerde bestand</li><li>Groep hiërarchieën kunnen aangemaakt worden met behulp van een <em>ParentCode</em> kolom.</li><li>Toegangsrechten kunnen worden toegekend met de <em>PermissionCode</em> kolom. Bestaande toegangsrechten worden niet gewist.</li></ul></div>'
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 &amp; 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: '<p>Importeer leden in <em>CSV</em> formaat (Kommagescheiden bestandsformaat). <small><a href="#" class="toggle-advanced">Toon geavanceerd gebruik</a></small></p>'
Help2: '<div class="advanced"><h4>Geavanceerd gebruik</h4><ul><li>Toegestane kolommen: <em>%s</em></li><li>Bestaande leden worden geïdentificeerd door middel van hun unieke <em>Code</em> waarde en aangepast met de nieuwe waarden van het geïmporteerde bestand</li><li>Groepen kunnen toegewezen worden met de <em>Groups</em> kolom. Groepen worden geïdentificeerd met hun <em>Code</em> waarde en meerdere groepen kunnen worden gescheiden met een komma. Bestaande groep lidmaatschappen worden niet gewist.</li></ul></div></ul></div>'
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 <a href="%s">opnieuw inloggen</a>.'
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: '<p>De link om uw wachtwoord te kunnen wijzigen is niet meer geldig.</p><p>U kunt het <a href="{link1}">opnieuw proberen</a> of uw wachtwoord aanpassen door <a href="{link2}">in te loggen</a>.</p>'
NOTERESETPASSWORD: 'Voer Uw emailadres in en we zenden U een link waarmee U Uw wachtwoord opnieuw kunt aanmaken'
PASSWORDSENTHEADER: 'Password reset link sent to ''{email}'''
PASSWORDSENTTEXT: 'Thank you! A reset link has been sent to ''{email}'', provided an account exists for this email address.'
SecurityAdmin:
ACCESS_HELP: 'Bevoegdheid voor bekijken, toevoegen en bewerken van leden, en toewijzen van rechten en rollen aan hen.'
APPLY_ROLES: 'Pas rollen toe aan groepen'
APPLY_ROLES_HELP: 'Bewerkingsmogelijkheid van rollen voor groepen. Heeft rechten voor "Beveiligingsectie" nodig.'
EDITPERMISSIONS: 'Bewerk rechten en IP-adressen bij elke groep'
EDITPERMISSIONS_HELP: 'Bewerkingsmogelijkheid van Rechten en IP adressen voor groepen. Heeft rechten voor "Beveiligingsectie" nodig.'
GROUPNAME: 'Groep naam'
IMPORTGROUPS: Groepen
IMPORTUSERS: 'Importeer gebruikers'
MEMBERS: Leden
MENUTITLE: Beveiliging
MemberListCaution: 'Let op: Verwijderen van leden van deze lijst heeft als gevolg dat deze uit alle groepen en de database worden verwijderd'
NEWGROUP: 'Nieuwe Groep'
PERMISSIONS: Rechten
ROLES: Rollen
ROLESDESCRIPTION: 'In deze sectie kan je rollen toevoegen aan deze groep. Rollen zijn logische groeperingen van rechten die in het Rollen tapblad gewijzigd kunnen worden.'
TABROLES: Rollen
Users: Gebruikers
SecurityAdmin_MemberImportForm:
BtnImport: Importeer
FileFieldLabel: 'CSV Bestand <small>(Toegestane extensies: *.csv)</small>'
SilverStripeNavigator:
Edit: Bewerken
SimpleImageField:
NOUPLOAD: 'Geen afbeeldingen ontvangen'
SiteTree:
TABMAIN: Hoofdgedeelte
TableField:
ISREQUIRED: 'In %s ''%s'' is required'
TableField.ss:
ADD: 'Nieuwe rij toevoegen'
ADDITEM: 'Add %s'
TableListField:
CSVEXPORT: 'Exporteer naar CSV'
PRINT: Afdrukken
Print: Print
SELECT: 'Selecteer:'
TableListField.ss:
NOITEMSFOUND: 'No items found'
SORTASC: 'Sorteer in oplopende volgorde'
SORTDESC: 'Sorteer in aflopende volgorde'
TableListField_PageControls.ss:
DISPLAYING: Displaying
OF: of
TO: to
VIEWFIRST: 'Bekijk eerste'
VIEWLAST: 'Bekijk laatste'
VIEWNEXT: 'Bekijk volgende'
VIEWPREVIOUS: 'Bekijk vorige'
TimeField:
VALIDATEFORMAT: 'Vul een valide datum in ({format})'
ToggleField:
LESS: minder
MORE: meer
UploadField:
ATTACHFILE: 'Voeg een bestand toe'
ATTACHFILES: 'Voeg bestanden toe'
AttachFile: 'Voeg bestanden toe'
DELETE: 'Delete from files'
DELETEINFO: 'Verwijder dit bestand uit bestandsopslag van de website.'
DOEDIT: Bewaar
DROPFILE: 'Bestand hiernaar toe slepen'
DROPFILES: 'Sleep hier je bestanden'
Dimensions: Afmetingen
EDIT: Edit
EDITINFO: 'Bewerk dit bestand'
FIELDNOTSET: 'Bestandsinformatie niet gevonden'
FROMCOMPUTER: 'Vanaf computer'
FROMCOMPUTERINFO: 'Select from files'
FROMFILES: 'Bestaande bestanden'
HOTLINKINFO: 'Info: This image will be hotlinked. Please ensure you have permissions from the original site creator to do so.'
MAXNUMBEROFFILES: 'Het maximale aantal ({count}) bestanden is overschreven'
MAXNUMBEROFFILESSHORT: 'Maximaal {count} bestanden uploaden'
REMOVE: Verwijder
REMOVEERROR: 'Fout bij verwijderen'
REMOVEINFO: 'Verwijder (ontkoppel) dit bestand, maar behoud het in bestandsopslag van de website.'
STARTALL: 'Start alles'
STARTALLINFO: 'Start all uploads'
Saved: 'Succesvol opgeslagen'
Versioned:
has_many_Versions: Versies

View File

@ -1,586 +0,0 @@
ru:
AssetAdmin:
ADDFILES: 'Add files'
EditOrgMenu: 'Edit &amp; organize'
NEWFOLDER: 'Новая папка'
AssetTableField:
CREATED: 'Первая загрузка'
DIM: Размеры
FILENAME: 'Имя файла'
FOLDER: Folder
LASTEDIT: 'Последнее изменение'
OWNER: Владелец
SIZE: Размер
TITLE: Название
TYPE: Тип
URL: URL
AssetUploadField:
ChooseFiles: 'Выбрать файлы'
DRAGFILESHERE: 'Перетащите файлы сюда'
DROPAREA: 'Drop Area'
EDITALL: 'Редактировать все'
EDITANDORGANIZE: 'Edit & organize'
EDITINFO: 'Edit files'
FILES: Файлы
FROMCOMPUTER: 'Choose files from your computer'
FROMCOMPUTERINFO: 'Upload from your computer'
TOTAL: 'Всего:'
UPLOADINPROGRESS: 'Please wait… upload in progress'
UPLOADOR: ИЛИ
BBCodeParser:
ALIGNEMENT: Выравнивание
ALIGNEMENTEXAMPLE: 'Выравнено по правому краю'
BOLD: 'Жирный текст'
BOLDEXAMPLE: Жирный
CODE: 'Блок кода'
CODEDESCRIPTION: 'Блок неформатированного кода'
CODEEXAMPLE: 'Блок кода'
COLORED: 'Цветной текст'
COLOREDEXAMPLE: 'голубой текст'
EMAILLINK: 'Ссылка email'
EMAILLINKDESCRIPTION: 'Создать ссылку на этот email'
IMAGE: Изображение
IMAGEDESCRIPTION: 'Показать изображ. в записи'
ITALIC: Курсив
ITALICEXAMPLE: Курсив
LINK: 'Сссылка с сайта'
LINKDESCRIPTION: 'Ссылка на другой сайт или URL'
STRUCK: 'Перечеркнутый текст'
STRUCKEXAMPLE: Перечеркнутый
UNDERLINE: 'Подчеркнутый текст'
UNDERLINEEXAMPLE: Подчеркнутый
UNORDERED: 'Ненумерованный список'
UNORDEREDDESCRIPTION: 'Ненумерованный список'
UNORDEREDEXAMPLE1: 'ненумерованный элемент 1'
BackLink_Button.ss:
Back: Назад
BasicAuth:
ENTERINFO: 'Пожалуйста, введите имя пользователя и пароль.'
ERRORNOTADMIN: 'Такой пользователь не является администратором.'
ERRORNOTREC: 'Такое имя пользователя или пароль не существует'
Boolean:
0: 'False'
ANY: Any
1: 'True'
CMSLoadingScreen.ss:
LOADING: 'Идет загрузка...'
REQUIREJS: 'The CMS requires that you have JavaScript enabled.'
CMSMain:
ACCESS: 'Доступ к разделу ''{title}'''
ACCESSALLINTERFACES: 'Доступ ко всему интерфейсу CMS'
ACCESSALLINTERFACESHELP: 'Overrules more specific access settings.'
SAVE: Сохранить
CMSProfileController:
MENUTITLE: CMSProfileController
ChangePasswordEmail.ss:
CHANGEPASSWORDTEXT1: 'Вы изменили свой пароль на'
CHANGEPASSWORDTEXT2: 'Для того, чтобы войти, используйте сейчас следующие учетные данные:'
EMAIL: Email
HELLO: Здравствуйте
PASSWORD: Пароль
CheckboxField:
- 'False'
- 'True'
ComplexTableField:
CLOSEPOPUP: 'Закрыть всплывающее окно'
SUCCESSADD2: 'Added {name}'
SUCCESSEDIT: 'Сохранено %s %s %s'
ComplexTableField.ss:
ADDITEM: 'Add %s'
NOITEMSFOUND: 'No items found'
SORTASC: 'Сортировать по возрастанию'
SORTDESC: 'Сортировать по убыванию'
ComplexTableField_popup.ss:
NEXT: Следующ.
PREVIOUS: Предыдущ.
ConfirmedPasswordField:
ATLEAST: 'Пароль должен быть не короче {min} символов.'
BETWEEN: 'Passwords must be {min} to {max} characters long.'
MAXIMUM: 'Пароль должен быть не длиннее {max} символов.'
SHOWONCLICKTITLE: 'Изменить Пароль'
CreditCardField:
FIRST: первая
FOURTH: четвертая
SECOND: вторая
THIRD: третья
CurrencyField:
CURRENCYSYMBOL: $
DataObject:
PLURALNAME: Объекты
SINGULARNAME: Объект
Date:
DAY: день
DAYS: дней
HOUR: час
HOURS: час.
MIN: мин.
MINS: мин.
MONTH: месяц
MONTHS: месяца(ев)
SEC: сек.
SECS: сек.
TIMEDIFFAGO: '{difference} назад'
TIMEDIFFIN: 'in {difference}'
YEAR: год
YEARS: лет
DateField:
NOTSET: 'не установлено'
TODAY: сегодня
VALIDDATEFORMAT2: 'Please enter a valid date format ({format})'
VALIDDATEMAXDATE: 'Your date has to be older or matching the maximum allowed date ({date})'
VALIDDATEMINDATE: 'Your date has to be newer or matching the minimum allowed date ({date})'
DatetimeField:
NOTSET: 'Not set'
Director:
INVALID_REQUEST: 'Неверный запрос'
DropdownField:
CHOOSE: (Выберите)
EmailField:
VALIDATION: 'Please enter an email address'
Email_BounceRecord:
PLURALNAME: 'Email Bounce Records'
SINGULARNAME: 'Email Bounce Record'
Enum:
ANY: Любой
File:
Content: Содержание
Filename: 'Имя файла'
INVALIDEXTENSION: 'Недопустимое расширение файла (допустимые расширения: {extensions})'
INVALIDEXTENSIONSHORT: 'Недопустимое расширение файла'
NOFILESIZE: 'Размер файла 0 байт.'
NOVALIDUPLOAD: 'File is not a valid upload'
Name: Название
PLURALNAME: Файлы
SINGULARNAME: Файл
TOOLARGE: 'Filesize is too large, maximum {size} allowed'
TOOLARGESHORT: 'Filesize exceeds {size}'
Title: Заголовок
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: 'This filetype is not allowed to be uploaded'
FILE: Файл
FROMCOMPUTER: 'From your Computer'
FROMFILESTORE: 'From the File Store'
NOSOURCE: 'Please select a source file to attach'
REPLACE: 'Replace {type}'
FileIFrameField_iframe.ss:
TITLE: 'Image Uploading Iframe'
Filesystem:
<<<<<<< HEAD
SYNCRESULTS: 'Sync complete: {createdcount} items created, {deletedcount} items deleted'
=======
SYNCRESULTS: 'Синхронизация завершена; создано элементов: {createdcount}, удалено элементов: {deletedcount}'
>>>>>>> origin/translation-staging
Folder:
PLURALNAME: Folders
SINGULARNAME: Folder
ForgotPasswordEmail.ss:
HELLO: Здравствуйте
TEXT1: 'Это ваша'
TEXT2: 'ссылка переустановки пароля'
TEXT3: для
Form:
FIELDISREQUIRED: 'Поле %s является обязательным'
SubmitBtnLabel: Go
VALIDATIONCREDITNUMBER: 'Please ensure you have entered the {number} credit card number correctly'
VALIDATIONNOTUNIQUE: 'Введенное значение не уникально'
VALIDATIONPASSWORDSDONTMATCH: 'Пароли не совпадают'
VALIDATIONPASSWORDSNOTEMPTY: 'Пароли не могут быть пустыми'
VALIDATIONSTRONGPASSWORD: 'Passwords must have at least one digit and one alphanumeric character'
VALIDATOR: Валидатор
VALIDCURRENCY: 'Please enter a valid currency'
FormField:
NONE: 'не выбрано'
GridAction:
DELETE_DESCRIPTION: Delete
Delete: Delete
UnlinkRelation: Unlink
GridField:
Add: 'Добавить {name}'
Filter: Filter
FilterBy: 'Фильтровать по'
Find: Find
LEVELUP: 'Уровень выше'
LinkExisting: 'Link Existing'
NewRecord: 'New %s'
NoItemsFound: 'No items found'
PRINTEDAT: 'Printed at'
PRINTEDBY: 'Printed by'
PlaceHolder: 'Найти {type}'
PlaceHolderWithLabels: 'Find {type} by {name}'
RelationSearch: 'Relation search'
ResetFilter: Reset
GridFieldAction_Delete:
DeletePermissionsFailure: 'No delete permissions'
GridFieldDetailForm:
Create: Создать
Delete: Удалить
DeletePermissionsFailure: 'No delete permissions'
Deleted: 'Deleted %s %s'
Save: Сохранить
Saved: 'Сохранено %s %s'
GridFieldItemEditView.ss: null
Group:
AddRole: 'Добавить роль для этой группы'
Code: 'Код группы'
DefaultGroupTitleAdministrators: Администраторы
DefaultGroupTitleContentAuthors: Авторы
Description: Описание
GroupReminder: 'If you choose a parent group, this group will take all it''s roles'
Locked: 'Блокировано?'
<<<<<<< HEAD
NoRoles: 'No roles found'
=======
NoRoles: 'Ролей не найдено'
>>>>>>> origin/translation-staging
PLURALNAME: Groups
Parent: 'Родительская группа'
RolesAddEditLink: 'Добавить/редактировать роли'
SINGULARNAME: Group
Sort: 'Порядок сортировки'
has_many_Permissions: 'Права групп пользователей'
many_many_Members: 'Члены группы'
GroupImportForm:
Help1: '<p>Import one or more groups in <em>CSV</em> format (comma-separated values). <small><a href="#" class="toggle-advanced">Show advanced usage</a></small></p>'
Help2: '<div class="advanced"> <h4>Advanced usage</h4> <ul> <li>Allowed columns: <em>%s</em></li> <li>Existing groups are matched by their unique <em>Code</em> value, and updated with any new values from the imported file</li> <li>Group hierarchies can be created by using a <em>ParentCode</em> column.</li> <li>Permission codes can be assigned by the <em>PermissionCode</em> column. Existing permission codes are not cleared.</li> </ul></div>'
ResultCreated: 'Создано {count} групп'
ResultDeleted: 'Deleted %d groups'
ResultUpdated: 'Updated %d groups'
Hierarchy:
InfiniteLoopNotAllowed: 'Infinite loop found within the "{type}" hierarchy. Please change the parent to resolve this'
HtmlEditorField:
ADDURL: 'Добавить URL'
ADJUSTDETAILSDIMENSIONS: 'Details &amp; dimensions'
ANCHORVALUE: Якорь
BUTTONINSERT: Insert
BUTTONINSERTLINK: 'Вставить ссылку'
BUTTONREMOVELINK: 'Удалить ссылку'
BUTTONUpdate: Update
CAPTIONTEXT: 'Caption text'
CSSCLASS: Выравнивание/Стиль
CSSCLASSCENTER: 'По центру без текста по бокам'
CSSCLASSLEFT: 'Слева с обтеканием текста'
CSSCLASSLEFTALONE: 'Независимо слева.'
CSSCLASSRIGHT: 'Справа с обтеканием текста'
DETAILS: Details
EMAIL: 'Адрес email'
FILE: Файл
FOLDER: Папка
FROMCMS: 'From the CMS'
FROMCOMPUTER: 'From your computer'
FROMWEB: 'From the web'
FindInFolder: 'Найти в папке'
IMAGEALT: 'Альтернативный текст (alt)'
IMAGEALTTEXT: 'Альтернативный текст (alt) - показывается, если изображение недоступно'
IMAGEALTTEXTDESC: 'Shown to screen readers or if image can not be displayed'
IMAGEDIMENSIONS: Размеры
IMAGEHEIGHTPX: Высота
IMAGETITLE: 'Title text (tooltip) - for additional information about the image'
IMAGETITLETEXT: 'Title text (tooltip)'
IMAGETITLETEXTDESC: 'For additional information about the image'
IMAGEWIDTHPX: Ширина
INSERTMEDIA: 'Insert Media'
LINK: Ссылка
LINKANCHOR: 'Якорь на этой странице'
LINKDESCR: 'Описание ссылки'
LINKEMAIL: 'Адрес email'
LINKEXTERNAL: 'Другой сайт'
LINKFILE: 'Скачивание файла'
LINKINTERNAL: 'Страницу данного сайта'
LINKOPENNEWWIN: 'Открыть ссылку в новом окне?'
LINKTO: 'Ссылка на'
PAGE: Страница
URL: URL
URLNOTANOEMBEDRESOURCE: 'The URL ''{url}'' could not be turned into a media resource.'
UpdateMEDIA: 'Update Media'
Image:
<<<<<<< HEAD
PLURALNAME: Files
SINGULARNAME: File
=======
PLURALNAME: Файлы
SINGULARNAME: Файл
>>>>>>> origin/translation-staging
ImageField:
IMAGE: Image
Image_Cached:
PLURALNAME: Files
SINGULARNAME: File
Image_iframe.ss:
TITLE: 'Iframe загрузки изображений'
LeftAndMain:
CANT_REORGANISE: 'У вас нет права редактировать страницы верхнего уровня. Изменения не были сохранены.'
DELETED: Удалено.
DropdownBatchActionsDefault: Actions
HELP: Помощь
PAGETYPE: 'Тип страницы:'
PERMAGAIN: 'Вы вышли из Системы Управления Сайтом. Если Вы хотите войти снова, введите внизу имя пользователя и пароль.'
PERMALREADY: 'Извините, у вас нет доступа к этому разделу Системы Управления. Если Вы хотите войти под другой учетной записью, сделайте это ниже'
PERMDEFAULT: 'Введите ваши адрес электр. почты и пароль для доступа к системе.'
PLEASESAVE: 'Пожалуйста, сохраните страницу: ее нельзя обновить, т.к. она еще не была сохранена.'
PreviewButton: Просмотр
REORGANISATIONSUCCESSFUL: 'Reorganised the site tree successfully.'
SAVEDUP: Сохранено.
VersionUnknown: unknown
LeftAndMain_Menu.ss:
Hello: Hi
LOGOUT: 'Log out'
LoginAttempt:
Email: Email
IP: IP-адрес
PLURALNAME: 'Login Attempts'
SINGULARNAME: 'Login Attempt'
Status: Статус
Member:
ADDGROUP: 'Добавить группу'
BUTTONCHANGEPASSWORD: 'Изменить пароль'
BUTTONLOGIN: Войти
BUTTONLOGINOTHER: 'Войти под другим именем'
BUTTONLOSTPASSWORD: 'Я забыл пароль'
CONFIRMNEWPASSWORD: 'Подтвердить новый пароль'
CONFIRMPASSWORD: 'Подтвердить пароль'
DATEFORMAT: 'Date format'
DefaultAdminFirstname: 'Default Admin'
DefaultDateTime: 'по умолчанию'
EMAIL: Email
EMPTYNEWPASSWORD: 'Поле для нового пароля не может быть пустым; пожалуйста, повторите попытку'
ENTEREMAIL: 'Введите email, чтобы получить ссылку на сброс пароля.'
ERRORLOCKEDOUT: 'Ваша учетная запись временно заблокирована из-за слишком большого количества неудачных попыток авторизации. Пожалуйста, попытайтесь снова через 20 минут.'
ERRORNEWPASSWORD: 'Вы ввели Ваш новый пароль по-разному, попробуйте снова'
ERRORPASSWORDNOTMATCH: 'Введенный пароль неверен, попробуйте снова'
ERRORWRONGCRED: 'Вероятно адрес email или пароль введены неверно. Попробуйте снова.'
FIRSTNAME: Имя
INTERFACELANG: 'Язык интерфейса'
INVALIDNEWPASSWORD: 'Недопустимый пароль: {password}'
LOGGEDINAS: 'Вы вошли в систему как {name}.'
NEWPASSWORD: 'Новый пароль'
PASSWORD: Пароль
PLURALNAME: 'Члены группы'
PROFILESAVESUCCESS: 'Сохранение прошло успешно'
REMEMBERME: 'Запомнить меня?'
SINGULARNAME: 'Член группы'
SUBJECTPASSWORDCHANGED: 'Ваш пароль изменен'
SUBJECTPASSWORDRESET: 'Ссылка для переустановки пароля'
SURNAME: Фамилия
<<<<<<< HEAD
TIMEFORMAT: 'Time format'
=======
TIMEFORMAT: 'Формат времени'
>>>>>>> origin/translation-staging
VALIDATIONMEMBEREXISTS: 'Этот адрес email уже зарегистрирован'
ValidationIdentifierFailed: 'Can''t overwrite existing member #{id} with identical identifier ({name} = {value}))'
WELCOMEBACK: 'Добро пожаловать, {firstname}'
YOUROLDPASSWORD: 'Ваш прежний пароль'
belongs_many_many_Groups: Группы
db_LastVisited: 'Дата последнего видита'
db_Locale: 'Локаль интерфейса'
db_LockedOutUntil: 'Заблокировано до'
db_NumVisit: 'Количество посещений'
db_Password: Пароль
db_PasswordExpiry: 'Дата устаревания пароля'
MemberAuthenticator:
TITLE: 'Email и Пароль'
MemberDatetimeOptionsetField:
AMORPM: 'AM (Ante meridiem) or PM (Post meridiem)'
<<<<<<< HEAD
'APPLY FILTER': 'Apply Filter'
=======
'APPLY FILTER': 'Применить фильтр'
>>>>>>> origin/translation-staging
Custom: Custom
DATEFORMATBAD: 'Date format is invalid'
DAYNOLEADING: 'Day of month without leading zero'
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: Preview
SHORTMONTH: 'Short name of month (e.g. Jun)'
TOGGLEHELP: 'Toggle formatting help'
TWODIGITDAY: 'Two-digit day of month'
TWODIGITHOUR: 'Two digits of hour (00 through 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: 'Two-digit year'
MemberImportForm:
Help1: '<p>Import users in <em>CSV format</em> (comma-separated values). <small><a href="#" class="toggle-advanced">Show advanced usage</a></small></p>'
Help2: '<div class="advanced"> <h4>Advanced usage</h4> <ul> <li>Allowed columns: <em>%s</em></li> <li>Existing users are matched by their unique <em>Code</em> property, and updated with any new values from the imported file.</li> <li>Groups can be assigned by the <em>Groups</em> column. Groups are identified by their <em>Code</em> property, multiple groups can be separated by comma. Existing group memberships are not cleared.</li> </ul></div>'
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: '<p>The password reset link is invalid or expired.</p><p>You can request a new one <a href="{link1}">here</a> or change your password after you <a href="{link2}">logged in</a>.</p>'
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.<br />They are inherited from parent groups if required.'
TABROLES: Роли
Users: Пользователи
SecurityAdmin_MemberImportForm:
BtnImport: 'Import from CSV'
FileFieldLabel: 'CSV File <small>(Allowed extensions: *.csv)</small>'
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: Версии

View File

@ -31,34 +31,21 @@ abstract class DataExtension extends Extension {
'api_access' => false, 'api_access' => false,
); );
static function add_to_class($class, $extensionClass, $args = null) { static function get_extra_config($class, $extension, $args) {
if(method_exists($class, 'extraDBFields')) { if(method_exists($extension, 'extraDBFields')) {
$extraStaticsMethod = 'extraDBFields'; $extraStaticsMethod = 'extraDBFields';
} else { } else {
$extraStaticsMethod = 'extraStatics'; $extraStaticsMethod = 'extraStatics';
} }
$statics = Injector::inst()->get($extensionClass, true, $args)->$extraStaticsMethod($class, $extensionClass); $statics = Injector::inst()->get($extension, true, $args)->$extraStaticsMethod();
if ($statics) { if ($statics) {
Deprecation::notice('3.1.0', "$extraStaticsMethod deprecated. Just define statics on your extension, or use add_to_class", Deprecation::SCOPE_GLOBAL); Deprecation::notice('3.1.0', "$extraStaticsMethod deprecated. Just define statics on your extension, or use get_extra_config", Deprecation::SCOPE_GLOBAL);
return $statics;
// 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;
} }
parent::add_to_class($class, $extensionClass, $args);
} }
public static function unload_extra_statics($class, $extension) { public static function unload_extra_statics($class, $extension) {
throw new Exception('unload_extra_statics gone'); throw new Exception('unload_extra_statics gone');
} }

View File

@ -25,9 +25,10 @@ class Hierarchy extends DataExtension {
function augmentWrite(&$manipulation) { function augmentWrite(&$manipulation) {
} }
static function add_to_class($class, $extensionClass, $args = null) { static function get_extra_config($class, $extension, $args) {
Config::inst()->update($class, 'has_one', array('Parent' => $class)); return array(
parent::add_to_class($class, $extensionClass, $args); 'has_one' => array('Parent' => $class)
);
} }
/** /**

View File

@ -107,9 +107,10 @@ class Versioned extends DataExtension {
'Version' => 'Int' 'Version' => 'Int'
); );
static function add_to_class($class, $extensionClass, $args = null) { static function get_extra_config($class, $extension, $args) {
Config::inst()->update($class, 'has_many', array('Versions' => $class)); array(
parent::add_to_class($class, $extensionClass, $args); 'has_many' => array('Versions' => $class)
);
} }
/** /**

View File

@ -75,14 +75,16 @@ class FulltextSearchable extends DataExtension {
parent::__construct(); parent::__construct();
} }
static function add_to_class($class, $extensionClass, $args = null) { static function get_extra_config($class, $extensionClass, $args) {
Config::inst()->update($class, 'indexes', array('SearchFields' => array( return array(
'type' => 'fulltext', 'indexes' => array(
'name' => 'SearchFields', 'SearchFields' => array(
'value' => $args[0] 'type' => 'fulltext',
))); 'name' => 'SearchFields',
'value' => $args[0]
parent::add_to_class($class, $extensionClass, $args); )
)
);
} }
/** /**

View File

@ -9,7 +9,7 @@
<div class="ss-uploadfield-item-info"> <div class="ss-uploadfield-item-info">
<label class="ss-uploadfield-fromcomputer ss-ui-button ss-ui-action-constructive" title="<% _t('AssetUploadField.FROMCOMPUTERINFO', 'Upload from your computer') %>" data-icon="drive-upload"> <label class="ss-uploadfield-fromcomputer ss-ui-button ss-ui-action-constructive" title="<% _t('AssetUploadField.FROMCOMPUTERINFO', 'Upload from your computer') %>" data-icon="drive-upload">
<% _t('AssetUploadField.TOUPLOAD', 'Choose file(s) to upload...') %> <% _t('AssetUploadField.TOUPLOAD', 'Choose files to upload...') %>
<input id="$id" name="$getName" class="$extraClass ss-uploadfield-fromcomputer-fileinput" data-config="$configString" type="file"<% if $multiple %> multiple="multiple"<% end_if %> title="<% _t('AssetUploadField.FROMCOMPUTER', 'Choose files from your computer') %>" /> <input id="$id" name="$getName" class="$extraClass ss-uploadfield-fromcomputer-fileinput" data-config="$configString" type="file"<% if $multiple %> multiple="multiple"<% end_if %> title="<% _t('AssetUploadField.FROMCOMPUTER', 'Choose files from your computer') %>" />
</label> </label>

View File

@ -9,7 +9,7 @@
<div class="ss-uploadfield-item-info"> <div class="ss-uploadfield-item-info">
<label class="ss-uploadfield-fromcomputer ss-ui-button ss-ui-action-constructive" title="<% _t('AssetUploadField.FROMCOMPUTERINFO', 'Upload from your computer') %>" data-icon="drive-upload"> <label class="ss-uploadfield-fromcomputer ss-ui-button ss-ui-action-constructive" title="<% _t('AssetUploadField.FROMCOMPUTERINFO', 'Upload from your computer') %>" data-icon="drive-upload">
<% _t('AssetUploadField.TOUPLOAD', 'Choose file(s) to upload...') %> <% _t('AssetUploadField.TOUPLOAD', 'Choose files to upload...') %>
<input id="$id" name="$getName" class="$extraClass ss-uploadfield-fromcomputer-fileinput" data-config="$configString" type="file"<% if $multiple %> multiple="multiple"<% end_if %> title="<% _t('AssetUploadField.FROMCOMPUTER', 'Choose files from your computer') %>" /> <input id="$id" name="$getName" class="$extraClass ss-uploadfield-fromcomputer-fileinput" data-config="$configString" type="file"<% if $multiple %> multiple="multiple"<% end_if %> title="<% _t('AssetUploadField.FROMCOMPUTER', 'Choose files from your computer') %>" />
</label> </label>

View File

@ -1,6 +1,11 @@
<tr> <tr>
<td class="bottom-all" colspan="$Colspan"> <td class="bottom-all" colspan="$Colspan">
<span class="pagination-records-number">$FirstShownRecord - $LastShownRecord of $NumRecords</span> <span class="pagination-records-number">
$FirstShownRecord -
$LastShownRecord
<% _t('TableListField_PageControls.ss.OF', 'of', 'Example: View 1 of 2') %>
$NumRecords
</span>
<% if Message %> <% if Message %>
<div class="datagrid-footer-message">$Message</div> <div class="datagrid-footer-message">$Message</div>

View File

@ -0,0 +1,89 @@
<?php
class ConfigManifestTest_ConfigManifestAccess extends SS_ConfigManifest {
public function relativeOrder($a, $b) {
return parent::relativeOrder($a, $b);
}
}
class ConfigManifestTest extends SapphireTest {
function testRelativeOrder() {
$accessor = new ConfigManifestTest_ConfigManifestAccess(BASE_PATH, true, false);
// A fragment with a fully wildcard before rule
$beforeWildcarded = array(
'module' => 'foo', 'file' => 'alpha', 'name' => '1',
'before' => array(array('module' => '*', 'file' => '*', 'name' => '*'))
);
// A fragment with a fully wildcard before rule and a fully explicit after rule
$beforeWildcardedAfterExplicit = array_merge($beforeWildcarded, array(
'after' => array(array('module' => 'bar', 'file' => 'beta', 'name' => '2'))
));
// A fragment with a fully wildcard before rule and two fully explicit after rules
$beforeWildcardedAfterTwoExplicitRules = array_merge($beforeWildcarded, array(
'after' => array(
array('module' => 'bar', 'file' => 'beta', 'name' => '2'),
array('module' => 'baz', 'file' => 'gamma', 'name' => '3')
)
));
// A fragment with a fully wildcard before rule and a partially explicit after rule
$beforeWildcardedAfterPartialWildcarded = array_merge($beforeWildcarded, array(
'after' => array(array('module' => 'bar', 'file' => 'beta', 'name' => '*'))
));
// Wildcard should match any module
$this->assertEquals($accessor->relativeOrder(
$beforeWildcarded,
array('module' => 'qux', 'file' => 'delta', 'name' => '4')
), 'before');
// Wildcard should match any module even if there is an opposing rule, if opposing rule doesn't match
$this->assertEquals($accessor->relativeOrder(
$beforeWildcardedAfterExplicit,
array('module' => 'qux', 'file' => 'delta', 'name' => '4')
), 'before');
// Wildcard should match any module even if there is an opposing rule, if opposing rule doesn't match, no matter how many opposing rules
$this->assertEquals($accessor->relativeOrder(
$beforeWildcardedAfterExplicit,
array('module' => 'qux', 'file' => 'delta', 'name' => '4')
), 'before');
// Wildcard should match any module even if there is an opposing rule, if opposing rule doesn't match (even if some portions do)
$this->assertEquals($accessor->relativeOrder(
$beforeWildcardedAfterExplicit,
array('module' => 'bar', 'file' => 'beta', 'name' => 'nomatchy')
), 'before');
// When opposing rule matches, wildcard should be ignored
$this->assertEquals($accessor->relativeOrder(
$beforeWildcardedAfterExplicit,
array('module' => 'bar', 'file' => 'beta', 'name' => '2')
), 'after');
// When any one of mutiple opposing rule exists, wildcard should be ignored
$this->assertEquals($accessor->relativeOrder(
$beforeWildcardedAfterTwoExplicitRules,
array('module' => 'bar', 'file' => 'beta', 'name' => '2')
), 'after');
$this->assertEquals($accessor->relativeOrder(
$beforeWildcardedAfterTwoExplicitRules,
array('module' => 'baz', 'file' => 'gamma', 'name' => '3')
), 'after');
// When two opposed wildcard rules, and more specific one doesn't match, other should win
$this->assertEquals($accessor->relativeOrder(
$beforeWildcardedAfterPartialWildcarded,
array('module' => 'qux', 'file' => 'delta', 'name' => '4')
), 'before');
// When two opposed wildcard rules, and more specific one does match, more specific one should win
$this->assertEquals($accessor->relativeOrder(
$beforeWildcardedAfterPartialWildcarded,
array('module' => 'bar', 'file' => 'beta', 'name' => 'wildcardmatchy')
), 'after');
}
}