mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
Merge remote-tracking branch 'origin/3.1.0' into 3.1
This commit is contained in:
commit
c2b312d76f
@ -101,7 +101,19 @@ class SecurityAdmin extends LeftAndMain implements PermissionProvider {
|
|||||||
. ' database'
|
. ' database'
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
)
|
||||||
),
|
),
|
||||||
|
$groupsTab = new Tab('Groups', singleton('Group')->i18n_plural_name(),
|
||||||
|
$groupList
|
||||||
|
)
|
||||||
|
),
|
||||||
|
// necessary for tree node selection in LeftAndMain.EditForm.js
|
||||||
|
new HiddenField('ID', false, 0)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Add import capabilities. Limit to admin since the import logic can affect assigned permissions
|
||||||
|
if(Permission::check('ADMIN')) {
|
||||||
|
$fields->addFieldsToTab('Root.Users', array(
|
||||||
new HeaderField(_t('SecurityAdmin.IMPORTUSERS', 'Import users'), 3),
|
new HeaderField(_t('SecurityAdmin.IMPORTUSERS', 'Import users'), 3),
|
||||||
new LiteralField(
|
new LiteralField(
|
||||||
'MemberImportFormIframe',
|
'MemberImportFormIframe',
|
||||||
@ -111,9 +123,8 @@ class SecurityAdmin extends LeftAndMain implements PermissionProvider {
|
|||||||
$this->Link('memberimport')
|
$this->Link('memberimport')
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
),
|
));
|
||||||
$groupsTab = new Tab('Groups', singleton('Group')->i18n_plural_name(),
|
$fields->addFieldsToTab('Root.Groups', array(
|
||||||
$groupList,
|
|
||||||
new HeaderField(_t('SecurityAdmin.IMPORTGROUPS', 'Import groups'), 3),
|
new HeaderField(_t('SecurityAdmin.IMPORTGROUPS', 'Import groups'), 3),
|
||||||
new LiteralField(
|
new LiteralField(
|
||||||
'GroupImportFormIframe',
|
'GroupImportFormIframe',
|
||||||
@ -123,11 +134,8 @@ class SecurityAdmin extends LeftAndMain implements PermissionProvider {
|
|||||||
$this->Link('groupimport')
|
$this->Link('groupimport')
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
));
|
||||||
),
|
}
|
||||||
// necessary for tree node selection in LeftAndMain.EditForm.js
|
|
||||||
new HiddenField('ID', false, 0)
|
|
||||||
);
|
|
||||||
|
|
||||||
// Tab nav in CMS is rendered through separate template
|
// Tab nav in CMS is rendered through separate template
|
||||||
$root->setTemplate('CMSTabSet');
|
$root->setTemplate('CMSTabSet');
|
||||||
@ -196,6 +204,8 @@ class SecurityAdmin extends LeftAndMain implements PermissionProvider {
|
|||||||
* @return Form
|
* @return Form
|
||||||
*/
|
*/
|
||||||
public function MemberImportForm() {
|
public function MemberImportForm() {
|
||||||
|
if(!Permission::check('ADMIN')) return false;
|
||||||
|
|
||||||
$group = $this->currentPage();
|
$group = $this->currentPage();
|
||||||
$form = new MemberImportForm(
|
$form = new MemberImportForm(
|
||||||
$this,
|
$this,
|
||||||
@ -226,6 +236,8 @@ class SecurityAdmin extends LeftAndMain implements PermissionProvider {
|
|||||||
* @return Form
|
* @return Form
|
||||||
*/
|
*/
|
||||||
public function GroupImportForm() {
|
public function GroupImportForm() {
|
||||||
|
if(!Permission::check('ADMIN')) return false;
|
||||||
|
|
||||||
$form = new GroupImportForm(
|
$form = new GroupImportForm(
|
||||||
$this,
|
$this,
|
||||||
'GroupImportForm'
|
'GroupImportForm'
|
||||||
|
@ -224,15 +224,31 @@
|
|||||||
return this;
|
return this;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return a style element we can use in IE8 to fix fonts (see readystatechange binding in onadd below)
|
||||||
|
*/
|
||||||
|
getOrAppendFontFixStyleElement: function() {
|
||||||
|
var style = $('#FontFixStyleElement');
|
||||||
|
if (!style.length) {
|
||||||
|
style = $(
|
||||||
|
'<style type="text/css" id="FontFixStyleElement" disabled="disabled">'+
|
||||||
|
':before,:after{content:none !important}'+
|
||||||
|
'</style>'
|
||||||
|
).appendTo('head');
|
||||||
|
}
|
||||||
|
|
||||||
|
return style;
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialise the preview element.
|
* Initialise the preview element.
|
||||||
*/
|
*/
|
||||||
onadd: function() {
|
onadd: function() {
|
||||||
var self = this, layoutContainer = this.parent();
|
var self = this, layoutContainer = this.parent(), iframe = this.find('iframe');
|
||||||
|
|
||||||
// Create layout and controls
|
// Create layout and controls
|
||||||
this.find('iframe').addClass('center');
|
iframe.addClass('center');
|
||||||
this.find('iframe').bind('load', function() {
|
iframe.bind('load', function() {
|
||||||
self._adjustIframeForPreview();
|
self._adjustIframeForPreview();
|
||||||
|
|
||||||
// Load edit view for new page, but only if the preview is activated at the moment.
|
// Load edit view for new page, but only if the preview is activated at the moment.
|
||||||
@ -242,6 +258,16 @@
|
|||||||
$(this).removeClass('loading');
|
$(this).removeClass('loading');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// If there's any webfonts in the preview, IE8 will start glitching. This fixes that.
|
||||||
|
if ($.browser.msie && 8 === parseInt($.browser.version, 10)) {
|
||||||
|
iframe.bind('readystatechange', function(e) {
|
||||||
|
if(iframe[0].readyState == 'interactive') {
|
||||||
|
self.getOrAppendFontFixStyleElement().removeAttr('disabled');
|
||||||
|
setTimeout(function(){ self.getOrAppendFontFixStyleElement().attr('disabled', 'disabled'); }, 0);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Preview might not be available in all admin interfaces - block/disable when necessary
|
// Preview might not be available in all admin interfaces - block/disable when necessary
|
||||||
this.append('<div class="cms-preview-overlay ui-widget-overlay-light"></div>');
|
this.append('<div class="cms-preview-overlay ui-widget-overlay-light"></div>');
|
||||||
this.find('.cms-preview-overlay').hide();
|
this.find('.cms-preview-overlay').hide();
|
||||||
|
@ -343,8 +343,24 @@ class HTTP {
|
|||||||
$responseHeaders['Vary'] = 'Cookie, X-Forwarded-Protocol, User-Agent, Accept';
|
$responseHeaders['Vary'] = 'Cookie, X-Forwarded-Protocol, User-Agent, Accept';
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
// Grab header for checking. Unfortunately HTTPRequest uses a mistyped variant.
|
||||||
|
$contentDisposition = $body->getHeader('Content-disposition');
|
||||||
|
if (!$contentDisposition) $contentDisposition = $body->getHeader('Content-Disposition');
|
||||||
|
|
||||||
|
if(
|
||||||
|
Director::is_https() &&
|
||||||
|
strstr($_SERVER["HTTP_USER_AGENT"], 'MSIE')==true &&
|
||||||
|
strstr($contentDisposition, 'attachment;')==true
|
||||||
|
) {
|
||||||
|
// IE6-IE8 have problems saving files when https and no-cache are used
|
||||||
|
// (http://support.microsoft.com/kb/323308)
|
||||||
|
// Note: this is also fixable by ticking "Do not save encrypted pages to disk" in advanced options.
|
||||||
|
$responseHeaders["Cache-Control"] = "max-age=3, must-revalidate, no-transform";
|
||||||
|
$responseHeaders["Pragma"] = "";
|
||||||
|
} else {
|
||||||
$responseHeaders["Cache-Control"] = "no-cache, max-age=0, must-revalidate, no-transform";
|
$responseHeaders["Cache-Control"] = "no-cache, max-age=0, must-revalidate, no-transform";
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(self::$modification_date && self::$cache_age > 0) {
|
if(self::$modification_date && self::$cache_age > 0) {
|
||||||
$responseHeaders["Last-Modified"] = self::gmt_date(self::$modification_date);
|
$responseHeaders["Last-Modified"] = self::gmt_date(self::$modification_date);
|
||||||
|
@ -391,13 +391,9 @@ class SS_HTTPRequest implements ArrayAccess {
|
|||||||
}
|
}
|
||||||
$response = new SS_HTTPResponse($fileData);
|
$response = new SS_HTTPResponse($fileData);
|
||||||
$response->addHeader("Content-Type", "$mimeType; name=\"" . addslashes($fileName) . "\"");
|
$response->addHeader("Content-Type", "$mimeType; name=\"" . addslashes($fileName) . "\"");
|
||||||
|
// Note a IE-only fix that inspects this header in HTTP::add_cache_headers().
|
||||||
$response->addHeader("Content-disposition", "attachment; filename=" . addslashes($fileName));
|
$response->addHeader("Content-disposition", "attachment; filename=" . addslashes($fileName));
|
||||||
$response->addHeader("Content-Length", strlen($fileData));
|
$response->addHeader("Content-Length", strlen($fileData));
|
||||||
$response->addHeader("Pragma", ""); // Necessary because IE has issues sending files over SSL
|
|
||||||
|
|
||||||
if(strstr($_SERVER["HTTP_USER_AGENT"],"MSIE") == true) {
|
|
||||||
$response->addHeader('Cache-Control', 'max-age=3, must-revalidate'); // Workaround for IE6 and 7
|
|
||||||
}
|
|
||||||
|
|
||||||
return $response;
|
return $response;
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
## Details
|
## Details
|
||||||
|
|
||||||
### Security: Require ADMIN for ?flush=1
|
### Security: Require ADMIN for ?flush=1 (SS-2013-001)
|
||||||
|
|
||||||
Flushing the various manifests (class, template, config) is performed through a GET
|
Flushing the various manifests (class, template, config) is performed through a GET
|
||||||
parameter (`flush=1`). Since this action requires more server resources than normal requests,
|
parameter (`flush=1`). Since this action requires more server resources than normal requests,
|
||||||
@ -23,6 +23,18 @@ This applies to both `flush=1` and `flush=all` (technically we only check for th
|
|||||||
but only through web requests made through main.php - CLI requests, or any other request that goes through
|
but only through web requests made through main.php - CLI requests, or any other request that goes through
|
||||||
a custom start up script will still process all flush requests as normal.
|
a custom start up script will still process all flush requests as normal.
|
||||||
|
|
||||||
|
### Security: Privilege escalation through Group hierarchy setting (SS-2013-003)
|
||||||
|
|
||||||
|
See [announcement](http://www.silverstripe.org/ss-2013-003-privilege-escalation-through-group-hierarchy-setting/)
|
||||||
|
|
||||||
|
### Security: Privilege escalation through Group and Member CSV upload (SS-2013-004)
|
||||||
|
|
||||||
|
See [announcement](http://www.silverstripe.org/ss-2013-004-privilege-escalation-through-group-and-member-csv-upload/)
|
||||||
|
|
||||||
|
### Security: Privilege escalation through APPLY_ROLES assignment (SS-2013-005)
|
||||||
|
|
||||||
|
See [announcement](http://www.silverstripe.org/ss-2013-005-privilege-escalation-through-apply-roles-assignment/)
|
||||||
|
|
||||||
## Upgrading
|
## Upgrading
|
||||||
|
|
||||||
* If you have created your own composite database fields, then you should amend the setValue() to allow the passing of
|
* If you have created your own composite database fields, then you should amend the setValue() to allow the passing of
|
||||||
|
38
docs/en/changelogs/rc/3.1.0-rc2.md
Normal file
38
docs/en/changelogs/rc/3.1.0-rc2.md
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
# 3.1.0-rc1
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
### Security: Privilege escalation through Group hierarchy setting (SS-2013-003)
|
||||||
|
|
||||||
|
See [announcement](http://www.silverstripe.org/ss-2013-003-privilege-escalation-through-group-hierarchy-setting/)
|
||||||
|
|
||||||
|
### Security: Privilege escalation through Group and Member CSV upload (SS-2013-004)
|
||||||
|
|
||||||
|
See [announcement](http://www.silverstripe.org/ss-2013-004-privilege-escalation-through-group-and-member-csv-upload/)
|
||||||
|
|
||||||
|
### Security: Privilege escalation through APPLY_ROLES assignment (SS-2013-005)
|
||||||
|
|
||||||
|
See [announcement](http://www.silverstripe.org/ss-2013-005-privilege-escalation-through-apply-roles-assignment/)
|
||||||
|
|
||||||
|
## Changelog
|
||||||
|
|
||||||
|
### Bugfixes
|
||||||
|
|
||||||
|
* 2013-08-30 [091c096](https://github.com/silverstripe/sapphire/commit/091c096) Disallow permissions assign for APPLY_ROLES (SS-2013-005) (Ingo Schommer)
|
||||||
|
* 2013-08-30 [cfa88ad](https://github.com/silverstripe/sapphire/commit/cfa88ad) Privilege escalation through APPLY_ROLES assignment (SS-2013-005) (Ingo Schommer)
|
||||||
|
* 2013-08-30 [46556b6](https://github.com/silverstripe/sapphire/commit/46556b6) Privilege escalation through Group and Member CSV upload (SS-2013-004) (Ingo Schommer)
|
||||||
|
* 2013-08-30 [68ca47b](https://github.com/silverstripe/sapphire/commit/68ca47b) Privilege escalation through Group hierarchy setting (SS-2013-003) (Ingo Schommer)
|
||||||
|
* 2013-08-23 [1461ae9](https://github.com/silverstripe/sapphire/commit/1461ae9) Fix regression in IE no-cache https file downloads. (Mateusz Uzdowski)
|
||||||
|
* 2013-08-22 [45c1d2b](https://github.com/silverstripe/sapphire/commit/45c1d2b) webfonts in preview iframe breaking admin fonts (Hamish Friedlander)
|
||||||
|
* 2013-08-21 [a2026ad](https://github.com/silverstripe/sapphire/commit/a2026ad) flushing on non-dev when Session::cookie_secure is true (Hamish Friedlander)
|
||||||
|
* 2013-08-20 [1c31c09](https://github.com/silverstripe/sapphire/commit/1c31c09) Correct Zend_Locale fallbacks in i18n/DateField/DateTimeField (Ingo Schommer)
|
||||||
|
* 2013-08-20 [68d8ec3](https://github.com/silverstripe/sapphire/commit/68d8ec3) Memory leaks in jstree drag & drop (Hamish Friedlander)
|
||||||
|
* 2013-08-20 [fda4b91](https://github.com/silverstripe/sapphire/commit/fda4b91) Make sure CurrentXHR is set back to null on completion (Hamish Friedlander)
|
||||||
|
* 2013-08-20 [e282f0b](https://github.com/silverstripe/sapphire/commit/e282f0b) Two memory leaks with HtmlEditorField (Hamish Friedlander)
|
||||||
|
* 2013-08-19 [4a7aef0](https://github.com/silverstripe/sapphire/commit/4a7aef0) Double slashes in ParameterConfirmationToken (Hamish Friedlander)
|
||||||
|
* 2013-08-15 [0ca4969](https://github.com/silverstripe/sapphire/commit/0ca4969) Dont update preview iframe if hidden (Hamish Friedlander)
|
||||||
|
* 2013-08-12 [c59305d](https://github.com/silverstripe/sapphire/commit/c59305d) Multiple redraw calls on navigation (Hamish Friedlander)
|
||||||
|
* 2013-08-09 [b1664f8](https://github.com/silverstripe/silverstripe-cms/commit/b1664f8) Check for stage and drafts in SiteTree::canView() (Simon Welsh)
|
||||||
|
* 2013-08-08 [2fae928](https://github.com/silverstripe/silverstripe-cms/commit/2fae928) ArchiveDate enforcement (Hamish Friedlander)
|
||||||
|
* 2013-08-07 [fb67181](https://github.com/silverstripe/sapphire/commit/fb67181) Context menu too long - CSS only (Fixes CMS #811) (Naomi Guyer)
|
||||||
|
* 2013-08-07 [71608f0](https://github.com/silverstripe/silverstripe-cms/commit/71608f0) Add SiteTree link tracking as an extension, and apply to SiteTree itself (Hamish Friedlander)
|
@ -217,6 +217,8 @@ class DateField extends TextField {
|
|||||||
* @param String|Array $val
|
* @param String|Array $val
|
||||||
*/
|
*/
|
||||||
public function setValue($val) {
|
public function setValue($val) {
|
||||||
|
$locale = new Zend_Locale($this->locale);
|
||||||
|
|
||||||
if(empty($val)) {
|
if(empty($val)) {
|
||||||
$this->value = null;
|
$this->value = null;
|
||||||
$this->valueObj = null;
|
$this->valueObj = null;
|
||||||
@ -226,7 +228,7 @@ class DateField extends TextField {
|
|||||||
if(is_array($val) && $this->validateArrayValue($val)) {
|
if(is_array($val) && $this->validateArrayValue($val)) {
|
||||||
// set() gets confused with custom date formats when using array notation
|
// set() gets confused with custom date formats when using array notation
|
||||||
if(!(empty($val['day']) || empty($val['month']) || empty($val['year']))) {
|
if(!(empty($val['day']) || empty($val['month']) || empty($val['year']))) {
|
||||||
$this->valueObj = new Zend_Date($val, null, $this->locale);
|
$this->valueObj = new Zend_Date($val, null, $locale);
|
||||||
$this->value = $this->valueObj->toArray();
|
$this->value = $this->valueObj->toArray();
|
||||||
} else {
|
} else {
|
||||||
$this->value = $val;
|
$this->value = $val;
|
||||||
@ -234,8 +236,8 @@ class DateField extends TextField {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// load ISO date from database (usually through Form->loadDataForm())
|
// load ISO date from database (usually through Form->loadDataForm())
|
||||||
else if(!empty($val) && Zend_Date::isDate($val, $this->getConfig('datavalueformat'), $this->locale)) {
|
else if(!empty($val) && Zend_Date::isDate($val, $this->getConfig('datavalueformat'), $locale)) {
|
||||||
$this->valueObj = new Zend_Date($val, $this->getConfig('datavalueformat'), $this->locale);
|
$this->valueObj = new Zend_Date($val, $this->getConfig('datavalueformat'), $locale);
|
||||||
$this->value = $this->valueObj->toArray();
|
$this->value = $this->valueObj->toArray();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -247,15 +249,15 @@ class DateField extends TextField {
|
|||||||
// Caution: Its important to have this check *before* the ISO date fallback,
|
// Caution: Its important to have this check *before* the ISO date fallback,
|
||||||
// as some dates are falsely detected as ISO by isDate(), e.g. '03/04/03'
|
// as some dates are falsely detected as ISO by isDate(), e.g. '03/04/03'
|
||||||
// (en_NZ for 3rd of April, definetly not yyyy-MM-dd)
|
// (en_NZ for 3rd of April, definetly not yyyy-MM-dd)
|
||||||
if(!empty($val) && Zend_Date::isDate($val, $this->getConfig('dateformat'), $this->locale)) {
|
if(!empty($val) && Zend_Date::isDate($val, $this->getConfig('dateformat'), $locale)) {
|
||||||
$this->valueObj = new Zend_Date($val, $this->getConfig('dateformat'), $this->locale);
|
$this->valueObj = new Zend_Date($val, $this->getConfig('dateformat'), $locale);
|
||||||
$this->value = $this->valueObj->get($this->getConfig('dateformat'), $this->locale);
|
$this->value = $this->valueObj->get($this->getConfig('dateformat'), $locale);
|
||||||
|
|
||||||
}
|
}
|
||||||
// load ISO date from database (usually through Form->loadDataForm())
|
// load ISO date from database (usually through Form->loadDataForm())
|
||||||
else if(!empty($val) && Zend_Date::isDate($val, $this->getConfig('datavalueformat'))) {
|
else if(!empty($val) && Zend_Date::isDate($val, $this->getConfig('datavalueformat'))) {
|
||||||
$this->valueObj = new Zend_Date($val, $this->getConfig('datavalueformat'));
|
$this->valueObj = new Zend_Date($val, $this->getConfig('datavalueformat'));
|
||||||
$this->value = $this->valueObj->get($this->getConfig('dateformat'), $this->locale);
|
$this->value = $this->valueObj->get($this->getConfig('dateformat'), $locale);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$this->value = $val;
|
$this->value = $val;
|
||||||
|
@ -115,6 +115,8 @@ class DatetimeField extends FormField {
|
|||||||
* the 'date' value may contain array notation was well (see {@link DateField->setValue()}).
|
* the 'date' value may contain array notation was well (see {@link DateField->setValue()}).
|
||||||
*/
|
*/
|
||||||
public function setValue($val) {
|
public function setValue($val) {
|
||||||
|
$locale = new Zend_Locale($this->locale);
|
||||||
|
|
||||||
// If timezones are enabled, assume user data needs to be reverted to server timezone
|
// If timezones are enabled, assume user data needs to be reverted to server timezone
|
||||||
if($this->getConfig('usertimezone')) {
|
if($this->getConfig('usertimezone')) {
|
||||||
// Accept user input on timezone, but only when timezone support is enabled
|
// Accept user input on timezone, but only when timezone support is enabled
|
||||||
@ -130,7 +132,7 @@ class DatetimeField extends FormField {
|
|||||||
$this->timeField->setValue(null);
|
$this->timeField->setValue(null);
|
||||||
} else {
|
} else {
|
||||||
// Case 1: String setting from database, in ISO date format
|
// Case 1: String setting from database, in ISO date format
|
||||||
if(is_string($val) && Zend_Date::isDate($val, $this->getConfig('datavalueformat'), $this->locale)) {
|
if(is_string($val) && Zend_Date::isDate($val, $this->getConfig('datavalueformat'), $locale)) {
|
||||||
$this->value = $val;
|
$this->value = $val;
|
||||||
}
|
}
|
||||||
// Case 2: Array form submission with user date format
|
// Case 2: Array form submission with user date format
|
||||||
@ -145,13 +147,13 @@ class DatetimeField extends FormField {
|
|||||||
$this->dateField->setValue($val['date']);
|
$this->dateField->setValue($val['date']);
|
||||||
$this->timeField->setValue($val['time']);
|
$this->timeField->setValue($val['time']);
|
||||||
if($this->dateField->dataValue() && $this->timeField->dataValue()) {
|
if($this->dateField->dataValue() && $this->timeField->dataValue()) {
|
||||||
$userValueObj = new Zend_Date(null, null, $this->locale);
|
$userValueObj = new Zend_Date(null, null, $locale);
|
||||||
$userValueObj->setDate($this->dateField->dataValue(),
|
$userValueObj->setDate($this->dateField->dataValue(),
|
||||||
$this->dateField->getConfig('datavalueformat'));
|
$this->dateField->getConfig('datavalueformat'));
|
||||||
$userValueObj->setTime($this->timeField->dataValue(),
|
$userValueObj->setTime($this->timeField->dataValue(),
|
||||||
$this->timeField->getConfig('datavalueformat'));
|
$this->timeField->getConfig('datavalueformat'));
|
||||||
if($userTz) $userValueObj->setTimezone($dataTz);
|
if($userTz) $userValueObj->setTimezone($dataTz);
|
||||||
$this->value = $userValueObj->get($this->getConfig('datavalueformat'), $this->locale);
|
$this->value = $userValueObj->get($this->getConfig('datavalueformat'), $locale);
|
||||||
unset($userValueObj);
|
unset($userValueObj);
|
||||||
} else {
|
} else {
|
||||||
// Validation happens later, so set the raw string in case Zend_Date doesn't accept it
|
// Validation happens later, so set the raw string in case Zend_Date doesn't accept it
|
||||||
@ -168,8 +170,8 @@ class DatetimeField extends FormField {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// view settings (dates might differ from $this->value based on user timezone settings)
|
// view settings (dates might differ from $this->value based on user timezone settings)
|
||||||
if (Zend_Date::isDate($this->value, $this->getConfig('datavalueformat'), $this->locale)) {
|
if (Zend_Date::isDate($this->value, $this->getConfig('datavalueformat'), $locale)) {
|
||||||
$valueObj = new Zend_Date($this->value, $this->getConfig('datavalueformat'), $this->locale);
|
$valueObj = new Zend_Date($this->value, $this->getConfig('datavalueformat'), $locale);
|
||||||
if($userTz) $valueObj->setTimezone($userTz);
|
if($userTz) $valueObj->setTimezone($userTz);
|
||||||
|
|
||||||
// Set view values in sub-fields
|
// Set view values in sub-fields
|
||||||
@ -177,9 +179,9 @@ class DatetimeField extends FormField {
|
|||||||
$this->dateField->setValue($valueObj->toArray());
|
$this->dateField->setValue($valueObj->toArray());
|
||||||
} else {
|
} else {
|
||||||
$this->dateField->setValue(
|
$this->dateField->setValue(
|
||||||
$valueObj->get($this->dateField->getConfig('dateformat'), $this->locale));
|
$valueObj->get($this->dateField->getConfig('dateformat'), $locale));
|
||||||
}
|
}
|
||||||
$this->timeField->setValue($valueObj->get($this->timeField->getConfig('timeformat'), $this->locale));
|
$this->timeField->setValue($valueObj->get($this->timeField->getConfig('timeformat'), $locale));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2233,11 +2233,9 @@ class i18n extends Object implements TemplateGlobalProvider {
|
|||||||
// TODO Replace with CLDR list of actually available languages/regions
|
// TODO Replace with CLDR list of actually available languages/regions
|
||||||
// Only allow explicitly registered locales, otherwise we'll get into trouble
|
// Only allow explicitly registered locales, otherwise we'll get into trouble
|
||||||
// if the locale doesn't exist in Zend's CLDR data
|
// if the locale doesn't exist in Zend's CLDR data
|
||||||
$labelLocale = str_replace('-', '_', self::get_locale_from_lang($locale));
|
$fullLocale = self::get_locale_from_lang($locale);
|
||||||
if(isset(self::$all_locales[$locale])) {
|
if(isset($allLocales[$fullLocale])) {
|
||||||
$locales[$locale] = self::$all_locales[$locale];
|
$locales[$fullLocale] = $allLocales[$fullLocale];
|
||||||
} else if(isset(self::$all_locales[$labelLocale])) {
|
|
||||||
$locales[$locale] = self::$all_locales[$labelLocale];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2356,7 +2354,7 @@ class i18n extends Object implements TemplateGlobalProvider {
|
|||||||
public static function get_locale_from_lang($lang) {
|
public static function get_locale_from_lang($lang) {
|
||||||
$subtags = Config::inst()->get('i18n', 'likely_subtags');
|
$subtags = Config::inst()->get('i18n', 'likely_subtags');
|
||||||
if(preg_match('/\-|_/', $lang)) {
|
if(preg_match('/\-|_/', $lang)) {
|
||||||
return $lang;
|
return str_replace('-', '_', $lang);
|
||||||
} else if(isset($subtags[$lang])) {
|
} else if(isset($subtags[$lang])) {
|
||||||
return $subtags[$lang];
|
return $subtags[$lang];
|
||||||
} else {
|
} else {
|
||||||
|
22
lang/cs.yml
22
lang/cs.yml
@ -13,12 +13,13 @@ cs:
|
|||||||
SIZE: 'Velikost'
|
SIZE: 'Velikost'
|
||||||
TITLE: Titulek
|
TITLE: Titulek
|
||||||
TYPE: 'Typ'
|
TYPE: 'Typ'
|
||||||
|
URL: URL
|
||||||
AssetUploadField:
|
AssetUploadField:
|
||||||
ChooseFiles: 'Vyberte soubory'
|
ChooseFiles: 'Vyberte soubory'
|
||||||
DRAGFILESHERE: 'Táhni soubory sem'
|
DRAGFILESHERE: 'Táhni soubory sem'
|
||||||
DROPAREA: 'Oblast upustění'
|
DROPAREA: 'Oblast upustění'
|
||||||
EDITALL: 'Editovat vše'
|
EDITALL: 'Editovat vše'
|
||||||
EDITANDORGANIZE: 'Editovat & organizovat'
|
EDITANDORGANIZE: 'Editovat a organizovat'
|
||||||
EDITINFO: 'Editovat soubory'
|
EDITINFO: 'Editovat soubory'
|
||||||
FILES: Soubory
|
FILES: Soubory
|
||||||
FROMCOMPUTER: 'Vyberte soubory z vašeho počítače'
|
FROMCOMPUTER: 'Vyberte soubory z vašeho počítače'
|
||||||
@ -73,6 +74,7 @@ cs:
|
|||||||
ChangePasswordEmail_ss:
|
ChangePasswordEmail_ss:
|
||||||
CHANGEPASSWORDTEXT1: 'Vaše heslo bylo změněno pro'
|
CHANGEPASSWORDTEXT1: 'Vaše heslo bylo změněno pro'
|
||||||
CHANGEPASSWORDTEXT2: 'Nyní můžete použít následující přihlašovací údaje pro přihlášení:'
|
CHANGEPASSWORDTEXT2: 'Nyní můžete použít následující přihlašovací údaje pro přihlášení:'
|
||||||
|
EMAIL: E-mail
|
||||||
HELLO: Dobrý den
|
HELLO: Dobrý den
|
||||||
PASSWORD: Heslo
|
PASSWORD: Heslo
|
||||||
ComplexTableField:
|
ComplexTableField:
|
||||||
@ -304,6 +306,7 @@ cs:
|
|||||||
LINKOPENNEWWIN: 'Otevřít odkaz v novém okně?'
|
LINKOPENNEWWIN: 'Otevřít odkaz v novém okně?'
|
||||||
LINKTO: 'Odkázat na'
|
LINKTO: 'Odkázat na'
|
||||||
PAGE: Stránku
|
PAGE: Stránku
|
||||||
|
URL: URL
|
||||||
URLNOTANOEMBEDRESOURCE: 'URL ''{url}'' nemůže být vloženo do zdroje médií.'
|
URLNOTANOEMBEDRESOURCE: 'URL ''{url}'' nemůže být vloženo do zdroje médií.'
|
||||||
UpdateMEDIA: 'Aktualizovat média'
|
UpdateMEDIA: 'Aktualizovat média'
|
||||||
BUTTONADDURL: 'Přidat url'
|
BUTTONADDURL: 'Přidat url'
|
||||||
@ -342,6 +345,7 @@ cs:
|
|||||||
IP: 'IP adresy'
|
IP: 'IP adresy'
|
||||||
PLURALNAME: 'Pokusy přihlášení'
|
PLURALNAME: 'Pokusy přihlášení'
|
||||||
SINGULARNAME: 'Pokus přihlášení'
|
SINGULARNAME: 'Pokus přihlášení'
|
||||||
|
Status: Stav
|
||||||
Member:
|
Member:
|
||||||
ADDGROUP: 'Přidat skupinu'
|
ADDGROUP: 'Přidat skupinu'
|
||||||
BUTTONCHANGEPASSWORD: 'Změnit heslo'
|
BUTTONCHANGEPASSWORD: 'Změnit heslo'
|
||||||
@ -354,9 +358,11 @@ cs:
|
|||||||
DATEFORMAT: 'Formát datumu'
|
DATEFORMAT: 'Formát datumu'
|
||||||
DefaultAdminFirstname: 'Implicitní Admin'
|
DefaultAdminFirstname: 'Implicitní Admin'
|
||||||
DefaultDateTime: výchozí
|
DefaultDateTime: výchozí
|
||||||
|
EMAIL: E-mail
|
||||||
EMPTYNEWPASSWORD: 'Nové heslo nesmí být prázdné, zkuste to znovu'
|
EMPTYNEWPASSWORD: 'Nové heslo nesmí být prázdné, zkuste to znovu'
|
||||||
ENTEREMAIL: 'Zadejte e-mailovou adresu pro získání odkazu na restart hesla.'
|
ENTEREMAIL: 'Zadejte e-mailovou adresu pro získání odkazu na restart hesla.'
|
||||||
ERRORLOCKEDOUT: 'Váš účet byl dočasně zablokován, kvůli příliš velkému množství nezdařených pokusů o přihlášení. Zkuste se prosím přihlásit za 20 minut.'
|
ERRORLOCKEDOUT: 'Váš účet byl dočasně zablokován, kvůli příliš velkému množství nezdařených pokusů o přihlášení. Zkuste se prosím přihlásit za 20 minut.'
|
||||||
|
ERRORLOCKEDOUT2: 'Váš účet byl dočasně zablokován, kvůli příliš velkému množství nezdařených pokusů o přihlášení. Zkuste se prosím přihlásit za {count} minut.'
|
||||||
ERRORNEWPASSWORD: 'Zadali jste nové heslo rozdílně, zkuste to znovu'
|
ERRORNEWPASSWORD: 'Zadali jste nové heslo rozdílně, zkuste to znovu'
|
||||||
ERRORPASSWORDNOTMATCH: 'Váše současné heslo není správně, prosím zkuste to znovu'
|
ERRORPASSWORDNOTMATCH: 'Váše současné heslo není správně, prosím zkuste to znovu'
|
||||||
ERRORWRONGCRED: 'Toto nevypadá jako správná emailová adresa nebo heslo. Prosím zkuste to znovu.'
|
ERRORWRONGCRED: 'Toto nevypadá jako správná emailová adresa nebo heslo. Prosím zkuste to znovu.'
|
||||||
@ -384,6 +390,7 @@ cs:
|
|||||||
db_NumVisit: 'Počet návštěvníků'
|
db_NumVisit: 'Počet návštěvníků'
|
||||||
db_Password: Heslo
|
db_Password: Heslo
|
||||||
db_PasswordExpiry: 'Datum vypršení hesla'
|
db_PasswordExpiry: 'Datum vypršení hesla'
|
||||||
|
NoPassword: 'Neni zde heslo pro tohoto člena'
|
||||||
MemberAuthenticator:
|
MemberAuthenticator:
|
||||||
TITLE: 'E-mail a Heslo'
|
TITLE: 'E-mail a Heslo'
|
||||||
MemberDatetimeOptionsetField:
|
MemberDatetimeOptionsetField:
|
||||||
@ -466,6 +473,7 @@ cs:
|
|||||||
PermissionRole:
|
PermissionRole:
|
||||||
OnlyAdminCanApply: 'Pouze administrátor může použít'
|
OnlyAdminCanApply: 'Pouze administrátor může použít'
|
||||||
PLURALNAME: Role
|
PLURALNAME: Role
|
||||||
|
SINGULARNAME: Role
|
||||||
Title: Název
|
Title: Název
|
||||||
PermissionRoleCode:
|
PermissionRoleCode:
|
||||||
PLURALNAME: 'Kódy role oprávnění'
|
PLURALNAME: 'Kódy role oprávnění'
|
||||||
@ -481,6 +489,7 @@ cs:
|
|||||||
NOTFOUND: 'Žádné položky'
|
NOTFOUND: 'Žádné položky'
|
||||||
Security:
|
Security:
|
||||||
ALREADYLOGGEDIN: 'K této stránce nemáte přístup. Pokud máte jiný účet, který k ní může přistupovat, můžete se přihlásit níže'
|
ALREADYLOGGEDIN: 'K této stránce nemáte přístup. Pokud máte jiný účet, který k ní může přistupovat, můžete se přihlásit níže'
|
||||||
|
LOSTPASSWORDHEADER: 'Ztracené heslo'
|
||||||
BUTTONSEND: 'Pošlete mi nulovací odkaz pro heslo'
|
BUTTONSEND: 'Pošlete mi nulovací odkaz pro heslo'
|
||||||
CHANGEPASSWORDBELOW: 'Svoje heslo si můžete změnit níže.'
|
CHANGEPASSWORDBELOW: 'Svoje heslo si můžete změnit níže.'
|
||||||
CHANGEPASSWORDHEADER: 'Změnit heslo'
|
CHANGEPASSWORDHEADER: 'Změnit heslo'
|
||||||
@ -516,7 +525,9 @@ cs:
|
|||||||
FileFieldLabel: 'Soubor CSV <small>(Povoleny přípony: *.csv)</small>'
|
FileFieldLabel: 'Soubor CSV <small>(Povoleny přípony: *.csv)</small>'
|
||||||
SilverStripeNavigator:
|
SilverStripeNavigator:
|
||||||
Edit: Editovat
|
Edit: Editovat
|
||||||
|
Auto: Auto
|
||||||
ChangeViewMode: 'Změnit mód zobrazení'
|
ChangeViewMode: 'Změnit mód zobrazení'
|
||||||
|
Desktop: Desktop
|
||||||
DualWindowView: 'Dualní okno'
|
DualWindowView: 'Dualní okno'
|
||||||
EditView: 'Mód editace'
|
EditView: 'Mód editace'
|
||||||
Mobile: Mobilní telefon
|
Mobile: Mobilní telefon
|
||||||
@ -524,6 +535,7 @@ cs:
|
|||||||
PreviewView: 'Mód náhledu'
|
PreviewView: 'Mód náhledu'
|
||||||
Responsive: Responzivní
|
Responsive: Responzivní
|
||||||
SplitView: 'Mód rozdělení'
|
SplitView: 'Mód rozdělení'
|
||||||
|
Tablet: Tablet
|
||||||
ViewDeviceWidth: 'Vyberte šířku náhledu'
|
ViewDeviceWidth: 'Vyberte šířku náhledu'
|
||||||
Width: šířka
|
Width: šířka
|
||||||
SimpleImageField:
|
SimpleImageField:
|
||||||
@ -593,3 +605,11 @@ cs:
|
|||||||
PREVIEW: 'Náhled webu'
|
PREVIEW: 'Náhled webu'
|
||||||
GridFieldEditButton_ss:
|
GridFieldEditButton_ss:
|
||||||
EDIT: Editovat
|
EDIT: Editovat
|
||||||
|
ContentController:
|
||||||
|
NOTLOGGEDIN: 'Nepřihlášen'
|
||||||
|
GridFieldItemEditView:
|
||||||
|
Go_back: 'Jdi zpět'
|
||||||
|
PasswordValidator:
|
||||||
|
LOWCHARSTRENGTH: 'Prosím, posilněte heslo přidáním některých z následujících znaků: %s'
|
||||||
|
PREVPASSWORD: 'Již jste použil toto heslo v minulosti, vyberte nové heslo, prosím'
|
||||||
|
TOOSHORT: 'Heslo je příliš krátké, musí být %s nebo více znaků dlouhé'
|
||||||
|
17
lang/de.yml
17
lang/de.yml
@ -390,6 +390,7 @@ de:
|
|||||||
db_NumVisit: 'Anzahl der Besuche'
|
db_NumVisit: 'Anzahl der Besuche'
|
||||||
db_Password: Passwort
|
db_Password: Passwort
|
||||||
db_PasswordExpiry: 'Ablaufdatum des Passworts'
|
db_PasswordExpiry: 'Ablaufdatum des Passworts'
|
||||||
|
NoPassword: 'Dieser Benutzer hat kein Passwort.'
|
||||||
MemberAuthenticator:
|
MemberAuthenticator:
|
||||||
TITLE: 'E-Mail & Passwort'
|
TITLE: 'E-Mail & Passwort'
|
||||||
MemberDatetimeOptionsetField:
|
MemberDatetimeOptionsetField:
|
||||||
@ -488,6 +489,7 @@ de:
|
|||||||
NOTFOUND: 'Keine Elemente gefunden'
|
NOTFOUND: 'Keine Elemente gefunden'
|
||||||
Security:
|
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.'
|
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.'
|
||||||
|
LOSTPASSWORDHEADER: 'Passwort vergessen'
|
||||||
BUTTONSEND: 'Senden Sie mir den Link zur Passwortrücksetzung'
|
BUTTONSEND: 'Senden Sie mir den Link zur Passwortrücksetzung'
|
||||||
CHANGEPASSWORDBELOW: 'Sie können Ihr Passwort unten ändern.'
|
CHANGEPASSWORDBELOW: 'Sie können Ihr Passwort unten ändern.'
|
||||||
CHANGEPASSWORDHEADER: 'Passwort ändern'
|
CHANGEPASSWORDHEADER: 'Passwort ändern'
|
||||||
@ -529,6 +531,7 @@ de:
|
|||||||
DualWindowView: 'Zwei Fenster'
|
DualWindowView: 'Zwei Fenster'
|
||||||
EditView: 'Bearbeitungsmodus'
|
EditView: 'Bearbeitungsmodus'
|
||||||
Mobile: Mobil
|
Mobile: Mobil
|
||||||
|
PreviewState: 'Vorschau Status'
|
||||||
PreviewView: 'Vorschaumodus'
|
PreviewView: 'Vorschaumodus'
|
||||||
Responsive: Responsive
|
Responsive: Responsive
|
||||||
SplitView: 'Geteilter Modus'
|
SplitView: 'Geteilter Modus'
|
||||||
@ -571,23 +574,29 @@ de:
|
|||||||
ATTACHFILES: 'Dateien anhängen'
|
ATTACHFILES: 'Dateien anhängen'
|
||||||
AttachFile: 'Datei(en) anhängen'
|
AttachFile: 'Datei(en) anhängen'
|
||||||
DELETE: 'Aus Dateien löschen'
|
DELETE: 'Aus Dateien löschen'
|
||||||
|
DELETEINFO: 'Diese Datei am Server löschen'
|
||||||
DOEDIT: Speichern
|
DOEDIT: Speichern
|
||||||
DROPFILE: 'Datei hier ablegen'
|
DROPFILE: 'Datei hier ablegen'
|
||||||
|
DROPFILES: 'Dateien hier ablegen'
|
||||||
Dimensions: Dimensionen
|
Dimensions: Dimensionen
|
||||||
EDIT: Bearbeiten
|
EDIT: Bearbeiten
|
||||||
EDITINFO: 'Diese Datei bearbeiten'
|
EDITINFO: 'Diese Datei bearbeiten'
|
||||||
FIELDNOTSET: 'Dateiinformationen nicht gefunden'
|
FIELDNOTSET: 'Dateiinformationen nicht gefunden'
|
||||||
FROMCOMPUTER: 'Von Ihrem Computer'
|
FROMCOMPUTER: 'Von Ihrem Computer'
|
||||||
FROMCOMPUTERINFO: 'Aus Dateien auswählen'
|
FROMCOMPUTERINFO: 'Aus Dateien auswählen'
|
||||||
|
FROMFILES: 'Aus Dateien'
|
||||||
HOTLINKINFO: 'Info: Dieses Bild wird verknüpft. Bitte vergewissere dich die Erlaubnis des Inhabers der Ursprungsseite zu haben.'
|
HOTLINKINFO: 'Info: Dieses Bild wird verknüpft. Bitte vergewissere dich die Erlaubnis des Inhabers der Ursprungsseite zu haben.'
|
||||||
MAXNUMBEROFFILES: 'Maximale Anzahl an {count} Datei(en) überschritten'
|
MAXNUMBEROFFILES: 'Maximale Anzahl an {count} Datei(en) überschritten'
|
||||||
MAXNUMBEROFFILESSHORT: 'SIe können maximal {count} Datei(en) hochladen'
|
MAXNUMBEROFFILESSHORT: 'SIe können maximal {count} Datei(en) hochladen'
|
||||||
MAXNUMBEROFFILESONE: 'SIe können maximal eine Datei hochladen'
|
MAXNUMBEROFFILESONE: 'SIe können maximal eine Datei hochladen'
|
||||||
REMOVE: Entfernen
|
REMOVE: Entfernen
|
||||||
REMOVEERROR: 'Fehler beim Entfernen der Datei'
|
REMOVEERROR: 'Fehler beim Entfernen der Datei'
|
||||||
|
REMOVEINFO: 'Diese Datei entfernen aber nicht am Server löschen'
|
||||||
|
STARTALL: 'Alle starten'
|
||||||
STARTALLINFO: 'Alle Uploads starten'
|
STARTALLINFO: 'Alle Uploads starten'
|
||||||
Saved: Gespeichert
|
Saved: Gespeichert
|
||||||
CHOOSEANOTHERFILE: 'Andere Datei auswählen'
|
CHOOSEANOTHERFILE: 'Andere Datei auswählen'
|
||||||
|
CHOOSEANOTHERINFO: 'Diese Datei mit einer Datei vom Server ersetzen'
|
||||||
OVERWRITEWARNING: 'Eine Datei mit dem selben Namen existiert bereits'
|
OVERWRITEWARNING: 'Eine Datei mit dem selben Namen existiert bereits'
|
||||||
UPLOADSINTO: 'speichert nach /{path}'
|
UPLOADSINTO: 'speichert nach /{path}'
|
||||||
Versioned:
|
Versioned:
|
||||||
@ -596,3 +605,11 @@ de:
|
|||||||
PREVIEW: 'Vorschau der Webseite'
|
PREVIEW: 'Vorschau der Webseite'
|
||||||
GridFieldEditButton_ss:
|
GridFieldEditButton_ss:
|
||||||
EDIT: Bearbeiten
|
EDIT: Bearbeiten
|
||||||
|
ContentController:
|
||||||
|
NOTLOGGEDIN: 'Nicht eingeloggt'
|
||||||
|
GridFieldItemEditView:
|
||||||
|
Go_back: 'Zurück'
|
||||||
|
PasswordValidator:
|
||||||
|
LOWCHARSTRENGTH: 'Bitte erhöhen Sie die Sicherheit des Passworts, indem Sie auch einige der folgenden Zeichen verwenden: %s'
|
||||||
|
PREVPASSWORD: 'Sie haben dieses Passwort schon einmal verwendet. Bitte wählen Sie ein neues Passwort'
|
||||||
|
TOOSHORT: 'Das Passwort ist zu kurz, es muss mindestens %s Zeichen lang sein'
|
||||||
|
95
lang/fr.yml
95
lang/fr.yml
@ -1,8 +1,11 @@
|
|||||||
fr:
|
fr:
|
||||||
AssetAdmin:
|
AssetAdmin:
|
||||||
|
ALLOWEDEXTS: 'Extensions autorisées'
|
||||||
NEWFOLDER: Nouveau dossier
|
NEWFOLDER: Nouveau dossier
|
||||||
|
SHOWALLOWEDEXTS: 'Montrer les extensions autorisées'
|
||||||
AssetTableField:
|
AssetTableField:
|
||||||
CREATED: 'Premier chargement'
|
CREATED: 'Premier chargement'
|
||||||
|
DIM: Dimensions
|
||||||
FILENAME: Nom du fichier
|
FILENAME: Nom du fichier
|
||||||
FOLDER: Dossier
|
FOLDER: Dossier
|
||||||
LASTEDIT: 'Dernière modification'
|
LASTEDIT: 'Dernière modification'
|
||||||
@ -10,6 +13,7 @@ fr:
|
|||||||
SIZE: 'Taille'
|
SIZE: 'Taille'
|
||||||
TITLE: Titre
|
TITLE: Titre
|
||||||
TYPE: 'Type'
|
TYPE: 'Type'
|
||||||
|
URL: URL
|
||||||
AssetUploadField:
|
AssetUploadField:
|
||||||
ChooseFiles: 'Choisissez les fichiers'
|
ChooseFiles: 'Choisissez les fichiers'
|
||||||
DRAGFILESHERE: 'Glissez des fichiers ici'
|
DRAGFILESHERE: 'Glissez des fichiers ici'
|
||||||
@ -20,6 +24,7 @@ fr:
|
|||||||
FILES: Fichiers
|
FILES: Fichiers
|
||||||
FROMCOMPUTER: 'Choisissez des fichiers de votre ordinateur'
|
FROMCOMPUTER: 'Choisissez des fichiers de votre ordinateur'
|
||||||
FROMCOMPUTERINFO: 'Télécharger depuis votre ordinateur'
|
FROMCOMPUTERINFO: 'Télécharger depuis votre ordinateur'
|
||||||
|
TOTAL: Total
|
||||||
TOUPLOAD: 'Choisissez les fichiers à télécharger…'
|
TOUPLOAD: 'Choisissez les fichiers à télécharger…'
|
||||||
UPLOADINPROGRESS: 'Patientez s''il vous plaît… téléchargement en cours '
|
UPLOADINPROGRESS: 'Patientez s''il vous plaît… téléchargement en cours '
|
||||||
UPLOADOR: OU
|
UPLOADOR: OU
|
||||||
@ -35,6 +40,7 @@ fr:
|
|||||||
COLOREDEXAMPLE: 'texte bleu'
|
COLOREDEXAMPLE: 'texte bleu'
|
||||||
EMAILLINK: 'Lien email'
|
EMAILLINK: 'Lien email'
|
||||||
EMAILLINKDESCRIPTION: 'Créer un lien vers une adresse email'
|
EMAILLINKDESCRIPTION: 'Créer un lien vers une adresse email'
|
||||||
|
IMAGE: Image
|
||||||
IMAGEDESCRIPTION: 'Afficher une image dans votre message'
|
IMAGEDESCRIPTION: 'Afficher une image dans votre message'
|
||||||
ITALIC: 'Texte en italique'
|
ITALIC: 'Texte en italique'
|
||||||
ITALICEXAMPLE: Italique
|
ITALICEXAMPLE: Italique
|
||||||
@ -68,6 +74,7 @@ fr:
|
|||||||
ChangePasswordEmail_ss:
|
ChangePasswordEmail_ss:
|
||||||
CHANGEPASSWORDTEXT1: 'Vous avez modifié votre mot de passe pour'
|
CHANGEPASSWORDTEXT1: 'Vous avez modifié votre mot de passe pour'
|
||||||
CHANGEPASSWORDTEXT2: 'Vous pouvez maintenant utiliser les identifiants suivants pour vous connecter :'
|
CHANGEPASSWORDTEXT2: 'Vous pouvez maintenant utiliser les identifiants suivants pour vous connecter :'
|
||||||
|
EMAIL: Email
|
||||||
HELLO: Salut
|
HELLO: Salut
|
||||||
PASSWORD: Mot de passe
|
PASSWORD: Mot de passe
|
||||||
ComplexTableField:
|
ComplexTableField:
|
||||||
@ -90,12 +97,31 @@ fr:
|
|||||||
CreditCardField:
|
CreditCardField:
|
||||||
FIRST: premier
|
FIRST: premier
|
||||||
FOURTH: quatrième
|
FOURTH: quatrième
|
||||||
|
SECOND: second
|
||||||
THIRD: troisième
|
THIRD: troisième
|
||||||
|
CurrencyField:
|
||||||
|
CURRENCYSYMBOL: $
|
||||||
|
DataObject:
|
||||||
|
PLURALNAME: 'Modèles de données'
|
||||||
|
SINGULARNAME: 'Modèle de donées'
|
||||||
Date:
|
Date:
|
||||||
|
DAY: jour
|
||||||
|
DAYS: jours
|
||||||
|
HOUR: heure
|
||||||
|
HOURS: heures
|
||||||
|
MIN: min
|
||||||
|
MINS: mins
|
||||||
|
MONTH: mois
|
||||||
|
MONTHS: mois
|
||||||
|
SEC: sec
|
||||||
|
SECS: secs
|
||||||
TIMEDIFFAGO: 'Il y a {difference}'
|
TIMEDIFFAGO: 'Il y a {difference}'
|
||||||
TIMEDIFFIN: 'Dans {difference}'
|
TIMEDIFFIN: 'Dans {difference}'
|
||||||
|
YEAR: année
|
||||||
|
YEARS: années
|
||||||
|
LessThanMinuteAgo: 'moins d''une minute'
|
||||||
DateField:
|
DateField:
|
||||||
NOTSET: 'pas d''ensemble'
|
NOTSET: 'non renseigné'
|
||||||
TODAY: aujourd'hui
|
TODAY: aujourd'hui
|
||||||
VALIDDATEFORMAT2: 'Saisissez la date au format valide ({format})'
|
VALIDDATEFORMAT2: 'Saisissez la date au format valide ({format})'
|
||||||
VALIDDATEMAXDATE: 'La date doit être antérieure ou égale à celle qui a été autorisée ({date})'
|
VALIDDATEMAXDATE: 'La date doit être antérieure ou égale à celle qui a été autorisée ({date})'
|
||||||
@ -169,6 +195,7 @@ fr:
|
|||||||
TEXT2: 'lien de réinitialisation de mot de passe'
|
TEXT2: 'lien de réinitialisation de mot de passe'
|
||||||
TEXT3: pour
|
TEXT3: pour
|
||||||
Form:
|
Form:
|
||||||
|
FIELDISREQUIRED: '{name} requis'
|
||||||
SubmitBtnLabel: Envoyer
|
SubmitBtnLabel: Envoyer
|
||||||
VALIDATIONCREDITNUMBER: 'Vérifiez que vous avez bien saisi votre numéro de carte bleue {number}.'
|
VALIDATIONCREDITNUMBER: 'Vérifiez que vous avez bien saisi votre numéro de carte bleue {number}.'
|
||||||
VALIDATIONNOTUNIQUE: 'La valeur entrée n''est pas unique'
|
VALIDATIONNOTUNIQUE: 'La valeur entrée n''est pas unique'
|
||||||
@ -177,8 +204,10 @@ fr:
|
|||||||
VALIDATIONSTRONGPASSWORD: 'Le mot de passe doit comporter au moins un chiffre et un caractère alphanumérique'
|
VALIDATIONSTRONGPASSWORD: 'Le mot de passe doit comporter au moins un chiffre et un caractère alphanumérique'
|
||||||
VALIDATOR: Validateur
|
VALIDATOR: Validateur
|
||||||
VALIDCURRENCY: 'Saisissez une monnaie valide'
|
VALIDCURRENCY: 'Saisissez une monnaie valide'
|
||||||
|
CSRF_FAILED_MESSAGE: 'Il semble qu''il y ait eu un problème technique. Veuillez cliquez sur le bouton Retour, raffraîchir votre navigateur, et essayer à nouveau'
|
||||||
FormField:
|
FormField:
|
||||||
NONE: aucun
|
NONE: aucun
|
||||||
|
Example: 'par exemple %s'
|
||||||
GridAction:
|
GridAction:
|
||||||
DELETE_DESCRIPTION: Supprime
|
DELETE_DESCRIPTION: Supprime
|
||||||
Delete: Supprimer
|
Delete: Supprimer
|
||||||
@ -200,6 +229,7 @@ fr:
|
|||||||
ResetFilter: Réinitialiser
|
ResetFilter: Réinitialiser
|
||||||
GridFieldAction_Delete:
|
GridFieldAction_Delete:
|
||||||
DeletePermissionsFailure: 'Vous n’avez pas les autorisations pour supprimer'
|
DeletePermissionsFailure: 'Vous n’avez pas les autorisations pour supprimer'
|
||||||
|
EditPermissionsFailure: 'Pas de permissions pour délier l''enregistrement'
|
||||||
GridFieldDetailForm:
|
GridFieldDetailForm:
|
||||||
CancelBtn: Annuler
|
CancelBtn: Annuler
|
||||||
Create: Créer
|
Create: Créer
|
||||||
@ -207,12 +237,16 @@ fr:
|
|||||||
DeletePermissionsFailure: 'Vous n’avez pas les autorisations pour supprimer'
|
DeletePermissionsFailure: 'Vous n’avez pas les autorisations pour supprimer'
|
||||||
Deleted: '%s %s supprimés'
|
Deleted: '%s %s supprimés'
|
||||||
Save: Enregistrer
|
Save: Enregistrer
|
||||||
|
Saved: '{name} {link} sauvegardé'
|
||||||
GridFieldItemEditView_ss:
|
GridFieldItemEditView_ss:
|
||||||
Go_back: 'Revenir en arrière'
|
Go_back: 'Revenir en arrière'
|
||||||
Group:
|
Group:
|
||||||
|
AddRole: 'Ajouter un rôle pour ce groupe'
|
||||||
Code: 'Code de groupe'
|
Code: 'Code de groupe'
|
||||||
DefaultGroupTitleAdministrators: Administrateur
|
DefaultGroupTitleAdministrators: Administrateur
|
||||||
DefaultGroupTitleContentAuthors: 'Auteurs du contenu'
|
DefaultGroupTitleContentAuthors: 'Auteurs du contenu'
|
||||||
|
Description: Description
|
||||||
|
GroupReminder: 'Si vous choisissez un groupe parent, ce groupe prendra tous ses rôles'
|
||||||
Locked: 'Verrouillé?'
|
Locked: 'Verrouillé?'
|
||||||
NoRoles: 'Vous n’avez pas la permission pour faire ça'
|
NoRoles: 'Vous n’avez pas la permission pour faire ça'
|
||||||
PLURALNAME: Groupes
|
PLURALNAME: Groupes
|
||||||
@ -255,6 +289,7 @@ fr:
|
|||||||
IMAGEALT: 'Texte alternatif (alt)'
|
IMAGEALT: 'Texte alternatif (alt)'
|
||||||
IMAGEALTTEXT: 'Texte alternatif (alt) - s''affiche si l''image ne peut être affichée.'
|
IMAGEALTTEXT: 'Texte alternatif (alt) - s''affiche si l''image ne peut être affichée.'
|
||||||
IMAGEALTTEXTDESC: 'Proposé aux lecteurs d’écran ou si l’image ne peut pas être affichée'
|
IMAGEALTTEXTDESC: 'Proposé aux lecteurs d’écran ou si l’image ne peut pas être affichée'
|
||||||
|
IMAGEDIMENSIONS: Dimensions
|
||||||
IMAGEHEIGHTPX: Hauteur
|
IMAGEHEIGHTPX: Hauteur
|
||||||
IMAGETITLE: 'Texte du titre (tooltip) - informations à propos de l''image'
|
IMAGETITLE: 'Texte du titre (tooltip) - informations à propos de l''image'
|
||||||
IMAGETITLETEXT: 'Texte du titre (info-bulle)'
|
IMAGETITLETEXT: 'Texte du titre (info-bulle)'
|
||||||
@ -270,11 +305,16 @@ fr:
|
|||||||
LINKINTERNAL: 'Une page du site'
|
LINKINTERNAL: 'Une page du site'
|
||||||
LINKOPENNEWWIN: 'Ouvrir le lien dans une nouvelle fenêtre ?'
|
LINKOPENNEWWIN: 'Ouvrir le lien dans une nouvelle fenêtre ?'
|
||||||
LINKTO: 'Lier à'
|
LINKTO: 'Lier à'
|
||||||
|
PAGE: Page
|
||||||
|
URL: URL
|
||||||
URLNOTANOEMBEDRESOURCE: 'L’URL {url} n’a pas pu être utilisée comme ressource média.'
|
URLNOTANOEMBEDRESOURCE: 'L’URL {url} n’a pas pu être utilisée comme ressource média.'
|
||||||
UpdateMEDIA: 'Mettre à jour le support audiovisuel'
|
UpdateMEDIA: 'Mettre à jour le support audiovisuel'
|
||||||
|
BUTTONADDURL: 'Ajouter une URL'
|
||||||
Image:
|
Image:
|
||||||
PLURALNAME: Fichiers
|
PLURALNAME: Fichiers
|
||||||
SINGULARNAME: Fichier
|
SINGULARNAME: Fichier
|
||||||
|
ImageField:
|
||||||
|
IMAGE: Image
|
||||||
Image_Cached:
|
Image_Cached:
|
||||||
PLURALNAME: Fichiers
|
PLURALNAME: Fichiers
|
||||||
SINGULARNAME: Fichier
|
SINGULARNAME: Fichier
|
||||||
@ -283,6 +323,7 @@ fr:
|
|||||||
LeftAndMain:
|
LeftAndMain:
|
||||||
CANT_REORGANISE: 'Vous n’avez pas l’autorisation de modifier les pages de premier niveau. Vos modifications n’ont pas été enregistrées.'
|
CANT_REORGANISE: 'Vous n’avez pas l’autorisation de modifier les pages de premier niveau. Vos modifications n’ont pas été enregistrées.'
|
||||||
DELETED: Supprimé.
|
DELETED: Supprimé.
|
||||||
|
DropdownBatchActionsDefault: Actions
|
||||||
HELP: Aide
|
HELP: Aide
|
||||||
PAGETYPE: 'Type de page :'
|
PAGETYPE: 'Type de page :'
|
||||||
PERMAGAIN: 'Vous avez été déconnecté du CMS. Si vous voulez vous reconnecter, entrez un nom d''utilisateur et un mot de passe ci-dessous.'
|
PERMAGAIN: 'Vous avez été déconnecté du CMS. Si vous voulez vous reconnecter, entrez un nom d''utilisateur et un mot de passe ci-dessous.'
|
||||||
@ -293,6 +334,9 @@ fr:
|
|||||||
REORGANISATIONSUCCESSFUL: 'L’arbre du site a été bien réorganisé.'
|
REORGANISATIONSUCCESSFUL: 'L’arbre du site a été bien réorganisé.'
|
||||||
SAVEDUP: Enregistré.
|
SAVEDUP: Enregistré.
|
||||||
VersionUnknown: inconnu
|
VersionUnknown: inconnu
|
||||||
|
ShowAsList: 'lister'
|
||||||
|
TooManyPages: 'Trop de pages'
|
||||||
|
ValidationError: 'Erreur de validation'
|
||||||
LeftAndMain_Menu_ss:
|
LeftAndMain_Menu_ss:
|
||||||
Hello: Bonjour
|
Hello: Bonjour
|
||||||
LOGOUT: 'Déconnexion'
|
LOGOUT: 'Déconnexion'
|
||||||
@ -314,10 +358,12 @@ fr:
|
|||||||
DATEFORMAT: 'Format de la date'
|
DATEFORMAT: 'Format de la date'
|
||||||
DefaultAdminFirstname: 'Administrateur par défaut'
|
DefaultAdminFirstname: 'Administrateur par défaut'
|
||||||
DefaultDateTime: par défaut
|
DefaultDateTime: par défaut
|
||||||
|
EMAIL: Email
|
||||||
EMPTYNEWPASSWORD: 'Le champs nouveau mot de passe ne peut être vide, essayez de nouveau'
|
EMPTYNEWPASSWORD: 'Le champs nouveau mot de passe ne peut être vide, essayez de nouveau'
|
||||||
ENTEREMAIL: 'Veuillez écrire une adresse email pour obtenir le lien de réinitialisation du mot de passe.'
|
ENTEREMAIL: 'Veuillez écrire une adresse email pour obtenir le lien de réinitialisation du mot de passe.'
|
||||||
ERRORLOCKEDOUT: 'Votre compte a été désactivé temporairement à cause de multiples tentatives de connexions. Veuillez réessayer dans 20 minutes.'
|
ERRORLOCKEDOUT: 'Votre compte a été désactivé temporairement à cause de multiples tentatives de connexions. Veuillez réessayer dans 20 minutes.'
|
||||||
ERRORNEWPASSWORD: 'Vous avez entré votre nouveau mot de passe différemment, essayez encore'
|
ERRORLOCKEDOUT2: 'Votre compte a été temporairement désactivé à cause de trop nombreux échecs d''identification. Veuillez réessayer dans {count} minutes.'
|
||||||
|
ERRORNEWPASSWORD: 'Vous avez entré votre nouveau mot de passe différemment, réessayez'
|
||||||
ERRORPASSWORDNOTMATCH: 'Votre actuel mot de passe ne correspond pas, essayez encore s''il vous plaît'
|
ERRORPASSWORDNOTMATCH: 'Votre actuel mot de passe ne correspond pas, essayez encore s''il vous plaît'
|
||||||
ERRORWRONGCRED: 'Il semble que ce ne soit pas le bon email ou mot de passe. Essayez encore s''il vous plaît.'
|
ERRORWRONGCRED: 'Il semble que ce ne soit pas le bon email ou mot de passe. Essayez encore s''il vous plaît.'
|
||||||
FIRSTNAME: 'Prénom'
|
FIRSTNAME: 'Prénom'
|
||||||
@ -344,10 +390,11 @@ fr:
|
|||||||
db_NumVisit: 'Nombre de visite'
|
db_NumVisit: 'Nombre de visite'
|
||||||
db_Password: Mot de passe
|
db_Password: Mot de passe
|
||||||
db_PasswordExpiry: 'Date d''expiration du mot de passe'
|
db_PasswordExpiry: 'Date d''expiration du mot de passe'
|
||||||
|
NoPassword: 'Ce membre n''a pas de mot de passe'
|
||||||
MemberAuthenticator:
|
MemberAuthenticator:
|
||||||
TITLE: 'Email & Mot de passe'
|
TITLE: 'Email & Mot de passe'
|
||||||
MemberDatetimeOptionsetField:
|
MemberDatetimeOptionsetField:
|
||||||
AMORPM: 'AM (Ante meridiem) ou PM (Post meridiem)'
|
AMORPM: 'AM (matin) ou PM (après-midi)'
|
||||||
Custom: Personnalisé
|
Custom: Personnalisé
|
||||||
DATEFORMATBAD: 'Format de date incorrect'
|
DATEFORMATBAD: 'Format de date incorrect'
|
||||||
DAYNOLEADING: 'Le jour du mois sans zéro initial'
|
DAYNOLEADING: 'Le jour du mois sans zéro initial'
|
||||||
@ -366,6 +413,7 @@ fr:
|
|||||||
TWODIGITMONTH: 'Le mois sur deux chiffres (p. ex. 01=janvier)'
|
TWODIGITMONTH: 'Le mois sur deux chiffres (p. ex. 01=janvier)'
|
||||||
TWODIGITSECOND: 'La seconde sur deux chiffres (de 00 à 59)'
|
TWODIGITSECOND: 'La seconde sur deux chiffres (de 00 à 59)'
|
||||||
TWODIGITYEAR: 'L’année sur deux chiffres'
|
TWODIGITYEAR: 'L’année sur deux chiffres'
|
||||||
|
Toggle: 'Afficher l’aide de mise en forme'
|
||||||
MemberImportForm:
|
MemberImportForm:
|
||||||
Help1: '<p>Importer les membres au format<em>CSV format</em> (comma-separated values). <small><a href="#" class="toggle-advanced">Afficher l''usage avancé.</a></small></p>'
|
Help1: '<p>Importer les membres au format<em>CSV format</em> (comma-separated values). <small><a href="#" class="toggle-advanced">Afficher l''usage avancé.</a></small></p>'
|
||||||
Help2: "<div class=\"advanced\">\n<h4>Utilisation avancée</h4>\n<ul>\n<li>Colonnes autorisées : <em>%s</em></li>\n<li>Les utilisateurs existants sont retrouvés avec leur <em>Code</em> unique et les registres sont mis à jour avec les nouvelles valeurs du fichier importé.</li>\n<li>Des groupes peuvent être assignés à l’aide de la colonne <em>Groups</em>. Les groupes sont identifiés par leur <em>Code</em>, plusieurs groupes peuvent être indiqués en les séparant par des virgules. L’appartenance actuelle aux groupes n’est pas modifiée.</li>\n</ul>\n</div>"
|
Help2: "<div class=\"advanced\">\n<h4>Utilisation avancée</h4>\n<ul>\n<li>Colonnes autorisées : <em>%s</em></li>\n<li>Les utilisateurs existants sont retrouvés avec leur <em>Code</em> unique et les registres sont mis à jour avec les nouvelles valeurs du fichier importé.</li>\n<li>Des groupes peuvent être assignés à l’aide de la colonne <em>Groups</em>. Les groupes sont identifiés par leur <em>Code</em>, plusieurs groupes peuvent être indiqués en les séparant par des virgules. L’appartenance actuelle aux groupes n’est pas modifiée.</li>\n</ul>\n</div>"
|
||||||
@ -381,6 +429,7 @@ fr:
|
|||||||
ModelAdmin:
|
ModelAdmin:
|
||||||
DELETE: Supprime
|
DELETE: Supprime
|
||||||
DELETEDRECORDS: '{count} enregistrements supprimés.'
|
DELETEDRECORDS: '{count} enregistrements supprimés.'
|
||||||
|
EMPTYBEFOREIMPORT: 'Remplacer les données'
|
||||||
IMPORT: 'Importer de CSV'
|
IMPORT: 'Importer de CSV'
|
||||||
IMPORTEDRECORDS: '{count} enregistrements importés.'
|
IMPORTEDRECORDS: '{count} enregistrements importés.'
|
||||||
NOCSVFILE: 'Veuillez choisir un fichier CSV à importer'
|
NOCSVFILE: 'Veuillez choisir un fichier CSV à importer'
|
||||||
@ -391,6 +440,7 @@ fr:
|
|||||||
ModelAdmin_ImportSpec_ss:
|
ModelAdmin_ImportSpec_ss:
|
||||||
IMPORTSPECFIELDS: 'Colonnes de la base de données'
|
IMPORTSPECFIELDS: 'Colonnes de la base de données'
|
||||||
IMPORTSPECLINK: 'Afficher la spécification de %s'
|
IMPORTSPECLINK: 'Afficher la spécification de %s'
|
||||||
|
IMPORTSPECRELATIONS: Relations
|
||||||
IMPORTSPECTITLE: 'Spécification de %s'
|
IMPORTSPECTITLE: 'Spécification de %s'
|
||||||
ModelAdmin_Tools_ss:
|
ModelAdmin_Tools_ss:
|
||||||
FILTER: Filtrer
|
FILTER: Filtrer
|
||||||
@ -406,6 +456,7 @@ fr:
|
|||||||
NumericField:
|
NumericField:
|
||||||
VALIDATION: '« {value} » n’est pas un chiffre, seule donnée acceptée dans ce champ '
|
VALIDATION: '« {value} » n’est pas un chiffre, seule donnée acceptée dans ce champ '
|
||||||
Pagination:
|
Pagination:
|
||||||
|
Page: Page
|
||||||
View: Afficher
|
View: Afficher
|
||||||
Permission:
|
Permission:
|
||||||
AdminGroup: Administrateur
|
AdminGroup: Administrateur
|
||||||
@ -438,6 +489,7 @@ fr:
|
|||||||
NOTFOUND: 'Aucun élément n’a été trouvé'
|
NOTFOUND: 'Aucun élément n’a été trouvé'
|
||||||
Security:
|
Security:
|
||||||
ALREADYLOGGEDIN: 'Vous n''avez pas accès à cette page. Si vous avez un autre identifiant pouvant accéder à cette page, vous pouvez l''utiliser ci-dessous.'
|
ALREADYLOGGEDIN: 'Vous n''avez pas accès à cette page. Si vous avez un autre identifiant pouvant accéder à cette page, vous pouvez l''utiliser ci-dessous.'
|
||||||
|
LOSTPASSWORDHEADER: 'Mot de passe oublié'
|
||||||
BUTTONSEND: 'Envoyer moi le lien pour modifier le mot de passe'
|
BUTTONSEND: 'Envoyer moi le lien pour modifier le mot de passe'
|
||||||
CHANGEPASSWORDBELOW: 'Vous pouvez modifier votre mot de passe ci-dessous.'
|
CHANGEPASSWORDBELOW: 'Vous pouvez modifier votre mot de passe ci-dessous.'
|
||||||
CHANGEPASSWORDHEADER: 'Modifier votre mot de passe'
|
CHANGEPASSWORDHEADER: 'Modifier votre mot de passe'
|
||||||
@ -457,6 +509,8 @@ fr:
|
|||||||
EDITPERMISSIONS: 'Gérer les autorisations des groupes'
|
EDITPERMISSIONS: 'Gérer les autorisations des groupes'
|
||||||
EDITPERMISSIONS_HELP: 'Possibilité d''éditer les autorisations et les adresses IP pour un groupe. Nécessite l’autorisation « Accès à la section “Securité” ».'
|
EDITPERMISSIONS_HELP: 'Possibilité d''éditer les autorisations et les adresses IP pour un groupe. Nécessite l’autorisation « Accès à la section “Securité” ».'
|
||||||
GROUPNAME: 'Nom du group'
|
GROUPNAME: 'Nom du group'
|
||||||
|
IMPORTGROUPS: 'Importer des groupes'
|
||||||
|
IMPORTUSERS: 'Importer des utilisateurs'
|
||||||
MEMBERS: Membres
|
MEMBERS: Membres
|
||||||
MENUTITLE: Sécurité
|
MENUTITLE: Sécurité
|
||||||
MemberListCaution: 'Attention : en supprimant des membres de cette liste vous les enlèverez de tous les groupes ainsi que de la base de données'
|
MemberListCaution: 'Attention : en supprimant des membres de cette liste vous les enlèverez de tous les groupes ainsi que de la base de données'
|
||||||
@ -471,6 +525,19 @@ fr:
|
|||||||
FileFieldLabel: 'Fichier CSV <small>(extension autorisée : *.csv)</small>'
|
FileFieldLabel: 'Fichier CSV <small>(extension autorisée : *.csv)</small>'
|
||||||
SilverStripeNavigator:
|
SilverStripeNavigator:
|
||||||
Edit: Tout modifier
|
Edit: Tout modifier
|
||||||
|
Auto: Auto
|
||||||
|
ChangeViewMode: 'Changer de mode de vue'
|
||||||
|
Desktop: Bureau
|
||||||
|
DualWindowView: 'Double fenêtre'
|
||||||
|
EditView: 'Editer le mode'
|
||||||
|
Mobile: Mobile
|
||||||
|
PreviewState: 'Aperçu'
|
||||||
|
PreviewView: 'Aperçu'
|
||||||
|
Responsive: Responsive
|
||||||
|
SplitView: 'Mode partagé'
|
||||||
|
Tablet: Tablette
|
||||||
|
ViewDeviceWidth: 'Sélectionnez une largeur d''aperçu'
|
||||||
|
Width: largeur
|
||||||
SimpleImageField:
|
SimpleImageField:
|
||||||
NOUPLOAD: 'Aucune image chargée'
|
NOUPLOAD: 'Aucune image chargée'
|
||||||
SiteTree:
|
SiteTree:
|
||||||
@ -510,17 +577,39 @@ fr:
|
|||||||
DELETEINFO: 'Effacer définitivement ce fichier des archives'
|
DELETEINFO: 'Effacer définitivement ce fichier des archives'
|
||||||
DOEDIT: Enregistrer
|
DOEDIT: Enregistrer
|
||||||
DROPFILE: 'glissez-déposez un fichier'
|
DROPFILE: 'glissez-déposez un fichier'
|
||||||
|
DROPFILES: 'glissez-déposez des fichiers'
|
||||||
|
Dimensions: Dimensions
|
||||||
EDIT: Modifier
|
EDIT: Modifier
|
||||||
EDITINFO: 'Modifier ce fichier'
|
EDITINFO: 'Modifier ce fichier'
|
||||||
|
FIELDNOTSET: 'Informations concernant le fichiers non-trouvées'
|
||||||
FROMCOMPUTER: 'Depuis votre ordinateur'
|
FROMCOMPUTER: 'Depuis votre ordinateur'
|
||||||
FROMCOMPUTERINFO: 'Choisir parmi les fichiers'
|
FROMCOMPUTERINFO: 'Choisir parmi les fichiers'
|
||||||
FROMFILES: 'Depuis les fichiers'
|
FROMFILES: 'Depuis les fichiers'
|
||||||
HOTLINKINFO: 'Note : Cette image sera liée par un « hotlink », assurez-vous d’avoir l’autorisation des ayant-droits du site web d’origine.'
|
HOTLINKINFO: 'Note : Cette image sera liée par un « hotlink », assurez-vous d’avoir l’autorisation des ayant-droits du site web d’origine.'
|
||||||
MAXNUMBEROFFILES: 'Le nombre maximal de {count} fichiers a été dépassé.'
|
MAXNUMBEROFFILES: 'Le nombre maximal de {count} fichiers a été dépassé.'
|
||||||
MAXNUMBEROFFILESSHORT: 'On ne peut pas télécharger plus de {count} fichiers'
|
MAXNUMBEROFFILESSHORT: 'On ne peut pas télécharger plus de {count} fichiers'
|
||||||
|
MAXNUMBEROFFILESONE: 'Vous ne pouvez pas uploader plus d''un fichier'
|
||||||
REMOVE: Supprimer
|
REMOVE: Supprimer
|
||||||
REMOVEERROR: 'Le fichier n’a pas pu être supprimé'
|
REMOVEERROR: 'Le fichier n’a pas pu être supprimé'
|
||||||
REMOVEINFO: 'Supprimer ce fichier ici sans l’effacer des archives'
|
REMOVEINFO: 'Supprimer ce fichier ici sans l’effacer des archives'
|
||||||
STARTALL: 'Démarrer tout'
|
STARTALL: 'Démarrer tout'
|
||||||
STARTALLINFO: 'Démarrer tous les téléchargements'
|
STARTALLINFO: 'Démarrer tous les téléchargements'
|
||||||
Saved: Enregistré
|
Saved: Enregistré
|
||||||
|
CHOOSEANOTHERFILE: 'Choisissez un autre fichier'
|
||||||
|
CHOOSEANOTHERINFO: 'Remplacer ce fichier par un autre depuis les archives'
|
||||||
|
OVERWRITEWARNING: 'Un fichier avec le même nom existe déjà'
|
||||||
|
UPLOADSINTO: 'sauvegarder dans /{path}'
|
||||||
|
Versioned:
|
||||||
|
has_many_Versions: Versions
|
||||||
|
CMSPageHistoryController_versions_ss:
|
||||||
|
PREVIEW: 'Aperçu du site'
|
||||||
|
GridFieldEditButton_ss:
|
||||||
|
EDIT: Editer
|
||||||
|
ContentController:
|
||||||
|
NOTLOGGEDIN: 'Hors-ligne'
|
||||||
|
GridFieldItemEditView:
|
||||||
|
Go_back: 'Retour'
|
||||||
|
PasswordValidator:
|
||||||
|
LOWCHARSTRENGTH: 'Veuillez augmenter la force de votre mot de passe en ajoutant certains caractères suivants : %s'
|
||||||
|
PREVPASSWORD: 'Vous avez déjà utilisé ce mot de passe par le passé, veuillez en choisir un autre'
|
||||||
|
TOOSHORT: 'Le mot de passe est trop court, il doit contenir au moins %s caractères'
|
||||||
|
25
lang/hi.yml
25
lang/hi.yml
@ -1,6 +1,8 @@
|
|||||||
hi:
|
hi:
|
||||||
AssetUploadField:
|
AssetUploadField:
|
||||||
ChooseFiles: 'फाइलें चुनें'
|
ChooseFiles: 'अपलोड करने के लिए फ़ाइलों को चुनें'
|
||||||
|
DRAGFILESHERE: 'अपलोड करने के लिए फाइलें यहाँ लाये '
|
||||||
|
DROPAREA: 'अपलोड छेत्र '
|
||||||
EDITALL: 'सभी संपादित करें'
|
EDITALL: 'सभी संपादित करें'
|
||||||
EDITANDORGANIZE: 'संपादित और व्यवस्थित करें '
|
EDITANDORGANIZE: 'संपादित और व्यवस्थित करें '
|
||||||
EDITINFO: 'फ़ाइलों को संपादित करें'
|
EDITINFO: 'फ़ाइलों को संपादित करें'
|
||||||
@ -28,6 +30,27 @@ hi:
|
|||||||
ITALIC: 'तिरछे अक्षर'
|
ITALIC: 'तिरछे अक्षर'
|
||||||
ITALICEXAMPLE: तिरछे अक्षर
|
ITALICEXAMPLE: तिरछे अक्षर
|
||||||
LINK: 'वेबसाइट लिंक'
|
LINK: 'वेबसाइट लिंक'
|
||||||
|
LINKDESCRIPTION: ' किसी दुसरे वेबसाइट या यूआरएल से जोड़े '
|
||||||
|
BackLink_Button_ss:
|
||||||
|
Back: वापस
|
||||||
|
BasicAuth:
|
||||||
|
ENTERINFO: 'कृपया उपयोगकर्ता का नाम और पासवर्ड दर्ज करें'
|
||||||
|
ERRORNOTADMIN: 'वह उपयोगकर्ता एक व्यवस्थापक नहीं है.'
|
||||||
|
CMSProfileController:
|
||||||
|
MENUTITLE: 'मेरी प्रोफाइल '
|
||||||
|
ComplexTableField_popup_ss:
|
||||||
|
NEXT: अगला
|
||||||
|
PREVIOUS: पिछला
|
||||||
|
ConfirmedPasswordField:
|
||||||
|
ATLEAST: 'पासवर्डों को कम से कम {min} अक्षर लंबा होना चाहिए.'
|
||||||
|
SHOWONCLICKTITLE: 'पासवर्ड बदलें'
|
||||||
|
DataObject:
|
||||||
|
PLURALNAME: 'डेटा ऑब्जेक्ट्स'
|
||||||
|
SINGULARNAME: 'डेटा ऑब्जेक्ट'
|
||||||
|
DateField:
|
||||||
|
NOTSET: 'सेट नहीं'
|
||||||
|
TODAY: आज
|
||||||
|
VALIDDATEFORMAT2: 'कृपया एक मान्य दिनांक स्वरूप दर्ज करें ({format})'
|
||||||
Group:
|
Group:
|
||||||
RolesAddEditLink: 'भूमिकाओं का प्रबंधन करे '
|
RolesAddEditLink: 'भूमिकाओं का प्रबंधन करे '
|
||||||
has_many_Permissions: अनुमतियाँ
|
has_many_Permissions: अनुमतियाँ
|
||||||
|
38
lang/nb.yml
38
lang/nb.yml
@ -24,6 +24,7 @@ nb:
|
|||||||
FILES: Filer
|
FILES: Filer
|
||||||
FROMCOMPUTER: 'Velg filer fra din pc'
|
FROMCOMPUTER: 'Velg filer fra din pc'
|
||||||
FROMCOMPUTERINFO: 'Last opp fra din pc'
|
FROMCOMPUTERINFO: 'Last opp fra din pc'
|
||||||
|
TOTAL: Total
|
||||||
TOUPLOAD: 'Velg filer til opplasting ...'
|
TOUPLOAD: 'Velg filer til opplasting ...'
|
||||||
UPLOADINPROGRESS: 'Vennligst vent... opplasting pågår'
|
UPLOADINPROGRESS: 'Vennligst vent... opplasting pågår'
|
||||||
UPLOADOR: ELLER
|
UPLOADOR: ELLER
|
||||||
@ -98,6 +99,8 @@ nb:
|
|||||||
FOURTH: fjerde
|
FOURTH: fjerde
|
||||||
SECOND: andre
|
SECOND: andre
|
||||||
THIRD: tredje
|
THIRD: tredje
|
||||||
|
CurrencyField:
|
||||||
|
CURRENCYSYMBOL: $
|
||||||
DataObject:
|
DataObject:
|
||||||
PLURALNAME: 'Dataobjekter'
|
PLURALNAME: 'Dataobjekter'
|
||||||
SINGULARNAME: 'Dataobjekt'
|
SINGULARNAME: 'Dataobjekt'
|
||||||
@ -140,6 +143,7 @@ nb:
|
|||||||
AviType: 'AVI videofil'
|
AviType: 'AVI videofil'
|
||||||
Content: Innhold
|
Content: Innhold
|
||||||
CssType: 'CSS-fil'
|
CssType: 'CSS-fil'
|
||||||
|
DmgType: 'Apple disk image'
|
||||||
DocType: 'Word-dokument'
|
DocType: 'Word-dokument'
|
||||||
Filename: Filnavn
|
Filename: Filnavn
|
||||||
GifType: 'GIF bilde - bra til diagrammer'
|
GifType: 'GIF bilde - bra til diagrammer'
|
||||||
@ -162,6 +166,7 @@ nb:
|
|||||||
SINGULARNAME: Fil
|
SINGULARNAME: Fil
|
||||||
TOOLARGE: 'Filstørrelse for stor, maksimum {size} tillatt '
|
TOOLARGE: 'Filstørrelse for stor, maksimum {size} tillatt '
|
||||||
TOOLARGESHORT: 'Filstørrelse overstiger {size}'
|
TOOLARGESHORT: 'Filstørrelse overstiger {size}'
|
||||||
|
TiffType: 'Tagged image format'
|
||||||
Title: Tittel
|
Title: Tittel
|
||||||
WavType: 'WAV lydfil'
|
WavType: 'WAV lydfil'
|
||||||
XlsType: 'Excel regneark'
|
XlsType: 'Excel regneark'
|
||||||
@ -188,6 +193,7 @@ nb:
|
|||||||
HELLO: Hei
|
HELLO: Hei
|
||||||
TEXT1: 'Her er din'
|
TEXT1: 'Her er din'
|
||||||
TEXT2: 'lenke for nullstilling av passord'
|
TEXT2: 'lenke for nullstilling av passord'
|
||||||
|
TEXT3: for
|
||||||
Form:
|
Form:
|
||||||
FIELDISREQUIRED: '{name} er påkrevet'
|
FIELDISREQUIRED: '{name} er påkrevet'
|
||||||
SubmitBtnLabel: Utfør
|
SubmitBtnLabel: Utfør
|
||||||
@ -196,6 +202,7 @@ nb:
|
|||||||
VALIDATIONPASSWORDSDONTMATCH: 'Passordene stemmer ikke overens'
|
VALIDATIONPASSWORDSDONTMATCH: 'Passordene stemmer ikke overens'
|
||||||
VALIDATIONPASSWORDSNOTEMPTY: 'Passord kan ikke være tomt'
|
VALIDATIONPASSWORDSNOTEMPTY: 'Passord kan ikke være tomt'
|
||||||
VALIDATIONSTRONGPASSWORD: 'Passord må inneholde minst ett siffer og en bokstav'
|
VALIDATIONSTRONGPASSWORD: 'Passord må inneholde minst ett siffer og en bokstav'
|
||||||
|
VALIDATOR: Validator
|
||||||
VALIDCURRENCY: 'Vennligst skriv inn gyldig valuta'
|
VALIDCURRENCY: 'Vennligst skriv inn gyldig valuta'
|
||||||
CSRF_FAILED_MESSAGE: 'Det ser ut til å ha oppstått et teknisk problem. Vennligst trykk på tilbakeknappen, oppdater nettsiden og prøv på nytt.'
|
CSRF_FAILED_MESSAGE: 'Det ser ut til å ha oppstått et teknisk problem. Vennligst trykk på tilbakeknappen, oppdater nettsiden og prøv på nytt.'
|
||||||
FormField:
|
FormField:
|
||||||
@ -204,16 +211,21 @@ nb:
|
|||||||
GridAction:
|
GridAction:
|
||||||
DELETE_DESCRIPTION: Slett
|
DELETE_DESCRIPTION: Slett
|
||||||
Delete: Slett
|
Delete: Slett
|
||||||
|
UnlinkRelation: Koble fra
|
||||||
GridField:
|
GridField:
|
||||||
Add: 'Legg til {name}'
|
Add: 'Legg til {name}'
|
||||||
|
Filter: Filtrer
|
||||||
FilterBy: 'Filtrer på '
|
FilterBy: 'Filtrer på '
|
||||||
Find: Finn
|
Find: Finn
|
||||||
LEVELUP: 'Opp ett nivå'
|
LEVELUP: 'Opp ett nivå'
|
||||||
LinkExisting: 'Eksisterende lenke'
|
LinkExisting: 'Eksisterende lenke'
|
||||||
|
NewRecord: 'Ny %s'
|
||||||
NoItemsFound: 'Ingen elementer ble funnet'
|
NoItemsFound: 'Ingen elementer ble funnet'
|
||||||
PRINTEDAT: 'Skrevet ut ved'
|
PRINTEDAT: 'Skrevet ut ved'
|
||||||
PRINTEDBY: 'Skrevet ut av'
|
PRINTEDBY: 'Skrevet ut av'
|
||||||
PlaceHolder: 'Finn {type}'
|
PlaceHolder: 'Finn {type}'
|
||||||
|
PlaceHolderWithLabels: 'Finn {type} ved {name}'
|
||||||
|
RelationSearch: 'Relasjonssøk'
|
||||||
ResetFilter: Tilbakestille
|
ResetFilter: Tilbakestille
|
||||||
GridFieldAction_Delete:
|
GridFieldAction_Delete:
|
||||||
DeletePermissionsFailure: 'Ikke tillatt å slette'
|
DeletePermissionsFailure: 'Ikke tillatt å slette'
|
||||||
@ -232,6 +244,7 @@ nb:
|
|||||||
AddRole: 'Legg til en rolle for denne gruppen'
|
AddRole: 'Legg til en rolle for denne gruppen'
|
||||||
Code: 'Gruppekode'
|
Code: 'Gruppekode'
|
||||||
DefaultGroupTitleAdministrators: Administratorer
|
DefaultGroupTitleAdministrators: Administratorer
|
||||||
|
DefaultGroupTitleContentAuthors: 'Innholdsforfattere'
|
||||||
Description: Beskrivelse
|
Description: Beskrivelse
|
||||||
GroupReminder: 'Hvis du velger en overordnet gruppe, vil denne gruppen arve alle rollene'
|
GroupReminder: 'Hvis du velger en overordnet gruppe, vil denne gruppen arve alle rollene'
|
||||||
Locked: 'Låst?'
|
Locked: 'Låst?'
|
||||||
@ -244,6 +257,7 @@ nb:
|
|||||||
has_many_Permissions: Tillatelser
|
has_many_Permissions: Tillatelser
|
||||||
many_many_Members: Medlemmer
|
many_many_Members: Medlemmer
|
||||||
GroupImportForm:
|
GroupImportForm:
|
||||||
|
Help1: '<p>Importer en eller flere grupper i <em>CSV</em>-format (kommaseparerte verdier). <small><a href="#" class="toggle-advanced">Vis avanserte alternativer</a></small></p>'
|
||||||
Help2: "<div class=\"advanced\">\n<h4>Avanserte alternativer</h4>\n<ul>\n<li>Tillatte kolonner: <em>%s</em></li>\n<li>Eksisterende grupper matches mot deres <em>Code</em>-verdi og oppdateres med nye verdier fra den importerte filen.</li>\n<li>Gruppehierarkier kan bli opprettet ved å benytte en <em>ParentCode</em>-kolonne.</li>\n<li>Tillatelseskoder kan bli angitt med <em>PermissionCode</em>-kolonnen. Eksisterende tillatelselskoder blir ikke fjernet.</li>\n</ul>\n</div>"
|
Help2: "<div class=\"advanced\">\n<h4>Avanserte alternativer</h4>\n<ul>\n<li>Tillatte kolonner: <em>%s</em></li>\n<li>Eksisterende grupper matches mot deres <em>Code</em>-verdi og oppdateres med nye verdier fra den importerte filen.</li>\n<li>Gruppehierarkier kan bli opprettet ved å benytte en <em>ParentCode</em>-kolonne.</li>\n<li>Tillatelseskoder kan bli angitt med <em>PermissionCode</em>-kolonnen. Eksisterende tillatelselskoder blir ikke fjernet.</li>\n</ul>\n</div>"
|
||||||
ResultCreated: 'Opprettet {count} grupper'
|
ResultCreated: 'Opprettet {count} grupper'
|
||||||
ResultDeleted: 'Slettet %d grupper'
|
ResultDeleted: 'Slettet %d grupper'
|
||||||
@ -331,6 +345,7 @@ nb:
|
|||||||
IP: 'IP-adresse'
|
IP: 'IP-adresse'
|
||||||
PLURALNAME: 'Innloggingsforsøk'
|
PLURALNAME: 'Innloggingsforsøk'
|
||||||
SINGULARNAME: 'Innloggingsforsøk'
|
SINGULARNAME: 'Innloggingsforsøk'
|
||||||
|
Status: Status
|
||||||
Member:
|
Member:
|
||||||
ADDGROUP: 'Legg til en gruppe'
|
ADDGROUP: 'Legg til en gruppe'
|
||||||
BUTTONCHANGEPASSWORD: 'Bytt passord'
|
BUTTONCHANGEPASSWORD: 'Bytt passord'
|
||||||
@ -341,10 +356,13 @@ nb:
|
|||||||
CONFIRMNEWPASSWORD: 'Bekreft nytt passord'
|
CONFIRMNEWPASSWORD: 'Bekreft nytt passord'
|
||||||
CONFIRMPASSWORD: 'Bekreft passord'
|
CONFIRMPASSWORD: 'Bekreft passord'
|
||||||
DATEFORMAT: 'Datoformat'
|
DATEFORMAT: 'Datoformat'
|
||||||
|
DefaultAdminFirstname: 'Standard Admin'
|
||||||
|
DefaultDateTime: standard
|
||||||
EMAIL: Epost
|
EMAIL: Epost
|
||||||
EMPTYNEWPASSWORD: 'Det nye passordet kan ikke være tomt, vennligst prøv igjen'
|
EMPTYNEWPASSWORD: 'Det nye passordet kan ikke være tomt, vennligst prøv igjen'
|
||||||
ENTEREMAIL: 'Vennligst skriv en epostadresse så du kan bli tilsendt en lenke til å nullstille passord.'
|
ENTEREMAIL: 'Vennligst skriv en epostadresse så du kan bli tilsendt en lenke til å nullstille passord.'
|
||||||
ERRORLOCKEDOUT: 'Din konto har blitt sperret på grunn av for mange forsøk på å logge inn. Vennligst prøv igjen om 20 minutter.'
|
ERRORLOCKEDOUT: 'Din konto har blitt sperret på grunn av for mange forsøk på å logge inn. Vennligst prøv igjen om 20 minutter.'
|
||||||
|
ERRORLOCKEDOUT2: 'Din konto har blitt midlertidig sperret på grunn av for mange mislykkede forsøk på å logge inn. Vennligst prøv igjen om {count} minutter.'
|
||||||
ERRORNEWPASSWORD: 'Du har tastet inn nye passord forskjellig, vennligst prøv igjen.'
|
ERRORNEWPASSWORD: 'Du har tastet inn nye passord forskjellig, vennligst prøv igjen.'
|
||||||
ERRORPASSWORDNOTMATCH: 'Passordene stemmer ikke overens, vennligst prøv igjen.'
|
ERRORPASSWORDNOTMATCH: 'Passordene stemmer ikke overens, vennligst prøv igjen.'
|
||||||
ERRORWRONGCRED: 'Det ser ikke ut til å være riktig epostadresse eller passord. Vennligst prøv igjen.'
|
ERRORWRONGCRED: 'Det ser ikke ut til å være riktig epostadresse eller passord. Vennligst prøv igjen.'
|
||||||
@ -372,9 +390,12 @@ nb:
|
|||||||
db_NumVisit: 'Antall besøk'
|
db_NumVisit: 'Antall besøk'
|
||||||
db_Password: Passord
|
db_Password: Passord
|
||||||
db_PasswordExpiry: 'Utløpsdato for passord'
|
db_PasswordExpiry: 'Utløpsdato for passord'
|
||||||
|
NoPassword: 'Det finnes ikke noe passord for dette medlemmet.'
|
||||||
MemberAuthenticator:
|
MemberAuthenticator:
|
||||||
TITLE: 'E-post og passord'
|
TITLE: 'E-post og passord'
|
||||||
MemberDatetimeOptionsetField:
|
MemberDatetimeOptionsetField:
|
||||||
|
AMORPM: 'AM (Ante meridiem) or PM (Post meridiem)'
|
||||||
|
Custom: Egendefinert
|
||||||
DATEFORMATBAD: 'Datoformat er ugyldig'
|
DATEFORMATBAD: 'Datoformat er ugyldig'
|
||||||
DAYNOLEADING: 'Dag i måneden uten ledende null'
|
DAYNOLEADING: 'Dag i måneden uten ledende null'
|
||||||
DIGITSDECFRACTIONSECOND: 'Ett eller flere siffer som representerer en desimlbrøkdel av et sekund'
|
DIGITSDECFRACTIONSECOND: 'Ett eller flere siffer som representerer en desimlbrøkdel av et sekund'
|
||||||
@ -411,6 +432,7 @@ nb:
|
|||||||
EMPTYBEFOREIMPORT: 'Erstatt data'
|
EMPTYBEFOREIMPORT: 'Erstatt data'
|
||||||
IMPORT: 'Importer fra CSV'
|
IMPORT: 'Importer fra CSV'
|
||||||
IMPORTEDRECORDS: 'Importerte {count} oppføringer.'
|
IMPORTEDRECORDS: 'Importerte {count} oppføringer.'
|
||||||
|
NOCSVFILE: 'Vennligst finn en CSV-fil å importere'
|
||||||
NOIMPORT: 'Ingenting å importere'
|
NOIMPORT: 'Ingenting å importere'
|
||||||
RESET: Tilbakestill
|
RESET: Tilbakestill
|
||||||
Title: 'Datamodeller'
|
Title: 'Datamodeller'
|
||||||
@ -437,6 +459,7 @@ nb:
|
|||||||
Page: Side
|
Page: Side
|
||||||
View: Viser
|
View: Viser
|
||||||
Permission:
|
Permission:
|
||||||
|
AdminGroup: Administratorer
|
||||||
CMS_ACCESS_CATEGORY: 'Tilgang til publiseringssystem'
|
CMS_ACCESS_CATEGORY: 'Tilgang til publiseringssystem'
|
||||||
FULLADMINRIGHTS: 'Fulle administrative rettigheter'
|
FULLADMINRIGHTS: 'Fulle administrative rettigheter'
|
||||||
FULLADMINRIGHTS_HELP: 'Overstyrer alle andre tilordnede tillatelser.'
|
FULLADMINRIGHTS_HELP: 'Overstyrer alle andre tilordnede tillatelser.'
|
||||||
@ -466,6 +489,7 @@ nb:
|
|||||||
NOTFOUND: 'Ingen elementer ble funnet'
|
NOTFOUND: 'Ingen elementer ble funnet'
|
||||||
Security:
|
Security:
|
||||||
ALREADYLOGGEDIN: 'Du har ikke adgang til denne siden. Hvis du har en annen konto som har adgang til denne siden, kan du logge inn med den under.'
|
ALREADYLOGGEDIN: 'Du har ikke adgang til denne siden. Hvis du har en annen konto som har adgang til denne siden, kan du logge inn med den under.'
|
||||||
|
LOSTPASSWORDHEADER: 'Mistet passord'
|
||||||
BUTTONSEND: 'Send meg en lenke for å nullstille passordet'
|
BUTTONSEND: 'Send meg en lenke for å nullstille passordet'
|
||||||
CHANGEPASSWORDBELOW: 'Du kan bytte passord under her.'
|
CHANGEPASSWORDBELOW: 'Du kan bytte passord under her.'
|
||||||
CHANGEPASSWORDHEADER: 'Bytt passord'
|
CHANGEPASSWORDHEADER: 'Bytt passord'
|
||||||
@ -485,15 +509,20 @@ nb:
|
|||||||
EDITPERMISSIONS: 'Administrer tillatelser for grupper'
|
EDITPERMISSIONS: 'Administrer tillatelser for grupper'
|
||||||
EDITPERMISSIONS_HELP: 'Mulighet for å endre tillatelser og IP-adresser for en gruppe. Brukere må ha adgang til sikkerhetsseksjon.'
|
EDITPERMISSIONS_HELP: 'Mulighet for å endre tillatelser og IP-adresser for en gruppe. Brukere må ha adgang til sikkerhetsseksjon.'
|
||||||
GROUPNAME: 'Gruppenavn'
|
GROUPNAME: 'Gruppenavn'
|
||||||
|
IMPORTGROUPS: 'Importer grupper'
|
||||||
|
IMPORTUSERS: 'Importer brukere'
|
||||||
MEMBERS: Medlemmer
|
MEMBERS: Medlemmer
|
||||||
MENUTITLE: Sikkerhet
|
MENUTITLE: Sikkerhet
|
||||||
MemberListCaution: 'Advarsel: Hvis du fjerner medlemmer fra denne listen vil det samtidig fjerne dem fra alle grupper og databasen'
|
MemberListCaution: 'Advarsel: Hvis du fjerner medlemmer fra denne listen vil det samtidig fjerne dem fra alle grupper og databasen'
|
||||||
|
NEWGROUP: 'Ny gruppe'
|
||||||
PERMISSIONS: Tilganger
|
PERMISSIONS: Tilganger
|
||||||
ROLES: Roller
|
ROLES: Roller
|
||||||
ROLESDESCRIPTION: 'Roller er forhåndsdefinerte lister av tillatelser og kan angis til grupper.<br />De blir arvet fra overerdnede grupper om nødvendig.'
|
ROLESDESCRIPTION: 'Roller er forhåndsdefinerte lister av tillatelser og kan angis til grupper.<br />De blir arvet fra overerdnede grupper om nødvendig.'
|
||||||
TABROLES: Roller
|
TABROLES: Roller
|
||||||
|
Users: Brukere
|
||||||
SecurityAdmin_MemberImportForm:
|
SecurityAdmin_MemberImportForm:
|
||||||
BtnImport: 'Importer fra CSV'
|
BtnImport: 'Importer fra CSV'
|
||||||
|
FileFieldLabel: 'CSV-fil <small>(Tillatt filtype: *.csv)</small>'
|
||||||
SilverStripeNavigator:
|
SilverStripeNavigator:
|
||||||
Edit: Rediger
|
Edit: Rediger
|
||||||
Auto: Automatisk
|
Auto: Automatisk
|
||||||
@ -541,6 +570,7 @@ nb:
|
|||||||
LESS: mindre
|
LESS: mindre
|
||||||
MORE: mer
|
MORE: mer
|
||||||
UploadField:
|
UploadField:
|
||||||
|
ATTACHFILE: 'Legg ved en fil'
|
||||||
ATTACHFILES: 'Legg ved filer'
|
ATTACHFILES: 'Legg ved filer'
|
||||||
AttachFile: 'Legg ved fil(er)'
|
AttachFile: 'Legg ved fil(er)'
|
||||||
DELETE: 'Slett fra filer'
|
DELETE: 'Slett fra filer'
|
||||||
@ -575,3 +605,11 @@ nb:
|
|||||||
PREVIEW: 'Forhåndsvisning'
|
PREVIEW: 'Forhåndsvisning'
|
||||||
GridFieldEditButton_ss:
|
GridFieldEditButton_ss:
|
||||||
EDIT: Rediger
|
EDIT: Rediger
|
||||||
|
ContentController:
|
||||||
|
NOTLOGGEDIN: 'Ikke innlogget'
|
||||||
|
GridFieldItemEditView:
|
||||||
|
Go_back: 'Gå tilbake'
|
||||||
|
PasswordValidator:
|
||||||
|
LOWCHARSTRENGTH: 'Vennligst øk passordstyrken ved å legge til noen av følgende tegn: %s'
|
||||||
|
PREVPASSWORD: 'Du har brukt passordet tidligere, vennligst velg et nytt passord'
|
||||||
|
TOOSHORT: 'Passordet er for kort, det må være %s eller flere tegn langt'
|
||||||
|
42
lang/sk.yml
42
lang/sk.yml
@ -13,8 +13,10 @@ sk:
|
|||||||
SIZE: 'Veľkosť'
|
SIZE: 'Veľkosť'
|
||||||
TITLE: Titulok
|
TITLE: Titulok
|
||||||
TYPE: 'Typ'
|
TYPE: 'Typ'
|
||||||
|
URL: URL
|
||||||
AssetUploadField:
|
AssetUploadField:
|
||||||
DRAGFILESHERE: 'Tiahni súbory sem'
|
ChooseFiles: 'Vyberte súbory'
|
||||||
|
DRAGFILESHERE: 'Tiahni súbory tu'
|
||||||
DROPAREA: 'Oblasť upustenia'
|
DROPAREA: 'Oblasť upustenia'
|
||||||
EDITALL: 'Editovať všetko'
|
EDITALL: 'Editovať všetko'
|
||||||
EDITANDORGANIZE: 'Editovať a organizovať'
|
EDITANDORGANIZE: 'Editovať a organizovať'
|
||||||
@ -72,6 +74,7 @@ sk:
|
|||||||
ChangePasswordEmail_ss:
|
ChangePasswordEmail_ss:
|
||||||
CHANGEPASSWORDTEXT1: 'Vaše heslo bolo zmenené pre'
|
CHANGEPASSWORDTEXT1: 'Vaše heslo bolo zmenené pre'
|
||||||
CHANGEPASSWORDTEXT2: 'Teraz môžete použiť nasledujúce prihlasovacie údaje na prihlásenie:'
|
CHANGEPASSWORDTEXT2: 'Teraz môžete použiť nasledujúce prihlasovacie údaje na prihlásenie:'
|
||||||
|
EMAIL: E-mail
|
||||||
HELLO: Dobrý deň
|
HELLO: Dobrý deň
|
||||||
PASSWORD: Heslo
|
PASSWORD: Heslo
|
||||||
ComplexTableField:
|
ComplexTableField:
|
||||||
@ -96,6 +99,8 @@ sk:
|
|||||||
FOURTH: štvrtý
|
FOURTH: štvrtý
|
||||||
SECOND: druhý
|
SECOND: druhý
|
||||||
THIRD: tretí
|
THIRD: tretí
|
||||||
|
CurrencyField:
|
||||||
|
CURRENCYSYMBOL: $
|
||||||
DataObject:
|
DataObject:
|
||||||
PLURALNAME: 'Datové objekty'
|
PLURALNAME: 'Datové objekty'
|
||||||
SINGULARNAME: 'Dátový objekt'
|
SINGULARNAME: 'Dátový objekt'
|
||||||
@ -209,6 +214,7 @@ sk:
|
|||||||
UnlinkRelation: Odpojiť
|
UnlinkRelation: Odpojiť
|
||||||
GridField:
|
GridField:
|
||||||
Add: 'Pridať {name}'
|
Add: 'Pridať {name}'
|
||||||
|
Filter: Filter
|
||||||
FilterBy: 'Filtrovať podľa'
|
FilterBy: 'Filtrovať podľa'
|
||||||
Find: Vyhľadať
|
Find: Vyhľadať
|
||||||
LEVELUP: 'Úroveň vyššie'
|
LEVELUP: 'Úroveň vyššie'
|
||||||
@ -220,6 +226,7 @@ sk:
|
|||||||
PlaceHolder: 'Vyhľadať {type}'
|
PlaceHolder: 'Vyhľadať {type}'
|
||||||
PlaceHolderWithLabels: 'Vyhľadať {type} podľa {name}'
|
PlaceHolderWithLabels: 'Vyhľadať {type} podľa {name}'
|
||||||
RelationSearch: 'Vzťah hľadania'
|
RelationSearch: 'Vzťah hľadania'
|
||||||
|
ResetFilter: Reset
|
||||||
GridFieldAction_Delete:
|
GridFieldAction_Delete:
|
||||||
DeletePermissionsFailure: 'Žiadne oprávnenia zmazať'
|
DeletePermissionsFailure: 'Žiadne oprávnenia zmazať'
|
||||||
EditPermissionsFailure: 'Žiadne oprávnenie pre odpojenie záznamu'
|
EditPermissionsFailure: 'Žiadne oprávnenie pre odpojenie záznamu'
|
||||||
@ -261,6 +268,7 @@ sk:
|
|||||||
ADDURL: 'Pridať URL'
|
ADDURL: 'Pridať URL'
|
||||||
ADJUSTDETAILSDIMENSIONS: 'Detaily & rozmery'
|
ADJUSTDETAILSDIMENSIONS: 'Detaily & rozmery'
|
||||||
ANCHORVALUE: Odkaz
|
ANCHORVALUE: Odkaz
|
||||||
|
BUTTONINSERT: Vložiť
|
||||||
BUTTONINSERTLINK: 'Vložiť odkaz'
|
BUTTONINSERTLINK: 'Vložiť odkaz'
|
||||||
BUTTONREMOVELINK: 'Odstrániť odkaz'
|
BUTTONREMOVELINK: 'Odstrániť odkaz'
|
||||||
BUTTONUpdate: Aktualizovať
|
BUTTONUpdate: Aktualizovať
|
||||||
@ -298,6 +306,7 @@ sk:
|
|||||||
LINKOPENNEWWIN: 'Otvoriť odkaz v novom okne?'
|
LINKOPENNEWWIN: 'Otvoriť odkaz v novom okne?'
|
||||||
LINKTO: 'Odkázať na'
|
LINKTO: 'Odkázať na'
|
||||||
PAGE: Stránku
|
PAGE: Stránku
|
||||||
|
URL: URL
|
||||||
URLNOTANOEMBEDRESOURCE: 'URL ''{url}'' nemôže byť vložené do zdroja médií.'
|
URLNOTANOEMBEDRESOURCE: 'URL ''{url}'' nemôže byť vložené do zdroja médií.'
|
||||||
UpdateMEDIA: 'Aktualizovať média'
|
UpdateMEDIA: 'Aktualizovať média'
|
||||||
BUTTONADDURL: 'Pridať url'
|
BUTTONADDURL: 'Pridať url'
|
||||||
@ -314,6 +323,7 @@ sk:
|
|||||||
LeftAndMain:
|
LeftAndMain:
|
||||||
CANT_REORGANISE: 'Nemáte oprávnenie meniť stránky najvyššej úrovne. Vaša zmena nebola uložená.'
|
CANT_REORGANISE: 'Nemáte oprávnenie meniť stránky najvyššej úrovne. Vaša zmena nebola uložená.'
|
||||||
DELETED: Zmazané.
|
DELETED: Zmazané.
|
||||||
|
DropdownBatchActionsDefault: Akcie
|
||||||
HELP: Pomoc
|
HELP: Pomoc
|
||||||
PAGETYPE: 'Typ stránky:'
|
PAGETYPE: 'Typ stránky:'
|
||||||
PERMAGAIN: 'Boli ste odhlásený'
|
PERMAGAIN: 'Boli ste odhlásený'
|
||||||
@ -323,6 +333,7 @@ sk:
|
|||||||
PreviewButton: Náhľad
|
PreviewButton: Náhľad
|
||||||
REORGANISATIONSUCCESSFUL: 'Strom webu bol reorganizovaný úspešne.'
|
REORGANISATIONSUCCESSFUL: 'Strom webu bol reorganizovaný úspešne.'
|
||||||
SAVEDUP: Uložené.
|
SAVEDUP: Uložené.
|
||||||
|
VersionUnknown: Neznáme
|
||||||
ShowAsList: 'ukázať ako zoznam'
|
ShowAsList: 'ukázať ako zoznam'
|
||||||
TooManyPages: 'Príliž veľa stránok'
|
TooManyPages: 'Príliž veľa stránok'
|
||||||
ValidationError: 'Chyba platnosti'
|
ValidationError: 'Chyba platnosti'
|
||||||
@ -334,7 +345,9 @@ sk:
|
|||||||
IP: 'IP adreasa'
|
IP: 'IP adreasa'
|
||||||
PLURALNAME: 'Pokusy o prihlásenie'
|
PLURALNAME: 'Pokusy o prihlásenie'
|
||||||
SINGULARNAME: 'Pokus o prihlásenie'
|
SINGULARNAME: 'Pokus o prihlásenie'
|
||||||
|
Status: Stav
|
||||||
Member:
|
Member:
|
||||||
|
ADDGROUP: 'Pridať skupinu'
|
||||||
BUTTONCHANGEPASSWORD: 'Zmeniť heslo'
|
BUTTONCHANGEPASSWORD: 'Zmeniť heslo'
|
||||||
BUTTONLOGIN: 'Prihlásiť sa'
|
BUTTONLOGIN: 'Prihlásiť sa'
|
||||||
BUTTONLOGINOTHER: 'Prihlásiť sa ako niekto iný'
|
BUTTONLOGINOTHER: 'Prihlásiť sa ako niekto iný'
|
||||||
@ -349,6 +362,7 @@ sk:
|
|||||||
EMPTYNEWPASSWORD: 'Nové heslo nesmie byť prázdne, skúste to prosím znova'
|
EMPTYNEWPASSWORD: 'Nové heslo nesmie byť prázdne, skúste to prosím znova'
|
||||||
ENTEREMAIL: 'Prosím zadajte emailovú adresu pre zaslanie odkazu na resetovanie hesla.'
|
ENTEREMAIL: 'Prosím zadajte emailovú adresu pre zaslanie odkazu na resetovanie hesla.'
|
||||||
ERRORLOCKEDOUT: 'Váš účet bol dočasne zablokovaný, kvôli množstvu neúspešných pokusov o prihlásenie. Prosí skúste to znova za 20 minút.'
|
ERRORLOCKEDOUT: 'Váš účet bol dočasne zablokovaný, kvôli množstvu neúspešných pokusov o prihlásenie. Prosí skúste to znova za 20 minút.'
|
||||||
|
ERRORLOCKEDOUT2: 'Váš účet bol dočasne zablokovaný, kvôli množstvu neúspešných pokusov o prihlásenie. Prosím skúste to znova za {count} minút.'
|
||||||
ERRORNEWPASSWORD: 'Zadali ste rozdielne nové heslo, skúste to znovu'
|
ERRORNEWPASSWORD: 'Zadali ste rozdielne nové heslo, skúste to znovu'
|
||||||
ERRORPASSWORDNOTMATCH: 'Vaše súčasné heslo nie je správne, prosím skúste to znovu'
|
ERRORPASSWORDNOTMATCH: 'Vaše súčasné heslo nie je správne, prosím skúste to znovu'
|
||||||
ERRORWRONGCRED: 'Toto nevyzerá ako správna e-mailová adresa alebo heslo. Prosím skúste to znovu.'
|
ERRORWRONGCRED: 'Toto nevyzerá ako správna e-mailová adresa alebo heslo. Prosím skúste to znovu.'
|
||||||
@ -367,6 +381,7 @@ sk:
|
|||||||
TIMEFORMAT: 'Formát času'
|
TIMEFORMAT: 'Formát času'
|
||||||
VALIDATIONMEMBEREXISTS: 'Člen s takýmto e-mailom už existuje'
|
VALIDATIONMEMBEREXISTS: 'Člen s takýmto e-mailom už existuje'
|
||||||
ValidationIdentifierFailed: 'Nemôžte prepísať existujúceho člena #{id} s identickým identifikátorm ({name} = {value}))'
|
ValidationIdentifierFailed: 'Nemôžte prepísať existujúceho člena #{id} s identickým identifikátorm ({name} = {value}))'
|
||||||
|
WELCOMEBACK: 'Vitajte späť, {firstname}'
|
||||||
YOUROLDPASSWORD: 'Vaše staré heslo'
|
YOUROLDPASSWORD: 'Vaše staré heslo'
|
||||||
belongs_many_many_Groups: Skupiny
|
belongs_many_many_Groups: Skupiny
|
||||||
db_LastVisited: 'Dátum poslednej navštevy'
|
db_LastVisited: 'Dátum poslednej navštevy'
|
||||||
@ -375,10 +390,12 @@ sk:
|
|||||||
db_NumVisit: 'Počet návštev'
|
db_NumVisit: 'Počet návštev'
|
||||||
db_Password: Heslo
|
db_Password: Heslo
|
||||||
db_PasswordExpiry: 'Dátum expirácie hesla'
|
db_PasswordExpiry: 'Dátum expirácie hesla'
|
||||||
|
NoPassword: 'Nie je tu heslo pre tohto člena.'
|
||||||
MemberAuthenticator:
|
MemberAuthenticator:
|
||||||
TITLE: 'E-mail & Heslo'
|
TITLE: 'E-mail & Heslo'
|
||||||
MemberDatetimeOptionsetField:
|
MemberDatetimeOptionsetField:
|
||||||
AMORPM: 'AM (pred poludním) alebo PM (popoludní)'
|
AMORPM: 'AM (pred poludním) alebo PM (popoludní)'
|
||||||
|
Custom: Vlastné
|
||||||
DATEFORMATBAD: 'Formát dátumu je neplatný'
|
DATEFORMATBAD: 'Formát dátumu je neplatný'
|
||||||
DAYNOLEADING: 'Deň mesiaca bez úvodnej nuly'
|
DAYNOLEADING: 'Deň mesiaca bez úvodnej nuly'
|
||||||
DIGITSDECFRACTIONSECOND: 'Jedna alebo viac číslic zastupujúcich desatinný zlomok sekundy'
|
DIGITSDECFRACTIONSECOND: 'Jedna alebo viac číslic zastupujúcich desatinný zlomok sekundy'
|
||||||
@ -387,6 +404,7 @@ sk:
|
|||||||
HOURNOLEADING: 'Hodina bez úvodnej nuly'
|
HOURNOLEADING: 'Hodina bez úvodnej nuly'
|
||||||
MINUTENOLEADING: 'Minúta bez úvodnej nuly'
|
MINUTENOLEADING: 'Minúta bez úvodnej nuly'
|
||||||
MONTHNOLEADING: 'Číslo mesiaca bez úvodnej nuly'
|
MONTHNOLEADING: 'Číslo mesiaca bez úvodnej nuly'
|
||||||
|
Preview: Náhľad
|
||||||
SHORTMONTH: 'Krátky názov mesiaca (napr. jún)'
|
SHORTMONTH: 'Krátky názov mesiaca (napr. jún)'
|
||||||
TOGGLEHELP: 'Prepnúť nápovedu formátovania'
|
TOGGLEHELP: 'Prepnúť nápovedu formátovania'
|
||||||
TWODIGITDAY: 'Dvojčíslie dňa mesiaca'
|
TWODIGITDAY: 'Dvojčíslie dňa mesiaca'
|
||||||
@ -416,6 +434,7 @@ sk:
|
|||||||
IMPORTEDRECORDS: 'Importovaných {count} záznamov.'
|
IMPORTEDRECORDS: 'Importovaných {count} záznamov.'
|
||||||
NOCSVFILE: 'Prosím vyhľadajte CSV súbor pre importovanie'
|
NOCSVFILE: 'Prosím vyhľadajte CSV súbor pre importovanie'
|
||||||
NOIMPORT: 'Nie je čo importovať'
|
NOIMPORT: 'Nie je čo importovať'
|
||||||
|
RESET: Reset
|
||||||
Title: 'Dátové modely'
|
Title: 'Dátové modely'
|
||||||
UPDATEDRECORDS: 'Aktualizovaných {count} záznamov.'
|
UPDATEDRECORDS: 'Aktualizovaných {count} záznamov.'
|
||||||
ModelAdmin_ImportSpec_ss:
|
ModelAdmin_ImportSpec_ss:
|
||||||
@ -432,6 +451,8 @@ sk:
|
|||||||
MoneyField:
|
MoneyField:
|
||||||
FIELDLABELAMOUNT: Množstvo
|
FIELDLABELAMOUNT: Množstvo
|
||||||
FIELDLABELCURRENCY: Mena
|
FIELDLABELCURRENCY: Mena
|
||||||
|
NullableField:
|
||||||
|
IsNullLabel: 'Je Null'
|
||||||
NumericField:
|
NumericField:
|
||||||
VALIDATION: '''{value}'' nie je číslo, iba čísla môžu byť akceptované pre toto pole'
|
VALIDATION: '''{value}'' nie je číslo, iba čísla môžu byť akceptované pre toto pole'
|
||||||
Pagination:
|
Pagination:
|
||||||
@ -468,6 +489,7 @@ sk:
|
|||||||
NOTFOUND: 'Žiadne položky'
|
NOTFOUND: 'Žiadne položky'
|
||||||
Security:
|
Security:
|
||||||
ALREADYLOGGEDIN: 'K tejto stránke nemáte prístup. Ak máte iný účet, ktorý k nej má prístup, môžete sa <a href="%s">prihlásiť</a>.'
|
ALREADYLOGGEDIN: 'K tejto stránke nemáte prístup. Ak máte iný účet, ktorý k nej má prístup, môžete sa <a href="%s">prihlásiť</a>.'
|
||||||
|
LOSTPASSWORDHEADER: 'Stratené heslo'
|
||||||
BUTTONSEND: 'Pošlite mi odkaz na resetovanie hesla'
|
BUTTONSEND: 'Pošlite mi odkaz na resetovanie hesla'
|
||||||
CHANGEPASSWORDBELOW: 'Svoje heslo si môžete zmeniť nižšie.'
|
CHANGEPASSWORDBELOW: 'Svoje heslo si môžete zmeniť nižšie.'
|
||||||
CHANGEPASSWORDHEADER: 'Zmeniť heslo'
|
CHANGEPASSWORDHEADER: 'Zmeniť heslo'
|
||||||
@ -487,6 +509,7 @@ sk:
|
|||||||
EDITPERMISSIONS: 'Spravovať právomoci pre skupiny'
|
EDITPERMISSIONS: 'Spravovať právomoci pre skupiny'
|
||||||
EDITPERMISSIONS_HELP: 'Schopnosť upravovať právomoci a IP adresi pre skupinu. Vyžaduje prístup do sekcie "Bezpečnosť".'
|
EDITPERMISSIONS_HELP: 'Schopnosť upravovať právomoci a IP adresi pre skupinu. Vyžaduje prístup do sekcie "Bezpečnosť".'
|
||||||
GROUPNAME: 'Názov skupiny'
|
GROUPNAME: 'Názov skupiny'
|
||||||
|
IMPORTGROUPS: 'Importovať skupiny'
|
||||||
IMPORTUSERS: 'Importovať požívateľov'
|
IMPORTUSERS: 'Importovať požívateľov'
|
||||||
MEMBERS: Členovia
|
MEMBERS: Členovia
|
||||||
MENUTITLE: Bezpečnosť
|
MENUTITLE: Bezpečnosť
|
||||||
@ -502,7 +525,9 @@ sk:
|
|||||||
FileFieldLabel: 'CSV súbor <small>(Povoléné koncovki súborov: *.csv)</small>'
|
FileFieldLabel: 'CSV súbor <small>(Povoléné koncovki súborov: *.csv)</small>'
|
||||||
SilverStripeNavigator:
|
SilverStripeNavigator:
|
||||||
Edit: Editovať
|
Edit: Editovať
|
||||||
|
Auto: Auto
|
||||||
ChangeViewMode: 'Zmeniť nód zobrazenia'
|
ChangeViewMode: 'Zmeniť nód zobrazenia'
|
||||||
|
Desktop: Desktop
|
||||||
DualWindowView: 'Duálne okno'
|
DualWindowView: 'Duálne okno'
|
||||||
EditView: 'Mód editácie'
|
EditView: 'Mód editácie'
|
||||||
Mobile: Mobilný telefón
|
Mobile: Mobilný telefón
|
||||||
@ -510,6 +535,7 @@ sk:
|
|||||||
PreviewView: 'Mód náhľadu'
|
PreviewView: 'Mód náhľadu'
|
||||||
Responsive: Responzívny
|
Responsive: Responzívny
|
||||||
SplitView: 'Mód rozdelenia'
|
SplitView: 'Mód rozdelenia'
|
||||||
|
Tablet: Tablet
|
||||||
ViewDeviceWidth: 'Vyberte šírku náhľadu'
|
ViewDeviceWidth: 'Vyberte šírku náhľadu'
|
||||||
Width: šírka
|
Width: šírka
|
||||||
SimpleImageField:
|
SimpleImageField:
|
||||||
@ -544,8 +570,12 @@ sk:
|
|||||||
LESS: menej
|
LESS: menej
|
||||||
MORE: viac
|
MORE: viac
|
||||||
UploadField:
|
UploadField:
|
||||||
|
ATTACHFILE: 'Pripojiť súbor'
|
||||||
|
ATTACHFILES: 'Pripojiť súbory'
|
||||||
|
AttachFile: 'Pripojiť súbor(y)'
|
||||||
DELETE: 'Zmazať zo súborov'
|
DELETE: 'Zmazať zo súborov'
|
||||||
DELETEINFO: 'Trvalo zmazať tento súbor z úložiska súborov'
|
DELETEINFO: 'Trvalo zmazať tento súbor z úložiska súborov'
|
||||||
|
DOEDIT: Uložiť
|
||||||
DROPFILE: 'pusť súbor'
|
DROPFILE: 'pusť súbor'
|
||||||
DROPFILES: 'pusť súbory'
|
DROPFILES: 'pusť súbory'
|
||||||
Dimensions: Rozmery
|
Dimensions: Rozmery
|
||||||
@ -554,6 +584,7 @@ sk:
|
|||||||
FIELDNOTSET: 'Žiadna informácia o súbore'
|
FIELDNOTSET: 'Žiadna informácia o súbore'
|
||||||
FROMCOMPUTER: 'Z vášho počitača'
|
FROMCOMPUTER: 'Z vášho počitača'
|
||||||
FROMCOMPUTERINFO: 'Vyberte zo súborov'
|
FROMCOMPUTERINFO: 'Vyberte zo súborov'
|
||||||
|
FROMFILES: 'Zo súborov'
|
||||||
HOTLINKINFO: 'Info: Tento obrázok bude "hotlinkovaný". Uistete sa prosím, že máte oprávnenie od pôvodneho tvorcu webu, aby sa tak stalo.'
|
HOTLINKINFO: 'Info: Tento obrázok bude "hotlinkovaný". Uistete sa prosím, že máte oprávnenie od pôvodneho tvorcu webu, aby sa tak stalo.'
|
||||||
MAXNUMBEROFFILES: 'Maximálny počet {count} súbor(ov) prekročený.'
|
MAXNUMBEROFFILES: 'Maximálny počet {count} súbor(ov) prekročený.'
|
||||||
MAXNUMBEROFFILESSHORT: 'Môžte nahrať iba {count} súborov'
|
MAXNUMBEROFFILESSHORT: 'Môžte nahrať iba {count} súborov'
|
||||||
@ -563,6 +594,7 @@ sk:
|
|||||||
REMOVEINFO: 'Odstrániť tento súbor odtiaľ, ale nezmazať z úložiska súborov'
|
REMOVEINFO: 'Odstrániť tento súbor odtiaľ, ale nezmazať z úložiska súborov'
|
||||||
STARTALL: 'Začni všetko'
|
STARTALL: 'Začni všetko'
|
||||||
STARTALLINFO: 'Začni všetko nahrávať'
|
STARTALLINFO: 'Začni všetko nahrávať'
|
||||||
|
Saved: Uložené
|
||||||
CHOOSEANOTHERFILE: 'Vyberte iný súbor'
|
CHOOSEANOTHERFILE: 'Vyberte iný súbor'
|
||||||
CHOOSEANOTHERINFO: 'Nahradiť tento súbor iným z úložiska súborov'
|
CHOOSEANOTHERINFO: 'Nahradiť tento súbor iným z úložiska súborov'
|
||||||
OVERWRITEWARNING: 'Súbor s rovnakým názvom už existuje'
|
OVERWRITEWARNING: 'Súbor s rovnakým názvom už existuje'
|
||||||
@ -573,3 +605,11 @@ sk:
|
|||||||
PREVIEW: 'Náhľad webu'
|
PREVIEW: 'Náhľad webu'
|
||||||
GridFieldEditButton_ss:
|
GridFieldEditButton_ss:
|
||||||
EDIT: Editovať
|
EDIT: Editovať
|
||||||
|
ContentController:
|
||||||
|
NOTLOGGEDIN: 'Neprihlásený'
|
||||||
|
GridFieldItemEditView:
|
||||||
|
Go_back: 'Choď späť'
|
||||||
|
PasswordValidator:
|
||||||
|
LOWCHARSTRENGTH: 'Prosím posilnite heslo pridaním z týchto niektorých znakov: %s'
|
||||||
|
PREVPASSWORD: 'Už ste použili toto heslo v minulosti, vyberte nové hoslo, prosím'
|
||||||
|
TOOSHORT: 'Heslo je príliš krátke, musí byť %s alebo viacej znakov dlhé'
|
||||||
|
@ -141,6 +141,9 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity
|
|||||||
/**
|
/**
|
||||||
* @config
|
* @config
|
||||||
* @var boolean Should dataobjects be validated before they are written?
|
* @var boolean Should dataobjects be validated before they are written?
|
||||||
|
* Caution: Validation can contain safeguards against invalid/malicious data,
|
||||||
|
* and check permission levels (e.g. on {@link Group}). Therefore it is recommended
|
||||||
|
* to only disable validation for very specific use cases.
|
||||||
*/
|
*/
|
||||||
private static $validation_enabled = true;
|
private static $validation_enabled = true;
|
||||||
|
|
||||||
|
@ -338,6 +338,31 @@ class Group extends DataObject {
|
|||||||
$this->setField("Code", Convert::raw2url($val));
|
$this->setField("Code", Convert::raw2url($val));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function validate() {
|
||||||
|
$result = parent::validate();
|
||||||
|
|
||||||
|
// Check if the new group hierarchy would add certain "privileged permissions",
|
||||||
|
// and require an admin to perform this change in case it does.
|
||||||
|
// This prevents "sub-admin" users with group editing permissions to increase their privileges.
|
||||||
|
if($this->Parent()->exists() && !Permission::check('ADMIN')) {
|
||||||
|
$inheritedCodes = Permission::get()
|
||||||
|
->filter('GroupID', $this->Parent()->collateAncestorIDs())
|
||||||
|
->column('Code');
|
||||||
|
$privilegedCodes = Config::inst()->get('Permission', 'privileged_permissions');
|
||||||
|
if(array_intersect($inheritedCodes, $privilegedCodes)) {
|
||||||
|
$result->error(sprintf(
|
||||||
|
_t(
|
||||||
|
'Group.HierarchyPermsError',
|
||||||
|
'Can\'t assign parent group "%s" with privileged permissions (requires ADMIN access)'
|
||||||
|
),
|
||||||
|
$this->Parent()->Title
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
public function onBeforeWrite() {
|
public function onBeforeWrite() {
|
||||||
parent::onBeforeWrite();
|
parent::onBeforeWrite();
|
||||||
|
|
||||||
|
@ -1231,7 +1231,7 @@ class Member extends DataObject implements TemplateGlobalProvider {
|
|||||||
$permissionsTab = $fields->fieldByName("Root")->fieldByName('Permissions');
|
$permissionsTab = $fields->fieldByName("Root")->fieldByName('Permissions');
|
||||||
if($permissionsTab) $permissionsTab->addExtraClass('readonly');
|
if($permissionsTab) $permissionsTab->addExtraClass('readonly');
|
||||||
|
|
||||||
$defaultDateFormat = Zend_Locale_Format::getDateFormat($this->Locale);
|
$defaultDateFormat = Zend_Locale_Format::getDateFormat(new Zend_Locale($this->Locale));
|
||||||
$dateFormatMap = array(
|
$dateFormatMap = array(
|
||||||
'MMM d, yyyy' => Zend_Date::now()->toString('MMM d, yyyy'),
|
'MMM d, yyyy' => Zend_Date::now()->toString('MMM d, yyyy'),
|
||||||
'yyyy/MM/dd' => Zend_Date::now()->toString('yyyy/MM/dd'),
|
'yyyy/MM/dd' => Zend_Date::now()->toString('yyyy/MM/dd'),
|
||||||
@ -1249,7 +1249,7 @@ class Member extends DataObject implements TemplateGlobalProvider {
|
|||||||
);
|
);
|
||||||
$dateFormatField->setValue($this->DateFormat);
|
$dateFormatField->setValue($this->DateFormat);
|
||||||
|
|
||||||
$defaultTimeFormat = Zend_Locale_Format::getTimeFormat($this->Locale);
|
$defaultTimeFormat = Zend_Locale_Format::getTimeFormat(new Zend_Locale($this->Locale));
|
||||||
$timeFormatMap = array(
|
$timeFormatMap = array(
|
||||||
'h:mm a' => Zend_Date::now()->toString('h:mm a'),
|
'h:mm a' => Zend_Date::now()->toString('h:mm a'),
|
||||||
'H:mm' => Zend_Date::now()->toString('H:mm'),
|
'H:mm' => Zend_Date::now()->toString('H:mm'),
|
||||||
|
@ -86,6 +86,17 @@ class Permission extends DataObject implements TemplateGlobalProvider {
|
|||||||
*/
|
*/
|
||||||
private static $hidden_permissions = array();
|
private static $hidden_permissions = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @config These permissions can only be applied by ADMIN users, to prevent
|
||||||
|
* privilege escalation on group assignments and inheritance.
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
private static $privileged_permissions = array(
|
||||||
|
'ADMIN',
|
||||||
|
'APPLY_ROLES',
|
||||||
|
'EDIT_PERMISSIONS'
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check that the current member has the given permission.
|
* Check that the current member has the given permission.
|
||||||
*
|
*
|
||||||
|
@ -162,6 +162,8 @@ class PermissionCheckboxSetField extends FormField {
|
|||||||
$options = '';
|
$options = '';
|
||||||
$globalHidden = (array)Config::inst()->get('Permission', 'hidden_permissions');
|
$globalHidden = (array)Config::inst()->get('Permission', 'hidden_permissions');
|
||||||
if($this->source) {
|
if($this->source) {
|
||||||
|
$privilegedPermissions = Permission::config()->privileged_permissions;
|
||||||
|
|
||||||
// loop through all available categorized permissions and see if they're assigned for the given groups
|
// loop through all available categorized permissions and see if they're assigned for the given groups
|
||||||
foreach($this->source as $categoryName => $permissions) {
|
foreach($this->source as $categoryName => $permissions) {
|
||||||
$options .= "<li><h5>$categoryName</h5></li>";
|
$options .= "<li><h5>$categoryName</h5></li>";
|
||||||
@ -194,6 +196,11 @@ class PermissionCheckboxSetField extends FormField {
|
|||||||
$inheritMessage = ' (' . join(', ', $uninheritedCodes[$code]).')';
|
$inheritMessage = ' (' . join(', ', $uninheritedCodes[$code]).')';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Disallow modification of "privileged" permissions unless currently logged-in user is an admin
|
||||||
|
if(!Permission::check('ADMIN') && in_array($code, $privilegedPermissions)) {
|
||||||
|
$disabled = ' disabled="true"';
|
||||||
|
}
|
||||||
|
|
||||||
// If the field is readonly, always mark as "disabled"
|
// If the field is readonly, always mark as "disabled"
|
||||||
if($this->readonly) $disabled = ' disabled="true"';
|
if($this->readonly) $disabled = ' disabled="true"';
|
||||||
|
|
||||||
@ -246,6 +253,16 @@ class PermissionCheckboxSetField extends FormField {
|
|||||||
$fieldname = $this->name;
|
$fieldname = $this->name;
|
||||||
$managedClass = $this->managedClass;
|
$managedClass = $this->managedClass;
|
||||||
|
|
||||||
|
// Remove all "privileged" permissions if the currently logged-in user is not an admin
|
||||||
|
$privilegedPermissions = Permission::config()->privileged_permissions;
|
||||||
|
if(!Permission::check('ADMIN')) {
|
||||||
|
foreach($this->value as $id => $bool) {
|
||||||
|
if(in_array($id, $privilegedPermissions)) {
|
||||||
|
unset($this->value[$id]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// remove all permissions and re-add them afterwards
|
// remove all permissions and re-add them afterwards
|
||||||
$permissions = $record->$fieldname();
|
$permissions = $record->$fieldname();
|
||||||
foreach ( $permissions as $permission ) {
|
foreach ( $permissions as $permission ) {
|
||||||
|
@ -76,4 +76,20 @@ class PermissionRole extends DataObject {
|
|||||||
|
|
||||||
return $labels;
|
return $labels;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function canView($member = null) {
|
||||||
|
return Permission::check('APPLY_ROLES', 'any', $member);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function canCreate($member = null) {
|
||||||
|
return Permission::check('APPLY_ROLES', 'any', $member);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function canEdit($member = null) {
|
||||||
|
return Permission::check('APPLY_ROLES', 'any', $member);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function canDelete($member = null) {
|
||||||
|
return Permission::check('APPLY_ROLES', 'any', $member);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,4 +13,38 @@ class PermissionRoleCode extends DataObject {
|
|||||||
private static $has_one = array(
|
private static $has_one = array(
|
||||||
"Role" => "PermissionRole",
|
"Role" => "PermissionRole",
|
||||||
);
|
);
|
||||||
|
|
||||||
|
protected function validate() {
|
||||||
|
$result = parent::validate();
|
||||||
|
|
||||||
|
// Check that new code doesn't increase privileges, unless an admin is editing.
|
||||||
|
$privilegedCodes = Config::inst()->get('Permission', 'privileged_permissions');
|
||||||
|
if(
|
||||||
|
$this->Code
|
||||||
|
&& in_array($this->Code, $privilegedCodes)
|
||||||
|
&& !Permission::check('ADMIN')
|
||||||
|
) {
|
||||||
|
$result->error(sprintf(
|
||||||
|
_t(
|
||||||
|
'PermissionRoleCode.PermsError',
|
||||||
|
'Can\'t assign code "%s" with privileged permissions (requires ADMIN access)'
|
||||||
|
),
|
||||||
|
$this->Code
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function canCreate($member = null) {
|
||||||
|
return Permission::check('APPLY_ROLES', 'any', $member);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function canEdit($member = null) {
|
||||||
|
return Permission::check('APPLY_ROLES', 'any', $member);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function canDelete($member = null) {
|
||||||
|
return Permission::check('APPLY_ROLES', 'any', $member);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -97,9 +97,9 @@ class i18nTest extends SapphireTest {
|
|||||||
|
|
||||||
public function testGetExistingTranslations() {
|
public function testGetExistingTranslations() {
|
||||||
$translations = i18n::get_existing_translations();
|
$translations = i18n::get_existing_translations();
|
||||||
$this->assertTrue(isset($translations['en']), 'Checking for en translation');
|
$this->assertTrue(isset($translations['en_US']), 'Checking for en translation');
|
||||||
$this->assertEquals($translations['en'], 'English (United States)');
|
$this->assertEquals($translations['en_US'], 'English (United States)');
|
||||||
$this->assertTrue(isset($translations['de']), 'Checking for de_DE translation');
|
$this->assertTrue(isset($translations['de_DE']), 'Checking for de_DE translation');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testDataObjectFieldLabels() {
|
public function testDataObjectFieldLabels() {
|
||||||
|
@ -109,6 +109,49 @@ class GroupTest extends FunctionalTest {
|
|||||||
'Grandchild groups are removed');
|
'Grandchild groups are removed');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testValidatesPrivilegeLevelOfParent() {
|
||||||
|
$nonAdminUser = $this->objFromFixture('GroupTest_Member', 'childgroupuser');
|
||||||
|
$adminUser = $this->objFromFixture('GroupTest_Member', 'admin');
|
||||||
|
$nonAdminGroup = $this->objFromFixture('Group', 'childgroup');
|
||||||
|
$adminGroup = $this->objFromFixture('Group', 'admingroup');
|
||||||
|
|
||||||
|
$nonAdminValidateMethod = new ReflectionMethod($nonAdminGroup, 'validate');
|
||||||
|
$nonAdminValidateMethod->setAccessible(true);
|
||||||
|
|
||||||
|
// Making admin group parent of a non-admin group, effectively expanding is privileges
|
||||||
|
$nonAdminGroup->ParentID = $adminGroup->ID;
|
||||||
|
|
||||||
|
$this->logInWithPermission('APPLY_ROLES');
|
||||||
|
$result = $nonAdminValidateMethod->invoke($nonAdminGroup);
|
||||||
|
$this->assertFalse(
|
||||||
|
$result->valid(),
|
||||||
|
'Members with only APPLY_ROLES can\'t assign parent groups with direct ADMIN permissions'
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->logInWithPermission('ADMIN');
|
||||||
|
$result = $nonAdminValidateMethod->invoke($nonAdminGroup);
|
||||||
|
$this->assertTrue(
|
||||||
|
$result->valid(),
|
||||||
|
'Members with ADMIN can assign parent groups with direct ADMIN permissions'
|
||||||
|
);
|
||||||
|
$nonAdminGroup->write();
|
||||||
|
$newlyAdminGroup = $nonAdminGroup;
|
||||||
|
|
||||||
|
$this->logInWithPermission('ADMIN');
|
||||||
|
$inheritedAdminGroup = $this->objFromFixture('Group', 'group1');
|
||||||
|
$inheritedAdminMethod = new ReflectionMethod($inheritedAdminGroup, 'validate');
|
||||||
|
$inheritedAdminMethod->setAccessible(true);
|
||||||
|
$inheritedAdminGroup->ParentID = $adminGroup->ID;
|
||||||
|
$inheritedAdminGroup->write(); // only works with ADMIN login
|
||||||
|
|
||||||
|
$this->logInWithPermission('APPLY_ROLES');
|
||||||
|
$result = $inheritedAdminMethod->invoke($nonAdminGroup);
|
||||||
|
$this->assertFalse(
|
||||||
|
$result->valid(),
|
||||||
|
'Members with only APPLY_ROLES can\'t assign parent groups with inherited ADMIN permission'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class GroupTest_Member extends Member implements TestOnly {
|
class GroupTest_Member extends Member implements TestOnly {
|
||||||
|
@ -16,4 +16,35 @@ class PermissionRoleTest extends FunctionalTest {
|
|||||||
$this->assertEquals(0, DataObject::get('PermissionRoleCode',"\"RoleID\"={$role->ID}")->count(),
|
$this->assertEquals(0, DataObject::get('PermissionRoleCode',"\"RoleID\"={$role->ID}")->count(),
|
||||||
'Permissions removed along with the role');
|
'Permissions removed along with the role');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testValidatesPrivilegedPermissions() {
|
||||||
|
$nonAdminCode = new PermissionRoleCode(array('Code' => 'CMS_ACCESS_CMSMain'));
|
||||||
|
$nonAdminValidateMethod = new ReflectionMethod($nonAdminCode, 'validate');
|
||||||
|
$nonAdminValidateMethod->setAccessible(true);
|
||||||
|
|
||||||
|
$adminCode = new PermissionRoleCode(array('Code' => 'ADMIN'));
|
||||||
|
$adminValidateMethod = new ReflectionMethod($adminCode, 'validate');
|
||||||
|
$adminValidateMethod->setAccessible(true);
|
||||||
|
|
||||||
|
$this->logInWithPermission('APPLY_ROLES');
|
||||||
|
$result = $nonAdminValidateMethod->invoke($nonAdminCode);
|
||||||
|
$this->assertTrue(
|
||||||
|
$result->valid(),
|
||||||
|
'Members with only APPLY_ROLES can create non-privileged permission role codes'
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->logInWithPermission('APPLY_ROLES');
|
||||||
|
$result = $adminValidateMethod->invoke($adminCode);
|
||||||
|
$this->assertFalse(
|
||||||
|
$result->valid(),
|
||||||
|
'Members with only APPLY_ROLES can\'t create privileged permission role codes'
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->logInWithPermission('ADMIN');
|
||||||
|
$result = $adminValidateMethod->invoke($adminCode);
|
||||||
|
$this->assertTrue(
|
||||||
|
$result->valid(),
|
||||||
|
'Members with ADMIN can create privileged permission role codes'
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user