diff --git a/.travis.yml b/.travis.yml index 567178d0f..f45911223 100644 --- a/.travis.yml +++ b/.travis.yml @@ -26,7 +26,7 @@ matrix: before_script: - pear install pear/PHP_CodeSniffer - phpenv rehash - - ./tests/travis/before_script ~/builds/ss + - ./tests/travis/before.php --target ~/builds/ss --version="dev-master" --installer="master" - cd ~/builds/ss script: diff --git a/README.md b/README.md index dd3f498ee..3e19a08cd 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ## SilverStripe Framework -[![Build Status](https://secure.travis-ci.org/silverstripe/sapphire.png?branch=3.0)](https://travis-ci.org/silverstripe/sapphire) +[![Build Status](https://secure.travis-ci.org/silverstripe/sapphire.png?branch=master)](https://travis-ci.org/silverstripe/sapphire) PHP5 framework forming the base for the SilverStripe CMS ([http://silverstripe.org](http://silverstripe.org)). Requires a [`silverstripe-installer`](http://github.com/silverstripe/silverstripe-installer) base project. Typically used alongside the [`cms`](http://github.com/silverstripe/silverstripe-cms) module. diff --git a/_config/config.yml b/_config/config.yml new file mode 100644 index 000000000..5d1786a10 --- /dev/null +++ b/_config/config.yml @@ -0,0 +1,6 @@ +--- +Name: coreconfig +--- +Upload: + # Replace an existing file rather than renaming the new one. + replaceFile: false \ No newline at end of file diff --git a/admin/code/CMSMenu.php b/admin/code/CMSMenu.php index 54cb7337c..e515affd6 100644 --- a/admin/code/CMSMenu.php +++ b/admin/code/CMSMenu.php @@ -150,15 +150,14 @@ class CMSMenu extends Object implements IteratorAggregate, i18nEntityProvider } } - // Sort menu items according to priority + // Sort menu items according to priority, then title asc $menuPriority = array(); - $i = 0; + $menuTitle = array(); foreach($menuItems as $key => $menuItem) { - $i++; - // This funny litle formula ensures that the first item added with the same priority will be left-most. - $menuPriority[$key] = $menuItem->priority*100 - $i; + $menuPriority[$key] = $menuItem->priority; + $menuTitle[$key] = $menuItem->title; } - array_multisort($menuPriority, SORT_DESC, $menuItems); + array_multisort($menuPriority, SORT_DESC, $menuTitle, SORT_ASC, $menuItems); return $menuItems; } diff --git a/admin/code/ModelAdmin.php b/admin/code/ModelAdmin.php index a08ab53d0..4bd315e97 100644 --- a/admin/code/ModelAdmin.php +++ b/admin/code/ModelAdmin.php @@ -54,6 +54,13 @@ abstract class ModelAdmin extends LeftAndMain { * @var array|string */ public static $managed_models = null; + + /** + * Override menu_priority so that ModelAdmin CMSMenu objects + * are grouped together directly above the Help menu item. + * @var float + */ + public static $menu_priority = -0.5; public static $allowed_actions = array( 'ImportForm', diff --git a/admin/javascript/lang/nl_NL.js b/admin/javascript/lang/nl_NL.js index fed49cb34..128fc6d55 100644 --- a/admin/javascript/lang/nl_NL.js +++ b/admin/javascript/lang/nl_NL.js @@ -1,5 +1,5 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') { - if(typeof(console) != 'undefined') console.error('Class ss.i18n not defined'); + if(typeof(console) != 'undefined') console.error('Class ss.i18n not defined'); } else { ss.i18n.addDictionary('nl_NL', { 'LeftAndMain.CONFIRMUNSAVED': "Weet u zeker dat u deze pagina wilt verlaten?\n\WAARSCHUWING: Uw veranderingen zijn niet opgeslagen.\n\nKies OK om te verlaten, of Cancel om op de huidige pagina te blijven.", diff --git a/control/Director.php b/control/Director.php index 0d3739da1..31ca2c4b9 100644 --- a/control/Director.php +++ b/control/Director.php @@ -674,8 +674,8 @@ class Director implements TemplateGlobalProvider { $matched = false; if($patterns) { - // Calling from the command-line? - if(!isset($_SERVER['REQUEST_URI'])) return; + // Calling from the command-line? + if(!isset($_SERVER['REQUEST_URI'])) return; // protect portions of the site based on the pattern $relativeURL = self::makeRelative(Director::absoluteURL($_SERVER['REQUEST_URI'])); diff --git a/control/HTTP.php b/control/HTTP.php index 85dcd4265..829c0fda6 100644 --- a/control/HTTP.php +++ b/control/HTTP.php @@ -107,7 +107,7 @@ class HTTP { } return $matches[1] . $rewritten . $matches[3]; }; - + // Execute each expression foreach($regExps as $regExp) { $content = preg_replace_callback($regExp, $callback, $content); @@ -314,7 +314,8 @@ class HTTP { $responseHeaders["Cache-Control"] = "max-age=" . self::$cache_age . ", must-revalidate, no-transform"; $responseHeaders["Pragma"] = ""; - // To do: User-Agent should only be added in situations where you *are* actually varying according to it. + // To do: User-Agent should only be added in situations where you *are* actually + // varying according to user-agent. $responseHeaders['Vary'] = 'Cookie, X-Forwarded-Protocol, User-Agent, Accept'; } else { @@ -324,14 +325,12 @@ class HTTP { if(self::$modification_date && self::$cache_age > 0) { $responseHeaders["Last-Modified"] = self::gmt_date(self::$modification_date); - /* Chrome ignores Varies when redirecting back (http://code.google.com/p/chromium/issues/detail?id=79758) - which means that if you log out, you get redirected back to a page which Chrome then checks against - last-modified (which passes, getting a 304) when it shouldn't be trying to use that page at all because - it's the "logged in" version. - - By also using and etag that includes both the modification date and all the varies values which we also - check against we can catch this and not return a 304 - */ + // Chrome ignores Varies when redirecting back (http://code.google.com/p/chromium/issues/detail?id=79758) + // which means that if you log out, you get redirected back to a page which Chrome then checks against + // last-modified (which passes, getting a 304) + // when it shouldn't be trying to use that page at all because it's the "logged in" version. + // By also using and etag that includes both the modification date and all the varies + // values which we also check against we can catch this and not return a 304 $etagParts = array(self::$modification_date, serialize($_COOKIE)); if (isset($_SERVER['HTTP_X_FORWARDED_PROTOCOL'])) $etagParts[] = $_SERVER['HTTP_X_FORWARDED_PROTOCOL']; if (isset($_SERVER['HTTP_USER_AGENT'])) $etagParts[] = $_SERVER['HTTP_USER_AGENT']; diff --git a/control/HTTPResponse.php b/control/HTTPResponse.php index ab1620e43..a7661e7b3 100644 --- a/control/HTTPResponse.php +++ b/control/HTTPResponse.php @@ -160,9 +160,6 @@ class SS_HTTPResponse { */ public function setBody($body) { $this->body = $body; - - // Set content-length in bytes. Use mbstring to avoid problems with mb_internal_encoding() and mbstring.func_overload - $this->headers['Content-Length'] = mb_strlen($this->body,'8bit'); } /** @@ -244,17 +241,21 @@ class SS_HTTPResponse { "; } else { - $line = $file = null; + $line = $file = null; if(!headers_sent($file, $line)) { header($_SERVER['SERVER_PROTOCOL'] . " $this->statusCode " . $this->getStatusDescription()); foreach($this->headers as $header => $value) { header("$header: $value", true, $this->statusCode); } } else { - // It's critical that these status codes are sent; we need to report a failure if not. - if($this->statusCode >= 300) { - user_error("Couldn't set response type to $this->statusCode because of output on line $line of $file", E_USER_WARNING); - } + // It's critical that these status codes are sent; we need to report a failure if not. + if($this->statusCode >= 300) { + user_error( + "Couldn't set response type to $this->statusCode because " . + "of output on line $line of $file", + E_USER_WARNING + ); + } } // Only show error pages or generic "friendly" errors if the status code signifies diff --git a/dev/Debug.php b/dev/Debug.php index b46500ade..d64f946f7 100644 --- a/dev/Debug.php +++ b/dev/Debug.php @@ -240,7 +240,7 @@ class Debug { if(Director::isDev()) { return self::showError($errno, $errstr, $errfile, $errline, $errcontext, "Notice"); } else { - return false; + return false; } } @@ -258,7 +258,15 @@ class Debug { ini_set('display_errors', 0); if(self::$send_warnings_to) { - return self::emailError(self::$send_warnings_to, $errno, $errstr, $errfile, $errline, $errcontext, "Warning"); + return self::emailError( + self::$send_warnings_to, + $errno, + $errstr, + $errfile, + $errline, + $errcontext, + "Warning" + ); } // Send out the error details to the logger for writing @@ -280,8 +288,8 @@ class Debug { if(Director::isDev()) { return self::showError($errno, $errstr, $errfile, $errline, $errcontext, "Warning"); } else { - return false; - } + return false; + } } /** diff --git a/docs/en/changelogs/3.0.5.md b/docs/en/changelogs/3.0.5.md new file mode 100644 index 000000000..d7fc834dc --- /dev/null +++ b/docs/en/changelogs/3.0.5.md @@ -0,0 +1,13 @@ +# 3.0.5 (2013-02-20) + +## Overview + + * Fixes unpublish and "delete" actions in CMS (regression from $allowed_actions changes in 3.0.4) + +### Bugfixes + + * 2013-02-18 [16d0c18](https://github.com/silverstripe/sapphire/commit/16d0c18) Find Form actions in CompositeFields for access checks (Ingo Schommer) + +### Other + + * 2013-02-19 [9e7c622](https://github.com/silverstripe/sapphire/commit/9e7c622) fixed error property $ of object is not a function (roed) \ No newline at end of file diff --git a/docs/en/installation/composer.md b/docs/en/installation/composer.md index f237ff3bb..7e078e0d3 100644 --- a/docs/en/installation/composer.md +++ b/docs/en/installation/composer.md @@ -7,6 +7,7 @@ Composer is a package management tool for PHP that lets you install and upgrade SilverStripe and its modules. Although installing Composer is one extra step, it will give you much more flexibility than just downloading the file from silverstripe.org. This is our recommended way of downloading SilverStripe and managing your code. For more information about Composer, visit [its website](http://getcomposer.org/). +We also have separate instructions for [installing modules with Composer](/topics/modules). # Basic usage @@ -40,7 +41,7 @@ Composer updates regularly, so you should run this command fairly often. These i ## Create a new site -Composer can create a new site for you, using the installer as a template. To do so, run this: +Composer can create a new site for you, using the installer as a template: composer create-project silverstripe/installer ./my/website/folder @@ -50,7 +51,7 @@ As long as your web server is up and running, this will get all the code that yo Now visit the site in your web browser, and the installation process will be completed. By default composer will download the latest stable version. You can also specify -a version to download that version explicitly, i.e. this will download 3.0.3: +a version to download that version explicitly, i.e. this will download the older `3.0.3` release: composer create-project silverstripe/installer ./my/website/folder 3.0.3 @@ -74,7 +75,7 @@ This will return a list of package names of the forum `vendor/package`. If you The second part after the colon, `*`, is a version string. `*` is a good default: it will give you the latest version that works with the other modules you have installed. Alternatively, you can specificy a specific version, or a constraint such as `>=3.0`. For more information, read the [Composer documentation](http://getcomposer.org/doc/01-basic-usage.md#the-require-key).
-`master` is not a legal version string - it's a branch name. These are different things. The version string that would get you the branch is `dev-master`. The version string that would get you a numeric branch is a little different. The version string for the `3.0` branch is `3.0.x-dev`. But, frankly, maybe you should just use `*`. +`master` is not a legal version string - it's a branch name. These are different things. The version string that would get you the branch is `dev-master`. The version string that would get you a numeric branch is a little different. The version string for the `3.0` branch is `3.0.x-dev`.
## Updating dependencies @@ -100,7 +101,7 @@ So, your deployment process, as it relates to Composer, should be as follows: * Deploy your project code base, using the deployment tool of your choice. * Run `composer install` on your production version. -# Setting up an environment for contributing to SilverStripe {#contributing} +# Dev Environments for Contributing Code {#contributing} So you want to contribute to SilverStripe? Fantastic! You can do this with composer too. You have to tell composer three things in order to be able to do this: @@ -109,20 +110,28 @@ You have to tell composer three things in order to be able to do this: - Include dependancies marked as "developer" requirements - Use the development version, not the latest stable version -The first two steps are done as part of the initial create project using additional arguments. For instance: +The first two steps are done as part of the initial create project using additional arguments. + composer create-project --keep-vcs --dev silverstripe/installer ./my/website/folder 3.0.x-dev -The process will take a bit longer, since all modules are checked out as full git repositories which you can work on. +The process will take a bit longer, since all modules are checked out as full git repositories which you can work on. The command checks out from the 3.0 release line. To check out from master instead, +replace `3.0.x-dev` with `dev-master` (more info on [composer version naming](http://getcomposer.org/doc/02-libraries.md#specifying-the-version)). The `--keep-vcs` flag will make sure you have access to the git history of the installer and the requirements -The `--dev` flag will add a couple modules which are useful for SilverStripe development: +The `--dev` flag is optional, and can be used to add a couple modules which are useful for +SilverStripe development: + * The `behat-extension` module allows running [Behat](http://behat.org) integration tests * The `docsviewer` module will let you preview changes to the project documentation * The `buildtools` module which adds [phing](http://phing.info) tasks for creating SilverStripe releases -Note that you can also include those into an existing project by running `composer update --dev`. +Once the `create-project` command completes, you need to edit the `composer.json` in the project root +and remove the `@stable` markers from the `silverstripe/cms` and `silverstripe/framework` version entries. +Another `composer update --dev` call will now fetch from the development branch instead. +Note that you can also convert an existing composer project with these steps. + Please read the ["Contributing Code"](/misc/contributing/code) documentation to find out how to create forks and send pull requests. @@ -235,3 +244,58 @@ Both the version and the alias are specified as Composer versions, not branch na This is not the only way to set things up in Composer. For more information on this topic, read the ["Aliases" chapter of the Composer documentation](http://getcomposer.org/doc/articles/aliases.md). +## FAQ + +### How do I convert an existing module to using Composer? + +Simply decide on a [unique name and vendor prefix](https://packagist.org/about), +create a `composer.json`, and either commit it or send a pull request to the module author. +Look at existing modules like the ["blog" module](https://github.com/silverstripe/silverstripe-blog/blob/master/composer.json) for good examples on what this file should contain. +It's important that the file contains a custom "type" to declare it as a +`silverstripe-module` or `silverstripe-theme` (see [custom installers](http://getcomposer.org/doc/articles/custom-installers.md)). +Then register the module on [packagist.org](http://packagist.org). + +### How should I name my module? + +Follow the packagist.org advice on choosing a [unique name and vendor prefix](https://packagist.org/about). Please don't use the `silverstripe/` vendor prefix, since that's reserved +for modules produced by SilverStripe Ltd. In order to declare that your module is +in fact a SilverStripe module, use the "silverstripe" tag in the composer.json file, +and set the "type" to "silverstripe-module". + +### What about themes? + +Themes are technically just "modules" which are placed in the `themes/` subdirectory. +We denote a special type for them in the `composer.json` (`"type": "silverstripe-theme"`), +which triggers their installation into the correct path. + +### How do I convert an existing project to Composer? + +The easiest way is to follow the [upgrading](/installation/upgrading) instructions +and switch to a newer release. Alternatively, copy the `composer.json` file from +a newer release, and adjust the version settings in the "require" section to your needs. +You'll also need to update your webserver configuration +from there (`.htaccess` or `web.config` files), in order to prevent +web access to the composer-generated files. + +### Do I need composer on my live server? + +It depends on your deployment process. If you copy or rsync files to your live server, +the process stays the same. If the live server hosts a git repository checkout, +which is updated to push a newer version, you'll also need to run `composer install` afterwards. +We recommend looking into [Composer "lock" files](http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file) for this purpose. + +### Can I keep using Downloads, Subversion Externals or Git Submodules? + +Yes and no. Composer comes with additional features such as +[autoloading](http://getcomposer.org/doc/01-basic-usage.md#autoloading) +or [scripts](http://getcomposer.org/doc/articles/scripts.md) +which some modules will start relying on. +Please check the module README for specific installation instructions. + +### I don't want to get development versions of everything! + +You don't have to, Composer is designed to work on the constraints you set. +You can declare the ["minimum-stability"](http://getcomposer.org/doc/04-schema.md#minimum-stability) +on your project as suitable, or even whitelist specific modules as tracking +a development branch while keeping others to their stable release. +Read up on [Composer "lock" files](http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file) on how this all fits together. \ No newline at end of file diff --git a/docs/en/misc/contributing/translation.md b/docs/en/misc/contributing/translation.md index 52af28035..4ad8900e2 100644 --- a/docs/en/misc/contributing/translation.md +++ b/docs/en/misc/contributing/translation.md @@ -16,9 +16,19 @@ For all modules listed there, we automatically import new master strings as they ## FAQ -### How do I translate substituted strings? (e.g. '%s') +### How do I translate a module not listed on getlocalization? -You don't have to - if the english master-string reads 'Hello %s', your german translation would be 'Hallo %s'. Strings prefixed by a percentage-sign are automatically replaced by silverstripe with dynamic content. See http://php.net/sprintf for details. +At the moment, only the core modules ("framework" and "cms") are managed through +the getlocalization service. +For other modules, have a look in the module README if there's any specific instructions. +If there aren't, you'll need to translate the YAML files directly. If the module is on github, +you can create a fork, edit the files, and send back your pull request all directly on +the website ([instructions](https://help.github.com/articles/fork-a-repo)). + +### How do I translate substituted strings? (e.g. '%s' or '{my-variable}') + +You don't have to - if the english master-string reads 'Hello %s', your german translation would be 'Hallo %s'. Strings prefixed by a percentage-sign are automatically replaced by silverstripe with dynamic content. See http://php.net/sprintf for details. The newer `{my-variable}` format works the same way, +but makes its intent clearer, and allows reordering of placeholders in your translation. ### Do I need to convert special characters (e.g. HTML-entities)? diff --git a/docs/en/reference/uploadfield.md b/docs/en/reference/uploadfield.md index 1d8db946f..842deedd0 100644 --- a/docs/en/reference/uploadfield.md +++ b/docs/en/reference/uploadfield.md @@ -219,6 +219,13 @@ editform, or 'fileEditValidator' to determine the validator (eg RequiredFields). (of a method on File to provide a actions) for the EditForm (Example: 'getCMSActions') - `fileEditValidator`: (string) Validator (eg RequiredFields) or string $name (of a method on File to provide a Validator) for the EditForm (Example: 'getCMSValidator') + +You can also configure the underlying `[api:Upload]` class, by using the YAML config system. + + :::yaml + Upload: + # Globally disables automatic renaming of files + replaceFile: true ## TODO: Using the UploadField in a frontend form diff --git a/docs/en/topics/modules.md b/docs/en/topics/modules.md index ba1e41afc..dbe5d21c1 100644 --- a/docs/en/topics/modules.md +++ b/docs/en/topics/modules.md @@ -27,67 +27,82 @@ Because of the broad definition of modules, they can be created for a number of from your mysite folder. "cms" is an example of this. * **CMS Add-ons:** A module can define an extension to the CMS, usually by defining special page types with their own templates and behaviour. "blog", "ecommerce", "forum", and "gallery" are examples of this. -* **Blog Widgets:** A module can provide 1 or more blog-widget classes. See [widgets](/topics/widgets) for more information. +* **Widgets:** Small pieces of functionality such as showing the latest Comments or Flickr Photos. Since SilverStripe 3.0, they have been moved into a standalone module at [github.com/silverstripe/silverstripe-widgets](https://github.com/silverstripe/silverstripe-widgets). * **Developer Tools:** A module can provide a number of classes or resource files that do nothing by themselves, but instead make it easier for developers to build other applications. ## Finding Modules -* [Official module list on silverstripe.org](http://silverstripe.org/modules) -* [Subversion repository on open.silverstripe.org](http://open.silverstripe.org/browser/modules) - +* [Official module list on silverstripe.org](http://silverstripe.org/modules) +* [Packagist.org "silverstripe" tag](https://packagist.org/search/?tags=silverstripe) +* [Github.com "silverstripe" search](https://github.com/search?q=silverstripe&ref=commandbar) ## Installation -Modules should exist in the root folder of your SilverStripe. The root folder being the one that contains the -*framework*, *cms* and other folders. +Modules should exist in the root folder of your SilverStripe installation +(the directory containing the *framework* and *cms* subdirectories). The following article explains the generic installation of a module. Individual modules have their own requirements such as creating folders or configuring API keys. For information about installing or configuring a specific module see the -modules *INSTALL* (or *README*) file. Modules should adhere to the [directory-structure](/topics/directory-structure) +modules *README* file. Modules should adhere to the [directory-structure](/topics/directory-structure) guidelines. -### Download +### From a Composer Package -To install a module you need to download the tar.gz file from the [modules page](http://www.silverstripe.org/modules) and extract this tar.gz to the root folder mentioned -above. +Our preferred way to manage module dependencies is through the [Composer][http://getcomposer.org] +package manager. It enables you to install modules from specific versions, checking for +compatibilities between modules and even allowing to track development branches of them. -Note some times the folders extracted from the tar.gz contain the version number or some other folders. You need to make -sure the folder name is the correct name of the module. +After [installing Composer](/installation/composer) itself, +you can run a simple command to install a module. +Each module has a unique identifier, consisting of a vendor prefix and name. +For example, the popular "blog" module has the identifier `silverstripe/blog`, +and would be installed with the following command executed in the root folder: -### Subversion + composer require silverstripe/blog:*@stable -#### Option 1: Checkout +This will fetch the latest compatible stable version. Every time you run +`composer update` afterwards, Composer will check for a new stable version. +To lock down to a specific version, branch or commit, read up on +[Composer "lock" files](http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file). +You can also add modules by editing the "require" section of the `composer.json` file. - cd ~/Sites/yourSilverStripeProject/ - svn co http://svn.silverstripe.com/open/modules/modulename/trunk modulename/ +To find modules and their identifiers, search for them on [packagist.org](http://packagist.org). +
+Older releases (<3.0.3, <2.4.9) don't come with a `composer.json` file in your root folder, +which is required for its operation. In this case, we recommend upgrading to a newer release. +
-Note: Some modules are stored in subfolders. If you want to use a module that is in a subfolder, such as widgets, put -an _ between the subfolder name and the module name, like this: +### From an Archive Download - cd /your/website/root - svn co http://svn.silverstripe.com/open/modules/widgets/twitter/trunk widgets_twitter +Alternatively, you can download the archive file from the +[modules page](http://www.silverstripe.org/modules) +and extract it to the root folder mentioned above. +Github also provides archive downloads which are generated automatically for every tag/version. +
+The main folder extracted from the archive +might contain the version number or additional "container" folders above the actual module +codebase. You need to make sure the folder name is the correct name of the module +(e.g. "blog/" rather than "silverstripe-blog/"). This folder should contain a `_config.php` file. +While the module might register and operate in other structures, +paths to static files such as CSS or JavaScript won't work. +
+
+Some modules might not work at all with this approach since they rely on the +Composer [autoloader](http://getcomposer.org/doc/01-basic-usage.md#autoloading) +or post-install hooks, so we recommend using Composer. +
-#### Option 2: Add to svn:externals +### Git Submodules and Subversion Externals - cd ~/Sites/yourSilverStripeProject/ - svn propedit svn:externals . +Git and Subversion provide their own facilities for managing dependent repositories. +This is essentially a variation of the "Archive Download" approach, +and comes with the same caveats. +## Related -In the editor add the following line (lines if you want multiple) - - modulename/ http://svn.silverstripe.com/open/modules/modulename/trunk - - -Exit the editor and then run - - svn up - - -**Useful Links:** - -* [Modules](/topics/module-developement) -* [Module Release Process](/misc/module-release-process) +* [Modules Development](/topics/module-developement) +* [Module Release Process](/misc/module-release-process) \ No newline at end of file diff --git a/filesystem/Upload.php b/filesystem/Upload.php index 5cfa95b07..d8b2ef3d1 100644 --- a/filesystem/Upload.php +++ b/filesystem/Upload.php @@ -45,6 +45,12 @@ class Upload extends Controller { * @var array */ protected $tmpFile; + + /** + * Replace an existing file rather than renaming the new one. + * @var Boolean + */ + protected $replaceFile; /** * Processing errors that can be evaluated, @@ -61,10 +67,11 @@ class Upload extends Controller { * @var string */ public static $uploads_folder = "Uploads"; - + public function __construct() { parent::__construct(); $this->validator = new Upload_Validator(); + $this->replaceFile = $this->config()->get('replaceFile'); } /** @@ -100,11 +107,6 @@ class Upload extends Controller { if(!$folderPath) $folderPath = self::$uploads_folder; - if(!$this->file) { - $fileClass = File::get_class_for_file_extension(pathinfo($tmpFile['name'], PATHINFO_EXTENSION)); - $this->file = new $fileClass(); - } - if(!is_array($tmpFile)) { user_error("Upload::load() Not passed an array. Most likely, the form hasn't got the right enctype", E_USER_ERROR); @@ -137,25 +139,40 @@ class Upload extends Controller { $fileName = basename($file); $relativeFilePath = ASSETS_DIR . "/" . $folderPath . "/$fileName"; + + // Create a new file record (or try to retrieve an existing one) + if(!$this->file) { + $fileClass = File::get_class_for_file_extension(pathinfo($tmpFile['name'], PATHINFO_EXTENSION)); + if($this->replaceFile) { + $this->file = File::get() + ->filter(array( + 'Name' => $fileName, + 'ParentID' => $parentFolder ? $parentFolder->ID : 0 + ))->First(); + } + if(!$this->file) $this->file = new $fileClass(); + } // if filename already exists, version the filename (e.g. test.gif to test1.gif) - while(file_exists("$base/$relativeFilePath")) { - $i = isset($i) ? ($i+1) : 2; - $oldFilePath = $relativeFilePath; - // make sure archives retain valid extensions - if(substr($relativeFilePath, strlen($relativeFilePath) - strlen('.tar.gz')) == '.tar.gz' || - substr($relativeFilePath, strlen($relativeFilePath) - strlen('.tar.bz2')) == '.tar.bz2') { - $relativeFilePath = preg_replace('/[0-9]*(\.tar\.[^.]+$)/', $i . '\\1', $relativeFilePath); - } else if (strpos($relativeFilePath, '.') !== false) { - $relativeFilePath = preg_replace('/[0-9]*(\.[^.]+$)/', $i . '\\1', $relativeFilePath); - } else if (strpos($relativeFilePath, '_') !== false) { - $relativeFilePath = preg_replace('/_([^_]+$)/', '_'.$i, $relativeFilePath); - } else { - $relativeFilePath .= '_'.$i; - } - if($oldFilePath == $relativeFilePath && $i > 2) { - user_error("Couldn't fix $relativeFilePath with $i tries", E_USER_ERROR); - } + if(!$this->replaceFile) { + while(file_exists("$base/$relativeFilePath")) { + $i = isset($i) ? ($i+1) : 2; + $oldFilePath = $relativeFilePath; + // make sure archives retain valid extensions + if(substr($relativeFilePath, strlen($relativeFilePath) - strlen('.tar.gz')) == '.tar.gz' || + substr($relativeFilePath, strlen($relativeFilePath) - strlen('.tar.bz2')) == '.tar.bz2') { + $relativeFilePath = preg_replace('/[0-9]*(\.tar\.[^.]+$)/', $i . '\\1', $relativeFilePath); + } else if (strpos($relativeFilePath, '.') !== false) { + $relativeFilePath = preg_replace('/[0-9]*(\.[^.]+$)/', $i . '\\1', $relativeFilePath); + } else if (strpos($relativeFilePath, '_') !== false) { + $relativeFilePath = preg_replace('/_([^_]+$)/', '_'.$i, $relativeFilePath); + } else { + $relativeFilePath .= '_'.$i; + } + if($oldFilePath == $relativeFilePath && $i > 2) { + user_error("Couldn't fix $relativeFilePath with $i tries", E_USER_ERROR); + } + } } if(file_exists($tmpFile['tmp_name']) && copy($tmpFile['tmp_name'], "$base/$relativeFilePath")) { @@ -181,6 +198,20 @@ class Upload extends Controller { $this->file = $file; return $this->load($tmpFile, $folderPath); } + + /** + * @return Boolean + */ + public function setReplaceFile($bool) { + $this->replaceFile = $bool; + } + + /** + * @return Boolean + */ + public function getReplaceFile() { + return $this->replaceFile; + } /** * Container for all validation on the file diff --git a/forms/FileField.php b/forms/FileField.php index f8a9d6b8c..5aeb68f78 100644 --- a/forms/FileField.php +++ b/forms/FileField.php @@ -78,7 +78,7 @@ class FileField extends FormField { * @param int $value The value of the field. */ public function __construct($name, $title = null, $value = null) { - $this->upload = new Upload(); + $this->upload = Upload::create(); parent::__construct($name, $title, $value); } diff --git a/forms/FormAction.php b/forms/FormAction.php index 6fe6ebeeb..32c79cd3f 100644 --- a/forms/FormAction.php +++ b/forms/FormAction.php @@ -120,10 +120,6 @@ class FormAction extends FormField { return $this->useButtonTag; } - public function extraClass() { - return 'action ' . parent::extraClass(); - } - /** * Does not transform to readonly by purpose. * Globally disabled buttons would break the CMS. diff --git a/lang/ar.yml b/lang/ar.yml index 4964bacfa..7c5cbdcb2 100644 --- a/lang/ar.yml +++ b/lang/ar.yml @@ -8,8 +8,8 @@ ar: FILENAME: 'اسم الملف' FOLDER: Folder LASTEDIT: 'آخر التعديلات' - OWNER: 'المالك' - SIZE: 'الحجم' + OWNER: المالك + SIZE: الحجم TITLE: العنوان TYPE: النوع URL: الرابط @@ -28,7 +28,7 @@ ar: UPLOADINPROGRESS: 'Please wait… upload in progress' UPLOADOR: OR BBCodeParser: - ALIGNEMENT: 'المحاذاة' + ALIGNEMENT: المحاذاة ALIGNEMENTEXAMPLE: 'محاذاة إلى اليمين' BOLD: 'خط عريض' BOLDEXAMPLE: عريض @@ -42,7 +42,7 @@ ar: IMAGE: الصورة IMAGEDESCRIPTION: 'عرض الصورة في الموضوع' ITALIC: 'خط مائل' - ITALICEXAMPLE: 'مائل' + ITALICEXAMPLE: مائل LINK: 'رابط الموقع' LINKDESCRIPTION: 'رابط إلى موقع آخر' STRUCK: 'خط في المنتصف' @@ -61,7 +61,7 @@ ar: Boolean: 0: لا ANY: أي - 1: 'نعم' + 1: نعم CMSLoadingScreen.ss: LOADING: Loading... REQUIREJS: 'The CMS requires that you have JavaScript enabled.' @@ -80,7 +80,7 @@ ar: PASSWORD: 'الرقم السري' CheckboxField: - لا - - 'نعم' + - نعم ComplexTableField: CLOSEPOPUP: 'إغلاق النافذة' SUCCESSADD2: 'Added {name}' @@ -109,8 +109,8 @@ ar: PLURALNAME: 'بيانات كائن' SINGULARNAME: 'بيانات كائن' Date: - DAY: 'اليوم' - DAYS: 'الأيام' + DAY: اليوم + DAYS: الأيام HOUR: ساعة HOURS: ساعات MIN: دقيقة @@ -125,7 +125,7 @@ ar: YEARS: السنوات DateField: NOTSET: 'غير محدد' - TODAY: 'اليوم' + TODAY: اليوم VALIDDATEFORMAT2: 'Please enter a valid date format ({format})' VALIDDATEMAXDATE: 'Your date has to be older or matching the maximum allowed date ({date})' VALIDDATEMINDATE: 'Your date has to be newer or matching the minimum allowed date ({date})' @@ -144,7 +144,7 @@ ar: ANY: أي File: AviType: 'AVI video file' - Content: 'المحتوى' + Content: المحتوى CssType: 'CSS file' DmgType: 'Apple disk image' DocType: 'Word document' @@ -162,11 +162,11 @@ ar: MpgType: 'MPEG video file' NOFILESIZE: 'حجم الملف 0 بايت' NOVALIDUPLOAD: 'نوع الملف غير قابل للرفع' - Name: 'الاسم' - PLURALNAME: 'الملفات' + Name: الاسم + PLURALNAME: الملفات PdfType: 'Adobe Acrobat PDF file' PngType: 'PNG image - good general-purpose format' - SINGULARNAME: 'الملف' + SINGULARNAME: الملف TOOLARGE: 'Filesize is too large, maximum {size} allowed' TOOLARGESHORT: 'Filesize exceeds {size}' TiffType: 'Tagged image format' @@ -180,7 +180,7 @@ ar: ATTACHONCESAVED2: 'Files can be attached once you have saved the record for the first time.' DELETE: 'Delete {type}' DISALLOWEDFILETYPE: 'This filetype is not allowed to be uploaded' - FILE: 'ملف' + FILE: ملف FROMCOMPUTER: 'من جهازك الشخصي' FROMFILESTORE: 'من مكتبة الملفات' NOSOURCE: 'الرجاء اختيارمصدر ملف المرفق' @@ -205,7 +205,7 @@ ar: VALIDATIONPASSWORDSDONTMATCH: 'رقم المرور غير صحيح' VALIDATIONPASSWORDSNOTEMPTY: 'أرقام المرور لا يمكن أن تكون فارغة' VALIDATIONSTRONGPASSWORD: 'Passwords must have at least one digit and one alphanumeric character' - VALIDATOR: 'المحقق' + VALIDATOR: المحقق VALIDCURRENCY: 'Please enter a valid currency' FormField: NONE: لايوجد @@ -279,8 +279,8 @@ ar: CSSCLASSRIGHT: 'إلى اليمين ، مع التفاف النص' DETAILS: Details EMAIL: 'بريد إلكتروني' - FILE: 'ملف' - FOLDER: 'المجلد' + FILE: ملف + FOLDER: المجلد FROMCMS: 'From the CMS' FROMCOMPUTER: 'From your computer' FROMWEB: 'From the web' @@ -322,7 +322,7 @@ ar: CANT_REORGANISE: 'You do not have permission to alter Top level pages. Your change was not saved.' DELETED: Deleted. DropdownBatchActionsDefault: Actions - HELP: 'مساعدة' + HELP: مساعدة PAGETYPE: 'نوع الصفحة:' PERMAGAIN: 'تم خروجك من النظام بنجاح. للدخول مرة أخرى أدحل البريد الإلكتروني و الرقم السري بالأسفل' PERMALREADY: 'عذراً , لكن لا يمكنك الوصول لهذا القسم من النظام. يتوجب عليك الدخول بصلاحية أخرى' @@ -377,7 +377,7 @@ ar: ValidationIdentifierFailed: 'Can''t overwrite existing member #{id} with identical identifier ({name} = {value}))' WELCOMEBACK: 'Welcome Back, {firstname}' YOUROLDPASSWORD: 'رقم المرور السابق' - belongs_many_many_Groups: 'المجموعات' + belongs_many_many_Groups: المجموعات db_LastVisited: 'تاريخ آخر زيارة' db_Locale: 'واجهة الموقع' db_LockedOutUntil: 'مغلق حتى تاريخ' @@ -441,8 +441,8 @@ ar: IMPORT_TAB_HEADER: Import SEARCHLISTINGS: Search MoneyField: - FIELDLABELAMOUNT: 'الكمية' - FIELDLABELCURRENCY: 'العملة' + FIELDLABELAMOUNT: الكمية + FIELDLABELCURRENCY: العملة NullableField: IsNullLabel: باطل NumericField: diff --git a/lang/bg.yml b/lang/bg.yml index 75b7c7a9c..8cef2d800 100644 --- a/lang/bg.yml +++ b/lang/bg.yml @@ -4,7 +4,7 @@ bg: NEWFOLDER: НоваПапка AssetTableField: CREATED: Създаден - DIM: 'Размери' + DIM: Размери FILENAME: 'Име на файл' FOLDER: Папка LASTEDIT: 'Последна промяна' @@ -88,8 +88,8 @@ bg: ComplexTableField.ss: ADDITEM: 'Добави %s' NOITEMSFOUND: 'No items found' - SORTASC: 'Възходящ' - SORTDESC: 'Низходящ' + SORTASC: Възходящ + SORTDESC: Низходящ ComplexTableField_popup.ss: NEXT: Следващо PREVIOUS: Предишно @@ -253,7 +253,7 @@ bg: RolesAddEditLink: 'Управление на ролите' SINGULARNAME: Group Sort: Сортиране - has_many_Permissions: 'Разрешения' + has_many_Permissions: Разрешения many_many_Members: Потребители GroupImportForm: Help1: '

Внасяне на една или повече групи в CSV формат (comma-separated values). Покажи начин на употреба

' @@ -288,7 +288,7 @@ bg: IMAGEALT: 'Алтернативен текст (alt)' IMAGEALTTEXT: 'Алтернативен текст (alt) - показва се ако изображението не е заредено' IMAGEALTTEXTDESC: 'Вижда се на екранните четци или ако картинката не може да бъде показана' - IMAGEDIMENSIONS: 'Размери' + IMAGEDIMENSIONS: Размери IMAGEHEIGHTPX: Височина IMAGETITLE: 'Описание (tooltip) - за допълнителна информация към изображението' IMAGETITLETEXT: 'Описание (tooltip)' @@ -506,16 +506,16 @@ bg: MENUTITLE: Сигурност MemberListCaution: 'Внимание: изтривайки потребители от този списък, ще ги премахне от всички групи и от базата данни.' NEWGROUP: 'Нова група' - PERMISSIONS: 'Разрешения' - ROLES: 'Роли' + PERMISSIONS: Разрешения + ROLES: Роли ROLESDESCRIPTION: 'Ролите са предварително зададени сетове от разрешения и могат да бъдат присвоявани на групи.
Ако е нужно, те се наследяват от родителските групи.' - TABROLES: 'Роли' + TABROLES: Роли Users: Потребители SecurityAdmin_MemberImportForm: BtnImport: 'Внасяне от CSV' FileFieldLabel: 'CSV файл (разширение: *.csv)' SilverStripeNavigator: - Edit: 'Редакция' + Edit: Редакция SimpleImageField: NOUPLOAD: 'Няма качени изображения' SiteTree: @@ -556,7 +556,7 @@ bg: DOEDIT: Запис DROPFILE: 'пуснете файл' DROPFILES: 'пускане на файлове' - Dimensions: 'Размери' + Dimensions: Размери EDIT: Edit EDITINFO: 'Редактирай този файл' FIELDNOTSET: 'Информация за файла не беше намерена' @@ -566,7 +566,7 @@ bg: HOTLINKINFO: 'Info: This image will be hotlinked. Please ensure you have permissions from the original site creator to do so.' MAXNUMBEROFFILES: 'Максималния брой файлове ({count}) е надхвърлен.' MAXNUMBEROFFILESSHORT: 'Максималният брой файлове за качване е {count}' - REMOVE: 'Премахни' + REMOVE: Премахни REMOVEERROR: 'Грешка при премахване на файл' REMOVEINFO: 'Премахни файла без да го изтриваш' STARTALL: 'Старт на всички' diff --git a/lang/bs.yml b/lang/bs.yml index 75da22bb7..b76aec716 100644 --- a/lang/bs.yml +++ b/lang/bs.yml @@ -293,7 +293,7 @@ bs: IMAGETITLE: 'Title text (tooltip) - for additional information about the image' IMAGETITLETEXT: 'Title text (tooltip)' IMAGETITLETEXTDESC: 'For additional information about the image' - IMAGEWIDTHPX: 'Širina' + IMAGEWIDTHPX: Širina INSERTMEDIA: 'Insert Media' LINK: Link LINKANCHOR: 'Sidro na ovoj stranici' @@ -365,7 +365,7 @@ bs: INVALIDNEWPASSWORD: 'We couldn''t accept that password: {password}' LOGGEDINAS: 'You''re logged in as {name}.' NEWPASSWORD: 'Nova šifra' - PASSWORD: 'Šifra' + PASSWORD: Šifra PLURALNAME: Members REMEMBERME: 'Zapamti me slijedeći put' SINGULARNAME: Member @@ -527,7 +527,7 @@ bs: ADDITEM: 'Add %s' TableListField: CSVEXPORT: 'Izvezi u CSV' - PRINT: 'Štampaj' + PRINT: Štampaj Print: Print SELECT: 'Select:' TableListField.ss: diff --git a/lang/ca.yml b/lang/ca.yml index 8d63d538b..686c6e767 100644 --- a/lang/ca.yml +++ b/lang/ca.yml @@ -304,7 +304,7 @@ ca: LINKINTERNAL: 'Pàgina del lloc web' LINKOPENNEWWIN: 'Obrir l''enllaç a una nova finestra?' LINKTO: 'Enllaça a' - PAGE: 'Pàgina' + PAGE: Pàgina URL: URL URLNOTANOEMBEDRESOURCE: 'The URL ''{url}'' could not be turned into a media resource.' UpdateMEDIA: 'Update Media' diff --git a/lang/cs.yml b/lang/cs.yml index 9b3aae84f..288366b07 100644 --- a/lang/cs.yml +++ b/lang/cs.yml @@ -293,7 +293,7 @@ cs: IMAGETITLE: 'Titul text (tooltip) - další informace o obrázku' IMAGETITLETEXT: 'Titulek textu (tooltip)' IMAGETITLETEXTDESC: 'Pro další informace o obrázku' - IMAGEWIDTHPX: 'Šířka' + IMAGEWIDTHPX: Šířka INSERTMEDIA: 'Vložit média' LINK: 'Vložit nebo upravit odkaz' LINKANCHOR: 'Záložka (kotva) na stránce' diff --git a/lang/el.yml b/lang/el.yml index 125a7aeba..767b28133 100644 --- a/lang/el.yml +++ b/lang/el.yml @@ -69,7 +69,7 @@ el: ACCESS: 'Access to ''{title}'' section' ACCESSALLINTERFACES: 'Access to all CMS sections' ACCESSALLINTERFACESHELP: 'Overrules more specific access settings.' - SAVE: 'Αποθήκευση' + SAVE: Αποθήκευση CMSProfileController: MENUTITLE: 'My Profile' ChangePasswordEmail.ss: diff --git a/lang/en.yml b/lang/en.yml index 4ff7b99a4..3c1d2561b 100644 --- a/lang/en.yml +++ b/lang/en.yml @@ -81,6 +81,18 @@ en: CheckboxField: NO: No YES: Yes + ComplexTableField: + CLOSEPOPUP: 'Close Popup' + SUCCESSADD2: 'Added {name}' + SUCCESSEDIT: 'Saved %s %s %s' + ComplexTableField.ss: + ADDITEM: 'Add %s' + NOITEMSFOUND: 'No items found' + SORTASC: 'Sort ascending' + SORTDESC: 'Sort descending' + ComplexTableField_popup.ss: + NEXT: Next + PREVIOUS: Previous ConfirmedPasswordField: ATLEAST: 'Passwords must be at least {min} characters long.' BETWEEN: 'Passwords must be {min} to {max} characters long.' @@ -163,7 +175,18 @@ en: XlsType: 'Excel spreadsheet' ZipType: 'ZIP compressed file' FileIFrameField: + ATTACH: 'Attach {type}' + ATTACHONCESAVED: '{type}s can be attached once you have saved the record for the first time.' ATTACHONCESAVED2: 'Files can be attached once you have saved the record for the first time.' + DELETE: 'Delete {type}' + DISALLOWEDFILETYPE: 'This filetype is not allowed to be uploaded' + FILE: File + FROMCOMPUTER: 'From your Computer' + FROMFILESTORE: 'From the File Store' + NOSOURCE: 'Please select a source file to attach' + REPLACE: 'Replace {type}' + FileIFrameField_iframe.ss: + TITLE: 'Image Uploading Iframe' Filesystem: SYNCRESULTS: 'Sync complete: {createdcount} items created, {deletedcount} items deleted' Folder: @@ -289,6 +312,8 @@ en: Image: PLURALNAME: Files SINGULARNAME: File + ImageField: + IMAGE: Image Image_Cached: PLURALNAME: Files SINGULARNAME: File @@ -451,6 +476,10 @@ en: UserPermissionsIntro: 'Assigning groups to this user will adjust the permissions they have. See the groups section for details of permissions on individual groups.' PhoneNumberField: VALIDATION: 'Please enter a valid phone number' + RelationComplexTableField.ss: + ADD: Add + CSVEXPORT: 'Export to CSV' + NOTFOUND: 'No items found' Security: ALREADYLOGGEDIN: 'You don''t have access to this page. If you have another account that can access that page, you can log in again below.' BUTTONSEND: 'Send me the password reset link' @@ -488,13 +517,32 @@ en: FileFieldLabel: 'CSV File (Allowed extensions: *.csv)' SilverStripeNavigator: Edit: Edit + SimpleImageField: + NOUPLOAD: 'No Image Uploaded' SiteTree: TABMAIN: Main + TableField: + ISREQUIRED: 'In %s ''%s'' is required' + TableField.ss: + ADD: 'Add a new row' + ADDITEM: 'Add %s' TableListField: CSVEXPORT: 'Export to CSV' + PRINT: Print Print: Print + SELECT: 'Select:' + TableListField.ss: + NOITEMSFOUND: 'No items found' + SORTASC: 'Sort in ascending order' + SORTDESC: 'Sort in descending order' TableListField_PageControls.ss: + DISPLAYING: Displaying OF: of + TO: to + VIEWFIRST: 'View first' + VIEWLAST: 'View last' + VIEWNEXT: 'View next' + VIEWPREVIOUS: 'View previous' TimeField: VALIDATEFORMAT: 'Please enter a valid time format ({format})' ToggleField: diff --git a/lang/et_EE.yml b/lang/et_EE.yml index 3d3b6b3e0..a6224ac46 100644 --- a/lang/et_EE.yml +++ b/lang/et_EE.yml @@ -210,7 +210,7 @@ et_EE: FormField: NONE: puudub GridAction: - DELETE_DESCRIPTION: Delete + DELETE_DESCRIPTION: Kustuta Delete: Delete UnlinkRelation: Unlink GridField: @@ -334,7 +334,7 @@ et_EE: VersionUnknown: unknown LeftAndMain_Menu.ss: Hello: Hi - LOGOUT: 'Log out' + LOGOUT: 'Logi välja' LoginAttempt: Email: 'E-posti aadress' IP: 'IP Aadress' @@ -515,7 +515,7 @@ et_EE: BtnImport: 'Import from CSV' FileFieldLabel: 'CSV File (Allowed extensions: *.csv)' SilverStripeNavigator: - Edit: Edit + Edit: Muuda SimpleImageField: NOUPLOAD: 'Pilte pole üles laaditud' SiteTree: diff --git a/lang/fa_IR.yml b/lang/fa_IR.yml index ee292c970..4d691696e 100644 --- a/lang/fa_IR.yml +++ b/lang/fa_IR.yml @@ -9,7 +9,7 @@ fa_IR: FOLDER: Folder LASTEDIT: 'آخرین تغییرات' OWNER: دارنده - SIZE: 'حجم' + SIZE: حجم TITLE: عنوان TYPE: نوع URL: نشانی @@ -75,7 +75,7 @@ fa_IR: ChangePasswordEmail.ss: CHANGEPASSWORDTEXT1: 'شما گذرواژه تان را دگرگون کردید برای' CHANGEPASSWORDTEXT2: 'You can now use the following credentials to log in:' - EMAIL: 'ايميل' + EMAIL: ايميل HELLO: درود PASSWORD: 'كلمه عبور' CheckboxField: @@ -100,9 +100,9 @@ fa_IR: SHOWONCLICKTITLE: 'تغيير كلمه عبور' CreditCardField: FIRST: نخست - FOURTH: 'چهارم' - SECOND: 'دوم' - THIRD: 'سوم' + FOURTH: چهارم + SECOND: دوم + THIRD: سوم CurrencyField: CURRENCYSYMBOL: $ DataObject: @@ -115,7 +115,7 @@ fa_IR: HOURS: ساعت MIN: دقیقه MINS: دقیقه - MONTH: 'ماه' + MONTH: ماه MONTHS: 'ماه ها' SEC: ثانیه SECS: ثانیه @@ -125,7 +125,7 @@ fa_IR: YEARS: سال DateField: NOTSET: 'not set' - TODAY: 'امروز' + TODAY: امروز VALIDDATEFORMAT2: 'Please enter a valid date format ({format})' VALIDDATEMAXDATE: 'Your date has to be older or matching the maximum allowed date ({date})' VALIDDATEMINDATE: 'Your date has to be newer or matching the minimum allowed date ({date})' @@ -144,7 +144,7 @@ fa_IR: ANY: Any File: AviType: 'AVI video file' - Content: 'محتوا' + Content: محتوا CssType: 'CSS file' DmgType: 'Apple disk image' DocType: 'Word document' @@ -162,7 +162,7 @@ fa_IR: MpgType: 'MPEG video file' NOFILESIZE: 'Filesize is zero bytes.' NOVALIDUPLOAD: 'File is not a valid upload' - Name: 'نام' + Name: نام PLURALNAME: 'فايل ها' PdfType: 'Adobe Acrobat PDF file' PngType: 'PNG image - good general-purpose format' @@ -253,7 +253,7 @@ fa_IR: RolesAddEditLink: 'اضافه/ویرایش وظیفه' SINGULARNAME: Group Sort: 'تربیت چیدن' - has_many_Permissions: 'مجوز‌ها' + has_many_Permissions: مجوز‌ها many_many_Members: اعضاء GroupImportForm: Help1: '

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

' @@ -322,7 +322,7 @@ fa_IR: CANT_REORGANISE: 'You do not have permission to alter Top level pages. Your change was not saved.' DELETED: Deleted. DropdownBatchActionsDefault: Actions - HELP: 'کمک' + HELP: کمک PAGETYPE: 'نوع صفحه' PERMAGAIN: 'شما از سیستم مدیریت محتوا خارج شده اید.اگر میخواهید دوباره وارد شوید نام کاربری و رمز عبور خود را در قسمت زیر وارد کنید' PERMALREADY: 'من متاسفم، شما نمی توانید به آن قسمت از سیستم مدیریت محتوا دسترسی پیدا کنید. اگر میخواهید به عنوان شخص دیگری وارد شوید از قسمت زیر تلاش کنید' @@ -360,7 +360,7 @@ fa_IR: ERRORNEWPASSWORD: 'You have entered your new password differently, try again' ERRORPASSWORDNOTMATCH: 'Your current password does not match, please try again' ERRORWRONGCRED: 'That doesn''t seem to be the right e-mail address or password. Please try again.' - FIRSTNAME: 'نام' + FIRSTNAME: نام INTERFACELANG: 'زبان برنامه' INVALIDNEWPASSWORD: 'We couldn''t accept that password: {password}' LOGGEDINAS: 'You''re logged in as {name}.' diff --git a/lang/fr.yml b/lang/fr.yml index 56722d69a..676c8fdd5 100644 --- a/lang/fr.yml +++ b/lang/fr.yml @@ -537,7 +537,7 @@ fr: TableListField_PageControls.ss: DISPLAYING: 'Affichage de' OF: de - TO: 'à' + TO: à VIEWFIRST: 'Voir premier' VIEWLAST: 'Voir dernier' VIEWNEXT: 'Voir suivant' diff --git a/lang/he_IL.yml b/lang/he_IL.yml index 5f888e97b..f2298d7c2 100644 --- a/lang/he_IL.yml +++ b/lang/he_IL.yml @@ -117,12 +117,12 @@ he_IL: MINS: דקות MONTH: חודש MONTHS: חודשים - SEC: 'שניה' - SECS: 'שניות' + SEC: שניה + SECS: שניות TIMEDIFFAGO: '{difference} ago' TIMEDIFFIN: 'in {difference}' - YEAR: 'שנה' - YEARS: 'שנים' + YEAR: שנה + YEARS: שנים DateField: NOTSET: 'not set' TODAY: today @@ -272,7 +272,7 @@ he_IL: BUTTONREMOVELINK: 'הסר קישור' BUTTONUpdate: Update CAPTIONTEXT: 'Caption text' - CSSCLASS: 'יישור/סגנון' + CSSCLASS: יישור/סגנון CSSCLASSCENTER: 'ממורכז, ללא טקסט בצדדים.' CSSCLASSLEFT: 'לשמאל, עם טקסט מסודר מסביב.' CSSCLASSLEFTALONE: 'On the left, on its own.' diff --git a/lang/hi.yml b/lang/hi.yml new file mode 100644 index 000000000..6a3225755 --- /dev/null +++ b/lang/hi.yml @@ -0,0 +1,576 @@ +hi: + AssetAdmin: + ALLOWEDEXTS: 'Allowed extensions' + NEWFOLDER: NewFolder + AssetTableField: + CREATED: 'First uploaded' + DIM: Dimensions + FILENAME: Filename + FOLDER: Folder + LASTEDIT: 'Last changed' + OWNER: Owner + SIZE: 'File size' + TITLE: Title + TYPE: 'File type' + URL: URL + AssetUploadField: + ChooseFiles: 'Choose files' + DRAGFILESHERE: 'Drag files here' + DROPAREA: 'Drop Area' + EDITALL: 'Edit all' + EDITANDORGANIZE: 'Edit & organize' + EDITINFO: 'Edit files' + FILES: Files + FROMCOMPUTER: 'Choose files from your computer' + FROMCOMPUTERINFO: 'Upload from your computer' + TOTAL: Total + TOUPLOAD: 'Choose files to upload...' + UPLOADINPROGRESS: 'Please wait… upload in progress' + UPLOADOR: OR + BBCodeParser: + ALIGNEMENT: Alignment + ALIGNEMENTEXAMPLE: 'right aligned' + BOLD: 'Bold Text' + BOLDEXAMPLE: Bold + CODE: 'Code Block' + CODEDESCRIPTION: 'Unformatted code block' + CODEEXAMPLE: 'Code block' + COLORED: 'Colored text' + COLOREDEXAMPLE: 'blue text' + EMAILLINK: 'Email link' + EMAILLINKDESCRIPTION: 'Create link to an email address' + IMAGE: Image + IMAGEDESCRIPTION: 'Show an image in your post' + ITALIC: 'Italic Text' + ITALICEXAMPLE: Italics + LINK: 'Website link' + LINKDESCRIPTION: 'Link to another website or URL' + STRUCK: 'Struck-out Text' + STRUCKEXAMPLE: Struck-out + UNDERLINE: 'Underlined Text' + UNDERLINEEXAMPLE: Underlined + UNORDERED: 'Unordered list' + UNORDEREDDESCRIPTION: 'Unordered list' + UNORDEREDEXAMPLE1: 'unordered item 1' + BackLink_Button.ss: + Back: Back + BasicAuth: + ENTERINFO: 'Please enter a username and password.' + ERRORNOTADMIN: 'That user is not an administrator.' + ERRORNOTREC: 'That username / password isn''t recognised' + Boolean: + 0: 'False' + ANY: Any + 1: 'True' + CMSLoadingScreen.ss: + LOADING: Loading... + REQUIREJS: 'The CMS requires that you have JavaScript enabled.' + CMSMain: + ACCESS: 'Access to ''{title}'' section' + ACCESSALLINTERFACES: 'Access to all CMS sections' + ACCESSALLINTERFACESHELP: 'Overrules more specific access settings.' + SAVE: Save + CMSProfileController: + MENUTITLE: 'My Profile' + ChangePasswordEmail.ss: + CHANGEPASSWORDTEXT1: 'You changed your password for' + CHANGEPASSWORDTEXT2: 'You can now use the following credentials to log in:' + EMAIL: Email + HELLO: Hi + PASSWORD: Password + CheckboxField: + - 'False' + - 'True' + ComplexTableField: + CLOSEPOPUP: 'Close Popup' + SUCCESSADD2: 'Added {name}' + SUCCESSEDIT: 'Saved %s %s %s' + ComplexTableField.ss: + ADDITEM: 'Add %s' + NOITEMSFOUND: 'No items found' + SORTASC: 'Sort ascending' + SORTDESC: 'Sort descending' + ComplexTableField_popup.ss: + NEXT: Next + PREVIOUS: Previous + ConfirmedPasswordField: + ATLEAST: 'Passwords must be at least {min} characters long.' + BETWEEN: 'Passwords must be {min} to {max} characters long.' + MAXIMUM: 'Passwords must be at most {max} characters long.' + SHOWONCLICKTITLE: 'Change Password' + CreditCardField: + FIRST: first + FOURTH: fourth + SECOND: second + THIRD: third + CurrencyField: + CURRENCYSYMBOL: $ + DataObject: + PLURALNAME: 'Data Objects' + SINGULARNAME: 'Data Object' + Date: + DAY: ' day' + DAYS: ' days' + HOUR: ' hour' + HOURS: ' hours' + MIN: ' min' + MINS: ' mins' + MONTH: ' month' + MONTHS: ' months' + SEC: ' sec' + SECS: ' secs' + TIMEDIFFAGO: '{difference} ago' + TIMEDIFFIN: 'in {difference}' + YEAR: ' year' + YEARS: ' years' + DateField: + NOTSET: 'not set' + TODAY: आज + VALIDDATEFORMAT2: 'Please enter a valid date format ({format})' + VALIDDATEMAXDATE: 'Your date has to be older or matching the maximum allowed date ({date})' + VALIDDATEMINDATE: 'Your date has to be newer or matching the minimum allowed date ({date})' + DatetimeField: + NOTSET: 'Not set' + Director: + INVALID_REQUEST: 'Invalid request' + DropdownField: + CHOOSE: (Choose) + EmailField: + VALIDATION: 'Please enter an email address' + Email_BounceRecord: + PLURALNAME: 'Email Bounce Records' + SINGULARNAME: 'Email Bounce Record' + Enum: + ANY: Any + File: + AviType: 'AVI video file' + Content: Content + CssType: 'CSS file' + DmgType: 'Apple disk image' + DocType: 'Word document' + Filename: Filename + GifType: 'GIF image - good for diagrams' + GzType: 'GZIP compressed file' + HtlType: 'HTML file' + HtmlType: 'HTML file' + INVALIDEXTENSION: 'Extension is not allowed (valid: {extensions})' + INVALIDEXTENSIONSHORT: 'Extension is not allowed' + IcoType: 'Icon image' + JpgType: 'JPEG image - good for photos' + JsType: 'Javascript file' + Mp3Type: 'MP3 audio file' + MpgType: 'MPEG video file' + NOFILESIZE: 'Filesize is zero bytes.' + NOVALIDUPLOAD: 'File is not a valid upload' + Name: Name + PLURALNAME: Files + PdfType: 'Adobe Acrobat PDF file' + PngType: 'PNG image - good general-purpose format' + SINGULARNAME: File + TOOLARGE: 'Filesize is too large, maximum {size} allowed' + TOOLARGESHORT: 'Filesize exceeds {size}' + TiffType: 'Tagged image format' + Title: Title + WavType: 'WAV audo file' + XlsType: 'Excel spreadsheet' + ZipType: 'ZIP compressed file' + FileIFrameField: + ATTACH: 'Attach {type}' + ATTACHONCESAVED: '{type}s can be attached once you have saved the record for the first time.' + ATTACHONCESAVED2: 'Files can be attached once you have saved the record for the first time.' + DELETE: 'Delete {type}' + DISALLOWEDFILETYPE: 'This filetype is not allowed to be uploaded' + FILE: File + FROMCOMPUTER: 'From your Computer' + FROMFILESTORE: 'From the File Store' + NOSOURCE: 'Please select a source file to attach' + REPLACE: 'Replace {type}' + FileIFrameField_iframe.ss: + TITLE: 'Image Uploading Iframe' + Filesystem: + SYNCRESULTS: 'Sync complete: {createdcount} items created, {deletedcount} items deleted' + Folder: + PLURALNAME: Folders + SINGULARNAME: Folder + ForgotPasswordEmail.ss: + HELLO: Hi + TEXT1: 'Here is your' + TEXT2: 'password reset link' + TEXT3: for + Form: + FIELDISREQUIRED: '%s is required' + SubmitBtnLabel: Go + VALIDATIONCREDITNUMBER: 'Please ensure you have entered the {number} credit card number correctly' + VALIDATIONNOTUNIQUE: 'The value entered is not unique' + VALIDATIONPASSWORDSDONTMATCH: 'Passwords don''t match' + VALIDATIONPASSWORDSNOTEMPTY: 'Passwords can''t be empty' + VALIDATIONSTRONGPASSWORD: 'Passwords must have at least one digit and one alphanumeric character' + VALIDATOR: Validator + VALIDCURRENCY: 'Please enter a valid currency' + FormField: + NONE: none + GridAction: + DELETE_DESCRIPTION: Delete + Delete: Delete + UnlinkRelation: Unlink + GridField: + Add: 'Add {name}' + Filter: Filter + FilterBy: 'Filter by ' + Find: Find + LEVELUP: 'Level up' + LinkExisting: 'Link Existing' + NewRecord: 'New %s' + NoItemsFound: 'No items found' + PRINTEDAT: 'Printed at' + PRINTEDBY: 'Printed by' + PlaceHolder: 'Find {type}' + PlaceHolderWithLabels: 'Find {type} by {name}' + RelationSearch: 'Relation search' + ResetFilter: Reset + GridFieldAction_Delete: + DeletePermissionsFailure: 'No delete permissions' + GridFieldDetailForm: + CancelBtn: Cancel + Create: Create + Delete: Delete + DeletePermissionsFailure: 'No delete permissions' + Deleted: 'Deleted %s %s' + Save: Save + Saved: 'Saved %s %s' + GridFieldItemEditView.ss: null + Group: + AddRole: 'इस समूह के लिए एक भूमिका जोड़ें' + Code: 'समूह कोड' + DefaultGroupTitleAdministrators: प्रबंधक + DefaultGroupTitleContentAuthors: 'सामग्री लेखक' + Description: विवरण + GroupReminder: 'If you choose a parent group, this group will take all it''s roles' + Locked: 'बंद?' + NoRoles: 'कोई भी भूमिका नहीं खोजी जा सकी ' + PLURALNAME: Groups + Parent: 'अभिभावक समूह' + RolesAddEditLink: 'भूमिकाओं का प्रबंधन करे ' + SINGULARNAME: Group + Sort: 'Sort Order' + has_many_Permissions: अनुमतियाँ + many_many_Members: सदस्य + GroupImportForm: + Help1: '

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

' + Help2: '

Advanced usage

' + ResultCreated: 'Created {count} groups' + ResultDeleted: 'Deleted %d groups' + ResultUpdated: 'Updated %d groups' + Hierarchy: + InfiniteLoopNotAllowed: 'Infinite loop found within the "{type}" hierarchy. Please change the parent to resolve this' + HtmlEditorField: + ADDURL: 'Add URL' + ADJUSTDETAILSDIMENSIONS: 'Details & dimensions' + ANCHORVALUE: Anchor + BUTTONINSERT: Insert + BUTTONINSERTLINK: 'Insert link' + BUTTONREMOVELINK: 'Remove link' + BUTTONUpdate: Update + CAPTIONTEXT: 'Caption text' + CSSCLASS: 'Alignment / style' + CSSCLASSCENTER: 'Centered, on its own.' + CSSCLASSLEFT: 'On the left, with text wrapping around.' + CSSCLASSLEFTALONE: 'On the left, on its own.' + CSSCLASSRIGHT: 'On the right, with text wrapping around.' + DETAILS: Details + EMAIL: 'Email address' + FILE: File + FOLDER: Folder + FROMCMS: 'From the CMS' + FROMCOMPUTER: 'From your computer' + FROMWEB: 'From the web' + FindInFolder: 'Find in Folder' + IMAGEALT: 'Alternative text (alt)' + IMAGEALTTEXT: 'Alternative text (alt) - shown if image cannot be displayed' + IMAGEALTTEXTDESC: 'Shown to screen readers or if image can not be displayed' + IMAGEDIMENSIONS: Dimensions + IMAGEHEIGHTPX: Height + IMAGETITLE: 'Title text (tooltip) - for additional information about the image' + IMAGETITLETEXT: 'Title text (tooltip)' + IMAGETITLETEXTDESC: 'For additional information about the image' + IMAGEWIDTHPX: Width + INSERTMEDIA: 'Insert Media' + LINK: 'Insert Link' + LINKANCHOR: 'Anchor on this page' + LINKDESCR: 'Link description' + LINKEMAIL: 'Email address' + LINKEXTERNAL: 'Another website' + LINKFILE: 'Download a file' + LINKINTERNAL: 'Page on the site' + LINKOPENNEWWIN: 'Open link in a new window?' + LINKTO: 'Link to' + PAGE: Page + URL: URL + URLNOTANOEMBEDRESOURCE: 'The URL ''{url}'' could not be turned into a media resource.' + UpdateMEDIA: 'Update Media' + Image: + PLURALNAME: Files + SINGULARNAME: File + ImageField: + IMAGE: Image + Image_Cached: + PLURALNAME: Files + SINGULARNAME: File + Image_iframe.ss: + TITLE: 'Image Uploading Iframe' + LeftAndMain: + CANT_REORGANISE: 'You do not have permission to alter Top level pages. Your change was not saved.' + DELETED: Deleted. + DropdownBatchActionsDefault: Actions + HELP: Help + PAGETYPE: 'Page type: ' + PERMAGAIN: 'You have been logged out of the CMS. If you would like to log in again, enter a username and password below.' + PERMALREADY: 'I''m sorry, but you can''t access that part of the CMS. If you want to log in as someone else, do so below' + PERMDEFAULT: 'Please choose an authentication method and enter your credentials to access the CMS.' + PLEASESAVE: 'Please Save Page: This page could not be upated because it hasn''t been saved yet.' + PreviewButton: Preview + REORGANISATIONSUCCESSFUL: 'Reorganised the site tree successfully.' + SAVEDUP: Saved. + VersionUnknown: unknown + LeftAndMain_Menu.ss: + Hello: Hi + LOGOUT: 'Log out' + LoginAttempt: + Email: 'Email Address' + IP: 'IP Address' + PLURALNAME: 'Login Attempts' + SINGULARNAME: 'Login Attempt' + Status: Status + Member: + ADDGROUP: 'Add group' + BUTTONCHANGEPASSWORD: 'Change Password' + BUTTONLOGIN: 'Log in' + BUTTONLOGINOTHER: 'Log in as someone else' + BUTTONLOSTPASSWORD: 'I''ve lost my password' + CANTEDIT: 'You don''t have permission to do that' + CONFIRMNEWPASSWORD: 'Confirm New Password' + CONFIRMPASSWORD: 'Confirm Password' + DATEFORMAT: 'Date format' + DefaultAdminFirstname: 'Default Admin' + DefaultDateTime: default + EMAIL: Email + EMPTYNEWPASSWORD: 'The new password can''t be empty, please try again' + ENTEREMAIL: 'Please enter an email address to get a password reset link.' + ERRORLOCKEDOUT: 'Your account has been temporarily disabled because of too many failed attempts at logging in. Please try again in 20 minutes.' + ERRORNEWPASSWORD: 'You have entered your new password differently, try again' + ERRORPASSWORDNOTMATCH: 'Your current password does not match, please try again' + ERRORWRONGCRED: 'That doesn''t seem to be the right e-mail address or password. Please try again.' + FIRSTNAME: 'First Name' + INTERFACELANG: 'Interface Language' + INVALIDNEWPASSWORD: 'We couldn''t accept that password: {password}' + LOGGEDINAS: 'You''re logged in as {name}.' + NEWPASSWORD: 'New Password' + PASSWORD: Password + PLURALNAME: Members + REMEMBERME: 'Remember me next time?' + SINGULARNAME: Member + SUBJECTPASSWORDCHANGED: 'Your password has been changed' + SUBJECTPASSWORDRESET: 'Your password reset link' + SURNAME: Surname + TIMEFORMAT: 'Time format' + VALIDATIONMEMBEREXISTS: 'A member already exists with the same %s' + ValidationIdentifierFailed: 'Can''t overwrite existing member #{id} with identical identifier ({name} = {value}))' + WELCOMEBACK: 'Welcome Back, {firstname}' + YOUROLDPASSWORD: 'Your old password' + belongs_many_many_Groups: Groups + db_LastVisited: 'Last Visited Date' + db_Locale: 'Interface Locale' + db_LockedOutUntil: 'Locked out until' + db_NumVisit: 'Number of Visits' + db_Password: Password + db_PasswordExpiry: 'Password Expiry Date' + MemberAuthenticator: + TITLE: 'E-mail & Password' + MemberDatetimeOptionsetField: + AMORPM: 'AM (Ante meridiem) or PM (Post meridiem)' + 'APPLY FILTER': 'Apply Filter' + Custom: Custom + DATEFORMATBAD: 'Date format is invalid' + DAYNOLEADING: 'Day of month without leading zero' + DIGITSDECFRACTIONSECOND: 'One or more digits representing a decimal fraction of a second' + FOURDIGITYEAR: 'Four-digit year' + FULLNAMEMONTH: 'Full name of month (e.g. June)' + HOURNOLEADING: 'Hour without leading zero' + MINUTENOLEADING: 'Minute without leading zero' + MONTHNOLEADING: 'Month digit without leading zero' + Preview: Preview + SHORTMONTH: 'Short name of month (e.g. Jun)' + TOGGLEHELP: 'Toggle formatting help' + TWODIGITDAY: 'Two-digit day of month' + TWODIGITHOUR: 'Two digits of hour (00 through 23)' + TWODIGITMINUTE: 'Two digits of minute (00 through 59)' + TWODIGITMONTH: 'Two-digit month (01=January, etc.)' + TWODIGITSECOND: 'Two digits of second (00 through 59)' + TWODIGITYEAR: 'Two-digit year' + MemberImportForm: + Help1: '

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

' + Help2: '

Advanced usage

' + ResultCreated: 'Created {count} members' + ResultDeleted: 'Deleted %d members' + ResultNone: 'No changes' + ResultUpdated: 'Updated {count} members' + MemberPassword: + PLURALNAME: 'Member Passwords' + SINGULARNAME: 'Member Password' + MemberTableField: null + ModelAdmin: + DELETE: Delete + DELETEDRECORDS: 'Deleted {count} records.' + EMPTYBEFOREIMPORT: 'Clear Database before import' + IMPORT: 'Import from CSV' + IMPORTEDRECORDS: 'Imported {count} records.' + NOCSVFILE: 'Please browse for a CSV file to import' + NOIMPORT: 'Nothing to import' + RESET: Reset + Title: 'Data Models' + UPDATEDRECORDS: 'Updated {count} records.' + ModelAdmin_ImportSpec.ss: + IMPORTSPECFIELDS: 'Database columns' + IMPORTSPECLINK: 'Show Specification for %s' + IMPORTSPECRELATIONS: Relations + IMPORTSPECTITLE: 'Specification for %s' + ModelAdmin_Tools.ss: + FILTER: Filter + IMPORT: Import + ModelSidebar.ss: + IMPORT_TAB_HEADER: Import + SEARCHLISTINGS: Search + MoneyField: + FIELDLABELAMOUNT: Amount + FIELDLABELCURRENCY: Currency + NullableField: + IsNullLabel: 'Is Null' + NumericField: + VALIDATION: '''{value}'' is not a number, only numbers can be accepted for this field' + Pagination: + Page: Page + View: View + Permission: + AdminGroup: Administrator + CMS_ACCESS_CATEGORY: 'CMS Access' + FULLADMINRIGHTS: 'Full administrative rights' + FULLADMINRIGHTS_HELP: 'Implies and overrules all other assigned permissions.' + PLURALNAME: Permissions + SINGULARNAME: Permission + PermissionCheckboxSetField: + AssignedTo: 'assigned to "{title}"' + FromGroup: 'inherited from group "{title}"' + FromRole: 'inherited from role "{title}"' + FromRoleOnGroup: 'inherited from role "%s" on group "%s"' + PermissionRole: + OnlyAdminCanApply: 'Only admin can apply' + PLURALNAME: Roles + SINGULARNAME: Role + Title: Title + PermissionRoleCode: + PLURALNAME: 'Permission Role Cods' + SINGULARNAME: 'Permission Role Code' + Permissions: + PERMISSIONS_CATEGORY: 'Roles and access permissions' + UserPermissionsIntro: 'Assigning groups to this user will adjust the permissions they have. See the groups section for details of permissions on individual groups.' + PhoneNumberField: + VALIDATION: 'Please enter a valid phone number' + RelationComplexTableField.ss: + ADD: Add + CSVEXPORT: 'Export to CSV' + NOTFOUND: 'No items found' + Security: + ALREADYLOGGEDIN: 'You don''t have access to this page. If you have another account that can access that page, you can log in again below.' + BUTTONSEND: 'Send me the password reset link' + CHANGEPASSWORDBELOW: 'You can change your password below.' + CHANGEPASSWORDHEADER: 'Change your password' + ENTERNEWPASSWORD: 'Please enter a new password.' + ERRORPASSWORDPERMISSION: 'You must be logged in in order to change your password!' + LOGGEDOUT: 'You have been logged out. If you would like to log in again, enter your credentials below.' + LOGIN: 'Log in' + NOTEPAGESECURED: 'That page is secured. Enter your credentials below and we will send you right along.' + NOTERESETLINKINVALID: '

The password reset link is invalid or expired.

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

' + NOTERESETPASSWORD: 'Enter your e-mail address and we will send you a link with which you can reset your password' + PASSWORDSENTHEADER: 'Password reset link sent to ''{email}''' + PASSWORDSENTTEXT: 'Thank you! A reset link has been sent to ''{email}'', provided an account exists for this email address.' + SecurityAdmin: + ACCESS_HELP: 'Allow viewing, adding and editing users, as well as assigning permissions and roles to them.' + APPLY_ROLES: 'Apply roles to groups' + APPLY_ROLES_HELP: 'Ability to edit the roles assigned to a group. Requires the "Access to ''Users'' section" permission.' + EDITPERMISSIONS: 'Manage permissions for groups' + EDITPERMISSIONS_HELP: 'Ability to edit Permissions and IP Addresses for a group. Requires the "Access to ''Security'' section" permission.' + GROUPNAME: 'Group name' + IMPORTGROUPS: 'Import groups' + IMPORTUSERS: 'Import users' + MEMBERS: Members + MENUTITLE: Security + MemberListCaution: 'Caution: Removing members from this list will remove them from all groups and the database' + NEWGROUP: 'New Group' + PERMISSIONS: Permissions + ROLES: Roles + ROLESDESCRIPTION: 'Roles are predefined sets of permissions, and can be assigned to groups.
They are inherited from parent groups if required.' + TABROLES: Roles + Users: Users + SecurityAdmin_MemberImportForm: + BtnImport: 'Import from CSV' + FileFieldLabel: 'CSV File (Allowed extensions: *.csv)' + SilverStripeNavigator: + Edit: Edit + SimpleImageField: + NOUPLOAD: 'No Image Uploaded' + SiteTree: + TABMAIN: Main + TableField: + ISREQUIRED: 'In %s ''%s'' is required' + TableField.ss: + ADD: 'Add a new row' + ADDITEM: 'Add %s' + TableListField: + CSVEXPORT: 'Export to CSV' + PRINT: Print + Print: Print + SELECT: 'Select:' + TableListField.ss: + NOITEMSFOUND: 'No items found' + SORTASC: 'Sort in ascending order' + SORTDESC: 'Sort in descending order' + TableListField_PageControls.ss: + DISPLAYING: Displaying + OF: of + TO: to + VIEWFIRST: 'View first' + VIEWLAST: 'View last' + VIEWNEXT: 'View next' + VIEWPREVIOUS: 'View previous' + TimeField: + VALIDATEFORMAT: 'Please enter a valid time format ({format})' + ToggleField: + LESS: less + MORE: more + UploadField: + ATTACHFILE: 'Attach a file' + ATTACHFILES: 'Attach files' + AttachFile: 'Attach file(s)' + DELETE: 'Delete from files' + DELETEINFO: 'Permanently delete this file from the file store' + DOEDIT: Save + DROPFILE: 'drop a file' + DROPFILES: 'drop files' + Dimensions: Dimensions + EDIT: Edit + EDITINFO: 'Edit this file' + FIELDNOTSET: 'File information not found' + FROMCOMPUTER: 'From your computer' + FROMCOMPUTERINFO: 'Select from files' + FROMFILES: 'From files' + HOTLINKINFO: 'Info: This image will be hotlinked. Please ensure you have permissions from the original site creator to do so.' + MAXNUMBEROFFILES: 'Max number of {count} file(s) exceeded.' + MAXNUMBEROFFILESSHORT: 'Can only upload {count} files' + REMOVE: Remove + REMOVEERROR: 'Error removing file' + REMOVEINFO: 'Remove this file from here, but do not delete it from the file store' + STARTALL: 'Start all' + STARTALLINFO: 'Start all uploads' + Saved: Saved + Versioned: + has_many_Versions: Versions diff --git a/lang/hr.yml b/lang/hr.yml index 2d3054f49..fd35948a5 100644 --- a/lang/hr.yml +++ b/lang/hr.yml @@ -293,7 +293,7 @@ hr: IMAGETITLE: 'Title text (tooltip) - for additional information about the image' IMAGETITLETEXT: 'Title text (tooltip)' IMAGETITLETEXTDESC: 'For additional information about the image' - IMAGEWIDTHPX: 'Širina' + IMAGEWIDTHPX: Širina INSERTMEDIA: 'Insert Media' LINK: 'Ubaci/editiraj link za označeni tekst' LINKANCHOR: 'Anchor on this page' diff --git a/lang/ja_JP.yml b/lang/ja_JP.yml index 64fc5eca9..d2c6102a3 100644 --- a/lang/ja_JP.yml +++ b/lang/ja_JP.yml @@ -8,7 +8,7 @@ ja_JP: FILENAME: ファイル名 FOLDER: フォルダ LASTEDIT: 最終更新日 - OWNER: '所有者' + OWNER: 所有者 SIZE: ファイルサイズ TITLE: タイトル TYPE: ファイルの種類 @@ -16,7 +16,7 @@ ja_JP: AssetUploadField: ChooseFiles: ファイルを選択 DRAGFILESHERE: ここにファイルをドラッグ - DROPAREA: 'ドロップ領域' + DROPAREA: ドロップ領域 EDITALL: すべて編集 EDITANDORGANIZE: 編集と管理 EDITINFO: ファイルを編集 @@ -25,7 +25,7 @@ ja_JP: FROMCOMPUTERINFO: コンピュータからアップロード TOTAL: 合計 TOUPLOAD: 'Choose files to upload...' - UPLOADINPROGRESS: 'しばらくお待ちください...アップロードは進行中です' + UPLOADINPROGRESS: しばらくお待ちください...アップロードは進行中です UPLOADOR: もしくは BBCodeParser: ALIGNEMENT: 整列 @@ -44,7 +44,7 @@ ja_JP: ITALIC: テキストを斜体にする ITALICEXAMPLE: 斜体 LINK: ウェブサイトのリンク - LINKDESCRIPTION: '別のウェブサイトかURLにリンクしてください' + LINKDESCRIPTION: 別のウェブサイトかURLにリンクしてください STRUCK: テキストに取り消し線を引く STRUCKEXAMPLE: 取り消し線 UNDERLINE: テキストに下線を引く @@ -55,8 +55,8 @@ ja_JP: BackLink_Button.ss: Back: 戻る BasicAuth: - ENTERINFO: 'ユーザー名とパスワードを入力してください' - ERRORNOTADMIN: 'このユーザーは管理者(アドミニストレーター)ではありません' + ENTERINFO: ユーザー名とパスワードを入力してください + ERRORNOTADMIN: このユーザーは管理者(アドミニストレーター)ではありません ERRORNOTREC: 'ユーザー名 / パスワードは認識されませんでした' Boolean: 0: 偽 @@ -64,7 +64,7 @@ ja_JP: 1: 真 CMSLoadingScreen.ss: LOADING: 読み込み中... - REQUIREJS: 'CMSを利用するにはJavascriptが有効化されている必要があります。' + REQUIREJS: CMSを利用するにはJavascriptが有効化されている必要があります。 CMSMain: ACCESS: 'Access to ''{title}'' section' ACCESSALLINTERFACES: すべてのCMSのセクションへアクセス @@ -87,9 +87,9 @@ ja_JP: SUCCESSEDIT: '更新日時 %s %s %s' ComplexTableField.ss: ADDITEM: '%sを追加する' - NOITEMSFOUND: '項目が見つかりませんでした' - SORTASC: '昇順' - SORTDESC: 'ソート(下順)' + NOITEMSFOUND: 項目が見つかりませんでした + SORTASC: 昇順 + SORTDESC: ソート(下順) ComplexTableField_popup.ss: NEXT: 次へ PREVIOUS: 前へ @@ -136,7 +136,7 @@ ja_JP: DropdownField: CHOOSE: (選択) EmailField: - VALIDATION: 'メールアドレスを入力してください' + VALIDATION: メールアドレスを入力してください Email_BounceRecord: PLURALNAME: 'Eメール 反応記録' SINGULARNAME: 'Eメール 反応記録' @@ -144,7 +144,7 @@ ja_JP: ANY: 何でも File: AviType: 'AVI video file' - Content: '内容' + Content: 内容 CssType: 'CSS file' DmgType: 'Apple disk image' DocType: 'Word document' @@ -201,7 +201,7 @@ ja_JP: FIELDISREQUIRED: '%s が必要です' SubmitBtnLabel: Go VALIDATIONCREDITNUMBER: 'Please ensure you have entered the {number} credit card number correctly' - VALIDATIONNOTUNIQUE: '入力された値はユニークではありません' + VALIDATIONNOTUNIQUE: 入力された値はユニークではありません VALIDATIONPASSWORDSDONTMATCH: パスワードが一致しません VALIDATIONPASSWORDSNOTEMPTY: パスワードが空欄です VALIDATIONSTRONGPASSWORD: 'Passwords must have at least one digit and one alphanumeric character' @@ -221,7 +221,7 @@ ja_JP: LEVELUP: 'Level up' LinkExisting: 'Link Existing' NewRecord: 新しい%s - NoItemsFound: '項目が見つかりませんでした' + NoItemsFound: 項目が見つかりませんでした PRINTEDAT: 'Printed at' PRINTEDBY: 'Printed by' PlaceHolder: '{type}を探す' @@ -240,19 +240,19 @@ ja_JP: Saved: '保存済み %s %s' GridFieldItemEditView.ss: null Group: - AddRole: 'このグループに役割を追加する' + AddRole: このグループに役割を追加する Code: グループコード - DefaultGroupTitleAdministrators: '管理者' - DefaultGroupTitleContentAuthors: 'コンテンツの著者' + DefaultGroupTitleAdministrators: 管理者 + DefaultGroupTitleContentAuthors: コンテンツの著者 Description: 説明文 - GroupReminder: '元グループを選択された場合、このグループはその役割をすべて受け継ぎます。' + GroupReminder: 元グループを選択された場合、このグループはその役割をすべて受け継ぎます。 Locked: ロックしますか? NoRoles: 役割が見つかりませんでした PLURALNAME: Groups - Parent: '元グループ' + Parent: 元グループ RolesAddEditLink: 役割の管理 SINGULARNAME: Group - Sort: '並び順' + Sort: 並び順 has_many_Permissions: 承認 many_many_Members: メンバー GroupImportForm: @@ -264,19 +264,19 @@ ja_JP: Hierarchy: InfiniteLoopNotAllowed: 'Infinite loop found within the "{type}" hierarchy. Please change the parent to resolve this' HtmlEditorField: - ADDURL: 'URLを追加' + ADDURL: URLを追加 ADJUSTDETAILSDIMENSIONS: 'Details & dimensions' ANCHORVALUE: アンカー - BUTTONINSERT: '追加' - BUTTONINSERTLINK: 'リンクを追加' + BUTTONINSERT: 追加 + BUTTONINSERTLINK: リンクを追加 BUTTONREMOVELINK: リンクを削除 BUTTONUpdate: 更新 CAPTIONTEXT: タイトル CSSCLASS: '調整 / スタイル' CSSCLASSCENTER: 中央はテキストのみ - CSSCLASSLEFT: '左側にテキストと一緒に処理してください' + CSSCLASSLEFT: 左側にテキストと一緒に処理してください CSSCLASSLEFTALONE: 中央はテキストのみ - CSSCLASSRIGHT: '右側にテキストと一緒に処理してください' + CSSCLASSRIGHT: 右側にテキストと一緒に処理してください DETAILS: 詳細 EMAIL: メールアドレス FILE: ファイル @@ -284,18 +284,18 @@ ja_JP: FROMCMS: CMSから FROMCOMPUTER: コンピュータから FROMWEB: Webから - FindInFolder: 'フォルダ内を探す' + FindInFolder: フォルダ内を探す IMAGEALT: 代替テキスト(Alt) IMAGEALTTEXT: '代替(Alt)テキスト - 画像が表示されなかった場合に表示されます' - IMAGEALTTEXTDESC: 'スクリーンリーダー利用者やイメージが表示されなかった場合に表示されます' + IMAGEALTTEXTDESC: スクリーンリーダー利用者やイメージが表示されなかった場合に表示されます IMAGEDIMENSIONS: サイズ IMAGEHEIGHTPX: Height IMAGETITLE: 'タイトル(ツールチップ)テキスト - 画像に対する追加的情報' IMAGETITLETEXT: タイトルテキスト(ツールチップ) - IMAGETITLETEXTDESC: '画像に関する追加情報' + IMAGETITLETEXTDESC: 画像に関する追加情報 IMAGEWIDTHPX: Width - INSERTMEDIA: 'メディアを追加' - LINK: 'ハイライトテキストへのリンクの挿入/削除' + INSERTMEDIA: メディアを追加 + LINK: ハイライトテキストへのリンクの挿入/削除 LINKANCHOR: このページにアンカーを置く LINKDESCR: リンクの説明 LINKEMAIL: メールアドレス @@ -324,9 +324,9 @@ ja_JP: DropdownBatchActionsDefault: アクション HELP: ヘルプ PAGETYPE: 'ページの種類:' - PERMAGAIN: 'ログアウトしました。再度ログインする場合は下にユーザー名とパスワードを入力してください。' - PERMALREADY: '申し訳ございません。ご指定になられたCMSの箇所にはアクセスいただけません。別ユーザーとしてログインをされたい場合は、下記より行えます。' - PERMDEFAULT: '認証方法を選択し、CMSにアクセスするために利用する認証情報を入力してください。' + PERMAGAIN: ログアウトしました。再度ログインする場合は下にユーザー名とパスワードを入力してください。 + PERMALREADY: 申し訳ございません。ご指定になられたCMSの箇所にはアクセスいただけません。別ユーザーとしてログインをされたい場合は、下記より行えます。 + PERMDEFAULT: 認証方法を選択し、CMSにアクセスするために利用する認証情報を入力してください。 PLEASESAVE: '保存してください: 保存してないため更新できません。' PreviewButton: プレビュー REORGANISATIONSUCCESSFUL: サイトツリーの再編集に成功しました。 @@ -342,7 +342,7 @@ ja_JP: SINGULARNAME: 'Login Attempt' Status: ステータス Member: - ADDGROUP: 'グループを追加' + ADDGROUP: グループを追加 BUTTONCHANGEPASSWORD: パスワードの変更 BUTTONLOGIN: ログイン BUTTONLOGINOTHER: 他の誰かとしてログイン @@ -351,15 +351,15 @@ ja_JP: CONFIRMNEWPASSWORD: 新しいパスワードを確認します CONFIRMPASSWORD: パスワード(確認のためもう一度) DATEFORMAT: 'Date format' - DefaultAdminFirstname: '初期管理者' + DefaultAdminFirstname: 初期管理者 DefaultDateTime: 初期設定 EMAIL: メールアドレス - EMPTYNEWPASSWORD: 'パスワードが空です。もう一度入力して下さい。' - ENTEREMAIL: 'パスワードをリセットするためにメールアドレスを入力してください。' - ERRORLOCKEDOUT: 'あなたのアカウントは何度もログインに失敗したため一時的に利用できなくなっています。20分後に試してください。' - ERRORNEWPASSWORD: '入力されたパスワードが一致しません。再度お試しください' - ERRORPASSWORDNOTMATCH: '登録されているパスワードと一致しません、もう一度入力し直してください' - ERRORWRONGCRED: 'メールアドレスまたはパスワードが正しくありません、もう一度入力し直してください' + EMPTYNEWPASSWORD: パスワードが空です。もう一度入力して下さい。 + ENTEREMAIL: パスワードをリセットするためにメールアドレスを入力してください。 + ERRORLOCKEDOUT: あなたのアカウントは何度もログインに失敗したため一時的に利用できなくなっています。20分後に試してください。 + ERRORNEWPASSWORD: 入力されたパスワードが一致しません。再度お試しください + ERRORPASSWORDNOTMATCH: 登録されているパスワードと一致しません、もう一度入力し直してください + ERRORWRONGCRED: メールアドレスまたはパスワードが正しくありません、もう一度入力し直してください FIRSTNAME: 名 INTERFACELANG: 画面言語 INVALIDNEWPASSWORD: '次のパスワードは受け付けることができません: {password}' @@ -373,7 +373,7 @@ ja_JP: SUBJECTPASSWORDRESET: パスワード再発行 SURNAME: 姓 TIMEFORMAT: 'Time format' - VALIDATIONMEMBEREXISTS: '入力したメールアドレス(%s)は、他のメンバーにすでに使用されています。' + VALIDATIONMEMBEREXISTS: 入力したメールアドレス(%s)は、他のメンバーにすでに使用されています。 ValidationIdentifierFailed: 'Can''t overwrite existing member #{id} with identical identifier ({name} = {value}))' WELCOMEBACK: '{firstname}さん、おかえりなさい' YOUROLDPASSWORD: 古いパスワード @@ -381,7 +381,7 @@ ja_JP: db_LastVisited: 最終訪問日 db_Locale: インターフェースの言語地域 db_LockedOutUntil: DBロックがされています。 - db_NumVisit: '訪問者数' + db_NumVisit: 訪問者数 db_Password: パスワード db_PasswordExpiry: パスワードの有効期限 MemberAuthenticator: @@ -424,13 +424,13 @@ ja_JP: EMPTYBEFOREIMPORT: 'Clear Database before import' IMPORT: CSVからインポート IMPORTEDRECORDS: '{count}レコードを取り込みました。' - NOCSVFILE: 'インポートするためのCSVファイルを参照してください' + NOCSVFILE: インポートするためのCSVファイルを参照してください NOIMPORT: インポートするものがありません。 RESET: リセット Title: 'Data Models' UPDATEDRECORDS: '{count}レコードを更新しました。' ModelAdmin_ImportSpec.ss: - IMPORTSPECFIELDS: 'データベースカラム' + IMPORTSPECFIELDS: データベースカラム IMPORTSPECLINK: 'Show Specification for %s' IMPORTSPECRELATIONS: 関連 IMPORTSPECTITLE: 'Specification for %s' @@ -451,9 +451,9 @@ ja_JP: Page: Page View: View Permission: - AdminGroup: '管理者' + AdminGroup: 管理者 CMS_ACCESS_CATEGORY: 'CMS Access' - FULLADMINRIGHTS: '完全な管理権' + FULLADMINRIGHTS: 完全な管理権 FULLADMINRIGHTS_HELP: 'Implies and overrules all other assigned permissions.' PLURALNAME: Permissions SINGULARNAME: Permission @@ -474,27 +474,27 @@ ja_JP: PERMISSIONS_CATEGORY: 役割とアクセス権限 UserPermissionsIntro: 'Assigning groups to this user will adjust the permissions they have. See the groups section for details of permissions on individual groups.' PhoneNumberField: - VALIDATION: '電話番号を入力してください' + VALIDATION: 電話番号を入力してください RelationComplexTableField.ss: - ADD: '追加' + ADD: 追加 CSVEXPORT: CSVへ書き出し - NOTFOUND: '項目が見つかりませんでした' + NOTFOUND: 項目が見つかりませんでした Security: ALREADYLOGGEDIN: 'あなたはこのページにアクセスできません。別のアカウントを持っていたら 再ログインを行ってください。' - BUTTONSEND: 'パスワードリセットのリンクを送信してください' + BUTTONSEND: パスワードリセットのリンクを送信してください CHANGEPASSWORDBELOW: 以下のパスワードを変更できます CHANGEPASSWORDHEADER: パスワードを変更しました - ENTERNEWPASSWORD: '新しいパスワードを入力してください' + ENTERNEWPASSWORD: 新しいパスワードを入力してください ERRORPASSWORDPERMISSION: パスワードを変更する為に、ログインしなければなりません! - LOGGEDOUT: 'ログアウトしました。再度ログインする場合は証明書キーを入力してください' + LOGGEDOUT: ログアウトしました。再度ログインする場合は証明書キーを入力してください LOGIN: ログイン - NOTEPAGESECURED: 'このページはセキュリティで保護されております証明書キーを下記に入力してください。こちらからすぐに送信します' + NOTEPAGESECURED: このページはセキュリティで保護されております証明書キーを下記に入力してください。こちらからすぐに送信します NOTERESETLINKINVALID: '

The password reset link is invalid or expired.

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

' - NOTERESETPASSWORD: 'メールアドレスを入力してください、パスワードをリセットするURLを送信致します' + NOTERESETPASSWORD: メールアドレスを入力してください、パスワードをリセットするURLを送信致します PASSWORDSENTHEADER: 'Password reset link sent to ''{email}''' PASSWORDSENTTEXT: 'Thank you! A reset link has been sent to ''{email}'', provided an account exists for this email address.' SecurityAdmin: - ACCESS_HELP: 'ユーザを閲覧、追加、編集すること、及び、そのユーザに対して権限や役割を割り当てることを許可' + ACCESS_HELP: ユーザを閲覧、追加、編集すること、及び、そのユーザに対して権限や役割を割り当てることを許可 APPLY_ROLES: 役割をグループへ適用 APPLY_ROLES_HELP: 'Ability to edit the roles assigned to a group. Requires the "Access to ''Users'' section" permission.' EDITPERMISSIONS: グループの権限を編集 @@ -523,7 +523,7 @@ ja_JP: TableField: ISREQUIRED: 'In %s ''%s'' is required' TableField.ss: - ADD: '新しい行を追加' + ADD: 新しい行を追加 ADDITEM: '%sを追加' TableListField: CSVEXPORT: CSVにエクスポート @@ -531,9 +531,9 @@ ja_JP: Print: Print SELECT: 選択: TableListField.ss: - NOITEMSFOUND: '項目が見つかりませんでした' - SORTASC: '昇順で並べ替え' - SORTDESC: '降順で並べ替え' + NOITEMSFOUND: 項目が見つかりませんでした + SORTASC: 昇順で並べ替え + SORTDESC: 降順で並べ替え TableListField_PageControls.ss: DISPLAYING: Displaying OF: of @@ -546,20 +546,20 @@ ja_JP: VALIDATEFORMAT: '正しい時間フォーマット{{format}}を入力してください' ToggleField: LESS: 減少 - MORE: '増加' + MORE: 増加 UploadField: ATTACHFILE: ファイルを添付 ATTACHFILES: ファイルを添付 AttachFile: ファイルを添付 DELETE: 'Delete from files' - DELETEINFO: 'ファイルストレージから永久にこのファイルは削除されました' + DELETEINFO: ファイルストレージから永久にこのファイルは削除されました DOEDIT: 保存 DROPFILE: ファイルをドロップ DROPFILES: ファイルをドロップ Dimensions: Dimensions EDIT: 編集 EDITINFO: このファイルを編集 - FIELDNOTSET: 'ファイル情報が見つかりませんでした' + FIELDNOTSET: ファイル情報が見つかりませんでした FROMCOMPUTER: コンピュータから FROMCOMPUTERINFO: ファイルから選択 FROMFILES: ファイルから @@ -568,7 +568,7 @@ ja_JP: MAXNUMBEROFFILESSHORT: '{count}ファイルしかアップロードすることができません' REMOVE: 削除 REMOVEERROR: ファイルの削除におけるエラー - REMOVEINFO: 'ここからこのファイルを削除。ただし、ファイルのストレージからこのファイルの削除はしない。' + REMOVEINFO: ここからこのファイルを削除。ただし、ファイルのストレージからこのファイルの削除はしない。 STARTALL: すべて開始 STARTALLINFO: すべてのアップロードを開始 Saved: 保存しました diff --git a/lang/km.yml b/lang/km.yml index ffb62e70a..e9376ce6f 100644 --- a/lang/km.yml +++ b/lang/km.yml @@ -246,10 +246,10 @@ km: DefaultGroupTitleContentAuthors: 'Content Authors' Description: Description GroupReminder: 'If you choose a parent group, this group will take all it''s roles' - Locked: 'មិនអាចប្រើ' + Locked: មិនអាចប្រើ NoRoles: 'No roles found' PLURALNAME: Groups - Parent: 'ចំណាត់ក្រុមដើម' + Parent: ចំណាត់ក្រុមដើម RolesAddEditLink: 'Manage roles' SINGULARNAME: Group Sort: 'Sort Order' @@ -377,13 +377,13 @@ km: ValidationIdentifierFailed: 'Can''t overwrite existing member #{id} with identical identifier ({name} = {value}))' WELCOMEBACK: 'Welcome Back, {firstname}' YOUROLDPASSWORD: 'Your old password' - belongs_many_many_Groups: 'ចំណាត់ក្រុម' + belongs_many_many_Groups: ចំណាត់ក្រុម db_LastVisited: 'Last Visited Date' db_Locale: 'Interface Locale' - db_LockedOutUntil: 'ដោះចេញរហូតដល់' + db_LockedOutUntil: ដោះចេញរហូតដល់ db_NumVisit: 'Number of Visits' db_Password: Password - db_PasswordExpiry: 'កាលបរិច្ឆេទផុតកំណត់ពាក្យសំងាត់' + db_PasswordExpiry: កាលបរិច្ឆេទផុតកំណត់ពាក្យសំងាត់ MemberAuthenticator: TITLE: 'E-mail & Password' MemberDatetimeOptionsetField: diff --git a/lang/lt.yml b/lang/lt.yml index aae8ea165..66ab8ed6a 100644 --- a/lang/lt.yml +++ b/lang/lt.yml @@ -111,7 +111,7 @@ lt: Date: DAY: diena DAYS: dienas - HOUR: 'valandą' + HOUR: valandą HOURS: valandas MIN: minutę MINS: minutes diff --git a/lang/nl.yml b/lang/nl.yml index fbb6dcd4f..319a91c52 100644 --- a/lang/nl.yml +++ b/lang/nl.yml @@ -1,6 +1,6 @@ nl: AssetAdmin: - ALLOWEDEXTS: 'Allowed extensions' + ALLOWEDEXTS: 'Toegestane extensies' NEWFOLDER: 'Nieuwe Map' AssetTableField: CREATED: 'Eerste upload' @@ -16,15 +16,15 @@ nl: AssetUploadField: ChooseFiles: 'Selecteer bestanden' DRAGFILESHERE: 'Sleep bestanden hiernaar toe' - DROPAREA: 'Hierheen slepen' + DROPAREA: 'Sleep hier' EDITALL: 'Alle bewerken' EDITANDORGANIZE: 'Bewerk en beheer' EDITINFO: 'Bewerk alle bestanden' FILES: Bestanden FROMCOMPUTER: 'Selecteer bestand op computer' - FROMCOMPUTERINFO: 'Upload from your computer' + FROMCOMPUTERINFO: 'Uploaden vanaf uw computer' TOTAL: Totaal - TOUPLOAD: 'Choose files to upload...' + TOUPLOAD: 'Selecteer bestanden' UPLOADINPROGRESS: 'Even geduld... bezig met uploaden' UPLOADOR: OF BBCodeParser: @@ -39,7 +39,7 @@ nl: COLOREDEXAMPLE: 'blauwe tekst' EMAILLINK: 'Email link' EMAILLINKDESCRIPTION: 'Maak een koppeling naar een e-mailadres' - IMAGE: Foto + IMAGE: Afbeelding IMAGEDESCRIPTION: 'Toon een afbeelding in uw bericht' ITALIC: 'Cursieve tekst' ITALICEXAMPLE: Cursief @@ -64,7 +64,7 @@ nl: 1: Ja CMSLoadingScreen.ss: LOADING: 'Bezig met laden...' - REQUIREJS: 'The CMS requires that you have JavaScript enabled.' + REQUIREJS: 'Het CMS heeft JavaScript nodig om te werken.' CMSMain: ACCESS: 'Toegang tot het ''{title}'' gedeelte' ACCESSALLINTERFACES: 'Toegang tot alle CMS onderdelen' @@ -84,7 +84,7 @@ nl: ComplexTableField: CLOSEPOPUP: 'Sluit Popup' SUCCESSADD2: 'Toegevoegd {name}' - SUCCESSEDIT: '%s %s %s opgeslagen' + SUCCESSEDIT: '%s %s %s Opgeslagen' ComplexTableField.ss: ADDITEM: 'Voeg %s toe' NOITEMSFOUND: 'Geen items gevonden.' @@ -120,23 +120,23 @@ nl: SEC: seconde SECS: seconden TIMEDIFFAGO: '{difference} geleden' - TIMEDIFFIN: 'in {difference}' + TIMEDIFFIN: '{difference} geleden' YEAR: jaar YEARS: jaren DateField: NOTSET: 'niet ingesteld' TODAY: vandaag - VALIDDATEFORMAT2: 'Please enter a valid date format ({format})' - VALIDDATEMAXDATE: 'Your date has to be older or matching the maximum allowed date ({date})' - VALIDDATEMINDATE: 'Your date has to be newer or matching the minimum allowed date ({date})' + VALIDDATEFORMAT2: 'Vul een geldige datumformaat in ({format})' + VALIDDATEMAXDATE: 'De datum moet nieuwer of gelijk zijn aan de minimale datum ({date})' + VALIDDATEMINDATE: 'De datum moet nieuwer of gelijk zijn aan de minimale datum ({date})' DatetimeField: - NOTSET: 'Not set' + NOTSET: 'Niet ingesteld' Director: - INVALID_REQUEST: 'Invalid request' + INVALID_REQUEST: 'Fout bij verwerken' DropdownField: CHOOSE: (Kies) EmailField: - VALIDATION: 'Please enter an email address' + VALIDATION: 'Gelieve een email adres in te voeren.' Email_BounceRecord: PLURALNAME: 'Onbezorgbare emails' SINGULARNAME: 'Onbezorgbare email' @@ -145,21 +145,21 @@ nl: File: AviType: 'AVI video bestand' Content: Inhoud - CssType: 'CSS file' + CssType: 'CSS bestand' DmgType: 'Apple disk image' DocType: 'Word document' Filename: 'Bestandsnaam ' GifType: 'GIF afbeelding - voor diagrammen' - GzType: 'GZIP compressed file' + GzType: 'GZIP gecomprimeerd bestand' HtlType: 'HTML bestand' HtmlType: 'HTML bestand' - INVALIDEXTENSION: 'Extension is not allowed (valid: {extensions})' - INVALIDEXTENSIONSHORT: 'Extension is not allowed' + INVALIDEXTENSION: 'Extensie is niet toegestaan (Toegestaan: {extensions})' + INVALIDEXTENSIONSHORT: 'Extensie is niet toegestaan' IcoType: 'Icoon bestand' JpgType: 'JPG afbeelding - voor foto' JsType: 'Javascript bestand' - Mp3Type: 'MP3 audio file' - MpgType: 'MPEG video file' + Mp3Type: 'MP3 audio bestand' + MpgType: 'MPEG video bestand' NOFILESIZE: 'Bestandsgrootte is nul bytes.' NOVALIDUPLOAD: 'Geen geldig bestand' Name: Naam @@ -167,11 +167,11 @@ nl: PdfType: 'Adobe Acrobat PDF bestand' PngType: 'PNG adbeelding - voor allerlei afbeeldingen' SINGULARNAME: Bestand - TOOLARGE: 'Filesize is too large, maximum {size} allowed' - TOOLARGESHORT: 'Filesize exceeds {size}' - TiffType: 'Tagged image format' + TOOLARGE: 'Bestandsgrootte is te groot, maximaal {size} toegestaan' + TOOLARGESHORT: 'Bestandsgrootte is hoger dan {size}' + TiffType: 'Tagged beeldformaat' Title: 'Titel ' - WavType: 'WAV audo file' + WavType: 'WAV audio bestand' XlsType: 'Excel document' ZipType: 'ZIP bestand' FileIFrameField: @@ -190,8 +190,8 @@ nl: Filesystem: SYNCRESULTS: 'Synchroniseren compleet: {createdcount} bestanden aangemaakt, {deletedcount} bestanden verwijderd.' Folder: - PLURALNAME: Folders - SINGULARNAME: Folder + PLURALNAME: Mappen + SINGULARNAME: Map ForgotPasswordEmail.ss: HELLO: Hallo TEXT1: 'Hier is uw' @@ -199,42 +199,42 @@ nl: TEXT3: voor Form: FIELDISREQUIRED: '%s is verplicht' - SubmitBtnLabel: Go - VALIDATIONCREDITNUMBER: 'Please ensure you have entered the {number} credit card number correctly' + SubmitBtnLabel: Gaan + VALIDATIONCREDITNUMBER: 'Gelieve uw credit card number {number} juist in te vullen' VALIDATIONNOTUNIQUE: 'De ingevoerde waarde is niet uniek' VALIDATIONPASSWORDSDONTMATCH: 'Wachtwoorden komen niet overeen' VALIDATIONPASSWORDSNOTEMPTY: 'Wachtwoorden mogen niet leeg zijn' - VALIDATIONSTRONGPASSWORD: 'Passwords must have at least one digit and one alphanumeric character' + VALIDATIONSTRONGPASSWORD: 'Wachtwoorden moeten bestaan uit minstens één cijfer en één alfanumeriek karakter.' VALIDATOR: Controleur - VALIDCURRENCY: 'Please enter a valid currency' + VALIDCURRENCY: 'Vul een geldige valuta in' FormField: NONE: geen GridAction: - DELETE_DESCRIPTION: Delete + DELETE_DESCRIPTION: Verwijderen Delete: Verwijder UnlinkRelation: Ontkoppelen GridField: - Add: 'Add {name}' + Add: '{name} toevoegen' Filter: Filter FilterBy: Filteren Find: Zoek - LEVELUP: 'Level up' - LinkExisting: 'Verwijs naar' + LEVELUP: 'Niveau omhoog' + LinkExisting: 'Bestaande link' NewRecord: 'Nieuw %s' NoItemsFound: 'Geen items gevonden.' - PRINTEDAT: 'Geprint om' + PRINTEDAT: 'Geprint op' PRINTEDBY: 'Geprint door' - PlaceHolder: 'Find {type}' - PlaceHolderWithLabels: 'Find {type} by {name}' - RelationSearch: 'Relation search' - ResetFilter: Reset + PlaceHolder: 'Zoek {type}' + PlaceHolderWithLabels: 'Zoek {type} op {name}' + RelationSearch: 'Zoek relatie' + ResetFilter: Herstellen GridFieldAction_Delete: DeletePermissionsFailure: 'Onvoldoende rechten om te verwijderen' GridFieldDetailForm: CancelBtn: Annuleren Create: Creëren Delete: Verwijder - DeletePermissionsFailure: 'No delete permissions' + DeletePermissionsFailure: 'Onvoldoende rechten om te verwijderen' Deleted: '%s %s verwijderd' Save: Opslaan Saved: '%s %s opgeslagen' @@ -248,13 +248,13 @@ nl: GroupReminder: 'Als je de bovenliggende groep selecteert, neemt deze groep alle rollen over' Locked: 'Gesloten?' NoRoles: 'Geen rollen gevonden' - PLURALNAME: Groups + PLURALNAME: Groepen Parent: 'Bovenliggende groep' RolesAddEditLink: 'Toevoegen/wijzigingen rollen' - SINGULARNAME: Group + SINGULARNAME: Groep Sort: Sorteer-richting has_many_Permissions: Rechten - many_many_Members: Lid + many_many_Members: Leden GroupImportForm: Help1: '

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

' Help2: '

Advanced usage

' @@ -262,7 +262,7 @@ nl: ResultDeleted: '%d groepen verwijderd' ResultUpdated: '%d groepen aangepast' Hierarchy: - InfiniteLoopNotAllowed: 'Infinite loop found within the "{type}" hierarchy. Please change the parent to resolve this' + InfiniteLoopNotAllowed: 'Oneindige lus gevonden in "{type}" hiërarchie. Wijzig de niveau hoger om dit op te lossen' HtmlEditorField: ADDURL: 'Voeg URL toe' ADJUSTDETAILSDIMENSIONS: 'Details $amp; afmeting' @@ -270,7 +270,7 @@ nl: BUTTONINSERT: Invoegen BUTTONINSERTLINK: 'Link invoegen' BUTTONREMOVELINK: 'Link verwijderen' - BUTTONUpdate: Update + BUTTONUpdate: Bijwerken CAPTIONTEXT: Onderschrift CSSCLASS: 'Uitlijning / stijl' CSSCLASSCENTER: 'Gecentreerd, op zichzelf staand.' @@ -306,20 +306,20 @@ nl: LINKTO: 'Verwijs naar' PAGE: Pagina URL: URL - URLNOTANOEMBEDRESOURCE: 'The URL ''{url}'' could not be turned into a media resource.' + URLNOTANOEMBEDRESOURCE: '{url} kon niet worden omgezet in een media-bron.' UpdateMEDIA: 'Update Media' Image: - PLURALNAME: Files - SINGULARNAME: File + PLURALNAME: Bestanden + SINGULARNAME: Bestand ImageField: IMAGE: Afbeelding Image_Cached: - PLURALNAME: Files - SINGULARNAME: File + PLURALNAME: Bestanden + SINGULARNAME: Bestand Image_iframe.ss: TITLE: 'Afbeelding uploaden' LeftAndMain: - CANT_REORGANISE: 'You do not have permission to alter Top level pages. Your change was not saved.' + CANT_REORGANISE: 'Je hebt geen rechten hiervoor' DELETED: Verwijderd. DropdownBatchActionsDefault: Acties HELP: Help @@ -329,11 +329,11 @@ nl: PERMDEFAULT: 'Geef uw e-mailadres en wachtwoord voor toegang tot het CMS.' PLEASESAVE: 'Deze pagina kon niet bijgewerkt worden, omdat deze nog niet is bewaard.' PreviewButton: Preview - REORGANISATIONSUCCESSFUL: 'Reorganised the site tree successfully.' + REORGANISATIONSUCCESSFUL: 'Menu-indeling is aangepast' SAVEDUP: 'Succesvol opgeslagen' VersionUnknown: onbekend LeftAndMain_Menu.ss: - Hello: Hi + Hello: Hallo LOGOUT: Uitloggen LoginAttempt: Email: 'Email adres ' @@ -342,7 +342,7 @@ nl: SINGULARNAME: 'Poging om in te loggen' Status: Status Member: - ADDGROUP: 'Add group' + ADDGROUP: 'Groep toevoegen' BUTTONCHANGEPASSWORD: 'Wachtwoord veranderen' BUTTONLOGIN: Inloggen BUTTONLOGINOTHER: 'Als iemand anders inloggen' @@ -350,7 +350,7 @@ nl: CANTEDIT: 'Je hebt geen rechten hiervoor' CONFIRMNEWPASSWORD: 'Bevestig het nieuwe wachtwoord' CONFIRMPASSWORD: 'Bevestig wachtwoord' - DATEFORMAT: 'Date format' + DATEFORMAT: 'Datum formaat' DefaultAdminFirstname: 'Standaard Beheerder' DefaultDateTime: Standaard EMAIL: Email @@ -372,8 +372,8 @@ nl: SUBJECTPASSWORDCHANGED: 'Uw wachtwoord is veranderd' SUBJECTPASSWORDRESET: 'Link om Uw wachtwoord opnieuw aan te maken' SURNAME: Achternaam - TIMEFORMAT: 'Time format' - VALIDATIONMEMBEREXISTS: 'Er bestaat reeds een gebruiker met dit emailadres' + TIMEFORMAT: 'Tijd formaat' + VALIDATIONMEMBEREXISTS: 'Er bestaat al een lid met dit emailadres, %s' ValidationIdentifierFailed: 'Can''t overwrite existing member #{id} with identical identifier ({name} = {value}))' WELCOMEBACK: 'Welkom terug {firstname}' YOUROLDPASSWORD: 'Uw oude wachtwoord' @@ -387,25 +387,25 @@ nl: MemberAuthenticator: TITLE: 'Email & Wachtwoord' MemberDatetimeOptionsetField: - AMORPM: 'AM (Ante meridiem) or PM (Post meridiem)' + AMORPM: 'AM (Ante meridiem) of PM (Post meridiem)' 'APPLY FILTER': 'Filter toepassen' Custom: Aangepast DATEFORMATBAD: 'Datum is niet correct opgegeven' DAYNOLEADING: 'Dag van de maand zonder voorloop-nul' DIGITSDECFRACTIONSECOND: 'One or more digits representing a decimal fraction of a second' FOURDIGITYEAR: 'jaar (yyyy)' - FULLNAMEMONTH: 'Full name of month (e.g. June)' - HOURNOLEADING: 'Hour without leading zero' - MINUTENOLEADING: 'Minute without leading zero' + FULLNAMEMONTH: 'Volledige naam van de maand (Bijv. Juni)' + HOURNOLEADING: 'Uur zonder voorloopnul' + MINUTENOLEADING: 'Minuut zonder voorloopnul' MONTHNOLEADING: 'Dag van de maand zonder voorloop-nul' Preview: Voorbeeld - SHORTMONTH: 'Short name of month (e.g. Jun)' + SHORTMONTH: 'Korte naam van de maand (Bijv. Jun)' TOGGLEHELP: 'Hulp weergeven / verbergen' TWODIGITDAY: 'Dag van de maand (met voorloop-nul)' TWODIGITHOUR: 'Twee cijfer van het uur (00 tot 23)' TWODIGITMINUTE: 'Minuten met voorloop-nul (00 tot 59)' - TWODIGITMONTH: 'Two-digit month (01=January, etc.)' - TWODIGITSECOND: 'Two digits of second (00 through 59)' + TWODIGITMONTH: 'Maand in twee cijfers (01 = januari, enz.)' + TWODIGITSECOND: 'Twee cijfer van het uur (00 tot 23)' TWODIGITYEAR: 'Twee-cijferig jaar' MemberImportForm: Help1: '

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

' @@ -413,27 +413,27 @@ nl: ResultCreated: '{count} leden aangemaakt' ResultDeleted: '%d leden verwijderd' ResultNone: 'Geen wijzingen' - ResultUpdated: 'Updated {count} members' + ResultUpdated: '{count} leden bijgewerkt' MemberPassword: - PLURALNAME: 'Member Passwords' - SINGULARNAME: 'Member Password' + PLURALNAME: Gebruikerswachtwoorden + SINGULARNAME: Gebruikerswachtwoord MemberTableField: null ModelAdmin: DELETE: Verwijderen - DELETEDRECORDS: 'Deleted {count} records.' + DELETEDRECORDS: '{count} records verwijderd' EMPTYBEFOREIMPORT: 'Database legen voor importeren' IMPORT: 'Importeren vanuit CSV' - IMPORTEDRECORDS: 'Imported {count} records.' + IMPORTEDRECORDS: '{count} records geïmporteerd' NOCSVFILE: 'Selecteer een CSV bestand op uw computer om te importeren' NOIMPORT: 'Niks om te importeren' RESET: Herstel - Title: 'Data Models' - UPDATEDRECORDS: 'Updated {count} records.' + Title: 'Gegevens modellen' + UPDATEDRECORDS: '{count} records bijgewerkt' ModelAdmin_ImportSpec.ss: - IMPORTSPECFIELDS: 'Database columns' - IMPORTSPECLINK: 'Show Specification for %s' - IMPORTSPECRELATIONS: Relations - IMPORTSPECTITLE: 'Specification for %s' + IMPORTSPECFIELDS: 'Database kolommen' + IMPORTSPECLINK: 'Toon specificaties van %s' + IMPORTSPECRELATIONS: Relaties + IMPORTSPECTITLE: 'Specificaties van %s' ModelAdmin_Tools.ss: FILTER: Filter IMPORT: Importeer @@ -448,28 +448,28 @@ nl: NumericField: VALIDATION: '''{value}'' is geen getal. Dit velt accepteert alleen getallen.' Pagination: - Page: Page - View: View + Page: Pagina + View: Bekijk Permission: AdminGroup: Beheerder CMS_ACCESS_CATEGORY: 'CMS Toegang' FULLADMINRIGHTS: 'Volledige admin rechten' FULLADMINRIGHTS_HELP: 'Impliceert en overstemt alle andere toegewezen rechten.' - PLURALNAME: Permissions - SINGULARNAME: Permission + PLURALNAME: Machtigingen + SINGULARNAME: Machtiging PermissionCheckboxSetField: AssignedTo: 'toegewezen aan "{title}"' FromGroup: 'inherited from group "{title}"' FromRole: 'inherited from role "{title}"' FromRoleOnGroup: 'geërfd van rol "%s" in groep "%s"' PermissionRole: - OnlyAdminCanApply: 'Only admin can apply' - PLURALNAME: Roles - SINGULARNAME: Role + OnlyAdminCanApply: 'Alleen admin kan doorvoeren' + PLURALNAME: Rollen + SINGULARNAME: Rol Title: Titel PermissionRoleCode: - PLURALNAME: 'Permission Role Cods' - SINGULARNAME: 'Permission Role Code' + PLURALNAME: 'Machtigingen rol codes' + SINGULARNAME: 'Machtigingen rol code' Permissions: PERMISSIONS_CATEGORY: 'Rollen en toegangsrechten' UserPermissionsIntro: 'Assigning groups to this user will adjust the permissions they have. See the groups section for details of permissions on individual groups.' @@ -477,7 +477,7 @@ nl: VALIDATION: 'Voer een geldig telefoonnummer in' RelationComplexTableField.ss: ADD: Toevoegen - CSVEXPORT: 'Export to CSV' + CSVEXPORT: 'Exporteren naar CSV' NOTFOUND: 'Geen items gevonden.' Security: ALREADYLOGGEDIN: 'Je hebt niet de juiste rechten, om deze pagina te kunnen bekijken. Als je een ander account met de juiste rechten hebt, kun je hier opnieuw inloggen.' @@ -489,10 +489,10 @@ nl: LOGGEDOUT: 'U bent uitgelogd. Als U weer wilt inloggen kunt U Uw gegevens hier beneden invoeren.' LOGIN: 'Meld aan' NOTEPAGESECURED: 'Deze pagina is beveiligd. Voer Uw gegevens in en U wordt automatisch doorgestuurd.' - NOTERESETLINKINVALID: '

The password reset link is invalid or expired.

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

' + NOTERESETLINKINVALID: '

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

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

' NOTERESETPASSWORD: 'Voer Uw emailadres in en we zenden U een link waarmee U Uw wachtwoord opnieuw kunt aanmaken' - PASSWORDSENTHEADER: 'Password reset link sent to ''{email}''' - PASSWORDSENTTEXT: 'Thank you! A reset link has been sent to ''{email}'', provided an account exists for this email address.' + PASSWORDSENTHEADER: 'Wachtwoord herstel link verzonden naar {email}' + PASSWORDSENTTEXT: 'Bedankt! Er is een link verstuurt naar {email} om uw wachtwoord te herstellen.' SecurityAdmin: ACCESS_HELP: 'Bevoegdheid voor bekijken, toevoegen en bewerken van leden, en toewijzen van rechten en rollen aan hen.' APPLY_ROLES: 'Pas rollen toe aan groepen' @@ -500,7 +500,7 @@ nl: EDITPERMISSIONS: 'Bewerk rechten en IP-adressen bij elke groep' EDITPERMISSIONS_HELP: 'Bewerkingsmogelijkheid van Rechten en IP adressen voor groepen. Heeft rechten voor "Beveiligingsectie" nodig.' GROUPNAME: 'Groep naam' - IMPORTGROUPS: Groepen + IMPORTGROUPS: 'Importeer groepen' IMPORTUSERS: 'Importeer gebruikers' MEMBERS: Leden MENUTITLE: Beveiliging @@ -521,10 +521,10 @@ nl: SiteTree: TABMAIN: Hoofdgedeelte TableField: - ISREQUIRED: 'In %s ''%s'' is required' + ISREQUIRED: 'In %s ''%s'' is verplicht' TableField.ss: ADD: 'Nieuwe rij toevoegen' - ADDITEM: 'Add %s' + ADDITEM: '%s toevoegen' TableListField: CSVEXPORT: 'Exporteer naar CSV' PRINT: Afdrukken @@ -535,42 +535,42 @@ nl: SORTASC: 'Sorteer in oplopende volgorde' SORTDESC: 'Sorteer in aflopende volgorde' TableListField_PageControls.ss: - DISPLAYING: Displaying - OF: of - TO: to + DISPLAYING: Tonen + OF: van + TO: naar VIEWFIRST: 'Bekijk eerste' VIEWLAST: 'Bekijk laatste' VIEWNEXT: 'Bekijk volgende' VIEWPREVIOUS: 'Bekijk vorige' TimeField: - VALIDATEFORMAT: 'Please enter a valid time format ({format})' + VALIDATEFORMAT: 'Vul een geldige datumformaat in ({format})' ToggleField: LESS: minder MORE: meer UploadField: ATTACHFILE: 'Voeg een bestand toe' ATTACHFILES: 'Voeg bestanden toe' - AttachFile: 'Voeg bestanden toe' + AttachFile: 'Voeg bestand(en) toe' DELETE: 'Volledig verwijderen' DELETEINFO: 'Verwijder dit bestand uit bestandsopslag van de website.' - DOEDIT: Bewaar + DOEDIT: Opslaan DROPFILE: 'Bestand hiernaar toe slepen' DROPFILES: 'Sleep hier je bestanden' - Dimensions: Dimensions + Dimensions: Afmeting EDIT: Bewerken EDITINFO: 'Bewerk dit bestand' FIELDNOTSET: 'Bestandsinformatie niet gevonden' FROMCOMPUTER: 'Vanaf computer' - FROMCOMPUTERINFO: 'Select from files' + FROMCOMPUTERINFO: 'Kies uit bestanden' FROMFILES: 'Bestaande bestanden' - HOTLINKINFO: 'Info: This image will be hotlinked. Please ensure you have permissions from the original site creator to do so.' + HOTLINKINFO: 'Info: Deze afbeelding wordt hotlinked. Zorg ervoor dat u de machtigingen van de oorspronkelijke site maker om dit te doen.' MAXNUMBEROFFILES: 'Maximale aantal van {count} bestand(en) overschreden.' - MAXNUMBEROFFILESSHORT: 'Can only upload {count} files' + MAXNUMBEROFFILESSHORT: 'Kan alleen {count} bestanden uploaden' REMOVE: Verwijder REMOVEERROR: 'Fout bij verwijderen' REMOVEINFO: 'Verwijder (ontkoppel) dit bestand, maar behoud het in bestandsopslag van de website.' - STARTALL: 'Start alles' - STARTALLINFO: 'Start all uploads' - Saved: 'Succesvol opgeslagen' + STARTALL: 'Start alle' + STARTALLINFO: 'Start alle' + Saved: Opgeslagen Versioned: has_many_Versions: Versies diff --git a/lang/pa.yml b/lang/pa.yml index 78ec78ea9..b5e51028e 100644 --- a/lang/pa.yml +++ b/lang/pa.yml @@ -91,7 +91,7 @@ pa: SORTASC: 'Sort ascending' SORTDESC: 'Sort descending' ComplexTableField_popup.ss: - NEXT: 'ਅਗਲਾ' + NEXT: ਅਗਲਾ PREVIOUS: ਪਿਛਲਾ ConfirmedPasswordField: ATLEAST: 'Passwords must be at least {min} characters long.' diff --git a/lang/pl.yml b/lang/pl.yml index e0a99d039..65b6b170d 100644 --- a/lang/pl.yml +++ b/lang/pl.yml @@ -1,6 +1,6 @@ pl: AssetAdmin: - ALLOWEDEXTS: 'Allowed extensions' + ALLOWEDEXTS: 'Dopuszczalne rozszerzenia' NEWFOLDER: NowyFolder AssetTableField: CREATED: 'Po raz pierwszy wgrany' @@ -71,7 +71,7 @@ pl: ACCESSALLINTERFACESHELP: 'Nadpisuje bardziej specyficzne ustawienia dostępu.' SAVE: Zapisz CMSProfileController: - MENUTITLE: 'My Profile' + 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ę:' @@ -115,8 +115,8 @@ pl: HOURS: godziny MIN: min MINS: minuty - MONTH: 'miesiąc' - MONTHS: 'miesiące' + MONTH: miesiąc + MONTHS: miesiące SEC: sekunda SECS: sekundy TIMEDIFFAGO: '{difference} temu' @@ -143,14 +143,14 @@ pl: Enum: ANY: Jakikolwiek File: - AviType: 'AVI video file' + AviType: 'Plik video AVI' Content: Zawartość CssType: 'Plik CSS' DmgType: 'Obraz dysku Apple' DocType: 'Dokument Worda' Filename: 'Nazwa pliku' GifType: 'Obrazek GIF, dobry do diagramów' - GzType: 'GZIP compressed file' + GzType: 'Plik skompresowany GZIP' HtlType: 'Plik HTML' HtmlType: 'Plik HTML' INVALIDEXTENSION: 'Rozszerzenie niedozwolone (dozwolone: {extensions})' @@ -159,7 +159,7 @@ pl: JpgType: 'Obrazek JPEG, dobry do zdjęć' JsType: 'Plik JavaScript' Mp3Type: 'Plik MP3' - MpgType: 'MPEG video file' + MpgType: 'Plik video MPEG' NOFILESIZE: 'Rozmiar pliku to zero bajtów.' NOVALIDUPLOAD: 'Plik nie został poprawnie przesłany' Name: Nazwa @@ -171,8 +171,8 @@ pl: TOOLARGESHORT: 'Rozmiar pliku przekracza {size}' TiffType: 'Plik TIFF' Title: Tytuł - WavType: 'WAV audo file' - XlsType: 'Excel spreadsheet' + WavType: 'Plik audio WAV' + XlsType: 'Arkusz kalkulacyjny Excel' ZipType: 'Plik ZIP, skompresowany' FileIFrameField: ATTACH: 'Dołącz {type}' @@ -328,7 +328,7 @@ pl: PERMALREADY: 'Niestety nie masz dostępu do tej części CMS. Jeśli chcesz zalogować się jako ktoś inny, zrób to poniżej' PERMDEFAULT: 'Proszę wybrać metodę identyfikacji i wpisać swoje dane, aby uruchomić CMSa.' PLEASESAVE: 'Proszę zapisać stronę. Ta strona nie mogła zostać uaktualniona, ponieważ nie została jeszcze zapisana.' - PreviewButton: 'Podgląd' + PreviewButton: Podgląd REORGANISATIONSUCCESSFUL: 'Pomyślnie zreorganizowano drzewo serwisu.' SAVEDUP: Zapisano. VersionUnknown: nieznany @@ -347,7 +347,7 @@ pl: BUTTONLOGIN: Zaloguj BUTTONLOGINOTHER: 'Zaloguj jako ktoś inny' BUTTONLOSTPASSWORD: 'Zgubiłem hasło' - CANTEDIT: 'You don''t have permission to do that' + CANTEDIT: 'Nie posiadasz odpowiednich uprawnień.' CONFIRMNEWPASSWORD: 'Potwierdź nowe hasło' CONFIRMPASSWORD: 'Potwierdź hasło' DATEFORMAT: 'Format daty' @@ -398,7 +398,7 @@ pl: HOURNOLEADING: 'Godzina bez wiodącego zera' MINUTENOLEADING: 'Minuta bez wiodącego zera' MONTHNOLEADING: 'Miesiąc bez wiodącego zera' - Preview: 'Podgląd' + Preview: Podgląd SHORTMONTH: 'Skrócona nazwa miesiąca (np. Cze)' TOGGLEHELP: 'Przełącz pomoc formatowania' TWODIGITDAY: 'Dwucyfrowy dzień miesiąca' @@ -421,7 +421,7 @@ pl: ModelAdmin: DELETE: Usuń DELETEDRECORDS: 'Usunięto rekordów: {count}' - EMPTYBEFOREIMPORT: 'Clear Database before import' + EMPTYBEFOREIMPORT: 'Wyczyść bazę danych przed importowaniem' IMPORT: 'Import z CSV' IMPORTEDRECORDS: 'Zaimportowano rekordów: {count}' NOCSVFILE: 'Wybierz plik CSV do zaimportowania' diff --git a/lang/ru.yml b/lang/ru.yml index f106417a0..6dbac1908 100644 --- a/lang/ru.yml +++ b/lang/ru.yml @@ -4,12 +4,12 @@ ru: NEWFOLDER: 'Новая папка' AssetTableField: CREATED: 'Первая загрузка' - DIM: 'Размеры' + DIM: Размеры FILENAME: 'Имя файла' FOLDER: Папка LASTEDIT: 'Последнее изменение' OWNER: Владелец - SIZE: 'Размер' + SIZE: Размер TITLE: Название TYPE: Тип URL: URL @@ -69,7 +69,7 @@ ru: ACCESS: 'Доступ к разделу ''{title}''' ACCESSALLINTERFACES: 'Доступ ко всему интерфейсу CMS' ACCESSALLINTERFACESHELP: 'Отменяет индивидуальные настройки прав доступа.' - SAVE: 'Сохранить' + SAVE: Сохранить CMSProfileController: MENUTITLE: 'Мой профиль' ChangePasswordEmail.ss: @@ -236,7 +236,7 @@ ru: Delete: Удалить DeletePermissionsFailure: 'Нет прав на удаление' Deleted: 'Удалено %s %s' - Save: 'Сохранить' + Save: Сохранить Saved: 'Сохранено %s %s' GridFieldItemEditView.ss: null Group: @@ -288,7 +288,7 @@ ru: IMAGEALT: 'Альтернативный текст (alt)' IMAGEALTTEXT: 'Альтернативный текст (alt) - показывается, если изображение недоступно' IMAGEALTTEXTDESC: 'Передается программе чтения экрана или отображается, если изображение недоступно' - IMAGEDIMENSIONS: 'Размеры' + IMAGEDIMENSIONS: Размеры IMAGEHEIGHTPX: Высота IMAGETITLE: 'Текст (всплывающая подсказка) - для дополнительной информации об изображении' IMAGETITLETEXT: 'Текст (всплывающая подсказка)' @@ -330,11 +330,11 @@ ru: PLEASESAVE: 'Пожалуйста, сохраните страницу: ее нельзя обновить, т.к. она еще не была сохранена.' PreviewButton: Просмотр REORGANISATIONSUCCESSFUL: 'Древесная структура сайта успешно реорганизована.' - SAVEDUP: 'Сохранено.' + SAVEDUP: Сохранено. VersionUnknown: неизвестно LeftAndMain_Menu.ss: Hello: Здравствуйте - LOGOUT: 'Выход' + LOGOUT: Выход LoginAttempt: Email: Email IP: IP-адрес @@ -464,8 +464,8 @@ ru: FromRoleOnGroup: 'перенято из роли "%s" для группы "%s"' PermissionRole: OnlyAdminCanApply: 'Может применяться только администратором' - PLURALNAME: 'Роли' - SINGULARNAME: 'Роль' + PLURALNAME: Роли + SINGULARNAME: Роль Title: Название PermissionRoleCode: PLURALNAME: 'Коды ролей доступа' @@ -487,7 +487,7 @@ ru: ENTERNEWPASSWORD: 'Пожалуйста, введите новый пароль.' ERRORPASSWORDPERMISSION: 'Вы должны войти в систему, чтобы изменить Ваш пароль!' LOGGEDOUT: 'Вы вышли. Если Вы хотите войти снова, введите ваши учетные данные ниже.' - LOGIN: 'Вход' + LOGIN: Вход NOTEPAGESECURED: 'Эта страница защищена. Пожалуйста, введите свои учетные данные для входа.' NOTERESETLINKINVALID: '

Неверная ссылка переустановки пароля или время действия ссылки истекло.

Вы можете повторно запросить ссылку, щелкнув здесь, или поменять пароль, войдя в систему.

' NOTERESETPASSWORD: 'Введите Ваш адрес email, и Вам будет отправлена ссылка, по которой Вы сможете переустановить свой пароль' @@ -507,15 +507,15 @@ ru: MemberListCaution: 'Внимание: при удалении участников из этого списка они будут удалены из всех групп и из базы данных ' NEWGROUP: 'Новая группа' PERMISSIONS: 'Права доступа' - ROLES: 'Роли' + ROLES: Роли ROLESDESCRIPTION: 'Роли представляют собой сочетания различных прав доступа, которые могут быть присвоены группам.
При необходимости они наследуются от групп более высокого уровня.' - TABROLES: 'Роли' + TABROLES: Роли Users: Пользователи SecurityAdmin_MemberImportForm: BtnImport: 'Импорт из CSV' FileFieldLabel: 'Файл CSV (Допустимые расширения: *.csv)' SilverStripeNavigator: - Edit: 'Редактировать' + Edit: Редактировать SimpleImageField: NOUPLOAD: 'Не загружено ни одного изображения' SiteTree: @@ -553,11 +553,11 @@ ru: AttachFile: 'Прикрепить файл(ы)' DELETE: 'Удалить из файлов' DELETEINFO: 'Окончательно удалить этот файл с сервера' - DOEDIT: 'Сохранить' + DOEDIT: Сохранить DROPFILE: 'перетащите файл сюда' DROPFILES: 'перетащить файлы' - Dimensions: 'Размеры' - EDIT: 'Редактировать' + Dimensions: Размеры + EDIT: Редактировать EDITINFO: 'Редактировать этот файл' FIELDNOTSET: 'Информация о файле не найдена' FROMCOMPUTER: 'С диска' @@ -571,6 +571,6 @@ ru: REMOVEINFO: 'Удалить файл отсюда, но не удалять с сервера' STARTALL: 'Стартовать все' STARTALLINFO: 'Стартовать все загрузки' - Saved: 'Сохранено' + Saved: Сохранено Versioned: has_many_Versions: Версии diff --git a/lang/si.yml b/lang/si.yml index d21393acf..841ba4f5a 100644 --- a/lang/si.yml +++ b/lang/si.yml @@ -99,7 +99,7 @@ si: MAXIMUM: 'Passwords must be at most {max} characters long.' SHOWONCLICKTITLE: 'මුර පදය වෙනස් කිරීම' CreditCardField: - FIRST: 'පළමු' + FIRST: පළමු FOURTH: fourth SECOND: දෙවන THIRD: third @@ -121,8 +121,8 @@ si: SECS: 'තත්පර ' TIMEDIFFAGO: '{difference} ago' TIMEDIFFIN: 'in {difference}' - YEAR: 'අවුරුද්ද' - YEARS: 'අවුරුදු' + YEAR: අවුරුද්ද + YEARS: අවුරුදු DateField: NOTSET: 'not set' TODAY: today @@ -253,7 +253,7 @@ si: RolesAddEditLink: 'Manage roles' SINGULARNAME: Group Sort: 'Sort Order' - has_many_Permissions: 'අවසර' + has_many_Permissions: අවසර many_many_Members: සාමාජිකයින් GroupImportForm: Help1: '

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

' @@ -545,7 +545,7 @@ si: TimeField: VALIDATEFORMAT: 'Please enter a valid time format ({format})' ToggleField: - LESS: 'අඩු' + LESS: අඩු MORE: වැඩි UploadField: ATTACHFILE: 'Attach a file' diff --git a/lang/sk.yml b/lang/sk.yml index a21501507..c48a56f54 100644 --- a/lang/sk.yml +++ b/lang/sk.yml @@ -293,7 +293,7 @@ sk: IMAGETITLE: 'Text titulky (tooltip) - pre doplňujúce informácie o obrázku' IMAGETITLETEXT: 'Text titulky (tooltip)' IMAGETITLETEXTDESC: 'Pre doplňujúce informácie o obrázku' - IMAGEWIDTHPX: 'Šírka' + IMAGEWIDTHPX: Šírka INSERTMEDIA: 'Vložiť média' LINK: 'Vložiť/upraviť odkaz na zvýraznený text' LINKANCHOR: 'Odkaz na tejto stranke' diff --git a/lang/sl.yml b/lang/sl.yml index 1b4b4b966..fc43742bb 100644 --- a/lang/sl.yml +++ b/lang/sl.yml @@ -293,7 +293,7 @@ sl: IMAGETITLE: 'Naslov (tooltip) bo izpisan kot dopolnitev k vsebini slike' IMAGETITLETEXT: 'Title text (tooltip)' IMAGETITLETEXTDESC: 'For additional information about the image' - IMAGEWIDTHPX: 'Širina' + IMAGEWIDTHPX: Širina INSERTMEDIA: 'Insert Media' LINK: Povezava LINKANCHOR: 'Sidro na tej strani' diff --git a/lang/sr.yml b/lang/sr.yml index c1774d78f..765c76665 100644 --- a/lang/sr.yml +++ b/lang/sr.yml @@ -92,7 +92,7 @@ sr: SORTDESC: 'Сортирају у опадајућем поретку' ComplexTableField_popup.ss: NEXT: Следеће - PREVIOUS: 'Претходно' + PREVIOUS: Претходно ConfirmedPasswordField: ATLEAST: 'Passwords must be at least {min} characters long.' BETWEEN: 'Passwords must be {min} to {max} characters long.' diff --git a/lang/sv.yml b/lang/sv.yml index 5ce40d048..fa818bc9c 100644 --- a/lang/sv.yml +++ b/lang/sv.yml @@ -321,7 +321,7 @@ sv: LeftAndMain: CANT_REORGANISE: 'Du har inte tillstånd att ändra sidor på toppnivå. Dina ändringar har inte sparats.' DELETED: Raderad - DropdownBatchActionsDefault: 'Åtgärder' + DropdownBatchActionsDefault: Åtgärder HELP: Hjälp PAGETYPE: Sidtyp PERMAGAIN: 'Du har blivit utloggad. Om du vill logga in igen anger du dina uppgifter nedan.' diff --git a/lang/th.yml b/lang/th.yml index 7d4fe99f6..6bd5bfa3e 100644 --- a/lang/th.yml +++ b/lang/th.yml @@ -39,8 +39,8 @@ th: COLOREDEXAMPLE: 'blue text' EMAILLINK: ลิงก์อีเมล EMAILLINKDESCRIPTION: สร้างลิงค์ให้กับที่อยู่อีเมล์ - IMAGE: 'รูปภาพ' - IMAGEDESCRIPTION: 'แสดงรูปภาพในหน้าบทความของคุณ' + IMAGE: รูปภาพ + IMAGEDESCRIPTION: แสดงรูปภาพในหน้าบทความของคุณ ITALIC: ข้อความตัวเอียง ITALICEXAMPLE: ตัวเอียง LINK: ลิงก์เว็บไซต์ @@ -271,7 +271,7 @@ th: BUTTONINSERTLINK: แทรกลิงค์ BUTTONREMOVELINK: ลบลิงค์ BUTTONUpdate: อัพเดท - CAPTIONTEXT: 'ข้อความคำอธิบายใต้ภาพ' + CAPTIONTEXT: ข้อความคำอธิบายใต้ภาพ CSSCLASS: 'การจัดวาง / รูปแบบ' CSSCLASSCENTER: 'Centered, on its own.' CSSCLASSLEFT: 'On the left, with text wrapping around.' @@ -312,7 +312,7 @@ th: PLURALNAME: ไฟล์ SINGULARNAME: ไฟล์ ImageField: - IMAGE: 'รูปภาพ' + IMAGE: รูปภาพ Image_Cached: PLURALNAME: ไฟล์ SINGULARNAME: ไฟล์ @@ -361,7 +361,7 @@ th: ERRORPASSWORDNOTMATCH: 'รหัสผ่านไม่ตรงกัน กรุณาลองใหม่อีกครั้ง' ERRORWRONGCRED: 'That doesn''t seem to be the right e-mail address or password. Please try again.' FIRSTNAME: ชื่อจริง - INTERFACELANG: 'ภาษาสำหรับหน้าจอติดต่อผู้ใช้' + INTERFACELANG: ภาษาสำหรับหน้าจอติดต่อผู้ใช้ INVALIDNEWPASSWORD: 'We couldn''t accept that password: {password}' LOGGEDINAS: 'You''re logged in as {name}.' NEWPASSWORD: รหัสผ่านใหม่ @@ -379,7 +379,7 @@ th: YOUROLDPASSWORD: รหัสผ่านเก่าของคุณ belongs_many_many_Groups: กลุ่ม db_LastVisited: วันที่เยี่ยมชมล่าสุด - db_Locale: 'ภาษาสำหรับส่วนอินเทอร์เฟซ' + db_Locale: ภาษาสำหรับส่วนอินเทอร์เฟซ db_LockedOutUntil: ออกจากระบบจนกว่า db_NumVisit: จำนวนการเข้าชม db_Password: รหัสผ่าน @@ -503,7 +503,7 @@ th: IMPORTGROUPS: นำเข้ากลุ่ม IMPORTUSERS: นำเข้าผู้ใช้งาน MEMBERS: สมาชิก - MENUTITLE: 'ความปลอดภัย' + MENUTITLE: ความปลอดภัย MemberListCaution: 'Caution: Removing members from this list will remove them from all groups and the database' NEWGROUP: สร้างกลุ่มใหม่ PERMISSIONS: สิทธิ์อนุญาต @@ -517,7 +517,7 @@ th: SilverStripeNavigator: Edit: แก้ไข SimpleImageField: - NOUPLOAD: 'ยังไม่มีรูปภาพที่ถูกอัพโหลด' + NOUPLOAD: ยังไม่มีรูปภาพที่ถูกอัพโหลด SiteTree: TABMAIN: หลัก TableField: diff --git a/lang/uk.yml b/lang/uk.yml index 767d0641b..f583713d4 100644 --- a/lang/uk.yml +++ b/lang/uk.yml @@ -9,7 +9,7 @@ uk: FOLDER: Folder LASTEDIT: 'Востаннє змінено' OWNER: Власник - SIZE: 'Розмір' + SIZE: Розмір TITLE: Назва TYPE: Тип URL: URL @@ -113,8 +113,8 @@ uk: DAYS: дні HOUR: година HOURS: годин - MIN: 'хв' - MINS: 'хв' + MIN: хв + MINS: хв MONTH: місяць MONTHS: місяці SEC: сек @@ -288,7 +288,7 @@ uk: IMAGEALT: 'Alternative text (alt)' IMAGEALTTEXT: 'Альтернативний текст (alt) - відображається якщо зображення не відображається' IMAGEALTTEXTDESC: 'Shown to screen readers or if image can not be displayed' - IMAGEDIMENSIONS: 'Розміри' + IMAGEDIMENSIONS: Розміри IMAGEHEIGHTPX: Висота IMAGETITLE: 'Текст заголовку (tooltip) - для додаткової інформації про зображення' IMAGETITLETEXT: 'Title text (tooltip)' @@ -507,9 +507,9 @@ uk: MemberListCaution: 'Caution: Removing members from this list will remove them from all groups and the database' NEWGROUP: 'Нова Група' PERMISSIONS: Дозволи - ROLES: 'Ролі' + ROLES: Ролі ROLESDESCRIPTION: 'Roles are predefined sets of permissions, and can be assigned to groups.
They are inherited from parent groups if required.' - TABROLES: 'Ролі' + TABROLES: Ролі Users: Користувачі SecurityAdmin_MemberImportForm: BtnImport: 'Import from CSV' diff --git a/lang/vi_VN.yml b/lang/vi_VN.yml index 931407ec4..4134173a0 100644 --- a/lang/vi_VN.yml +++ b/lang/vi_VN.yml @@ -109,8 +109,8 @@ vi_VN: PLURALNAME: 'Data Objects' SINGULARNAME: 'Data Object' Date: - DAY: 'ngày' - DAYS: 'ngày' + DAY: ngày + DAYS: ngày HOUR: giờ HOURS: giờ MIN: phút diff --git a/lang/zh_CN.yml b/lang/zh_CN.yml index bcda17466..800f90b85 100644 --- a/lang/zh_CN.yml +++ b/lang/zh_CN.yml @@ -3,12 +3,12 @@ zh_CN: ALLOWEDEXTS: 'Allowed extensions' NEWFOLDER: 新建文件夹 AssetTableField: - CREATED: '第一次被上传' + CREATED: 第一次被上传 DIM: 尺寸 FILENAME: 文件名 FOLDER: Folder LASTEDIT: 上一次被更改 - OWNER: '拥有者' + OWNER: 拥有者 SIZE: 大小 TITLE: 文件名称 TYPE: 类型 @@ -55,9 +55,9 @@ zh_CN: BackLink_Button.ss: Back: Back BasicAuth: - ENTERINFO: '请输入用户名和密码' + ENTERINFO: 请输入用户名和密码 ERRORNOTADMIN: 此用户没有管理员权限。 - ERRORNOTREC: '没有找到此用户名/密码' + ERRORNOTREC: 没有找到此用户名/密码 Boolean: 0: 'False' ANY: Any @@ -73,7 +73,7 @@ zh_CN: CMSProfileController: MENUTITLE: 'My Profile' ChangePasswordEmail.ss: - CHANGEPASSWORDTEXT1: '您已更改了登陆%s的密码' + CHANGEPASSWORDTEXT1: 您已更改了登陆%s的密码 CHANGEPASSWORDTEXT2: 您现在可以用下列权限信息进行登路: EMAIL: Email HELLO: 嗨 @@ -86,7 +86,7 @@ zh_CN: SUCCESSADD2: 'Added {name}' SUCCESSEDIT: 'Saved %s %s %s' ComplexTableField.ss: - ADDITEM: '新加' + ADDITEM: 新加 NOITEMSFOUND: 'No items found' SORTASC: 正序排列 SORTDESC: 倒序排列 @@ -97,7 +97,7 @@ zh_CN: ATLEAST: 'Passwords must be at least {min} characters long.' BETWEEN: 'Passwords must be {min} to {max} characters long.' MAXIMUM: 'Passwords must be at most {max} characters long.' - SHOWONCLICKTITLE: '更改密码' + SHOWONCLICKTITLE: 更改密码 CreditCardField: FIRST: first FOURTH: fourth @@ -201,9 +201,9 @@ zh_CN: FIELDISREQUIRED: '%s是必需填写的' SubmitBtnLabel: Go VALIDATIONCREDITNUMBER: 'Please ensure you have entered the {number} credit card number correctly' - VALIDATIONNOTUNIQUE: '输入值已被他人占用' - VALIDATIONPASSWORDSDONTMATCH: '(密码相互不匹配)' - VALIDATIONPASSWORDSNOTEMPTY: '密码不能空白' + VALIDATIONNOTUNIQUE: 输入值已被他人占用 + VALIDATIONPASSWORDSDONTMATCH: (密码相互不匹配) + VALIDATIONPASSWORDSNOTEMPTY: 密码不能空白 VALIDATIONSTRONGPASSWORD: 'Passwords must have at least one digit and one alphanumeric character' VALIDATOR: Validator VALIDCURRENCY: 'Please enter a valid currency' @@ -241,7 +241,7 @@ zh_CN: GridFieldItemEditView.ss: null Group: AddRole: 'Add a role for this group' - Code: '团队代码' + Code: 团队代码 DefaultGroupTitleAdministrators: Administrators DefaultGroupTitleContentAuthors: 'Content Authors' Description: Description @@ -268,12 +268,12 @@ zh_CN: ADJUSTDETAILSDIMENSIONS: 'Details & dimensions' ANCHORVALUE: Anchor BUTTONINSERT: Insert - BUTTONINSERTLINK: '插入链接' - BUTTONREMOVELINK: '删除链接' + BUTTONINSERTLINK: 插入链接 + BUTTONREMOVELINK: 删除链接 BUTTONUpdate: Update CAPTIONTEXT: 'Caption text' - CSSCLASS: '对齐/样式' - CSSCLASSCENTER: '自居中' + CSSCLASS: 对齐/样式 + CSSCLASSCENTER: 自居中 CSSCLASSLEFT: 左端自动换行 CSSCLASSLEFTALONE: 'On the left, on its own.' CSSCLASSRIGHT: 右端自动换行 @@ -289,17 +289,17 @@ zh_CN: IMAGEALTTEXT: 'Alternative text (alt) - shown if image cannot be displayed' IMAGEALTTEXTDESC: 'Shown to screen readers or if image can not be displayed' IMAGEDIMENSIONS: 尺寸 - IMAGEHEIGHTPX: '高(像素)' + IMAGEHEIGHTPX: 高(像素) IMAGETITLE: 'Title text (tooltip) - for additional information about the image' IMAGETITLETEXT: 'Title text (tooltip)' IMAGETITLETEXTDESC: 'For additional information about the image' - IMAGEWIDTHPX: '宽(像素)' + IMAGEWIDTHPX: 宽(像素) INSERTMEDIA: 'Insert Media' - LINK: '对所选文字插入/编辑链接' + LINK: 对所选文字插入/编辑链接 LINKANCHOR: 'Anchor on this page' LINKDESCR: 链接描述 LINKEMAIL: 电子邮件地址 - LINKEXTERNAL: '其它网站' + LINKEXTERNAL: 其它网站 LINKFILE: 下载文件 LINKINTERNAL: 本站网页 LINKOPENNEWWIN: 在新窗口打开链接? @@ -317,17 +317,17 @@ zh_CN: PLURALNAME: Files SINGULARNAME: File Image_iframe.ss: - TITLE: '图象上传内嵌框架(Iframe)' + TITLE: 图象上传内嵌框架(Iframe) LeftAndMain: CANT_REORGANISE: 'You do not have permission to alter Top level pages. Your change was not saved.' DELETED: Deleted. DropdownBatchActionsDefault: Actions HELP: 帮助 PAGETYPE: 网页类型 - PERMAGAIN: '您于CMS的登录已被注销,请在下面输入用户名和密码重新登录。' - PERMALREADY: '对不起,您无权登录CMS的这一部分。如果您要用另外的帐号,请在下面登录。' - PERMDEFAULT: '请先选择一种验证方法并输入您的权限信息,以登录CMS。' - PLEASESAVE: '请先保存:因为该网页还未保存,所以该页无法更新。' + PERMAGAIN: 您于CMS的登录已被注销,请在下面输入用户名和密码重新登录。 + PERMALREADY: 对不起,您无权登录CMS的这一部分。如果您要用另外的帐号,请在下面登录。 + PERMDEFAULT: 请先选择一种验证方法并输入您的权限信息,以登录CMS。 + PLEASESAVE: 请先保存:因为该网页还未保存,所以该页无法更新。 PreviewButton: Preview REORGANISATIONSUCCESSFUL: 'Reorganised the site tree successfully.' SAVEDUP: Saved. @@ -343,13 +343,13 @@ zh_CN: Status: Status Member: ADDGROUP: 'Add group' - BUTTONCHANGEPASSWORD: '更改密码' + BUTTONCHANGEPASSWORD: 更改密码 BUTTONLOGIN: 登录 - BUTTONLOGINOTHER: '使用其他帐户登录' - BUTTONLOSTPASSWORD: '忘记密码' + BUTTONLOGINOTHER: 使用其他帐户登录 + BUTTONLOSTPASSWORD: 忘记密码 CANTEDIT: 'You don''t have permission to do that' - CONFIRMNEWPASSWORD: '确认新密码' - CONFIRMPASSWORD: '确认密码' + CONFIRMNEWPASSWORD: 确认新密码 + CONFIRMPASSWORD: 确认密码 DATEFORMAT: 'Date format' DefaultAdminFirstname: 'Default Admin' DefaultDateTime: default @@ -357,35 +357,35 @@ zh_CN: EMPTYNEWPASSWORD: 'The new password can''t be empty, please try again' ENTEREMAIL: 'Please enter an email address to get a password reset link.' ERRORLOCKEDOUT: 'Your account has been temporarily disabled because of too many failed attempts at logging in. Please try again in 20 minutes.' - ERRORNEWPASSWORD: '您输入了一个不同的新密码,请重新输入' - ERRORPASSWORDNOTMATCH: '您当前的密码不正确,请再次输入' - ERRORWRONGCRED: '电邮地址或密码似乎不对。请重新输入。' + ERRORNEWPASSWORD: 您输入了一个不同的新密码,请重新输入 + ERRORPASSWORDNOTMATCH: 您当前的密码不正确,请再次输入 + ERRORWRONGCRED: 电邮地址或密码似乎不对。请重新输入。 FIRSTNAME: 名 INTERFACELANG: 界面语言 INVALIDNEWPASSWORD: 'We couldn''t accept that password: {password}' LOGGEDINAS: 'You''re logged in as {name}.' - NEWPASSWORD: '新密码' - PASSWORD: '密码' + NEWPASSWORD: 新密码 + PASSWORD: 密码 PLURALNAME: 成员 REMEMBERME: 记住我的信息? SINGULARNAME: 成员 - SUBJECTPASSWORDCHANGED: '您的密码已更改' - SUBJECTPASSWORDRESET: '重设您的密码链接' + SUBJECTPASSWORDCHANGED: 您的密码已更改 + SUBJECTPASSWORDRESET: 重设您的密码链接 SURNAME: 姓 TIMEFORMAT: 'Time format' VALIDATIONMEMBEREXISTS: 已经存在用这个电子邮件的会员 ValidationIdentifierFailed: 'Can''t overwrite existing member #{id} with identical identifier ({name} = {value}))' WELCOMEBACK: 'Welcome Back, {firstname}' - YOUROLDPASSWORD: '您的旧密码' + YOUROLDPASSWORD: 您的旧密码 belongs_many_many_Groups: 团队 db_LastVisited: 'Last Visited Date' db_Locale: 'Interface Locale' db_LockedOutUntil: 禁止直至 db_NumVisit: 'Number of Visits' db_Password: Password - db_PasswordExpiry: '密码过期日期' + db_PasswordExpiry: 密码过期日期 MemberAuthenticator: - TITLE: '电邮地址和密码' + TITLE: 电邮地址和密码 MemberDatetimeOptionsetField: AMORPM: 'AM (Ante meridiem) or PM (Post meridiem)' 'APPLY FILTER': 'Apply Filter' @@ -419,7 +419,7 @@ zh_CN: SINGULARNAME: 'Member Password' MemberTableField: null ModelAdmin: - DELETE: '删除' + DELETE: 删除 DELETEDRECORDS: 'Deleted {count} records.' EMPTYBEFOREIMPORT: 'Clear Database before import' IMPORT: 'Import from CSV' @@ -474,23 +474,23 @@ zh_CN: PERMISSIONS_CATEGORY: 'Roles and access permissions' UserPermissionsIntro: 'Assigning groups to this user will adjust the permissions they have. See the groups section for details of permissions on individual groups.' PhoneNumberField: - VALIDATION: '请输入有效电话号码' + VALIDATION: 请输入有效电话号码 RelationComplexTableField.ss: ADD: Add CSVEXPORT: 'Export to CSV' NOTFOUND: 'No items found' Security: - ALREADYLOGGEDIN: '您无访问此页的权限。如果您拥有另一个可访问次页的帐户,请在下面登录。' - BUTTONSEND: '给我发送密码重设链接' - CHANGEPASSWORDBELOW: '您可在下面更改您的密码' - CHANGEPASSWORDHEADER: '更改您的密码' - ENTERNEWPASSWORD: '请输入新密码' - ERRORPASSWORDPERMISSION: '您必需登录以更改您的密码' - LOGGEDOUT: '您已被撤消登录。如果您想再次登录,在下面输入您的登录信息。' + ALREADYLOGGEDIN: 您无访问此页的权限。如果您拥有另一个可访问次页的帐户,请在下面登录。 + BUTTONSEND: 给我发送密码重设链接 + CHANGEPASSWORDBELOW: 您可在下面更改您的密码 + CHANGEPASSWORDHEADER: 更改您的密码 + ENTERNEWPASSWORD: 请输入新密码 + ERRORPASSWORDPERMISSION: 您必需登录以更改您的密码 + LOGGEDOUT: 您已被撤消登录。如果您想再次登录,在下面输入您的登录信息。 LOGIN: 登录 - NOTEPAGESECURED: '此页是受安全保护的。输入您的登录信息,我们会将您送达。' + NOTEPAGESECURED: 此页是受安全保护的。输入您的登录信息,我们会将您送达。 NOTERESETLINKINVALID: '

The password reset link is invalid or expired.

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

' - NOTERESETPASSWORD: '输入您的电邮地址,我们会给您发送一个您可重设密码的链接' + NOTERESETPASSWORD: 输入您的电邮地址,我们会给您发送一个您可重设密码的链接 PASSWORDSENTHEADER: 'Password reset link sent to ''{email}''' PASSWORDSENTTEXT: 'Thank you! A reset link has been sent to ''{email}'', provided an account exists for this email address.' SecurityAdmin: @@ -517,7 +517,7 @@ zh_CN: SilverStripeNavigator: Edit: Edit SimpleImageField: - NOUPLOAD: '没有上传的图像' + NOUPLOAD: 没有上传的图像 SiteTree: TABMAIN: 主要部分 TableField: diff --git a/lang/zh_TW.yml b/lang/zh_TW.yml index 3f4373c3f..3462592ee 100644 --- a/lang/zh_TW.yml +++ b/lang/zh_TW.yml @@ -8,7 +8,7 @@ zh_TW: FILENAME: 檔案名稱 FOLDER: Folder LASTEDIT: 最後一次更新 - OWNER: '擁有者' + OWNER: 擁有者 SIZE: 大小 TITLE: 標題 TYPE: 類型 @@ -55,8 +55,8 @@ zh_TW: BackLink_Button.ss: Back: Back BasicAuth: - ENTERINFO: '請輸入帳號密碼。' - ERRORNOTADMIN: '那個使用者不是管理員。' + ENTERINFO: 請輸入帳號密碼。 + ERRORNOTADMIN: 那個使用者不是管理員。 ERRORNOTREC: 那組帳號密碼不對。 Boolean: 0: 'False' @@ -74,7 +74,7 @@ zh_TW: MENUTITLE: 'My Profile' ChangePasswordEmail.ss: CHANGEPASSWORDTEXT1: 您為這個帳戶改密碼: - CHANGEPASSWORDTEXT2: '您可以用下列的帳號密碼登入:' + CHANGEPASSWORDTEXT2: 您可以用下列的帳號密碼登入: EMAIL: Email HELLO: 您好 PASSWORD: Password @@ -201,8 +201,8 @@ zh_TW: FIELDISREQUIRED: '必須要填 %s' SubmitBtnLabel: Go VALIDATIONCREDITNUMBER: 'Please ensure you have entered the {number} credit card number correctly' - VALIDATIONNOTUNIQUE: '您輸入的數值並不是獨特的。' - VALIDATIONPASSWORDSDONTMATCH: '密碼不相配' + VALIDATIONNOTUNIQUE: 您輸入的數值並不是獨特的。 + VALIDATIONPASSWORDSDONTMATCH: 密碼不相配 VALIDATIONPASSWORDSNOTEMPTY: 密碼不能是空的 VALIDATIONSTRONGPASSWORD: 'Passwords must have at least one digit and one alphanumeric character' VALIDATOR: Validator @@ -268,15 +268,15 @@ zh_TW: ADJUSTDETAILSDIMENSIONS: 'Details & dimensions' ANCHORVALUE: Anchor BUTTONINSERT: Insert - BUTTONINSERTLINK: '插入連結' + BUTTONINSERTLINK: 插入連結 BUTTONREMOVELINK: 移除連結 BUTTONUpdate: Update CAPTIONTEXT: 'Caption text' CSSCLASS: 對齊/樣式 CSSCLASSCENTER: 獨立置中 - CSSCLASSLEFT: '靠左被字包圍。' + CSSCLASSLEFT: 靠左被字包圍。 CSSCLASSLEFTALONE: 'On the left, on its own.' - CSSCLASSRIGHT: '靠右被字包圍。' + CSSCLASSRIGHT: 靠右被字包圍。 DETAILS: Details EMAIL: 電子郵件地址 FILE: 檔案 @@ -295,7 +295,7 @@ zh_TW: IMAGETITLETEXTDESC: 'For additional information about the image' IMAGEWIDTHPX: 寬 INSERTMEDIA: 'Insert Media' - LINK: '插入或編輯選取的連結' + LINK: 插入或編輯選取的連結 LINKANCHOR: 'Anchor on this page' LINKDESCR: 連結敘述 LINKEMAIL: 電子郵件地址 @@ -304,7 +304,7 @@ zh_TW: LINKINTERNAL: 此網站 LINKOPENNEWWIN: 在新視窗打開連結 LINKTO: 連結至 - PAGE: '網頁' + PAGE: 網頁 URL: 網址 URLNOTANOEMBEDRESOURCE: 'The URL ''{url}'' could not be turned into a media resource.' UpdateMEDIA: 'Update Media' @@ -323,11 +323,11 @@ zh_TW: DELETED: Deleted. DropdownBatchActionsDefault: Actions HELP: 說明 - PAGETYPE: '網頁類型:' - PERMAGAIN: '您已被登出,請在下面重新登入。' - PERMALREADY: '抱歉,您沒有權力使用這個部分。您可以用別的帳號登入。' - PERMDEFAULT: '請選擇一個認證方法並登入。' - PLEASESAVE: '請儲存:這個網頁沒有被更新因為尚未被儲存。' + PAGETYPE: 網頁類型: + PERMAGAIN: 您已被登出,請在下面重新登入。 + PERMALREADY: 抱歉,您沒有權力使用這個部分。您可以用別的帳號登入。 + PERMDEFAULT: 請選擇一個認證方法並登入。 + PLEASESAVE: 請儲存:這個網頁沒有被更新因為尚未被儲存。 PreviewButton: Preview REORGANISATIONSUCCESSFUL: 'Reorganised the site tree successfully.' SAVEDUP: Saved. @@ -344,8 +344,8 @@ zh_TW: Member: ADDGROUP: 'Add group' BUTTONCHANGEPASSWORD: 更改密碼 - BUTTONLOGIN: '登入' - BUTTONLOGINOTHER: '用別的帳戶登入' + BUTTONLOGIN: 登入 + BUTTONLOGINOTHER: 用別的帳戶登入 BUTTONLOSTPASSWORD: 忘記密碼 CANTEDIT: 'You don''t have permission to do that' CONFIRMNEWPASSWORD: 確認新密碼 @@ -357,7 +357,7 @@ zh_TW: EMPTYNEWPASSWORD: 'The new password can''t be empty, please try again' ENTEREMAIL: 'Please enter an email address to get a password reset link.' ERRORLOCKEDOUT: 'Your account has been temporarily disabled because of too many failed attempts at logging in. Please try again in 20 minutes.' - ERRORNEWPASSWORD: '新密碼不相配,請再試一次。' + ERRORNEWPASSWORD: 新密碼不相配,請再試一次。 ERRORPASSWORDNOTMATCH: 舊密碼不對,請再試一次。 ERRORWRONGCRED: 密碼或電子郵件地址錯誤。請再是一次。 FIRSTNAME: 名 @@ -474,23 +474,23 @@ zh_TW: PERMISSIONS_CATEGORY: 'Roles and access permissions' UserPermissionsIntro: 'Assigning groups to this user will adjust the permissions they have. See the groups section for details of permissions on individual groups.' PhoneNumberField: - VALIDATION: '請輸入有效的電話號碼' + VALIDATION: 請輸入有效的電話號碼 RelationComplexTableField.ss: ADD: Add CSVEXPORT: 'Export to CSV' NOTFOUND: 'No items found' Security: - ALREADYLOGGEDIN: '你不能瀏覽此頁。請用別的帳戶登入。' + ALREADYLOGGEDIN: 你不能瀏覽此頁。請用別的帳戶登入。 BUTTONSEND: 寄給我密碼重設網址。 CHANGEPASSWORDBELOW: 請在下面更改密碼。 CHANGEPASSWORDHEADER: 更改密碼 - ENTERNEWPASSWORD: '請輸入新的密碼。' - ERRORPASSWORDPERMISSION: '你必須先登入才能改密碼!' - LOGGEDOUT: '你已登出。您在下面再登入一次。' + ENTERNEWPASSWORD: 請輸入新的密碼。 + ERRORPASSWORDPERMISSION: 你必須先登入才能改密碼! + LOGGEDOUT: 你已登出。您在下面再登入一次。 LOGIN: 'Log in' - NOTEPAGESECURED: '那的網頁是被保護的。請先登入。' + NOTEPAGESECURED: 那的網頁是被保護的。請先登入。 NOTERESETLINKINVALID: '

The password reset link is invalid or expired.

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

' - NOTERESETPASSWORD: '請輸入您的電子郵件。我們將寄給你重設密媽的網址。' + NOTERESETPASSWORD: 請輸入您的電子郵件。我們將寄給你重設密媽的網址。 PASSWORDSENTHEADER: 'Password reset link sent to ''{email}''' PASSWORDSENTTEXT: 'Thank you! A reset link has been sent to ''{email}'', provided an account exists for this email address.' SecurityAdmin: diff --git a/model/fieldtypes/HTMLText.php b/model/fieldtypes/HTMLText.php index 54e0ac9d6..47ddf62b3 100644 --- a/model/fieldtypes/HTMLText.php +++ b/model/fieldtypes/HTMLText.php @@ -144,11 +144,21 @@ class HTMLText extends Text { */ public function exists() { // If it's blank, it's blank - if(!parent::exists()) return false; + if(!parent::exists()) { + return false; + } + // If it's got a content tag - if(preg_match('/<(img|embed|object|iframe)[^>]*>/i', $this->value)) return true; - // If it's just one or two tags on its own (and not the above) it's empty. This might be

or

or whatever. - if(preg_match('/^[\\s]*(<[^>]+>[\\s]*){1,2}$/', $this->value)) return false; + if(preg_match('/<(img|embed|object|iframe)[^>]*>/i', $this->value)) { + return true; + } + + // If it's just one or two tags on its own (and not the above) it's empty. + // This might be

or

or whatever. + if(preg_match('/^[\\s]*(<[^>]+>[\\s]*){1,2}$/', $this->value)) { + return false; + } + // Otherwise its content is genuine content return true; } diff --git a/security/Member.php b/security/Member.php index 16766010f..92aa04be6 100644 --- a/security/Member.php +++ b/security/Member.php @@ -425,7 +425,8 @@ class Member extends DataObject implements TemplateGlobalProvider { Cookie::set('alc_enc', null); // // Clear the Remember Me cookie Cookie::forceExpiry('alc_enc'); - // Switch back to live in order to avoid infinite loops when redirecting to the login screen (if this login screen is versioned) + // Switch back to live in order to avoid infinite loops when + // redirecting to the login screen (if this login screen is versioned) Session::clear('readingMode'); $this->write(); diff --git a/security/Security.php b/security/Security.php index 0a7d43b35..5b59eb401 100644 --- a/security/Security.php +++ b/security/Security.php @@ -244,7 +244,7 @@ class Security extends Controller { $controller->redirect( Config::inst()->get('Security', 'login_url') - . "?BackURL=" . urlencode($_SERVER['REQUEST_URI']) + . "?BackURL=" . urlencode($_SERVER['REQUEST_URI']) ); } return; @@ -941,14 +941,15 @@ class Security extends Controller { * Set a custom log-in URL if you have built your own log-in page. */ public static function set_login_url($loginUrl) { - self::$login_url = $loginUrl; -} + self::$login_url = $loginUrl; + } + /** * Get the URL of the log-in page. * Defaults to Security/login but can be re-set with {@link set_login_url()} */ public static function login_url() { - return self::$login_url; + return self::$login_url; } } diff --git a/tests/control/HTTPResponseTest.php b/tests/control/HTTPResponseTest.php index f1b02e048..40b0d3ab3 100644 --- a/tests/control/HTTPResponseTest.php +++ b/tests/control/HTTPResponseTest.php @@ -13,23 +13,6 @@ class HTTPResponseTest extends SapphireTest { ); } - public function testContentLengthHeader() { - $r = new SS_HTTPResponse('123ü'); - $this->assertNotNull($r->getHeader('Content-Length'), 'Content-length header is added'); - $this->assertEquals( - 5, - $r->getHeader('Content-Length'), - 'Header matches actual content length in bytes' - ); - - $r->setBody('1234ü'); - $this->assertEquals( - 6, - $r->getHeader('Content-Length'), - 'Header is updated when body is changed' - ); - } - public function testHTTPResponseException() { $response = new SS_HTTPResponse("Test", 200, 'OK'); @@ -61,4 +44,4 @@ class HTTPResponseTest extends SapphireTest { $this->assertFalse(true, 'Something went wrong with our test exception'); } -} +} \ No newline at end of file diff --git a/tests/filesystem/UploadTest.php b/tests/filesystem/UploadTest.php index d384aac2e..118886db8 100644 --- a/tests/filesystem/UploadTest.php +++ b/tests/filesystem/UploadTest.php @@ -316,6 +316,62 @@ class UploadTest extends SapphireTest { $file2->delete(); } + public function testReplaceFile() { + // create tmp file + $tmpFileName = 'UploadTest-testUpload'; + $tmpFilePath = TEMP_FOLDER . '/' . $tmpFileName; + $tmpFileContent = ''; + for($i=0; $i<10000; $i++) $tmpFileContent .= '0'; + file_put_contents($tmpFilePath, $tmpFileContent); + + // emulates the $_FILES array + $tmpFile = array( + 'name' => $tmpFileName, + 'type' => 'text/plaintext', + 'size' => filesize($tmpFilePath), + 'tmp_name' => $tmpFilePath, + 'extension' => 'txt', + 'error' => UPLOAD_ERR_OK, + ); + + // Make sure there are none here, otherwise they get renamed incorrectly for the test. + $this->deleteTestUploadFiles("/UploadTest-testUpload.*/"); + + $v = new UploadTest_Validator(); + $v->setAllowedExtensions(array('')); + + // test upload into default folder + $u = new Upload(); + $u->setValidator($v); + $u->load($tmpFile); + $file = $u->getFile(); + + $this->assertEquals( + 'UploadTest-testUpload', + $file->Name, + 'File is uploaded without extension' + ); + + $u = new Upload(); + $u->setValidator($v); + $u->setReplaceFile(true); + $u->load($tmpFile); + $file2 = $u->getFile(); + $this->assertEquals( + 'UploadTest-testUpload', + $file2->Name, + 'File does not receive new name' + ); + $this->assertEquals( + $file->ID, + $file2->ID, + 'File database record is the same' + ); + + $file->delete(); + $file2->delete(); + } + } class UploadTest_Validator extends Upload_Validator implements TestOnly { diff --git a/tests/travis/before.php b/tests/travis/before.php new file mode 100755 index 000000000..41427f2ea --- /dev/null +++ b/tests/travis/before.php @@ -0,0 +1,83 @@ +#!/usr/bin/env php + $version, + 'dist' => array( + 'type' => 'tar', + 'url' => "file://$parent/framework.tar" + ) +); + +// Generate a custom composer file. +$composer = json_encode(array( + 'repositories' => array(array('type' => 'package', 'package' => $package)), + 'require' => array( + 'silverstripe/framework' => $version, + 'silverstripe/postgresql' => '*', + 'silverstripe/sqlite3' => '*' + ), + 'minimum-stability' => 'dev' +)); + +echo "Generated composer file:\n"; +echo "$composer\n\n"; + +echo "Archiving framework...\n"; +`cd $framework`; +`tar -cf $parent/framework.tar .`; + +echo "Cloning installer@$installer...\n"; +`git clone --depth=100 --quiet -b $installer git://github.com/silverstripe/silverstripe-installer.git $target`; + +echo "Setting up project...\n"; +`cp $dir/_ss_environment.php $target`; +`cp $dir/_config.php $target/mysite`; + +echo "Replacing composer file...\n"; +unlink("$target/composer.json"); +file_put_contents("$target/composer.json", $composer); + +echo "Running composer...\n"; +`composer install --dev -d $target`; diff --git a/tests/travis/before_script b/tests/travis/before_script deleted file mode 100755 index cc4b2bf49..000000000 --- a/tests/travis/before_script +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/sh - -### USAGE: before_script - -BUILD_DIR=$1 - -# Environment info -echo "# Environment info" -echo " - `php --version`" -echo " - `mysql --version`" -echo " - `pg_config --version`" -echo " - SQLite3 `sqlite3 -version`" -echo "" - -# Fetch all dependencies -# TODO Replace with different composer.json variations - -echo "Checking out installer@master" -git clone --depth=100 --quiet -b master git://github.com/silverstripe/silverstripe-installer.git $BUILD_DIR - -echo "Checking out sqlite3@master" -git clone --depth=100 --quiet git://github.com/silverstripe-labs/silverstripe-sqlite3.git $BUILD_DIR/sqlite3 - -echo "Checking out postgresql@master" -git clone --depth=100 --quiet git://github.com/silverstripe/silverstripe-postgresql.git $BUILD_DIR/postgresql - -# Copy setup files -cp ./tests/travis/_ss_environment.php $BUILD_DIR -cp ./tests/travis/_config.php $BUILD_DIR/mysite - -# Copy actual project code into build directory (checked out by travis) -cp -r . $BUILD_DIR/framework - -cd $BUILD_DIR diff --git a/thirdparty/jquery-ui/datepicker/i18n/jquery.ui.datepicker-zh-CN.js b/thirdparty/jquery-ui/datepicker/i18n/jquery.ui.datepicker-zh-CN.js new file mode 100644 index 000000000..9bc93c5bc --- /dev/null +++ b/thirdparty/jquery-ui/datepicker/i18n/jquery.ui.datepicker-zh-CN.js @@ -0,0 +1,23 @@ +/* Chinese initialisation for the jQuery UI date picker plugin. */ +/* Written by Cloudream (cloudream@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['zh-CN'] = { + closeText: '关闭', + prevText: '<上月', + nextText: '下月>', + currentText: '今天', + monthNames: ['一月','二月','三月','四月','五月','六月', + '七月','八月','九月','十月','十一月','十二月'], + monthNamesShort: ['一月','二月','三月','四月','五月','六月', + '七月','八月','九月','十月','十一月','十二月'], + dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], + dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], + dayNamesMin: ['日','一','二','三','四','五','六'], + weekHeader: '周', + dateFormat: 'yy-mm-dd', + firstDay: 1, + isRTL: false, + showMonthAfterYear: true, + yearSuffix: '年'}; + $.datepicker.setDefaults($.datepicker.regional['zh-CN']); +}); \ No newline at end of file diff --git a/thirdparty/jquery-ui/datepicker/i18n/jquery.ui.datepicker-zh-TW.js b/thirdparty/jquery-ui/datepicker/i18n/jquery.ui.datepicker-zh-TW.js new file mode 100644 index 000000000..b9105ea50 --- /dev/null +++ b/thirdparty/jquery-ui/datepicker/i18n/jquery.ui.datepicker-zh-TW.js @@ -0,0 +1,23 @@ +/* Chinese initialisation for the jQuery UI date picker plugin. */ +/* Written by Ressol (ressol@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['zh-TW'] = { + closeText: '關閉', + prevText: '<上月', + nextText: '下月>', + currentText: '今天', + monthNames: ['一月','二月','三月','四月','五月','六月', + '七月','八月','九月','十月','十一月','十二月'], + monthNamesShort: ['一月','二月','三月','四月','五月','六月', + '七月','八月','九月','十月','十一月','十二月'], + dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], + dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], + dayNamesMin: ['日','一','二','三','四','五','六'], + weekHeader: '周', + dateFormat: 'yy/mm/dd', + firstDay: 1, + isRTL: false, + showMonthAfterYear: true, + yearSuffix: '年'}; + $.datepicker.setDefaults($.datepicker.regional['zh-TW']); +});