From fa37c448a5ce22330be8985acf1a71769e472a2c Mon Sep 17 00:00:00 2001 From: Hamish Friedlander Date: Thu, 23 Aug 2012 09:29:13 +1200 Subject: [PATCH 01/10] API Reverse config extra statics control flow Config system used to provide an add_static_source method, which was intended for use by Extensions to add statics. But extensions for a class arent initialised until at least one instance of that class is created, so before that the Config system didnt include values from extensions This patch reverses the control flow, so that the Config system explictly asks each Object for its additional config sources via the new method get_extra_config_sources. This method returns an array that can contain string names of classes and also raw associative arrays. The developer visible change is that Extension#add_to_class has been deprecated. Instead there is a new method, get_extra_config, which has the same method signature but needs to guarantee that it doesnt cause side effects. Additionally there is no need to call parent::get_extra_config - this is handled automatically. --- core/ClassInfo.php | 19 +++++++++ core/Config.php | 19 ++++----- core/Extension.php | 5 +-- core/Object.php | 80 ++++++++++++++++++++++++----------- model/DataExtension.php | 25 +++-------- model/Hierarchy.php | 7 +-- model/Versioned.php | 7 +-- search/FulltextSearchable.php | 18 ++++---- 8 files changed, 107 insertions(+), 73 deletions(-) diff --git a/core/ClassInfo.php b/core/ClassInfo.php index 39baa1765..7aa17fa56 100644 --- a/core/ClassInfo.php +++ b/core/ClassInfo.php @@ -231,6 +231,25 @@ class ClassInfo { return $matchedClasses; } + + private static $method_from_cache = array(); + + static function has_method_from($class, $method, $compclass) { + if (!isset(self::$method_from_cache[$class])) self::$method_from_cache[$class] = array(); + + if (!array_key_exists($method, self::$method_from_cache[$class])) { + self::$method_from_cache[$class][$method] = false; + + $classRef = new ReflectionClass($class); + + if ($classRef->hasMethod($method)) { + $methodRef = $classRef->getMethod($method); + self::$method_from_cache[$class][$method] = $methodRef->getDeclaringClass()->getName(); + } + } + + return self::$method_from_cache[$class][$method] == $compclass; + } } diff --git a/core/Config.php b/core/Config.php index 6bc413be3..4cf55611b 100644 --- a/core/Config.php +++ b/core/Config.php @@ -173,12 +173,6 @@ class Config { $this->collectConfigPHPSettings = false; } - static $extra_static_sources = array(); - - static function add_static_source($forclass, $donorclass) { - self::$extra_static_sources[$forclass][] = $donorclass; - } - /** @var [Config_ForClass] - The list of Config_ForClass instances, keyed off class */ static protected $for_class_instances = array(); @@ -371,14 +365,17 @@ class Config { // Then look at the static variables $nothing = new stdClass(); - $classes = array($class); + + $sources = array($class); // Include extensions only if not flagged not to, and some have been set - if ((($sourceOptions & self::EXCLUDE_EXTRA_SOURCES) != self::EXCLUDE_EXTRA_SOURCES) && isset(self::$extra_static_sources[$class])) { - $classes = array_merge($classes, self::$extra_static_sources[$class]); + if (($sourceOptions & self::EXCLUDE_EXTRA_SOURCES) != self::EXCLUDE_EXTRA_SOURCES) { + $extraSources = Object::get_extra_config_sources($class); + if ($extraSources) $sources = array_merge($sources, $extraSources); } - foreach ($classes as $staticSource) { - $value = Object::static_lookup($staticSource, $name, $nothing); + foreach ($sources as $staticSource) { + if (is_array($staticSource)) $value = isset($staticSource[$name]) ? $staticSource[$name] : $nothing; + else $value = Object::static_lookup($staticSource, $name, $nothing); if ($value !== $nothing) { self::merge_low_into_high($result, $value, $suppress); diff --git a/core/Extension.php b/core/Extension.php index 7eb2a8ce7..70072616f 100644 --- a/core/Extension.php +++ b/core/Extension.php @@ -46,14 +46,11 @@ abstract class Extension { /** * Called when this extension is added to a particular class * - * TODO: This is likely to be replaced by event sytem before 3.0 final, so be aware - * this API is fairly unstable. - * * @static * @param $class */ static function add_to_class($class, $extensionClass, $args = null) { - Config::add_static_source($class, $extensionClass); + // NOP } /** diff --git a/core/Object.php b/core/Object.php index b37423762..1b7f98a07 100755 --- a/core/Object.php +++ b/core/Object.php @@ -463,6 +463,7 @@ abstract class Object { if($subclasses) foreach($subclasses as $subclass) { unset(self::$classes_constructed[$subclass]); unset(self::$extra_methods[$subclass]); + unset(self::$extension_sources[$subclass]); } Config::inst()->update($class, 'extensions', array($extension)); @@ -505,6 +506,7 @@ abstract class Object { if($subclasses) foreach($subclasses as $subclass) { unset(self::$classes_constructed[$subclass]); unset(self::$extra_methods[$subclass]); + unset(self::$extension_sources[$subclass]); } } @@ -531,38 +533,66 @@ abstract class Object { // ----------------------------------------------------------------------------------------------------------------- - private static $_added_extensions = array(); + private static $extension_sources = array(); + + // Don't bother checking some classes that should never be extended + private static $unextendable_classes = array('Object', 'ViewableData', 'RequestHandler'); + + static public function get_extra_config_sources($class = null) { + if($class === null) $class = get_called_class(); + + // If this class is unextendable, NOP + if(in_array($class, self::$unextendable_classes)) return; + + // If we have a pre-cached version, use that + if(array_key_exists($class, self::$extension_sources)) return self::$extension_sources[$class]; + + // Variable to hold sources in + $sources = null; + + // Get a list of extensions + $extensions = Config::inst()->get($class, 'extensions', Config::UNINHERITED | Config::EXCLUDE_EXTRA_SOURCES); + + if($extensions) { + // Build a list of all sources; + $sources = array(); + + foreach($extensions as $extension) { + list($extensionClass, $extensionArgs) = self::parse_class_spec($extension); + $sources[] = $extensionClass; + + if(!ClassInfo::has_method_from($extensionClass, 'add_to_class', 'Extension')) { + Deprecation::notice('3.1.0', "add_to_class deprecated on $extensionClass. Use get_extra_config instead"); + } + + call_user_func(array($extensionClass, 'add_to_class'), $class, $extensionClass, $extensionArgs); + + foreach(array_reverse(ClassInfo::ancestry($extensionClass)) as $extensionClassParent) { + if (ClassInfo::has_method_from($extensionClassParent, 'get_extra_config', $extensionClassParent)) { + $extras = $extensionClassParent::get_extra_config($class, $extensionClass, $extensionArgs); + if ($extras) $sources[] = $extras; + } + } + } + } + + return self::$extension_sources[$class] = $sources; + } public function __construct() { $this->class = get_class($this); - // Don't bother checking some classes that should never be extended - static $notExtendable = array('Object', 'ViewableData', 'RequestHandler'); - - if($extensionClasses = ClassInfo::ancestry($this->class)) foreach($extensionClasses as $class) { - if(in_array($class, $notExtendable)) continue; - if($extensions = Config::inst()->get($class, 'extensions', Config::UNINHERITED)) { - foreach($extensions as $extension) { - // Get the extension class for this extension - list($extensionClass, $extensionArgs) = self::parse_class_spec($extension); + foreach(ClassInfo::ancestry(get_called_class()) as $class) { + if(in_array($class, self::$unextendable_classes)) continue; + $extensions = Config::inst()->get($class, 'extensions', Config::UNINHERITED | Config::EXCLUDE_EXTRA_SOURCES); - // If we haven't told that extension it's attached to this class yet, do that now - if (!isset(self::$_added_extensions[$extensionClass][$class])) { - // First call the add_to_class method - this will inherit down & is defined on Extension, so if not defined, no worries - call_user_func(array($extensionClass, 'add_to_class'), $class, $extensionClass, $extensionArgs); - - // Then register it as having been told about us - if (!isset(self::$_added_extensions[$extensionClass])) self::$_added_extensions[$extensionClass] = array($class => true); - else self::$_added_extensions[$extensionClass][$class] = true; - } - - $instance = self::create_from_string($extension); - $instance->setOwner(null, $class); - $this->extension_instances[$instance->class] = $instance; - } + if($extensions) foreach($extensions as $extension) { + $instance = self::create_from_string($extension); + $instance->setOwner(null, $class); + $this->extension_instances[$instance->class] = $instance; } } - + if(!isset(self::$classes_constructed[$this->class])) { $this->defineMethods(); self::$classes_constructed[$this->class] = true; diff --git a/model/DataExtension.php b/model/DataExtension.php index b2dae0611..d975f7db2 100644 --- a/model/DataExtension.php +++ b/model/DataExtension.php @@ -31,34 +31,21 @@ abstract class DataExtension extends Extension { 'api_access' => false, ); - static function add_to_class($class, $extensionClass, $args = null) { - if(method_exists($class, 'extraDBFields')) { + static function get_extra_config($class, $extension, $args) { + if(method_exists($extension, 'extraDBFields')) { $extraStaticsMethod = 'extraDBFields'; } else { $extraStaticsMethod = 'extraStatics'; } - $statics = Injector::inst()->get($extensionClass, true, $args)->$extraStaticsMethod($class, $extensionClass); + $statics = Injector::inst()->get($extension, true, $args)->$extraStaticsMethod(); if ($statics) { - Deprecation::notice('3.1.0', "$extraStaticsMethod deprecated. Just define statics on your extension, or use add_to_class", Deprecation::SCOPE_GLOBAL); - - // TODO: This currently makes extraStatics the MOST IMPORTANT config layer, not the least - foreach (self::$extendable_statics as $key => $merge) { - if (isset($statics[$key])) { - if (!$merge) Config::inst()->remove($class, $key); - Config::inst()->update($class, $key, $statics[$key]); - } - } - - // TODO - remove this - DataObject::$cache_has_own_table[$class] = null; - DataObject::$cache_has_own_table_field[$class] = null; + Deprecation::notice('3.1.0', "$extraStaticsMethod deprecated. Just define statics on your extension, or use get_extra_config", Deprecation::SCOPE_GLOBAL); + return $statics; } - - parent::add_to_class($class, $extensionClass, $args); } - + public static function unload_extra_statics($class, $extension) { throw new Exception('unload_extra_statics gone'); } diff --git a/model/Hierarchy.php b/model/Hierarchy.php index d6100fa29..3bcc25a20 100644 --- a/model/Hierarchy.php +++ b/model/Hierarchy.php @@ -25,9 +25,10 @@ class Hierarchy extends DataExtension { function augmentWrite(&$manipulation) { } - static function add_to_class($class, $extensionClass, $args = null) { - Config::inst()->update($class, 'has_one', array('Parent' => $class)); - parent::add_to_class($class, $extensionClass, $args); + static function get_extra_config($class, $extension, $args) { + return array( + 'has_one' => array('Parent' => $class) + ); } /** diff --git a/model/Versioned.php b/model/Versioned.php index 67dedb5bd..01e583ad5 100644 --- a/model/Versioned.php +++ b/model/Versioned.php @@ -107,9 +107,10 @@ class Versioned extends DataExtension { 'Version' => 'Int' ); - static function add_to_class($class, $extensionClass, $args = null) { - Config::inst()->update($class, 'has_many', array('Versions' => $class)); - parent::add_to_class($class, $extensionClass, $args); + static function get_extra_config($class, $extension, $args) { + array( + 'has_many' => array('Versions' => $class) + ); } /** diff --git a/search/FulltextSearchable.php b/search/FulltextSearchable.php index 77f660fb1..006ac028b 100644 --- a/search/FulltextSearchable.php +++ b/search/FulltextSearchable.php @@ -75,14 +75,16 @@ class FulltextSearchable extends DataExtension { parent::__construct(); } - static function add_to_class($class, $extensionClass, $args = null) { - Config::inst()->update($class, 'indexes', array('SearchFields' => array( - 'type' => 'fulltext', - 'name' => 'SearchFields', - 'value' => $args[0] - ))); - - parent::add_to_class($class, $extensionClass, $args); + static function get_extra_config($class, $extensionClass, $args) { + return array( + 'indexes' => array( + 'SearchFields' => array( + 'type' => 'fulltext', + 'name' => 'SearchFields', + 'value' => $args[0] + ) + ) + ); } /** From 3b592122fd4616762421b655937efafbe50ba615 Mon Sep 17 00:00:00 2001 From: Ingo Schommer Date: Sun, 26 Aug 2012 23:07:20 +0200 Subject: [PATCH 02/10] i18n for "select an anchor" string (see #7798) --- javascript/HtmlEditorField.js | 6 +++++- javascript/lang/en_US.js | 1 + lang/en.yml | 1 + templates/AssetUploadField.ss | 2 +- templates/HtmlEditorField_UploadField.ss | 2 +- 5 files changed, 9 insertions(+), 3 deletions(-) diff --git a/javascript/HtmlEditorField.js b/javascript/HtmlEditorField.js index 5c19463fd..d99cdcdde 100644 --- a/javascript/HtmlEditorField.js +++ b/javascript/HtmlEditorField.js @@ -599,7 +599,11 @@ ss.editorWrappers['default'] = ss.editorWrappers.tinyMCE; } selector.empty(); - selector.append($('')); + selector.append($( + '' + )); for (var j = 0; j < anchors.length; j++) { selector.append($('')); } diff --git a/javascript/lang/en_US.js b/javascript/lang/en_US.js index ec022a545..5432118e0 100644 --- a/javascript/lang/en_US.js +++ b/javascript/lang/en_US.js @@ -18,6 +18,7 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') { 'FILEIFRAMEFIELD.CONFIRMDELETE': 'Are you sure you want to delete this file?', 'LeftAndMain.IncompatBrowserWarning': 'Your browser is not compatible with the CMS interface. Please use Internet Explorer 7+, Google Chrome 10+ or Mozilla Firefox 3.5+.', 'GRIDFIELD.ERRORINTRANSACTION': 'An error occured while fetching data from the server\n Please try again later.', + 'HtmlEditorField.SelectAnchor': 'Select an anchor', 'UploadField.ConfirmDelete': 'Are you sure you want to remove this file from the server filesystem?', 'UploadField.PHP_MAXFILESIZE': 'File exceeds upload_max_filesize (php.ini directive)', 'UploadField.HTML_MAXFILESIZE': 'File exceeds MAX_FILE_SIZE (HTML form directive)', diff --git a/lang/en.yml b/lang/en.yml index b297716bb..bbc07d7b2 100644 --- a/lang/en.yml +++ b/lang/en.yml @@ -25,6 +25,7 @@ en: FROMCOMPUTER: 'Choose files from your computer' FROMCOMPUTERINFO: 'Upload from your computer' TOTAL: Total + TOUPLOAD: 'Choose files to upload...' UPLOADINPROGRESS: 'Please wait… upload in progress' UPLOADOR: OR BBCodeParser: diff --git a/templates/AssetUploadField.ss b/templates/AssetUploadField.ss index 6d7dc0746..70f270438 100644 --- a/templates/AssetUploadField.ss +++ b/templates/AssetUploadField.ss @@ -9,7 +9,7 @@
diff --git a/templates/HtmlEditorField_UploadField.ss b/templates/HtmlEditorField_UploadField.ss index 9f6a0d043..6eefe6e34 100644 --- a/templates/HtmlEditorField_UploadField.ss +++ b/templates/HtmlEditorField_UploadField.ss @@ -9,7 +9,7 @@
From 2fab657fcee6f697de428c4810960222e6eb7677 Mon Sep 17 00:00:00 2001 From: Ingo Schommer Date: Sun, 26 Aug 2012 23:13:42 +0200 Subject: [PATCH 03/10] i18n for CMS section titles (see #7798) --- admin/code/LeftAndMain.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/admin/code/LeftAndMain.php b/admin/code/LeftAndMain.php index e96b1c665..e789450cc 100644 --- a/admin/code/LeftAndMain.php +++ b/admin/code/LeftAndMain.php @@ -336,9 +336,8 @@ class LeftAndMain extends Controller implements PermissionProvider { } function handleRequest(SS_HTTPRequest $request, DataModel $model = null) { - $title = $this->Title(); - $response = parent::handleRequest($request, $model); + $title = $this->Title(); if(!$response->getHeader('X-Controller')) $response->addHeader('X-Controller', $this->class); if(!$response->getHeader('X-Title')) $response->addHeader('X-Title', $title); @@ -1342,8 +1341,10 @@ class LeftAndMain extends Controller implements PermissionProvider { * @return string */ function SectionTitle() { - if($title = $this->stat('menu_title')) return $title; - + $class = get_class($this); + $defaultTitle = LeftAndMain::menu_title_for_class($class); + if($title = _t("{$class}.MENUTITLE", $defaultTitle)) return $title; + foreach($this->MainMenu() as $menuItem) { if($menuItem->LinkingMode != 'link') return $menuItem->Title; } From 8dccb7f7d7943789ec6986ca47f6261a4aa6efd3 Mon Sep 17 00:00:00 2001 From: Ingo Schommer Date: Sun, 26 Aug 2012 23:20:59 +0200 Subject: [PATCH 04/10] i18n for GridField pagination footer (see #7798) --- templates/Includes/GridFieldFooter.ss | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/templates/Includes/GridFieldFooter.ss b/templates/Includes/GridFieldFooter.ss index 97060c7d4..f4b47d73d 100644 --- a/templates/Includes/GridFieldFooter.ss +++ b/templates/Includes/GridFieldFooter.ss @@ -1,6 +1,11 @@ - $FirstShownRecord - $LastShownRecord of $NumRecords + + $FirstShownRecord - + $LastShownRecord + <% _t('TableListField_PageControls.ss.OF', 'of', 'Example: View 1 of 2') %> + $NumRecords + <% if Message %> From 0a6a3fa9363bf1d8b20d1551b7f40105af6870e8 Mon Sep 17 00:00:00 2001 From: Ingo Schommer Date: Mon, 27 Aug 2012 00:02:52 +0200 Subject: [PATCH 05/10] i18n for file type descriptors (see #7798) --- filesystem/File.php | 42 +++++++++++++++++++++--------------------- lang/en.yml | 19 +++++++++++++++++++ 2 files changed, 40 insertions(+), 21 deletions(-) diff --git a/filesystem/File.php b/filesystem/File.php index 730401c48..c09cc0364 100644 --- a/filesystem/File.php +++ b/filesystem/File.php @@ -749,27 +749,27 @@ class File extends DataObject { */ function getFileType() { $types = array( - 'gif' => 'GIF image - good for diagrams', - 'jpg' => 'JPEG image - good for photos', - 'jpeg' => 'JPEG image - good for photos', - 'png' => 'PNG image - good general-purpose format', - 'ico' => 'Icon image', - 'tiff' => 'Tagged image format', - 'doc' => 'Word document', - 'xls' => 'Excel spreadsheet', - 'zip' => 'ZIP compressed file', - 'gz' => 'GZIP compressed file', - 'dmg' => 'Apple disk image', - 'pdf' => 'Adobe Acrobat PDF file', - 'mp3' => 'MP3 audio file', - 'wav' => 'WAV audo file', - 'avi' => 'AVI video file', - 'mpg' => 'MPEG video file', - 'mpeg' => 'MPEG video file', - 'js' => 'Javascript file', - 'css' => 'CSS file', - 'html' => 'HTML file', - 'htm' => 'HTML file' + 'gif' => _t('File.GifType', 'GIF image - good for diagrams'), + 'jpg' => _t('File.JpgType', 'JPEG image - good for photos'), + 'jpeg' => _t('File.JpgType', 'JPEG image - good for photos'), + 'png' => _t('File.PngType', 'PNG image - good general-purpose format'), + 'ico' => _t('File.IcoType', 'Icon image'), + 'tiff' => _t('File.TiffType', 'Tagged image format'), + 'doc' => _t('File.DocType', 'Word document'), + 'xls' => _t('File.XlsType', 'Excel spreadsheet'), + 'zip' => _t('File.ZipType', 'ZIP compressed file'), + 'gz' => _t('File.GzType', 'GZIP compressed file'), + 'dmg' => _t('File.DmgType', 'Apple disk image'), + 'pdf' => _t('File.PdfType', 'Adobe Acrobat PDF file'), + 'mp3' => _t('File.Mp3Type', 'MP3 audio file'), + 'wav' => _t('File.WavType', 'WAV audo file'), + 'avi' => _t('File.AviType', 'AVI video file'), + 'mpg' => _t('File.MpgType', 'MPEG video file'), + 'mpeg' => _t('File.MpgType', 'MPEG video file'), + 'js' => _t('File.JsType', 'Javascript file'), + 'css' => _t('File.CssType', 'CSS file'), + 'html' => _t('File.HtmlType', 'HTML file'), + 'htm' => _t('File.HtlType', 'HTML file') ); $ext = $this->getExtension(); diff --git a/lang/en.yml b/lang/en.yml index bbc07d7b2..b0f861b33 100644 --- a/lang/en.yml +++ b/lang/en.yml @@ -144,18 +144,37 @@ en: Enum: ANY: Any File: + AviType: 'AVI video file' Content: Content + CssType: 'CSS file' + DmgType: 'Apple disk image' + DocType: 'Word document' 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})' 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.' NOVALIDUPLOAD: 'File is not a valid upload' Name: Name PLURALNAME: Files + PdfType: 'Adobe Acrobat PDF file' + PngType: 'PNG image - good general-purpose format' SINGULARNAME: File TOOLARGE: 'Filesize is too large, maximum {size} allowed' TOOLARGESHORT: 'Filesize exceeds {size}' + TiffType: 'Tagged image format' Title: Title + WavType: 'WAV audo file' + XlsType: 'Excel spreadsheet' + ZipType: 'ZIP compressed file' FileIFrameField: ATTACH: 'Attach {type}' ATTACHONCESAVED: '{type}s can be attached once you have saved the record for the first time.' From c7ca47f2b11c39cbb8ca2e34ecc57bd2cc936bce Mon Sep 17 00:00:00 2001 From: Hamish Friedlander Date: Mon, 27 Aug 2012 16:00:54 +1200 Subject: [PATCH 06/10] FIX Config frag could only have one before or after rule You should be able to specify multiple before and after rules in a config fragment. This was intended to be a comma seperated string but that wasnt being split properly Now if you provide a comma seperated string it is split properly, but you can also provide an array, which is actually cleaner --- core/manifest/ConfigManifest.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/manifest/ConfigManifest.php b/core/manifest/ConfigManifest.php index fcf894a26..86d0d2c60 100644 --- a/core/manifest/ConfigManifest.php +++ b/core/manifest/ConfigManifest.php @@ -217,7 +217,8 @@ class SS_ConfigManifest { foreach (array('before', 'after') as $order) { if (isset($header[$order])) { // First, splice into parts (multiple before or after parts are allowed, comma separated) - $orderparts = preg_split('/\s+,\s+/', $header[$order], PREG_SPLIT_NO_EMPTY); + if (is_array($header[$order])) $orderparts = $header[$order]; + else $orderparts = preg_split('/\s*,\s*/', $header[$order], -1, PREG_SPLIT_NO_EMPTY); // For each, parse out into module/file#name, and set any missing to "*" $header[$order] = array(); From e0b8f151717038fa111f8258354b893445a278f2 Mon Sep 17 00:00:00 2001 From: Hamish Friedlander Date: Mon, 27 Aug 2012 16:03:03 +1200 Subject: [PATCH 07/10] FIX Config wasnt filtering wildcards properly When specifying a specific before rule and a wildcard after rule (or vice versa), the config system was filtering out any fragment from the list of fragments that matched the wildcard if it matched _any_ componenet of the specific rule, not all of them. Fixed, and added handling of two semi wild-card rules, where a rule with less wildcards wins over a rule with more. See http://open.silverstripe.org/ticket/7765 for more --- _config/routes.yml | 10 ++++- core/manifest/ConfigManifest.php | 75 ++++++++++++++++++-------------- 2 files changed, 50 insertions(+), 35 deletions(-) diff --git a/_config/routes.yml b/_config/routes.yml index 95273ebc4..947adfbe7 100644 --- a/_config/routes.yml +++ b/_config/routes.yml @@ -7,8 +7,10 @@ Director: '': 'Controller' --- Name: coreroutes -After: cms/routes#modelascontrollerroutes Before: '*' +After: + - framework/routes#rootroutes + - cms/routes#modelascontrollerroutes --- Director: rules: @@ -21,7 +23,11 @@ Director: 'interactive': 'SapphireREPL' --- Name: adminroutes -After: framework/routes#coreroutes +Before: '*' +After: + - framework/routes#rootroutes + - framework/routes#coreroutes + - cms/routes#modelascontrollerroutes --- Director: rules: diff --git a/core/manifest/ConfigManifest.php b/core/manifest/ConfigManifest.php index 86d0d2c60..75c35eaee 100644 --- a/core/manifest/ConfigManifest.php +++ b/core/manifest/ConfigManifest.php @@ -280,46 +280,55 @@ class SS_ConfigManifest { * @return string "after", "before" or "undefined" */ protected function relativeOrder($a, $b) { - $matchesSomeRule = array(); - + $matches = array(); + // Do the same thing for after and before - foreach (array('after'=>'before', 'before'=>'after') as $rulename => $opposite) { - $matchesSomeRule[$rulename] = false; - - // If no rule specified, we don't match it - if (isset($a[$rulename])) { - - foreach ($a[$rulename] as $rule) { - $matchesRule = true; - - foreach(array('module', 'file', 'name') as $part) { - $partMatches = true; - - // If part is *, we match _unless_ the opposite rule has a non-* matcher than also matches $b - if ($rule[$part] == '*') { - if (isset($a[$opposite])) foreach($a[$opposite] as $oppositeRule) { - if ($oppositeRule[$part] == $b[$part]) { $partMatches = false; break; } - } - } - else { - $partMatches = ($rule[$part] == $b[$part]); - } - - $matchesRule = $matchesRule && $partMatches; - if (!$matchesRule) break; + foreach (array('before', 'after') as $rulename) { + $matches[$rulename] = array(); + + // Figure out for each rule, which part matches + if (isset($a[$rulename])) foreach ($a[$rulename] as $rule) { + $match = array(); + + foreach(array('module', 'file', 'name') as $part) { + // If part is *, we match _unless_ the opposite rule has a non-* matcher than also matches $b + if ($rule[$part] == '*') { + $match[$part] = 'wild'; + } + else { + $match[$part] = ($rule[$part] == $b[$part]); } - - $matchesSomeRule[$rulename] = $matchesSomeRule[$rulename] || $matchesRule; } + + $matches[$rulename][] = $match; } } - - // Check if it matches both rules - problem if so - if ($matchesSomeRule['before'] && $matchesSomeRule['after']) { + + // Figure out the specificness of each match. 1 an actual match, 0 for a wildcard match, remove if no match + $matchlevel = array('before' => -1, 'after' => -1); + + foreach (array('before', 'after') as $rulename) { + foreach ($matches[$rulename] as $i => $rule) { + $level = 0; + + foreach ($rule as $part => $partmatches) { + if ($partmatches === false) continue 2; + if ($partmatches === true) $level += 1; + } + + if ($matchlevel[$rulename] === false || $level > $matchlevel[$rulename]) $matchlevel[$rulename] = $level; + } + } + + if ($matchlevel['before'] === -1 && $matchlevel['after'] === -1) { + return 'undefined'; + } + else if ($matchlevel['before'] === $matchlevel['after']) { user_error('Config fragment requires itself to be both before _and_ after another fragment', E_USER_ERROR); } - - return $matchesSomeRule['before'] ? 'before' : ($matchesSomeRule['after'] ? 'after' : 'undefined'); + else { + return ($matchlevel['before'] > $matchlevel['after']) ? 'before' : 'after'; + } } /** From 6009cfadc2e310b723a8c091cd9d94db968fe07e Mon Sep 17 00:00:00 2001 From: Hamish Friedlander Date: Mon, 27 Aug 2012 16:08:10 +1200 Subject: [PATCH 08/10] NEW Allow debugging of config cyclic errors It is possible to specify before and after rules on config fragments that conflict - A before B and B before A isnt possible to solve. This used to just throw an error with no way to debug. Now if you specify debug as a GET parameter and the site is not in live mode youll get a basic dump of the remaining DAG graph --- core/DAG.php | 65 +++++++++++++++++++++++++++++++- core/manifest/ConfigManifest.php | 25 +++++++++++- 2 files changed, 87 insertions(+), 3 deletions(-) diff --git a/core/DAG.php b/core/DAG.php index 9988af21a..c2acc7f31 100644 --- a/core/DAG.php +++ b/core/DAG.php @@ -4,7 +4,7 @@ * A Directed Acyclic Graph - used for doing topological sorts on dependencies, such as the before/after conditions * in config yaml fragments */ -class SS_DAG { +class SS_DAG implements IteratorAggregate { /** @var array|null - The nodes/vertices in the graph. Should be a numeric sequence of items (no string keys, no gaps). */ protected $data; @@ -68,7 +68,68 @@ class SS_DAG { $dag = $withedges; } - if ($dag) throw new Exception("DAG has cyclic requirements"); + if ($dag) { + $remainder = new SS_DAG($data); $remainder->dag = $dag; + throw new SS_DAG_CyclicException("DAG has cyclic requirements", $remainder); + } return $sorted; } + + function getIterator() { + return new SS_DAG_Iterator($this->data, $this->dag); + } +} + +class SS_DAG_CyclicException extends Exception { + + public $dag; + + function __construct($message, $dag) { + $this->dag = $dag; + parent::__construct($message); + } + +} + +class SS_DAG_Iterator implements Iterator { + + protected $data; + protected $dag; + + protected $dagkeys; + protected $i; + + function __construct($data, $dag) { + $this->data = $data; + $this->dag = $dag; + $this->rewind(); + } + + function key() { + return $this->i; + } + + function current() { + $res = array(); + + $res['from'] = $this->data[$this->i]; + + $res['to'] = array(); + foreach ($this->dag[$this->i] as $to) $res['to'][] = $this->data[$to]; + + return $res; + } + + function next() { + $this->i = array_shift($this->dagkeys); + } + + function rewind() { + $this->dagkeys = array_keys($this->dag); + $this->next(); + } + + function valid() { + return $this->i !== null; + } } diff --git a/core/manifest/ConfigManifest.php b/core/manifest/ConfigManifest.php index 75c35eaee..076bc98e2 100644 --- a/core/manifest/ConfigManifest.php +++ b/core/manifest/ConfigManifest.php @@ -268,7 +268,30 @@ class SS_ConfigManifest { } } - $this->yamlConfigFragments = $dag->sort(); + try { + $this->yamlConfigFragments = $dag->sort(); + } + catch (SS_DAG_CyclicException $e) { + + if (!Director::isLive() && isset($_REQUEST['debug'])) { + $res = '

Remaining config fragment graph

'; + $res .= '
'; + + foreach ($e->dag as $node) { + $res .= "
{$node['from']['module']}/{$node['from']['file']}#{$node['from']['name']} marked to come after
    "; + foreach ($node['to'] as $to) { + $res .= "
  • {$to['module']}/{$to['file']}#{$to['name']}
  • "; + } + $res .= "
"; + } + + $res .= '
'; + echo $res; + } + + throw $e; + } + } /** From 8b6e4f5a9071200c218743b70e37c959efb4d335 Mon Sep 17 00:00:00 2001 From: Hamish Friedlander Date: Mon, 27 Aug 2012 16:42:25 +1200 Subject: [PATCH 09/10] Add some basic tests for ConfigManifest#relativeOrder --- tests/core/manifest/ConfigManifestTest.php | 89 ++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 tests/core/manifest/ConfigManifestTest.php diff --git a/tests/core/manifest/ConfigManifestTest.php b/tests/core/manifest/ConfigManifestTest.php new file mode 100644 index 000000000..77226deae --- /dev/null +++ b/tests/core/manifest/ConfigManifestTest.php @@ -0,0 +1,89 @@ + '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'); + } + +} \ No newline at end of file From dddc5bdf46e3c7d23fda5d8e32c0355496399654 Mon Sep 17 00:00:00 2001 From: Ingo Schommer Date: Mon, 27 Aug 2012 09:06:02 +0200 Subject: [PATCH 10/10] Removed accidental *.orig files --- lang/de.yml.orig | 591 -------------------------------------------- lang/mi_NZ.yml.orig | 586 ------------------------------------------- lang/nl.yml.orig | 556 ----------------------------------------- lang/ru.yml.orig | 586 ------------------------------------------- 4 files changed, 2319 deletions(-) delete mode 100644 lang/de.yml.orig delete mode 100644 lang/mi_NZ.yml.orig delete mode 100644 lang/nl.yml.orig delete mode 100644 lang/ru.yml.orig diff --git a/lang/de.yml.orig b/lang/de.yml.orig deleted file mode 100644 index cc94e8843..000000000 --- a/lang/de.yml.orig +++ /dev/null @@ -1,591 +0,0 @@ -de: - AssetAdmin: -<<<<<<< HEAD - ADDFILES: 'Add files' -======= - ADDFILES: 'Dateien hinzufügen' ->>>>>>> origin/translation-staging - EditOrgMenu: 'Edit & organize' - NEWFOLDER: 'Neuer Ordner' - AssetTableField: - CREATED: 'Erstmalig hochgeladen' - DIM: Dimensionen - FILENAME: Dateiname - FOLDER: Ordner - LASTEDIT: 'Letzte Änderung' - OWNER: Eigentümer - SIZE: Größe - TITLE: Titel - TYPE: Typ - URL: URL - AssetUploadField: - ChooseFiles: 'Dateien auswählen' - DRAGFILESHERE: 'Dateien hier ablegen' - DROPAREA: Dateiablage - EDITALL: 'Alle Bearbeiten' - EDITANDORGANIZE: Bearbeiten - EDITINFO: 'Dateien bearbeiten' - FILES: Dateien - FROMCOMPUTER: 'Dateien auf Ihrem Computer auswählen' - FROMCOMPUTERINFO: 'Von ihrem Computer hochladen' - TOTAL: Gesamt - UPLOADINPROGRESS: 'Bitte warten sie... Upload im Gang' - UPLOADOR: ODER - BBCodeParser: - ALIGNEMENT: Ausrichtung - ALIGNEMENTEXAMPLE: 'Rechts ausgerichtet' - BOLD: 'Fett gedruckter Text' - BOLDEXAMPLE: Fett - CODE: 'Code Block' - CODEDESCRIPTION: 'Unformatierter Code Block' - CODEEXAMPLE: 'Code Block' - COLORED: 'Farbiger Text' - COLOREDEXAMPLE: 'Blauer Text' - EMAILLINK: 'E-Mail Link' - EMAILLINKDESCRIPTION: 'Link zu einer E-Mail Adresse erzeugen' - IMAGE: Bild - IMAGEDESCRIPTION: 'Bild im Post anzeigen' - ITALIC: 'Kursiv gedruckter Text' - ITALICEXAMPLE: Kursiv - LINK: 'Webseiten Link' - LINKDESCRIPTION: 'Link auf eine andere Webseite oder URL' - STRUCK: 'Durchgestrichener Text' - STRUCKEXAMPLE: Durchgestrichen - UNDERLINE: 'Unterstrichener Text' - UNDERLINEEXAMPLE: Unterstrichen - UNORDERED: 'Ungeordnete Liste' - UNORDEREDDESCRIPTION: 'Ungeordnete Liste' - UNORDEREDEXAMPLE1: 'Ungeordneter Eintrag 1' - BackLink_Button.ss: - Back: Zurück - BasicAuth: - ENTERINFO: 'Bitte geben Sie einen Nutzernamen und ein Passwort ein' - ERRORNOTADMIN: 'Dieser Nutzer ist kein Administrator' - ERRORNOTREC: 'Dieser/s Nutzername/Passwort wurde nicht erkannt' - Boolean: - 0: Falsch - ANY: alle - 1: Wahr - CMSLoadingScreen.ss: - LOADING: 'Lade Daten ...' - REQUIREJS: 'Für die Benutzung des CMS wird JavaScript benötigt.' - CMSMain: - ACCESS: 'Zugang zum Bereich ''{title}''' - ACCESSALLINTERFACES: 'Zugriff auf alle Bereiche des CMS' - ACCESSALLINTERFACESHELP: 'Hebt alle bereichspezifischen Berechtigungen auf.' - SAVE: Speichern - CMSProfileController: - MENUTITLE: CMSProfileController - ChangePasswordEmail.ss: - CHANGEPASSWORDTEXT1: 'Sie haben Ihr Passwort geändert für' - CHANGEPASSWORDTEXT2: 'Sie können nun folgende Angaben benutzen um sich einzuloggen' - EMAIL: E-Mail - HELLO: Hi - PASSWORD: Passwort - CheckboxField: - - Falsch - - Wahr - ComplexTableField: - CLOSEPOPUP: 'Popup schließen' - SUCCESSADD2: '{name} hinzugefügt' - SUCCESSEDIT: 'Gespeichert %s %s %s' - ComplexTableField.ss: - ADDITEM: '%s hinzufügen' - NOITEMSFOUND: 'Keine Elemente gefunden' - SORTASC: 'Aufsteigend sortieren' - SORTDESC: 'Absteigend sortieren' - ComplexTableField_popup.ss: - NEXT: nächste - PREVIOUS: vorherige - ConfirmedPasswordField: - ATLEAST: 'Passwörter müssen mindestens {min} Zeichen lang sein.' - BETWEEN: 'Passwörter müssen mindestens {min} bis maximal {max} Zeichen lang sein.' - MAXIMUM: 'Passwörter dürfen maxinal {max} Zeichen lang sein.' - SHOWONCLICKTITLE: 'Passwort ändern' - CreditCardField: - FIRST: Zuerst - FOURTH: vierte - SECOND: erste - THIRD: dritte - CurrencyField: - CURRENCYSYMBOL: € - DataObject: - PLURALNAME: DataObjects - SINGULARNAME: DataObject - Date: - DAY: Tag - DAYS: Tage - HOUR: Stunde - HOURS: Stunden - MIN: Minuten - MINS: Minuten - MONTH: Monat - MONTHS: Monat - SEC: Sekunden - SECS: Sekunden - TIMEDIFFAGO: 'vor {difference}' - TIMEDIFFIN: 'in {difference}' - YEAR: Jahr - YEARS: Jahre - DateField: - NOTSET: 'nicht gesetzt' - TODAY: heute - VALIDDATEFORMAT2: 'Bitte geben sie das Datum im korrekten Format ein ({format})' - VALIDDATEMAXDATE: 'Ihr Datum muss nach dem erlaubtem Datum ({date}) liegen oder gleich sein' - VALIDDATEMINDATE: 'Ihr Datum muss vor dem erlaubtem Datum ({date}) liegen oder gleich sein' - DatetimeField: -<<<<<<< HEAD - NOTSET: 'Not set' -======= - NOTSET: 'nicht gesetzt' ->>>>>>> origin/translation-staging - Director: - INVALID_REQUEST: 'Ungültige Anfrage' - DropdownField: - CHOOSE: (Auswahl) - EmailField: - VALIDATION: 'Bitte geben Sie eine E-Mail Adresse ein' - Email_BounceRecord: - PLURALNAME: 'E-Mail Rückläufer' - SINGULARNAME: 'E-Mail Rückläufer' - Enum: - ANY: alle - File: - Content: Inhalt - Filename: Dateiname - INVALIDEXTENSION: 'Dateityp ist nicht erlaubt (erlaubt sind: {extensions})' - INVALIDEXTENSIONSHORT: 'Dateityp ist nicht erlaubt' - NOFILESIZE: 'Dateigröße ist 0 bytes' - NOVALIDUPLOAD: 'Datei ist kein gültiger Upload' - Name: Dateiname - PLURALNAME: Dateien - SINGULARNAME: Datei - TOOLARGE: 'Die Datei ist zu groß, maximal sind {size} erlaubt' - TOOLARGESHORT: 'Dateigröße übersteigt {size}' - Title: Titel - FileIFrameField: - ATTACH: '{type} anhängen' - ATTACHONCESAVED: '{type}s können angehängt werden, sobald das Dokument zum ersten Mal gespeichert wurde.' - ATTACHONCESAVED2: 'Dateien können angehängt werden, sobald das Dokument zum ersten Mal gespeichert wurde.' - DELETE: 'Lösche {type}' - DISALLOWEDFILETYPE: 'Der Upload dieses Dateityps ist nicht erlaubt' - FILE: Datei - FROMCOMPUTER: 'Von Ihrem Computer' - FROMFILESTORE: 'Aus dem Datei-Storage' - NOSOURCE: 'Bitte wählen Sie eine Datei aus' - REPLACE: '{type} ersetzen' - FileIFrameField_iframe.ss: - TITLE: 'Iframe Bilderupload' - Filesystem: - SYNCRESULTS: 'Synchronisation beendet: {createdcount} Objekte erstellt, {deletedcount} Objekte gelöscht' - Folder: - PLURALNAME: Folders - SINGULARNAME: Folder - ForgotPasswordEmail.ss: - HELLO: Hallo - TEXT1: 'Hier ist Ihr' - TEXT2: 'Link zum Zurücksetzen des Passworts' - TEXT3: für - Form: - FIELDISREQUIRED: '%s wird benötigt' -<<<<<<< HEAD - SubmitBtnLabel: Go -======= - SubmitBtnLabel: Los ->>>>>>> origin/translation-staging - VALIDATIONCREDITNUMBER: 'Bitte stellen Sie sicher, dass Sie die Kreditkartennummer ({number}) korrekt eingegeben haben' - VALIDATIONNOTUNIQUE: 'Der eingegebene Wert ist nicht einzigartig' - VALIDATIONPASSWORDSDONTMATCH: 'Passwörter stimmen nicht überein' - VALIDATIONPASSWORDSNOTEMPTY: 'Passwortfelder dürfen nicht leer sein' - VALIDATIONSTRONGPASSWORD: 'Passwörter müssen mindestens eine Zahl und ein alphanumerisches Zeichen enthalten' - VALIDATOR: Prüfer - VALIDCURRENCY: 'Bitte geben Sie einen korrekten Betrag ein' - FormField: - NONE: keine - GridAction: - DELETE_DESCRIPTION: Löschen - Delete: Löschen - UnlinkRelation: 'Verbindung entfernen' - GridField: - Add: '{name} hinzufügen' - Filter: Filter - FilterBy: 'Filter nach' - Find: Suchen - LEVELUP: 'Eine Ebene hoch' - LinkExisting: Verknüpfen - NewRecord: 'Neue(r) %s' - NoItemsFound: 'Keine Elemente gefunden' - PRINTEDAT: 'Gedruckt am' - PRINTEDBY: 'Gedruckt von' - PlaceHolder: '{type} Suchen' - PlaceHolderWithLabels: 'Suche {type} über {name}' - RelationSearch: Relationssuche - ResetFilter: Zurücksetzen - GridFieldAction_Delete: - DeletePermissionsFailure: 'Keine Berechtigung zum Löschen' - GridFieldDetailForm: - Create: Erstellen - Delete: Löschen - DeletePermissionsFailure: 'Keine Berechtigung zum Löschen' - Deleted: 'Gelöscht %s %s' - Save: Speichern - Saved: 'Gespeichert %s %s' - GridFieldItemEditView.ss: null - Group: - AddRole: 'Rolle für die Gruppe hinzufügen' - Code: 'Gruppen Code' - DefaultGroupTitleAdministrators: Administratoren - DefaultGroupTitleContentAuthors: Inhaltsautoren - Description: Beschreibung - GroupReminder: 'Bei Zuweisung einer Übergruppe werden alle ihre Rollen übernommen' - Locked: 'Gesperrt?' - NoRoles: 'Keine Rollen gefunden' - PLURALNAME: Groups - Parent: Elterngruppe - RolesAddEditLink: 'Rollen hinzufügen/editieren' - SINGULARNAME: Group - Sort: Sortierreihenfolge - has_many_Permissions: Berechtigungen - many_many_Members: Mitglieder - GroupImportForm: - Help1: '

Eine oder mehrere Gruppen im CSV-Format (kommaseparierte Werte) importieren. Erweiterte Nutzung

' - Help2: '

Erweiterte Nutzung

  • Gültige Spalten: %s
  • Vorhandene Gruppen werden über ihren eindeutigen Code ermittelt und mit den Werten aus der importierten Datei aktualisiert.
  • Gruppen-Hierarchien können über die ParentCode Spalte definiert werden.
  • Berechtigungscodes können über die Splate PermissionCode zugewiesen werden, vorhandene Berechtigungen werden nicht gelöscht.
' - ResultCreated: '{count} Gruppe(n) wurden erstellt' - ResultDeleted: '%d Gruppen gelöscht' - ResultUpdated: '%d Gruppen aktualisiert' - Hierarchy: - InfiniteLoopNotAllowed: 'Es wurde eine Endlosschleife innerhalb der "{type}"-Hierarchie gefunden. Bitte ändern Sie die übergeordnete Seite, um den Fehler zu beheben' - HtmlEditorField: - ADDURL: 'URL hinzufügen' - ADJUSTDETAILSDIMENSIONS: 'Details & Dimensionen' - ANCHORVALUE: Anker - BUTTONINSERT: Einfügen - BUTTONINSERTLINK: 'Verweis einfügen' - BUTTONREMOVELINK: 'Verweise entfernen' - BUTTONUpdate: Aktualisieren - CAPTIONTEXT: Beschriftungstext - CSSCLASS: Ausrichtung/Stil - CSSCLASSCENTER: 'Zentriert, selbstständig' - CSSCLASSLEFT: 'Links, mit umfließendem Text' - CSSCLASSLEFTALONE: 'Links, alleinstehend' - CSSCLASSRIGHT: 'Rechts, mit umfließendem Text' - DETAILS: Details - EMAIL: E-Mail-Adresse - FILE: Datei - FOLDER: Ordner - FROMCMS: 'Aus dem CMS' - FROMCOMPUTER: 'Von Ihrem Computer' - FROMWEB: 'Aus dem Internet' - FindInFolder: 'In Ordner suchen' - IMAGEALT: 'Alternativer Text (alt)' - IMAGEALTTEXT: 'Alternativer Text (alt) - angezeigt, wenn das Bild nicht dargestellt werden kann' - IMAGEALTTEXTDESC: 'Wird von Screenreadern vorgelesen oder angezeigt, falls das Bild nicht dargestellt werden kann' - IMAGEDIMENSIONS: Dimensionen - IMAGEHEIGHTPX: 'Höhe (px)' - IMAGETITLE: 'Titeltext (Tooltip) - für zusätzliche Informationen über das Bild' - IMAGETITLETEXT: 'Titeltext (Tooltip)' - IMAGETITLETEXTDESC: 'Weiterführende Informationen über das Bild' - IMAGEWIDTHPX: 'Breite (px)' - INSERTMEDIA: 'Medienobject einfügen' - LINK: Verweis - LINKANCHOR: 'Anker auf dieser Seite' - LINKDESCR: 'Beschreibung des Verweises' - LINKEMAIL: E-Mail-Adresse - LINKEXTERNAL: 'Andere Website' - LINKFILE: 'Datei herunterladen' - LINKINTERNAL: 'Seite auf der Website' - LINKOPENNEWWIN: 'Verweis in neuem Fenster öffnen?' - LINKTO: 'Verweis zu' - PAGE: Seite - URL: URL - URLNOTANOEMBEDRESOURCE: 'Die URL ''{url}'' konnte nicht in eine Medienquelle umgewandelt werden' - UpdateMEDIA: 'Medienobjekt aktualisieren' - Image: - PLURALNAME: Files -<<<<<<< HEAD - SINGULARNAME: File -======= - SINGULARNAME: Datei ->>>>>>> origin/translation-staging - ImageField: - IMAGE: Bild - Image_Cached: - PLURALNAME: Files - SINGULARNAME: File - Image_iframe.ss: - TITLE: 'Iframe Bilder hochladen' - LeftAndMain: - CANT_REORGANISE: 'Sie besitzen nicht die benötigten Zugriffsrechte um Seiten der höchsten Ebene zu bearbeiten. Ihre Änderungen wurden nicht gespeichert.' - DELETED: Gelöscht. - DropdownBatchActionsDefault: Aktionen - HELP: Hilfe - PAGETYPE: 'Seitentyp:' - PERMAGAIN: 'Sie wurden aus dem System ausgeloggt. Falls Sie sich wieder einloggen möchten, geben Sie bitte Benutzernamen und Passwort im untenstehenden Formular an.' - PERMALREADY: 'Leider dürfen Sie diesen Teil des CMS nicht aufrufen. Wenn Sie sich als jemand anderes einloggen wollen, benutzen Sie bitte das nachstehende Formular.' - PERMDEFAULT: 'Bitte wählen Sie eine Authentifizierungsmethode und geben Sie Ihre Benutzerdaten für den Zugang zum CMS ein.' - PLEASESAVE: 'Diese Seite konnte nicht aktualisiert werden weil sie noch nicht gespeichert wurde - bitte speichern.' - PreviewButton: Vorschau - REORGANISATIONSUCCESSFUL: 'Der Seitenbaum wurde erfolgreich sortiert.' - SAVEDUP: Gespeichert. - VersionUnknown: Unbekannt - LeftAndMain_Menu.ss: - Hello: Hi - LOGOUT: Ausloggen - LoginAttempt: - Email: E-Mail-Adresse - IP: IP-Adresse - PLURALNAME: 'Login Attempts' - SINGULARNAME: 'Login Attempt' - Status: Status - Member: - ADDGROUP: 'Gruppe hinzufügen' - BUTTONCHANGEPASSWORD: 'Passwort ändern' - BUTTONLOGIN: Einloggen - BUTTONLOGINOTHER: 'Als jemand anders einloggen' - BUTTONLOSTPASSWORD: 'Ich habe mein Passwort vergessen' - CONFIRMNEWPASSWORD: 'Neues Passwort bestätigen' - CONFIRMPASSWORD: 'Passwort bestätigen' -<<<<<<< HEAD - DATEFORMAT: 'Date format' -======= - DATEFORMAT: 'Bitte geben sie das Datum im korrekten Format ein ({format})' ->>>>>>> origin/translation-staging - DefaultAdminFirstname: Standardadmin - DefaultDateTime: Standard - EMAIL: E-Mail - EMPTYNEWPASSWORD: 'Das neue Passwort darf nicht leer sein. Bitte versuchen Sie es erneut.' - ENTEREMAIL: 'Bitte geben Sie eine E-Mail-Adresse ein, um einen Link zum Zurücksetzen des Passworts zu erhalten.' - ERRORLOCKEDOUT: 'Ihr Zugang wurde auf Grund von einer unzulässig hohen Anzahl von falschen Zugangsversuchen gesperrt. Bitte versuchen Sie es in 20 Minuten noch einmal.' - ERRORNEWPASSWORD: 'Sie haben Ihr neues Passwort unterschiedlich eingegeben, bitte versuchen Sie es erneut.' - ERRORPASSWORDNOTMATCH: 'Das Passwort stimmt nicht mit dem hinterlegten Passwort überein, bitte versuchen Sie es noch einmal' - ERRORWRONGCRED: 'Das Passwort oder die E-Mail-Adresse scheinen nicht richtig zu sein. Bitte versuchen Sie es erneut.' - FIRSTNAME: Vorname - INTERFACELANG: CMS-Sprache - INVALIDNEWPASSWORD: 'Das Passwort konnte nicht akzeptiert werden: {password}' - LOGGEDINAS: 'Sie sind als {name} eingeloggt.' - NEWPASSWORD: 'Neues Passwort' - PASSWORD: Passwort - PLURALNAME: Benutzer - PROFILESAVESUCCESS: 'Erfolgreich gespeichert.' - REMEMBERME: 'Für das nächste Mal merken?' - SINGULARNAME: Benutzer - SUBJECTPASSWORDCHANGED: 'Ihr Passwort wurde geändert' - SUBJECTPASSWORDRESET: 'Ihr Link zur Passwortrücksetzung' - SURNAME: Nachname -<<<<<<< HEAD - TIMEFORMAT: 'Time format' -======= - TIMEFORMAT: 'Bitte geben Sie die Uhrzeit im korrekten Format ein ({format})' ->>>>>>> origin/translation-staging - VALIDATIONMEMBEREXISTS: 'Es gibt bereits ein Mitglied mit dieser E-Mail-Adresse' - ValidationIdentifierFailed: 'Das vorhandene Mitglied #{id} mit identischer Bezeichnung kann nicht überschrieben werden ({name} = {value}))' - WELCOMEBACK: 'Hallo {firstname}. Schön, dass du wieder da bist' - YOUROLDPASSWORD: 'Ihr alten Passwort' - belongs_many_many_Groups: Gruppe - db_LastVisited: 'Zuletzt Besucht' - db_Locale: 'Interface Sprachumgebung' - db_LockedOutUntil: 'Gesperrt bis' - db_NumVisit: 'Anzahl der Besuche' - db_Password: Passwort - db_PasswordExpiry: 'Ablaufdatum des Passworts' - MemberAuthenticator: - TITLE: 'E-Mail & Passwort' - MemberDatetimeOptionsetField: - AMORPM: 'AM (vormittag) oder PM (nachmittag)' - 'APPLY FILTER': 'Filter anwenden' - Custom: Benutzerdefiniert - DATEFORMATBAD: 'Ungültiges Datumsformat' - DAYNOLEADING: 'Tag des Monats ohne führende Null' - DIGITSDECFRACTIONSECOND: 'Eine oder mehrere Ziffern, die einen Dezimalbruch einer Sekunde darstellen' - FOURDIGITYEAR: 'Vierstellige Jahreszahl' - FULLNAMEMONTH: 'Volle Monatsbezeichnung (z.B. Juni)' - HOURNOLEADING: 'Stunde ohne führende Null' - MINUTENOLEADING: Minute - MONTHNOLEADING: 'Monat ohne führende Null' - Preview: Vorschau - SHORTMONTH: 'Kurzname des Monats (z.B. Jun)' - TOGGLEHELP: 'Formatierungshilfe anzeigen' - TWODIGITDAY: 'Tag des Monats mit führender Null' - TWODIGITHOUR: 'Stunde im 24-Stunden-Format, mit führenden Nullen' - TWODIGITMINUTE: 'Minute mit führenden Nullen' - TWODIGITMONTH: 'Monat mit führender Null (z.B. 01 = Januar, usw.)' - TWODIGITSECOND: Sekunde - TWODIGITYEAR: 'Zweistellige Jahreszahl' - MemberImportForm: - Help1: '

Mitglieder im CSV-Format (kommaseparierte Werte) importieren. Erweiterte Nutzung

' - Help2: '

Advanced usage

  • Gültige Spalten: %s
  • Vorhandene Mitglieder werden über ihren eindeutigen Code ermittelt und mit den Werten aus der importierten Datei aktualisiert.
  • Gruppen können über die Spalte Gruppen zugewiesen werden. Gruppen werden über ihren eindeutigen Code ermittelt, mehrere Gruppen können durch ein Komma getrennt werden. Vorhandene Gruppenzugehörigkeiten werden nicht gelöscht.
' - ResultCreated: '{count} Mitglied(er) wurden erstellt' - ResultDeleted: '%d Mitglieder gelöscht' - ResultNone: 'Keine Änderungen' - ResultUpdated: '{count} Mitglied(er) wurde(n) aktualisiert' - MemberPassword: -<<<<<<< HEAD - PLURALNAME: 'Member Passwords' - SINGULARNAME: 'Member Password' -======= - PLURALNAME: Benutzerpasswörter - SINGULARNAME: Benutzerpasswort ->>>>>>> origin/translation-staging - MemberTableField: null - ModelAdmin: - DELETE: Löschen - DELETEDRECORDS: '{count} Datensätze wurden gelöscht.' - IMPORT: 'CSV Import' - IMPORTEDRECORDS: '{count} Datensätze wurden importiert.' - NOCSVFILE: 'Wählen Sie eine CSV-Datei zum Importieren' - NOIMPORT: 'Kein Import notwendig.' - RESET: Zurücksetzen - Title: Datenmodelle - UPDATEDRECORDS: '{count} Datensätze wurden aktualisiert.' - ModelAdmin_ImportSpec.ss: - IMPORTSPECFIELDS: Datenbankspalten - IMPORTSPECLINK: 'Show Specification for %s' - IMPORTSPECRELATIONS: Relationen - IMPORTSPECTITLE: 'Specification for %s' - ModelAdmin_Tools.ss: - FILTER: Filter - IMPORT: Importieren - ModelSidebar.ss: - IMPORT_TAB_HEADER: Importieren - SEARCHLISTINGS: Suche - MoneyField: - FIELDLABELAMOUNT: Betrag - FIELDLABELCURRENCY: Währung - NullableField: - IsNullLabel: 'ist NULL' - NumericField: - VALIDATION: '''{value}'' ist kein numerischer Wert, nur nummerische Werte sind in diesem Feld erlaubt' - Pagination: -<<<<<<< HEAD - Page: Page - View: View -======= - Page: Seite - View: Anzeige ->>>>>>> origin/translation-staging - Permission: - AdminGroup: Administrator - CMS_ACCESS_CATEGORY: 'CMS Zugriff' - FULLADMINRIGHTS: 'Unbeschränkte Administratorenrechte' - FULLADMINRIGHTS_HELP: 'Schließt alle anderen verfügbaren Berechtigungen ein' -<<<<<<< HEAD - PLURALNAME: Permissions - SINGULARNAME: Permission -======= - PLURALNAME: Berechtigungen - SINGULARNAME: Berechtigung ->>>>>>> origin/translation-staging - PermissionCheckboxSetField: - AssignedTo: 'Zugewiesen an "{title}"' - FromGroup: 'abgeleited von Gruppe "{title}"' - FromRole: 'abgeleited von Rolle "{title}"' - FromRoleOnGroup: 'geerbt von Rolle "%s" für die Gruppe "%s"' - PermissionRole: - PLURALNAME: Roles - SINGULARNAME: Role - PermissionRoleCode: - PLURALNAME: 'Permission Role Cods' - SINGULARNAME: 'Permission Role Code' - Permissions: - PERMISSIONS_CATEGORY: 'Rollen und Zugriffsberechtigungen' - PhoneNumberField: - VALIDATION: 'Bitte geben Sie eine gültige Telefonnummer ein' - RelationComplexTableField.ss: - ADD: Hinzufügen - CSVEXPORT: 'Als CSV exportieren' - NOTFOUND: 'Keine Elemente gefunden.' - Security: - ALREADYLOGGEDIN: 'Sie haben keinen Zugriff auf diese Seite. Wenn Sie ein anderes Konto besitzen, mit dem Sie auf diese Seite zugreifen können, melden Sie sich bitte unten an.' - BUTTONSEND: 'Senden Sie mir den Link zur Passwortrücksetzung' - CHANGEPASSWORDBELOW: 'Sie können Ihr Passwort unten ändern.' - CHANGEPASSWORDHEADER: 'Passwort ändern' - ENTERNEWPASSWORD: 'Bitte geben Sie ein neues Passwort ein' - ERRORPASSWORDPERMISSION: 'Sie müssen eingeloggt sein, um Ihr Passwort ändern zu können!' - LOGGEDOUT: 'Sie wurden ausgeloggt. Wenn Sie sich wieder einloggen möchten, geben Sie bitte unten Ihre Zugangsdaten ein.' - LOGIN: Anmelden - NOTEPAGESECURED: 'Diese Seite ist geschützt. Bitte melden Sie sich an und Sie werden sofort weitergeleitet.' - NOTERESETLINKINVALID: '

Der Link zum Zurücksetzen des Passworts ist entweder nicht korrekt oder abgelaufen

Sie können einen neuen Link anfordern oder Ihr Passwort nach dem einloggen ändern.

' - 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 (Erlaubte Dateierweiterung: *.csv)' - 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 diff --git a/lang/mi_NZ.yml.orig b/lang/mi_NZ.yml.orig deleted file mode 100644 index 6c9b13023..000000000 --- a/lang/mi_NZ.yml.orig +++ /dev/null @@ -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: Hē - 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: - - Hē - - 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: rā - 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: mā - 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: '

Kawea mai ngā kaiwhakamahi i te hōputu CSV (ngā uara ka wehea ki te piko). Whakaatu whakamahinga ara atu anō

' - Help2: "
\\n

Whakamahinga ara atu anō

\\n
    \\n
  • Ngā tīwae ka whakaaetia: %s
  • \\n
  • Ka whakaritea ngā kaiwhakamahi mā tō rātou āhuatangaWaehere ahurei, ā, ka whakahōutia ki ngā uara hōu mai i te kōnae kua kawea mai
  • \\n
  • Ka taea te hanga aroākapanga rōpū mā te whakamahi i te tīwae WaehereMatua.
  • \\n
  • Ka taea te tautapa waehere whakaaetanga mā te tīwaeWaehereWhakaaetanga. Kāore e ūkuia ngā waehere whakaaetanga o nāianei.
  • \\n
\\n
" - 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 & 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ā & 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: '

Kawea mai ngā kaiwhakamahi i te hōputu CSV (ngā uara ka wehea ki te piko). Whakaatu whakamahinga ara atu anō

' - Help2: "
\\n

Whakamahinga ara atu anō

\\n
    \\n
  • Ngā tīwae ka whakaaetia: %s
  • \\n
  • Ka whakaritea ngā kaiwhakamahi mā tō rātou āhuatangaWaehere ahurei, ā, ka whakahōutia ki ngā uara hōu mai i te kōnae kua kawea mai.
  • \\n
  • Ka taea te tautapa rōpū mā te tīwae Ngā Rōpū. Ka tautohua ngā rōpū mā tō rātou āhuatanga Waehere, ka taea te whakawehe i ngā rōpū maha ki te piko. Kāore e ūkuia ngā mematanga rōpū o naianei.
  • \\n
\\n
" - ResultCreated: 'I hangaia e {count} ngā mema' - ResultDeleted: 'Kua mukua e %d ngā mema' - ResultNone: 'Kāore he huringa' - ResultUpdated: 'I whakahōutia e {count} mhā mema' - MemberPassword: -<<<<<<< HEAD - PLURALNAME: 'Member Passwords' - SINGULARNAME: 'Member Password' -======= - PLURALNAME: 'Ngā Kupuhipa Mema' - SINGULARNAME: 'Kupuhipa Mema' ->>>>>>> origin/translation-staging - MemberTableField: null - ModelAdmin: - DELETE: Muku - DELETEDRECORDS: 'I mukua e {count} ngā pūkete.' - IMPORT: 'Kawemai i CSV' - IMPORTEDRECORDS: 'I kawea mai e {count} ngā pūkete.' - NOCSVFILE: 'Pūtirotiro kia kitea he kōnae CSV hei kawemai' - NOIMPORT: 'Kāore he mea hei kawemai' - RESET: 'Tautuhi Anō' - Title: 'Ngā Tauira Raraunga' - UPDATEDRECORDS: 'I whakahōutia e {count} ngā pūkete.' - ModelAdmin_ImportSpec.ss: - IMPORTSPECFIELDS: 'Ngā tīwae pātengi raraunga' - IMPORTSPECLINK: 'Whakaatu Whakapūtātanga mō %s' - IMPORTSPECRELATIONS: 'Ngā Pānga' - IMPORTSPECTITLE: 'Whakapūtātanga mō %s' - ModelAdmin_Tools.ss: - FILTER: Tātari - IMPORT: Kawemai - ModelSidebar.ss: - IMPORT_TAB_HEADER: Kawemai - SEARCHLISTINGS: Rapu - MoneyField: - FIELDLABELAMOUNT: Rahinga - FIELDLABELCURRENCY: Moni - NullableField: - IsNullLabel: 'He Kore Tēnei' - NumericField: - VALIDATION: 'Ehara te ''{value}'' i te tau, ka taea ngā tau anake ki tēnei āpure' - Pagination: - Page: Whārangi -<<<<<<< HEAD - View: View -======= - View: Tiro ->>>>>>> origin/translation-staging - Permission: - AdminGroup: Kaiwhakahaere - CMS_ACCESS_CATEGORY: 'Uru CMS' - FULLADMINRIGHTS: 'Ngā motika kaiwhakahaere katoa' - FULLADMINRIGHTS_HELP: 'Ka whakapae me te takahi i ērā atu whakaaetanga katoa kua tautapatia.' - PLURALNAME: Permissions -<<<<<<< HEAD - SINGULARNAME: Permission -======= - SINGULARNAME: Whakaaetanga ->>>>>>> origin/translation-staging - PermissionCheckboxSetField: - AssignedTo: 'kua tautapatia ki "{title}"' - FromGroup: 'I tukuna iho i te rōpū "{title}"' - FromRole: 'I tukuna iho i te tūnga "{title}"' - FromRoleOnGroup: 'i tukuna iho i "%s" i te rōpū "%s"' - PermissionRole: - PLURALNAME: 'Ngā Tūnga' -<<<<<<< HEAD - SINGULARNAME: Role -======= - SINGULARNAME: Tūranga ->>>>>>> origin/translation-staging - PermissionRoleCode: - PLURALNAME: 'Permission Role Cods' - SINGULARNAME: 'Permission Role Code' - Permissions: - PERMISSIONS_CATEGORY: 'Ngā tūnga me ngā whakaaetanga uru' - PhoneNumberField: - VALIDATION: 'Tāurua he tau waea tika' - RelationComplexTableField.ss: - ADD: Tāpiri - CSVEXPORT: 'Kaweatu ki CSV' - NOTFOUND: 'Kāore i kitea he tūemi' - Security: - ALREADYLOGGEDIN: 'Kāore i te whakaaetia kia uru koe ki tēnei whārangi. Mēnā he pūkete anō tōu e taea ai te uru ki tēnā whārangi, ka taea te takiuru anō i raro.' - BUTTONSEND: 'Tukuna mai te hono tautuhi kupuhipa anō' - CHANGEPASSWORDBELOW: 'Ka taea te huri i tō kupuhipa i raro' - CHANGEPASSWORDHEADER: 'Hurihia tō kupuhipa' - ENTERNEWPASSWORD: 'Tāurua he kupuhipa hōu' - ERRORPASSWORDPERMISSION: 'Me takiuru koe i mua i te huri i tō kupuhipa!' - LOGGEDOUT: 'Kua takiputaina atu koe. Ki te pīrangi koe ki te takiuru atu anō, tāurutia ō taipitopito tuakiri ki raro. ' - LOGIN: Takiuru - NOTEPAGESECURED: 'Kua ngita tēnā whārangi. Tāurua ō taipitoptio tuakiri ki raro, ā, mā mātou koe e tuku kia haere tonu.' - NOTERESETLINKINVALID: '

He muhu, kua mōnehu rānei te hono tautuhi kupuhipa anō.

Ka taea te tono i te mea hōui konei ka huri rānei i tō kupuhipa ā muri i tōtakiuru.

' - NOTERESETPASSWORD: 'Tāurua tō wāhitau īmēra, mā mātou e tuku tētahi hono ki a koe e taea ai te tautuhi anō i tō kupuhipa' - PASSWORDSENTHEADER: 'I tukuna he hono tautuhi kupuhipa anō ki ''{email}''' - PASSWORDSENTTEXT: 'Kia ora! Kua tukuna he hono tautuhi anō ki ''{email}'',engari rā kei te tīariari he pūkete mō taua wāhitau īmēra.' - SecurityAdmin: - ACCESS_HELP: 'Tukuna te tiro, te tāpiri me te whakatika i ngā kaiwhakamahi, me te tautapa anō hoki i ngā whakaaetanga me ngā tūnga ki a rātou.' - APPLY_ROLES: 'Hoatu tūnga ki ngā rōpū' - APPLY_ROLES_HELP: 'Te āhei ki te whakatika tūnga kua tautapatia ki tētahi rōpū. Ka hiahiatia te whakaaetanga "Uru ki te wāhanga ''Ngā Kaiwhakamahi''"' - EDITPERMISSIONS: 'Whakahaere whakaaetanga mō ngā rōpū' - EDITPERMISSIONS_HELP: 'Te āhei ki te whakatika i Ngā Whakaaetanga me Ngā Wāhitau KI mō tētahi rōpū. Ka hiahiatia te whakaaetanga "Uru ki te wāhanga ''Haumarutanga''".' - GROUPNAME: 'Ingoa rōpū' - IMPORTGROUPS: 'Kawea mai ngā rōpū' - IMPORTUSERS: 'Kawe kaiwhakamahi mai' - MEMBERS: 'Ngā Mema' - MENUTITLE: Haumarutanga - MemberListCaution: 'Whakatūpato: Mā te tango mema i tēnei rārangi, ka tangohia i ngā rōpū katoa me te pātengi raraunga' - NEWGROUP: 'Rōpū Hōu' - PERMISSIONS: 'Ngā Whakaaetanga' - ROLES: 'Ngā Tūnga' - ROLESDESCRIPTION: 'Ko ngā tūnga he huinga o ngā whakaaetanga i tautuhia i mua, ā, ka taea te tautapa i ēnei ki ngā rōpū.
I tukuna iho i ngā rōpū matua ki te hiahiatia.' - TABROLES: 'Ngā Tūnga' - Users: 'Ngā Kaiwhakamahi' - SecurityAdmin_MemberImportForm: - BtnImport: 'Kawemai i CSV' - FileFieldLabel: 'Kōnae CSV (Ngā toronga ka whakaaetia: *.csv)' - SilverStripeNavigator: - Edit: Whakatika - SimpleImageField: - NOUPLOAD: 'Kāore He Atahanga Tukuatu' - SiteTree: - TABMAIN: Matua - TableField: - ISREQUIRED: 'Ka hiahiatia te %s i te ''%s'' ' - TableField.ss: - ADD: 'Tāpiri haupae hōu' - ADDITEM: 'Tāpiri %s' - TableListField: - CSVEXPORT: 'Kaweake ki CSV' - PRINT: Tā - Print: Tā - SELECT: 'Tīpako:' - TableListField.ss: - NOITEMSFOUND: 'Kāore i kitea he tūemi' - SORTASC: 'Kōmakatia ki te raupapa aupiki' - SORTDESC: 'Kōmakatia ki te raupapa auheke' - TableListField_PageControls.ss: - DISPLAYING: 'Whakaatu ana' - OF: o - TO: ki - VIEWFIRST: 'Tirohia te tuatahi' - VIEWLAST: 'Tirohia te whakamutunga' - VIEWNEXT: 'Tiro panuku' - VIEWPREVIOUS: 'Tiro tōmua' - TimeField: - VALIDATEFORMAT: 'Tāurua he hōputu wā tika ({format})' - ToggleField: - LESS: 'iti iho' - MORE: 'nui ake' - UploadField: - ATTACHFILE: 'Tāpiritia tētahi kōnae' - ATTACHFILES: 'Tāpiri kōnae' - AttachFile: 'Tāpiritia t/ētahi kōnae' - DELETE: 'Muku i ngā kōnae' - DELETEINFO: 'Muku pūmautia tēnei kōnae i te pātaka kōnae' - DOEDIT: Tiaki - DROPFILE: 'whakamakeretia tētahi kōnae' - DROPFILES: 'taka kōnae' - Dimensions: 'Ngā Rahinga' - EDIT: Whakatika - EDITINFO: 'Whakatikatia tēnei kōnae' - FIELDNOTSET: 'Kāore i kitea te mōhiohio kōnae' - FROMCOMPUTER: 'Mai i tō rorohiko' - FROMCOMPUTERINFO: 'Tīpako mai i ngā kōnae' - FROMFILES: 'I ngā kōnae' - HOTLINKINFO: 'Info: This image will be hotlinked. Please ensure you have permissions from the original site creator to do so.' - MAXNUMBEROFFILES: 'Kua hipa te mōrahi o ngā kōnae {count}.' - MAXNUMBEROFFILESSHORT: 'Ka taea te tukuatu i ngā kōnae {count} anake ' - REMOVE: Tango - REMOVEERROR: 'Kua rarua te tango kōnae' - REMOVEINFO: 'Tangohia tēnei kōane i konei, engari kaua e muku i te pātaka kōnae' - STARTALL: 'Tīmata katoa' - STARTALLINFO: 'Tīmataria ngā tukuatu katoa' - Saved: 'Kua Tiakina' - Versioned: - has_many_Versions: 'Ngā Putanga' diff --git a/lang/nl.yml.orig b/lang/nl.yml.orig deleted file mode 100644 index 423ae54af..000000000 --- a/lang/nl.yml.orig +++ /dev/null @@ -1,556 +0,0 @@ -nl: - AssetAdmin: - ADDFILES: 'Add files' - EditOrgMenu: 'Edit & organize' - NEWFOLDER: 'Nieuwe Map' - AssetTableField: - CREATED: 'Eerste upload' - DIM: Dimensies - FILENAME: Bestandsnaam - FOLDER: Folder - LASTEDIT: 'Laatste wijziging' - OWNER: Eigenaar - SIZE: Grootte - TITLE: Titel - TYPE: Type - URL: URL - AssetUploadField: - ChooseFiles: 'Selecteer bestanden' - DRAGFILESHERE: 'Sleep bestanden hiernaar toe' - DROPAREA: 'Hierheen slepen' - EDITALL: 'Alles bewerken' - EDITANDORGANIZE: 'Bewerk en beheer' - EDITINFO: 'Edit files' - FILES: Bestanden - FROMCOMPUTER: 'Choose files from your computer' - FROMCOMPUTERINFO: 'Upload from your computer' - TOTAL: Totaal - UPLOADINPROGRESS: 'Ogenblikje... bezig met uploaden' - UPLOADOR: OF - BBCodeParser: - ALIGNEMENT: Uitlijning - ALIGNEMENTEXAMPLE: 'rechts uitgelijnd' - BOLD: 'Vetgedrukte tekst' - BOLDEXAMPLE: Vetgedrukt - CODE: 'Code Blok' - CODEDESCRIPTION: 'niet opgemaakt code blok' - CODEEXAMPLE: 'Code Blok' - COLORED: 'Gekleurde tekst' - COLOREDEXAMPLE: 'blauwe tekst' - EMAILLINK: 'Email link' - EMAILLINKDESCRIPTION: 'Maak een koppeling naar een e-mailadres' - IMAGE: Foto - IMAGEDESCRIPTION: 'Toon een afbeelding in uw bericht' - ITALIC: 'Cursieve tekst' - ITALICEXAMPLE: Cursief - LINK: 'Website link' - LINKDESCRIPTION: 'Link naar een andere website of URL' - STRUCK: 'Doorgehaalde tekst' - STRUCKEXAMPLE: Doorgehaald - UNDERLINE: 'Onderstreepte tekst' - UNDERLINEEXAMPLE: Onderstreept - UNORDERED: 'Ongesorteerde lijst' - UNORDEREDDESCRIPTION: 'Ongesorteerde lijst' - UNORDEREDEXAMPLE1: 'ongesorteerd item 1' - BackLink_Button.ss: - Back: Terug - BasicAuth: - ENTERINFO: 'Voer een gebruikers naam en wachtwoord in.' - ERRORNOTADMIN: 'Die gebruiker is geen beheerder.' - ERRORNOTREC: 'De gebruikersnaam en/of wachtwoord wordt niet herkend' - Boolean: - 0: 'False' - ANY: Elke - 1: 'True' - CMSLoadingScreen.ss: - LOADING: Laden... - REQUIREJS: 'The CMS requires that you have JavaScript enabled.' - CMSMain: - ACCESS: 'Toegang tot het ''{title}'' gedeelte' - ACCESSALLINTERFACES: 'Toegang tot alle CMS onderdelen' - ACCESSALLINTERFACESHELP: 'Overstemt meer specifieke toegangsinstellingen' - SAVE: Bewaar - CMSProfileController: - MENUTITLE: CMSProfileController - ChangePasswordEmail.ss: - CHANGEPASSWORDTEXT1: 'U heeft het wachtwoord veranderd voor' - CHANGEPASSWORDTEXT2: 'U kunt nu onderstaande gegevens gebruiken om in te loggen:' - EMAIL: E-mail - HELLO: Hallo - PASSWORD: Wachtwoord - CheckboxField: - - 'False' - - 'True' - ComplexTableField: - CLOSEPOPUP: 'Sluit Popup' - SUCCESSADD2: 'Toegevoegd {name}' - SUCCESSEDIT: '%s %s %s Opgeslagen' - ComplexTableField.ss: - ADDITEM: 'Add %s' - NOITEMSFOUND: 'No items found' - SORTASC: 'Sorteer oplopend' - SORTDESC: 'Sorteer aflopend' - ComplexTableField_popup.ss: - NEXT: Volgende - PREVIOUS: Vorige - ConfirmedPasswordField: - ATLEAST: 'Passwords must be at least {min} characters long.' - BETWEEN: 'Passwords must be {min} to {max} characters long.' - MAXIMUM: 'Passwords must be at most {max} characters long.' - SHOWONCLICKTITLE: 'Verander wachtwoord' - CreditCardField: - FIRST: eerste - FOURTH: vierde - SECOND: tweede - THIRD: derde - CurrencyField: - CURRENCYSYMBOL: $ - DataObject: - PLURALNAME: 'Gegeven Objecten' - SINGULARNAME: 'Gegeven Object' - Date: - DAY: dag - DAYS: dagen - HOUR: uur - HOURS: uren - MIN: minuut - MINS: minuten - MONTH: maand - MONTHS: maanden - SEC: seconde - SECS: seconden - TIMEDIFFAGO: '{difference} geleden' - TIMEDIFFIN: 'in {difference}' - YEAR: jaar - YEARS: jaren - DateField: - NOTSET: 'niet ingesteld' - TODAY: vandaag - VALIDDATEFORMAT2: 'Vul een valide datum in ({format})' - VALIDDATEMAXDATE: 'De datum moet eerder of gelijk zijn aan de maximale datum ({date})' - VALIDDATEMINDATE: 'De datum moet nieuwer of gelijk zijn aan de minimale datum ({date})' - DatetimeField: - NOTSET: 'Not set' - Director: - INVALID_REQUEST: 'Fout bij verwerken' - DropdownField: - CHOOSE: (Kies) - EmailField: - VALIDATION: 'Please enter an email address' - Email_BounceRecord: - PLURALNAME: 'Onbezorgbare emails' - SINGULARNAME: 'Onbezorgbare email' - Enum: - ANY: Elke - File: - Content: Inhoud - Filename: 'Bestandsnaam ' - INVALIDEXTENSION: 'Extension is not allowed (valid: {extensions})' - INVALIDEXTENSIONSHORT: 'Extension is not allowed' - NOFILESIZE: 'Bestandsgrootte is nul bytes.' - NOVALIDUPLOAD: 'Geen geldig bestand' - Name: Naam - PLURALNAME: Bestanden - SINGULARNAME: Bestand - TOOLARGE: 'Filesize is too large, maximum {size} allowed' - TOOLARGESHORT: 'Filesize exceeds {size}' - Title: 'Titel ' - FileIFrameField: - ATTACH: 'Attach {type}' - ATTACHONCESAVED: '{type}s can be attached once you have saved the record for the first time.' - ATTACHONCESAVED2: 'Files can be attached once you have saved the record for the first time.' - DELETE: 'Delete {type}' - DISALLOWEDFILETYPE: 'Dit type bestand mag niet worden opgeslagen' - FILE: Bestand - FROMCOMPUTER: 'Vanaf computer' - FROMFILESTORE: 'Vanaf de website''s bestandsopslag' - NOSOURCE: 'Selecteer een bron bestand om toe te voegen' - REPLACE: 'Replace {type}' - FileIFrameField_iframe.ss: - TITLE: 'Afbeelding uploaden' - Filesystem: - SYNCRESULTS: 'Synchroniseren compleet: {createdcount} bestanden aangemaakt, {deletedcount} bestanden verwijderd.' - Folder: - PLURALNAME: Folders - SINGULARNAME: Folder - ForgotPasswordEmail.ss: - HELLO: Hallo - TEXT1: 'Hier is uw' - TEXT2: 'wachtwoord reset link' - TEXT3: voor - Form: - FIELDISREQUIRED: '%s is verplicht' - SubmitBtnLabel: Go - VALIDATIONCREDITNUMBER: 'Please ensure you have entered the {number} credit card number correctly' - VALIDATIONNOTUNIQUE: 'De ingevoerde waarde is niet uniek' - VALIDATIONPASSWORDSDONTMATCH: 'Wachtwoorden komen niet overeen' - VALIDATIONPASSWORDSNOTEMPTY: 'Wachtwoorden mogen niet leeg zijn' - VALIDATIONSTRONGPASSWORD: 'Passwords must have at least one digit and one alphanumeric character' - VALIDATOR: Controleur - VALIDCURRENCY: 'Please enter a valid currency' - FormField: - NONE: geen - GridAction: - DELETE_DESCRIPTION: Verwijder - Delete: Verwijder - UnlinkRelation: Ontkoppelen - GridField: - Add: '{name} toevoegen' - Filter: Filteren - FilterBy: Filteren - Find: Zoek - LEVELUP: 'Niveau hoger' - LinkExisting: 'Koppelen aan' - NewRecord: 'Nieuw %s' - NoItemsFound: 'Geen items gevonden.' - PRINTEDAT: 'Geprint om' - PRINTEDBY: 'Geprint door' - PlaceHolder: 'Zoek {type}' - PlaceHolderWithLabels: 'Zoek {type} op {name}' - RelationSearch: 'Relation search' - ResetFilter: Herstel - GridFieldAction_Delete: - DeletePermissionsFailure: 'Onvoldoende rechten om te verwijderen' - GridFieldDetailForm: - Create: Create - Delete: Verwijder - DeletePermissionsFailure: 'Onvoldoende rechten om te verwijderen' - Deleted: 'Deleted %s %s' - Save: Opslaan - Saved: '%s %s %s Opgeslagen' - GridFieldItemEditView.ss: null - Group: - AddRole: 'Voeg een rol toe aan deze groep' - Code: 'Groep code' - DefaultGroupTitleAdministrators: Beheerders - DefaultGroupTitleContentAuthors: 'Inhoud Auteurs' - Description: 'Omschrijving ' - GroupReminder: 'Als je de bovenliggende groep selecteert, neemt deze groep alle rollen over' - Locked: 'Gesloten?' - NoRoles: 'Geen rollen gevonden' - PLURALNAME: Groups - Parent: 'Bovenliggende groep' - RolesAddEditLink: 'Toevoegen/wijzigingen rollen' - SINGULARNAME: Group - Sort: Sorteer-richting - has_many_Permissions: Rechten - many_many_Members: Lid - GroupImportForm: - Help1: '

Importeer en of meerdere groepen in CSV formaat (Kommagescheiden bestandsformaat). Toon geavanceerd gebruik

' - Help2: '

Geavanceerd gebruik

  • Toegestane kolommen: %s
  • Bestaande groepen worden geïdentificeerd door middel van hun unieke Code waarde en aangepast met de nieuwe waarden van het geïmporteerde bestand
  • Groep hiërarchieën kunnen aangemaakt worden met behulp van een ParentCode kolom.
  • Toegangsrechten kunnen worden toegekend met de PermissionCode kolom. Bestaande toegangsrechten worden niet gewist.
' - ResultCreated: 'Created {count} groups' - ResultDeleted: '%d groepen verwijderd' - ResultUpdated: '%d groepen aangepast' - Hierarchy: - InfiniteLoopNotAllowed: 'Infinite loop found within the "{type}" hierarchy. Please change the parent to resolve this' - HtmlEditorField: - ADDURL: 'Voeg URL toe' - ADJUSTDETAILSDIMENSIONS: 'Details $amp; afmeting' - ANCHORVALUE: Anker - BUTTONINSERT: Invoegen - BUTTONINSERTLINK: 'Link invoegen' - BUTTONREMOVELINK: 'Link verwijderen' - BUTTONUpdate: Update - CAPTIONTEXT: Onderschrift - CSSCLASS: 'Uitlijning / stijl' - CSSCLASSCENTER: 'Gecentreerd, op zichzelf staand.' - CSSCLASSLEFT: 'Aan de linkerkant, met tekst eromheen.' - CSSCLASSLEFTALONE: 'Links, losstaand.' - CSSCLASSRIGHT: 'Aan de rechterkant, met tekst eromheen.' - DETAILS: Details - EMAIL: Emailadres - FILE: Bestand - FOLDER: Map - FROMCMS: 'Vanaf CMS' - FROMCOMPUTER: 'Vanaf computer' - FROMWEB: 'Vanaf een website' - FindInFolder: 'Zoek in map' - IMAGEALT: 'Alternatieve tekst (alt tekst) - wordt getoond als de afbeelding niet kan worden geladen' - IMAGEALTTEXT: 'Alternatieve tekst (alt tekst) - wordt getoond als de afbeelding niet kan worden geladen' - IMAGEALTTEXTDESC: 'Shown to screen readers or if image can not be displayed' - IMAGEDIMENSIONS: Dimensies - IMAGEHEIGHTPX: Hoogte - IMAGETITLE: 'Titel tekst (tooltip) - Toon extra informatie over de afbeelding' - IMAGETITLETEXT: 'Titel tekst (tooltip) - Toon extra informatie over de afbeelding' - IMAGETITLETEXTDESC: 'Titel tekst (tooltip) - Toon extra informatie over de afbeelding' - IMAGEWIDTHPX: Breedte - INSERTMEDIA: Invoegen - LINK: Link - LINKANCHOR: 'Anker op deze pagina' - LINKDESCR: 'Link omschrijving' - LINKEMAIL: Emailadres - LINKEXTERNAL: 'Een andere website' - LINKFILE: 'Een bestand downloaden' - LINKINTERNAL: 'Pagina op deze site' - LINKOPENNEWWIN: 'Link in een nieuw venster openen?' - LINKTO: 'Verwijs naar' - PAGE: Pagina - URL: URL - URLNOTANOEMBEDRESOURCE: 'The URL ''{url}'' could not be turned into a media resource.' - UpdateMEDIA: 'Update Media' - Image: - PLURALNAME: Files - SINGULARNAME: File - ImageField: - IMAGE: Afbeelding - Image_Cached: - PLURALNAME: Files - SINGULARNAME: File - Image_iframe.ss: - TITLE: 'Afbeelding uploaden' - LeftAndMain: - CANT_REORGANISE: 'You do not have permission to alter Top level pages. Your change was not saved.' - DELETED: Verwijderd. - DropdownBatchActionsDefault: Acties - HELP: Help - PAGETYPE: 'Pagina type: ' - PERMAGAIN: 'U bent uitgelogd uit het CMS. Als U weer wilt inloggen vul dan uw gebruikersnaam en wachtwoord hier beneden in.' - PERMALREADY: 'Helaas, dat deel van het CMS is niet toegankelijk voor U. Hieronder kunt U als iemand anders inloggen.' - PERMDEFAULT: 'Geef uw e-mailadres en wachtwoord voor toegang tot het CMS.' - PLEASESAVE: 'Deze pagina kon niet bijgewerkt worden, omdat deze nog niet is bewaard.' - PreviewButton: Preview - REORGANISATIONSUCCESSFUL: 'Menu-indeling is aangepast' - SAVEDUP: 'Succesvol opgeslagen' - VersionUnknown: onbekend - LeftAndMain_Menu.ss: - Hello: Hi - LOGOUT: 'Log out' - LoginAttempt: - Email: 'Email adres ' - IP: 'IP Adres' - PLURALNAME: 'Login Attempts' - SINGULARNAME: 'Login Attempt' - Status: Status - Member: - ADDGROUP: 'Groep toevoegen' - BUTTONCHANGEPASSWORD: 'Wachtwoord veranderen' - BUTTONLOGIN: Inloggen - BUTTONLOGINOTHER: 'Als iemand anders inloggen' - BUTTONLOSTPASSWORD: 'Ik ben mijn wachtwoord vergeten...' - CONFIRMNEWPASSWORD: 'Bevestig het nieuwe wachtwoord' - CONFIRMPASSWORD: 'Bevestig wachtwoord' - DATEFORMAT: 'Date format' - DefaultAdminFirstname: 'Standaard Beheerder' - DefaultDateTime: Standaard - EMAIL: Email - EMPTYNEWPASSWORD: 'Het nieuwe wachtwoord mag niet leeg zijn, probeer opnieuw' - ENTEREMAIL: 'Typ uw e-mailadres om een link te ontvangen waarmee u uw wachtwoord kunt resetten.' - ERRORLOCKEDOUT: 'Je account is tijdelijk geblokkeerd wegens te veel mislukte pogingen tot aanmelding. Gelieve het over 20 minuten opnieuw te proberen.' - ERRORNEWPASSWORD: 'Het nieuwe wachtwoord komt niet overeen met de bevestiging, probeer het nogmaals' - ERRORPASSWORDNOTMATCH: 'Huidige wachtwoord kom niet overeen, probeer het nogmaals' - ERRORWRONGCRED: 'Dat is niet het juiste email adres of wachtwoord. Probeert U het a.u.b. opnieuw.' - FIRSTNAME: Voornaam - INTERFACELANG: 'Interface Taal' - INVALIDNEWPASSWORD: 'Het wachtwoord {password} is niet geldig' - LOGGEDINAS: 'U bent ingelogd als {name}.' -<<<<<<< HEAD - NEWPASSWORD: 'Nieuw Wachtwoord' -======= - NEWPASSWORD: 'Nieuw wachtwoord' ->>>>>>> origin/translation-staging - PASSWORD: Wachtwoord - PLURALNAME: Leden - PROFILESAVESUCCESS: 'Succesvol opgeslagen' - REMEMBERME: 'Wachtwoord onthouden voor de volgende keer?' - SINGULARNAME: Lid - SUBJECTPASSWORDCHANGED: 'Uw wachtwoord is veranderd' - SUBJECTPASSWORDRESET: 'Link om Uw wachtwoord opnieuw aan te maken' - SURNAME: Achternaam - TIMEFORMAT: 'Time format' - VALIDATIONMEMBEREXISTS: 'Er bestaat reeds een gebruiker met dit emailadres' - ValidationIdentifierFailed: 'Een bestaande gebruiker #{id} kan niet dezelfde unieke velden hebben ({name} = {value}))' - WELCOMEBACK: 'Welkom terug {firstname}' - YOUROLDPASSWORD: 'Uw oude wachtwoord' - belongs_many_many_Groups: Groepen - db_LastVisited: 'Datum van het laatste bezoek' - db_Locale: 'Interface taal' - db_LockedOutUntil: 'Gesloten tot' - db_NumVisit: 'Aantal bezoeken' - db_Password: Wachtwoord - db_PasswordExpiry: 'Wachtwoord Vervaldatum' - MemberAuthenticator: - TITLE: 'Email & Wachtwoord' - MemberDatetimeOptionsetField: - AMORPM: 'AM (Ante meridiem) or PM (Post meridiem)' - 'APPLY FILTER': 'Filter toepassen' - Custom: Aangepast - DATEFORMATBAD: 'Datum is niet correct opgegeven' - DAYNOLEADING: 'Dag van de maand zonder voorloop-nul' - DIGITSDECFRACTIONSECOND: 'One or more digits representing a decimal fraction of a second' - FOURDIGITYEAR: 'Four-digit year' - FULLNAMEMONTH: 'Full name of month (e.g. June)' - HOURNOLEADING: 'Hour without leading zero' - MINUTENOLEADING: 'Minute without leading zero' - MONTHNOLEADING: 'Month digit without leading zero' - Preview: Voorbeeld - SHORTMONTH: 'Short name of month (e.g. Jun)' - TOGGLEHELP: 'Toggle formatting help' - TWODIGITDAY: 'Two-digit day of month' - TWODIGITHOUR: 'Twee cijfer van het uur (00 tot 23)' - TWODIGITMINUTE: 'Two digits of minute (00 through 59)' - TWODIGITMONTH: 'Two-digit month (01=January, etc.)' - TWODIGITSECOND: 'Two digits of second (00 through 59)' - TWODIGITYEAR: 'Twee-cijferig jaar' - MemberImportForm: - Help1: '

Importeer leden in CSV formaat (Kommagescheiden bestandsformaat). Toon geavanceerd gebruik

' - Help2: '

Geavanceerd gebruik

  • Toegestane kolommen: %s
  • Bestaande leden worden geïdentificeerd door middel van hun unieke Code waarde en aangepast met de nieuwe waarden van het geïmporteerde bestand
  • Groepen kunnen toegewezen worden met de Groups kolom. Groepen worden geïdentificeerd met hun Code waarde en meerdere groepen kunnen worden gescheiden met een komma. Bestaande groep lidmaatschappen worden niet gewist.
' - ResultCreated: 'Created {count} members' - ResultDeleted: '%d leden verwijderd' - ResultNone: 'Geen wijzingen' - ResultUpdated: 'Updated {count} members' - MemberPassword: - PLURALNAME: 'Member Passwords' - SINGULARNAME: 'Member Password' - MemberTableField: null - ModelAdmin: - DELETE: Verwijderen - DELETEDRECORDS: 'Deleted {count} records.' - IMPORT: 'Importeren vanuit CSV' - IMPORTEDRECORDS: 'Imported {count} records.' - NOCSVFILE: 'Selecteer een CSV bestand op uw computer om te importeren' - NOIMPORT: 'Niks om te importeren' - RESET: Reset - Title: 'Data Models' - UPDATEDRECORDS: 'Updated {count} records.' - ModelAdmin_ImportSpec.ss: - IMPORTSPECFIELDS: 'Database columns' - IMPORTSPECLINK: 'Show Specification for %s' - IMPORTSPECRELATIONS: Relations - IMPORTSPECTITLE: 'Specification for %s' - ModelAdmin_Tools.ss: - FILTER: Filter - IMPORT: Importeer - ModelSidebar.ss: - IMPORT_TAB_HEADER: Importeer - SEARCHLISTINGS: Zoeken - MoneyField: - FIELDLABELAMOUNT: Aantal - FIELDLABELCURRENCY: Valuta - NullableField: - IsNullLabel: 'is nul' - NumericField: - VALIDATION: '''{value}'' is not a number, only numbers can be accepted for this field' - Pagination: - Page: Page - View: View - Permission: - AdminGroup: Beheerder - CMS_ACCESS_CATEGORY: 'CMS Toegang' - FULLADMINRIGHTS: 'Volledige admin rechten' - FULLADMINRIGHTS_HELP: 'Impliceert en overstemt alle andere toegewezen rechten.' - PLURALNAME: Permissions - SINGULARNAME: Permission - PermissionCheckboxSetField: - AssignedTo: 'assigned to "{title}"' - FromGroup: 'inherited from group "{title}"' - FromRole: 'inherited from role "{title}"' - FromRoleOnGroup: 'geërfd van rol "%s" in groep "%s"' - PermissionRole: - PLURALNAME: Roles - SINGULARNAME: Role - PermissionRoleCode: - PLURALNAME: 'Permission Role Cods' - SINGULARNAME: 'Permission Role Code' - Permissions: - PERMISSIONS_CATEGORY: 'Rollen en toegangsrechten' - PhoneNumberField: - VALIDATION: 'Voer een geldig telefoonnummer in' - RelationComplexTableField.ss: - ADD: Toevoegen - CSVEXPORT: 'Export to CSV' - NOTFOUND: 'No items found' - Security: - ALREADYLOGGEDIN: 'Je hebt niet de juiste rechten, om deze pagina te kunnen bekijken. Als je een ander account met de juiste rechten hebt, kun je hier opnieuw inloggen.' - BUTTONSEND: 'Zend mij de link om mijn wachtwoord opnieuw aan te maken' - CHANGEPASSWORDBELOW: 'U kunt Uw wachtwoord hier beneden veranderen.' - CHANGEPASSWORDHEADER: 'Verander Uw wachtwoord' - ENTERNEWPASSWORD: 'Voer een nieuw wachtwoord in.' - ERRORPASSWORDPERMISSION: 'U moet ingelogd zijn om Uw wachtwoord te kunnen veranderen!' - LOGGEDOUT: 'U bent uitgelogd. Als U weer wilt inloggen kunt U Uw gegevens hier beneden invoeren.' - LOGIN: 'Meld aan' - NOTEPAGESECURED: 'Deze pagina is beveiligd. Voer Uw gegevens in en U wordt automatisch doorgestuurd.' - NOTERESETLINKINVALID: '

De link om uw wachtwoord te kunnen wijzigen is niet meer geldig.

U kunt het opnieuw proberen of uw wachtwoord aanpassen door in te loggen.

' - 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 (Toegestane extensies: *.csv)' - 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 diff --git a/lang/ru.yml.orig b/lang/ru.yml.orig deleted file mode 100644 index 28d5b11b2..000000000 --- a/lang/ru.yml.orig +++ /dev/null @@ -1,586 +0,0 @@ -ru: - AssetAdmin: - ADDFILES: 'Add files' - EditOrgMenu: 'Edit & 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: '

Import one or more groups in CSV format (comma-separated values). Show advanced usage

' - Help2: '

Advanced usage

  • Allowed columns: %s
  • Existing groups are matched by their unique Code value, and updated with any new values from the imported file
  • Group hierarchies can be created by using a ParentCode column.
  • Permission codes can be assigned by the PermissionCode column. Existing permission codes are not cleared.
' - 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 & 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: '

Import users in CSV format (comma-separated values). Show advanced usage

' - Help2: '

Advanced usage

  • Allowed columns: %s
  • Existing users are matched by their unique Code property, and updated with any new values from the imported file.
  • Groups can be assigned by the Groups column. Groups are identified by their Code property, multiple groups can be separated by comma. Existing group memberships are not cleared.
' - ResultCreated: 'Создано {count} пользователей' - ResultDeleted: 'Deleted %d members' - ResultNone: 'No changes' - ResultUpdated: 'Updated {count} members' - MemberPassword: - PLURALNAME: 'Member Passwords' - SINGULARNAME: 'Member Password' - MemberTableField: null - ModelAdmin: - DELETE: Удалить - DELETEDRECORDS: 'Deleted {count} records.' - IMPORT: 'Импорт из CSV' - IMPORTEDRECORDS: 'Imported {count} records.' - NOCSVFILE: 'Выберите CSV-файл для импорта' - NOIMPORT: 'Нечего импортировать' - RESET: Reset - Title: 'Data Models' - UPDATEDRECORDS: 'Updated {count} records.' - ModelAdmin_ImportSpec.ss: - IMPORTSPECFIELDS: 'Database columns' - IMPORTSPECLINK: 'Show Specification for %s' - IMPORTSPECRELATIONS: Relations - IMPORTSPECTITLE: 'Specification for %s' - ModelAdmin_Tools.ss: - FILTER: Filter - IMPORT: Import - ModelSidebar.ss: - IMPORT_TAB_HEADER: Import - SEARCHLISTINGS: Search - MoneyField: - FIELDLABELAMOUNT: Amount - FIELDLABELCURRENCY: Currency - NullableField: - IsNullLabel: Недействительно - NumericField: - VALIDATION: '''{value}'' is not a number, only numbers can be accepted for this field' - Pagination: - Page: Page - View: View - Permission: - AdminGroup: Administrator - CMS_ACCESS_CATEGORY: 'Доступ к CMS' - FULLADMINRIGHTS: 'Все права администратора' - FULLADMINRIGHTS_HELP: 'Implies and overrules all other assigned permissions.' - PLURALNAME: Permissions -<<<<<<< HEAD - SINGULARNAME: Permission -======= - SINGULARNAME: 'Право доступа' ->>>>>>> origin/translation-staging - PermissionCheckboxSetField: - AssignedTo: 'assigned to "{title}"' - FromGroup: 'inherited from group "{title}"' - FromRole: 'inherited from role "{title}"' - FromRoleOnGroup: 'inherited from role "%s" on group "%s"' - PermissionRole: - PLURALNAME: Roles - SINGULARNAME: Role - PermissionRoleCode: - PLURALNAME: 'Permission Role Cods' - SINGULARNAME: 'Permission Role Code' - Permissions: - PERMISSIONS_CATEGORY: 'Роли и разрешения доступа' - PhoneNumberField: - VALIDATION: 'Пожалуйста, введите верный номер телефона' - RelationComplexTableField.ss: - ADD: Добавить - CSVEXPORT: 'Export to CSV' - NOTFOUND: 'No items found' - Security: - ALREADYLOGGEDIN: 'У Вас нет доступа к этой странице. Если у вас имеется другая учетная запись, имеющая доступ к этой странице, введите ее данные ниже.' - BUTTONSEND: 'Отправить мне ссылку переустановки пароля' - CHANGEPASSWORDBELOW: 'Ниже Вы можете изменить свой пароль.' - CHANGEPASSWORDHEADER: 'Измените свой пароль' - ENTERNEWPASSWORD: 'Пожалуйста, введите новый пароль.' - ERRORPASSWORDPERMISSION: 'Вы должны войти в систему, чтобы изменить Ваш пароль!' - LOGGEDOUT: 'Вы вышли. Если Вы хотите войти снова, введите ваши учетные данные ниже.' - LOGIN: Вход - NOTEPAGESECURED: 'Эта страница защищена. Пожалуйста, введите свои учетные данные для входа.' - NOTERESETLINKINVALID: '

The password reset link is invalid or expired.

You can request a new one here or change your password after you logged in.

' - NOTERESETPASSWORD: 'Введите Ваш адрес email, и Вам будет отправлена ссылка, по которой Вы сможете переустановить свой пароль' - PASSWORDSENTHEADER: 'Ссылка для переустановки пароля выслана на ''{email}''' - PASSWORDSENTTEXT: 'Thank you! A reset link has been sent to ''{email}'', provided an account exists for this email address.' - SecurityAdmin: - ACCESS_HELP: 'Allow viewing, adding and editing users, as well as assigning permissions and roles to them.' - APPLY_ROLES: 'Apply roles to groups' - APPLY_ROLES_HELP: 'Возможность редактировать роли, присвоенные той или иной группе. Необходимо разрешение на доступ к разделу "Пользователи".' - EDITPERMISSIONS: 'Задать разрешения и IP адреса для каждой группы' - EDITPERMISSIONS_HELP: 'Возможность редактировать права доступа и IP-адреса определенной группы. Необходимо разрешение на доступ к разделу "Безопасность".' - GROUPNAME: 'Имя группы' - IMPORTGROUPS: 'Импортировать группы' - IMPORTUSERS: 'Импортировать пользователей' - MEMBERS: Участники - MENUTITLE: Безопасность - MemberListCaution: 'Внимание: при удалении участников из этого списка они будут удалены из всех групп и из базы данных' - NEWGROUP: 'Новая группа' - PERMISSIONS: 'Права доступа' - ROLES: Роли - ROLESDESCRIPTION: 'Roles are predefined sets of permissions, and can be assigned to groups.
They are inherited from parent groups if required.' - TABROLES: Роли - Users: Пользователи - SecurityAdmin_MemberImportForm: - BtnImport: 'Import from CSV' - FileFieldLabel: 'CSV File (Allowed extensions: *.csv)' - SilverStripeNavigator: - Edit: Edit - SimpleImageField: - NOUPLOAD: 'Не загружено ни одного изображения' - SiteTree: - TABMAIN: Основное - TableField: - ISREQUIRED: 'In %s ''%s'' is required' - TableField.ss: - ADD: 'Добавить новый ряд' - ADDITEM: 'Add %s' - TableListField: - CSVEXPORT: 'Экспорт в CSV' - PRINT: Печать - Print: Печать - SELECT: 'Выбрать:' - TableListField.ss: - NOITEMSFOUND: 'No items found' - SORTASC: 'По возрастанию' - SORTDESC: 'По убыванию' - TableListField_PageControls.ss: - DISPLAYING: Displaying - OF: of - TO: to - VIEWFIRST: Первый - VIEWLAST: Последний - VIEWNEXT: Следующий - VIEWPREVIOUS: Предыдущий - TimeField: - VALIDATEFORMAT: 'Please enter a valid time format ({format})' - ToggleField: - LESS: меньше - MORE: больше - UploadField: - ATTACHFILE: 'Прикрепить файл' - ATTACHFILES: 'Прикрепить файл(ы)' - AttachFile: 'Прикрепить файл(ы)' - DELETE: 'Delete from files' - DELETEINFO: 'Permanently delete this file from the file store' - DOEDIT: Сохранить - DROPFILE: 'drop a file' - DROPFILES: 'drop files' - Dimensions: Dimensions - EDIT: Edit - EDITINFO: 'Редактировать этот файл' - FIELDNOTSET: 'Информация о файле не найдена' - FROMCOMPUTER: 'С компьютера' - FROMCOMPUTERINFO: 'Select from files' -<<<<<<< HEAD - FROMFILES: 'From files' - HOTLINKINFO: 'Info: This image will be hotlinked. Please ensure you have permissions from the original site creator to do so.' - MAXNUMBEROFFILES: 'Max number of {count} file(s) exceeded.' - MAXNUMBEROFFILESSHORT: 'Can only upload {count} files' - REMOVE: Remove - REMOVEERROR: 'Error removing file' -======= - FROMFILES: 'Из файлов' - HOTLINKINFO: 'Info: This image will be hotlinked. Please ensure you have permissions from the original site creator to do so.' - MAXNUMBEROFFILES: 'Превышено максимальное количество файлов ({count}).' - MAXNUMBEROFFILESSHORT: 'Можно загрузить не более {count} файлов' - REMOVE: Удалить - REMOVEERROR: 'Ошибка при удалении файла' ->>>>>>> origin/translation-staging - REMOVEINFO: 'Remove this file from here, but do not delete it from the file store' - STARTALL: 'Стартовать все' - STARTALLINFO: 'Start all uploads' - Saved: Saved - Versioned: - has_many_Versions: Версии