8bd25d13 by Jeff Balicki

Untracked files issue resolved to fix .gitignore

1 parent f6b20832
Showing 133 changed files with 0 additions and 1842 deletions
No preview for this file type
1 DB_HOST=127.0.0.1
2 DB_NAME= fp_canada
3 DB_USER=root
4 DB_PASSWORD=jeff518862
5 FORCE_SSL_ADMIN=false
...\ No newline at end of file ...\ No newline at end of file
No preview for this file type
1 <?php
2
3 // autoload.php @generated by Composer
4
5 require_once __DIR__ . '/composer/autoload_real.php';
6
7 return ComposerAutoloaderInite03b9d1e49f7cd9cad5229d65075079e::getLoader();
1
2 Copyright (c) Nils Adermann, Jordi Boggiano
3
4 Permission is hereby granted, free of charge, to any person obtaining a copy
5 of this software and associated documentation files (the "Software"), to deal
6 in the Software without restriction, including without limitation the rights
7 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 copies of the Software, and to permit persons to whom the Software is furnished
9 to do so, subject to the following conditions:
10
11 The above copyright notice and this permission notice shall be included in all
12 copies or substantial portions of the Software.
13
14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 THE SOFTWARE.
21
1 <?php
2
3 // autoload_classmap.php @generated by Composer
4
5 $vendorDir = dirname(dirname(__FILE__));
6 $baseDir = dirname($vendorDir);
7
8 return array(
9 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
10 );
1 <?php
2
3 // autoload_files.php @generated by Composer
4
5 $vendorDir = dirname(dirname(__FILE__));
6 $baseDir = dirname($vendorDir);
7
8 return array(
9 '320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php',
10 );
1 <?php
2
3 // autoload_namespaces.php @generated by Composer
4
5 $vendorDir = dirname(dirname(__FILE__));
6 $baseDir = dirname($vendorDir);
7
8 return array(
9 );
1 <?php
2
3 // autoload_psr4.php @generated by Composer
4
5 $vendorDir = dirname(dirname(__FILE__));
6 $baseDir = dirname($vendorDir);
7
8 return array(
9 'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'),
10 'Dotenv\\' => array($vendorDir . '/vlucas/phpdotenv/src'),
11 );
1 <?php
2
3 // autoload_real.php @generated by Composer
4
5 class ComposerAutoloaderInite03b9d1e49f7cd9cad5229d65075079e
6 {
7 private static $loader;
8
9 public static function loadClassLoader($class)
10 {
11 if ('Composer\Autoload\ClassLoader' === $class) {
12 require __DIR__ . '/ClassLoader.php';
13 }
14 }
15
16 /**
17 * @return \Composer\Autoload\ClassLoader
18 */
19 public static function getLoader()
20 {
21 if (null !== self::$loader) {
22 return self::$loader;
23 }
24
25 require __DIR__ . '/platform_check.php';
26
27 spl_autoload_register(array('ComposerAutoloaderInite03b9d1e49f7cd9cad5229d65075079e', 'loadClassLoader'), true, true);
28 self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
29 spl_autoload_unregister(array('ComposerAutoloaderInite03b9d1e49f7cd9cad5229d65075079e', 'loadClassLoader'));
30
31 $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
32 if ($useStaticLoader) {
33 require __DIR__ . '/autoload_static.php';
34
35 call_user_func(\Composer\Autoload\ComposerStaticInite03b9d1e49f7cd9cad5229d65075079e::getInitializer($loader));
36 } else {
37 $map = require __DIR__ . '/autoload_namespaces.php';
38 foreach ($map as $namespace => $path) {
39 $loader->set($namespace, $path);
40 }
41
42 $map = require __DIR__ . '/autoload_psr4.php';
43 foreach ($map as $namespace => $path) {
44 $loader->setPsr4($namespace, $path);
45 }
46
47 $classMap = require __DIR__ . '/autoload_classmap.php';
48 if ($classMap) {
49 $loader->addClassMap($classMap);
50 }
51 }
52
53 $loader->register(true);
54
55 if ($useStaticLoader) {
56 $includeFiles = Composer\Autoload\ComposerStaticInite03b9d1e49f7cd9cad5229d65075079e::$files;
57 } else {
58 $includeFiles = require __DIR__ . '/autoload_files.php';
59 }
60 foreach ($includeFiles as $fileIdentifier => $file) {
61 composerRequiree03b9d1e49f7cd9cad5229d65075079e($fileIdentifier, $file);
62 }
63
64 return $loader;
65 }
66 }
67
68 function composerRequiree03b9d1e49f7cd9cad5229d65075079e($fileIdentifier, $file)
69 {
70 if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
71 require $file;
72
73 $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
74 }
75 }
1 <?php
2
3 // autoload_static.php @generated by Composer
4
5 namespace Composer\Autoload;
6
7 class ComposerStaticInite03b9d1e49f7cd9cad5229d65075079e
8 {
9 public static $files = array (
10 '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
11 );
12
13 public static $prefixLengthsPsr4 = array (
14 'S' =>
15 array (
16 'Symfony\\Polyfill\\Ctype\\' => 23,
17 ),
18 'D' =>
19 array (
20 'Dotenv\\' => 7,
21 ),
22 );
23
24 public static $prefixDirsPsr4 = array (
25 'Symfony\\Polyfill\\Ctype\\' =>
26 array (
27 0 => __DIR__ . '/..' . '/symfony/polyfill-ctype',
28 ),
29 'Dotenv\\' =>
30 array (
31 0 => __DIR__ . '/..' . '/vlucas/phpdotenv/src',
32 ),
33 );
34
35 public static $classMap = array (
36 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
37 );
38
39 public static function getInitializer(ClassLoader $loader)
40 {
41 return \Closure::bind(function () use ($loader) {
42 $loader->prefixLengthsPsr4 = ComposerStaticInite03b9d1e49f7cd9cad5229d65075079e::$prefixLengthsPsr4;
43 $loader->prefixDirsPsr4 = ComposerStaticInite03b9d1e49f7cd9cad5229d65075079e::$prefixDirsPsr4;
44 $loader->classMap = ComposerStaticInite03b9d1e49f7cd9cad5229d65075079e::$classMap;
45
46 }, null, ClassLoader::class);
47 }
48 }
1 {
2 "packages": [
3 {
4 "name": "symfony/polyfill-ctype",
5 "version": "dev-main",
6 "version_normalized": "dev-main",
7 "source": {
8 "type": "git",
9 "url": "https://github.com/symfony/polyfill-ctype.git",
10 "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce"
11 },
12 "dist": {
13 "type": "zip",
14 "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce",
15 "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce",
16 "shasum": ""
17 },
18 "require": {
19 "php": ">=7.1"
20 },
21 "suggest": {
22 "ext-ctype": "For best performance"
23 },
24 "time": "2021-02-19T12:13:01+00:00",
25 "default-branch": true,
26 "type": "library",
27 "extra": {
28 "branch-alias": {
29 "dev-main": "1.23-dev"
30 },
31 "thanks": {
32 "name": "symfony/polyfill",
33 "url": "https://github.com/symfony/polyfill"
34 }
35 },
36 "installation-source": "dist",
37 "autoload": {
38 "psr-4": {
39 "Symfony\\Polyfill\\Ctype\\": ""
40 },
41 "files": [
42 "bootstrap.php"
43 ]
44 },
45 "notification-url": "https://packagist.org/downloads/",
46 "license": [
47 "MIT"
48 ],
49 "authors": [
50 {
51 "name": "Gert de Pagter",
52 "email": "BackEndTea@gmail.com"
53 },
54 {
55 "name": "Symfony Community",
56 "homepage": "https://symfony.com/contributors"
57 }
58 ],
59 "description": "Symfony polyfill for ctype functions",
60 "homepage": "https://symfony.com",
61 "keywords": [
62 "compatibility",
63 "ctype",
64 "polyfill",
65 "portable"
66 ],
67 "support": {
68 "source": "https://github.com/symfony/polyfill-ctype/tree/main"
69 },
70 "funding": [
71 {
72 "url": "https://symfony.com/sponsor",
73 "type": "custom"
74 },
75 {
76 "url": "https://github.com/fabpot",
77 "type": "github"
78 },
79 {
80 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
81 "type": "tidelift"
82 }
83 ],
84 "install-path": "../symfony/polyfill-ctype"
85 },
86 {
87 "name": "vlucas/phpdotenv",
88 "version": "2.6.x-dev",
89 "version_normalized": "2.6.9999999.9999999-dev",
90 "source": {
91 "type": "git",
92 "url": "https://github.com/vlucas/phpdotenv.git",
93 "reference": "b786088918a884258c9e3e27405c6a4cf2ee246e"
94 },
95 "dist": {
96 "type": "zip",
97 "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/b786088918a884258c9e3e27405c6a4cf2ee246e",
98 "reference": "b786088918a884258c9e3e27405c6a4cf2ee246e",
99 "shasum": ""
100 },
101 "require": {
102 "php": "^5.3.9 || ^7.0 || ^8.0",
103 "symfony/polyfill-ctype": "^1.17"
104 },
105 "require-dev": {
106 "ext-filter": "*",
107 "ext-pcre": "*",
108 "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20"
109 },
110 "suggest": {
111 "ext-filter": "Required to use the boolean validator.",
112 "ext-pcre": "Required to use most of the library."
113 },
114 "time": "2021-01-20T14:39:13+00:00",
115 "type": "library",
116 "extra": {
117 "branch-alias": {
118 "dev-master": "2.6-dev"
119 }
120 },
121 "installation-source": "dist",
122 "autoload": {
123 "psr-4": {
124 "Dotenv\\": "src/"
125 }
126 },
127 "notification-url": "https://packagist.org/downloads/",
128 "license": [
129 "BSD-3-Clause"
130 ],
131 "authors": [
132 {
133 "name": "Graham Campbell",
134 "email": "graham@alt-three.com",
135 "homepage": "https://gjcampbell.co.uk/"
136 },
137 {
138 "name": "Vance Lucas",
139 "email": "vance@vancelucas.com",
140 "homepage": "https://vancelucas.com/"
141 }
142 ],
143 "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.",
144 "keywords": [
145 "dotenv",
146 "env",
147 "environment"
148 ],
149 "support": {
150 "issues": "https://github.com/vlucas/phpdotenv/issues",
151 "source": "https://github.com/vlucas/phpdotenv/tree/2.6"
152 },
153 "funding": [
154 {
155 "url": "https://github.com/GrahamCampbell",
156 "type": "github"
157 },
158 {
159 "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv",
160 "type": "tidelift"
161 }
162 ],
163 "install-path": "../vlucas/phpdotenv"
164 }
165 ],
166 "dev": true,
167 "dev-package-names": []
168 }
1 <?php return array(
2 'root' => array(
3 'pretty_version' => '1.0.0+no-version-set',
4 'version' => '1.0.0.0',
5 'type' => 'library',
6 'install_path' => __DIR__ . '/../../',
7 'aliases' => array(),
8 'reference' => NULL,
9 'name' => 'scottjs/wp-dotenv',
10 'dev' => true,
11 ),
12 'versions' => array(
13 'scottjs/wp-dotenv' => array(
14 'pretty_version' => '1.0.0+no-version-set',
15 'version' => '1.0.0.0',
16 'type' => 'library',
17 'install_path' => __DIR__ . '/../../',
18 'aliases' => array(),
19 'reference' => NULL,
20 'dev_requirement' => false,
21 ),
22 'symfony/polyfill-ctype' => array(
23 'pretty_version' => 'dev-main',
24 'version' => 'dev-main',
25 'type' => 'library',
26 'install_path' => __DIR__ . '/../symfony/polyfill-ctype',
27 'aliases' => array(
28 0 => '1.23.x-dev',
29 ),
30 'reference' => '46cd95797e9df938fdd2b03693b5fca5e64b01ce',
31 'dev_requirement' => false,
32 ),
33 'vlucas/phpdotenv' => array(
34 'pretty_version' => '2.6.x-dev',
35 'version' => '2.6.9999999.9999999-dev',
36 'type' => 'library',
37 'install_path' => __DIR__ . '/../vlucas/phpdotenv',
38 'aliases' => array(),
39 'reference' => 'b786088918a884258c9e3e27405c6a4cf2ee246e',
40 'dev_requirement' => false,
41 ),
42 ),
43 );
1 <?php
2
3 // platform_check.php @generated by Composer
4
5 $issues = array();
6
7 if (!(PHP_VERSION_ID >= 70100)) {
8 $issues[] = 'Your Composer dependencies require a PHP version ">= 7.1.0". You are running ' . PHP_VERSION . '.';
9 }
10
11 if ($issues) {
12 if (!headers_sent()) {
13 header('HTTP/1.1 500 Internal Server Error');
14 }
15 if (!ini_get('display_errors')) {
16 if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
17 fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL);
18 } elseif (!headers_sent()) {
19 echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
20 }
21 }
22 trigger_error(
23 'Composer detected issues in your platform: ' . implode(' ', $issues),
24 E_USER_ERROR
25 );
26 }
1 <?php
2
3 /*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11
12 namespace Symfony\Polyfill\Ctype;
13
14 /**
15 * Ctype implementation through regex.
16 *
17 * @internal
18 *
19 * @author Gert de Pagter <BackEndTea@gmail.com>
20 */
21 final class Ctype
22 {
23 /**
24 * Returns TRUE if every character in text is either a letter or a digit, FALSE otherwise.
25 *
26 * @see https://php.net/ctype-alnum
27 *
28 * @param string|int $text
29 *
30 * @return bool
31 */
32 public static function ctype_alnum($text)
33 {
34 $text = self::convert_int_to_char_for_ctype($text);
35
36 return \is_string($text) && '' !== $text && !preg_match('/[^A-Za-z0-9]/', $text);
37 }
38
39 /**
40 * Returns TRUE if every character in text is a letter, FALSE otherwise.
41 *
42 * @see https://php.net/ctype-alpha
43 *
44 * @param string|int $text
45 *
46 * @return bool
47 */
48 public static function ctype_alpha($text)
49 {
50 $text = self::convert_int_to_char_for_ctype($text);
51
52 return \is_string($text) && '' !== $text && !preg_match('/[^A-Za-z]/', $text);
53 }
54
55 /**
56 * Returns TRUE if every character in text is a control character from the current locale, FALSE otherwise.
57 *
58 * @see https://php.net/ctype-cntrl
59 *
60 * @param string|int $text
61 *
62 * @return bool
63 */
64 public static function ctype_cntrl($text)
65 {
66 $text = self::convert_int_to_char_for_ctype($text);
67
68 return \is_string($text) && '' !== $text && !preg_match('/[^\x00-\x1f\x7f]/', $text);
69 }
70
71 /**
72 * Returns TRUE if every character in the string text is a decimal digit, FALSE otherwise.
73 *
74 * @see https://php.net/ctype-digit
75 *
76 * @param string|int $text
77 *
78 * @return bool
79 */
80 public static function ctype_digit($text)
81 {
82 $text = self::convert_int_to_char_for_ctype($text);
83
84 return \is_string($text) && '' !== $text && !preg_match('/[^0-9]/', $text);
85 }
86
87 /**
88 * Returns TRUE if every character in text is printable and actually creates visible output (no white space), FALSE otherwise.
89 *
90 * @see https://php.net/ctype-graph
91 *
92 * @param string|int $text
93 *
94 * @return bool
95 */
96 public static function ctype_graph($text)
97 {
98 $text = self::convert_int_to_char_for_ctype($text);
99
100 return \is_string($text) && '' !== $text && !preg_match('/[^!-~]/', $text);
101 }
102
103 /**
104 * Returns TRUE if every character in text is a lowercase letter.
105 *
106 * @see https://php.net/ctype-lower
107 *
108 * @param string|int $text
109 *
110 * @return bool
111 */
112 public static function ctype_lower($text)
113 {
114 $text = self::convert_int_to_char_for_ctype($text);
115
116 return \is_string($text) && '' !== $text && !preg_match('/[^a-z]/', $text);
117 }
118
119 /**
120 * Returns TRUE if every character in text will actually create output (including blanks). Returns FALSE if text contains control characters or characters that do not have any output or control function at all.
121 *
122 * @see https://php.net/ctype-print
123 *
124 * @param string|int $text
125 *
126 * @return bool
127 */
128 public static function ctype_print($text)
129 {
130 $text = self::convert_int_to_char_for_ctype($text);
131
132 return \is_string($text) && '' !== $text && !preg_match('/[^ -~]/', $text);
133 }
134
135 /**
136 * Returns TRUE if every character in text is printable, but neither letter, digit or blank, FALSE otherwise.
137 *
138 * @see https://php.net/ctype-punct
139 *
140 * @param string|int $text
141 *
142 * @return bool
143 */
144 public static function ctype_punct($text)
145 {
146 $text = self::convert_int_to_char_for_ctype($text);
147
148 return \is_string($text) && '' !== $text && !preg_match('/[^!-\/\:-@\[-`\{-~]/', $text);
149 }
150
151 /**
152 * Returns TRUE if every character in text creates some sort of white space, FALSE otherwise. Besides the blank character this also includes tab, vertical tab, line feed, carriage return and form feed characters.
153 *
154 * @see https://php.net/ctype-space
155 *
156 * @param string|int $text
157 *
158 * @return bool
159 */
160 public static function ctype_space($text)
161 {
162 $text = self::convert_int_to_char_for_ctype($text);
163
164 return \is_string($text) && '' !== $text && !preg_match('/[^\s]/', $text);
165 }
166
167 /**
168 * Returns TRUE if every character in text is an uppercase letter.
169 *
170 * @see https://php.net/ctype-upper
171 *
172 * @param string|int $text
173 *
174 * @return bool
175 */
176 public static function ctype_upper($text)
177 {
178 $text = self::convert_int_to_char_for_ctype($text);
179
180 return \is_string($text) && '' !== $text && !preg_match('/[^A-Z]/', $text);
181 }
182
183 /**
184 * Returns TRUE if every character in text is a hexadecimal 'digit', that is a decimal digit or a character from [A-Fa-f] , FALSE otherwise.
185 *
186 * @see https://php.net/ctype-xdigit
187 *
188 * @param string|int $text
189 *
190 * @return bool
191 */
192 public static function ctype_xdigit($text)
193 {
194 $text = self::convert_int_to_char_for_ctype($text);
195
196 return \is_string($text) && '' !== $text && !preg_match('/[^A-Fa-f0-9]/', $text);
197 }
198
199 /**
200 * Converts integers to their char versions according to normal ctype behaviour, if needed.
201 *
202 * If an integer between -128 and 255 inclusive is provided,
203 * it is interpreted as the ASCII value of a single character
204 * (negative values have 256 added in order to allow characters in the Extended ASCII range).
205 * Any other integer is interpreted as a string containing the decimal digits of the integer.
206 *
207 * @param string|int $int
208 *
209 * @return mixed
210 */
211 private static function convert_int_to_char_for_ctype($int)
212 {
213 if (!\is_int($int)) {
214 return $int;
215 }
216
217 if ($int < -128 || $int > 255) {
218 return (string) $int;
219 }
220
221 if ($int < 0) {
222 $int += 256;
223 }
224
225 return \chr($int);
226 }
227 }
1 Copyright (c) 2018-2019 Fabien Potencier
2
3 Permission is hereby granted, free of charge, to any person obtaining a copy
4 of this software and associated documentation files (the "Software"), to deal
5 in the Software without restriction, including without limitation the rights
6 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 copies of the Software, and to permit persons to whom the Software is furnished
8 to do so, subject to the following conditions:
9
10 The above copyright notice and this permission notice shall be included in all
11 copies or substantial portions of the Software.
12
13 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 THE SOFTWARE.
1 Symfony Polyfill / Ctype
2 ========================
3
4 This component provides `ctype_*` functions to users who run php versions without the ctype extension.
5
6 More information can be found in the
7 [main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md).
8
9 License
10 =======
11
12 This library is released under the [MIT license](LICENSE).
1 <?php
2
3 /*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11
12 use Symfony\Polyfill\Ctype as p;
13
14 if (\PHP_VERSION_ID >= 80000) {
15 return require __DIR__.'/bootstrap80.php';
16 }
17
18 if (!function_exists('ctype_alnum')) {
19 function ctype_alnum($text) { return p\Ctype::ctype_alnum($text); }
20 }
21 if (!function_exists('ctype_alpha')) {
22 function ctype_alpha($text) { return p\Ctype::ctype_alpha($text); }
23 }
24 if (!function_exists('ctype_cntrl')) {
25 function ctype_cntrl($text) { return p\Ctype::ctype_cntrl($text); }
26 }
27 if (!function_exists('ctype_digit')) {
28 function ctype_digit($text) { return p\Ctype::ctype_digit($text); }
29 }
30 if (!function_exists('ctype_graph')) {
31 function ctype_graph($text) { return p\Ctype::ctype_graph($text); }
32 }
33 if (!function_exists('ctype_lower')) {
34 function ctype_lower($text) { return p\Ctype::ctype_lower($text); }
35 }
36 if (!function_exists('ctype_print')) {
37 function ctype_print($text) { return p\Ctype::ctype_print($text); }
38 }
39 if (!function_exists('ctype_punct')) {
40 function ctype_punct($text) { return p\Ctype::ctype_punct($text); }
41 }
42 if (!function_exists('ctype_space')) {
43 function ctype_space($text) { return p\Ctype::ctype_space($text); }
44 }
45 if (!function_exists('ctype_upper')) {
46 function ctype_upper($text) { return p\Ctype::ctype_upper($text); }
47 }
48 if (!function_exists('ctype_xdigit')) {
49 function ctype_xdigit($text) { return p\Ctype::ctype_xdigit($text); }
50 }
1 <?php
2
3 /*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11
12 use Symfony\Polyfill\Ctype as p;
13
14 if (!function_exists('ctype_alnum')) {
15 function ctype_alnum(mixed $text): bool { return p\Ctype::ctype_alnum($text); }
16 }
17 if (!function_exists('ctype_alpha')) {
18 function ctype_alpha(mixed $text): bool { return p\Ctype::ctype_alpha($text); }
19 }
20 if (!function_exists('ctype_cntrl')) {
21 function ctype_cntrl(mixed $text): bool { return p\Ctype::ctype_cntrl($text); }
22 }
23 if (!function_exists('ctype_digit')) {
24 function ctype_digit(mixed $text): bool { return p\Ctype::ctype_digit($text); }
25 }
26 if (!function_exists('ctype_graph')) {
27 function ctype_graph(mixed $text): bool { return p\Ctype::ctype_graph($text); }
28 }
29 if (!function_exists('ctype_lower')) {
30 function ctype_lower(mixed $text): bool { return p\Ctype::ctype_lower($text); }
31 }
32 if (!function_exists('ctype_print')) {
33 function ctype_print(mixed $text): bool { return p\Ctype::ctype_print($text); }
34 }
35 if (!function_exists('ctype_punct')) {
36 function ctype_punct(mixed $text): bool { return p\Ctype::ctype_punct($text); }
37 }
38 if (!function_exists('ctype_space')) {
39 function ctype_space(mixed $text): bool { return p\Ctype::ctype_space($text); }
40 }
41 if (!function_exists('ctype_upper')) {
42 function ctype_upper(mixed $text): bool { return p\Ctype::ctype_upper($text); }
43 }
44 if (!function_exists('ctype_xdigit')) {
45 function ctype_xdigit(mixed $text): bool { return p\Ctype::ctype_xdigit($text); }
46 }
1 {
2 "name": "symfony/polyfill-ctype",
3 "type": "library",
4 "description": "Symfony polyfill for ctype functions",
5 "keywords": ["polyfill", "compatibility", "portable", "ctype"],
6 "homepage": "https://symfony.com",
7 "license": "MIT",
8 "authors": [
9 {
10 "name": "Gert de Pagter",
11 "email": "BackEndTea@gmail.com"
12 },
13 {
14 "name": "Symfony Community",
15 "homepage": "https://symfony.com/contributors"
16 }
17 ],
18 "require": {
19 "php": ">=7.1"
20 },
21 "autoload": {
22 "psr-4": { "Symfony\\Polyfill\\Ctype\\": "" },
23 "files": [ "bootstrap.php" ]
24 },
25 "suggest": {
26 "ext-ctype": "For best performance"
27 },
28 "minimum-stability": "dev",
29 "extra": {
30 "branch-alias": {
31 "dev-main": "1.23-dev"
32 },
33 "thanks": {
34 "name": "symfony/polyfill",
35 "url": "https://github.com/symfony/polyfill"
36 }
37 }
38 }
1 The BSD 3-Clause License
2 http://opensource.org/licenses/BSD-3-Clause
3
4 Copyright (c) 2013, Vance Lucas
5 All rights reserved.
6
7 Redistribution and use in source and binary forms, with or without
8 modification, are permitted provided that the following conditions are
9 met:
10
11 * Redistributions of source code must retain the above copyright
12 notice,
13 this list of conditions and the following disclaimer.
14 * Redistributions in binary form must reproduce the above copyright
15 notice, this list of conditions and the following disclaimer in the
16 documentation and/or other materials provided with the distribution.
17 * Neither the name of the Vance Lucas nor the names of its contributors
18 may be used to endorse or promote products derived from this software
19 without specific prior written permission.
20
21 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
22 IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
23 TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
24 PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25 HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
27 TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
28 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
29 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
30 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
31 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32
1 {
2 "name": "vlucas/phpdotenv",
3 "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.",
4 "keywords": ["env", "dotenv", "environment"],
5 "license": "BSD-3-Clause",
6 "authors": [
7 {
8 "name": "Graham Campbell",
9 "email": "graham@alt-three.com",
10 "homepage": "https://gjcampbell.co.uk/"
11 },
12 {
13 "name": "Vance Lucas",
14 "email": "vance@vancelucas.com",
15 "homepage": "https://vancelucas.com/"
16 }
17 ],
18 "require": {
19 "php": "^5.3.9 || ^7.0 || ^8.0",
20 "symfony/polyfill-ctype": "^1.17"
21 },
22 "require-dev": {
23 "ext-filter": "*",
24 "ext-pcre": "*",
25 "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20"
26 },
27 "autoload": {
28 "psr-4": {
29 "Dotenv\\": "src/"
30 }
31 },
32 "suggest": {
33 "ext-filter": "Required to use the boolean validator.",
34 "ext-pcre": "Required to use most of the library."
35 },
36 "config": {
37 "preferred-install": "dist"
38 },
39 "extra": {
40 "branch-alias": {
41 "dev-master": "2.6-dev"
42 }
43 }
44 }
1 <?php
2
3 namespace Dotenv;
4
5 use Dotenv\Exception\InvalidPathException;
6
7 /**
8 * This is the dotenv class.
9 *
10 * It's responsible for loading a `.env` file in the given directory and
11 * setting the environment vars.
12 */
13 class Dotenv
14 {
15 /**
16 * The file path.
17 *
18 * @var string
19 */
20 protected $filePath;
21
22 /**
23 * The loader instance.
24 *
25 * @var \Dotenv\Loader|null
26 */
27 protected $loader;
28
29 /**
30 * Create a new dotenv instance.
31 *
32 * @param string $path
33 * @param string $file
34 *
35 * @return void
36 */
37 public function __construct($path, $file = '.env')
38 {
39 $this->filePath = $this->getFilePath($path, $file);
40 $this->loader = new Loader($this->filePath, true);
41 }
42
43 /**
44 * Load environment file in given directory.
45 *
46 * @throws \Dotenv\Exception\InvalidPathException|\Dotenv\Exception\InvalidFileException
47 *
48 * @return array
49 */
50 public function load()
51 {
52 return $this->loadData();
53 }
54
55 /**
56 * Load environment file in given directory, suppress InvalidPathException.
57 *
58 * @throws \Dotenv\Exception\InvalidFileException
59 *
60 * @return array
61 */
62 public function safeLoad()
63 {
64 try {
65 return $this->loadData();
66 } catch (InvalidPathException $e) {
67 // suppressing exception
68 return array();
69 }
70 }
71
72 /**
73 * Load environment file in given directory.
74 *
75 * @throws \Dotenv\Exception\InvalidPathException|\Dotenv\Exception\InvalidFileException
76 *
77 * @return array
78 */
79 public function overload()
80 {
81 return $this->loadData(true);
82 }
83
84 /**
85 * Returns the full path to the file.
86 *
87 * @param string $path
88 * @param string $file
89 *
90 * @return string
91 */
92 protected function getFilePath($path, $file)
93 {
94 if (!is_string($file)) {
95 $file = '.env';
96 }
97
98 $filePath = rtrim($path, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR.$file;
99
100 return $filePath;
101 }
102
103 /**
104 * Actually load the data.
105 *
106 * @param bool $overload
107 *
108 * @throws \Dotenv\Exception\InvalidPathException|\Dotenv\Exception\InvalidFileException
109 *
110 * @return array
111 */
112 protected function loadData($overload = false)
113 {
114 return $this->loader->setImmutable(!$overload)->load();
115 }
116
117 /**
118 * Required ensures that the specified variables exist, and returns a new validator object.
119 *
120 * @param string|string[] $variable
121 *
122 * @return \Dotenv\Validator
123 */
124 public function required($variable)
125 {
126 return new Validator((array) $variable, $this->loader);
127 }
128
129 /**
130 * Get the list of environment variables declared inside the 'env' file.
131 *
132 * @return array
133 */
134 public function getEnvironmentVariableNames()
135 {
136 return $this->loader->variableNames;
137 }
138 }
1 <?php
2
3 namespace Dotenv\Exception;
4
5 /**
6 * This is the exception interface.
7 */
8 interface ExceptionInterface
9 {
10 //
11 }
1 <?php
2
3 namespace Dotenv\Exception;
4
5 use InvalidArgumentException;
6
7 /**
8 * This is the invalid callback exception class.
9 */
10 class InvalidCallbackException extends InvalidArgumentException implements ExceptionInterface
11 {
12 //
13 }
1 <?php
2
3 namespace Dotenv\Exception;
4
5 use InvalidArgumentException;
6
7 /**
8 * This is the invalid file exception class.
9 */
10 class InvalidFileException extends InvalidArgumentException implements ExceptionInterface
11 {
12 //
13 }
1 <?php
2
3 namespace Dotenv\Exception;
4
5 use InvalidArgumentException;
6
7 /**
8 * This is the invalid path exception class.
9 */
10 class InvalidPathException extends InvalidArgumentException implements ExceptionInterface
11 {
12 //
13 }
1 <?php
2
3 namespace Dotenv\Exception;
4
5 use RuntimeException;
6
7 /**
8 * This is the validation exception class.
9 */
10 class ValidationException extends RuntimeException implements ExceptionInterface
11 {
12 //
13 }
1 <?php
2
3 namespace Dotenv;
4
5 use Dotenv\Exception\InvalidPathException;
6
7 /**
8 * This is the loaded class.
9 *
10 * It's responsible for loading variables by reading a file from disk and:
11 * - stripping comments beginning with a `#`,
12 * - parsing lines that look shell variable setters, e.g `export key = value`, `key="value"`.
13 */
14 class Loader
15 {
16 /**
17 * The file path.
18 *
19 * @var string
20 */
21 protected $filePath;
22
23 /**
24 * Are we immutable?
25 *
26 * @var bool
27 */
28 protected $immutable;
29
30 /**
31 * The list of environment variables declared inside the 'env' file.
32 *
33 * @var array
34 */
35 public $variableNames = array();
36
37 /**
38 * Create a new loader instance.
39 *
40 * @param string $filePath
41 * @param bool $immutable
42 *
43 * @return void
44 */
45 public function __construct($filePath, $immutable = false)
46 {
47 $this->filePath = $filePath;
48 $this->immutable = $immutable;
49 }
50
51 /**
52 * Set immutable value.
53 *
54 * @param bool $immutable
55 *
56 * @return $this
57 */
58 public function setImmutable($immutable = false)
59 {
60 $this->immutable = $immutable;
61
62 return $this;
63 }
64
65 /**
66 * Get immutable value.
67 *
68 * @return bool
69 */
70 public function getImmutable()
71 {
72 return $this->immutable;
73 }
74
75 /**
76 * Load `.env` file in given directory.
77 *
78 * @throws \Dotenv\Exception\InvalidPathException|\Dotenv\Exception\InvalidFileException
79 *
80 * @return array
81 */
82 public function load()
83 {
84 $this->ensureFileIsReadable();
85
86 $filePath = $this->filePath;
87 $lines = $this->readLinesFromFile($filePath);
88 foreach ($lines as $line) {
89 if (!$this->isComment($line) && $this->looksLikeSetter($line)) {
90 $this->setEnvironmentVariable($line);
91 }
92 }
93
94 return $lines;
95 }
96
97 /**
98 * Ensures the given filePath is readable.
99 *
100 * @throws \Dotenv\Exception\InvalidPathException
101 *
102 * @return void
103 */
104 protected function ensureFileIsReadable()
105 {
106 if (!is_readable($this->filePath) || !is_file($this->filePath)) {
107 throw new InvalidPathException(sprintf('Unable to read the environment file at %s.', $this->filePath));
108 }
109 }
110
111 /**
112 * Normalise the given environment variable.
113 *
114 * Takes value as passed in by developer and:
115 * - ensures we're dealing with a separate name and value, breaking apart the name string if needed,
116 * - cleaning the value of quotes,
117 * - cleaning the name of quotes,
118 * - resolving nested variables.
119 *
120 * @param string $name
121 * @param string $value
122 *
123 * @throws \Dotenv\Exception\InvalidFileException
124 *
125 * @return array
126 */
127 protected function normaliseEnvironmentVariable($name, $value)
128 {
129 list($name, $value) = $this->processFilters($name, $value);
130
131 $value = $this->resolveNestedVariables($value);
132
133 return array($name, $value);
134 }
135
136 /**
137 * Process the runtime filters.
138 *
139 * Called from `normaliseEnvironmentVariable` and the `VariableFactory`, passed as a callback in `$this->loadFromFile()`.
140 *
141 * @param string $name
142 * @param string $value
143 *
144 * @throws \Dotenv\Exception\InvalidFileException
145 *
146 * @return array
147 */
148 public function processFilters($name, $value)
149 {
150 list($name, $value) = $this->splitCompoundStringIntoParts($name, $value);
151 list($name, $value) = $this->sanitiseVariableName($name, $value);
152 list($name, $value) = $this->sanitiseVariableValue($name, $value);
153
154 return array($name, $value);
155 }
156
157 /**
158 * Read lines from the file, auto detecting line endings.
159 *
160 * @param string $filePath
161 *
162 * @return array
163 */
164 protected function readLinesFromFile($filePath)
165 {
166 // Read file into an array of lines with auto-detected line endings
167 $autodetect = ini_get('auto_detect_line_endings');
168 ini_set('auto_detect_line_endings', '1');
169 $lines = file($filePath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
170 ini_set('auto_detect_line_endings', $autodetect);
171
172 return $lines;
173 }
174
175 /**
176 * Determine if the line in the file is a comment, e.g. begins with a #.
177 *
178 * @param string $line
179 *
180 * @return bool
181 */
182 protected function isComment($line)
183 {
184 $line = ltrim($line);
185
186 return isset($line[0]) && $line[0] === '#';
187 }
188
189 /**
190 * Determine if the given line looks like it's setting a variable.
191 *
192 * @param string $line
193 *
194 * @return bool
195 */
196 protected function looksLikeSetter($line)
197 {
198 return strpos($line, '=') !== false;
199 }
200
201 /**
202 * Split the compound string into parts.
203 *
204 * If the `$name` contains an `=` sign, then we split it into 2 parts, a `name` & `value`
205 * disregarding the `$value` passed in.
206 *
207 * @param string $name
208 * @param string $value
209 *
210 * @return array
211 */
212 protected function splitCompoundStringIntoParts($name, $value)
213 {
214 if (strpos($name, '=') !== false) {
215 list($name, $value) = array_map('trim', explode('=', $name, 2));
216 }
217
218 return array($name, $value);
219 }
220
221 /**
222 * Strips quotes from the environment variable value.
223 *
224 * @param string $name
225 * @param string $value
226 *
227 * @throws \Dotenv\Exception\InvalidFileException
228 *
229 * @return array
230 */
231 protected function sanitiseVariableValue($name, $value)
232 {
233 $value = trim($value);
234 if (!$value) {
235 return array($name, $value);
236 }
237
238 return array($name, Parser::parseValue($value));
239 }
240
241 /**
242 * Resolve the nested variables.
243 *
244 * Look for ${varname} patterns in the variable value and replace with an
245 * existing environment variable.
246 *
247 * @param string $value
248 *
249 * @return mixed
250 */
251 protected function resolveNestedVariables($value)
252 {
253 if (strpos($value, '$') !== false) {
254 $loader = $this;
255 $value = preg_replace_callback(
256 '/\${([a-zA-Z0-9_.]+)}/',
257 function ($matchedPatterns) use ($loader) {
258 $nestedVariable = $loader->getEnvironmentVariable($matchedPatterns[1]);
259 if ($nestedVariable === null) {
260 return $matchedPatterns[0];
261 } else {
262 return $nestedVariable;
263 }
264 },
265 $value
266 );
267 }
268
269 return $value;
270 }
271
272 /**
273 * Strips quotes and the optional leading "export " from the environment variable name.
274 *
275 * @param string $name
276 * @param string $value
277 *
278 * @return array
279 */
280 protected function sanitiseVariableName($name, $value)
281 {
282 return array(Parser::parseName($name), $value);
283 }
284
285 /**
286 * Search the different places for environment variables and return first value found.
287 *
288 * @param string $name
289 *
290 * @return string|null
291 */
292 public function getEnvironmentVariable($name)
293 {
294 switch (true) {
295 case array_key_exists($name, $_ENV):
296 return $_ENV[$name];
297 case array_key_exists($name, $_SERVER):
298 return $_SERVER[$name];
299 default:
300 $value = getenv($name);
301
302 return $value === false ? null : $value; // switch getenv default to null
303 }
304 }
305
306 /**
307 * Set an environment variable.
308 *
309 * This is done using:
310 * - putenv,
311 * - $_ENV,
312 * - $_SERVER.
313 *
314 * The environment variable value is stripped of single and double quotes.
315 *
316 * @param string $name
317 * @param string|null $value
318 *
319 * @throws \Dotenv\Exception\InvalidFileException
320 *
321 * @return void
322 */
323 public function setEnvironmentVariable($name, $value = null)
324 {
325 list($name, $value) = $this->normaliseEnvironmentVariable($name, $value);
326
327 $this->variableNames[] = $name;
328
329 // Don't overwrite existing environment variables if we're immutable
330 // Ruby's dotenv does this with `ENV[key] ||= value`.
331 if ($this->immutable && $this->getEnvironmentVariable($name) !== null) {
332 return;
333 }
334
335 // If PHP is running as an Apache module and an existing
336 // Apache environment variable exists, overwrite it
337 if (function_exists('apache_getenv') && function_exists('apache_setenv') && apache_getenv($name) !== false) {
338 apache_setenv($name, $value);
339 }
340
341 if (function_exists('putenv')) {
342 putenv("$name=$value");
343 }
344
345 $_ENV[$name] = $value;
346 $_SERVER[$name] = $value;
347 }
348
349 /**
350 * Clear an environment variable.
351 *
352 * This is not (currently) used by Dotenv but is provided as a utility
353 * method for 3rd party code.
354 *
355 * This is done using:
356 * - putenv,
357 * - unset($_ENV, $_SERVER).
358 *
359 * @param string $name
360 *
361 * @see setEnvironmentVariable()
362 *
363 * @return void
364 */
365 public function clearEnvironmentVariable($name)
366 {
367 // Don't clear anything if we're immutable.
368 if ($this->immutable) {
369 return;
370 }
371
372 if (function_exists('putenv')) {
373 putenv($name);
374 }
375
376 unset($_ENV[$name], $_SERVER[$name]);
377 }
378 }
1 <?php
2
3 namespace Dotenv;
4
5 use Dotenv\Exception\InvalidFileException;
6
7 class Parser
8 {
9 const INITIAL_STATE = 0;
10 const QUOTED_STATE = 1;
11 const ESCAPE_STATE = 2;
12 const WHITESPACE_STATE = 3;
13 const COMMENT_STATE = 4;
14
15 /**
16 * Parse the given variable name.
17 *
18 * @param string $name
19 *
20 * @return string
21 */
22 public static function parseName($name)
23 {
24 return trim(str_replace(array('export ', '\'', '"'), '', $name));
25 }
26
27 /**
28 * Parse the given variable value.
29 *
30 * @param string $value
31 *
32 * @throws \Dotenv\Exception\InvalidFileException
33 *
34 * @return string
35 */
36 public static function parseValue($value)
37 {
38 if ($value === '') {
39 return '';
40 } elseif ($value[0] === '"' || $value[0] === '\'') {
41 return Parser::parseQuotedValue($value);
42 } else {
43 return Parser::parseUnquotedValue($value);
44 }
45 }
46
47 /**
48 * Parse the given quoted value.
49 *
50 * @param string $value
51 *
52 * @throws \Dotenv\Exception\InvalidFileException
53 *
54 * @return string
55 */
56 public static function parseQuotedValue($value)
57 {
58 $result = array_reduce(str_split($value), function ($data, $char) use ($value) {
59 switch ($data[1]) {
60 case Parser::INITIAL_STATE:
61 if ($char === '"' || $char === '\'') {
62 return array($data[0], Parser::QUOTED_STATE);
63 } else {
64 throw new InvalidFileException(
65 'Expected the value to start with a quote.'
66 );
67 }
68 case Parser::QUOTED_STATE:
69 if ($char === $value[0]) {
70 return array($data[0], Parser::WHITESPACE_STATE);
71 } elseif ($char === '\\') {
72 return array($data[0], Parser::ESCAPE_STATE);
73 } else {
74 return array($data[0].$char, Parser::QUOTED_STATE);
75 }
76 case Parser::ESCAPE_STATE:
77 if ($char === $value[0] || $char === '\\') {
78 return array($data[0].$char, Parser::QUOTED_STATE);
79 } else {
80 return array($data[0].'\\'.$char, Parser::QUOTED_STATE);
81 }
82 case Parser::WHITESPACE_STATE:
83 if ($char === '#') {
84 return array($data[0], Parser::COMMENT_STATE);
85 } elseif (!ctype_space($char)) {
86 throw new InvalidFileException(
87 'Dotenv values containing spaces must be surrounded by quotes.'
88 );
89 } else {
90 return array($data[0], Parser::WHITESPACE_STATE);
91 }
92 case Parser::COMMENT_STATE:
93 return array($data[0], Parser::COMMENT_STATE);
94 }
95 }, array('', Parser::INITIAL_STATE));
96
97 if ($result[1] === Parser::QUOTED_STATE || $result[1] === Parser::ESCAPE_STATE) {
98 throw new InvalidFileException(
99 'Dotenv values starting with a quote must finish with a closing quote.'
100 );
101 }
102
103 return trim($result[0]);
104 }
105
106 /**
107 * Parse the given unquoted value.
108 *
109 * @param string $value
110 *
111 * @throws \Dotenv\Exception\InvalidFileException
112 *
113 * @return string
114 */
115 public static function parseUnquotedValue($value)
116 {
117 $parts = explode(' #', $value, 2);
118 $value = trim($parts[0]);
119
120 // Unquoted values cannot contain whitespace
121 if (preg_match('/\s+/', $value) > 0) {
122 // Check if value is a comment (usually triggered when empty value with comment)
123 if (preg_match('/^#/', $value) > 0) {
124 $value = '';
125 } else {
126 throw new InvalidFileException('Dotenv values containing spaces must be surrounded by quotes.');
127 }
128 }
129
130 return trim($value);
131 }
132 }
1 <?php
2
3 namespace Dotenv;
4
5 use Dotenv\Exception\InvalidCallbackException;
6 use Dotenv\Exception\ValidationException;
7
8 /**
9 * This is the validator class.
10 *
11 * It's responsible for applying validations against a number of variables.
12 */
13 class Validator
14 {
15 /**
16 * The variables to validate.
17 *
18 * @var array
19 */
20 protected $variables;
21
22 /**
23 * The loader instance.
24 *
25 * @var \Dotenv\Loader
26 */
27 protected $loader;
28
29 /**
30 * Create a new validator instance.
31 *
32 * @param array $variables
33 * @param \Dotenv\Loader $loader
34 *
35 * @return void
36 */
37 public function __construct(array $variables, Loader $loader)
38 {
39 $this->variables = $variables;
40 $this->loader = $loader;
41
42 $this->assertCallback(
43 function ($value) {
44 return $value !== null;
45 },
46 'is missing'
47 );
48 }
49
50 /**
51 * Assert that each variable is not empty.
52 *
53 * @return \Dotenv\Validator
54 */
55 public function notEmpty()
56 {
57 return $this->assertCallback(
58 function ($value) {
59 return strlen(trim($value)) > 0;
60 },
61 'is empty'
62 );
63 }
64
65 /**
66 * Assert that each specified variable is an integer.
67 *
68 * @return \Dotenv\Validator
69 */
70 public function isInteger()
71 {
72 return $this->assertCallback(
73 function ($value) {
74 return ctype_digit($value);
75 },
76 'is not an integer'
77 );
78 }
79
80 /**
81 * Assert that each specified variable is a boolean.
82 *
83 * @return \Dotenv\Validator
84 */
85 public function isBoolean()
86 {
87 return $this->assertCallback(
88 function ($value) {
89 if ($value === '') {
90 return false;
91 }
92
93 return filter_var($value, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE) !== null;
94 },
95 'is not a boolean'
96 );
97 }
98
99 /**
100 * Assert that each variable is amongst the given choices.
101 *
102 * @param string[] $choices
103 *
104 * @return \Dotenv\Validator
105 */
106 public function allowedValues(array $choices)
107 {
108 return $this->assertCallback(
109 function ($value) use ($choices) {
110 return in_array($value, $choices);
111 },
112 'is not an allowed value'
113 );
114 }
115
116 /**
117 * Assert that the callback returns true for each variable.
118 *
119 * @param callable $callback
120 * @param string $message
121 *
122 * @throws \Dotenv\Exception\InvalidCallbackException|\Dotenv\Exception\ValidationException
123 *
124 * @return \Dotenv\Validator
125 */
126 protected function assertCallback($callback, $message = 'failed callback assertion')
127 {
128 if (!is_callable($callback)) {
129 throw new InvalidCallbackException('The provided callback must be callable.');
130 }
131
132 $variablesFailingAssertion = array();
133 foreach ($this->variables as $variableName) {
134 $variableValue = $this->loader->getEnvironmentVariable($variableName);
135 if (call_user_func($callback, $variableValue) === false) {
136 $variablesFailingAssertion[] = $variableName." $message";
137 }
138 }
139
140 if (count($variablesFailingAssertion) > 0) {
141 throw new ValidationException(sprintf(
142 'One or more environment variables failed assertions: %s.',
143 implode(', ', $variablesFailingAssertion)
144 ));
145 }
146
147 return $this;
148 }
149 }
No preview for this file type
No preview for this file type
This diff could not be displayed because it is too large.
1 {"translation-revision-date":"2021-08-03 20:56:24+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"The suggested policy text has been copied to your clipboard.":["The suggested policy text has been copied to your clipboard."],"An error occurred while attempting to find and erase personal data.":["An error occurred while attempting to find and erase personal data."],"Personal data was found for this user but some of the personal data found was not erased.":["Personal data was found for this user, but some of the personal data found was not erased."],"All of the personal data found for this user was erased.":["All of the personal data found for this user was erased."],"Personal data was found for this user but was not erased.":["Personal data was found for this user, but was not erased."],"No personal data was found for this user.":["No personal data was found for this user."],"An error occurred while attempting to export personal data.":["An error occurred while attempting to export personal data."],"No personal data export file was generated.":["No personal data export file was generated."],"This user&#8217;s personal data export file was downloaded.":["This user&#8217;s personal data export file was downloaded."],"This user&#8217;s personal data export link was sent.":["This user&#8217;s personal data export link was sent."]}},"comment":{"reference":"wp-admin\/js\/privacy-tools.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-10-04 18:08:37+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"Disable tips":["Disable tips"],"See next tip":["See next tip"],"Editor tips":["Editor tips"],"Got it":["Got it"]}},"comment":{"reference":"wp-includes\/js\/dist\/nux.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-08-03 20:56:24+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"%1$s is deprecated since version %2$s! Use %3$s instead. Please consider writing more inclusive code.":["%1$s is deprecated since version %2$s! Use %3$s instead. Please consider writing more inclusive code."]}},"comment":{"reference":"wp-admin\/js\/password-strength-meter.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-10-04 18:08:37+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"Create Reusable block":["Create Reusable block"],"Add to Reusable blocks":["Add to Reusable blocks"],"Reusable block created.":["Reusable block created."],"Untitled Reusable block":["Untitled Reusable block"],"Manage Reusable blocks":["Manage Reusable blocks"],"Name":["Name"],"Save":["Save"],"Cancel":["Cancel"],"Close":["Close"]}},"comment":{"reference":"wp-includes\/js\/dist\/reusable-blocks.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-10-04 18:08:37+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"%s Block":["%s Block"],"%1$s Block. %2$s":["%1$s Block. %2$s"],"%1$s Block. Column %2$d":["%s Block. Column %d"],"%1$s Block. Column %2$d. %3$s":["%1$s Block. Column %2$d. %3$s"],"%1$s Block. Row %2$d":["%1$s Block. Row %2$d"],"%1$s Block. Row %2$d. %3$s":["%1$s Block. Row %2$d. %3$s"],"Embeds":["Embeds"],"Design":["Design"],"Reusable blocks":["Reusable blocks"],"Text":["Text"],"Theme":["Theme"],"Media":["Media"],"Widgets":["Widgets"]}},"comment":{"reference":"wp-includes\/js\/dist\/blocks.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-10-04 18:08:37+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"You are probably offline.":["You are probably offline."],"Media upload failed. If this is a photo or a large image, please scale it down and try again.":["Media upload failed. If this is a photo or a large image, please scale it down and try again."],"An unknown error occurred.":["An unknown error occurred."],"The response is not a valid JSON response.":["The response is not a valid JSON response."]}},"comment":{"reference":"wp-includes\/js\/dist\/api-fetch.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-08-03 20:56:24+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"Submitted on:":["Submitted on:"],"%1$s %2$s, %3$s at %4$s:%5$s":["%1$s %2$s, %3$s at %4$s:%5$s"]}},"comment":{"reference":"wp-admin\/js\/comment.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-08-03 20:56:24+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"Could not load the preview image.":["Could not load the preview image."],"Could not load the preview image. Please reload the page and try again.":["Could not load the preview image. Please reload the page and try again."]}},"comment":{"reference":"wp-admin\/js\/image-edit.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-10-04 18:08:37+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"Reusable block imported successfully!":["Reusable block imported successfully!"],"Import from JSON":["Import from JSON"],"button label\u0004Import":["Import"],"Unknown error":["Unknown error"],"Invalid Reusable block JSON file":["Invalid Reusable block JSON file"],"Invalid JSON file":["Invalid JSON file"],"File":["File"]}},"comment":{"reference":"wp-includes\/js\/dist\/list-reusable-blocks.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-08-03 20:56:24+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"The request could not be completed.":["The request could not be completed."],"Disabling...":["Disabling..."],"Enabling...":["Enabling..."],"Number of plugins found: %d":["Number of plugins found: %d"],"You do not appear to have any plugins available at this time.":["You do not appear to have any plugins available at this time."],"Caution: These themes may be active on other sites in the network. Are you sure you want to proceed?":["Caution: these themes may be active on other sites in the network. Are you sure you want to proceed?"],"Are you sure you want to delete the selected plugins and their data?":["Are you sure you want to delete the selected plugins and their data?"],"Please select at least one item to perform this action on.":["Please select at least one item to perform this action on."],"Are you sure you want to delete %s?":["Are you sure you want to do this?"],"Are you sure you want to delete %s and its data?":["Are you sure you want to delete %s and its data?"],"Update canceled.":["Update cancelled."],"Updates may not complete if you navigate away from this page.":["Updates may not complete if you navigate away from this page."],"Connection lost or the server is busy. Please try again later.":["Connection lost or the server is busy. Please try again later."],"Deletion failed: %s":["Deletion failed: %s"],"theme\u0004Deleted!":["Deleted!"],"theme\u0004%s installation failed":["%s installation failed"],"theme\u0004Network Activate %s":["Network Activate %s"],"theme\u0004Installed!":["Installed"],"theme\u0004%s installed!":["%s installed!"],"theme\u0004Installing %s...":["Installing %s..."],"theme\u0004Updated!":["Updated!"],"Updating... please wait.":["Updating... please wait."],"plugin\u0004Deleted!":["Deleted!"],"Deleting...":["Deleting..."],"Importer installed successfully. <a href=\"%s\">Run importer<\/a>":["Importer installed successfully. <a href=\"%s\">Run importer<\/a>"],"plugin\u0004%s installation failed":["%s installation failed"],"Installation failed: %s":["Installation failed: %s"],"Installation completed successfully.":["Installation completed successfully."],"plugin\u0004Installed!":["Installed!"],"plugin\u0004%s installed!":["%s installed!"],"Installing... please wait.":["Installing... please wait."],"plugin\u0004Installing %s...":["Installing %s..."],"Installing...":["Installing..."],"Update failed.":["Update failed."],"plugin\u0004%s update failed.":["%s update failed"],"Update failed: %s":["Update Failed: %s"],"Update completed successfully.":["Update completed successfully."],"plugin\u0004Updated!":["Updated!"],"plugin\u0004%s updated!":["%s updated!"],"Updating...":["Updating..."],"plugin\u0004Updating %s...":["Updating %s..."],"theme\u0004Activate %s":["Activate %s"],"Enable auto-updates":["Enable auto-updates"],"Disable auto-updates":["Disable auto-updates"],"No plugins are currently available.":["No plugins are currently available."],"plugin\u0004Network Activate %s":["Network Activate %s"],"plugin\u0004Activate %s":["Activate %s"],"Update Now":["Update Now"],"plugin\u0004Update %s now":["Update %s now"],"No plugins found. Try a different search.":["No plugins found. Try a different search."],"Search Results":["Search Results"],"Auto-updates disabled":["Auto-updates disabled"],"Auto-updates enabled":["Auto-updates enabled"],"Installation failed.":["Installation Failed"],"Network Enable":["Network Enable"],"Network Activate":["Network Activate"],"Install Now":["Install Now"],"plugin\u0004Install %s now":["Install %s now"],"Run Importer":["Run Importer"],"Run %s":["Run %s"],"Search results for: %s":["Search results for: %s"],"Live Preview":["Live Preview"],"An error has occurred. Please reload the page and try again.":["An error has occurred. Please reload the page and try again."],"Something went wrong.":["Something went wrong."],"Activate":["Activate"]}},"comment":{"reference":"wp-admin\/js\/updates.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-10-04 18:08:37+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"Annotation":["Annotation"]}},"comment":{"reference":"wp-includes\/js\/dist\/annotations.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-10-04 18:08:37+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"Notifications":["Notifications"]}},"comment":{"reference":"wp-includes\/js\/dist\/a11y.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-10-04 18:08:37+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"Block Settings":["Block Settings"],"Save your changes.":["Save your changes."],"Redo your last undo.":["Redo your last undo."],"Undo your last changes.":["Undo your last changes."],"Here's a detailed guide.":["Here's a detailed guide."],"https:\/\/wordpress.org\/support\/article\/wordpress-editor\/":["https:\/\/wordpress.org\/support\/article\/wordpress-editor\/"],"New to the block editor?":["New to the block editor?"],"Get the Classic Widgets plugin.":["Get the Classic Widgets plugin."],"https:\/\/wordpress.org\/plugins\/classic-widgets\/":["https:\/\/en-ca.wordpress.org\/plugins\/classic-widgets\/"],"Want to stick with the old widgets?":["Want to stick with the old widgets?"],"Got it":["Got it"],"You can now add any block to your site\u2019s widget areas. Don\u2019t worry, all of your favorite widgets still work flawlessly.":["You can now add any block to your site\u2019s widget areas. Don\u2019t worry, all of your favourite widgets still work flawlessly."],"Your theme provides different \u201cblock\u201d areas for you to add and edit content.\u00a0Try adding a search bar, social icons, or other types of blocks here and see how they\u2019ll look on your site.":["Your theme provides different \u201cblock\u201d areas for you to add and edit content.\u00a0Try adding a search bar, social icons, or other types of blocks here and see how they\u2019ll look on your site."],"Welcome to block Widgets":["Welcome to block Widgets"],"Document tools":["Document tools"],"Contain text cursor inside block deactivated":["Contain text cursor inside block deactivated"],"Contain text cursor inside block activated":["Contain text cursor inside block activated"],"Aids screen readers by stopping text caret from leaving blocks.":["Aids screen readers by stopping text caret from leaving blocks."],"Contain text cursor inside block":["Contain text cursor inside block"],"Preferences":["Preferences"],"https:\/\/wordpress.org\/support\/article\/block-based-widgets-editor\/":["https:\/\/wordpress.org\/support\/article\/block-based-widgets-editor\/"],"Welcome Guide":["Welcome Guide"],"Top toolbar deactivated":["Top toolbar deactivated"],"Top toolbar activated":["Top toolbar activated"],"Access all block and document tools in a single place":["Access all block and document tools in a single place"],"Top toolbar":["Top toolbar"],"noun\u0004View":["View"],"Text formatting":["Text formatting"],"Forward-slash":["Forward-slash"],"Change the block type after adding a new paragraph.":["Change the block type after adding a new paragraph."],"Block shortcuts":["Block shortcuts"],"Selection shortcuts":["Selection shortcuts"],"Global shortcuts":["Global shortcuts"],"Keyboard shortcuts":["Keyboard shortcuts"],"Display these keyboard shortcuts.":["Display these keyboard shortcuts."],"Underline the selected text.":["Underline the selected text."],"Remove a link.":["Remove a link."],"Convert the selected text into a link.":["Convert the selected text into a link."],"Make the selected text italic.":["Make the selected text italic."],"Make the selected text bold.":["Make the selected text bold."],"Feature activated":["Feature activated"],"Feature deactivated":["Feature deactivated"],"Close inserter":["Close inserter"],"Show more settings":["Show more settings"],"The editor has encountered an unexpected error.":["The editor has encountered an unexpected error."],"Copy Error":["Copy Error"],"Tools":["Tools"],"Options":["Options"],"Add a block":["Add a block"],"Generic label for block inserter button\u0004Add block":["Add block"],"Redo":["Redo"],"Undo":["Undo"],"Customizing":["Customizing"],"Help":["Help"],"Close":["Close"],"(opens in a new tab)":["(opens in a new tab)"],"Widgets":["Widgets"]}},"comment":{"reference":"wp-includes\/js\/dist\/customize-widgets.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-10-04 18:08:37+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"Menu Item":["Menu Item"],"Comment":["Comment"],"Widget types":["Widget types"],"Widget areas":["Widget areas"],"Site":["Site"],"Base":["Base"],"Post Type":["Post Type"],"Taxonomy":["Taxonomy"],"User":["User"],"Media":["Media"],"Menu Location":["Menu Location","Menu Locations"],"Site Title":["Site Title"],"(no title)":["(no title)"],"Widgets":["Widgets"],"Menu":["Menu"]}},"comment":{"reference":"wp-includes\/js\/dist\/core-data.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-08-03 20:56:24+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"All site health tests have finished running.":["All site health tests have finished running."],"Please wait...":["Please wait\u2026"],"Unavailable":["Unavailable"],"No details available":["No details available"],"All site health tests have finished running. There are items that should be addressed, and the results are now available on the page.":["All site health tests have finished running. There are items that should be addressed, and the results are now available on the page."],"Should be improved":["Should be improved"],"All site health tests have finished running. Your site is looking good, and the results are now available on the page.":["All Site Health tests have finished running. Your site is looking good, and the results are now available on the page."],"Good":["Good"],"Site information has been copied to your clipboard.":["Site information has been added to your clipboard."],"%s item with no issues detected":["%s item with no issues detected","%s items with no issues detected"],"%s recommended improvement":["%s recommended improvement","%s recommended improvements"],"%s critical issue":["%s critical issue","%s critical issues"],"A test is unavailable":["A test is unavailable"]}},"comment":{"reference":"wp-admin\/js\/site-health.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-08-03 20:56:24+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"Use as featured image":["Use as featured image"],"Could not set that as the thumbnail image. Try a different attachment.":["Could not set that as the thumbnail image. Try a different attachment."],"Saving\u2026":["Saving\u2026"],"Done":["Done"]}},"comment":{"reference":"wp-admin\/js\/set-post-thumbnail.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-08-03 20:56:24+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"Drag boxes here":["Drag boxes here"],"Add boxes from the Screen Options menu":["Add boxes from the Screen Options menu"],"The boxes order has been saved.":["The boxes order has been saved."],"The box is on the last position":["The box is on the last position"],"The box is on the first position":["The box is on the first position"]}},"comment":{"reference":"wp-admin\/js\/postbox.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-08-03 20:56:24+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"Widget has been added to the selected sidebar":["Widget has been added to the selected sidebar"],"Saved":["Saved"],"The changes you made will be lost if you navigate away from this page.":["The changes you made will be lost if you navigate away from this page."],"Save":["Save"]}},"comment":{"reference":"wp-admin\/js\/widgets.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-08-03 20:56:24+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"All application passwords revoked.":["All application passwords revoked."],"Are you sure you want to revoke all passwords? This action cannot be undone.":["Are you sure you want to revoke all passwords? This action cannot be undone."],"Application password revoked.":["Application password revoked."],"Are you sure you want to revoke this password? This action cannot be undone.":["Are you sure you want to revoke this password? This action cannot be undone."],"Dismiss this notice.":["Dismiss this notice."]}},"comment":{"reference":"wp-admin\/js\/application-passwords.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-08-03 20:56:24+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"Permalink saved":["Permalink saved"],"Published on:":["Published on:"],"Publish on:":["Publish on:"],"Schedule for:":["Schedule for:"],"Saving Draft\u2026":["Saving Draft\u2026"],"No more comments found.":["No more comments found."],"Show more comments":["Show more comments"],"%1$s %2$s, %3$s at %4$s:%5$s":["%1$s %2$s, %3$s at %4$s:%5$s"],"post action\/button label\u0004Schedule":["Schedule"],"Public, Sticky":["Public, Sticky"],"Privately Published":["Privately Published"],"Save as Pending":["Save as Pending"],"Could not set that as the thumbnail image. Try a different attachment.":["Could not set that as the thumbnail image. Try a different attachment."],"Password Protected":["Password Protected"],"Public":["Public"],"The file URL has been copied to your clipboard":["The file URL has been copied to your clipboard"],"Published":["Published"],"Private":["Private"],"Update":["Update"],"The changes you made will be lost if you navigate away from this page.":["The changes you made will be lost if you navigate away from this page."],"Cancel":["Cancel"],"OK":["OK"],"Save Draft":["Save Draft"],"Publish":["Publish"]}},"comment":{"reference":"wp-admin\/js\/post.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-08-03 20:56:24+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"Are you sure you want to do this?\nThe comment changes you made will be lost.":["Are you sure you want to do this?\nThe comment changes you made will be lost."],"Are you sure you want to edit this comment?\nThe changes you made will be lost.":["Are you sure you want to edit this comment?\nThe changes you made will be lost."],"Approve and Reply":["Approve and Reply"],"Comments (%s)":["Comments (%s)"],"Comments":["Comments"],"Reply":["Reply"]}},"comment":{"reference":"wp-admin\/js\/edit-comments.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-10-04 18:08:37+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"Keyboard input":["Keyboard input"],"Link removed.":["Link removed."],"Link edited.":["Link edited."],"media":["media"],"photo":["photo"],"Inline image":["Inline image"],"Inline code":["Inline code"],"Unlink":["Unlink"],"Link inserted.":["Link inserted."],"Warning: the link has been inserted but may have errors. Please test it.":["Warning: The link has been inserted but may have errors. Please test it."],"Text color":["Text color"],"Width":["Width"],"Link":["Link"],"Italic":["Italic"],"Bold":["Bold"],"Superscript":["Superscript"],"Subscript":["Subscript"],"Strikethrough":["Strikethrough"],"Underline":["Underline"],"Apply":["Apply"]}},"comment":{"reference":"wp-includes\/js\/dist\/format-library.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-10-04 18:08:37+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"Move to widget area":["Move to widget area"],"Widget is missing.":["Widget is missing."],"Legacy Widget":["Legacy Widget"],"No preview available.":["No preview available."],"Legacy Widget Preview":["Legacy Widget Preview"],"The \"%s\" block was affected by errors and may not function properly. Check the developer tools for more details.":["The \"%s\" block was affected by errors and may not function properly. Check the developer tools for more details."],"Select widget":["Select widget"],"Select a legacy widget to display:":["Select a legacy widget to display:"],"There are no widgets available.":["There are no widgets available."],"Convert to blocks":["Convert to blocks"],"Move to":["Move to"],"Save":["Save"]}},"comment":{"reference":"wp-includes\/js\/dist\/widgets.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-10-04 18:08:37+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"An error has occurred. Please reload the page and try again.":["An error has occurred. Please reload the page and try again."]}},"comment":{"reference":"wp-admin\/js\/media.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-08-03 20:56:24+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"Plugin details":["Plugin details"],"Plugin: %s":["Plugin: %s"]}},"comment":{"reference":"wp-admin\/js\/plugin-install.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-08-03 20:56:24+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"Expand Main menu":["Expand Main menu"],"You are about to permanently delete these items from your site.\nThis action cannot be undone.\n'Cancel' to stop, 'OK' to delete.":["You are about to permanently delete these items from your site.\nThis action cannot be undone.\n'Cancel' to stop, 'OK' to delete."],"%1$s is deprecated since version %2$s with no alternative available.":["%1$s is deprecated since version %2$s with no alternative available."],"%1$s is deprecated since version %2$s! Use %3$s instead.":["%1$s is deprecated since version %2$s! Use %3$s instead."],"Dismiss this notice.":["Dismiss this notice."],"Collapse Main menu":["Collapse Main menu"]}},"comment":{"reference":"wp-admin\/js\/common.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-10-04 18:08:37+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"Sorry, you are not allowed to do that.":["Sorry, you are not allowed to do that."],"Something went wrong.":["Something went wrong."]}},"comment":{"reference":"wp-admin\/js\/tags.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-08-03 20:56:24+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"Term selected.":["Term selected."],"tag delimiter\u0004,":[","]}},"comment":{"reference":"wp-admin\/js\/tags-suggest.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-10-04 18:08:37+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"Category":["Category"],"Z \u2192 A":["Z \t A"],"A \u2192 Z":["A \t Z"],"Oldest to newest":["Oldest to newest"],"Newest to oldest":["Newest to oldest"],"Order by":["Order by"],"Dismiss this notice":["Dismiss this notice"],"Close search":["Close search"],"Search in %s":["Search in %s"],"Finish":["Finish"],"Page %1$d of %2$d":["Page %1$d of %2$d"],"Guide controls":["Guide controls"],"Gradient: %s":["Gradient: %s"],"Gradient code: %s":["Gradient code: %s"],"Type":["Type"],"Radial":["Radial"],"Linear":["Linear"],"Invalid item":["Invalid item"],"Remove item":["Remove item"],"Item removed.":["Item removed."],"Item added.":["Item added."],"Separate with commas or the Enter key.":["Separate with commas or the Enter key."],"Separate with commas, spaces, or the Enter key.":["Separate with commas, spaces, or the Enter key."],"Add item":["Add item"],"%1$s (%2$s of %3$s)":["%1$s (%2$s of %3$s)"],"Font size":["Font size"],"Custom":["Custom"],"Media preview":["Media preview"],"Highlights":["Highlights"],"Shadows":["Shadows"],"Duotone: %s":["Duotone: %s"],"Duotone code: %s":["Duotone code: %s"],"Remove Control Point":["Remove Control Point"],"Use your left or right arrow keys or drag and drop with the mouse to change the gradient position. Press the button to change the color or remove the control point.":["Use your left or right arrow keys or drag and drop with the mouse to change the gradient position. Press the button to change the colour or remove the control point."],"Gradient control point at position %1$s%% with color code %2$s.":["Gradient control point at position %1$s%% with colour code %2$s."],"Extra Large":["Extra Large"],"Calendar Help":["Calendar Help"],"Go to the first (home) or last (end) day of a week.":["Go to the first (home) or last (end) day of a week."],"Home\/End":["Home\/End"],"Home and End":["Home and End"],"Move backward (PgUp) or forward (PgDn) by one month.":["Move backward (PgUp) or forward (PgDn) by one month."],"PgUp\/PgDn":["PgUp\/PgDn"],"Page Up and Page Down":["Page Up and Page Down"],"Move backward (up) or forward (down) by one week.":["Move backward (up) or forward (down) by one week."],"Up and Down Arrows":["Up and Down Arrows"],"Move backward (left) or forward (right) by one day.":["Move backward (left) or forward (right) by one day."],"Left and Right Arrows":["Left and Right Arrows"],"Select the date in focus.":["Select the date in focus."],"keyboard button\u0004Enter":["Enter"],"Navigating with a keyboard":["Navigating with a keyboard"],"Click the desired day to select it.":["Click the desired day to select it."],"Click the right or left arrows to select other months in the past or the future.":["Click the right or left arrows to select other months in the past or the future."],"Click to Select":["Click to Select"],"Minutes":["Minutes"],"Hours":["Hours"],"Coordinated Universal Time":["Coordinated Universal Time"],"%1$s. There is %2$d event.":["%1$s. There is %2$d event.","%1$s. There are %2$d events."],"Custom color picker":["Custom colour picker"],"Color palette":["Colour palette"],"Slug":["Slug"],"Additional color settings":["Additional colour settings"],"Remove color":["Remove colour"],"Edit color name":["Edit colour name"],"Color name":["Colour name"],"Edit color value":["Edit colour value"],"Color code: %s":["Colour code: %s"],"Color: %s":["Colour: %s"],"Use your arrow keys to change the base color. Move up to lighten the color, down to darken, left to decrease saturation, and right to increase saturation.":["Use your arrow keys to change the base colour. Move up to lighten the colour, down to darken, left to decrease saturation, and right to increase saturation."],"Choose a shade":["Choose a shade"],"Change color format":["Change colour format"],"Color value in HSLA":["Color value in HSLA"],"Color value in HSL":["Colour value in HSL"],"Color value in RGBA":["Color value in RGBA"],"Color value in RGB":["Colour value in RGB"],"Color value in hexadecimal":["Colour value in hexadecimal"],"Hex color mode active":["Hex colour mode active"],"Hue\/saturation\/lightness mode active":["Hue\/saturation\/lightness mode active"],"RGB mode active":["RGB mode active"],"Move the arrow left or right to change hue.":["Move the arrow left or right to change hue."],"Hue value in degrees, from 0 to 359.":["Hue value in degrees, from 0 to 359."],"Alpha value, from 0 (transparent) to 1 (fully opaque).":["Alpha value, from 0 (transparent) to 1 (fully opaque)."],"Box Control":["Box Control"],"Link Sides":["Link Sides"],"Unlink Sides":["Unlink Sides"],"Mixed":["Fixed"],"Select unit":["Select unit"],"viewport heights":["viewport heights"],"viewport widths":["viewport widths"],"Relative to root font size (rem)\u0004rems":["rems"],"Relative to parent font size (em)\u0004ems":["ems"],"percent":["percent"],"pixels":["pixels"],"Points (pt)":["Points (pt)"],"Picas (pc)":["Picas (pc)"],"Inches (in)":["Inches (in)"],"Millimeters (mm)":["Millimetres (mm)"],"Centimeters (cm)":["Centimetres (cm)"],"x-height of the font (ex)":["x-height of the font (ex)"],"Width of the zero (0) character (ch)":["Width of the zero (0) character (ch)"],"Viewport largest dimension (vmax)":["Viewport largest dimension (vmax)"],"Viewport smallest dimension (vmin)":["Viewport smallest dimension (vmin)"],"Viewport height (vh)":["Viewport height (vh)"],"Viewport width (vw)":["Viewport width (vw)"],"Relative to root font size (rem)":["Relative to root font size (rem)"],"Relative to parent font size (em)":["Relative to parent font size (em)"],"Percent (%)":["Percent (%)"],"Percentage (%)":["Percentage (%)"],"Pixels (px)":["Pixels (px)"],"Angle":["Angle"],"Alignment Matrix Control":["Alignment Matrix Control"],"Bottom Center":["Bottom Centre"],"Center Right":["Centre Right"],"Center Center":["Centre Centre"],"Center Left":["Centre Left"],"Top Center":["Top Centre"],"Small":["Small"],"Number of items":["Number of items"],"All":["All"],"No results.":["No results."],"%d result found, use up and down arrow keys to navigate.":["%d result found, use up and down arrow keys to navigate.","%d results found, use up and down arrow keys to navigate."],"%d result found.":["%d result found.","%d results found."],"Reset":["Reset"],"Previous":["Previous"],"Item selected.":["Item selected."],"Custom Size":["Custom Size"],"Clear":["Clear"],"Drop files to upload":["Drop files to upload"],"Close dialog":["Close dialogue"],"None":["None"],"Time":["Time"],"Year":["Year"],"Day":["Day"],"Month":["Month"],"Date":["Date"],"Bottom Right":["Bottom Right"],"Bottom Left":["Bottom Left"],"Top Right":["Top Right"],"Top Left":["Top Left"],"Name":["Name"],"PM":["PM"],"AM":["AM"],"December":["December"],"November":["November"],"October":["October"],"September":["September"],"August":["August"],"July":["July"],"June":["June"],"May":["May"],"April":["April"],"March":["March"],"February":["February"],"January":["January"],"Bottom":["Bottom"],"Top":["Top"],"Right":["Right"],"Left":["Left"],"Custom color":["Custom colour"],"Save":["Save"],"Author":["Author"],"Cancel":["Cancel"],"OK":["OK"],"Back":["Back"],"Next":["Next"],"No results found.":["No results found."],"Close":["Close"],"Default":["Default"],"(opens in a new tab)":["(opens in a new tab)"],"Categories":["Categories"],"Large":["Large"],"Medium":["Medium"]}},"comment":{"reference":"wp-includes\/js\/dist\/components.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-10-04 18:08:37+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"Showing %1$s of %2$s media items":["Showing %1$s of %2$s media items"],"Jump to first loaded item":["Jump to first loaded item"],"Load more":["Load more"],"Number of media items displayed: %d. Scroll the page for more results.":["Number of media items displayed: %d. Scroll the page for more results."],"Number of media items displayed: %d. Click load more for more results.":["Number of media items displayed: %d. Click load more for more results."],"%s item selected":["%s item selected","%s items selected"],"The file URL has been copied to your clipboard":["The file URL has been copied to your clipboard"]}},"comment":{"reference":"wp-includes\/js\/media-views.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-08-03 20:56:24+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"Your new password has not been saved.":["Your new password has not been saved."],"Hide":["Hide"],"Show":["Show"],"Show password":["Show password"],"Confirm use of weak password":["Confirm use of weak password"],"Hide password":["Hide password"]}},"comment":{"reference":"wp-admin\/js\/user-profile.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-08-03 20:56:24+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"There is %s error which must be fixed before you can update this file.":["There is %s error which must be fixed before you can update this file.","There are %s errors which must be fixed before you can update this file."],"Something went wrong. Your change may not have been saved. Please try again. There is also a chance that you may need to manually fix and upload the file over FTP.":["Something went wrong. Your change may not have been saved. Please try again. There is also a chance that you may need to manually fix and upload the file over FTP."],"The changes you made will be lost if you navigate away from this page.":["The changes you made will be lost if you navigate away from this page."]}},"comment":{"reference":"wp-admin\/js\/theme-plugin-editor.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-10-04 18:08:37+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"Your session has expired. You can log in again from this page or go to the login page.":["Your session has expired. You can log in again from this page or go to the login page."]}},"comment":{"reference":"wp-includes\/js\/wp-auth-check.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-10-04 18:08:37+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"Keep as HTML":["Keep as HTML"],"Your site doesn\u2019t include support for the %s block. You can try installing the block, convert it to a Custom HTML block, or remove it entirely.":["Your site doesn\u2019t include support for the %s block. You can try installing the block, convert it to a Custom HTML block, or remove it entirely."],"Your site doesn\u2019t include support for the %s block. You can try installing the block or remove it entirely.":["Your site doesn\u2019t include support for the %s block. You can try installing the block or remove it entirely."],"Install %s":["Install %s"],"The following block has been added to your site.":["The following block has been added to your site.","The following blocks have been added to your site."],"Added: %d block":["Added: %d block","Added: %d blocks"],"By %s":["By %s"],"Select a block to install and add it to your post.":["Select a block to install and add it to your post."],"Available to install":["Available to install"],"No results available from your installed blocks.":["No results available from your installed blocks."],"%d additional block is available to install.":["%d additional block is available to install.","%d additional blocks are available to install."],"Blocks available for install":["Blocks available for install"],"Install block":["Install block"],"%1$s <span>by %2$s<\/span>":["%1$s <span>by %2$s<\/span>"],"Installing\u2026":["Installing\u2026"],"Installed!":["Installed!"],"Install %1$s. %2$s stars with %3$s review.":["Install %1$s. %2$s stars with %3$s review.","Install %1$s. %2$s stars with %3$s reviews."],"Try reloading the page.":["Try reloading the page."],"%s out of 5 stars":["%s out of 5 stars"],"Error installing block. You can reload the page and try again.":["Error installing block. You can reload the page and try again."],"This block is already installed. Try reloading the page.":["This block is already installed. Try reloading the page."],"An error occurred.":["An error occurred."],"Block %s installed and added.":["Block %s installed and added."],"Error registering block. Try reloading the page.":["Error registering block. Try reloading the page."],"No results found.":["No results found."]}},"comment":{"reference":"wp-includes\/js\/dist\/block-directory.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-08-03 20:56:24+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"Error while saving the changes.":["Error while saving the changes."],"Remove From Bulk Edit":["Remove From Bulk Edit"],"Changes saved.":["Changes saved."],"tag delimiter\u0004,":[","],"(no title)":["(no title)"]}},"comment":{"reference":"wp-admin\/js\/inline-edit-post.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-08-03 20:56:24+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"Clear color":["Clear colour"],"Select default color":["Select default colour"],"Select Color":["Select a Colour"],"Color value":["Colour value"],"Clear":["Clear"],"Default":["Default"]}},"comment":{"reference":"wp-admin\/js\/color-picker.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-08-03 20:56:24+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"Term added.":["Term added."],"Term removed.":["Term removed."],"Remove term:":["Remove term:"],"tag delimiter\u0004,":[","]}},"comment":{"reference":"wp-admin\/js\/tags-box.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-10-04 18:08:37+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"Backtick":["Backtick"],"Period":["Period"],"Comma":["Comma"]}},"comment":{"reference":"wp-includes\/js\/dist\/keycodes.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-08-03 20:56:24+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"You are about to permanently delete this menu.\n'Cancel' to stop, 'OK' to delete.":["You are about to permanently delete this menu.\n'Cancel' to stop, 'OK' to delete."],"The changes you made will be lost if you navigate away from this page.":["The changes you made will be lost if you navigate away from this page."],"missing menu item navigation label\u0004(no label)":["(no label)"],"No results found.":["No results found."]}},"comment":{"reference":"wp-admin\/js\/nav-menu.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-08-03 20:56:24+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"Be sure to save this in a safe location. You will not be able to retrieve it.":["Be sure to save this in a safe location. You will not be able to retrieve it."],"Your new password for %s is:":["Your new password for %s is:"]}},"comment":{"reference":"wp-admin\/js\/auth-app.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-10-04 18:08:37+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"text direction\u0004ltr":["ltr"]}},"comment":{"reference":"wp-includes\/js\/dist\/i18n.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-10-04 18:08:37+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"View the autosave":["View the autosave"],"There is an autosave of this post that is more recent than the version below.":["There is an autosave of this post that is more recent than the version below."],"Document Outline":["Document Outline"],"Paragraphs":["Paragraphs"],"Headings":["Headings"],"Words":["Words"],"Characters":["Characters"],"Document Statistics":["Document Statistics"],"Move to trash":["Move to trash"],"Add title":["Add title"],"Start writing with text or HTML":["Start writing with text or HTML"],"Type text or HTML":["Type text or HTML"],"Terms":["Terms"],"Search Terms":["Search Terms"],"Parent Term":["Parent Term"],"Add new term":["Add new term"],"Add new category":["Add new category"],"Stick to the top of the blog":["Stick to the top of the blog"],"Save draft":["Save draft"],"Save as pending":["Save as Pending"],"Saving":["Saving"],"Autosaving":["Autosaving"],"Switch to draft":["Switch to draft"],"Are you sure you want to unschedule this post?":["Are you sure you want to unschedule this post?"],"Are you sure you want to unpublish this post?":["Are you sure you want to unpublish this post?"],"Always show pre-publish checks.":["Always show pre-publish checks."],"Copy Link":["Copy Link"],"%s address":["%s address"],"What\u2019s next?":["What\u2019s next?"],"is now live.":["is now live."],"is now scheduled. It will go live on":["is now scheduled. It will go live on"],"Publish:":["Publish:"],"Visibility:":["Visibility:"],"Double-check your settings before publishing.":["Double-check your settings before publishing."],"Are you ready to publish?":["Are you ready to publish?"],"Your work will be published at the specified date and time.":["Your work will be published at the specified date and time."],"Are you ready to schedule?":["Are you ready to schedule?"],"When you\u2019re ready, submit your work for review, and an Editor will be able to approve it for you.":["When you\u2019re ready, submit your work for review, and an Editor will be able to approve it for you."],"Are you ready to submit for review?":["Are you ready to submit for review?"],"Apply the \"%1$s\" format.":["Apply the \"%1$s\" format."],"Your theme uses post formats to highlight different kinds of content, like images or videos. Apply a post format to see this special styling.":["Your theme uses post formats to highlight different kinds of content, like images or videos. Apply a post format to see this special styling."],"Use a post format":["Use a post format"],"Tags help users and search engines navigate your site and find your content. Add a few keywords to describe your post.":["Tags help users and search engines navigate your site and find your content. Add a few keywords to describe your post."],"Add tags":["Add tags"],"term\u0004Remove %s":["Remove %s"],"term\u0004%s removed":["%s removed"],"Add new Term":["Add new Term"],"Add new tag":["Add new tag"],"Term":["Term"],"Tag":["Tag"],"term\u0004%s added":["%s added"],"Immediately":["Immediately"],"Use a secure password":["Use a secure password"],"Create password":["Create password"],"Post Visibility":["Post Visibility"],"Would you like to privately publish this post now?":["Would you like to privately publish this post now?"],"Protected with a password you choose. Only those with the password can view this post.":["Protected with a password you choose. Only those with the password can view this post."],"Password Protected":["Password Protected"],"Only visible to site admins and editors.":["Only visible to site admins and editors."],"Visible to everyone.":["Visible to everyone."],"Public":["Public"],"Schedule":["Schedule"],"Schedule\u2026":["Schedule\u2026"],"Update\u2026":["Update\u2026"],"Submit for Review":["Submit for Review"],"Submit for Review\u2026":["Submit for Review\u2026"],"Scheduling\u2026":["Scheduling\u2026"],"Updating\u2026":["Updating\u2026"],"Publishing\u2026":["Publishing\u2026"],"Allow pingbacks & trackbacks":["Allow pingbacks & trackbacks"],"Pending review":["Pending review"],"Take Over":["Take Over"],"Another user is currently working on this post, which means you cannot make changes, unless you take over.":["Another user is currently working on this post, which means you cannot make changes, unless you take over."],"%s is currently working on this post, which means you cannot make changes, unless you take over.":["%s is currently working on this post, which means you cannot make changes, unless you take over."],"Another user now has editing control of this post. Don\u2019t worry, your changes up to this moment have been saved.":["Another user now has editing control of this post. Don\u2019t worry, your changes up to this moment have been saved."],"%s now has editing control of this post. Don\u2019t worry, your changes up to this moment have been saved.":["%s now has editing control of this post. Don\u2019t worry, your changes up to this moment have been saved."],"Avatar":["Avatar"],"This post is already being edited.":["This post is already being edited."],"Someone else has taken over this post.":["Someone else has taken over this post."],"Exit the Editor":["Exit the Editor"],"imperative verb\u0004Preview":["Preview"],"Generating preview\u2026":["Generating preview\u2026"],"%d Revision":["%d Revision","%d Revisions"],"Suggestion:":["Suggestion:"],"Post Format":["Post Format"],"Status":["Status"],"Standard":["Standard"],"Quote":["Quote"],"Chat":["Chat"],"Aside":["Aside"],"Replace Image":["Replace Image"],"Edit or update the image":["Edit or update the image"],"Current image: %s":["Current image: %s"],"To edit the featured image, you need permission to upload media.":["To edit the featured image, you need permission to upload media."],"Set featured image":["Set featured image"],"Learn more about manual excerpts":["Learn more about manual excerpts"],"https:\/\/wordpress.org\/support\/article\/excerpt\/":["https:\/\/wordpress.org\/support\/article\/excerpt\/"],"Write an excerpt (optional)":["Write an excerpt (optional)"],"Allow comments":["Allow comments"],"no title":["no title"],"Order":["Order"],"Restore the backup":["Restore the backup"],"The backup of this post in your browser is different from the version below.":["The backup of this post in your browser is different from the version below."],"Copy Post Text":["Copy Post Text"],"Some changes may affect other areas of your site.":["Some changes may affect other areas of your site."],"Select the changes you want to save":["Select the changes you want to save"],"Close panel":["Close panel"],"Page on front":["Page on front"],"Show on front":["Show on front"],"Selected":["selected"],"The content of your post doesn\u2019t match the template assigned to your post type.":["The content of your post doesn\u2019t match the template assigned to your post type."],"Reset the template":["Reset the template"],"Keep it as is":["Keep it as is"],"Resetting the template may result in loss of content, do you want to continue?":["Resetting the template may result in loss of content, do you want to continue?"],"(Multiple H1 headings are not recommended)":["(Multiple H1 headings are not recommended)"],"(Your theme may already use a H1 for the post title)":["(Your theme may already use a H1 for the post title)"],"(Incorrect heading level)":["(Incorrect heading level)"],"(Empty heading)":["(Empty heading)"],"Trashing failed":["Trashing failed"],"Updating failed.":["Updating failed."],"Scheduling failed.":["Scheduling failed."],"Publishing failed.":["Publishing failed."],"You have unsaved changes. If you proceed, they will be lost.":["You have unsaved changes. If you proceed, they will be lost."],"Attempt Recovery":["Attempt Recovery"],"Template:":["Template:"],"Save your changes.":["Save your changes."],"Redo your last undo.":["Redo your last undo."],"Undo your last changes.":["Undo your last changes."],"The editor has encountered an unexpected error.":["The editor has encountered an unexpected error."],"Copy Error":["Copy Error"],"Category":["Category"],"Slug":["Slug"],"Featured image":["Featured image"],"Blocks":["Blocks"],"%d result found.":["%d result found.","%d results found."],"The current image has no alternative text. The file name is: %s":["The current image has no alternative text. The file name is: %s"],"Gallery":["Gallery"],"Untitled":["Untitled"],"Parent Category":["Parent Category"],"(Untitled)":["(Untitled)"],"Saved":["Saved"],"Video":["Video"],"Audio":["Audio"],"Private":["Private"],"Draft":["Draft"],"Update":["Update"],"Select":["Select"],"Copied!":["Copied!"],"Details":["Details"],"Word count type. Do not translate!\u0004words":["words"],"Remove image":["Remove image"],"Link":["Link"],"Save":["Save"],"Image":["Image"],"Author":["Author"],"Title":["Title"],"Cancel":["Cancel"],"Redo":["Redo"],"Undo":["Undo"],"Logo":["Logo"],"Site Icon":["Site Icon"],"Tagline":["Tagline"],"Publish":["Publish"],"(opens in a new tab)":["(opens in a new tab)"],"(no title)":["(no title)"]}},"comment":{"reference":"wp-includes\/js\/dist\/editor.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-10-04 18:08:37+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"Dismiss":["Dismiss"]}},"comment":{"reference":"wp-includes\/js\/wp-pointer.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-08-03 20:56:24+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"Error while saving the changes.":["Error while saving the changes."],"Changes saved.":["Changes saved."]}},"comment":{"reference":"wp-admin\/js\/inline-edit-tax.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-10-04 18:08:37+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"Error while uploading file %s to the media library.":["Error while uploading file %s to the media library."],"This file is empty.":["This file is empty."],"This file exceeds the maximum upload size for this site.":["This file exceeds the maximum upload size for this site."],"Sorry, this file type is not supported here.":["Sorry, this file type is not supported here."],"Select or Upload Media":["Select or Upload Media"],"Sorry, this file type is not permitted for security reasons.":["Sorry, this file type is not permitted for security reasons."]}},"comment":{"reference":"wp-includes\/js\/dist\/media-utils.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-10-04 18:08:37+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"Error loading block: %s":["Error loading block: %s"],"Block rendered as empty.":["Block rendered as empty."]}},"comment":{"reference":"wp-includes\/js\/dist\/server-side-render.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-08-03 20:56:24+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"Events widget offset prefix\u0004GMT":["GMT"],"Enter your closest city to find nearby events.":["Enter your closest city to find nearby events."],"We couldn\u2019t locate %s. Please try another nearby city. For example: Kansas City; Springfield; Portland.":["We couldn\u2019t locate %s. Please try another nearby city. For example: Toronto; Montreal; Calgary."],"City updated. Listing events near %s.":["City updated. Listing events near %s."],"Attend an upcoming event near you.":["Attend an upcoming event near you."],"An error occurred. Please try again.":["An error occurred. Please try again."],"%1$s %2$d \u2013 %3$s %4$d, %5$d":["%1$s %2$d \u2013 %3$s %4$d, %5$d"],"upcoming events year format\u0004Y":["Y"],"upcoming events day format\u0004j":["j"],"%1$s %2$d\u2013%3$d, %4$d":["%1$s %2$d\u2013%3$d, %4$d"],"upcoming events month format\u0004F":["F"],"l, M j, Y":["l, M j, Y"]}},"comment":{"reference":"wp-admin\/js\/dashboard.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-10-04 18:08:37+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"Your theme provides %s \u201cblock\u201d area for you to add and edit content.\u00a0Try adding a search bar, social icons, or other types of blocks here and see how they\u2019ll look on your site.":["Your theme provides %s \u201cblock\u201d area for you to add and edit content.\u00a0Try adding a search bar, social icons, or other types of blocks here and see how they\u2019ll look on your site.","Your theme provides %s different \u201cblock\u201d areas for you to add and edit content.\u00a0Try adding a search bar, social icons, or other types of blocks here and see how they\u2019ll look on your site."],"You have unsaved changes. If you proceed, they will be lost.":["You have unsaved changes. If you proceed, they will be lost."],"Widgets footer":["Widgets footer"],"Widgets settings":["Widgets settings"],"Widgets and blocks":["Widgets and blocks"],"Widgets top bar":["Widgets top bar"],"Display block breadcrumbs deactivated":["Display block breadcrumbs deactivated"],"Display block breadcrumbs activated":["Display block breadcrumbs activated"],"Saving\u2026":["Saving\u2026"],"Widget Areas":["Widget Areas"],"Manage with live preview":["Manage with live preview"],"Your theme does not contain any Widget Areas.":["Your theme does not contain any Widget Areas."],"Blocks in this Widget Area will not be displayed in your site.":["Blocks in this Widget Area will not be displayed in your site."],"Widget Areas are global parts in your site\u2019s layout that can accept blocks. These vary by theme, but are typically parts like your Sidebar or Footer.":["Widget Areas are global parts in your site\u2019s layout that can accept blocks. These vary by theme, but are typically parts like your Sidebar or Footer."],"Attempt Recovery":["Attempt Recovery"],"A widget area container.":["A widget area container."],"Widget Area":["Widget Area"],"Could not save the following widgets: %s.":["Could not save the following widgets: %s."],"There was an error. %s":["There was an error. %s"],"Widgets saved.":["Widgets saved."],"New to the block editor? Want to learn more about using it? ":["New to the block editor? Want to learn more about using it? "],"Learn how to use the block editor":["Learn how to use the block editor"],"inserter":["inserter"],"All of the blocks available to you live in the block library. You\u2019ll find it wherever you see the <InserterIconImage \/> icon.":["All of the blocks available to you live in the block library. You\u2019ll find it wherever you see the <InserterIconImage \/> icon."],"Get to know the block library":["Get to know the block library"],"Each block comes with its own set of controls for changing things like color, width, and alignment. These will show and hide automatically when you have a block selected.":["Each block comes with its own set of controls for changing things like colour, width, and alignment. These will show and hide automatically when you have a block selected."],"Make each block your own":["Make each block your own"],"Get started":["Get started"],"Close settings":["Close settings"],"%s (selected)":["%s (selected)"],"Use theme styles":["Use theme styles"],"Make the editor look like your theme.":["Make the editor look like your theme."],"Display block breadcrumbs":["Display block breadcrumbs"],"Shows block breadcrumbs at the bottom of the editor.":["Shows block breadcrumbs at the bottom of the editor."],"Navigate to the previous part of the editor.":["Navigate to the previous part of the editor."],"Navigate to the next part of the editor.":["Navigate to the next part of the editor."],"Footer":["Footer"],"Block Library":["Block Library"],"Drawer":["Drawer"],"Pin to toolbar":["Pin to toolbar"],"Unpin from toolbar":["Unpin from toolbar"],"Close plugin":["Close plugin"],"Save your changes.":["Save your changes."],"Redo your last undo.":["Redo your last undo."],"Undo your last changes.":["Undo your last changes."],"Here's a detailed guide.":["Here's a detailed guide."],"https:\/\/wordpress.org\/support\/article\/wordpress-editor\/":["https:\/\/wordpress.org\/support\/article\/wordpress-editor\/"],"Get the Classic Widgets plugin.":["Get the Classic Widgets plugin."],"https:\/\/wordpress.org\/plugins\/classic-widgets\/":["https:\/\/en-ca.wordpress.org\/plugins\/classic-widgets\/"],"Want to stick with the old widgets?":["Want to stick with the old widgets?"],"You can now add any block to your site\u2019s widget areas. Don\u2019t worry, all of your favorite widgets still work flawlessly.":["You can now add any block to your site\u2019s widget areas. Don\u2019t worry, all of your favourite widgets still work flawlessly."],"Welcome to block Widgets":["Welcome to block Widgets"],"Document tools":["Document tools"],"Contain text cursor inside block deactivated":["Contain text cursor inside block deactivated"],"Contain text cursor inside block activated":["Contain text cursor inside block activated"],"Aids screen readers by stopping text caret from leaving blocks.":["Aids screen readers by stopping text caret from leaving blocks."],"Contain text cursor inside block":["Contain text cursor inside block"],"Preferences":["Preferences"],"https:\/\/wordpress.org\/support\/article\/block-based-widgets-editor\/":["https:\/\/wordpress.org\/support\/article\/block-based-widgets-editor\/"],"Welcome Guide":["Welcome Guide"],"Top toolbar deactivated":["Top toolbar deactivated"],"Top toolbar activated":["Top toolbar activated"],"Access all block and document tools in a single place":["Access all block and document tools in a single place"],"Top toolbar":["Top toolbar"],"noun\u0004View":["View"],"Text formatting":["Text formatting"],"Forward-slash":["Forward-slash"],"Change the block type after adding a new paragraph.":["Change the block type after adding a new paragraph."],"Block shortcuts":["Block shortcuts"],"Selection shortcuts":["Selection shortcuts"],"Global shortcuts":["Global shortcuts"],"Keyboard shortcuts":["Keyboard shortcuts"],"Display these keyboard shortcuts.":["Display these keyboard shortcuts."],"Underline the selected text.":["Underline the selected text."],"Remove a link.":["Remove a link."],"Convert the selected text into a link.":["Convert the selected text into a link."],"Make the selected text italic.":["Make the selected text italic."],"Make the selected text bold.":["Make the selected text bold."],"Feature activated":["Feature activated"],"Feature deactivated":["Feature deactivated"],"The editor has encountered an unexpected error.":["The editor has encountered an unexpected error."],"Copy Error":["Copy Error"],"No block selected.":["No block selected."],"Tools":["Tools"],"Options":["Options"],"Generic label for block inserter button\u0004Add block":["Add block"],"Block":["Block"],"Content":["Content"],"Update":["Update"],"Redo":["Redo"],"Undo":["Undo"],"Help":["Help"],"Close":["Close"],"Publish":["Publish"],"(opens in a new tab)":["(opens in a new tab)"],"Header":["Header"],"Widgets":["Widgets"],"Settings":["Settings"]}},"comment":{"reference":"wp-includes\/js\/dist\/edit-widgets.js"}}
...\ No newline at end of file ...\ No newline at end of file
1 {"translation-revision-date":"2021-10-04 18:08:37+0000","generator":"GlotPress\/3.0.0-alpha.2","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"Could not set that as the thumbnail image. Try a different attachment.":["Could not set that as the thumbnail image. Try a different attachment."]}},"comment":{"reference":"wp-includes\/js\/media-editor.js"}}
...\ No newline at end of file ...\ No newline at end of file
No preview for this file type
This diff could not be displayed because it is too large.
1 # Translation of Plugins - Hello Dolly - Stable (latest release) in English (Canada)
2 # This file is distributed under the same license as the Plugins - Hello Dolly - Stable (latest release) package.
3 msgid ""
4 msgstr ""
5 "PO-Revision-Date: 2018-03-29 16:29:19+0000\n"
6 "MIME-Version: 1.0\n"
7 "Content-Type: text/plain; charset=UTF-8\n"
8 "Content-Transfer-Encoding: 8bit\n"
9 "Plural-Forms: nplurals=2; plural=n != 1;\n"
10 "X-Generator: GlotPress/2.4.0-alpha\n"
11 "Language: en_CA\n"
12 "Project-Id-Version: Plugins - Hello Dolly - Stable (latest release)\n"
13
14 #. Author URI of the plugin
15 msgid "https://ma.tt/"
16 msgstr "https://ma.tt/"
17
18 #. Author of the plugin
19 msgid "Matt Mullenweg"
20 msgstr "Matt Mullenweg"
21
22 #. Description of the plugin
23 msgid "This is not just a plugin, it symbolizes the hope and enthusiasm of an entire generation summed up in two words sung most famously by Louis Armstrong: Hello, Dolly. When activated you will randomly see a lyric from <cite>Hello, Dolly</cite> in the upper right of your admin screen on every page."
24 msgstr "This is not just a plugin, it symbolizes the hope and enthusiasm of an entire generation summed up in two words sung most famously by Louis Armstrong: Hello, Dolly. When activated you will randomly see a lyric from <cite>Hello, Dolly</cite> in the upper right of your admin screen on every page."
25
26 #. Plugin URI of the plugin
27 msgid "https://wordpress.org/plugins/hello-dolly/"
28 msgstr "https://en-ca.wordpress.org/plugins/hello-dolly/"
29
30 #. Plugin Name of the plugin
31 msgid "Hello Dolly"
32 msgstr "Hello Dolly"
...\ No newline at end of file ...\ No newline at end of file
No preview for this file type
No preview for this file type