From 0e7231ff60ef04d5b223b20c1bb779be6418d34a Mon Sep 17 00:00:00 2001 From: Ingo Schommer Date: Sat, 3 Aug 2013 16:15:52 +0200 Subject: [PATCH 01/16] API Disable discontinued Google Spellcheck in TinyMCE Replaced by browser-based spellchecking if available (Chrome, Firefox), with instructions on how to use PSpell as an alternative. --- admin/_config.php | 3 +-- docs/en/changelogs/3.0.6.md | 1 + docs/en/topics/rich-text-editing.md | 23 +++++++++++++++++++++++ forms/HtmlEditorConfig.php | 4 ++-- 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/admin/_config.php b/admin/_config.php index f446d8157..18568131a 100644 --- a/admin/_config.php +++ b/admin/_config.php @@ -26,8 +26,7 @@ HtmlEditorConfig::get('cms')->setOptions(array( . "dd[id|class|title|dir],dl[id|class|title|dir],dt[id|class|title|dir],@[id,style,class]", 'extended_valid_elements' => "img[class|src|alt|title|hspace|vspace|width|height|align|onmouseover|onmouseout|name" . "|usemap|data*],iframe[src|name|width|height|align|frameborder|marginwidth|marginheight|scrolling]," - . "object[width|height|data|type],param[name|value],map[class|name|id],area[shape|coords|href|target|alt]", - 'spellchecker_rpc_url' => THIRDPARTY_DIR . '/tinymce-spellchecker/rpc.php' + . "object[width|height|data|type],param[name|value],map[class|name|id],area[shape|coords|href|target|alt]" )); HtmlEditorConfig::get('cms')->enablePlugins('media', 'fullscreen', 'inlinepopups'); diff --git a/docs/en/changelogs/3.0.6.md b/docs/en/changelogs/3.0.6.md index ba7e28704..75b6ffe99 100644 --- a/docs/en/changelogs/3.0.6.md +++ b/docs/en/changelogs/3.0.6.md @@ -4,6 +4,7 @@ * Security: Require ADMIN for `?flush=1` (stop denial of service attacks) ([#1692](https://github.com/silverstripe/silverstripe-framework/issues/1692)) + * API: Disable discontinued Google Spellcheck in TinyMCE. Replaced by browser-based spellchecking if available (Chrome, Firefox) ## Details diff --git a/docs/en/topics/rich-text-editing.md b/docs/en/topics/rich-text-editing.md index 4874744d2..6116e2f01 100644 --- a/docs/en/topics/rich-text-editing.md +++ b/docs/en/topics/rich-text-editing.md @@ -145,6 +145,29 @@ on your own editor wrapper. Note that the `[api:HtmlEditorConfig]` is currently so its up to you to either convert existing configuration as applicable, or start your own configuration. +### Integrating a Spellchecker for TinyMCE + +The TinyMCE editor uses spellchecking integrated into the browser if possible +([docs](http://www.tinymce.com/wiki.php/Plugin3x:spellchecker)). +Most modern browsers support it, although Internet Explorer only has limited +support in IE10. Alternatively, you can use the PSpell PHP module for server side checks. +Assuming you have the module installed, here's how you enable its use in `mysite/_config.php`: + + :::php + HtmlEditorConfig::get('cms')->enablePlugins('spellchecker'); + HtmlEditorConfig::get('cms')->addButtonsToLine(2, 'spellchecker'); + HtmlEditorConfig::get('cms')->setOption( + 'spellchecker_rpc_url', + THIRDPARTY_DIR . '/tinymce-spellchecker/rpc.php' + ); + HtmlEditorConfig::get('cms')->setOption('browser_spellcheck', false); + +Now change the default spellchecker in `framework/thirdparty/tinymce-spellchecker/config.php`: + + :::php + // ... + $config['general.engine'] = 'PSpell'; + ## Related * [Howto: Extend the CMS Interface](../howto/extend-cms-interface) diff --git a/forms/HtmlEditorConfig.php b/forms/HtmlEditorConfig.php index 165ba370d..4820a1e5a 100644 --- a/forms/HtmlEditorConfig.php +++ b/forms/HtmlEditorConfig.php @@ -85,6 +85,7 @@ class HtmlEditorConfig { 'safari_warning' => false, 'relative_urls' => true, 'verify_html' => true, + 'browser_spellcheck' => true, ); /** @@ -95,7 +96,6 @@ class HtmlEditorConfig { 'table' => null, 'emotions' => null, 'paste' => null, - 'spellchecker' => null ); /** @@ -105,7 +105,7 @@ class HtmlEditorConfig { 1 => array('bold','italic','underline','strikethrough','separator', 'justifyleft','justifycenter','justifyright','justifyfull','formatselect','separator', 'bullist','numlist','outdent','indent','blockquote','hr','charmap'), - 2 => array('undo','redo','separator','cut','copy','paste','pastetext','pasteword','spellchecker','separator', + 2 => array('undo','redo','separator','cut','copy','paste','pastetext','pasteword','separator', 'advcode','search','replace','selectall','visualaid','separator','tablecontrols'), 3 => array() ); From 74f65540a247c131793978ed15964493e7c07d8d Mon Sep 17 00:00:00 2001 From: Ingo Schommer Date: Thu, 15 Aug 2013 22:17:38 +0200 Subject: [PATCH 02/16] Validate 'archiveDate' user data in Versioned Not a security issue as such, since the user input is sanitized before being used in Versioned->augmentSQL(). But it shouldn't reach the session state either, since that's commonly assumed to be sanitized data, and it leaves unnecessary room for error. strtotime() has fairly loose validation rules around dates, but its a good "first line of defence". --- model/Versioned.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/model/Versioned.php b/model/Versioned.php index 76525444c..8e362be2b 100644 --- a/model/Versioned.php +++ b/model/Versioned.php @@ -841,7 +841,7 @@ class Versioned extends DataExtension { Session::set('readingMode', 'Stage.' . $stage); } - if(isset($_GET['archiveDate'])) { + if(isset($_GET['archiveDate']) && strtotime($_GET['archiveDate'])) { Session::set('readingMode', 'Archive.' . $_GET['archiveDate']); } From dd49834b9eca9e87cf5a8401e48a53934d22345b Mon Sep 17 00:00:00 2001 From: Sean Harvey Date: Fri, 4 Oct 2013 10:05:28 +1300 Subject: [PATCH 03/16] BUG Fixing installer not checking display_errors correctly. Fixes issue #2479. Installer sets display_errors on, but it checks the changed value and not the original one set in php.ini. --- dev/install/install.php5 | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/dev/install/install.php5 b/dev/install/install.php5 index 92f5e222f..d0d75003a 100644 --- a/dev/install/install.php5 +++ b/dev/install/install.php5 @@ -18,8 +18,11 @@ ini_set('mysql.connect_timeout', 5); // Don't die half was through installation; that does more harm than good ini_set('max_execution_time', 0); -// Prevent a white-screen-of-death -ini_set('display_errors', 'on'); + +// set display_errors php setting to on to force installer to avoid blank screen of death. +// get the original value so it can be used in PHP requirement checks later in this script. +$originalDisplayErrorsValue = ini_get('display_errors'); +ini_set('display_errors', '1'); error_reporting(E_ALL | E_STRICT); @@ -469,7 +472,15 @@ class InstallRequirements { function suggestPHPSetting($settingName, $settingValues, $testDetails) { $this->testing($testDetails); - $val = ini_get($settingName); + + // special case for display_errors, check the original value before + // it was changed at the start of this script. + if($settingName = 'display_errors') { + $val = $originalDisplayErrorsValue; + } else { + $val = ini_get($settingName); + } + if(!in_array($val, $settingValues) && $val != $settingValues) { $testDetails[2] = "$settingName is set to '$val' in php.ini. $testDetails[2]"; $this->warning($testDetails); From f67b549b771441ddbdaef7888ed88c1e6ae91574 Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Thu, 3 Oct 2013 14:49:18 +1300 Subject: [PATCH 04/16] BUG Fixed cross-platform issues with test cases and file utilities --- core/TempPath.php | 8 ++++---- tests/core/CoreTest.php | 36 +++++++++++++++++++----------------- tests/i18n/i18nTest.php | 40 +++++++++++++++++++++------------------- 3 files changed, 44 insertions(+), 40 deletions(-) diff --git a/core/TempPath.php b/core/TempPath.php index 57d146b97..7a21e60d1 100644 --- a/core/TempPath.php +++ b/core/TempPath.php @@ -46,7 +46,7 @@ function getTempParentFolder($base = null) { $worked = true; // first, try finding a silverstripe-cache dir built off the base path - $tempPath = $base . '/silverstripe-cache'; + $tempPath = $base . DIRECTORY_SEPARATOR . 'silverstripe-cache'; if(@file_exists($tempPath)) { if((fileperms($tempPath) & 0777) != 0777) { @chmod($tempPath, 0777); @@ -55,7 +55,7 @@ function getTempParentFolder($base = null) { } // failing the above, try finding a namespaced silverstripe-cache dir in the system temp - $cacheFolder = '/silverstripe-cache' . str_replace(array(' ', '/', ':', '\\'), '-', $base); + $cacheFolder = DIRECTORY_SEPARATOR . 'silverstripe-cache' . str_replace(array(' ', '/', ':', '\\'), '-', $base); $tempPath = sys_get_temp_dir() . $cacheFolder; if(!@file_exists($tempPath)) { $oldUMask = umask(0); @@ -72,7 +72,7 @@ function getTempParentFolder($base = null) { // failing to use the system path, attempt to create a local silverstripe-cache dir if(!$worked) { $worked = true; - $tempPath = $base . '/silverstripe-cache'; + $tempPath = $base . DIRECTORY_SEPARATOR . 'silverstripe-cache'; if(!@file_exists($tempPath)) { $oldUMask = umask(0); $worked = @mkdir($tempPath, 0777); @@ -89,4 +89,4 @@ function getTempParentFolder($base = null) { } return $tempPath; -} \ No newline at end of file +} diff --git a/tests/core/CoreTest.php b/tests/core/CoreTest.php index b8eb66cb9..a6e6df99c 100644 --- a/tests/core/CoreTest.php +++ b/tests/core/CoreTest.php @@ -12,27 +12,30 @@ class CoreTest extends SapphireTest { public function setUp() { parent::setUp(); - $this->tempPath = Director::baseFolder() . '/silverstripe-cache'; + $this->tempPath = Director::baseFolder() . DIRECTORY_SEPARATOR . 'silverstripe-cache'; } public function testGetTempPathInProject() { + $user = getTempFolderUsername(); + if(file_exists($this->tempPath)) { - $this->assertEquals(getTempFolder(BASE_PATH), $this->tempPath); + $this->assertEquals(getTempFolder(BASE_PATH), $this->tempPath . DIRECTORY_SEPARATOR . $user); } else { $user = getTempFolderUsername(); // A typical Windows location for where sites are stored on IIS - $this->assertEquals(sys_get_temp_dir() . - '/silverstripe-cacheC--inetpub-wwwroot-silverstripe-test-project/' . $user, + $this->assertEquals(sys_get_temp_dir() . DIRECTORY_SEPARATOR . + 'silverstripe-cacheC--inetpub-wwwroot-silverstripe-test-project' . DIRECTORY_SEPARATOR . $user, getTempFolder('C:\\inetpub\\wwwroot\\silverstripe-test-project')); // A typical Mac OS X location for where sites are stored - $this->assertEquals(sys_get_temp_dir() . - '/silverstripe-cache-Users-joebloggs-Sites-silverstripe-test-project/' . $user, + $this->assertEquals(sys_get_temp_dir() . DIRECTORY_SEPARATOR . + 'silverstripe-cache-Users-joebloggs-Sites-silverstripe-test-project' . DIRECTORY_SEPARATOR . $user, getTempFolder('/Users/joebloggs/Sites/silverstripe-test-project')); // A typical Linux location for where sites are stored - $this->assertEquals(sys_get_temp_dir() . '/silverstripe-cache-var-www-silverstripe-test-project/' . $user, + $this->assertEquals(sys_get_temp_dir() . DIRECTORY_SEPARATOR . + 'silverstripe-cache-var-www-silverstripe-test-project' . DIRECTORY_SEPARATOR . $user, getTempFolder('/var/www/silverstripe-test-project')); } } @@ -40,18 +43,17 @@ class CoreTest extends SapphireTest { public function tearDown() { parent::tearDown(); $user = getTempFolderUsername(); - if(file_exists(sys_get_temp_dir() . '/silverstripe-cacheC--inetpub-wwwroot-silverstripe-test-project')) { - rmdir(sys_get_temp_dir() . '/silverstripe-cacheC--inetpub-wwwroot-silverstripe-test-project/' . $user); - rmdir(sys_get_temp_dir() . '/silverstripe-cacheC--inetpub-wwwroot-silverstripe-test-project'); + foreach(array( + 'silverstripe-cacheC--inetpub-wwwroot-silverstripe-test-project', + 'silverstripe-cache-Users-joebloggs-Sites-silverstripe-test-project', + 'silverstripe-cache-var-www-silverstripe-test-project' + ) as $dir) { + $path = sys_get_temp_dir().DIRECTORY_SEPARATOR.$dir; + if(file_exists($path)) { + rmdir($path . DIRECTORY_SEPARATOR . $user); + rmdir($path); } - if(file_exists(sys_get_temp_dir() . '/silverstripe-cache-Users-joebloggs-Sites-silverstripe-test-project')) { - rmdir(sys_get_temp_dir() . '/silverstripe-cache-Users-joebloggs-Sites-silverstripe-test-project/' . $user); - rmdir(sys_get_temp_dir() . '/silverstripe-cache-Users-joebloggs-Sites-silverstripe-test-project'); } - if(file_exists(sys_get_temp_dir() . '/silverstripe-cache-var-www-silverstripe-test-project')) { - rmdir(sys_get_temp_dir() . '/silverstripe-cache-var-www-silverstripe-test-project/' . $user); - rmdir(sys_get_temp_dir() . '/silverstripe-cache-var-www-silverstripe-test-project'); } - } } diff --git a/tests/i18n/i18nTest.php b/tests/i18n/i18nTest.php index f781eeba0..3d7a496b1 100644 --- a/tests/i18n/i18nTest.php +++ b/tests/i18n/i18nTest.php @@ -28,8 +28,8 @@ class i18nTest extends SapphireTest { public function setUp() { parent::setUp(); - $this->alternateBasePath = $this->getCurrentAbsolutePath() . "/_fakewebroot"; - $this->alternateBaseSavePath = TEMP_FOLDER . '/i18nTextCollectorTest_webroot'; + $this->alternateBasePath = $this->getCurrentAbsolutePath() . DIRECTORY_SEPARATOR . "_fakewebroot"; + $this->alternateBaseSavePath = TEMP_FOLDER . DIRECTORY_SEPARATOR . 'i18nTextCollectorTest_webroot'; FileSystem::makeFolder($this->alternateBaseSavePath); Director::setBaseFolder($this->alternateBasePath); @@ -182,13 +182,13 @@ class i18nTest extends SapphireTest { ), 'en_US'); $viewer = new SSViewer('i18nTestModule'); - $parsedHtml = $viewer->process(new ArrayData(array('TestProperty' => 'TestPropertyValue'))); + $parsedHtml = Convert::nl2os($viewer->process(new ArrayData(array('TestProperty' => 'TestPropertyValue')))); $this->assertContains( - "Layout Template\n", + Convert::nl2os("Layout Template\n"), $parsedHtml ); $this->assertContains( - "Layout Template no namespace\n", + Convert::nl2os("Layout Template no namespace\n"), $parsedHtml ); @@ -206,37 +206,37 @@ class i18nTest extends SapphireTest { ), 'de_DE'); $viewer = new SSViewer('i18nTestModule'); - $parsedHtml = $viewer->process(new ArrayData(array('TestProperty' => 'TestPropertyValue'))); + $parsedHtml = Convert::nl2os($viewer->process(new ArrayData(array('TestProperty' => 'TestPropertyValue')))); $this->assertContains( - "TRANS Main Template\n", + Convert::nl2os("TRANS Main Template\n"), $parsedHtml ); $this->assertContains( - "TRANS Layout Template\n", + Convert::nl2os("TRANS Layout Template\n"), $parsedHtml ); $this->assertContains( - "TRANS Layout Template no namespace", + Convert::nl2os("TRANS Layout Template no namespace\n"), $parsedHtml ); $this->assertContains( - "TRANS My replacement: TestPropertyValue", + Convert::nl2os("TRANS My replacement: TestPropertyValue\n"), $parsedHtml ); $this->assertContains( - "TRANS Include Entity with Namespace", + Convert::nl2os("TRANS Include Entity with Namespace\n"), $parsedHtml ); $this->assertContains( - "TRANS Include Entity without Namespace", + Convert::nl2os("TRANS Include Entity without Namespace\n"), $parsedHtml ); $this->assertContains( - "TRANS My include replacement: TestPropertyValue", + Convert::nl2os("TRANS My include replacement: TestPropertyValue\n"), $parsedHtml ); $this->assertContains( - "TRANS My include replacement no namespace: TestPropertyValue", + Convert::nl2os("TRANS My include replacement no namespace: TestPropertyValue\n"), $parsedHtml ); @@ -335,25 +335,27 @@ class i18nTest extends SapphireTest { ),'en_US'); $viewer = new SSViewer('i18nTestModule'); - $parsedHtml = $viewer->process(new ArrayData(array('TestProperty' => 'TestPropertyValue'))); + $parsedHtml = Convert::nl2os($viewer->process(new ArrayData(array('TestProperty' => 'TestPropertyValue')))); $this->assertContains( - "Hello Mark welcome. But it is late, bye\n", + Convert::nl2os("Hello Mark welcome. But it is late, bye\n"), $parsedHtml, "Testing fallback to the translation default (but using the injection array)" ); $this->assertContains( - "TRANS Hello Paul good you are here. But it is late, see you\n", + Convert::nl2os("TRANS Hello Paul good you are here. But it is late, see you\n"), $parsedHtml, "Testing entity, default string and injection array" ); $this->assertContains( - "TRANS Hello Cat meow. But it is late, meow\n", + Convert::nl2os("TRANS Hello Cat meow. But it is late, meow\n"), $parsedHtml, "Testing a translation with just entity and injection array" ); //test injected calls $this->assertContains( - "TRANS Hello ".Director::absoluteBaseURL()." ".i18n::get_locale().". But it is late, global calls\n", + Convert::nl2os( + "TRANS Hello ".Director::absoluteBaseURL()." ".i18n::get_locale().". But it is late, global calls\n" + ), $parsedHtml, "Testing a translation with just entity and injection array, but with global variables injected in" ); From 0e5eb54fb5ed26c51befe805317b4d965f593c19 Mon Sep 17 00:00:00 2001 From: Sean Harvey Date: Fri, 4 Oct 2013 14:24:56 +1300 Subject: [PATCH 05/16] Updating unit and integration testing documentation. Updating introduction summary, and fixing broken links. --- docs/en/index.md | 4 +-- docs/en/topics/testing/index.md | 29 ++++++++++++------- .../testing/testing-guide-troubleshooting.md | 4 +-- 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/docs/en/index.md b/docs/en/index.md index 55f262ac1..0ab92963b 100644 --- a/docs/en/index.md +++ b/docs/en/index.md @@ -48,7 +48,7 @@ Please read our [guide to contributing documentation](misc/contributing/document * [RSS Feeds](reference/rssfeed) * [Debugging](topics/debugging) * [Errorhandling](topics/error-handling) -* [Testing Guide](topics/testing/): Framework for automated testing like Unittests +* [Testing Guide](topics/testing/): Unit and integration testing * [Execution Pipeline](reference/execution-pipeline): Tracking a request from director to template-rendering * [Recipes/Howtos](howto/) @@ -59,4 +59,4 @@ Please read our [guide to contributing documentation](misc/contributing/document
Looking for the old DokuWiki installation? See [doc.silverstripe.org/old](http://doc.silverstripe.org/old). -
\ No newline at end of file + diff --git a/docs/en/topics/testing/index.md b/docs/en/topics/testing/index.md index 6cadac8a7..4aed3e7b8 100644 --- a/docs/en/topics/testing/index.md +++ b/docs/en/topics/testing/index.md @@ -1,25 +1,32 @@ # Unit and Integration Testing +For behaviour testing in SilverStripe, check out [SilverStripe Behat Documentation](https://github.com/silverstripe-labs/silverstripe-behat-extension/). + +## Introduction + The SilverStripe core contains various features designed to simplify the process of creating and managing automated tests. -If you are familiar with PHP coding but new to unit testing, you should read the [Introduction](/topics/testing) and -check out Mark's presentation [Getting to Grips with SilverStripe Testing](http://www.slideshare.net/maetl/getting-to-grips-with-silverstripe-testing). -This section's page [Why Unit Test?](why-should-i-test) will give you the reasons behind why you should be testing your -code. - -You should also read over [the PHPUnit manual](http://www.phpunit.de/manual/current/en/). It provides a lot of -fundamental concepts that we build on in this documentation. +SilverStripe uses [PHPUnit](http://www.phpunit.de) for unit tests, and the framework contains features to simplify the +process of creating and managing tests. If you're more familiar with unit testing, but want a refresher of some of the concepts and terminology, you can browse the [Testing Glossary](glossary). To get started now, follow the installation instructions below, and check -[Troubleshooting](troubleshooting) in case you run into any problems. +[Troubleshooting](testing-guide-troubleshooting) in case you run into any problems. + +If you are familiar with PHP coding but new to unit testing, you should read the [Introduction](/topics/testing) and +check out Mark's presentation [Getting to Grips with SilverStripe Testing](http://www.slideshare.net/maetl/getting-to-grips-with-silverstripe-testing). + +[Why Unit Test?](why-should-i-test) will give you reasons why you should be testing your code. + +You should also read over [the PHPUnit manual](http://www.phpunit.de/manual/current/en/). It provides a lot of +fundamental concepts that we build on in this documentation. ## Installation ### Via Composer Unit tests are not included in the normal SilverStripe downloads, you are expected to work with local git repositories -([installation instructions](/topics/installation/composer)). +([installation instructions](/installation/composer)). Once you've got the project up and running, check out the additional requirements to run unit tests: @@ -33,7 +40,7 @@ You can either use it through its full path (`vendor/bin/phpunit`), or symlink i ### Via PEAR -Alternatively, you can check out PHPUnit globally via the PEAR packanage manager +Alternatively, you can check out PHPUnit globally via the PEAR package manager ([instructions](https://github.com/sebastianbergmann/phpunit/)). pear config-set auto_discover 1 @@ -43,7 +50,7 @@ Alternatively, you can check out PHPUnit globally via the PEAR packanage manager ### phpunit.xml -The `phpunit` executable can be configured by commandline arguments or through an XML file. File-based configuration has +The `phpunit` executable can be configured by command line arguments or through an XML file. File-based configuration has the advantage of enforcing certain rules across test executions (e.g. excluding files from code coverage reports), and of course this information can be version controlled and shared with other team members. diff --git a/docs/en/topics/testing/testing-guide-troubleshooting.md b/docs/en/topics/testing/testing-guide-troubleshooting.md index 4c8ce11f1..0eec4bf8b 100644 --- a/docs/en/topics/testing/testing-guide-troubleshooting.md +++ b/docs/en/topics/testing/testing-guide-troubleshooting.md @@ -1,4 +1,4 @@ -# Troubleshooting +# Unit Test Troubleshooting Part of the [SilverStripe Testing Guide](testing-guide). @@ -58,4 +58,4 @@ class to see what's going on behind the scenes. This is a common problem due to aborted test runs, which don't clean up after themselves correctly (mostly because of a fatal PHP error in the tests). -The easiest way to get rid of them is a call to `dev/tests/cleanupdb`. \ No newline at end of file +The easiest way to get rid of them is a call to `dev/tests/cleanupdb`. From ba360497aa0a0e00ee1d8261841070a561839d2f Mon Sep 17 00:00:00 2001 From: Ingo Schommer Date: Sun, 6 Oct 2013 19:58:08 +0200 Subject: [PATCH 06/16] Updated translations --- lang/af.yml | 2 - lang/ar.yml | 331 +++++++++++++++++++++++++- lang/bg.yml | 2 - lang/cs.yml | 2 - lang/de.yml | 2 - lang/eo.yml | 1 - lang/es.yml | 4 +- lang/es_AR.yml | 1 - lang/es_MX.yml | 1 - lang/et_EE.yml | 2 - lang/fi.yml | 12 +- lang/fr.yml | 2 - lang/gl_ES.yml | 1 - lang/it.yml | 2 - lang/lt.yml | 1 - lang/lv.yml | 1 - lang/mi.yml | 14 +- lang/nb.yml | 2 - lang/nl.yml | 2 - lang/pl.yml | 78 ++++++- lang/ru.yml | 2 - lang/sk.yml | 2 - lang/sl.yml | 2 - lang/sv.yml | 2 - lang/uk.yml | 1 - lang/zh.yml | 613 +++++++++++++++++++++++++++++++++++++++++++++++++ 26 files changed, 1042 insertions(+), 43 deletions(-) create mode 100644 lang/zh.yml diff --git a/lang/af.yml b/lang/af.yml index 595c4ea61..f24aee760 100644 --- a/lang/af.yml +++ b/lang/af.yml @@ -231,8 +231,6 @@ af: FROMWEB: 'Van die web af' FindInFolder: 'Find in dossier' IMAGEALT: 'Alternatiewe teks (alt) ' - IMAGEALTTEXT: 'Alternatiewe teks (alt) - word gewys as prentjie nie beskikbaar is nie' - IMAGEALTTEXTDESC: 'Gewys vir skerm lesers of as die beeld nie vertoon kan word nie' IMAGEDIMENSIONS: Afmetings IMAGEHEIGHTPX: Hoogte IMAGETITLE: 'Titel teks (leidraad) - vir addisionele informasie oor die prentjie' diff --git a/lang/ar.yml b/lang/ar.yml index 09e227fbb..dcb04149e 100644 --- a/lang/ar.yml +++ b/lang/ar.yml @@ -1,16 +1,33 @@ ar: AssetAdmin: + ALLOWEDEXTS: 'الإمتدادات المسوح بها' NEWFOLDER: مجلد جديد + SHOWALLOWEDEXTS: 'عرض الامتدادات المسموح بها' AssetTableField: CREATED: 'أول المرفوعات' DIM: الأبعاد FILENAME: اسم الملف + FOLDER: المجلد LASTEDIT: 'آخر التعديلات' OWNER: المالك SIZE: 'الحجم' TITLE: العنوان TYPE: 'النوع' URL: الرابط + AssetUploadField: + ChooseFiles: 'اختر الملفات' + DRAGFILESHERE: 'اسحب الملفات هنا' + DROPAREA: 'منطقة الإسقاط' + EDITALL: 'تعديل الكل' + EDITANDORGANIZE: 'تعديل & تنظيم' + EDITINFO: 'تعديل الملفات' + FILES: الملفات + FROMCOMPUTER: 'اختر ملفات من جهاز الكمبيوتر الخاص بك' + FROMCOMPUTERINFO: 'حمل من جهاز الكمبيوتر الخاص بك' + TOTAL: الكلي + TOUPLOAD: 'قم باختيار ملفات لتحميلها' + UPLOADINPROGRESS: 'يرجى الانتظار ...جار التحميل' + UPLOADOR: أو BBCodeParser: ALIGNEMENT: المحاذاة ALIGNEMENTEXAMPLE: 'محاذاة إلى اليمين' @@ -36,16 +53,24 @@ ar: UNORDERED: 'قائمة غير مرتبة' UNORDEREDDESCRIPTION: 'قائمة غير مرتبة' UNORDEREDEXAMPLE1: 'العنصر 1 غير مرتب' + BackLink_Button_ss: + Back: عودة BasicAuth: ENTERINFO: 'فضلاً أدخل اسم المستخدم و كلمة المرور' ERRORNOTADMIN: 'هذا المستخدم لا يملك صلاحيات الإدارة' ERRORNOTREC: 'اسم المستخدم أو الرقم السري غير صحيح' Boolean: ANY: أي + CMSLoadingScreen_ss: + LOADING: جار التحميل... + REQUIREJS: 'يتطلب الـCMS أن يكون لديك جافا سكريبت مفعلة' CMSMain: + ACCESS: 'الوصول إلى ''{عنوان}'' القسم' ACCESSALLINTERFACES: 'الدخول إلى جميع واجهات إدارة المحتوى' ACCESSALLINTERFACESHELP: 'ينقض أكثر من توصيف الوصول المحدد' SAVE: حفظ + CMSProfileController: + MENUTITLE: 'ملفي الشخصي' ChangePasswordEmail_ss: CHANGEPASSWORDTEXT1: 'تم تغيير كلمة المرور لـ' CHANGEPASSWORDTEXT2: 'يمكنك الآن استخدام هذه البيانات للدخول إلى حسابك' @@ -54,15 +79,20 @@ ar: PASSWORD: الرقم السري ComplexTableField: CLOSEPOPUP: 'إغلاق النافذة' + SUCCESSADD2: 'تم إضافة {اسم}' SUCCESSEDIT: 'حفظ %s %s %s' ComplexTableField_ss: ADDITEM: 'أضف' + NOITEMSFOUND: 'لا يوجد عناصر' SORTASC: 'ترتيب تصاعدي' SORTDESC: 'ترتيب تنازلي' ComplexTableField_popup_ss: NEXT: التالي PREVIOUS: السابق ConfirmedPasswordField: + ATLEAST: 'يجب أن تكون كلمات المرور على الأقل {الحد الأدنى} حرفاً.' + BETWEEN: 'يجب أن تكون كلمات المرور من {الحد الأدنى} إلى {الحد الأقصى} حرفاً.' + MAXIMUM: 'يجب أن تكون كلمات المرور على الأكثر {الحد الأقصى} حرفاً.' SHOWONCLICKTITLE: 'تغيير كلمة المرور' CreditCardField: FIRST: الأول @@ -72,75 +102,196 @@ ar: DataObject: PLURALNAME: 'بيانات كائن' SINGULARNAME: 'بيانات كائن' + Date: + DAY: يوم + DAYS: أيام + HOUR: ساعة + HOURS: ساعات + MIN: دقيقة + MINS: دقائق + MONTH: شهر + MONTHS: شهور + SEC: ثانية + SECS: ثواني + TIMEDIFFAGO: '{الفرق} منذ' + TIMEDIFFIN: 'في {الفرق}' + YEAR: سنة + YEARS: سنوات + LessThanMinuteAgo: 'أقل من دقيقة' DateField: NOTSET: 'غير محدد' TODAY: اليوم + VALIDDATEFORMAT2: 'الرجاء إدخال صيغة تاريخ صحيحة ({صيغة})' + VALIDDATEMAXDATE: 'التسجيل الخاص بك قد يكون أقدم أو مطابق لأقصى تاريخ مسموح به ({تاريخ})' + VALIDDATEMINDATE: 'التسجيل الخاص بك قد يكون أحدث أو مطابق للحد الأدنى للتاريخ المسموح به ({تاريخ})' + DatetimeField: + NOTSET: 'لم يتم التعيين' + Director: + INVALID_REQUEST: 'طلب غير صحيح' DropdownField: CHOOSE: (اختر) + EmailField: + VALIDATION: 'يرجى إدخال عنوان بريد إلكتروني' Email_BounceRecord: PLURALNAME: 'سجلات البريد الإلكتروني Bounce' SINGULARNAME: 'سجل البريد الإلكتروني Bounce' Enum: ANY: أي File: + AviType: 'ملف مقطع فيديو بصيغة AVI' Content: المحتوى + CssType: 'ملف بصيغة CSS' + DmgType: 'صورة قرص آبل' + DocType: 'مستند بصيغة word' Filename: اسم الملف + GifType: 'صورة بصيغة GIF- جيدة للرسوم البيانية' + GzType: 'ملف مضغوط بصيغة GZIP' + HtlType: 'ملف بصيغة HTML' + HtmlType: 'ملف بصيغة HTML' + INVALIDEXTENSION: 'لا يسمح بهذا الإمتداد (صالحة: {الإمتدادات})' + INVALIDEXTENSIONSHORT: 'غير مسموح بهذا الإمتداد' + IcoType: 'صورة الأيقونة' + JpgType: 'صورة بصيغة JPEG و هي صيغة جيدة للصور الفوتوغرافية' + JsType: 'ملف جافا سكريبت' + Mp3Type: 'ملف صوتي بصيغة MP3' + MpgType: 'مقطع ملف فيديو بصيغة MPEG' NOFILESIZE: 'حجم الملف 0 بايت' NOVALIDUPLOAD: 'نوع الملف غير قابل للرفع' Name: الاسم PLURALNAME: الملفات + PdfType: 'ملف بصيغة أدوب أكروبات بي دي إف' + PngType: 'الصورة بصيغة PNG - و هي صيغة جيدة للأغراض العامة' SINGULARNAME: الملف + TOOLARGE: 'حجم الملف كبير جدا، الحد الأقصى {حجم} المسموح به' + TOOLARGESHORT: 'حجم الملف يتجاوز {الحجم}' + TiffType: 'تنسيق الصورة ذات الكلمات الدلالية' Title: العنوان + WavType: 'ملف صوتي بصيغة WAV' + XlsType: 'ملف جداول اكسل' + ZipType: 'ملف مضغوط بصيغة ZIP' FileIFrameField: + ATTACH: 'إرفاق {النوع}' + ATTACHONCESAVED: '{النوع} يمكن إرفاق الأنواع بمجرد أنك قد قمت بحفظ السجل للمرة الأولى.' + ATTACHONCESAVED2: '.يمكن إرفاق الملفات بمجرد انك قد قمت بحفظ السجل للمرة الأولى' + DELETE: 'حذف {النوع}' + DISALLOWEDFILETYPE: 'لا يسمح لهذا النوع من الملفات أن يتم تحميلها' FILE: ملف FROMCOMPUTER: 'من جهازك الشخصي' FROMFILESTORE: 'من مكتبة الملفات' NOSOURCE: 'الرجاء اختيارمصدر ملف المرفق' + REPLACE: 'استبدال {نوع}' + FileIFrameField_iframe_ss: + TITLE: 'إطار تحميل الصور' + Filesystem: + SYNCRESULTS: 'اكتملت المزامنة : {العدد المتكون} العناصر التي تم إنشاؤها، {العدد المحذوف} العناصر المحذوفة' + Folder: + PLURALNAME: مجلد + SINGULARNAME: مجلد ForgotPasswordEmail_ss: HELLO: أهلاً TEXT1: 'هنا' TEXT2: 'رابط إعادة تعيين كلمة المرور' TEXT3: لـ Form: + FIELDISREQUIRED: '{الاسم} مطلوب' + SubmitBtnLabel: اذهب + VALIDATIONCREDITNUMBER: 'يرجى التأكد من أنك قد قمت بإدخال {رقم} رقم بطاقة الائتمان بشكل صحيح' VALIDATIONNOTUNIQUE: 'القيمة المدخلة غير فريدة و قابلة للتكرار ' VALIDATIONPASSWORDSDONTMATCH: 'رقم المرور غير صحيح' VALIDATIONPASSWORDSNOTEMPTY: 'أرقام المرور لا يمكن أن تكون فارغة' + VALIDATIONSTRONGPASSWORD: 'كلمات المرور يجب أن تحتوي على رقم و حرف على الأقل' VALIDATOR: المحقق + VALIDCURRENCY: 'يرجى إدخال عملة صحيحة' + CSRF_FAILED_MESSAGE: 'هناك على ما يبدو مشكلة فنية. الرجاء الضغط على الزر مرة أخرى، و تحديث المتصفح الخاص بك، ثم حاول مرة أخرى.' FormField: NONE: لايوجد + Example: 'على سبيل المثال %s.' + GridAction: + DELETE_DESCRIPTION: حذف + Delete: حذف + UnlinkRelation: إلغاء الربط + GridField: + Add: 'إضافة {اسم}' + Filter: مرشح + FilterBy: 'ترشيح باستخدام' + Find: ابحث + LEVELUP: 'الصعود لمستوي أعلي' + LinkExisting: 'الرابط موجود' + NewRecord: 'جديد %s' + NoItemsFound: 'لا يوجد عناصر' + PRINTEDAT: 'تم الطباعة في' + PRINTEDBY: 'تم الطباعة بواسطة' + PlaceHolder: 'البحث {النوع}' + PlaceHolderWithLabels: 'البحث {نوع} بواسطة {اسم}' + RelationSearch: 'ابحث عن علاقة' + ResetFilter: إعادة تعيين + GridFieldAction_Delete: + DeletePermissionsFailure: 'لا يوجد أية تصريحات حذف' + EditPermissionsFailure: 'لا يوجد تصريح لإلغاء الربط بين السجلات' + GridFieldDetailForm: + CancelBtn: إلغاء + Create: إنشاء + Delete: حذف + DeletePermissionsFailure: 'لا يوجد تصريحات بالحذف' + Deleted: '%s %s تم حذفه' + Save: حفظ + Saved: 'المحفوظ {اسم} {رابط}' + GridFieldItemEditView_ss: + Go_back: 'العودة' Group: + AddRole: 'إضافة دور لهذه المجموعة' Code: 'شفرة المجموعة' DefaultGroupTitleAdministrators: الإدارة DefaultGroupTitleContentAuthors: 'مؤلفي المحتوى' Description: الوصف + GroupReminder: 'إذا اخترت مجموعة رئيسية، فإن هذه المجموعة سوف تتخذ جميع أدوارها' Locked: 'مغلق ؟' + NoRoles: 'لا يوجد أدوار' + PLURALNAME: مجموعات Parent: 'المجموعة الرئيسة' RolesAddEditLink: 'قوانين التعديل/الإضافة' + SINGULARNAME: مجموعة Sort: 'ترتيب' has_many_Permissions: الصلاحيات many_many_Members: الأعضاء GroupImportForm: Help1: '

استيراد واحد أو أكثر من المجموعات في CSVتهيئة (قيم مفصولة بفواصل) إظهار استخدام المتقدم

' + Help2: "

الاستخدام المتقدم

  • الأعمدة المسموح بها: %s
  • تتم مطابقة المجموعات الموجودة بقيمتها الفريدة من نوعها رمز و تحديثها مع أي قيم جديدة من الملف المستورد
  • يمكن إنشاء مجموعة التسلسلات الهرمية باستخدام الرمز الرئيسي عمود
  • .
  • يمكن تعيين رموز التصريح من قبل رمز التصريح .العمود. لا يتم مسح رموز إذن موجود
  • .
" + ResultCreated: 'تم إنشاء {عدد} مجموعات' ResultDeleted: 'حذف مجموعات %d' ResultUpdated: 'تحديث مجموعات %d ' + Hierarchy: + InfiniteLoopNotAllowed: 'العثور على حلقة لا نهائية ضمن "{نوع}" التسلسل الهرمي . الرجاء تغيير الأصل لحل هذه' HtmlEditorField: + ADDURL: 'أضف رابط الموقع URL' + ADJUSTDETAILSDIMENSIONS: 'التفاصيل & و الأبعاد' ANCHORVALUE: رابط + BUTTONINSERT: إدخال BUTTONINSERTLINK: 'أدخل رابط' BUTTONREMOVELINK: 'إزالة رابط' + BUTTONUpdate: تحديث CAPTIONTEXT: 'النص' CSSCLASS: 'المحاذاة / تنسيق' CSSCLASSCENTER: 'في المنتصف' CSSCLASSLEFT: 'إلى اليسار، مع التفاف النص' CSSCLASSLEFTALONE: 'إلى اليسار' CSSCLASSRIGHT: 'إلى اليمين ، مع التفاف النص' + DETAILS: تفاصيل EMAIL: 'بريد إلكتروني' FILE: ملف FOLDER: المجلد - IMAGEALTTEXT: 'النص البديل - يظهر في حالة عدم ظهور الصورة' + FROMCMS: 'من الـ CMS' + FROMCOMPUTER: 'من جهاز الكمبيوتر الخاص بك' + FROMWEB: 'من الإنترنت' + FindInFolder: 'ابحث في المجلد' + IMAGEALT: 'النص البديل (بديل)' IMAGEDIMENSIONS: الأبعاد IMAGEHEIGHTPX: الطول IMAGETITLE: 'العنوان - لإضافة معلومات إلى الصورة' + IMAGETITLETEXT: 'عنوان النص (أداة التلميح)' + IMAGETITLETEXTDESC: 'للمزيد من المعلومات حول الصورة' IMAGEWIDTHPX: العرض + INSERTMEDIA: 'قم بإدراج وسائط' LINK: 'رابط' LINKANCHOR: 'ربط على هذه الصفحة' LINKDESCR: 'وصف الرابط' @@ -152,38 +303,69 @@ ar: LINKTO: 'رابط إلى' PAGE: صفحة URL: رابط + URLNOTANOEMBEDRESOURCE: 'عنوان الموقع لا يمكن أن يتحول إلى مصدر وسائط. ''{URL}''' + UpdateMEDIA: 'تحديث الوسائط' + BUTTONADDURL: 'قم بإضافة رابط الموقع url' + Image: + PLURALNAME: الملفات + SINGULARNAME: الملف ImageField: IMAGE: الصورة + Image_Cached: + PLURALNAME: ملفات + SINGULARNAME: ملف Image_iframe_ss: TITLE: 'إطار تحميل الصور' LeftAndMain: + CANT_REORGANISE: 'ليس لديك تصريح لتغيير صفحات المستوى الأعلى. لم يتم حفظ التغيير.' + DELETED: تم الحذف. + DropdownBatchActionsDefault: أفعال HELP: مساعدة PAGETYPE: 'نوع الصفحة:' PERMAGAIN: 'تم خروجك من النظام بنجاح. للدخول مرة أخرى أدحل البريد الإلكتروني و الرقم السري بالأسفل' PERMALREADY: 'عذراً , لكن لا يمكنك الوصول لهذا القسم من النظام. يتوجب عليك الدخول بصلاحية أخرى' PERMDEFAULT: 'أدخل البريد الإلكتروني و الرقم السري للوصول إلى نظام إدارة المحتوى' PLEASESAVE: 'فضلاً احفظ الصفحة: هذه الصفحة لا يمكن تحديثها لأنها لم تحفظ بعد' + PreviewButton: استعراض + REORGANISATIONSUCCESSFUL: 'تم إعادة تنظيم خريطة الموقع بنجاح' + SAVEDUP: تم الحفظ. + VersionUnknown: غير معروف + ShowAsList: 'عرض كقائمة' + TooManyPages: 'صفحات كثيرة جداً' + ValidationError: 'خطأ في عملية التحقق' + LeftAndMain_Menu_ss: + Hello: مرحباً + LOGOUT: 'تسجيل الخروج' LoginAttempt: Email: 'عنوان البريد الإلكتروني' IP: 'عنوان IP' + PLURALNAME: 'محاولات تسجيل الدخول' + SINGULARNAME: 'محاولة تسجيل الدخول' Status: الحالة Member: + ADDGROUP: 'إضافة مجموعة' BUTTONCHANGEPASSWORD: 'تغيير رقم المرور' BUTTONLOGIN: 'دخول' BUTTONLOGINOTHER: 'الدخول بحساب آخر' BUTTONLOSTPASSWORD: 'فقدت كلمة المرور' + CANTEDIT: 'ليس لديك إذن للقيام بذلك' CONFIRMNEWPASSWORD: 'تأكيد رقم المرور الجديد' CONFIRMPASSWORD: 'تأكيد رقم المرور' + DATEFORMAT: 'صيغة التاريخ' DefaultAdminFirstname: 'المدير الافتراضي' + DefaultDateTime: الوضع الافتراضي EMAIL: البريد الإلكتروني EMPTYNEWPASSWORD: 'كلمة المرور الجديدة لا يمكن أن تكون فارغة ، فضلاً أعد المحاولة ' ENTEREMAIL: 'فضلاً أدخل عنوان البريد الإلكتروني للحصول على رابط استعادة كلمة المرور' ERRORLOCKEDOUT: 'حسابك تم تعطيله مؤقتاً بسبب تجاوزك العدد المسموح به من المحاولات. فضلاً أعد المحاولة بعد 20 دقيقة' + ERRORLOCKEDOUT2: 'حسابك قد تم تعطيله مؤقتاً بسبب الكثير من المحاولات الفاشلة في تسجيل الدخول. يرجى المحاولة مرة أخرى في {عدد} دقيقة.' ERRORNEWPASSWORD: 'قمت بإدخال كلمة مرور جديدة مختلفة ، حاول مرة أخرى' ERRORPASSWORDNOTMATCH: 'كلمة المرور الحالية غير متطابقة، فضلاً حاول مرة أخرى' ERRORWRONGCRED: 'هناك خطأ في البريد الإلكتروني أو كلمة المرور. فضلاً أعد المحاولة مرة أخرى' FIRSTNAME: 'الاسم الأول' INTERFACELANG: 'لغة الواجهة' + INVALIDNEWPASSWORD: 'لا يمكننا قبول كلمة المرور هذه : {كلمة المرور}' + LOGGEDINAS: 'أنت مسجل دخولك كـ {اسم}.' NEWPASSWORD: 'رقم المرور الجديد' PASSWORD: رقم المرور PLURALNAME: الأعضاء @@ -192,7 +374,10 @@ ar: SUBJECTPASSWORDCHANGED: 'تم تغيير كلمة المرور' SUBJECTPASSWORDRESET: 'رابط إعادة تكوين كلمة المرور' SURNAME: اسم العائلة + TIMEFORMAT: 'صيغة الوقت' VALIDATIONMEMBEREXISTS: 'يوجد عضو مسجل بهذا البريد الإلكتروني من قبل' + ValidationIdentifierFailed: 'لا يمكن الكتابة فوق رقم العضوية الحالي {معرف} مع معرف مطابق ({اسم} = {قيمة}))' + WELCOMEBACK: 'مرحبا بك مرة أخرى، {الاسم الأول}' YOUROLDPASSWORD: 'رقم المرور السابق' belongs_many_many_Groups: المجموعات db_LastVisited: 'تاريخ آخر زيارة' @@ -201,36 +386,106 @@ ar: db_NumVisit: 'عدد الزيارات' db_Password: الرقم السري db_PasswordExpiry: 'تاريخ انتهاء صلاحية كلمة المرور' + NoPassword: 'لا توجد كلمة مرور بشأن هذا العضو.' MemberAuthenticator: TITLE: 'البريد الإلكتروني & كلمة المرور' + MemberDatetimeOptionsetField: + AMORPM: 'صباحاً (قبل الظهر) أو مساءً (بعد الظهر)' + Custom: مخصص + DATEFORMATBAD: 'صيغة التاريخ غير صحيحة' + DAYNOLEADING: 'يوم من شهر دون أن يصبح بقيمة صفر' + DIGITSDECFRACTIONSECOND: 'واحد أو أكثر من الأرقام تمثل جزء عشري من الثانية' + FOURDIGITYEAR: 'سنة بأربع - أرقام' + FULLNAMEMONTH: 'الاسم الكامل للشهر (على سبيل المثال يونيو)' + HOURNOLEADING: 'ساعة دون أن تصبح صفراً' + MINUTENOLEADING: 'دقيقة دون أن تصبح صفراً' + MONTHNOLEADING: 'أرقام شهر دون أن تصبح بقيمة صفر' + Preview: معاينة + SHORTMONTH: 'اسم قصير من الشهر (على سبيل المثال يونيو)' + TOGGLEHELP: 'تبديل تعليمات التنسيق' + TWODIGITDAY: 'رقمين ليوم الشهر' + TWODIGITHOUR: 'خانتين لأرقام الساعة (00 إلى 23)' + TWODIGITMINUTE: 'خانتين من الأرقام للدقيقة (00 إلى 59)' + TWODIGITMONTH: 'خانتين لأرقام الشهر (01 = يناير، الخ)' + TWODIGITSECOND: 'خانتين لأرقام الثواني (00 إلى 59)' + TWODIGITYEAR: 'سنة من رقمين' + Toggle: 'إظهار تعليمات التنسيق' MemberImportForm: + Help1: '

استيراد مستخدمين بالداخل ملف بصيغة CSV (قيم مفصولة بفواصل).عرض الاستخدام المتقدم

' + Help2: "
\n

استخدام متقدم

\n
    \n
  • الأعمدة المسموح بها: %s
  • \n
  • المستخدمين الحاليين يتم مطابقتهم بواسطة خصائصهم الفريدة من نوعها رمز و يمكن تحديثهم بأى قيم جديدة من الملف المستورد
  • \n
  • يمكن تعيين مجموعات من مجموعات عمود. يتم تعريف المجموعات من قبل رمزخصائصها. و يمكن فصل مجموعات متعددة بواسطة فاصلة. لا يتم مسح عضوية المجموعة الحالية.
  • \n
" + ResultCreated: '{عدد} الأعضاء الذين تم إنشاؤهم' ResultDeleted: 'حذف %d أعضاء' ResultNone: 'بدون تغيير' + ResultUpdated: '{عدد} الأعضاء المحدثين' + MemberPassword: + PLURALNAME: 'كلمات مرور الأعضاء' + SINGULARNAME: 'كلمة مرور العضو' + MemberTableField: + APPLY_FILTER: 'تطبيق المرشح' ModelAdmin: DELETE: حذف + DELETEDRECORDS: '{عدد} السجلات المحذوفة' + EMPTYBEFOREIMPORT: 'استبدال البيانات' IMPORT: 'استيراد من CSV' + IMPORTEDRECORDS: '{عدد} السجلات التي تم استيرادها.' NOCSVFILE: 'فضلاً استعرض ملف CSV للاستيراد' NOIMPORT: 'لايوجد شيء للاستيراد' + RESET: إعادة تعيين + Title: 'نماذج البيانات' + UPDATEDRECORDS: '{عدد} السجلات التي تم تحديثها' + ModelAdmin_ImportSpec_ss: + IMPORTSPECFIELDS: 'أعمدة قاعدة البيانات' + IMPORTSPECLINK: 'عرض مواصفات لـ%s' + IMPORTSPECRELATIONS: علاقات + IMPORTSPECTITLE: 'مواصفات لـ%s' + ModelAdmin_Tools_ss: + FILTER: مرشح + IMPORT: استيراد + ModelSidebar_ss: + IMPORT_TAB_HEADER: استيراد + SEARCHLISTINGS: بحث MoneyField: FIELDLABELAMOUNT: الكمية FIELDLABELCURRENCY: العملة NullableField: IsNullLabel: 'باطل' + NumericField: + VALIDATION: '''{قيمة}'' ليس برقم و الأرقام فقط يمكن قبولها لهذا الحقل' + Pagination: + Page: صفحة + View: عرض Permission: AdminGroup: الإدارة CMS_ACCESS_CATEGORY: 'الوصل لنظام إدارة المحتوى' FULLADMINRIGHTS: 'جميع صلاحيات الإدارة' FULLADMINRIGHTS_HELP: 'يتضمن وينقض جميع الأذونات الأخرىالمساندة.' + PLURALNAME: تصريحات + SINGULARNAME: تصريحات PermissionCheckboxSetField: + AssignedTo: 'تم تعيينها إلى "{عنوان}"' + FromGroup: 'موروثة من المجموعة "{عنوان}"' + FromRole: 'موروثة من دور "{عنوان}"' FromRoleOnGroup: 'توريث من القاعدة "%s" على المجموعة "%s"' + PermissionRole: + OnlyAdminCanApply: 'المدير فقط هو الذي يمكنه تطبيق' + PLURALNAME: أدوار + SINGULARNAME: دور + Title: عنوان + PermissionRoleCode: + PLURALNAME: 'رموز دور الأذن' + SINGULARNAME: 'رمز دور الأذن' Permissions: PERMISSIONS_CATEGORY: 'تصاريح القاعدة والوصول' + UserPermissionsIntro: 'سوف يتم تعديل التصريحات لدي المجموعات المعينة لهذا المستخدم. راجع قسم المجموعات للإطلاع على تفاصيل التصريحات على مجموعات فردية.' PhoneNumberField: VALIDATION: 'فضلاً أدخل رقم هاتف صحيح' RelationComplexTableField_ss: ADD: إضافة + CSVEXPORT: 'تصدير إلى CSV' + NOTFOUND: 'لا يوجد عناصر' Security: ALREADYLOGGEDIN: 'لاتملك صلاحية الدخول لهذه الصفحة ، إذا كنت تملك حساب آخر فيمكنك تسجيل الدخول' + LOSTPASSWORDHEADER: 'كلمة مرور مفقودة' BUTTONSEND: 'أرسل لي رابط إعادة تهيئة كلمة المرور' CHANGEPASSWORDBELOW: 'يمكنك تغيير كلمة المرور بالأسفل' CHANGEPASSWORDHEADER: 'تغيير كلمة المرور' @@ -239,7 +494,10 @@ ar: LOGGEDOUT: 'تم تسجيل خروجك بنجاح ، إذا كنت ترغب بالدخول مرة أخرى فتفضل بتعبئة بياناتك بالأسفل' LOGIN: 'دخول' NOTEPAGESECURED: 'هذه الصفحة محمية بكلمة مرور ، أدخل بيانات دخولك بالأسفل ليتم السماح لك بالوصول للصفحة' + NOTERESETLINKINVALID: "

رابط إعادة تعيين كلمة المرور غير صحيح أو نفذت صلاحيته.

\n

\nيمكنك طلب رابط جديد <\"{a href=\"{link1\"> هنا \n أو تغيير كلمة المرور الخاصة بك بعد <\"{a href=\"{link2\"> تسجيل دخولك.\n

" NOTERESETPASSWORD: 'أدخل بريدك الإلكتروني و سيتم إرسال رابط إعادة تهيئة كلمة المرور ' + PASSWORDSENTHEADER: 'رابط استعادة كلمة المرور تم إرساله إلى ''{بريدك}''' + PASSWORDSENTTEXT: 'شكرا لك! تم إرسال رابط إعادة تعيين إلى ''{بريدك}''، بشرط وجود حساب قائم بالنسبة لعنوان هذا البريد الإلكتروني .' SecurityAdmin: ACCESS_HELP: 'السماح بعرض واضافة وتعديلات المستخدمين ، فضلا عن تعيين أذونات والقواعد لهم.' APPLY_ROLES: 'تطبيق القواعد على المجموعات' @@ -247,36 +505,107 @@ ar: EDITPERMISSIONS: 'تعديل الصلاحيات و رقم الآي بي لكل مجموعة' EDITPERMISSIONS_HELP: 'القدرة على تحرير أذونات وعناوين بروتوكول الإنترنت لمجموعة. يتطلب "الحصول على إذن ''قسم الأمن''' GROUPNAME: 'اسم المجموعة' + IMPORTGROUPS: 'استيراد مجوعات' + IMPORTUSERS: 'استيراد مستخدمين' MEMBERS: الأعضاء + MENUTITLE: الحماية MemberListCaution: 'تحذير : إزالة أعضاء من هذه القائمة إزالتها من جميع الفئات وقاعدة البيانات' NEWGROUP: 'مجموعة جديدة' PERMISSIONS: الصلاحيات ROLES: قواعد ROLESDESCRIPTION: 'هذا القسم يسمح لك بإضافة الأدوار إلى هذه المجموعة. قواعد المجموعات بمنطقية من الأذونات، والتي يمكن تعديلها في تبويب القواعد' TABROLES: قواعد + Users: مستخدمون SecurityAdmin_MemberImportForm: BtnImport: 'استيراد' FileFieldLabel: ' CSV ملف (الامتداد المسموح :*.csv )' + SilverStripeNavigator: + Edit: تعديل + Auto: تلقائي + ChangeViewMode: 'قم بتغيير نظام العرض' + Desktop: سطح المكتب + DualWindowView: 'نافذة مزدوجة' + EditView: 'وضع التعديل' + Mobile: الجوال + PreviewState: 'معاينة الحالة' + PreviewView: 'وضع الاستعراض' + Responsive: متجاوب + SplitView: 'وضع التقسيم' + Tablet: لوحة + ViewDeviceWidth: 'اختر عرض المعاينة' + Width: عرض SimpleImageField: NOUPLOAD: 'لا توجد صور مرفوعة' SiteTree: TABMAIN: الرئيسة + TableField: + ISREQUIRED: 'في %s ''%s'' مطلوب' TableField_ss: ADD: 'إضافة صف جديد' + ADDITEM: 'إضافة %s' TableListField: CSVEXPORT: 'تصدير إلى CSV' PRINT: طباعة + Print: طباعة SELECT: 'اختيار' TableListField_ss: + NOITEMSFOUND: 'لا يوجد عناصر' SORTASC: 'فرز في ترتيب تصاعدي' SORTDESC: 'فرز في ترتيب تنازلي' TableListField_PageControls_ss: + DISPLAYING: جار العرض + OF: من + TO: إلى VIEWFIRST: 'عرض الأول' VIEWLAST: 'عرض الأخير' VIEWNEXT: 'عرض التالي' VIEWPREVIOUS: 'عرض السابق' + TimeField: + VALIDATEFORMAT: 'الرجاء إدخال صيغة وقت صحيحة ({صيغة})' ToggleField: LESS: أقل MORE: أكثر + UploadField: + ATTACHFILE: 'إرفاق ملف' + ATTACHFILES: 'إرفاق ملفات' + AttachFile: 'إرفاق ملف (أو أكثر)' + DELETE: 'قم بالحذف من الملفات' + DELETEINFO: 'حذف هذا الملف بشكل دائم من مخزن الملفات' + DOEDIT: حفظ + DROPFILE: 'قم بإسقاط ملف' + DROPFILES: 'قم بإسقاط ملفات' + Dimensions: الأبعاد + EDIT: تعديل + EDITINFO: 'قم بتعديل هذا الملف' + FIELDNOTSET: 'لا يوجد معلومات عن الملف' + FROMCOMPUTER: 'من جهاز الكمبيوتر الخاص بك' + FROMCOMPUTERINFO: 'اختر من الملفات' + FROMFILES: 'من الملفات' + HOTLINKINFO: 'معلومات: سيتم نشر هذه الصورة. يرجى التأكد من أن يكون لديك التصاريح من منشئ الموقع الأصلي للقيام بذلك.' + MAXNUMBEROFFILES: 'الحد الأقصى من {عدد} الملفات قد تم تجاوزه' + MAXNUMBEROFFILESSHORT: 'يمكن تحميل {عدد} الملفات فقط' + MAXNUMBEROFFILESONE: 'يمكن فقط تحميل ملف واحد' + REMOVE: حذف + REMOVEERROR: 'حدث خطأ في عملية حذف الملف' + REMOVEINFO: 'قم بحذف هذا الملف من هنا و لكن لا تقم بحذفه من مخزن الملفات' + STARTALL: 'ابدأ الكل' + STARTALLINFO: 'إبدأ كل التحميلات' + Saved: تم الحفظ + CHOOSEANOTHERFILE: 'اختر ملف آخر' + CHOOSEANOTHERINFO: 'استبدل هذا الملف بآخر من المخزون' + OVERWRITEWARNING: 'يوجد ملف بنفس الاسم' + UPLOADSINTO: 'يحفظ في /{path}' Versioned: has_many_Versions: الإصدارات + CMSPageHistoryController_versions_ss: + PREVIEW: 'استعراض موقع الويب' + GridFieldEditButton_ss: + EDIT: تعديل + ContentController: + NOTLOGGEDIN: 'لم تقم بتسجيل الدخول' + GridFieldItemEditView: + Go_back: 'العودة' + PasswordValidator: + LOWCHARSTRENGTH: 'يرجى زيادة قوة كلمة المرور بإضافة البعض من الأحرف التالية: %s' + PREVPASSWORD: 'لقد استخدمت كلمة المرور هذه في الماضي، يرجى اختيار كلمة مرور جديدة' + TOOSHORT: 'إنّ كلمة السر قصيرة جدا، يجب أن تحتوي على %s أو أكثر من الحروف' diff --git a/lang/bg.yml b/lang/bg.yml index a01bd4d60..e776f0b2e 100644 --- a/lang/bg.yml +++ b/lang/bg.yml @@ -219,8 +219,6 @@ bg: FROMWEB: 'От интернет' FindInFolder: 'Прегледай папка' IMAGEALT: 'Алтернативен текст (alt)' - IMAGEALTTEXT: 'Алтернативен текст (alt) - показва се ако изображението не е заредено' - IMAGEALTTEXTDESC: 'Вижда се на екранните четци или ако картинката не може да бъде показана' IMAGEDIMENSIONS: Размери IMAGEHEIGHTPX: Височина IMAGETITLE: 'Описание (tooltip) - за допълнителна информация към изображението' diff --git a/lang/cs.yml b/lang/cs.yml index 24447101e..77664f3c0 100644 --- a/lang/cs.yml +++ b/lang/cs.yml @@ -287,8 +287,6 @@ cs: FROMWEB: 'Z webu' FindInFolder: 'Hledat ve složce' IMAGEALT: 'Alternativní text (alt)' - IMAGEALTTEXT: 'Alternativní text (alt) - bude ukázán, když obrázek nemúže být zobrazen' - IMAGEALTTEXTDESC: 'Zobrazeno na obrazovce, když obrázek nemůže být zobrazen' IMAGEDIMENSIONS: Rozměry IMAGEHEIGHTPX: Výška IMAGETITLE: 'Titul text (tooltip) - další informace o obrázku' diff --git a/lang/de.yml b/lang/de.yml index 4bdd20e65..18e4deca1 100644 --- a/lang/de.yml +++ b/lang/de.yml @@ -287,8 +287,6 @@ de: FROMWEB: 'Aus dem Web' FindInFolder: 'In Ordner suchen' IMAGEALT: 'Alternativtext (alt)' - IMAGEALTTEXT: 'Alternativer Text (alt) - angezeigt, wenn das Bild nicht dargestellt werden kann' - IMAGEALTTEXTDESC: 'Wird von Screenreadern vorgelesen oder angezeigt, falls das Bild nicht dargestellt werden kann' IMAGEDIMENSIONS: Dimensionen IMAGEHEIGHTPX: Höhe (px) IMAGETITLE: 'Titeltext (Tooltip) - für zusätzliche Informationen über das Bild' diff --git a/lang/eo.yml b/lang/eo.yml index de6e44e1f..2a32adda0 100644 --- a/lang/eo.yml +++ b/lang/eo.yml @@ -133,7 +133,6 @@ eo: EMAIL: 'Retpoŝta adreso' FILE: Dosiero FOLDER: Dosierujo - IMAGEALTTEXT: 'Alternativa teksto (alt) - vidigi ĝin se ne eblas vidigi bildon' IMAGEDIMENSIONS: Dimensioj IMAGEHEIGHTPX: Alto IMAGETITLE: 'Titola teksto (ŝpruchelpilo) - por plua informo pri la bildo' diff --git a/lang/es.yml b/lang/es.yml index 2e5cba48f..5da557c89 100644 --- a/lang/es.yml +++ b/lang/es.yml @@ -286,8 +286,6 @@ es: FROMWEB: 'Desde la web' FindInFolder: 'Buscar en carpeta' IMAGEALT: 'Texto alternativo (alt)' - IMAGEALTTEXT: 'Texto alternativo (alt) - es mostrado si la imagen no puede ser visualizada' - IMAGEALTTEXTDESC: 'Mostrar a los lectores de pantalla o si la imagen no se puede visualizar' IMAGEDIMENSIONS: Dimensiones IMAGEHEIGHTPX: Alto IMAGETITLE: 'Texto del título (tooltip) - para obtener más información acerca de la imagen' @@ -600,3 +598,5 @@ es: PREVIEW: 'Previsualización' GridFieldEditButton_ss: EDIT: Editar + GridFieldItemEditView: + Go_back: 'Volver' diff --git a/lang/es_AR.yml b/lang/es_AR.yml index 81f25e27a..ed1064e55 100644 --- a/lang/es_AR.yml +++ b/lang/es_AR.yml @@ -132,7 +132,6 @@ es_AR: EMAIL: 'Dirección email' FILE: Archivo FOLDER: Carpeta - IMAGEALTTEXT: 'Texto alternativo (alt) - mostrado si no se puede mostrar la imagen' IMAGEDIMENSIONS: Dimensiones IMAGEHEIGHTPX: Alto IMAGETITLE: 'Texto de título (tooltip) - información adicional acerca de la imagen' diff --git a/lang/es_MX.yml b/lang/es_MX.yml index 53bb1d615..804cea9f4 100644 --- a/lang/es_MX.yml +++ b/lang/es_MX.yml @@ -187,7 +187,6 @@ es_MX: FOLDER: Carpeta FROMCMS: 'Desde el CMS' FROMCOMPUTER: 'Desde tu computador' - IMAGEALTTEXT: 'El texto alternativo (alt) - si no se puede mostrar la imagen' IMAGEDIMENSIONS: Dimensiones IMAGEHEIGHTPX: Alto IMAGETITLE: 'Título del tooltip - para información adicional acerca de la imagen' diff --git a/lang/et_EE.yml b/lang/et_EE.yml index 8a9030a5b..2b6883df0 100644 --- a/lang/et_EE.yml +++ b/lang/et_EE.yml @@ -267,8 +267,6 @@ et_EE: FROMWEB: 'Veebist' FindInFolder: 'Otsi kaustast' IMAGEALT: 'Asetekst (alt)' - IMAGEALTTEXT: 'Asetekst (alt) – kuvatakse, kui kujutist ei ole võimalik kuvada' - IMAGEALTTEXTDESC: 'Kuvatakse ekraanilugeja puhul või kui kujutist ei saa kuvada' IMAGEDIMENSIONS: Mõõtmed IMAGEHEIGHTPX: Laius IMAGETITLE: 'Pealkirja tekst (kohtspikker) – lisateabeks kujutise kohta' diff --git a/lang/fi.yml b/lang/fi.yml index 39d1b0c63..b78c3dcdb 100644 --- a/lang/fi.yml +++ b/lang/fi.yml @@ -287,8 +287,6 @@ fi: FROMWEB: 'Webistä' FindInFolder: 'Etsi kansiosta' IMAGEALT: 'Vaihtoehtoinen teksti (alt)' - IMAGEALTTEXT: 'Vaihtoehtoinen teksti (alt) - näytetään jos kuvaa ei voida näyttää' - IMAGEALTTEXTDESC: 'Näytetään ruudunlukuohjelmille tai jos kuvia ei voi näyttää' IMAGEDIMENSIONS: Mitat IMAGEHEIGHTPX: Korkeus IMAGETITLE: 'Otsikko (tooltip) - kuvan lisätietoja varten' @@ -390,6 +388,7 @@ fi: db_NumVisit: 'Vierailujen määrä' db_Password: Salasana db_PasswordExpiry: 'Salasanan viimeinen päivämäärä' + NoPassword: 'Tällä käyttäjällä ei ole salasanaa' MemberAuthenticator: TITLE: 'Sähköposti & Salasana' MemberDatetimeOptionsetField: @@ -488,6 +487,7 @@ fi: NOTFOUND: 'Merkintöjä ei löytynyt' Security: ALREADYLOGGEDIN: 'Sinulla ei ole oikeuksia tälle sivulle. Jos sinulla on toinen tili, jolla on oikeudet tälle sivulle, voit kirjautua niillä sisään.' + LOSTPASSWORDHEADER: 'Salasana hävinnyt' BUTTONSEND: 'Lähetä minulle salasanan palautuslinkki' CHANGEPASSWORDBELOW: 'Voit vaihtaa salasanaasi alla.' CHANGEPASSWORDHEADER: 'Vaihda salasanasi' @@ -603,3 +603,11 @@ fi: PREVIEW: 'Nettisivun esikatselu' GridFieldEditButton_ss: EDIT: Muokkaa + ContentController: + NOTLOGGEDIN: 'Ei kirjautuneena' + GridFieldItemEditView: + Go_back: 'Siirry takaisin' + PasswordValidator: + LOWCHARSTRENGTH: 'Ole hyvä ja tee monimutkaisempi salasana lisäämällä joitakin seuraavista merkeistä: %s' + PREVPASSWORD: 'Olet jo käyttänyt tätä salasanaa aikaisemmin, ole hyvä ja valitse uusi' + TOOSHORT: 'Salasanan on oltava vähintään %s merkkiä' diff --git a/lang/fr.yml b/lang/fr.yml index af6d7bff4..4fee8eabc 100644 --- a/lang/fr.yml +++ b/lang/fr.yml @@ -287,8 +287,6 @@ fr: FROMWEB: 'Du web' FindInFolder: 'Trouver dans un dossier' IMAGEALT: 'Texte alternatif (alt)' - 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' IMAGEDIMENSIONS: Dimensions IMAGEHEIGHTPX: Hauteur IMAGETITLE: 'Texte du titre (tooltip) - informations à propos de l''image' diff --git a/lang/gl_ES.yml b/lang/gl_ES.yml index b2ea8773f..9fb8651d0 100644 --- a/lang/gl_ES.yml +++ b/lang/gl_ES.yml @@ -162,7 +162,6 @@ gl_ES: FOLDER: Cartafol FROMCMS: 'Dende o CMS' FROMCOMPUTER: 'Dende o teu Computador' - IMAGEALTTEXT: 'Texto alternativo (alt) - mostrase se a imaxe non pode visualizarse' IMAGEDIMENSIONS: Dimensións IMAGEHEIGHTPX: Alto IMAGETITLE: 'Texto do título (tooltip) - para información adicional sobre a imaxe' diff --git a/lang/it.yml b/lang/it.yml index 60c9ad94b..278aab443 100644 --- a/lang/it.yml +++ b/lang/it.yml @@ -280,8 +280,6 @@ it: FROMWEB: 'Dal web' FindInFolder: 'Trova nella Cartella' IMAGEALT: 'Testo alternativo (alt)' - IMAGEALTTEXT: 'Testo alternativo (alt) - mostrato se l''immagine non può essere mostrata.' - IMAGEALTTEXTDESC: 'Mostrato agli screen reader o se l''immagine non può essere visualizzata' IMAGEDIMENSIONS: Dimensioni IMAGEHEIGHTPX: Altezza IMAGETITLE: 'Titolo (tooltip) - per informazioni aggiuntive sull''immagine.' diff --git a/lang/lt.yml b/lang/lt.yml index 7025803e5..00a363709 100644 --- a/lang/lt.yml +++ b/lang/lt.yml @@ -112,7 +112,6 @@ lt: EMAIL: 'E. pašto adresas' FILE: Byla FOLDER: Direktorija - IMAGEALTTEXT: 'Alternatyvus tekstas (alt) - rodomas kai nepavyksta parodyti paveikslėlio' IMAGEDIMENSIONS: Matmenys IMAGEHEIGHTPX: Aukštis IMAGETITLE: 'Pavadinimo tekstas (pagalbinis tekstas) - papildomai informacijai apie paveikslėlį' diff --git a/lang/lv.yml b/lang/lv.yml index d4fed2791..9f926afeb 100644 --- a/lang/lv.yml +++ b/lang/lv.yml @@ -119,7 +119,6 @@ lv: EMAIL: 'E-pasta adrese' FILE: Fails FOLDER: Mape - IMAGEALTTEXT: 'Alternatīvais teksts (alt) - būs redzams, kad nebūs iespējams attēlot attēlu' IMAGEDIMENSIONS: Izmēri IMAGEHEIGHTPX: Augstums IMAGETITLE: 'Apraksts (paskaidre) - papildus informācijai par attēlu' diff --git a/lang/mi.yml b/lang/mi.yml index 59f5c18f5..8daaafe0d 100644 --- a/lang/mi.yml +++ b/lang/mi.yml @@ -231,8 +231,6 @@ mi: FROMWEB: 'Mai i te tukutuku' FindInFolder: 'Rapu i te Kōpaki' IMAGEALT: 'Tuhinga kē (alt)' - IMAGEALTTEXT: 'Tuhinga kē - ka whakaaturia ki te kore e taea te whakaatu atahanga' - IMAGEALTTEXTDESC: 'Ka whakaaturia ki ngā pūpānui mata, mēnā rānei kāore e taea te atahanga te whakaatu' IMAGEDIMENSIONS: Ngā Rahinga IMAGEHEIGHTPX: Teitei IMAGETITLE: 'Tuhinga taitara (ākiutauta) - mō ngā mōhiohio tāpiri mō te atahanga' @@ -253,8 +251,14 @@ mi: URL: PRO URLNOTANOEMBEDRESOURCE: 'Kāore e taea te huri i te PRO ''{url}'' hei rawa pāpāho.' UpdateMEDIA: 'Whakahōu Pāpāho' + Image: + PLURALNAME: Ngā Kōnae + SINGULARNAME: Kōnae ImageField: IMAGE: Atahanga + Image_Cached: + PLURALNAME: Ngā Kōnae + SINGULARNAME: Kōnae Image_iframe_ss: TITLE: 'Iframe Tukuatu Atahanga' LeftAndMain: @@ -381,6 +385,8 @@ mi: IsNullLabel: 'He Kore Tēnei' NumericField: VALIDATION: 'Ehara te ''{value}'' i te tau, ka taea ngā tau anake ki tēnei āpure' + Pagination: + Page: Whārangi Permission: AdminGroup: Kaiwhakahaere CMS_ACCESS_CATEGORY: 'Uru CMS' @@ -497,3 +503,7 @@ mi: Saved: Kua Tiakina Versioned: has_many_Versions: Ngā Putanga + GridFieldEditButton_ss: + EDIT: Whakatika + GridFieldItemEditView: + Go_back: 'Hoki' diff --git a/lang/nb.yml b/lang/nb.yml index 3f88a51c0..46b3c44fd 100644 --- a/lang/nb.yml +++ b/lang/nb.yml @@ -287,8 +287,6 @@ nb: FROMWEB: 'Fra internett' FindInFolder: 'Finn i mappe' IMAGEALT: 'Alternativ tekst (alt)' - IMAGEALTTEXT: 'Alternativ tekst (alt) - vist dersom bildet ikke kan vises' - IMAGEALTTEXTDESC: 'Blir vist til skjermlesere eller hvis bildet ikke kan vises' IMAGEDIMENSIONS: Dimensjoner IMAGEHEIGHTPX: Høyde IMAGETITLE: 'Titteltekst (tooltip) - for tilleggsinformasjon om bildet' diff --git a/lang/nl.yml b/lang/nl.yml index bc4f2f1a9..e3f060fdf 100644 --- a/lang/nl.yml +++ b/lang/nl.yml @@ -287,8 +287,6 @@ nl: FROMWEB: 'Vanaf een website' FindInFolder: 'Zoek in map' IMAGEALT: 'Alternatieve tekst (alt tekst) - wordt getoond als de afbeelding niet kan worden geladen' - IMAGEALTTEXT: 'Alternatieve tekst (alt tekst) - wordt getoond als de afbeelding niet kan worden geladen' - IMAGEALTTEXTDESC: 'Getoond voor schermlezers of als afbeelding niet kan worden weergegeven' IMAGEDIMENSIONS: Dimensies IMAGEHEIGHTPX: Hoogte IMAGETITLE: 'Titel tekst (tooltip) - Toon extra informatie over de afbeelding' diff --git a/lang/pl.yml b/lang/pl.yml index 836308b96..59e6e1dbf 100644 --- a/lang/pl.yml +++ b/lang/pl.yml @@ -1,10 +1,13 @@ pl: AssetAdmin: + ALLOWEDEXTS: 'Dostępne rozszerzenia' NEWFOLDER: NowyFolder + SHOWALLOWEDEXTS: 'Pokaż dostępne rozszerzenia' AssetTableField: CREATED: 'Po raz pierwszy wgrany' DIM: Rozmiar FILENAME: Nazwa pliku + FOLDER: Folder LASTEDIT: 'Ostatnio zmieniony' OWNER: Właściciel SIZE: 'Rozmiar pliku' @@ -66,9 +69,12 @@ pl: ACCESSALLINTERFACES: 'Dostęp do wszystkich sekcji CMSa' ACCESSALLINTERFACESHELP: 'Nadpisuje bardziej specyficzne ustawienia dostępu.' SAVE: Zapisz + CMSProfileController: + MENUTITLE: 'Mój profil' ChangePasswordEmail_ss: CHANGEPASSWORDTEXT1: 'Zmieniłeś hasło na' CHANGEPASSWORDTEXT2: 'Teraz możesz używać następujących danych do logowania się:' + EMAIL: Email HELLO: Cześć PASSWORD: Hasło ComplexTableField: @@ -93,12 +99,27 @@ pl: FOURTH: czwarty SECOND: drugi THIRD: trzeci + CurrencyField: + CURRENCYSYMBOL: $ DataObject: PLURALNAME: 'Obiekty danych' SINGULARNAME: 'Obiekt danych' Date: + DAY: dzień + DAYS: dni + HOUR: godzina + HOURS: godziny + MIN: minuta + MINS: minuty + MONTH: miesiąc + MONTHS: miesięcy + SEC: sekunda + SECS: sekund TIMEDIFFAGO: '{difference} temu' TIMEDIFFIN: 'w {difference}' + YEAR: ro + YEARS: lat + LessThanMinuteAgo: 'mniej niż minuta' DateField: NOTSET: 'nie ustawiono' TODAY: dzisiaj @@ -118,12 +139,14 @@ pl: Enum: ANY: Jakikolwiek File: + AviType: 'AVI plik wideo' Content: Zawartość CssType: 'Plik CSS' DmgType: 'Obraz dysku Apple' DocType: 'Dokument Worda' Filename: Nazwa pliku GifType: 'Obrazek GIF, dobry do diagramów' + GzType: 'GZIP skompresowany plik' HtlType: 'Plik HTML' HtmlType: 'Plik HTML' INVALIDEXTENSION: 'Rozszerzenie niedozwolone (dozwolone: {extensions})' @@ -132,6 +155,7 @@ pl: JpgType: 'Obrazek JPEG, dobry do zdjęć' JsType: 'Plik JavaScript' Mp3Type: 'Plik MP3' + MpgType: 'MPEG plik wideo' NOFILESIZE: 'Rozmiar pliku to zero bajtów.' NOVALIDUPLOAD: 'Plik nie został poprawnie przesłany' Name: Nazwa @@ -143,6 +167,8 @@ pl: TOOLARGESHORT: 'Rozmiar pliku przekracza {size}' TiffType: 'Plik TIFF' Title: Tytuł + WavType: 'WAV plik audio' + XlsType: 'Arkusz kalkulacyjny Excel' ZipType: 'Plik ZIP, skompresowany' FileIFrameField: ATTACH: 'Dołącz {type}' @@ -161,12 +187,14 @@ pl: SYNCRESULTS: 'Synchronizacja zakończona: stworzono {createdcount} i usunięto {deletedcount} pozycji' Folder: PLURALNAME: Foldery + SINGULARNAME: Folder ForgotPasswordEmail_ss: HELLO: Cześć TEXT1: 'Oto twój' TEXT2: 'link zmiany hasła' TEXT3: dla Form: + FIELDISREQUIRED: '{name} jest wymagane' SubmitBtnLabel: Przejdź VALIDATIONCREDITNUMBER: 'Proszę upewnij się, że wprowadzony numer karty kredytowej {number} jest prawidłowy' VALIDATIONNOTUNIQUE: 'Wprowadzona wartość nie jest unikalna' @@ -175,8 +203,10 @@ pl: VALIDATIONSTRONGPASSWORD: 'Hasła muszą mieć przynajmniej jedną cyfrę oraz jeden znak alfanumeryczny.' VALIDATOR: Walidator VALIDCURRENCY: 'Proszę podaj prawidłową walutę' + CSRF_FAILED_MESSAGE: 'Wygląda na to, że wystąpił błąd techniczny. Kliknij przycisk Wstecz, odśwież przeglądarkę i spróbuj ponownie.' FormField: NONE: brak + Example: 'np: % s' GridAction: DELETE_DESCRIPTION: Usuń Delete: Usuń @@ -198,6 +228,7 @@ pl: ResetFilter: Resetuj GridFieldAction_Delete: DeletePermissionsFailure: 'Brak uprawnień do usuwania' + EditPermissionsFailure: 'Nie masz uprawnień, aby odłączyć rekord' GridFieldDetailForm: CancelBtn: Anuluj Create: Stwórz @@ -215,6 +246,7 @@ pl: Description: Opis GroupReminder: 'Jeśli wybierzesz nadrzędną grupę, obecna grupa otrzyma wszystkie jej role' Locked: 'Zablokowana?' + NoRoles: 'Nie znaleziono ról' PLURALNAME: Grupy Parent: 'Grupa nadrzędna' RolesAddEditLink: 'Zarządzaj rolami' @@ -246,13 +278,12 @@ pl: DETAILS: Szczegóły EMAIL: 'Adres e-mail' FILE: Plik + FOLDER: Folder FROMCMS: 'Z systemu CMS' FROMCOMPUTER: 'Z komputera' FROMWEB: 'Z WWW' FindInFolder: 'Znajdź w Folderze' IMAGEALT: 'Tekst alternatywny (alt)' - IMAGEALTTEXT: 'Tekst alternatywny (alt) - pokazywany gdy obrazek nie może być wyświetlony' - IMAGEALTTEXTDESC: 'Używane przez czytniki dla niewidomych oraz gdy nie można pobrać obrazu' IMAGEDIMENSIONS: Rozmiar IMAGEHEIGHTPX: Wysokość (px) IMAGETITLE: 'Tytuł (tooltip) - dodatkowe informacje o obrazku' @@ -270,8 +301,10 @@ pl: LINKOPENNEWWIN: 'Otworzyć link w nowym oknie?' LINKTO: 'Linkuj do' PAGE: Strona + URL: Adres URL URLNOTANOEMBEDRESOURCE: 'Adres URL ''{url}'' nie mógł zostać przekształcony w zasób medialny' UpdateMEDIA: 'Zaktualizuj Media' + BUTTONADDURL: 'Dodaj adres url' Image: PLURALNAME: Pliki SINGULARNAME: Plik @@ -295,6 +328,10 @@ pl: PreviewButton: Podgląd REORGANISATIONSUCCESSFUL: 'Pomyślnie zreorganizowano drzewo serwisu.' SAVEDUP: Zapisano. + VersionUnknown: Nieznany + ShowAsList: 'pokaż jako listę' + TooManyPages: 'Zbyt wiele stron' + ValidationError: 'Błąd walidacji' LeftAndMain_Menu_ss: Hello: Witaj LOGOUT: 'Wyloguj się' @@ -303,12 +340,14 @@ pl: IP: 'Adres IP' PLURALNAME: 'Próby logowania' SINGULARNAME: 'Próba logowania' + Status: Status Member: ADDGROUP: 'Dodaj grupę' BUTTONCHANGEPASSWORD: 'Zmień hasło' BUTTONLOGIN: 'Zaloguj' BUTTONLOGINOTHER: 'Zaloguj jako ktoś inny' BUTTONLOSTPASSWORD: 'Zgubiłem hasło' + CANTEDIT: 'Nie masz uprawnień do tego' CONFIRMNEWPASSWORD: 'Potwierdź nowe hasło' CONFIRMPASSWORD: 'Potwierdź hasło' DATEFORMAT: 'Format daty' @@ -317,7 +356,8 @@ pl: EMAIL: E-mail EMPTYNEWPASSWORD: 'Nowe hasło nie może być puste, spróbuj ponownie.' ENTEREMAIL: 'Wpisz adres e-mail aby otrzymać link do zmiany hasła.' - ERRORLOCKEDOUT: 'Twoje konto zostało tymczasowo zablokowane z powodu zbyt wielu błędnych prób logowania. Spróbuj ponownie w ciągu 20 minut.' + ERRORLOCKEDOUT: 'Twoje konto zostało tymczasowo zablokowane z powodu zbyt wielu błędnych prób logowania. Spróbuj ponownie za 20 minut.' + ERRORLOCKEDOUT2: 'Twoje konto zostało tymczasowo zablokowane z powodu zbyt wielu błędnych prób logowania. Spróbuj ponownie za {count} minut.' ERRORNEWPASSWORD: 'Wprowadziłeś niepoprawnie nowe hasło, spróbuj ponownie' ERRORPASSWORDNOTMATCH: 'Twoje hasło nie zgadza się, spróbuj ponownie' ERRORWRONGCRED: 'E-mail lub hasło są nieprawidłowe. Spróbuj ponownie.' @@ -367,6 +407,7 @@ pl: TWODIGITMONTH: 'Dwucyfrowy miesiąc (01=Styczeń, itd.)' TWODIGITSECOND: 'Dwucyfrowa sekunda (od 00 do 59)' TWODIGITYEAR: 'Dwucyfrowy rok' + Toggle: 'Pokaż pomoc formatowania' MemberImportForm: Help1: '

Zaimportuj użytkowników w formacie CSV (tekst rozdzielany przecinkami). Zaawansowane

' ResultCreated: 'Stworzono członków: {count}' @@ -381,6 +422,7 @@ pl: ModelAdmin: DELETE: Usuń DELETEDRECORDS: 'Usunięto rekordów: {count}' + EMPTYBEFOREIMPORT: 'Zastąp dane' IMPORT: 'Import z CSV' IMPORTEDRECORDS: 'Zaimportowano rekordów: {count}' NOCSVFILE: 'Wybierz plik CSV do zaimportowania' @@ -395,7 +437,9 @@ pl: IMPORTSPECTITLE: 'Specyfikacja %s' ModelAdmin_Tools_ss: FILTER: Filtr + IMPORT: Import ModelSidebar_ss: + IMPORT_TAB_HEADER: Import SEARCHLISTINGS: Znajdź MoneyField: FIELDLABELAMOUNT: Ilość @@ -408,6 +452,7 @@ pl: Page: Strona View: Widok Permission: + AdminGroup: Administrator CMS_ACCESS_CATEGORY: 'Dostęp do CMSa' FULLADMINRIGHTS: 'Pełne prawa administracyjne' FULLADMINRIGHTS_HELP: 'Zatwierdza i nadpisuje wszystkie istniejące uprawnienia' @@ -436,6 +481,7 @@ pl: NOTFOUND: 'Nie znaleziono żadnych elementów' Security: ALREADYLOGGEDIN: 'Nie masz dostępu do tej strony. Jeśli posiadasz inne konto, które umożliwi Ci dostęp do tej strony, możesz się zalogować poniżej' + LOSTPASSWORDHEADER: 'Nie pamiętam hasła' BUTTONSEND: 'Wyślij mi link do zresetowania hasła' CHANGEPASSWORDBELOW: 'Możesz zmienić swoje hasło poniżej' CHANGEPASSWORDHEADER: 'Zmień swoje hasło' @@ -471,6 +517,15 @@ pl: FileFieldLabel: 'Plik CSV (Dozwolone rozszerzenia: *.csv)' SilverStripeNavigator: Edit: Edycja + Auto: Auto + ChangeViewMode: 'Zmień tryb podglądu' + Desktop: Pulpit + DualWindowView: 'Dzielone okno' + EditView: 'Tryb edycji' + Mobile: Mobile + PreviewView: 'Tryb podglądu' + ViewDeviceWidth: 'Wybierz szerokość podglądu' + Width: szerokość SimpleImageField: NOUPLOAD: 'Nie wgrano zdjęć' SiteTree: @@ -521,11 +576,28 @@ pl: HOTLINKINFO: 'Informacja: Ten obrazek pochodzi z zewnętrznego serwisu. Upewnij się, że jego twórca pozwala korzystać z niego.' MAXNUMBEROFFILES: 'Osiągnięto maksymalną liczbę {count} plików.' MAXNUMBEROFFILESSHORT: 'Można wgrać tylko {count} plik(ów/i)' + MAXNUMBEROFFILESONE: 'Można wgrać tylko jeden plik' REMOVE: Usuń REMOVEERROR: 'Błąd podczas usuwania pliku' REMOVEINFO: 'Usuń pliki z tego miejsca, ale nie usuwaj ich z magazynu' STARTALL: 'Rozpocznij wszystko' STARTALLINFO: 'Rozpocznij ładowanie wszystkich' Saved: Zapisano + CHOOSEANOTHERFILE: 'Wybierz inny plik' + CHOOSEANOTHERINFO: 'Zamień ten plik na inny z magazynu' + OVERWRITEWARNING: 'Plik z taką nazwą już istnieje' + UPLOADSINTO: 'zapisano w /{path}' Versioned: has_many_Versions: Wersje + CMSPageHistoryController_versions_ss: + PREVIEW: 'Podgląd strony' + GridFieldEditButton_ss: + EDIT: Edytuj + ContentController: + NOTLOGGEDIN: 'Nie zalogowany' + GridFieldItemEditView: + Go_back: 'Wstecz' + PasswordValidator: + LOWCHARSTRENGTH: 'Proszę zwiększyć siłę hasła, dodając niektóre z następujących znaków: % s' + PREVPASSWORD: 'Użyłeś już tego hasła wcześniej, proszę wybrać nowe' + TOOSHORT: 'Hasło jest za krótkie, proszę podać %s znaków lub więcej' diff --git a/lang/ru.yml b/lang/ru.yml index f0019a13d..2a67c067c 100644 --- a/lang/ru.yml +++ b/lang/ru.yml @@ -280,8 +280,6 @@ ru: FROMWEB: 'Из интернета' FindInFolder: 'Найти в папке' IMAGEALT: 'Альтернативный текст (alt)' - IMAGEALTTEXT: 'Альтернативный текст (alt) - показывается, если изображение недоступно' - IMAGEALTTEXTDESC: 'Передается программе чтения экрана или отображается, если изображение недоступно' IMAGEDIMENSIONS: Размеры IMAGEHEIGHTPX: Высота IMAGETITLE: 'Текст (всплывающая подсказка) - для дополнительной информации об изображении' diff --git a/lang/sk.yml b/lang/sk.yml index d7abb435b..eba562277 100644 --- a/lang/sk.yml +++ b/lang/sk.yml @@ -287,8 +287,6 @@ sk: FROMWEB: 'Z webu' FindInFolder: 'Vyhľadať v priečinku' IMAGEALT: 'Atlernatívny text (alt)' - IMAGEALTTEXT: 'Atlernatívny text (alt) - vypísaný pokiaľ nemože byť zobrazený obrázok' - IMAGEALTTEXTDESC: 'Zobrazí sa na obrazovke, keď obrázok nemôže byť zobrazený' IMAGEDIMENSIONS: Rozmery IMAGEHEIGHTPX: Výška IMAGETITLE: 'Text titulky (tooltip) - pre doplňujúce informácie o obrázku' diff --git a/lang/sl.yml b/lang/sl.yml index 1c2fc57d6..2d5f8f527 100644 --- a/lang/sl.yml +++ b/lang/sl.yml @@ -232,8 +232,6 @@ sl: FROMWEB: 'S spleta' FindInFolder: 'Poišči v mapi' IMAGEALT: 'Nadomestno besedilo (alt)' - IMAGEALTTEXT: 'Nadomestno besedilo (alt) bo izpisano, kadar slike ne bo možno prikazati' - IMAGEALTTEXTDESC: 'Prikaz na bralnikih ali če se slika ne more prikazati' IMAGEDIMENSIONS: Velikosti IMAGEHEIGHTPX: Višina IMAGETITLE: 'Naslov (tooltip) bo izpisan kot dopolnitev k vsebini slike' diff --git a/lang/sv.yml b/lang/sv.yml index e0d6016b1..cbebbc641 100644 --- a/lang/sv.yml +++ b/lang/sv.yml @@ -253,8 +253,6 @@ sv: FROMWEB: 'Från webben' FindInFolder: 'Hitta i mapp' IMAGEALT: 'Alternativ text (alt)' - IMAGEALTTEXT: 'Alternativ text (alt) - visas om bilden inte kan visas' - IMAGEALTTEXTDESC: 'Visas för skärmläsare eller om bilden inte kan visas' IMAGEDIMENSIONS: Dimensioner IMAGEHEIGHTPX: Höjd IMAGETITLE: 'Titel text (tooltip) - för ytterligare information om bilden' diff --git a/lang/uk.yml b/lang/uk.yml index 92007673f..352487ac4 100644 --- a/lang/uk.yml +++ b/lang/uk.yml @@ -81,7 +81,6 @@ uk: EMAIL: 'Адреса е-пошти' FILE: Файл FOLDER: Тека - IMAGEALTTEXT: 'Альтернативний текст (alt) - відображається якщо зображення не відображається' IMAGEDIMENSIONS: Розміри IMAGEHEIGHTPX: Висота IMAGETITLE: 'Текст заголовку (tooltip) - для додаткової інформації про зображення' diff --git a/lang/zh.yml b/lang/zh.yml new file mode 100644 index 000000000..9064823b2 --- /dev/null +++ b/lang/zh.yml @@ -0,0 +1,613 @@ +zh: + AssetAdmin: + ALLOWEDEXTS: '允许的扩展名' + NEWFOLDER: 新建文件夹 + SHOWALLOWEDEXTS: '显示允许的扩展名' + AssetTableField: + CREATED: '首先上传的' + DIM: 尺寸 + FILENAME: 文件名 + FOLDER: 文件夹 + LASTEDIT: '最近更改的' + OWNER: 所有人 + SIZE: '文件尺寸' + TITLE: 标题 + TYPE: '文件类型' + URL: 网址 + AssetUploadField: + ChooseFiles: '选择文件' + DRAGFILESHERE: '将文件拖放至此' + DROPAREA: '放置区域' + EDITALL: '编辑全部' + EDITANDORGANIZE: '编辑并组织' + EDITINFO: '编辑文件' + FILES: 文件 + FROMCOMPUTER: '从您的电脑选择文件' + FROMCOMPUTERINFO: '从您的电脑上传' + TOTAL: 合计 + TOUPLOAD: '选择要上传的文件……' + UPLOADINPROGRESS: '请稍候……上传正在进行中' + UPLOADOR: 或 + BBCodeParser: + ALIGNEMENT: 对齐 + ALIGNEMENTEXAMPLE: '向右对齐' + BOLD: '粗体文字' + BOLDEXAMPLE: 粗体 + CODE: '代码块' + CODEDESCRIPTION: '未格式化的代码块' + CODEEXAMPLE: '代码块' + COLORED: '彩色文字' + COLOREDEXAMPLE: '蓝色文字' + EMAILLINK: '电子邮件链接' + EMAILLINKDESCRIPTION: '创建链接至一个电子邮件地址' + IMAGE: 图片 + IMAGEDESCRIPTION: '在您的帖子中显示图片' + ITALIC: '斜体文字' + ITALICEXAMPLE: 斜体字 + LINK: '网站链接' + LINKDESCRIPTION: '链接至另一个网站或网址' + STRUCK: '剔除的文字' + STRUCKEXAMPLE: 剔除 + UNDERLINE: '带下划线的文字' + UNDERLINEEXAMPLE: 带下划线的 + UNORDERED: '未排序列表' + UNORDEREDDESCRIPTION: '未排序列表' + UNORDEREDEXAMPLE1: '未排序项目 1' + BackLink_Button_ss: + Back: 返回 + BasicAuth: + ENTERINFO: '请输入一个用户名和密码。' + ERRORNOTADMIN: '那个用户不是一名管理员。' + ERRORNOTREC: '那个用户名 / 密码无法被辨认' + Boolean: + ANY: 任何 + CMSLoadingScreen_ss: + LOADING: 正在载入…… + REQUIREJS: 'CMS 要求您启用 JavaScript。' + CMSMain: + ACCESS: '访问 ''{title}'' 部分' + ACCESSALLINTERFACES: '对所有 CMS 部分的访问' + ACCESSALLINTERFACESHELP: '支配更多的特殊访问设置' + SAVE: 保存 + CMSProfileController: + MENUTITLE: '我的个人资料' + ChangePasswordEmail_ss: + CHANGEPASSWORDTEXT1: '您的密码已更改为:' + CHANGEPASSWORDTEXT2: '现在,您可以使用下列证书来登录了:' + EMAIL: 电子邮件 + HELLO: 您好 + PASSWORD: 密码 + ComplexTableField: + CLOSEPOPUP: '关闭弹出窗口' + SUCCESSADD2: '已添加的 {name}' + SUCCESSEDIT: '已保存 %s %s %s' + ComplexTableField_ss: + ADDITEM: '添加 %s' + NOITEMSFOUND: '没有找到任何项目' + SORTASC: '升序排列' + SORTDESC: '降序排列' + ComplexTableField_popup_ss: + NEXT: 下一页 + PREVIOUS: 前一页 + ConfirmedPasswordField: + ATLEAST: '密码长度必须至少 {min} 个字符。' + BETWEEN: '密码长度必须含 {min} 到 {max} 个字符。' + MAXIMUM: '密码长度必须至多 {max} 个字符。' + SHOWONCLICKTITLE: '更改密码' + CreditCardField: + FIRST: 第一个 + FOURTH: 第四个 + SECOND: 第二个 + THIRD: 第三个 + CurrencyField: + CURRENCYSYMBOL: 货币字符 + DataObject: + PLURALNAME: '数据对象' + SINGULARNAME: '数据对象' + Date: + DAY: 天 + DAYS: 天 + HOUR: 小时 + HOURS: 小时 + MIN: 分钟 + MINS: 分钟 + MONTH: 月份 + MONTHS: 月份 + SEC: 秒 + SECS: 秒 + TIMEDIFFAGO: '{difference} 以前' + TIMEDIFFIN: '在 {difference} 中' + YEAR: 年 + YEARS: 年 + LessThanMinuteAgo: '少于一分钟' + DateField: + NOTSET: '未设置' + TODAY: 今天 + VALIDDATEFORMAT2: '请输入一个有效的日期格式 ({format})' + VALIDDATEMAXDATE: '您的日期必须更早或者符合最大允许日期 ({date})' + VALIDDATEMINDATE: '您的日期必须更迟或者符合最小允许日期 ({date})' + DatetimeField: + NOTSET: '未设置' + Director: + INVALID_REQUEST: '无效请求' + DropdownField: + CHOOSE: (选择) + EmailField: + VALIDATION: '请输入一个电子邮件地址' + Email_BounceRecord: + PLURALNAME: '电子邮件退还记录' + SINGULARNAME: '电子邮件退还记录' + Enum: + ANY: 任何 + File: + AviType: 'AVI 视频文件' + Content: 内容 + CssType: 'CSS 文件' + DmgType: '应用磁盘图片' + DocType: 'Word 文档' + Filename: 文件名 + GifType: 'GIF 图片 - 适合图表' + GzType: 'GZIP 压缩文件' + HtlType: 'HTML 文件' + HtmlType: 'HTML 文件' + INVALIDEXTENSION: '扩展名不允许(有效扩展名: {extensions})' + INVALIDEXTENSIONSHORT: '扩展名不允许' + IcoType: '图标图片' + JpgType: 'JPEG 图片 - 适合照片' + JsType: 'Javascript 文件' + Mp3Type: 'MP3 音频文件' + MpgType: 'MPEG 视频文件' + NOFILESIZE: '文件尺寸为零字节。' + NOVALIDUPLOAD: '该文件不是有效上传的' + Name: 名称 + PLURALNAME: 文件 + PdfType: 'Adobe Acrobat PDF 文件' + PngType: 'PNG 图片 - 良好的通用格式' + SINGULARNAME: 文件 + TOOLARGE: '文件尺寸过大,最大允许 {size}' + TOOLARGESHORT: '文件尺寸超过了 {size}' + TiffType: '标记图片格式' + Title: 标题 + WavType: 'WAV 音频文件' + XlsType: 'Excel 表格' + ZipType: 'ZIP 压缩文件' + FileIFrameField: + ATTACH: '附件 {type}' + ATTACHONCESAVED: '只有当您第一次保存过记录,{type} 才能被附加。' + ATTACHONCESAVED2: '只有当您第一次保存过记录,文件才能被附加。' + DELETE: '删除 {type}' + DISALLOWEDFILETYPE: '这种文件类型不允许被上传' + FILE: 文件 + FROMCOMPUTER: '从您的电脑' + FROMFILESTORE: '从文件商店' + NOSOURCE: '请选择一个源文件来附加' + REPLACE: '替代 {type}' + FileIFrameField_iframe_ss: + TITLE: '图片上传框架' + Filesystem: + SYNCRESULTS: '同步更新完成:{createdcount} 项已创建, {deletedcount} 项已删除' + Folder: + PLURALNAME: 文件夹 + SINGULARNAME: 文件夹 + ForgotPasswordEmail_ss: + HELLO: 您好 + TEXT1: '这是您的' + TEXT2: '密码重设链接' + TEXT3: 为 + Form: + FIELDISREQUIRED: '{name} 为必填' + SubmitBtnLabel: 前往 + VALIDATIONCREDITNUMBER: '请确保您输入了正确的 {number} 信用卡号码' + VALIDATIONNOTUNIQUE: '输入的值不是唯一的' + VALIDATIONPASSWORDSDONTMATCH: '密码不匹配' + VALIDATIONPASSWORDSNOTEMPTY: '密码不得为空' + VALIDATIONSTRONGPASSWORD: '密码必须至少有一个数字和一个字母数字字符' + VALIDATOR: 验证器 + VALIDCURRENCY: '请输入一个有效的货币' + CSRF_FAILED_MESSAGE: '似乎出现了技术问题。请点击返回按钮,刷新您的浏览器,然后再试一次。' + FormField: + NONE: 无 + Example: '例如 %s' + GridAction: + DELETE_DESCRIPTION: 删除 + Delete: 删除 + UnlinkRelation: 解除链接 + GridField: + Add: '添加 {name}' + Filter: 过滤器 + FilterBy: '过滤条件' + Find: 查找 + LEVELUP: '等级提升' + LinkExisting: '链接已存在' + NewRecord: '新 %s' + NoItemsFound: '没有找到任何项目' + PRINTEDAT: '印刷地' + PRINTEDBY: '印刷人' + PlaceHolder: '查找 {type}' + PlaceHolderWithLabels: '通过 {name} 查找 {type}' + RelationSearch: '关系搜索' + ResetFilter: 重设 + GridFieldAction_Delete: + DeletePermissionsFailure: '没有删除权限' + EditPermissionsFailure: '没有解除记录链接的权限' + GridFieldDetailForm: + CancelBtn: 取消 + Create: 创建 + Delete: 删除 + DeletePermissionsFailure: '没有删除权限' + Deleted: '已删除的 %s %s' + Save: 保存 + Saved: '已保存 {name} {link}' + GridFieldItemEditView_ss: + Go_back: '返回' + Group: + AddRole: '在这个小组中添加一个角色' + Code: '小组代码' + DefaultGroupTitleAdministrators: 管理员 + DefaultGroupTitleContentAuthors: '内容作者' + Description: 描述 + GroupReminder: '如果您选择了某父组,该组别将会承担起所有功能角色' + Locked: '锁定?' + NoRoles: '没有找到角色' + PLURALNAME: 群组 + Parent: '父组' + RolesAddEditLink: '管理角色' + SINGULARNAME: 群组 + Sort: '排序' + has_many_Permissions: 权限 + many_many_Members: 成员 + GroupImportForm: + Help1: '

CSV格式(逗号分隔值)导入一个或多个小组。显示高级用法

' + Help2: "
\n

高级用法

\n
    \n
  • 允许的列:%s
  • \n
  • 现存的小组根据其独特的代码值来匹配,并根据导入文件中的任何新值来更新
  • \n
  • 小组的层次结构可以通过使用父代码列来创建。
  • \n
  • 权限代码可由权限代码列来分配。现存的权限代码并不会被清除。
  • \n
\n
" + ResultCreated: '创建 {count} 个小组' + ResultDeleted: '已删除 %d 小组' + ResultUpdated: '已更新 %d 小组' + Hierarchy: + InfiniteLoopNotAllowed: '"{type}" 层次结构中发现无限循环。请更改父类型来解决此问题' + HtmlEditorField: + ADDURL: '添加网址' + ADJUSTDETAILSDIMENSIONS: '详情 &amp; 体积' + ANCHORVALUE: 固定 + BUTTONINSERT: 插入 + BUTTONINSERTLINK: '插入链接' + BUTTONREMOVELINK: '移除链接' + BUTTONUpdate: 更新 + CAPTIONTEXT: '标题文本' + CSSCLASS: '对齐 / 样式' + CSSCLASSCENTER: '单独居中' + CSSCLASSLEFT: '居左,以文字环绕。' + CSSCLASSLEFTALONE: '居左,无其他元素。' + CSSCLASSRIGHT: '居右,以文字环绕。' + DETAILS: 详情 + EMAIL: '电子邮件地址' + FILE: 文件 + FOLDER: 文件夹 + FROMCMS: '从 CMS 处' + FROMCOMPUTER: '从您的电脑处' + FROMWEB: '从网站上' + FindInFolder: '在文件夹中寻找' + IMAGEALT: '替代性文本 (alt)' + IMAGEDIMENSIONS: 体积 + IMAGEHEIGHTPX: 高度 + IMAGETITLE: '标题文字(工具提示)- 关于该图像的更多信息' + IMAGETITLETEXT: '标题文字(工具提示)' + IMAGETITLETEXTDESC: '要获取关于该图像的更多信息' + IMAGEWIDTHPX: 宽度 + INSERTMEDIA: '插入媒体' + LINK: '插入链接' + LINKANCHOR: '固定于此页面' + LINKDESCR: '链接描述' + LINKEMAIL: '电子邮件地址' + LINKEXTERNAL: '另一个网站' + LINKFILE: '下载文件' + LINKINTERNAL: '站内页面' + LINKOPENNEWWIN: '在新窗口中打开链接?' + LINKTO: '链接到' + PAGE: 页面 + URL: 网址 + URLNOTANOEMBEDRESOURCE: '''{url}'' 该网址无法转换成媒体来源。' + UpdateMEDIA: '更新媒体' + BUTTONADDURL: '添加网址' + Image: + PLURALNAME: 文件 + SINGULARNAME: 文件 + ImageField: + IMAGE: 图像 + Image_Cached: + PLURALNAME: 文件 + SINGULARNAME: 文件 + Image_iframe_ss: + TITLE: '图片上传内嵌框架' + LeftAndMain: + CANT_REORGANISE: '您没有权限更改顶层页面。您的更改没有保存。' + DELETED: 已删除。 + DropdownBatchActionsDefault: 动作 + HELP: 帮助 + PAGETYPE: '页面类型' + PERMAGAIN: '您已经退出 CMS。如果您想再次登录,请在下面输入用户名和密码。' + PERMALREADY: '抱歉,您不能访问 CMS 的这一部分。如果您想以不同的身份登录,请在下面进行操作' + PERMDEFAULT: '请选择一种认证方法并输入您的凭据以访问 CMS。' + PLEASESAVE: '请保存页面:不能更新该页面因为它还没有被保存。' + PreviewButton: 预览 + REORGANISATIONSUCCESSFUL: '重新组织网站地图已成功' + SAVEDUP: 已保存。 + VersionUnknown: 位置 + ShowAsList: '以列表方式展示' + TooManyPages: '页面数目过多' + ValidationError: '验证错误' + LeftAndMain_Menu_ss: + Hello: 您好 + LOGOUT: '退出' + LoginAttempt: + Email: '电子邮件地址' + IP: 'IP 地址' + PLURALNAME: '登录尝试' + SINGULARNAME: '登录尝试' + Status: 状态 + Member: + ADDGROUP: '添加组别' + BUTTONCHANGEPASSWORD: '更改密码' + BUTTONLOGIN: '登录' + BUTTONLOGINOTHER: '以不同身份登录' + BUTTONLOSTPASSWORD: '我丢失了密码' + CANTEDIT: '您没有权限完成这一操作' + CONFIRMNEWPASSWORD: '确认新密码' + CONFIRMPASSWORD: '确认密码' + DATEFORMAT: '日期格式' + DefaultAdminFirstname: '默认管理员' + DefaultDateTime: 默认 + EMAIL: 电子邮件 + EMPTYNEWPASSWORD: '新密码不能为空,请重试' + ENTEREMAIL: '请输入电子邮件地址以获取密码重置链接' + ERRORLOCKEDOUT: '由于登录失败次数过多,您的账户暂时被冻结。请在 20 分钟后重试。' + ERRORLOCKEDOUT2: '由于登录失败次数过多,您的账户暂时被冻结。请在 {count} 分钟后重试。' + ERRORNEWPASSWORD: '您输入的新密码不同,请重试' + ERRORPASSWORDNOTMATCH: '您的现有密码不匹配,请重试' + ERRORWRONGCRED: '电子邮件或密码错误。请重试。' + FIRSTNAME: '名字' + INTERFACELANG: '界面语言' + INVALIDNEWPASSWORD: '我们不能接受该密码:{password}' + LOGGEDINAS: '您以 {name} 身份登录。' + NEWPASSWORD: '新密码' + PASSWORD: 密码 + PLURALNAME: 成员 + REMEMBERME: '下次记住我?' + SINGULARNAME: 成员 + SUBJECTPASSWORDCHANGED: '您的密码已更改' + SUBJECTPASSWORDRESET: '您的密码重设链接' + SURNAME: 姓氏 + TIMEFORMAT: '时间格式' + VALIDATIONMEMBEREXISTS: '带有相同的 %s 的成员已经存在' + ValidationIdentifierFailed: '不能用相同的标识符 ({name} = {value})) 重写现有成员 #{id}' + WELCOMEBACK: '欢迎回来, {firstname}' + YOUROLDPASSWORD: '您的旧密码' + belongs_many_many_Groups: 群组 + db_LastVisited: '上次访问日期' + db_Locale: '界面区域设置' + db_LockedOutUntil: '保持锁定直到' + db_NumVisit: '访问数字' + db_Password: 密码 + db_PasswordExpiry: '密码失效日期' + NoPassword: '该成员无密码' + MemberAuthenticator: + TITLE: '电子邮件和密码' + MemberDatetimeOptionsetField: + AMORPM: 'AM(上午)或 PM(下午)' + Custom: 自定义 + DATEFORMATBAD: '日期格式无效' + DAYNOLEADING: '起首不为零的月份日期' + DIGITSDECFRACTIONSECOND: '一个或多个代表秒的小数数字' + FOURDIGITYEAR: '四位数年份' + FULLNAMEMONTH: '月份全名(例如六月)' + HOURNOLEADING: '起首不为零的小时' + MINUTENOLEADING: '起首不为零的分钟' + MONTHNOLEADING: '起首不为零的月份数字' + Preview: 预览 + SHORTMONTH: '月份简称(例如 Jun)' + TOGGLEHELP: '拨动格式帮助开关' + TWODIGITDAY: '两位数表示的月份日期' + TWODIGITHOUR: '两位数表示的小时(00 到 23)' + TWODIGITMINUTE: '两位数表示的分钟(00 到 59)' + TWODIGITMONTH: '两位数表示的月份(01=一月,以此类推)' + TWODIGITSECOND: '两位数表示的秒(00 到 59)' + TWODIGITYEAR: '两位数表示的年份' + Toggle: '显示格式帮助' + MemberImportForm: + Help1: '<p>采用 <em>CSV 格式</em> 导入用户(逗号分隔值)<small><a href="#" class="toggle-advanced">显示高级用法</a></small></p>' + Help2: "<div class=\"advanced\">\n <h4>高级用法</h4>\n <ul>\n <li>允许的栏目:<em>%s</em></li>\n <li>通过独有的 <em>代码</em> 属性对现有用户进行配对并使用导入文件中任何新的值更新他们。</li>\n <li>群组可通过 <em>组别</em> 栏目进行分类。群组通过他们的<em>代码</em> 属性进行识别,\n多个群组可用逗号隔开。现有的群组分配情况不会被清除。</li>\n </ul>\n</div>" + ResultCreated: '已创建 {count} 位成员' + ResultDeleted: '已删除 %d 位成员' + ResultNone: '无更改' + ResultUpdated: '已更新 {count} 个成员' + MemberPassword: + PLURALNAME: '成员密码' + SINGULARNAME: '成员密码' + MemberTableField: + APPLY_FILTER: '应用过滤器' + ModelAdmin: + DELETE: 删除 + DELETEDRECORDS: '已删除 {count} 个记录。' + EMPTYBEFOREIMPORT: '替代数据' + IMPORT: '从 CSV 中导入' + IMPORTEDRECORDS: '已导入 {count} 个记录。' + NOCSVFILE: '请浏览并选择要导入的 CSV 文件' + NOIMPORT: '没有可导入的项目' + RESET: 重设 + Title: '数据模型' + UPDATEDRECORDS: '更新了 {count} 个记录。' + ModelAdmin_ImportSpec_ss: + IMPORTSPECFIELDS: '数据库栏目' + IMPORTSPECLINK: '展示 %s 的详细信息' + IMPORTSPECRELATIONS: 关系 + IMPORTSPECTITLE: '%s 的详细信息' + ModelAdmin_Tools_ss: + FILTER: 过滤 + IMPORT: 导入 + ModelSidebar_ss: + IMPORT_TAB_HEADER: 导入 + SEARCHLISTINGS: 搜索 + MoneyField: + FIELDLABELAMOUNT: 金额 + FIELDLABELCURRENCY: 货币 + NullableField: + IsNullLabel: '为空' + NumericField: + VALIDATION: '''{value}'' 不是数字,该区域只接受数字' + Pagination: + Page: 页面 + View: 查看 + Permission: + AdminGroup: 管理员 + CMS_ACCESS_CATEGORY: 'CMS 访问' + FULLADMINRIGHTS: '完全管理权' + FULLADMINRIGHTS_HELP: '包含并支配其它所有已分配权限' + PLURALNAME: 权限 + SINGULARNAME: 权限 + PermissionCheckboxSetField: + AssignedTo: '已分配至 "{title}"' + FromGroup: '从小组 "{title}"继承' + FromRole: '从角色 "{title}"继承' + FromRoleOnGroup: '从 "%s" 小组的 "%s" 角色继承' + PermissionRole: + OnlyAdminCanApply: '只有管理员可以应用' + PLURALNAME: 角色 + SINGULARNAME: 角色 + Title: 标题 + PermissionRoleCode: + PLURALNAME: '权限角色代码' + SINGULARNAME: '权限角色代码' + Permissions: + PERMISSIONS_CATEGORY: '角色及访问权限' + UserPermissionsIntro: '把群组分配给该用户会改变其权限。请查看群组部分以获取关于个体组别的权限详情。' + PhoneNumberField: + VALIDATION: '请输入一个有效的电话号码' + RelationComplexTableField_ss: + ADD: 添加 + CSVEXPORT: '导出到 CSV' + NOTFOUND: '没有找到项目' + Security: + ALREADYLOGGEDIN: '您无法进入这个页面。如果您有另一个帐号可以进入这个页面,您可以在下面再次登录。' + LOSTPASSWORDHEADER: '忘记密码' + BUTTONSEND: '将密码重设链接发送给我' + CHANGEPASSWORDBELOW: '您可以在下面更改您的密码。' + CHANGEPASSWORDHEADER: '更改您的密码' + ENTERNEWPASSWORD: '请输入一个新密码。' + ERRORPASSWORDPERMISSION: '您必须登录才能更改您的密码!' + LOGGEDOUT: '您已经退出了。如果您希望再次登录,请在下面输入您的证书。' + LOGIN: '登录' + NOTEPAGESECURED: '该页面受安全保护。请在下面输入您的证书,然后我们会立即将您引导至该页面。' + NOTERESETLINKINVALID: '

密码重设链接无效或已过期。

您可以在这里 要求一个新的或在登录后更改您的密码。

' + NOTERESETPASSWORD: '请输入您的电子邮件地址,然后我们会将一个链接发送给您,您可以用它来重设您的密码' + PASSWORDSENTHEADER: '密码重设链接已发送至''{email}''' + PASSWORDSENTTEXT: '谢谢!复位链接已发送到 ''{email}'',假定此电子邮件地址存在一个帐户。' + SecurityAdmin: + ACCESS_HELP: '允许查看、添加和编辑用户,以及将权限和角色分配给他们' + APPLY_ROLES: '将角色应用至小组' + APPLY_ROLES_HELP: '编辑角色的能力已被分配给一个小组。需要“访问‘用户’部分”的权限。' + EDITPERMISSIONS: '管理小组的权限' + EDITPERMISSIONS_HELP: '一个小组编辑权限和 IP 地址的能力。需要“访问‘安全’部分”的权限。' + GROUPNAME: '小组名称' + IMPORTGROUPS: '导入小组' + IMPORTUSERS: '导入用户' + MEMBERS: 成员 + MENUTITLE: 安全 + MemberListCaution: '注意:从这个列表中删除成员将会使它们从所有小组和数据库中被删除' + NEWGROUP: '新的小组' + PERMISSIONS: 权限 + ROLES: 角色 + ROLESDESCRIPTION: '角色是预定义的权限,并可被分配到小组。
如果需要的话,它们可以从父小组继承。' + TABROLES: 角色 + Users: 用户 + SecurityAdmin_MemberImportForm: + BtnImport: '从 CSV 导入' + FileFieldLabel: 'CSV 文件 <small>(允许的扩展名:*.csv)</small>' + SilverStripeNavigator: + Edit: 编辑 + Auto: 自动 + ChangeViewMode: '改变视图模式' + Desktop: 桌面 + DualWindowView: '双窗口' + EditView: '编辑模式' + Mobile: 移动 + PreviewState: '预览状态' + PreviewView: '预览模式' + Responsive: 有响应的 + SplitView: '分离模式' + Tablet: 平板电脑 + ViewDeviceWidth: '选择预览宽度' + Width: 宽度 + SimpleImageField: + NOUPLOAD: '没有已上传的图像' + SiteTree: + TABMAIN: 主要的 + TableField: + ISREQUIRED: '以 %s ''%s'' 需要' + TableField_ss: + ADD: '添加新行' + ADDITEM: '添加 %s' + TableListField: + CSVEXPORT: '导出到 CSV' + PRINT: 打印 + Print: 打印 + SELECT: '选择' + TableListField_ss: + NOITEMSFOUND: '找不到项目' + SORTASC: '升序排列' + SORTDESC: '降序排列' + TableListField_PageControls_ss: + DISPLAYING: 显示 + OF: 的 + TO: 至 + VIEWFIRST: '查看第一个' + VIEWLAST: '查看上一个' + VIEWNEXT: '查看下一个' + VIEWPREVIOUS: '查看前一页' + TimeField: + VALIDATEFORMAT: '请输入有效的时间格式 ({format})' + ToggleField: + LESS: 更少 + MORE: 更多 + UploadField: + ATTACHFILE: '附加单个文件' + ATTACHFILES: '附加多个文件' + AttachFile: '附加一个或多个文件' + DELETE: '从文件中移除' + DELETEINFO: '从文件库中永久移除该文件' + DOEDIT: 保存 + DROPFILE: '释放单个文件' + DROPFILES: '释放多个文件' + Dimensions: 尺寸 + EDIT: 编辑 + EDITINFO: '编辑该文件' + FIELDNOTSET: '没有找到文件信息' + FROMCOMPUTER: '从您的电脑处' + FROMCOMPUTERINFO: '从文件中选择' + FROMFILES: '从文件中' + HOTLINKINFO: '信息:该图像将会被映射。请确保您已获得网站原始制作者的允许。' + MAXNUMBEROFFILES: '超过允许的最大 {count} 个文件数目' + MAXNUMBEROFFILESSHORT: '只能上传 {count} 个文件' + MAXNUMBEROFFILESONE: '只能上传一个文件' + REMOVE: 移除 + REMOVEERROR: '移除文件错误' + REMOVEINFO: '从这里移除文件,但是不将其从文件库中删除' + STARTALL: '开始所有' + STARTALLINFO: '开始上传所有' + Saved: 已保存 + CHOOSEANOTHERFILE: '选择另一文件' + CHOOSEANOTHERINFO: '用文件库里的文件替换该文件' + OVERWRITEWARNING: '已经存在相同名称的文件' + UPLOADSINTO: '保存到 /{path}' + Versioned: + has_many_Versions: 版本 + CMSPageHistoryController_versions_ss: + PREVIEW: '网站预览' + GridFieldEditButton_ss: + EDIT: 编辑 + ContentController: + NOTLOGGEDIN: '尚未登录' + GridFieldItemEditView: + Go_back: '返回' + PasswordValidator: + LOWCHARSTRENGTH: '请添加下列部分字符以提升密码强度:%s' + PREVPASSWORD: '您已经使用过这个密码,请选用新的密码' + TOOSHORT: '密码长度过短,必须为 %s 个字符或更长' From dc7e2df20a74976cd915eca39ee6bb7c1a6f7d39 Mon Sep 17 00:00:00 2001 From: Ingo Schommer Date: Sun, 6 Oct 2013 23:25:11 +0200 Subject: [PATCH 07/16] Corrected translation references in templates Were using old entity naming scheme (*.ss) instead of underscored version which doesn't create a new YML namespace. This means all existing translations should indeed be used. Was already fixed in master, but not in 3.1 --- admin/templates/Includes/LeftAndMain_Menu.ss | 4 +- .../Includes/ModelAdmin_ImportSpec.ss | 6 +- admin/templates/Includes/ModelAdmin_Tools.ss | 6 +- admin/templates/LeftAndMain.ss | 2 +- admin/templates/ModelSidebar.ss | 4 +- lang/en.yml | 128 ++++-------------- 6 files changed, 39 insertions(+), 111 deletions(-) diff --git a/admin/templates/Includes/LeftAndMain_Menu.ss b/admin/templates/Includes/LeftAndMain_Menu.ss index 1f1da0c03..6e558a533 100644 --- a/admin/templates/Includes/LeftAndMain_Menu.ss +++ b/admin/templates/Includes/LeftAndMain_Menu.ss @@ -8,10 +8,10 @@