mirror of
				https://github.com/grocy/grocy.git
				synced 2025-10-31 02:36:54 +00:00 
			
		
		
		
	Compare commits
	
		
			240 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | acd1e7337c | ||
|  | 3586bf77c3 | ||
|  | ff886fea61 | ||
|  | 5bd00d8be7 | ||
|  | 9f36a599a4 | ||
|  | ff15e81abe | ||
|  | e8b471f572 | ||
|  | 2d8ad24887 | ||
|  | 45db9ff90c | ||
|  | c813a6500d | ||
|  | 1077149784 | ||
|  | e08dfb408c | ||
|  | fcdeda91d9 | ||
|  | 4932b9c6d2 | ||
|  | 7f2942d414 | ||
|  | 3a1c5efcfd | ||
|  | 816eb03147 | ||
|  | 8504429f5f | ||
|  | 90291fdbca | ||
|  | 77b0bc675c | ||
|  | 8020f92d6b | ||
|  | 38825c70da | ||
|  | bb5daa5f8b | ||
|  | 8c11d0f15d | ||
|  | 5b544f76a5 | ||
|  | 6f93da9b5f | ||
|  | e9ef7ea6d8 | ||
|  | 54a23019b8 | ||
|  | 89ad25c904 | ||
|  | ee38d626aa | ||
|  | 40b60bed85 | ||
|  | b89643ddb1 | ||
|  | 32e878afc9 | ||
|  | 9974305ad4 | ||
|  | a3b2d03d68 | ||
|  | 01e9e3f5ce | ||
|  | b5ac319a90 | ||
|  | ad09630dbe | ||
|  | 03720940d4 | ||
|  | dfc05e0bec | ||
|  | 9e139e2b73 | ||
|  | 5c622b9512 | ||
|  | eec3515b6d | ||
|  | 276bc94cc6 | ||
|  | bfa59dd29c | ||
|  | 0ce8d706a6 | ||
|  | 98d95f80df | ||
|  | a72afa7174 | ||
|  | 0d145bbf1e | ||
|  | f6cf26009d | ||
|  | c042657dd8 | ||
|  | 43c9ab7734 | ||
|  | f6649d51bd | ||
|  | 2e265ac70a | ||
|  | 30e54997b2 | ||
|  | b9f0470d76 | ||
|  | bdcd176f81 | ||
|  | 04dacacd73 | ||
|  | a9502d1ddb | ||
|  | 5c25e91984 | ||
|  | 02163c4305 | ||
|  | c3731b3200 | ||
|  | 5cdf2c14d3 | ||
|  | e92d74f5c3 | ||
|  | 2b3516dadd | ||
|  | 8041dd9c26 | ||
|  | 2f7b78bc40 | ||
|  | 61fc6e05f4 | ||
|  | 367a3e52de | ||
|  | a3617cffb8 | ||
|  | ff341d8547 | ||
|  | 01fab6999f | ||
|  | b6152ce874 | ||
|  | ca5df3b217 | ||
|  | dd48be595c | ||
|  | 306d0f7da6 | ||
|  | c61c37e67a | ||
|  | f7f90238f2 | ||
|  | 589ad36855 | ||
|  | 5da24d2d4f | ||
|  | f7f2bf3fc0 | ||
|  | 34d1bdd53f | ||
|  | e021c93d22 | ||
|  | 2ff5faacc0 | ||
|  | a489190e81 | ||
|  | a403bb687a | ||
|  | 5966a3d678 | ||
|  | c71e46191f | ||
|  | 862fd7c644 | ||
|  | 10ea9c44fd | ||
|  | 816ca6460f | ||
|  | b6d60c4e34 | ||
|  | 6f67619784 | ||
|  | db0b48e7ae | ||
|  | 973f07b360 | ||
|  | 0f73d849eb | ||
|  | 1a6849ad37 | ||
|  | 8f31f891fd | ||
|  | 83985e9f21 | ||
|  | 04e9ba8e34 | ||
|  | 960ee919f9 | ||
|  | f4534a4bfb | ||
|  | 89553b7fa0 | ||
|  | 364f6b2051 | ||
|  | fe83e2fa6f | ||
|  | 1f3dd58ddf | ||
|  | da98efa833 | ||
|  | 3e6cf545d7 | ||
|  | 1080c3486c | ||
|  | cd7b6b686d | ||
|  | b84e6da0dd | ||
|  | fc3a4c6899 | ||
|  | 12a2cb0bdf | ||
|  | 57a0864465 | ||
|  | b3da837ede | ||
|  | 3de3e03ab3 | ||
|  | 78865a9d3c | ||
|  | 5b3230d63d | ||
|  | 04c93d937e | ||
|  | 5318e79f55 | ||
|  | 7bf4421d44 | ||
|  | 366152c049 | ||
|  | 70c00e81d9 | ||
|  | f13abf483e | ||
|  | 0e723a0a9b | ||
|  | 4a35477c35 | ||
|  | df7d360516 | ||
|  | 03eaa6c79f | ||
|  | 132999ce36 | ||
|  | 188407e3c7 | ||
|  | 8cf68ade30 | ||
|  | d62657c698 | ||
|  | 3262e534dc | ||
|  | 6202e8bda7 | ||
|  | 9984e8f218 | ||
|  | b0c91f6ad1 | ||
|  | 9e24586190 | ||
|  | 7ba6fc875b | ||
|  | 3b10906e78 | ||
|  | ebd24bf30e | ||
|  | ebd9b1b851 | ||
|  | b242a5de52 | ||
|  | 81ec011095 | ||
|  | 2a371cc081 | ||
|  | edb986ce24 | ||
|  | f90faca62e | ||
|  | 6090ac621e | ||
|  | ae58606d04 | ||
|  | bb9caf9cc9 | ||
|  | 9dd57decdf | ||
|  | f1fc0ee549 | ||
|  | fcdeb33426 | ||
|  | 44cd26ae77 | ||
|  | 04f34ea6b0 | ||
|  | e5fb609c8e | ||
|  | c675b534ef | ||
|  | 6c74881f95 | ||
|  | 756ec319cc | ||
|  | ba2d32be60 | ||
|  | 7cc09cec67 | ||
|  | 8b815fce93 | ||
|  | f1c78659be | ||
|  | 5c79a80f7a | ||
|  | f451e65278 | ||
|  | 176333df5b | ||
|  | d4227d2e41 | ||
|  | 0bbd2d9880 | ||
|  | b81316bd60 | ||
|  | d11dcb38fe | ||
|  | 77d82f22dc | ||
|  | be326a5211 | ||
|  | 83624eaf27 | ||
|  | 055619d275 | ||
|  | cda3dde120 | ||
|  | 5a0b862d22 | ||
|  | bb5fd8360b | ||
|  | d7180bd7b2 | ||
|  | 8c9b0dedb2 | ||
|  | 9c2c2c1fa2 | ||
|  | 596dc9e36d | ||
|  | b2019ba42d | ||
|  | 003d4a567a | ||
|  | 5112e0f551 | ||
|  | 8008fcdc65 | ||
|  | 8d41dcc650 | ||
|  | 037d024862 | ||
|  | 03ca5cd45b | ||
|  | 60d47bef84 | ||
|  | 98a7bcb044 | ||
|  | 7401971884 | ||
|  | 067a10e1b2 | ||
|  | ddfe33fab6 | ||
|  | 2a0ec30bb0 | ||
|  | 8540fc44f3 | ||
|  | 66095738e3 | ||
|  | e472711d23 | ||
|  | 8e054a4981 | ||
|  | feb28211d8 | ||
|  | 06f25b7006 | ||
|  | f85a67a1ff | ||
|  | 6fe0100927 | ||
|  | bcb359e317 | ||
|  | 4075067a10 | ||
|  | bd3c63218b | ||
|  | 27daf384da | ||
|  | 905fc0f357 | ||
|  | 9cd0e4ab2d | ||
|  | 6b38cd450f | ||
|  | bb60f5f043 | ||
|  | e777be4d3b | ||
|  | 8a71d55f0f | ||
|  | b01b49d10c | ||
|  | 496594d898 | ||
|  | 1d5e82c341 | ||
|  | a9b696f41c | ||
|  | e50b1eb359 | ||
|  | 92e0245387 | ||
|  | 67d0d3c3d6 | ||
|  | 23bcbc23e9 | ||
|  | 085d9a0bc7 | ||
|  | 368df142cf | ||
|  | d38edabb14 | ||
|  | 4426a10e2e | ||
|  | 931dc9d243 | ||
|  | c5b8893008 | ||
|  | c27f41aee4 | ||
|  | ef043b38ce | ||
|  | bb261f99c4 | ||
|  | 48ca0f2ac7 | ||
|  | b7f0b06684 | ||
|  | 324487d395 | ||
|  | 9a8c61497b | ||
|  | bc7afe4bdd | ||
|  | bb5dcb2434 | ||
|  | 71b9d11ff5 | ||
|  | 3e73a44576 | ||
|  | dedfe3a854 | ||
|  | c4b0ef4d49 | ||
|  | 339d81318f | ||
|  | 282ee0885b | 
							
								
								
									
										16
									
								
								.devtools/create_release_package.bat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								.devtools/create_release_package.bat
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| set projectPath=%~dp0 | ||||
| if %projectPath:~-1%==\ set projectPath=%projectPath:~0,-1% | ||||
| set projectPath=%projectPath%\.. | ||||
|  | ||||
| set releasePath=%projectPath%\.release | ||||
| mkdir "%releasePath%" | ||||
|  | ||||
| copy "%projectPath%\version.json" versiontemp.json | ||||
| for /f "tokens=*" %%a in ('jq .Version versiontemp.json --raw-output') do set version=%%a | ||||
| del versiontemp.json | ||||
|  | ||||
| del "%releasePath%\grocy_%version%.zip" | ||||
| 7za a -r "%releasePath%\grocy_%version%.zip" "%projectPath%\*" -xr!.* -xr!build.bat -xr!composer.json -xr!composer.lock -xr!package.json -xr!yarn.lock -xr!publication_assets | ||||
| 7za a "%releasePath%\grocy_%version%.zip" "%projectPath%\public\.htaccess" | ||||
| 7za rn "%releasePath%\grocy_%version%.zip" .htaccess public\.htaccess | ||||
| 7za d "%releasePath%\grocy_%version%.zip" data\*.* data\storage data\viewcache\* | ||||
							
								
								
									
										4
									
								
								.devtools/install_dependencies.bat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								.devtools/install_dependencies.bat
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | ||||
| pushd .. | ||||
| call composer install | ||||
| yarn install | ||||
| popd | ||||
							
								
								
									
										3
									
								
								.devtools/transifex_download.bat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								.devtools/transifex_download.bat
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| pushd .. | ||||
| tx pull --all --minimum-perc=90 | ||||
| popd | ||||
							
								
								
									
										3
									
								
								.devtools/transifex_upload.bat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								.devtools/transifex_upload.bat
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| pushd .. | ||||
| tx push --source | ||||
| popd | ||||
							
								
								
									
										4
									
								
								.devtools/update_dependencies.bat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								.devtools/update_dependencies.bat
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | ||||
| pushd .. | ||||
| call composer update | ||||
| yarn upgrade | ||||
| popd | ||||
							
								
								
									
										37
									
								
								.tx/config
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								.tx/config
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | ||||
| [main] | ||||
| host = https://www.transifex.com | ||||
|  | ||||
| [grocy.stringsphp] | ||||
| file_filter = localization/<lang>/strings.php | ||||
| minimum_perc = 0 | ||||
| source_file = localization/en/strings.php | ||||
| source_lang = en | ||||
| type = PHP_ARRAY | ||||
|  | ||||
| [grocy.stock_transaction_typesphp] | ||||
| file_filter = localization/<lang>/stock_transaction_types.php | ||||
| minimum_perc = 0 | ||||
| source_file = localization/en/stock_transaction_types.php | ||||
| source_lang = en | ||||
| type = PHP_ARRAY | ||||
|  | ||||
| [grocy.chore_typesphp] | ||||
| file_filter = localization/<lang>/chore_types.php | ||||
| minimum_perc = 0 | ||||
| source_file = localization/en/chore_types.php | ||||
| source_lang = en | ||||
| type = PHP_ARRAY | ||||
|  | ||||
| [grocy.component_translationsphp] | ||||
| file_filter = localization/<lang>/component_translations.php | ||||
| minimum_perc = 0 | ||||
| source_file = localization/en/component_translations.php | ||||
| source_lang = en | ||||
| type = PHP_ARRAY | ||||
|  | ||||
| [grocy.demo_dataphp] | ||||
| file_filter = localization/<lang>/demo_data.php | ||||
| minimum_perc = 0 | ||||
| source_file = localization/en/demo_data.php | ||||
| source_lang = en | ||||
| type = PHP_ARRAY | ||||
							
								
								
									
										28
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								README.md
									
									
									
									
									
								
							| @@ -2,19 +2,20 @@ | ||||
| ERP beyond your fridge | ||||
|  | ||||
| ## Give it a try | ||||
| Public demo of the latest version → [https://demo.grocy.info](https://demo.grocy.info)  | ||||
| - Public demo of the latest stable version → [https://demo.grocy.info](https://demo.grocy.info) | ||||
| - Public demo of the latest pre-release version (current master branch) → [https://demo-prerelease.grocy.info](https://demo-prerelease.grocy.info) | ||||
|  | ||||
| ## Motivation | ||||
| A household needs to be managed. I did this so far (almost 10 years) with my first self written software (a C# windows forms application) and with a bunch of Excel sheets. The software is a pain to use and Excel is Excel. So I searched for and tried different things for a (very) long time, nothing 100 % fitted, so this is my aim for a "complete houshold management"-thing. ERP your fridge! | ||||
| A household needs to be managed. I did this so far (almost 10 years) with my first self written software (a C# windows forms application) and with a bunch of Excel sheets. The software is a pain to use and Excel is Excel. So I searched for and tried different things for a (very) long time, nothing 100 % fitted, so this is my aim for a "complete household management"-thing. ERP your fridge! | ||||
|  | ||||
| ## How to install | ||||
| > **NEW** | ||||
| > | ||||
| > There is now grocy-desktop if you want to run grocy without a webserver just like a normal (windows) desktop application. | ||||
| > | ||||
| > See https://github.com/berrnd/grocy-desktop or directly download the [latest release](https://releases.grocy.info/latest-desktop) - the installation is nothing more than just clicking 2 times "next"... | ||||
| > See https://github.com/grocy/grocy-desktop or directly download the [latest release](https://releases.grocy.info/latest-desktop) - the installation is nothing more than just clicking 2 times "next"... | ||||
|  | ||||
| Just unpack the [latest release](https://releases.grocy.info/latest) on your PHP (SQLite extension required, currently only tested with PHP 7.2) enabled webserver (webservers root should point to the `public` directory), copy `config-dist.php` to `data/config.php`, edit it to your needs, ensure that the `data` directory is writable and you're ready to go, (to make writable `chown -R www-data:www-data data/`). Default login is user `admin` with password `admin`, please change the password immediately (see user menu). | ||||
| Just unpack the [latest release](https://releases.grocy.info/latest) on your PHP (SQLite (3.8.3 or higher) extension required, currently only tested with PHP 7.2) enabled webserver (webservers root should point to the `public` directory), copy `config-dist.php` to `data/config.php`, edit it to your needs, ensure that the `data` directory is writable and you're ready to go, (to make writable `chown -R www-data:www-data data/`). Default login is user `admin` with password `admin`, please change the password immediately (see user menu). | ||||
|  | ||||
| Alternatively clone this repository and install Composer and Yarn dependencies manually. | ||||
|  | ||||
| @@ -22,13 +23,19 @@ If you use nginx as your webserver, please include `try_files $uri /index.php;` | ||||
|  | ||||
| If, however, your webserver does not support URL rewriting, set `DISABLE_URL_REWRITING` in `data/config.php` (`Setting('DISABLE_URL_REWRITING', true);`). | ||||
|  | ||||
| ## How to run using Docker | ||||
|  | ||||
| See [grocy/grocy-docker](https://github.com/grocy/grocy-docker) for instructions. | ||||
|  | ||||
| ## How to update | ||||
| Just overwrite everything with the latest release while keeping the `data` directory, check `config-dist.php` for new configuration options and add them to your `data/config.php` (the default from values `config-dist.php` will be used for not in `data/config.php` defined settings). Just to be sure, please empty `data/viewcache`. | ||||
|  | ||||
| If you run grocy on Linux, there is also `update.sh` (remember to make the script executable, `chmod +x update.sh` and ensure that you have `unzip` installed) which does exactly this and additionally creates a backup (`.tgz` archive) of the current installation in `data/backups` (backups older than 60 days will be deleted during the update). | ||||
|  | ||||
| ## Localization | ||||
| grocy is fully localizable - the default language is English (integrated into code), a German localization is always maintained by me. There is one file per language in the `localization` directory, if you want to create a translation, it's best to copy `localization/de.php` to a new one (e. g. `localization/it.php`) and translating all strings there. (Language can be changed in `data/config.php`, e. g. `Setting('CULTURE', 'it');`) | ||||
| grocy is fully localizable - the default language is English (integrated into code), a German localization is always maintained by me. | ||||
| You can easily help translating grocy at https://www.transifex.com/grocy/grocy, if your language is incomplete or not available yet. | ||||
| (Language can be changed in `data/config.php`, e. g. `Setting('CULTURE', 'it');`) | ||||
|  | ||||
| ### Maintaining your own localization | ||||
| As the German translation will always be the most complete one, for maintaining your localization it would be easiest when you compare your localization with the German one with a diff tool of your choice. | ||||
| @@ -66,6 +73,9 @@ There is no plugin included for any service, see the reference implementation in | ||||
| ### Database migrations | ||||
| Database schema migration is automatically done when visiting the root (`/`) route (click on the logo in the left upper edge). | ||||
|  | ||||
| ### Disable certain features | ||||
| If you don't use certain feature sets of grocy (for example if you don't need "Chores"), there are feature flags per major feature set to hide/disable the related UI elements (see `config-dist.php`) | ||||
|  | ||||
| ### Adding your own CSS or JS without to have to modify the application itself | ||||
| - When the file `data/custom_js.html` exists, the contents of the file will be added just before `</body>` (end of body) on every page | ||||
| - When the file `data/custom_css.html` exists, the contents of the file will be added just before `</head>` (end of head) on every page | ||||
| @@ -74,19 +84,19 @@ Database schema migration is automatically done when visiting the root (`/`) rou | ||||
| When the file `data/demo.txt` exists, the application will work in a demo mode which means authentication is disabled and some demo data will be generated during the database schema migration. | ||||
|  | ||||
| ### Embedded mode | ||||
| When the file `embedded.txt` exists, it must contain a valid and writable path which will be used as the data directory instead of `data` and authentication will be disabled (used in [grocy-desktop](https://github.com/berrnd/grocy-desktop)). | ||||
| When the file `embedded.txt` exists, it must contain a valid and writable path which will be used as the data directory instead of `data` and authentication will be disabled (used in [grocy-desktop](https://github.com/grocy/grocy-desktop)). | ||||
|  | ||||
| In embedded mode, settings can be overridden by text files in `data/settingoverrides`, the file name must be `<SettingName>.txt` (e. g. `BASE_URL.txt`) and the content must be the setting value (normally one single line). | ||||
|  | ||||
| ## Screenshots | ||||
| #### Dashboard | ||||
|  | ||||
|  | ||||
|  | ||||
| #### Purchase - with barcode scan | ||||
|  | ||||
|  | ||||
|  | ||||
| #### Consume - with manual search | ||||
|  | ||||
|  | ||||
|  | ||||
| ## License | ||||
| The MIT License (MIT) | ||||
|   | ||||
							
								
								
									
										13
									
								
								build.bat
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								build.bat
									
									
									
									
									
								
							| @@ -1,13 +0,0 @@ | ||||
| set projectPath=%~dp0 | ||||
| if %projectPath:~-1%==\ set projectPath=%projectPath:~0,-1% | ||||
|  | ||||
| set releasePath=%projectPath%\.release | ||||
| mkdir "%releasePath%" | ||||
|  | ||||
| for /f "tokens=*" %%a in ('build_tools\jq.exe .Version version.json --raw-output') do set version=%%a | ||||
|  | ||||
| del "%releasePath%\grocy_%version%.zip" | ||||
| "build_tools\7za.exe" a -r "%releasePath%\grocy_%version%.zip" "%projectPath%\*" -xr!.* -xr!build_tools -xr!build.bat -xr!composer.json -xr!composer.lock -xr!package.json -xr!yarn.lock -xr!publication_assets | ||||
| "build_tools\7za.exe" a "%releasePath%\grocy_%version%.zip" "%projectPath%\public\.htaccess" | ||||
| "build_tools\7za.exe" rn "%releasePath%\grocy_%version%.zip" .htaccess public\.htaccess | ||||
| "build_tools\7za.exe" d "%releasePath%\grocy_%version%.zip" data\*.* data\sessions data\viewcache\* | ||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -4,7 +4,8 @@ | ||||
| 		"slim/slim": "^3.8", | ||||
| 		"morris/lessql": "^0.3.4", | ||||
| 		"rubellum/slim-blade-view": "^0.1.1", | ||||
| 		"tuupola/cors-middleware": "^0.7.0" | ||||
| 		"tuupola/cors-middleware": "^0.7.0", | ||||
| 		"eluceo/ical": "^0.15.0" | ||||
| 	}, | ||||
| 	"autoload": { | ||||
| 		"psr-4": { | ||||
|   | ||||
							
								
								
									
										375
									
								
								composer.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										375
									
								
								composer.lock
									
									
									
										generated
									
									
									
								
							| @@ -1,10 +1,10 @@ | ||||
| { | ||||
|     "_readme": [ | ||||
|         "This file locks the dependencies of your project to a known state", | ||||
|         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", | ||||
|         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", | ||||
|         "This file is @generated automatically" | ||||
|     ], | ||||
|     "content-hash": "c1bc4c17739e9d0ee8b33628f6d4b9a4", | ||||
|     "content-hash": "0b203f875499dfeaa61890cdec018a2d", | ||||
|     "packages": [ | ||||
|         { | ||||
|             "name": "container-interop/container-interop", | ||||
| @@ -104,6 +104,57 @@ | ||||
|             ], | ||||
|             "time": "2018-01-09T20:05:19+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "eluceo/ical", | ||||
|             "version": "0.15.0", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/markuspoerschke/iCal.git", | ||||
|                 "reference": "add0ca99aa1f77f134a2e8b071f2ebc22b115139" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/markuspoerschke/iCal/zipball/add0ca99aa1f77f134a2e8b071f2ebc22b115139", | ||||
|                 "reference": "add0ca99aa1f77f134a2e8b071f2ebc22b115139", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
|                 "php": ">=7.0" | ||||
|             }, | ||||
|             "require-dev": { | ||||
|                 "phpunit/phpunit": "^6.0" | ||||
|             }, | ||||
|             "suggest": { | ||||
|                 "ext-mbstring": "Massive performance enhancement of line folding" | ||||
|             }, | ||||
|             "type": "library", | ||||
|             "autoload": { | ||||
|                 "psr-4": { | ||||
|                     "Eluceo\\iCal\\": "src/" | ||||
|                 } | ||||
|             }, | ||||
|             "notification-url": "https://packagist.org/downloads/", | ||||
|             "license": [ | ||||
|                 "MIT" | ||||
|             ], | ||||
|             "authors": [ | ||||
|                 { | ||||
|                     "name": "Markus Poerschke", | ||||
|                     "email": "markus@eluceo.de", | ||||
|                     "role": "Developer" | ||||
|                 } | ||||
|             ], | ||||
|             "description": "The eluceo/iCal package offers a abstraction layer for creating iCalendars. You can easily create iCal files by using PHP object instead of typing your *.ics file by hand. The output will follow RFC 5545 as best as possible.", | ||||
|             "homepage": "https://github.com/markuspoerschke/iCal", | ||||
|             "keywords": [ | ||||
|                 "calendar", | ||||
|                 "iCalendar", | ||||
|                 "ical", | ||||
|                 "ics", | ||||
|                 "php calendar" | ||||
|             ], | ||||
|             "time": "2019-01-13T22:00:58+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "http-interop/http-factory", | ||||
|             "version": "0.3.0", | ||||
| @@ -159,27 +210,28 @@ | ||||
|         }, | ||||
|         { | ||||
|             "name": "illuminate/container", | ||||
|             "version": "v5.6.29", | ||||
|             "version": "v5.8.3", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/illuminate/container.git", | ||||
|                 "reference": "1f0757cae8749400aeda730f6438a081fc3c082d" | ||||
|                 "reference": "b984960d2634c6be97b0dd368a8953e8c4e06ec7" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/illuminate/container/zipball/1f0757cae8749400aeda730f6438a081fc3c082d", | ||||
|                 "reference": "1f0757cae8749400aeda730f6438a081fc3c082d", | ||||
|                 "url": "https://api.github.com/repos/illuminate/container/zipball/b984960d2634c6be97b0dd368a8953e8c4e06ec7", | ||||
|                 "reference": "b984960d2634c6be97b0dd368a8953e8c4e06ec7", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
|                 "illuminate/contracts": "5.6.*", | ||||
|                 "illuminate/contracts": "5.8.*", | ||||
|                 "illuminate/support": "5.8.*", | ||||
|                 "php": "^7.1.3", | ||||
|                 "psr/container": "~1.0" | ||||
|                 "psr/container": "^1.0" | ||||
|             }, | ||||
|             "type": "library", | ||||
|             "extra": { | ||||
|                 "branch-alias": { | ||||
|                     "dev-master": "5.6-dev" | ||||
|                     "dev-master": "5.8-dev" | ||||
|                 } | ||||
|             }, | ||||
|             "autoload": { | ||||
| @@ -199,31 +251,31 @@ | ||||
|             ], | ||||
|             "description": "The Illuminate Container package.", | ||||
|             "homepage": "https://laravel.com", | ||||
|             "time": "2018-05-24T13:16:56+00:00" | ||||
|             "time": "2019-03-03T15:13:35+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "illuminate/contracts", | ||||
|             "version": "v5.6.29", | ||||
|             "version": "v5.8.3", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/illuminate/contracts.git", | ||||
|                 "reference": "3dc639feabe0f302f574157a782ede323881a944" | ||||
|                 "reference": "3e3a9a654adbf798e05491a5dbf90112df1effde" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/illuminate/contracts/zipball/3dc639feabe0f302f574157a782ede323881a944", | ||||
|                 "reference": "3dc639feabe0f302f574157a782ede323881a944", | ||||
|                 "url": "https://api.github.com/repos/illuminate/contracts/zipball/3e3a9a654adbf798e05491a5dbf90112df1effde", | ||||
|                 "reference": "3e3a9a654adbf798e05491a5dbf90112df1effde", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
|                 "php": "^7.1.3", | ||||
|                 "psr/container": "~1.0", | ||||
|                 "psr/simple-cache": "~1.0" | ||||
|                 "psr/container": "^1.0", | ||||
|                 "psr/simple-cache": "^1.0" | ||||
|             }, | ||||
|             "type": "library", | ||||
|             "extra": { | ||||
|                 "branch-alias": { | ||||
|                     "dev-master": "5.6-dev" | ||||
|                     "dev-master": "5.8-dev" | ||||
|                 } | ||||
|             }, | ||||
|             "autoload": { | ||||
| @@ -243,32 +295,32 @@ | ||||
|             ], | ||||
|             "description": "The Illuminate Contracts package.", | ||||
|             "homepage": "https://laravel.com", | ||||
|             "time": "2018-05-11T23:38:58+00:00" | ||||
|             "time": "2019-02-18T18:37:54+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "illuminate/events", | ||||
|             "version": "v5.6.29", | ||||
|             "version": "v5.8.3", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/illuminate/events.git", | ||||
|                 "reference": "5bdd8e84c0528970961289da088306c632eca8f7" | ||||
|                 "reference": "a85d7c273bc4e3357000c5fc4812374598515de3" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/illuminate/events/zipball/5bdd8e84c0528970961289da088306c632eca8f7", | ||||
|                 "reference": "5bdd8e84c0528970961289da088306c632eca8f7", | ||||
|                 "url": "https://api.github.com/repos/illuminate/events/zipball/a85d7c273bc4e3357000c5fc4812374598515de3", | ||||
|                 "reference": "a85d7c273bc4e3357000c5fc4812374598515de3", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
|                 "illuminate/container": "5.6.*", | ||||
|                 "illuminate/contracts": "5.6.*", | ||||
|                 "illuminate/support": "5.6.*", | ||||
|                 "illuminate/container": "5.8.*", | ||||
|                 "illuminate/contracts": "5.8.*", | ||||
|                 "illuminate/support": "5.8.*", | ||||
|                 "php": "^7.1.3" | ||||
|             }, | ||||
|             "type": "library", | ||||
|             "extra": { | ||||
|                 "branch-alias": { | ||||
|                     "dev-master": "5.6-dev" | ||||
|                     "dev-master": "5.8-dev" | ||||
|                 } | ||||
|             }, | ||||
|             "autoload": { | ||||
| @@ -288,39 +340,39 @@ | ||||
|             ], | ||||
|             "description": "The Illuminate Events package.", | ||||
|             "homepage": "https://laravel.com", | ||||
|             "time": "2018-07-23T01:01:28+00:00" | ||||
|             "time": "2019-02-18T18:37:54+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "illuminate/filesystem", | ||||
|             "version": "v5.6.29", | ||||
|             "version": "v5.8.3", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/illuminate/filesystem.git", | ||||
|                 "reference": "2677365f61c66fad13ff12a37cd4fa8aaeb048d2" | ||||
|                 "reference": "8aef3ed5028eea80fa20287b776d6ec8e7eafbba" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/illuminate/filesystem/zipball/2677365f61c66fad13ff12a37cd4fa8aaeb048d2", | ||||
|                 "reference": "2677365f61c66fad13ff12a37cd4fa8aaeb048d2", | ||||
|                 "url": "https://api.github.com/repos/illuminate/filesystem/zipball/8aef3ed5028eea80fa20287b776d6ec8e7eafbba", | ||||
|                 "reference": "8aef3ed5028eea80fa20287b776d6ec8e7eafbba", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
|                 "illuminate/contracts": "5.6.*", | ||||
|                 "illuminate/support": "5.6.*", | ||||
|                 "illuminate/contracts": "5.8.*", | ||||
|                 "illuminate/support": "5.8.*", | ||||
|                 "php": "^7.1.3", | ||||
|                 "symfony/finder": "~4.0" | ||||
|                 "symfony/finder": "^4.2" | ||||
|             }, | ||||
|             "suggest": { | ||||
|                 "league/flysystem": "Required to use the Flysystem local and FTP drivers (~1.0).", | ||||
|                 "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (~1.0).", | ||||
|                 "league/flysystem-cached-adapter": "Required to use the Flysystem cache (~1.0).", | ||||
|                 "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (~1.0).", | ||||
|                 "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (~1.0)." | ||||
|                 "league/flysystem": "Required to use the Flysystem local and FTP drivers (^1.0).", | ||||
|                 "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", | ||||
|                 "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", | ||||
|                 "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (^1.0).", | ||||
|                 "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0)." | ||||
|             }, | ||||
|             "type": "library", | ||||
|             "extra": { | ||||
|                 "branch-alias": { | ||||
|                     "dev-master": "5.6-dev" | ||||
|                     "dev-master": "5.8-dev" | ||||
|                 } | ||||
|             }, | ||||
|             "autoload": { | ||||
| @@ -340,42 +392,45 @@ | ||||
|             ], | ||||
|             "description": "The Illuminate Filesystem package.", | ||||
|             "homepage": "https://laravel.com", | ||||
|             "time": "2018-07-07T14:54:27+00:00" | ||||
|             "time": "2019-02-18T18:37:54+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "illuminate/support", | ||||
|             "version": "v5.6.29", | ||||
|             "version": "v5.8.3", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/illuminate/support.git", | ||||
|                 "reference": "c684cb5e77e213020f7a4ed213d94b2b384c2951" | ||||
|                 "reference": "0f0291d1bc2f036af3fceb8e46900b58812533c4" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/illuminate/support/zipball/c684cb5e77e213020f7a4ed213d94b2b384c2951", | ||||
|                 "reference": "c684cb5e77e213020f7a4ed213d94b2b384c2951", | ||||
|                 "url": "https://api.github.com/repos/illuminate/support/zipball/0f0291d1bc2f036af3fceb8e46900b58812533c4", | ||||
|                 "reference": "0f0291d1bc2f036af3fceb8e46900b58812533c4", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
|                 "doctrine/inflector": "~1.1", | ||||
|                 "doctrine/inflector": "^1.1", | ||||
|                 "ext-json": "*", | ||||
|                 "ext-mbstring": "*", | ||||
|                 "illuminate/contracts": "5.6.*", | ||||
|                 "nesbot/carbon": "^1.24.1", | ||||
|                 "illuminate/contracts": "5.8.*", | ||||
|                 "nesbot/carbon": "^1.26.3 || ^2.0", | ||||
|                 "php": "^7.1.3" | ||||
|             }, | ||||
|             "conflict": { | ||||
|                 "tightenco/collect": "<5.5.33" | ||||
|             }, | ||||
|             "suggest": { | ||||
|                 "illuminate/filesystem": "Required to use the composer class (5.6.*).", | ||||
|                 "illuminate/filesystem": "Required to use the composer class (5.8.*).", | ||||
|                 "moontoast/math": "Required to use ordered UUIDs (^1.1).", | ||||
|                 "ramsey/uuid": "Required to use Str::uuid() (^3.7).", | ||||
|                 "symfony/process": "Required to use the composer class (~4.0).", | ||||
|                 "symfony/var-dumper": "Required to use the dd function (~4.0)." | ||||
|                 "symfony/process": "Required to use the composer class (^4.2).", | ||||
|                 "symfony/var-dumper": "Required to use the dd function (^4.2).", | ||||
|                 "vlucas/phpdotenv": "Required to use the env helper (^3.3)." | ||||
|             }, | ||||
|             "type": "library", | ||||
|             "extra": { | ||||
|                 "branch-alias": { | ||||
|                     "dev-master": "5.6-dev" | ||||
|                     "dev-master": "5.8-dev" | ||||
|                 } | ||||
|             }, | ||||
|             "autoload": { | ||||
| @@ -398,35 +453,36 @@ | ||||
|             ], | ||||
|             "description": "The Illuminate Support package.", | ||||
|             "homepage": "https://laravel.com", | ||||
|             "time": "2018-07-26T15:32:11+00:00" | ||||
|             "time": "2019-03-05T13:38:58+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "illuminate/view", | ||||
|             "version": "v5.6.29", | ||||
|             "version": "v5.8.3", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/illuminate/view.git", | ||||
|                 "reference": "8d4e1c4d8c133eaca33c94ee35b7c0d2ef1dc66f" | ||||
|                 "reference": "33818dc7b783f3afbeea9b0b09455c8cc89aa899" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/illuminate/view/zipball/8d4e1c4d8c133eaca33c94ee35b7c0d2ef1dc66f", | ||||
|                 "reference": "8d4e1c4d8c133eaca33c94ee35b7c0d2ef1dc66f", | ||||
|                 "url": "https://api.github.com/repos/illuminate/view/zipball/33818dc7b783f3afbeea9b0b09455c8cc89aa899", | ||||
|                 "reference": "33818dc7b783f3afbeea9b0b09455c8cc89aa899", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
|                 "illuminate/container": "5.6.*", | ||||
|                 "illuminate/contracts": "5.6.*", | ||||
|                 "illuminate/events": "5.6.*", | ||||
|                 "illuminate/filesystem": "5.6.*", | ||||
|                 "illuminate/support": "5.6.*", | ||||
|                 "ext-json": "*", | ||||
|                 "illuminate/container": "5.8.*", | ||||
|                 "illuminate/contracts": "5.8.*", | ||||
|                 "illuminate/events": "5.8.*", | ||||
|                 "illuminate/filesystem": "5.8.*", | ||||
|                 "illuminate/support": "5.8.*", | ||||
|                 "php": "^7.1.3", | ||||
|                 "symfony/debug": "~4.0" | ||||
|                 "symfony/debug": "^4.2" | ||||
|             }, | ||||
|             "type": "library", | ||||
|             "extra": { | ||||
|                 "branch-alias": { | ||||
|                     "dev-master": "5.6-dev" | ||||
|                     "dev-master": "5.8-dev" | ||||
|                 } | ||||
|             }, | ||||
|             "autoload": { | ||||
| @@ -446,7 +502,7 @@ | ||||
|             ], | ||||
|             "description": "The Illuminate View package.", | ||||
|             "homepage": "https://laravel.com", | ||||
|             "time": "2018-07-19T23:06:53+00:00" | ||||
|             "time": "2019-02-27T12:03:43+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "morris/lessql", | ||||
| @@ -553,25 +609,30 @@ | ||||
|         }, | ||||
|         { | ||||
|             "name": "nesbot/carbon", | ||||
|             "version": "1.32.0", | ||||
|             "version": "2.14.2", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/briannesbitt/Carbon.git", | ||||
|                 "reference": "64563e2b9f69e4db1b82a60e81efa327a30ff343" | ||||
|                 "reference": "a1f4f9abcde8241ce33bf5090896e9c16d0b4232" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/64563e2b9f69e4db1b82a60e81efa327a30ff343", | ||||
|                 "reference": "64563e2b9f69e4db1b82a60e81efa327a30ff343", | ||||
|                 "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/a1f4f9abcde8241ce33bf5090896e9c16d0b4232", | ||||
|                 "reference": "a1f4f9abcde8241ce33bf5090896e9c16d0b4232", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
|                 "php": ">=5.3.9", | ||||
|                 "symfony/translation": "~2.6 || ~3.0 || ~4.0" | ||||
|                 "ext-json": "*", | ||||
|                 "php": "^7.1.8 || ^8.0", | ||||
|                 "symfony/translation": "^3.4 || ^4.0" | ||||
|             }, | ||||
|             "require-dev": { | ||||
|                 "friendsofphp/php-cs-fixer": "~2", | ||||
|                 "phpunit/phpunit": "^4.8.35 || ^5.7" | ||||
|                 "friendsofphp/php-cs-fixer": "^2.14 || ^3.0", | ||||
|                 "kylekatarnls/multi-tester": "^0.1", | ||||
|                 "phpmd/phpmd": "^2.6", | ||||
|                 "phpstan/phpstan": "^0.10.8", | ||||
|                 "phpunit/phpunit": "^7.5 || ^8.0", | ||||
|                 "squizlabs/php_codesniffer": "^3.4" | ||||
|             }, | ||||
|             "type": "library", | ||||
|             "extra": { | ||||
| @@ -583,7 +644,7 @@ | ||||
|             }, | ||||
|             "autoload": { | ||||
|                 "psr-4": { | ||||
|                     "": "src/" | ||||
|                     "Carbon\\": "src/Carbon/" | ||||
|                 } | ||||
|             }, | ||||
|             "notification-url": "https://packagist.org/downloads/", | ||||
| @@ -604,7 +665,7 @@ | ||||
|                 "datetime", | ||||
|                 "time" | ||||
|             ], | ||||
|             "time": "2018-07-05T06:59:26+00:00" | ||||
|             "time": "2019-02-28T09:07:12+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "nikic/fast-route", | ||||
| @@ -844,16 +905,16 @@ | ||||
|         }, | ||||
|         { | ||||
|             "name": "psr/http-server-handler", | ||||
|             "version": "1.0.0", | ||||
|             "version": "1.0.1", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/php-fig/http-server-handler.git", | ||||
|                 "reference": "439d92054dc06097f2406ec074a2627839955a02" | ||||
|                 "reference": "aff2f80e33b7f026ec96bb42f63242dc50ffcae7" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/php-fig/http-server-handler/zipball/439d92054dc06097f2406ec074a2627839955a02", | ||||
|                 "reference": "439d92054dc06097f2406ec074a2627839955a02", | ||||
|                 "url": "https://api.github.com/repos/php-fig/http-server-handler/zipball/aff2f80e33b7f026ec96bb42f63242dc50ffcae7", | ||||
|                 "reference": "aff2f80e33b7f026ec96bb42f63242dc50ffcae7", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
| @@ -893,20 +954,20 @@ | ||||
|                 "response", | ||||
|                 "server" | ||||
|             ], | ||||
|             "time": "2018-01-22T17:04:15+00:00" | ||||
|             "time": "2018-10-30T16:46:14+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "psr/http-server-middleware", | ||||
|             "version": "1.0.0", | ||||
|             "version": "1.0.1", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/php-fig/http-server-middleware.git", | ||||
|                 "reference": "ea17eb1fb2c8df6db919cc578451a8013c6a0ae5" | ||||
|                 "reference": "2296f45510945530b9dceb8bcedb5cb84d40c5f5" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/php-fig/http-server-middleware/zipball/ea17eb1fb2c8df6db919cc578451a8013c6a0ae5", | ||||
|                 "reference": "ea17eb1fb2c8df6db919cc578451a8013c6a0ae5", | ||||
|                 "url": "https://api.github.com/repos/php-fig/http-server-middleware/zipball/2296f45510945530b9dceb8bcedb5cb84d40c5f5", | ||||
|                 "reference": "2296f45510945530b9dceb8bcedb5cb84d40c5f5", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
| @@ -946,20 +1007,20 @@ | ||||
|                 "request", | ||||
|                 "response" | ||||
|             ], | ||||
|             "time": "2018-01-22T17:08:31+00:00" | ||||
|             "time": "2018-10-30T17:12:04+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "psr/log", | ||||
|             "version": "1.0.2", | ||||
|             "version": "1.1.0", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/php-fig/log.git", | ||||
|                 "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" | ||||
|                 "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", | ||||
|                 "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", | ||||
|                 "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", | ||||
|                 "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
| @@ -993,7 +1054,7 @@ | ||||
|                 "psr", | ||||
|                 "psr-3" | ||||
|             ], | ||||
|             "time": "2016-10-10T12:19:37+00:00" | ||||
|             "time": "2018-11-20T15:27:04+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "psr/simple-cache", | ||||
| @@ -1095,16 +1156,16 @@ | ||||
|         }, | ||||
|         { | ||||
|             "name": "slim/slim", | ||||
|             "version": "3.10.0", | ||||
|             "version": "3.12.0", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/slimphp/Slim.git", | ||||
|                 "reference": "d8aabeacc3688b25e2f2dd2db91df91ec6fdd748" | ||||
|                 "reference": "f4947cc900b6e51cbfda58b9f1247bca2f76f9f0" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/slimphp/Slim/zipball/d8aabeacc3688b25e2f2dd2db91df91ec6fdd748", | ||||
|                 "reference": "d8aabeacc3688b25e2f2dd2db91df91ec6fdd748", | ||||
|                 "url": "https://api.github.com/repos/slimphp/Slim/zipball/f4947cc900b6e51cbfda58b9f1247bca2f76f9f0", | ||||
|                 "reference": "f4947cc900b6e51cbfda58b9f1247bca2f76f9f0", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
| @@ -1162,20 +1223,88 @@ | ||||
|                 "micro", | ||||
|                 "router" | ||||
|             ], | ||||
|             "time": "2018-04-19T19:29:08+00:00" | ||||
|             "time": "2019-01-15T13:21:25+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "symfony/debug", | ||||
|             "version": "v4.1.3", | ||||
|             "name": "symfony/contracts", | ||||
|             "version": "v1.0.2", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/symfony/debug.git", | ||||
|                 "reference": "9316545571f079c4dd183e674721d9dc783ce196" | ||||
|                 "url": "https://github.com/symfony/contracts.git", | ||||
|                 "reference": "1aa7ab2429c3d594dd70689604b5cf7421254cdf" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/symfony/debug/zipball/9316545571f079c4dd183e674721d9dc783ce196", | ||||
|                 "reference": "9316545571f079c4dd183e674721d9dc783ce196", | ||||
|                 "url": "https://api.github.com/repos/symfony/contracts/zipball/1aa7ab2429c3d594dd70689604b5cf7421254cdf", | ||||
|                 "reference": "1aa7ab2429c3d594dd70689604b5cf7421254cdf", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
|                 "php": "^7.1.3" | ||||
|             }, | ||||
|             "require-dev": { | ||||
|                 "psr/cache": "^1.0", | ||||
|                 "psr/container": "^1.0" | ||||
|             }, | ||||
|             "suggest": { | ||||
|                 "psr/cache": "When using the Cache contracts", | ||||
|                 "psr/container": "When using the Service contracts", | ||||
|                 "symfony/cache-contracts-implementation": "", | ||||
|                 "symfony/service-contracts-implementation": "", | ||||
|                 "symfony/translation-contracts-implementation": "" | ||||
|             }, | ||||
|             "type": "library", | ||||
|             "extra": { | ||||
|                 "branch-alias": { | ||||
|                     "dev-master": "1.0-dev" | ||||
|                 } | ||||
|             }, | ||||
|             "autoload": { | ||||
|                 "psr-4": { | ||||
|                     "Symfony\\Contracts\\": "" | ||||
|                 }, | ||||
|                 "exclude-from-classmap": [ | ||||
|                     "**/Tests/" | ||||
|                 ] | ||||
|             }, | ||||
|             "notification-url": "https://packagist.org/downloads/", | ||||
|             "license": [ | ||||
|                 "MIT" | ||||
|             ], | ||||
|             "authors": [ | ||||
|                 { | ||||
|                     "name": "Nicolas Grekas", | ||||
|                     "email": "p@tchwork.com" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "Symfony Community", | ||||
|                     "homepage": "https://symfony.com/contributors" | ||||
|                 } | ||||
|             ], | ||||
|             "description": "A set of abstractions extracted out of the Symfony components", | ||||
|             "homepage": "https://symfony.com", | ||||
|             "keywords": [ | ||||
|                 "abstractions", | ||||
|                 "contracts", | ||||
|                 "decoupling", | ||||
|                 "interfaces", | ||||
|                 "interoperability", | ||||
|                 "standards" | ||||
|             ], | ||||
|             "time": "2018-12-05T08:06:11+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "symfony/debug", | ||||
|             "version": "v4.2.4", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/symfony/debug.git", | ||||
|                 "reference": "de73f48977b8eaf7ce22814d66e43a1662cc864f" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/symfony/debug/zipball/de73f48977b8eaf7ce22814d66e43a1662cc864f", | ||||
|                 "reference": "de73f48977b8eaf7ce22814d66e43a1662cc864f", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
| @@ -1191,7 +1320,7 @@ | ||||
|             "type": "library", | ||||
|             "extra": { | ||||
|                 "branch-alias": { | ||||
|                     "dev-master": "4.1-dev" | ||||
|                     "dev-master": "4.2-dev" | ||||
|                 } | ||||
|             }, | ||||
|             "autoload": { | ||||
| @@ -1218,20 +1347,20 @@ | ||||
|             ], | ||||
|             "description": "Symfony Debug Component", | ||||
|             "homepage": "https://symfony.com", | ||||
|             "time": "2018-07-26T11:24:31+00:00" | ||||
|             "time": "2019-03-03T18:11:24+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "symfony/finder", | ||||
|             "version": "v4.1.3", | ||||
|             "version": "v4.2.4", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/symfony/finder.git", | ||||
|                 "reference": "e162f1df3102d0b7472805a5a9d5db9fcf0a8068" | ||||
|                 "reference": "267b7002c1b70ea80db0833c3afe05f0fbde580a" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/symfony/finder/zipball/e162f1df3102d0b7472805a5a9d5db9fcf0a8068", | ||||
|                 "reference": "e162f1df3102d0b7472805a5a9d5db9fcf0a8068", | ||||
|                 "url": "https://api.github.com/repos/symfony/finder/zipball/267b7002c1b70ea80db0833c3afe05f0fbde580a", | ||||
|                 "reference": "267b7002c1b70ea80db0833c3afe05f0fbde580a", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
| @@ -1240,7 +1369,7 @@ | ||||
|             "type": "library", | ||||
|             "extra": { | ||||
|                 "branch-alias": { | ||||
|                     "dev-master": "4.1-dev" | ||||
|                     "dev-master": "4.2-dev" | ||||
|                 } | ||||
|             }, | ||||
|             "autoload": { | ||||
| @@ -1267,20 +1396,20 @@ | ||||
|             ], | ||||
|             "description": "Symfony Finder Component", | ||||
|             "homepage": "https://symfony.com", | ||||
|             "time": "2018-07-26T11:24:31+00:00" | ||||
|             "time": "2019-02-23T15:42:05+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "symfony/polyfill-mbstring", | ||||
|             "version": "v1.8.0", | ||||
|             "version": "v1.10.0", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/symfony/polyfill-mbstring.git", | ||||
|                 "reference": "3296adf6a6454a050679cde90f95350ad604b171" | ||||
|                 "reference": "c79c051f5b3a46be09205c73b80b346e4153e494" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/3296adf6a6454a050679cde90f95350ad604b171", | ||||
|                 "reference": "3296adf6a6454a050679cde90f95350ad604b171", | ||||
|                 "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494", | ||||
|                 "reference": "c79c051f5b3a46be09205c73b80b346e4153e494", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
| @@ -1292,7 +1421,7 @@ | ||||
|             "type": "library", | ||||
|             "extra": { | ||||
|                 "branch-alias": { | ||||
|                     "dev-master": "1.8-dev" | ||||
|                     "dev-master": "1.9-dev" | ||||
|                 } | ||||
|             }, | ||||
|             "autoload": { | ||||
| @@ -1326,24 +1455,25 @@ | ||||
|                 "portable", | ||||
|                 "shim" | ||||
|             ], | ||||
|             "time": "2018-04-26T10:06:28+00:00" | ||||
|             "time": "2018-09-21T13:07:52+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "symfony/translation", | ||||
|             "version": "v4.1.3", | ||||
|             "version": "v4.2.4", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/symfony/translation.git", | ||||
|                 "reference": "6fcd1bd44fd6d7181e6ea57a6f4e08a09b29ef65" | ||||
|                 "reference": "748464177a77011f8f4cdd076773862ce4915f8f" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/symfony/translation/zipball/6fcd1bd44fd6d7181e6ea57a6f4e08a09b29ef65", | ||||
|                 "reference": "6fcd1bd44fd6d7181e6ea57a6f4e08a09b29ef65", | ||||
|                 "url": "https://api.github.com/repos/symfony/translation/zipball/748464177a77011f8f4cdd076773862ce4915f8f", | ||||
|                 "reference": "748464177a77011f8f4cdd076773862ce4915f8f", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
|                 "php": "^7.1.3", | ||||
|                 "symfony/contracts": "^1.0.2", | ||||
|                 "symfony/polyfill-mbstring": "~1.0" | ||||
|             }, | ||||
|             "conflict": { | ||||
| @@ -1351,6 +1481,9 @@ | ||||
|                 "symfony/dependency-injection": "<3.4", | ||||
|                 "symfony/yaml": "<3.4" | ||||
|             }, | ||||
|             "provide": { | ||||
|                 "symfony/translation-contracts-implementation": "1.0" | ||||
|             }, | ||||
|             "require-dev": { | ||||
|                 "psr/log": "~1.0", | ||||
|                 "symfony/config": "~3.4|~4.0", | ||||
| @@ -1368,7 +1501,7 @@ | ||||
|             "type": "library", | ||||
|             "extra": { | ||||
|                 "branch-alias": { | ||||
|                     "dev-master": "4.1-dev" | ||||
|                     "dev-master": "4.2-dev" | ||||
|                 } | ||||
|             }, | ||||
|             "autoload": { | ||||
| @@ -1395,7 +1528,7 @@ | ||||
|             ], | ||||
|             "description": "Symfony Translation Component", | ||||
|             "homepage": "https://symfony.com", | ||||
|             "time": "2018-07-26T11:24:31+00:00" | ||||
|             "time": "2019-02-27T03:31:50+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "tuupola/callable-handler", | ||||
|   | ||||
| @@ -1,20 +1,34 @@ | ||||
| <?php | ||||
|  | ||||
| # Either "production" or "dev" | ||||
| # Settings can also be overwritten in two ways | ||||
| # | ||||
| # First priority | ||||
| # A .txt file with the same name as the setting in /data/settingoverrides | ||||
| # the content of the file is used as the setting value | ||||
| # | ||||
| # Second priority | ||||
| # An environment variable with the same name as the setting and prefix "GROCY_" | ||||
| # so for example "GROCY_BASE_URL" | ||||
| # | ||||
| # Third priority | ||||
| # The settings defined here below | ||||
|  | ||||
|  | ||||
| # Either "production", "dev" or "prerelease" | ||||
| Setting('MODE', 'production'); | ||||
|  | ||||
| # Either "en" or "de" or the filename (without extension) of | ||||
| # one of the other available localization files in the "/localization" directory | ||||
| Setting('CULTURE', 'en'); | ||||
|  | ||||
| # To keep it simpel, grocy does not handle any currency conversions, | ||||
| # To keep it simple: grocy does not handle any currency conversions, | ||||
| # this here is used to format all money values, | ||||
| # so can be anything (e. g. "USD" OR "$", doesn't matter...) | ||||
| Setting('CURRENCY', '$'); | ||||
|  | ||||
| # The base url of your installation, | ||||
| # should be just "/" when running directly under the root of a (sub)domain | ||||
| # or for example "https:/example.com/grocy" when using a subdirectory | ||||
| # or for example "https://example.com/grocy" when using a subdirectory | ||||
| Setting('BASE_URL', '/'); | ||||
|  | ||||
| # The plugin to use for external barcode lookups, | ||||
| @@ -25,3 +39,49 @@ Setting('STOCK_BARCODE_LOOKUP_PLUGIN', 'DemoBarcodeLookupPlugin'); | ||||
| # If, however, your webserver does not support URL rewriting, | ||||
| # set this to true | ||||
| Setting('DISABLE_URL_REWRITING', false); | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| # Default user settings | ||||
| # These settings can be changed per user, here the defaults | ||||
| # are defined which are used when the user has not changed the setting so far | ||||
|  | ||||
| # Night mode related | ||||
| DefaultUserSetting('night_mode_enabled', false); // If night mode is enabled always | ||||
| DefaultUserSetting('auto_night_mode_enabled', false); // If night mode is enabled automatically when inside a given time range (see the two settings below) | ||||
| DefaultUserSetting('auto_night_mode_time_range_from', "20:00"); // Format HH:mm | ||||
| DefaultUserSetting('auto_night_mode_time_range_to', "07:00"); // Format HH:mm | ||||
| DefaultUserSetting('auto_night_mode_time_range_goes_over_midnight', true); // If the time range above goes over midnight | ||||
| DefaultUserSetting('currently_inside_night_mode_range', false); // If we're currently inside of night mode time range (this is not user configurable, but stored as a user setting because it's evaluated client side to be able to use the client time instead of the maybe different server time) | ||||
| DefaultUserSetting('product_presets_location_id', -1); // Default location id for new products (-1 means no location is preset) | ||||
| DefaultUserSetting('product_presets_product_group_id', -1); // Default product group id for new products (-1 means no product group is preset) | ||||
| DefaultUserSetting('product_presets_qu_id', -1); // Default quantity unit id for new products (-1 means no quantity unit is preset) | ||||
|  | ||||
| # If the page should be automatically reloaded when there was | ||||
| # an external change | ||||
| DefaultUserSetting('auto_reload_on_db_change', true); | ||||
|  | ||||
| # Show a clock in the header next to the logo or not | ||||
| DefaultUserSetting('show_clock_in_header', false); | ||||
|  | ||||
| # Shopping list to stock workflow: | ||||
| # Automatically do the booking using the last price and the amount | ||||
| # of the shopping list item, if the product has "Default best before days" set | ||||
| DefaultUserSetting('shopping_list_to_stock_workflow_auto_submit_when_prefilled', false); | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| # Feature flags | ||||
| # grocy was initially about "stock management for your household", many other things | ||||
| # came and still come by, because they are useful - here you can disable the parts | ||||
| # which you don't need to have a less cluttered UI | ||||
| # (set the setting to "false" to disable the corresponding part, which should be self explanatory) | ||||
| Setting('FEATURE_FLAG_SHOPPINGLIST', true); | ||||
| Setting('FEATURE_FLAG_RECIPES', true); | ||||
| Setting('FEATURE_FLAG_CHORES', true); | ||||
| Setting('FEATURE_FLAG_TASKS', true); | ||||
| Setting('FEATURE_FLAG_BATTERIES', true); | ||||
| Setting('FEATURE_FLAG_EQUIPMENT', true); | ||||
| Setting('FEATURE_FLAG_CALENDAR', true); | ||||
|   | ||||
| @@ -18,10 +18,14 @@ class BaseApiController extends BaseController | ||||
| 		return json_encode($data); | ||||
| 	} | ||||
|  | ||||
| 	protected function VoidApiActionResponse($response, $success = true, $status = 200, $errorMessage = '') | ||||
| 	protected function EmptyApiResponse($response, $status = 204) | ||||
| 	{ | ||||
| 		return $response->withStatus($status); | ||||
| 	} | ||||
|  | ||||
| 	protected function GenericErrorResponse($response, $errorMessage, $status = 400) | ||||
| 	{ | ||||
| 		return $response->withStatus($status)->withJson(array( | ||||
| 			'success' => $success, | ||||
| 			'error_message' => $errorMessage | ||||
| 		)); | ||||
| 	} | ||||
|   | ||||
| @@ -5,6 +5,7 @@ namespace Grocy\Controllers; | ||||
| use \Grocy\Services\DatabaseService; | ||||
| use \Grocy\Services\ApplicationService; | ||||
| use \Grocy\Services\LocalizationService; | ||||
| use \Grocy\Services\UsersService; | ||||
|  | ||||
| class BaseController | ||||
| { | ||||
| @@ -15,10 +16,21 @@ class BaseController | ||||
| 		$localizationService = new LocalizationService(GROCY_CULTURE); | ||||
| 		$this->LocalizationService = $localizationService; | ||||
|  | ||||
| 		$applicationService = new ApplicationService(); | ||||
| 		$versionInfo = $applicationService->GetInstalledVersion(); | ||||
| 		$container->view->set('version', $versionInfo->Version); | ||||
| 		$container->view->set('releaseDate', $versionInfo->ReleaseDate); | ||||
| 		if (GROCY_MODE === 'prerelease') | ||||
| 		{ | ||||
| 			$commitHash = trim(exec('git log --pretty="%h" -n1 HEAD')); | ||||
| 			$commitDate = trim(exec('git log --date=iso --pretty="%cd" -n1 HEAD')); | ||||
| 			 | ||||
| 			$container->view->set('version', "pre-release-$commitHash"); | ||||
| 			$container->view->set('releaseDate', \substr($commitDate, 0, 19)); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			$applicationService = new ApplicationService(); | ||||
| 			$versionInfo = $applicationService->GetInstalledVersion(); | ||||
| 			$container->view->set('version', $versionInfo->Version); | ||||
| 			$container->view->set('releaseDate', $versionInfo->ReleaseDate); | ||||
| 		} | ||||
|  | ||||
| 		$container->view->set('localizationStrings', $localizationService->GetCurrentCultureLocalizations()); | ||||
| 		$container->view->set('L', function($text, ...$placeholderValues) use($localizationService) | ||||
| @@ -30,6 +42,36 @@ class BaseController | ||||
| 			return $container->UrlManager->ConstructUrl($relativePath, $isResource); | ||||
| 		}); | ||||
|  | ||||
| 		$embedded = false; | ||||
| 		if (isset($container->request->getQueryParams()['embedded'])) | ||||
| 		{ | ||||
| 			$embedded = true; | ||||
| 		} | ||||
| 		$container->view->set('embedded', $embedded); | ||||
|  | ||||
| 		$constants = get_defined_constants(); | ||||
| 		foreach ($constants as $constant => $value) | ||||
| 		{ | ||||
| 			if (substr($constant, 0, 19) !== 'GROCY_FEATURE_FLAG_') | ||||
| 			{ | ||||
| 				unset($constants[$constant]); | ||||
| 			} | ||||
| 		} | ||||
| 		$container->view->set('featureFlags', $constants); | ||||
|  | ||||
| 		try | ||||
| 		{ | ||||
| 			$usersService = new UsersService(); | ||||
| 			if (defined('GROCY_USER_ID')) | ||||
| 			{ | ||||
| 				$container->view->set('userSettings', $usersService->GetUserSettings(GROCY_USER_ID)); | ||||
| 			} | ||||
| 		} | ||||
| 		catch (\Exception $ex) | ||||
| 		{ | ||||
| 			// Happens when database is not initialised or migrated... | ||||
| 		} | ||||
|  | ||||
| 		$this->AppContainer = $container; | ||||
| 	} | ||||
|  | ||||
|   | ||||
| @@ -16,20 +16,22 @@ class BatteriesApiController extends BaseApiController | ||||
|  | ||||
| 	public function TrackChargeCycle(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		$trackedTime = date('Y-m-d H:i:s'); | ||||
| 		if (isset($request->getQueryParams()['tracked_time']) && !empty($request->getQueryParams()['tracked_time']) && IsIsoDateTime($request->getQueryParams()['tracked_time'])) | ||||
| 		{ | ||||
| 			$trackedTime = $request->getQueryParams()['tracked_time']; | ||||
| 		} | ||||
| 		$requestBody = $request->getParsedBody(); | ||||
|  | ||||
| 		try | ||||
| 		{ | ||||
| 			$this->BatteriesService->TrackChargeCycle($args['batteryId'], $trackedTime); | ||||
| 			return $this->VoidApiActionResponse($response); | ||||
| 			$trackedTime = date('Y-m-d H:i:s'); | ||||
| 			if (array_key_exists('tracked_time', $requestBody) && IsIsoDateTime($requestBody['tracked_time'])) | ||||
| 			{ | ||||
| 				$trackedTime = $requestBody['tracked_time']; | ||||
| 			} | ||||
|  | ||||
| 			$chargeCycleId = $this->BatteriesService->TrackChargeCycle($args['batteryId'], $trackedTime); | ||||
| 			return $this->ApiResponse($this->Database->battery_charge_cycles($chargeCycleId)); | ||||
| 		} | ||||
| 		catch (\Exception $ex) | ||||
| 		{ | ||||
| 			return $this->VoidApiActionResponse($response, false, 400, $ex->getMessage()); | ||||
| 			return $this->GenericErrorResponse($response, $ex->getMessage()); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @@ -41,7 +43,7 @@ class BatteriesApiController extends BaseApiController | ||||
| 		} | ||||
| 		catch (\Exception $ex) | ||||
| 		{ | ||||
| 			return $this->VoidApiActionResponse($response, false, 400, $ex->getMessage()); | ||||
| 			return $this->GenericErrorResponse($response, $ex->getMessage()); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @@ -49,4 +51,17 @@ class BatteriesApiController extends BaseApiController | ||||
| 	{ | ||||
| 		return $this->ApiResponse($this->BatteriesService->GetCurrent()); | ||||
| 	} | ||||
|  | ||||
| 	public function UndoChargeCycle(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		try | ||||
| 		{ | ||||
| 			$this->ApiResponse($this->BatteriesService->UndoChargeCycle($args['chargeCycleId'])); | ||||
| 			return $this->EmptyApiResponse($response); | ||||
| 		} | ||||
| 		catch (\Exception $ex) | ||||
| 		{ | ||||
| 			return $this->GenericErrorResponse($response, $ex->getMessage()); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -53,4 +53,12 @@ class BatteriesController extends BaseController | ||||
| 			]); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	public function Journal(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		return $this->AppContainer->view->render($response, 'batteriesjournal', [ | ||||
| 			'chargeCycles' => $this->Database->battery_charge_cycles()->orderBy('tracked_time', 'DESC'), | ||||
| 			'batteries' => $this->Database->batteries()->orderBy('name') | ||||
| 		]); | ||||
| 	} | ||||
| } | ||||
|   | ||||
							
								
								
									
										62
									
								
								controllers/CalendarApiController.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								controllers/CalendarApiController.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,62 @@ | ||||
| <?php | ||||
|  | ||||
| namespace Grocy\Controllers; | ||||
|  | ||||
| use \Grocy\Services\CalendarService; | ||||
| use \Grocy\Services\ApiKeyService; | ||||
|  | ||||
| class CalendarApiController extends BaseApiController | ||||
| { | ||||
| 	public function __construct(\Slim\Container $container) | ||||
| 	{ | ||||
| 		parent::__construct($container); | ||||
| 		$this->CalendarService = new CalendarService(); | ||||
| 		$this->ApiKeyService = new ApiKeyService(); | ||||
| 	} | ||||
|  | ||||
| 	protected $CalendarService; | ||||
| 	protected $ApiKeyService; | ||||
|  | ||||
| 	public function Ical(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		try | ||||
| 		{ | ||||
| 			$vCalendar = new \Eluceo\iCal\Component\Calendar('grocy'); | ||||
|  | ||||
| 			$events = $this->CalendarService->GetEvents(); | ||||
| 			foreach($events as $event) | ||||
| 			{ | ||||
| 				$vEvent = new \Eluceo\iCal\Component\Event(); | ||||
| 				$vEvent->setDtStart(new \DateTime($event['start'])) | ||||
| 					->setDtEnd(new \DateTime($event['start'])) | ||||
| 					->setSummary($event['title']) | ||||
| 					->setNoTime($event['date_format'] === 'date') | ||||
| 					->setUseUtc(false); | ||||
| 				 | ||||
| 				$vCalendar->addComponent($vEvent); | ||||
| 			} | ||||
|  | ||||
| 			$response->write($vCalendar->render()); | ||||
| 			$response = $response->withHeader('Content-Type', 'text/calendar; charset=utf-8'); | ||||
| 			return $response->withHeader('Content-Disposition', 'attachment; filename="grocy.ics"'); | ||||
| 		} | ||||
| 		catch (\Exception $ex) | ||||
| 		{ | ||||
| 			return $this->GenericErrorResponse($response, $ex->getMessage()); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	public function IcalSharingLink(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		try | ||||
| 		{ | ||||
| 			return $this->ApiResponse(array( | ||||
| 				'url' => $this->AppContainer->UrlManager->ConstructUrl('/api/calendar/ical?secret=' . $this->ApiKeyService->GetOrCreateApiKey(ApiKeyService::API_KEY_TYPE_SPECIAL_PURPOSE_CALENDAR_ICAL)) | ||||
| 			)); | ||||
| 		} | ||||
| 		catch (\Exception $ex) | ||||
| 		{ | ||||
| 			return $this->GenericErrorResponse($response, $ex->getMessage()); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										23
									
								
								controllers/CalendarController.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								controllers/CalendarController.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | ||||
| <?php | ||||
|  | ||||
| namespace Grocy\Controllers; | ||||
|  | ||||
| use \Grocy\Services\CalendarService; | ||||
|  | ||||
| class CalendarController extends BaseController | ||||
| { | ||||
| 	public function __construct(\Slim\Container $container) | ||||
| 	{ | ||||
| 		parent::__construct($container); | ||||
| 		$this->CalendarService = new CalendarService(); | ||||
| 	} | ||||
|  | ||||
| 	protected $CalendarService; | ||||
|  | ||||
| 	public function Overview(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		return $this->AppContainer->view->render($response, 'calendar', [ | ||||
| 			'fullcalendarEventSources' => $this->CalendarService->GetEvents() | ||||
| 		]); | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										73
									
								
								controllers/ChoresApiController.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								controllers/ChoresApiController.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,73 @@ | ||||
| <?php | ||||
|  | ||||
| namespace Grocy\Controllers; | ||||
|  | ||||
| use \Grocy\Services\ChoresService; | ||||
|  | ||||
| class ChoresApiController extends BaseApiController | ||||
| { | ||||
| 	public function __construct(\Slim\Container $container) | ||||
| 	{ | ||||
| 		parent::__construct($container); | ||||
| 		$this->ChoresService = new ChoresService(); | ||||
| 	} | ||||
|  | ||||
| 	protected $ChoresService; | ||||
|  | ||||
| 	public function TrackChoreExecution(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		$requestBody = $request->getParsedBody(); | ||||
|  | ||||
| 		try | ||||
| 		{ | ||||
| 			$trackedTime = date('Y-m-d H:i:s'); | ||||
| 			if (array_key_exists('tracked_time', $requestBody) && IsIsoDateTime($requestBody['tracked_time'])) | ||||
| 			{ | ||||
| 				$trackedTime = $requestBody['tracked_time']; | ||||
| 			} | ||||
|  | ||||
| 			$doneBy = GROCY_USER_ID; | ||||
| 			if (array_key_exists('done_by', $requestBody) && !empty($requestBody['done_by'])) | ||||
| 			{ | ||||
| 				$doneBy = $requestBody['done_by']; | ||||
| 			} | ||||
|  | ||||
| 			$choreExecutionId = $this->ChoresService->TrackChore($args['choreId'], $trackedTime, $doneBy); | ||||
| 			return $this->ApiResponse($this->Database->chores_log($choreExecutionId)); | ||||
| 		} | ||||
| 		catch (\Exception $ex) | ||||
| 		{ | ||||
| 			return $this->GenericErrorResponse($response, $ex->getMessage()); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	public function ChoreDetails(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		try | ||||
| 		{ | ||||
| 			return $this->ApiResponse($this->ChoresService->GetChoreDetails($args['choreId'])); | ||||
| 		} | ||||
| 		catch (\Exception $ex) | ||||
| 		{ | ||||
| 			return $this->GenericErrorResponse($response, $ex->getMessage()); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	public function Current(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		return $this->ApiResponse($this->ChoresService->GetCurrent()); | ||||
| 	} | ||||
|  | ||||
| 	public function UndoChoreExecution(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		try | ||||
| 		{ | ||||
| 			$this->ApiResponse($this->ChoresService->UndoChoreExecution($args['executionId'])); | ||||
| 			return $this->EmptyApiResponse($response); | ||||
| 		} | ||||
| 		catch (\Exception $ex) | ||||
| 		{ | ||||
| 			return $this->GenericErrorResponse($response, $ex->getMessage()); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										68
									
								
								controllers/ChoresController.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								controllers/ChoresController.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,68 @@ | ||||
| <?php | ||||
|  | ||||
| namespace Grocy\Controllers; | ||||
|  | ||||
| use \Grocy\Services\ChoresService; | ||||
|  | ||||
| class ChoresController extends BaseController | ||||
| { | ||||
| 	public function __construct(\Slim\Container $container) | ||||
| 	{ | ||||
| 		parent::__construct($container); | ||||
| 		$this->ChoresService = new ChoresService(); | ||||
| 	} | ||||
|  | ||||
| 	protected $ChoresService; | ||||
|  | ||||
| 	public function Overview(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		return $this->AppContainer->view->render($response, 'choresoverview', [ | ||||
| 			'chores' => $this->Database->chores()->orderBy('name'), | ||||
| 			'currentChores' => $this->ChoresService->GetCurrent(), | ||||
| 			'nextXDays' => 5 | ||||
| 		]); | ||||
| 	} | ||||
|  | ||||
| 	public function TrackChoreExecution(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		return $this->AppContainer->view->render($response, 'choretracking', [ | ||||
| 			'chores' => $this->Database->chores()->orderBy('name'), | ||||
| 			'users' => $this->Database->users()->orderBy('username') | ||||
| 		]); | ||||
| 	} | ||||
|  | ||||
| 	public function ChoresList(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		return $this->AppContainer->view->render($response, 'chores', [ | ||||
| 			'chores' => $this->Database->chores()->orderBy('name') | ||||
| 		]); | ||||
| 	} | ||||
|  | ||||
| 	public function Journal(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		return $this->AppContainer->view->render($response, 'choresjournal', [ | ||||
| 			'choresLog' => $this->Database->chores_log()->orderBy('tracked_time', 'DESC'), | ||||
| 			'chores' => $this->Database->chores()->orderBy('name'), | ||||
| 			'users' => $this->Database->users()->orderBy('username') | ||||
| 		]); | ||||
| 	} | ||||
|  | ||||
| 	public function ChoreEditForm(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		if ($args['choreId'] == 'new') | ||||
| 		{ | ||||
| 			return $this->AppContainer->view->render($response, 'choreform', [ | ||||
| 				'periodTypes' => GetClassConstants('\Grocy\Services\ChoresService'), | ||||
| 				'mode' => 'create' | ||||
| 			]); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			return $this->AppContainer->view->render($response, 'choreform', [ | ||||
| 				'chore' =>  $this->Database->chores($args['choreId']), | ||||
| 				'periodTypes' => GetClassConstants('\Grocy\Services\ChoresService'), | ||||
| 				'mode' => 'edit' | ||||
| 			]); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										31
									
								
								controllers/EquipmentController.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								controllers/EquipmentController.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,31 @@ | ||||
| <?php | ||||
|  | ||||
| namespace Grocy\Controllers; | ||||
|  | ||||
|  | ||||
| class EquipmentController extends BaseController | ||||
| { | ||||
| 	public function Overview(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		return $this->AppContainer->view->render($response, 'equipment', [ | ||||
| 			'equipment' => $this->Database->equipment()->orderBy('name') | ||||
| 		]); | ||||
| 	} | ||||
|  | ||||
| 	public function EditForm(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		if ($args['equipmentId'] == 'new') | ||||
| 		{ | ||||
| 			return $this->AppContainer->view->render($response, 'equipmentform', [ | ||||
| 				'mode' => 'create' | ||||
| 			]); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			return $this->AppContainer->view->render($response, 'equipmentform', [ | ||||
| 				'equipment' =>  $this->Database->equipment($args['equipmentId']), | ||||
| 				'mode' => 'edit' | ||||
| 			]); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										99
									
								
								controllers/FilesApiController.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								controllers/FilesApiController.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,99 @@ | ||||
| <?php | ||||
|  | ||||
| namespace Grocy\Controllers; | ||||
|  | ||||
| use \Grocy\Services\FilesService; | ||||
|  | ||||
| class FilesApiController extends BaseApiController | ||||
| { | ||||
| 	public function __construct(\Slim\Container $container) | ||||
| 	{ | ||||
| 		parent::__construct($container); | ||||
| 		$this->FilesService = new FilesService(); | ||||
| 	} | ||||
|  | ||||
| 	protected $FilesService; | ||||
|  | ||||
| 	public function UploadFile(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		try | ||||
| 		{ | ||||
| 			if (IsValidFileName(base64_decode($args['fileName']))) | ||||
| 			{ | ||||
| 				$fileName = base64_decode($args['fileName']); | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				throw new \Exception('Invalid filename'); | ||||
| 			} | ||||
|  | ||||
| 			$data = $request->getBody()->getContents(); | ||||
| 			file_put_contents($this->FilesService->GetFilePath($args['group'], $fileName), $data); | ||||
|  | ||||
| 			return $this->EmptyApiResponse($response); | ||||
| 		} | ||||
| 		catch (\Exception $ex) | ||||
| 		{ | ||||
| 			return $this->GenericErrorResponse($response, $ex->getMessage()); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	public function ServeFile(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		try | ||||
| 		{ | ||||
| 			if (IsValidFileName(base64_decode($args['fileName']))) | ||||
| 			{ | ||||
| 				$fileName = base64_decode($args['fileName']); | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				throw new \Exception('Invalid filename'); | ||||
| 			} | ||||
|  | ||||
| 			$filePath = $this->FilesService->GetFilePath($args['group'], $fileName); | ||||
|  | ||||
| 			if (file_exists($filePath)) | ||||
| 			{ | ||||
| 				$response->write(file_get_contents($filePath)); | ||||
| 				$response = $response->withHeader('Content-Type', mime_content_type($filePath)); | ||||
| 				return $response->withHeader('Content-Disposition', 'inline; filename="' . $fileName . '"'); | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				return $this->GenericErrorResponse($response, 'File not found', 404); | ||||
| 			} | ||||
| 		} | ||||
| 		catch (\Exception $ex) | ||||
| 		{ | ||||
| 			return $this->GenericErrorResponse($response, $ex->getMessage()); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	public function DeleteFile(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		try | ||||
| 		{ | ||||
| 			if (IsValidFileName(base64_decode($args['fileName']))) | ||||
| 			{ | ||||
| 				$fileName = base64_decode($args['fileName']); | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				throw new \Exception('Invalid filename'); | ||||
| 			} | ||||
|  | ||||
| 			$filePath = $this->FilesService->GetFilePath($args['group'], $fileName); | ||||
| 			if (file_exists($filePath)) | ||||
| 			{ | ||||
| 				unlink($filePath); | ||||
| 			} | ||||
|  | ||||
| 			return $this->EmptyApiResponse($response); | ||||
| 		} | ||||
| 		catch (\Exception $ex) | ||||
| 		{ | ||||
| 			return $this->GenericErrorResponse($response, $ex->getMessage()); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| @@ -6,25 +6,25 @@ class GenericEntityApiController extends BaseApiController | ||||
| { | ||||
| 	public function GetObjects(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		if ($this->IsValidEntity($args['entity'])) | ||||
| 		if ($this->IsValidEntity($args['entity']) && !$this->IsEntityWithPreventedListing($args['entity'])) | ||||
| 		{ | ||||
| 			return $this->ApiResponse($this->Database->{$args['entity']}()); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			return $this->VoidApiActionResponse($response, false, 400, 'Entity does not exist or is not exposed'); | ||||
| 			return $this->GenericErrorResponse($response, 'Entity does not exist or is not exposed'); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	public function GetObject(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		if ($this->IsValidEntity($args['entity'])) | ||||
| 		if ($this->IsValidEntity($args['entity']) && !$this->IsEntityWithPreventedListing($args['entity'])) | ||||
| 		{ | ||||
| 			return $this->ApiResponse($this->Database->{$args['entity']}($args['objectId'])); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			return $this->VoidApiActionResponse($response, false, 400, 'Entity does not exist or is not exposed'); | ||||
| 			return $this->GenericErrorResponse($response, 'Entity does not exist or is not exposed'); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @@ -32,14 +32,28 @@ class GenericEntityApiController extends BaseApiController | ||||
| 	{ | ||||
| 		if ($this->IsValidEntity($args['entity'])) | ||||
| 		{ | ||||
| 			$newRow = $this->Database->{$args['entity']}()->createRow($request->getParsedBody()); | ||||
| 			$newRow->save(); | ||||
| 			$success = $newRow->isClean(); | ||||
| 			return $this->ApiResponse(array('success' => $success)); | ||||
| 			$requestBody = $request->getParsedBody(); | ||||
|  | ||||
| 			try | ||||
| 			{ | ||||
| 				if ($requestBody === null) | ||||
| 				{ | ||||
| 					throw new \Exception('Request body could not be parsed (probably invalid JSON format or missing/wrong Content-Type header)'); | ||||
| 				} | ||||
|  | ||||
| 				$newRow = $this->Database->{$args['entity']}()->createRow($requestBody); | ||||
| 				$newRow->save(); | ||||
| 				$success = $newRow->isClean(); | ||||
| 				return $this->EmptyApiResponse($response); | ||||
| 			} | ||||
| 			catch (\Exception $ex) | ||||
| 			{ | ||||
| 				return $this->GenericErrorResponse($response, $ex->getMessage()); | ||||
| 			} | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			return $this->VoidApiActionResponse($response, false, 400, 'Entity does not exist or is not exposed'); | ||||
| 			return $this->GenericErrorResponse($response, 'Entity does not exist or is not exposed'); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @@ -47,14 +61,28 @@ class GenericEntityApiController extends BaseApiController | ||||
| 	{ | ||||
| 		if ($this->IsValidEntity($args['entity'])) | ||||
| 		{ | ||||
| 			$row = $this->Database->{$args['entity']}($args['objectId']); | ||||
| 			$row->update($request->getParsedBody()); | ||||
| 			$success = $row->isClean(); | ||||
| 			return $this->ApiResponse(array('success' => $success)); | ||||
| 			$requestBody = $request->getParsedBody(); | ||||
|  | ||||
| 			try | ||||
| 			{ | ||||
| 				if ($requestBody === null) | ||||
| 				{ | ||||
| 					throw new \Exception('Request body could not be parsed (probably invalid JSON format or missing/wrong Content-Type header)'); | ||||
| 				} | ||||
|  | ||||
| 				$row = $this->Database->{$args['entity']}($args['objectId']); | ||||
| 				$row->update($requestBody); | ||||
| 				$success = $row->isClean(); | ||||
| 				return $this->EmptyApiResponse($response); | ||||
| 			} | ||||
| 			catch (\Exception $ex) | ||||
| 			{ | ||||
| 				return $this->GenericErrorResponse($response, $ex->getMessage()); | ||||
| 			} | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			return $this->VoidApiActionResponse($response, false, 400, 'Entity does not exist or is not exposed'); | ||||
| 			return $this->GenericErrorResponse($response, 'Entity does not exist or is not exposed'); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @@ -65,11 +93,11 @@ class GenericEntityApiController extends BaseApiController | ||||
| 			$row = $this->Database->{$args['entity']}($args['objectId']); | ||||
| 			$row->delete(); | ||||
| 			$success = $row->isClean(); | ||||
| 			return $this->ApiResponse(array('success' => $success)); | ||||
| 			return $this->EmptyApiResponse($response); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			return $this->VoidApiActionResponse($response, false, 400, 'Entity does not exist or is not exposed'); | ||||
| 			return $this->GenericErrorResponse($response, $ex->getMessage()); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @@ -77,4 +105,9 @@ class GenericEntityApiController extends BaseApiController | ||||
| 	{ | ||||
| 		return in_array($entity, $this->OpenApiSpec->components->internalSchemas->ExposedEntity->enum); | ||||
| 	} | ||||
|  | ||||
| 	private function IsEntityWithPreventedListing($entity) | ||||
| 	{ | ||||
| 		return in_array($entity, $this->OpenApiSpec->components->internalSchemas->ExposedEntitiesPreventListing->enum); | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -1,58 +0,0 @@ | ||||
| <?php | ||||
|  | ||||
| namespace Grocy\Controllers; | ||||
|  | ||||
| use \Grocy\Services\HabitsService; | ||||
|  | ||||
| class HabitsApiController extends BaseApiController | ||||
| { | ||||
| 	public function __construct(\Slim\Container $container) | ||||
| 	{ | ||||
| 		parent::__construct($container); | ||||
| 		$this->HabitsService = new HabitsService(); | ||||
| 	} | ||||
|  | ||||
| 	protected $HabitsService; | ||||
|  | ||||
| 	public function TrackHabitExecution(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		$trackedTime = date('Y-m-d H:i:s'); | ||||
| 		if (isset($request->getQueryParams()['tracked_time']) && !empty($request->getQueryParams()['tracked_time']) && IsIsoDateTime($request->getQueryParams()['tracked_time'])) | ||||
| 		{ | ||||
| 			$trackedTime = $request->getQueryParams()['tracked_time']; | ||||
| 		} | ||||
|  | ||||
| 		$doneBy = GROCY_USER_ID; | ||||
| 		if (isset($request->getQueryParams()['done_by']) && !empty($request->getQueryParams()['done_by'])) | ||||
| 		{ | ||||
| 			$doneBy = $request->getQueryParams()['done_by']; | ||||
| 		} | ||||
|  | ||||
| 		try | ||||
| 		{ | ||||
| 			$this->HabitsService->TrackHabit($args['habitId'], $trackedTime, $doneBy); | ||||
| 			return $this->VoidApiActionResponse($response); | ||||
| 		} | ||||
| 		catch (\Exception $ex) | ||||
| 		{ | ||||
| 			return $this->VoidApiActionResponse($response, false, 400, $ex->getMessage()); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	public function HabitDetails(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		try | ||||
| 		{ | ||||
| 			return $this->ApiResponse($this->HabitsService->GetHabitDetails($args['habitId'])); | ||||
| 		} | ||||
| 		catch (\Exception $ex) | ||||
| 		{ | ||||
| 			return $this->VoidApiActionResponse($response, false, 400, $ex->getMessage()); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	public function Current(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		return $this->ApiResponse($this->HabitsService->GetCurrent()); | ||||
| 	} | ||||
| } | ||||
| @@ -1,68 +0,0 @@ | ||||
| <?php | ||||
|  | ||||
| namespace Grocy\Controllers; | ||||
|  | ||||
| use \Grocy\Services\HabitsService; | ||||
|  | ||||
| class HabitsController extends BaseController | ||||
| { | ||||
| 	public function __construct(\Slim\Container $container) | ||||
| 	{ | ||||
| 		parent::__construct($container); | ||||
| 		$this->HabitsService = new HabitsService(); | ||||
| 	} | ||||
|  | ||||
| 	protected $HabitsService; | ||||
|  | ||||
| 	public function Overview(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		return $this->AppContainer->view->render($response, 'habitsoverview', [ | ||||
| 			'habits' => $this->Database->habits()->orderBy('name'), | ||||
| 			'currentHabits' => $this->HabitsService->GetCurrent(), | ||||
| 			'nextXDays' => 5 | ||||
| 		]); | ||||
| 	} | ||||
|  | ||||
| 	public function TrackHabitExecution(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		return $this->AppContainer->view->render($response, 'habittracking', [ | ||||
| 			'habits' => $this->Database->habits()->orderBy('name'), | ||||
| 			'users' => $this->Database->users()->orderBy('username') | ||||
| 		]); | ||||
| 	} | ||||
|  | ||||
| 	public function HabitsList(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		return $this->AppContainer->view->render($response, 'habits', [ | ||||
| 			'habits' => $this->Database->habits()->orderBy('name') | ||||
| 		]); | ||||
| 	} | ||||
|  | ||||
| 	public function Analysis(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		return $this->AppContainer->view->render($response, 'habitsanalysis', [ | ||||
| 			'habitsLog' => $this->Database->habits_log()->orderBy('tracked_time', 'DESC'), | ||||
| 			'habits' => $this->Database->habits()->orderBy('name'), | ||||
| 			'users' => $this->Database->users()->orderBy('username') | ||||
| 		]); | ||||
| 	} | ||||
|  | ||||
| 	public function HabitEditForm(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		if ($args['habitId'] == 'new') | ||||
| 		{ | ||||
| 			return $this->AppContainer->view->render($response, 'habitform', [ | ||||
| 				'periodTypes' => GetClassConstants('\Grocy\Services\HabitsService'), | ||||
| 				'mode' => 'create' | ||||
| 			]); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			return $this->AppContainer->view->render($response, 'habitform', [ | ||||
| 				'habit' =>  $this->Database->habits($args['habitId']), | ||||
| 				'periodTypes' => GetClassConstants('\Grocy\Services\HabitsService'), | ||||
| 				'mode' => 'edit' | ||||
| 			]); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| @@ -25,11 +25,12 @@ class LoginController extends BaseController | ||||
| 		{ | ||||
| 			$user = $this->Database->users()->where('username', $postParams['username'])->fetch(); | ||||
| 			$inputPassword = $postParams['password']; | ||||
| 			$stayLoggedInPermanently = $postParams['stay_logged_in'] == 'on'; | ||||
|  | ||||
| 			if ($user !== null && password_verify($inputPassword, $user->password)) | ||||
| 			{ | ||||
| 				$sessionKey = $this->SessionService->CreateSession($user->id); | ||||
| 				setcookie($this->SessionCookieName, $sessionKey, time() + 31536000); // Cookie expires in 1 year, but session validity is up to SessionService | ||||
| 				$sessionKey = $this->SessionService->CreateSession($user->id, $stayLoggedInPermanently); | ||||
| 				setcookie($this->SessionCookieName, $sessionKey, intval(time() + 31220640000)); // Cookie expires in 999 years, but session validity is up to SessionService | ||||
|  | ||||
| 				if (password_needs_rehash($user->password, PASSWORD_DEFAULT)) | ||||
| 				{ | ||||
| @@ -62,21 +63,6 @@ class LoginController extends BaseController | ||||
| 		return $response->withRedirect($this->AppContainer->UrlManager->ConstructUrl('/')); | ||||
| 	} | ||||
|  | ||||
| 	public function Root(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		// Schema migration is done here | ||||
| 		$databaseMigrationService = new DatabaseMigrationService(); | ||||
| 		$databaseMigrationService->MigrateDatabase(); | ||||
|  | ||||
| 		if (GROCY_IS_DEMO_INSTALL) | ||||
| 		{ | ||||
| 			$demoDataGeneratorService = new DemoDataGeneratorService(); | ||||
| 			$demoDataGeneratorService->PopulateDemoData(); | ||||
| 		} | ||||
|  | ||||
| 		return $response->withRedirect($this->AppContainer->UrlManager->ConstructUrl('/stockoverview')); | ||||
| 	} | ||||
|  | ||||
| 	public function GetSessionCookieName() | ||||
| 	{ | ||||
| 		return $this->SessionCookieName; | ||||
|   | ||||
| @@ -16,7 +16,28 @@ class RecipesApiController extends BaseApiController | ||||
|  | ||||
| 	public function AddNotFulfilledProductsToShoppingList(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		$this->RecipesService->AddNotFulfilledProductsToShoppingList($args['recipeId']); | ||||
| 		return $this->VoidApiActionResponse($response); | ||||
| 		$requestBody = $request->getParsedBody(); | ||||
| 		$excludedProductIds = null; | ||||
|  | ||||
| 		if ($requestBody !== null && array_key_exists('excludedProductIds', $requestBody)) | ||||
| 		{ | ||||
| 			$excludedProductIds = $requestBody['excludedProductIds']; | ||||
| 		} | ||||
| 		 | ||||
| 		$this->RecipesService->AddNotFulfilledProductsToShoppingList($args['recipeId'], $excludedProductIds); | ||||
| 		return $this->EmptyApiResponse($response); | ||||
| 	} | ||||
|  | ||||
| 	public function ConsumeRecipe(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		try | ||||
| 		{ | ||||
| 			$this->RecipesService->ConsumeRecipe($args['recipeId']); | ||||
| 			return $this->EmptyApiResponse($response); | ||||
| 		} | ||||
| 		catch (\Exception $ex) | ||||
| 		{ | ||||
| 			return $this->GenericErrorResponse($response, $ex->getMessage()); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -17,32 +17,47 @@ class RecipesController extends BaseController | ||||
| 	public function Overview(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		$recipes = $this->Database->recipes()->orderBy('name'); | ||||
| 		$recipesResolved = $this->RecipesService->GetRecipesResolved(); | ||||
|  | ||||
| 		$selectedRecipe = null; | ||||
| 		$selectedRecipePositions = null; | ||||
| 		$selectedRecipePositionsResolved = null; | ||||
| 		if (isset($request->getQueryParams()['recipe'])) | ||||
| 		{ | ||||
| 			$selectedRecipe = $this->Database->recipes($request->getQueryParams()['recipe']); | ||||
| 			$selectedRecipePositions = $this->Database->recipes_pos()->where('recipe_id', $request->getQueryParams()['recipe']); | ||||
| 			$selectedRecipePositionsResolved = $this->Database->recipes_pos_resolved()->where('recipe_id', $request->getQueryParams()['recipe'])->orderBy('ingredient_group'); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			foreach ($recipes as $recipe) | ||||
| 			{ | ||||
| 				$selectedRecipe = $recipe; | ||||
| 				$selectedRecipePositions = $this->Database->recipes_pos()->where('recipe_id', $recipe->id); | ||||
| 				$selectedRecipePositionsResolved = $this->Database->recipes_pos_resolved()->where('recipe_id', $recipe->id)->orderBy('ingredient_group'); | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		$selectedRecipeSubRecipes = $this->Database->recipes()->where('id IN (SELECT includes_recipe_id FROM recipes_nestings_resolved WHERE recipe_id = :1 AND includes_recipe_id != :1)', $selectedRecipe->id)->orderBy('name')->fetchAll(); | ||||
| 		$selectedRecipeSubRecipesPositions = $this->Database->recipes_pos_resolved()->where('recipe_id = :1', $selectedRecipe->id)->orderBy('ingredient_group')->fetchAll(); | ||||
|  | ||||
| 		$includedRecipeIdsAbsolute = array(); | ||||
| 		$includedRecipeIdsAbsolute[] = $selectedRecipe->id; | ||||
| 		foreach($selectedRecipeSubRecipes as $subRecipe) | ||||
| 		{ | ||||
| 			$includedRecipeIdsAbsolute[] = $subRecipe->id; | ||||
| 		} | ||||
|  | ||||
| 		return $this->AppContainer->view->render($response, 'recipes', [ | ||||
| 			'recipes' => $recipes, | ||||
| 			'recipesFulfillment' => $this->RecipesService->GetRecipesFulfillment(), | ||||
| 			'recipesSumFulfillment' => $this->RecipesService->GetRecipesSumFulfillment(), | ||||
| 			'recipesResolved' => $recipesResolved, | ||||
| 			'recipePositionsResolved' => $this->Database->recipes_pos_resolved(), | ||||
| 			'selectedRecipe' => $selectedRecipe, | ||||
| 			'selectedRecipePositions' => $selectedRecipePositions, | ||||
| 			'selectedRecipePositionsResolved' => $selectedRecipePositionsResolved, | ||||
| 			'products' => $this->Database->products(), | ||||
| 			'quantityunits' => $this->Database->quantity_units() | ||||
| 			'quantityunits' => $this->Database->quantity_units(), | ||||
| 			'selectedRecipeSubRecipes' => $selectedRecipeSubRecipes, | ||||
| 			'selectedRecipeSubRecipesPositions' => $selectedRecipeSubRecipesPositions, | ||||
| 			'includedRecipeIdsAbsolute' => $includedRecipeIdsAbsolute, | ||||
| 			'selectedRecipeTotalCosts' => FindObjectInArrayByPropertyValue($recipesResolved, 'recipe_id', $selectedRecipe->id)->costs | ||||
| 		]); | ||||
| 	} | ||||
|  | ||||
| @@ -65,8 +80,10 @@ class RecipesController extends BaseController | ||||
| 			'mode' => 'edit', | ||||
| 			'products' => $this->Database->products(), | ||||
| 			'quantityunits' => $this->Database->quantity_units(), | ||||
| 			'recipesFulfillment' => $this->RecipesService->GetRecipesFulfillment(), | ||||
| 			'recipesSumFulfillment' => $this->RecipesService->GetRecipesSumFulfillment() | ||||
| 			'recipePositionsResolved' => $this->RecipesService->GetRecipesPosResolved(), | ||||
| 			'recipesResolved' => $this->RecipesService->GetRecipesResolved(), | ||||
| 			'recipes' =>  $this->Database->recipes()->orderBy('name'), | ||||
| 			'recipeNestings' =>  $this->Database->recipes_nestings()->where('recipe_id', $recipeId) | ||||
| 		]); | ||||
| 	} | ||||
|  | ||||
| @@ -76,8 +93,9 @@ class RecipesController extends BaseController | ||||
| 		{ | ||||
| 			return $this->AppContainer->view->render($response, 'recipeposform', [ | ||||
| 				'mode' => 'create', | ||||
| 				'recipe' =>  $this->Database->recipes($args['recipeId']), | ||||
| 				'products' =>  $this->Database->products()->orderBy('name') | ||||
| 				'recipe' => $this->Database->recipes($args['recipeId']), | ||||
| 				'products' => $this->Database->products()->orderBy('name'), | ||||
| 				'quantityUnits' => $this->Database->quantity_units()->orderBy('name') | ||||
| 			]); | ||||
| 		} | ||||
| 		else | ||||
| @@ -85,8 +103,9 @@ class RecipesController extends BaseController | ||||
| 			return $this->AppContainer->view->render($response, 'recipeposform', [ | ||||
| 				'mode' => 'edit', | ||||
| 				'recipe' =>  $this->Database->recipes($args['recipeId']), | ||||
| 				'recipePos' =>  $this->Database->recipes_pos($args['recipePosId']), | ||||
| 				'products' =>  $this->Database->products()->orderBy('name') | ||||
| 				'recipePos' => $this->Database->recipes_pos($args['recipePosId']), | ||||
| 				'products' => $this->Database->products()->orderBy('name'), | ||||
| 				'quantityUnits' => $this->Database->quantity_units()->orderBy('name') | ||||
| 			]); | ||||
| 		} | ||||
| 	} | ||||
|   | ||||
| @@ -22,7 +22,7 @@ class StockApiController extends BaseApiController | ||||
| 		} | ||||
| 		catch (\Exception $ex) | ||||
| 		{ | ||||
| 			return $this->VoidApiActionResponse($response, false, 400, $ex->getMessage()); | ||||
| 			return $this->GenericErrorResponse($response, $ex->getMessage()); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @@ -34,82 +34,167 @@ class StockApiController extends BaseApiController | ||||
| 		} | ||||
| 		catch (\Exception $ex) | ||||
| 		{ | ||||
| 			return $this->VoidApiActionResponse($response, false, 400, $ex->getMessage()); | ||||
| 			return $this->GenericErrorResponse($response, $ex->getMessage()); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	public function AddProduct(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		$bestBeforeDate = date('Y-m-d'); | ||||
| 		if (isset($request->getQueryParams()['bestbeforedate']) && !empty($request->getQueryParams()['bestbeforedate']) && IsIsoDate($request->getQueryParams()['bestbeforedate'])) | ||||
| 		{ | ||||
| 			$bestBeforeDate = $request->getQueryParams()['bestbeforedate']; | ||||
| 		} | ||||
|  | ||||
| 		$price = null; | ||||
| 		if (isset($request->getQueryParams()['price']) && !empty($request->getQueryParams()['price']) && is_numeric($request->getQueryParams()['price'])) | ||||
| 		{ | ||||
| 			$price = $request->getQueryParams()['price']; | ||||
| 		} | ||||
|  | ||||
| 		$transactionType = StockService::TRANSACTION_TYPE_PURCHASE; | ||||
| 		if (isset($request->getQueryParams()['transactiontype']) && !empty($request->getQueryParams()['transactiontype'])) | ||||
| 		{ | ||||
| 			$transactionType = $request->getQueryParams()['transactiontype']; | ||||
| 		} | ||||
| 		$requestBody = $request->getParsedBody(); | ||||
|  | ||||
| 		try | ||||
| 		{ | ||||
| 			$this->StockService->AddProduct($args['productId'], $args['amount'], $bestBeforeDate, $transactionType, date('Y-m-d'), $price); | ||||
| 			return $this->VoidApiActionResponse($response); | ||||
| 			if ($requestBody === null) | ||||
| 			{ | ||||
| 				throw new \Exception('Request body could not be parsed (probably invalid JSON format or missing/wrong Content-Type header)'); | ||||
| 			} | ||||
|  | ||||
| 			if (!array_key_exists('amount', $requestBody)) | ||||
| 			{ | ||||
| 				throw new \Exception('An amount is required'); | ||||
| 			} | ||||
|  | ||||
| 			$bestBeforeDate = date('Y-m-d'); | ||||
| 			if (array_key_exists('best_before_date', $requestBody) && IsIsoDate($requestBody['best_before_date'])) | ||||
| 			{ | ||||
| 				$bestBeforeDate = $requestBody['best_before_date']; | ||||
| 			} | ||||
|  | ||||
| 			$price = null; | ||||
| 			if (array_key_exists('price', $requestBody) && is_numeric($requestBody['price'])) | ||||
| 			{ | ||||
| 				$price = $requestBody['price']; | ||||
| 			} | ||||
|  | ||||
| 			$locationId = null; | ||||
| 			if (array_key_exists('location_id', $requestBody) && is_numeric($requestBody['location_id'])) | ||||
| 			{ | ||||
| 				$locationId = $requestBody['location_id']; | ||||
| 			} | ||||
|  | ||||
| 			$transactionType = StockService::TRANSACTION_TYPE_PURCHASE; | ||||
| 			if (array_key_exists('transaction_type', $requestBody)  && !empty($requestBody['transactiontype'])) | ||||
| 			{ | ||||
| 				$transactionType = $requestBody['transactiontype']; | ||||
| 			} | ||||
|  | ||||
| 			$bookingId = $this->StockService->AddProduct($args['productId'], $requestBody['amount'], $bestBeforeDate, $transactionType, date('Y-m-d'), $price, $locationId); | ||||
| 			return $this->ApiResponse($this->Database->stock_log($bookingId)); | ||||
| 		} | ||||
| 		catch (\Exception $ex) | ||||
| 		{ | ||||
| 			return $this->VoidApiActionResponse($response, false, 400, $ex->getMessage()); | ||||
| 			return $this->GenericErrorResponse($response, $ex->getMessage()); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	public function ConsumeProduct(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		$spoiled = false; | ||||
| 		if (isset($request->getQueryParams()['spoiled']) && !empty($request->getQueryParams()['spoiled']) && $request->getQueryParams()['spoiled'] == '1') | ||||
| 		{ | ||||
| 			$spoiled = true; | ||||
| 		} | ||||
|  | ||||
| 		$transactionType = StockService::TRANSACTION_TYPE_CONSUME; | ||||
| 		if (isset($request->getQueryParams()['transactiontype']) && !empty($request->getQueryParams()['transactiontype'])) | ||||
| 		{ | ||||
| 			$transactionType = $request->getQueryParams()['transactiontype']; | ||||
| 		} | ||||
| 		$requestBody = $request->getParsedBody(); | ||||
|  | ||||
| 		try | ||||
| 		{ | ||||
| 			$this->StockService->ConsumeProduct($args['productId'], $args['amount'], $spoiled, $transactionType); | ||||
| 			return $this->VoidApiActionResponse($response); | ||||
| 			if ($requestBody === null) | ||||
| 			{ | ||||
| 				throw new \Exception('Request body could not be parsed (probably invalid JSON format or missing/wrong Content-Type header)'); | ||||
| 			} | ||||
|  | ||||
| 			if (!array_key_exists('amount', $requestBody)) | ||||
| 			{ | ||||
| 				throw new \Exception('An amount is required'); | ||||
| 			} | ||||
|  | ||||
| 			$spoiled = false; | ||||
| 			if (array_key_exists('spoiled', $requestBody)) | ||||
| 			{ | ||||
| 				$spoiled = $requestBody['spoiled']; | ||||
| 			} | ||||
|  | ||||
| 			$transactionType = StockService::TRANSACTION_TYPE_CONSUME; | ||||
| 			if (array_key_exists('transaction_type', $requestBody)  && !empty($requestBody['transactiontype'])) | ||||
| 			{ | ||||
| 				$transactionType = $requestBody['transactiontype']; | ||||
| 			} | ||||
|  | ||||
| 			$specificStockEntryId = 'default'; | ||||
| 			if (array_key_exists('stock_entry_id', $requestBody) && !empty($requestBody['stock_entry_id'])) | ||||
| 			{ | ||||
| 				$specificStockEntryId = $requestBody['stock_entry_id']; | ||||
| 			} | ||||
|  | ||||
| 			$recipeId = null; | ||||
| 			if (array_key_exists('recipe_id', $requestBody) && is_numeric($requestBody['recipe_id'])) | ||||
| 			{ | ||||
| 				$recipeId = $requestBody['recipe_id']; | ||||
| 			} | ||||
|  | ||||
| 			$bookingId = $this->StockService->ConsumeProduct($args['productId'], $requestBody['amount'], $spoiled, $transactionType, $specificStockEntryId, $recipeId); | ||||
| 			return $this->ApiResponse($this->Database->stock_log($bookingId)); | ||||
| 		} | ||||
| 		catch (\Exception $ex) | ||||
| 		{ | ||||
| 			return $this->VoidApiActionResponse($response, false, 400, $ex->getMessage()); | ||||
| 			return $this->GenericErrorResponse($response, $ex->getMessage()); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	public function InventoryProduct(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		$bestBeforeDate = date('Y-m-d'); | ||||
| 		if (isset($request->getQueryParams()['bestbeforedate']) && !empty($request->getQueryParams()['bestbeforedate']) && IsIsoDate($request->getQueryParams()['bestbeforedate'])) | ||||
| 		{ | ||||
| 			$bestBeforeDate = $request->getQueryParams()['bestbeforedate']; | ||||
| 		} | ||||
| 		$requestBody = $request->getParsedBody(); | ||||
|  | ||||
| 		try | ||||
| 		{ | ||||
| 			$this->StockService->InventoryProduct($args['productId'], $args['newAmount'], $bestBeforeDate); | ||||
| 			return $this->VoidApiActionResponse($response); | ||||
| 			if ($requestBody === null) | ||||
| 			{ | ||||
| 				throw new \Exception('Request body could not be parsed (probably invalid JSON format or missing/wrong Content-Type header)'); | ||||
| 			} | ||||
|  | ||||
| 			if (!array_key_exists('new_amount', $requestBody)) | ||||
| 			{ | ||||
| 				throw new \Exception('An new amount is required'); | ||||
| 			} | ||||
|  | ||||
| 			$bestBeforeDate = date('Y-m-d'); | ||||
| 			if (array_key_exists('best_before_date', $requestBody) && IsIsoDate($requestBody['best_before_date'])) | ||||
| 			{ | ||||
| 				$bestBeforeDate = $requestBody['best_before_date']; | ||||
| 			} | ||||
|  | ||||
| 			$bookingId = $this->StockService->InventoryProduct($args['productId'], $requestBody['new_amount'], $bestBeforeDate); | ||||
| 			return $this->ApiResponse($this->Database->stock_log($bookingId)); | ||||
| 		} | ||||
| 		catch (\Exception $ex) | ||||
| 		{ | ||||
| 			return $this->VoidApiActionResponse($response, false, 400, $ex->getMessage()); | ||||
| 			return $this->GenericErrorResponse($response, $ex->getMessage()); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	public function OpenProduct(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		$requestBody = $request->getParsedBody(); | ||||
|  | ||||
| 		try | ||||
| 		{ | ||||
| 			if ($requestBody === null) | ||||
| 			{ | ||||
| 				throw new \Exception('Request body could not be parsed (probably invalid JSON format or missing/wrong Content-Type header)'); | ||||
| 			} | ||||
|  | ||||
| 			if (!array_key_exists('amount', $requestBody)) | ||||
| 			{ | ||||
| 				throw new \Exception('An amount is required'); | ||||
| 			} | ||||
|  | ||||
| 			$specificStockEntryId = 'default'; | ||||
| 			if (array_key_exists('stock_entry_id', $requestBody) && !empty($requestBody['stock_entry_id'])) | ||||
| 			{ | ||||
| 				$specificStockEntryId = $requestBody['stock_entry_id']; | ||||
| 			} | ||||
|  | ||||
| 			$bookingId = $this->StockService->OpenProduct($args['productId'], $requestBody['amount'], $specificStockEntryId); | ||||
| 			return $this->ApiResponse($this->Database->stock_log($bookingId)); | ||||
| 		} | ||||
| 		catch (\Exception $ex) | ||||
| 		{ | ||||
| 			return $this->GenericErrorResponse($response, $ex->getMessage()); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @@ -126,7 +211,7 @@ class StockApiController extends BaseApiController | ||||
| 			$nextXDays = $request->getQueryParams()['expiring_days']; | ||||
| 		} | ||||
|  | ||||
| 		$expiringProducts = $this->StockService->GetExpiringProducts($nextXDays); | ||||
| 		$expiringProducts = $this->StockService->GetExpiringProducts($nextXDays, true); | ||||
| 		$expiredProducts = $this->StockService->GetExpiringProducts(-1); | ||||
| 		$missingProducts = $this->StockService->GetMissingProducts(); | ||||
| 		return $this->ApiResponse(array( | ||||
| @@ -139,13 +224,13 @@ class StockApiController extends BaseApiController | ||||
| 	public function AddMissingProductsToShoppingList(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		$this->StockService->AddMissingProductsToShoppingList(); | ||||
| 		return $this->VoidApiActionResponse($response); | ||||
| 		return $this->EmptyApiResponse($response); | ||||
| 	} | ||||
|  | ||||
| 	public function ClearShoppingList(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		$this->StockService->ClearShoppingList(); | ||||
| 		return $this->VoidApiActionResponse($response); | ||||
| 		return $this->EmptyApiResponse($response); | ||||
| 	} | ||||
|  | ||||
| 	public function ExternalBarcodeLookup(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| @@ -162,7 +247,25 @@ class StockApiController extends BaseApiController | ||||
| 		} | ||||
| 		catch (\Exception $ex) | ||||
| 		{ | ||||
| 			return $this->VoidApiActionResponse($response, false, 400, $ex->getMessage()); | ||||
| 			return $this->GenericErrorResponse($response, $ex->getMessage()); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	public function UndoBooking(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		try | ||||
| 		{ | ||||
| 			$this->ApiResponse($this->StockService->UndoBooking($args['bookingId'])); | ||||
| 			return $this->EmptyApiResponse($response); | ||||
| 		} | ||||
| 		catch (\Exception $ex) | ||||
| 		{ | ||||
| 			return $this->GenericErrorResponse($response, $ex->getMessage()); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	public function ProductStockEntries(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		return $this->ApiResponse($this->StockService->GetProductStockEntries($args['productId'])); | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -22,22 +22,26 @@ class StockController extends BaseController | ||||
| 			'quantityunits' => $this->Database->quantity_units()->orderBy('name'), | ||||
| 			'locations' => $this->Database->locations()->orderBy('name'), | ||||
| 			'currentStock' => $this->StockService->GetCurrentStock(), | ||||
| 			'currentStockLocations' => $this->StockService->GetCurrentStockLocations(), | ||||
| 			'missingProducts' => $this->StockService->GetMissingProducts(), | ||||
| 			'nextXDays' => 5 | ||||
| 			'nextXDays' => 5, | ||||
| 			'productGroups' => $this->Database->product_groups()->orderBy('name') | ||||
| 		]); | ||||
| 	} | ||||
|  | ||||
| 	public function Purchase(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		return $this->AppContainer->view->render($response, 'purchase', [ | ||||
| 			'products' => $this->Database->products()->orderBy('name') | ||||
| 			'products' => $this->Database->products()->orderBy('name'), | ||||
| 			'locations' => $this->Database->locations()->orderBy('name') | ||||
| 		]); | ||||
| 	} | ||||
|  | ||||
| 	public function Consume(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		return $this->AppContainer->view->render($response, 'consume', [ | ||||
| 			'products' => $this->Database->products()->orderBy('name') | ||||
| 			'products' => $this->Database->products()->orderBy('name'), | ||||
| 			'recipes' => $this->Database->recipes()->orderBy('name') | ||||
| 		]); | ||||
| 	} | ||||
|  | ||||
| @@ -54,7 +58,8 @@ class StockController extends BaseController | ||||
| 			'listItems' => $this->Database->shopping_list(), | ||||
| 			'products' => $this->Database->products()->orderBy('name'), | ||||
| 			'quantityunits' => $this->Database->quantity_units()->orderBy('name'), | ||||
| 			'missingProducts' => $this->StockService->GetMissingProducts() | ||||
| 			'missingProducts' => $this->StockService->GetMissingProducts(), | ||||
| 			'productGroups' => $this->Database->product_groups()->orderBy('name') | ||||
| 		]); | ||||
| 	} | ||||
|  | ||||
| @@ -63,7 +68,17 @@ class StockController extends BaseController | ||||
| 		return $this->AppContainer->view->render($response, 'products', [ | ||||
| 			'products' => $this->Database->products()->orderBy('name'), | ||||
| 			'locations' => $this->Database->locations()->orderBy('name'), | ||||
| 			'quantityunits' => $this->Database->quantity_units()->orderBy('name') | ||||
| 			'quantityunits' => $this->Database->quantity_units()->orderBy('name'), | ||||
| 			'productGroups' => $this->Database->product_groups()->orderBy('name') | ||||
| 		]); | ||||
| 	} | ||||
|  | ||||
| 	public function StockSettings(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		return $this->AppContainer->view->render($response, 'stocksettings', [ | ||||
| 			'locations' => $this->Database->locations()->orderBy('name'), | ||||
| 			'quantityunits' => $this->Database->quantity_units()->orderBy('name'), | ||||
| 			'productGroups' => $this->Database->product_groups()->orderBy('name') | ||||
| 		]); | ||||
| 	} | ||||
|  | ||||
| @@ -74,6 +89,13 @@ class StockController extends BaseController | ||||
| 		]); | ||||
| 	} | ||||
|  | ||||
| 	public function ProductGroupsList(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		return $this->AppContainer->view->render($response, 'productgroups', [ | ||||
| 			'productGroups' => $this->Database->product_groups()->orderBy('name') | ||||
| 		]); | ||||
| 	} | ||||
|  | ||||
| 	public function QuantityUnitsList(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		return $this->AppContainer->view->render($response, 'quantityunits', [ | ||||
| @@ -88,6 +110,7 @@ class StockController extends BaseController | ||||
| 			return $this->AppContainer->view->render($response, 'productform', [ | ||||
| 				'locations' =>  $this->Database->locations()->orderBy('name'), | ||||
| 				'quantityunits' =>  $this->Database->quantity_units()->orderBy('name'), | ||||
| 				'productgroups' => $this->Database->product_groups()->orderBy('name'), | ||||
| 				'mode' => 'create' | ||||
| 			]); | ||||
| 		} | ||||
| @@ -97,6 +120,7 @@ class StockController extends BaseController | ||||
| 				'product' =>  $this->Database->products($args['productId']), | ||||
| 				'locations' =>  $this->Database->locations()->orderBy('name'), | ||||
| 				'quantityunits' =>  $this->Database->quantity_units()->orderBy('name'), | ||||
| 				'productgroups' => $this->Database->product_groups()->orderBy('name'), | ||||
| 				'mode' => 'edit' | ||||
| 			]); | ||||
| 		} | ||||
| @@ -119,6 +143,23 @@ class StockController extends BaseController | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	public function ProductGroupEditForm(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		if ($args['productGroupId'] == 'new') | ||||
| 		{ | ||||
| 			return $this->AppContainer->view->render($response, 'productgroupform', [ | ||||
| 				'mode' => 'create' | ||||
| 			]); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			return $this->AppContainer->view->render($response, 'productgroupform', [ | ||||
| 				'group' =>  $this->Database->product_groups($args['productGroupId']), | ||||
| 				'mode' => 'edit' | ||||
| 			]); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	public function QuantityUnitEditForm(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		if ($args['quantityunitId'] == 'new') | ||||
| @@ -154,4 +195,13 @@ class StockController extends BaseController | ||||
| 			]); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	public function Journal(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		return $this->AppContainer->view->render($response, 'stockjournal', [ | ||||
| 			'stockLog' => $this->Database->stock_log()->orderBy('row_created_timestamp', 'DESC'), | ||||
| 			'products' => $this->Database->products()->orderBy('name'), | ||||
| 			'quantityunits' => $this->Database->quantity_units()->orderBy('name') | ||||
| 		]); | ||||
| 	} | ||||
| } | ||||
|   | ||||
							
								
								
									
										49
									
								
								controllers/SystemApiController.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								controllers/SystemApiController.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,49 @@ | ||||
| <?php | ||||
|  | ||||
| namespace Grocy\Controllers; | ||||
|  | ||||
| use \Grocy\Services\DatabaseService; | ||||
| use \Grocy\Services\ApplicationService; | ||||
|  | ||||
| class SystemApiController extends BaseApiController | ||||
| { | ||||
| 	public function __construct(\Slim\Container $container) | ||||
| 	{ | ||||
| 		parent::__construct($container); | ||||
| 		$this->DatabaseService = new DatabaseService(); | ||||
| 		$this->ApplicationService = new ApplicationService(); | ||||
| 	} | ||||
|  | ||||
| 	protected $DatabaseService; | ||||
| 	protected $ApplicationService; | ||||
|  | ||||
| 	public function GetDbChangedTime(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		return $this->ApiResponse(array( | ||||
| 			'changed_time' => $this->DatabaseService->GetDbChangedTime() | ||||
| 		)); | ||||
| 	} | ||||
|  | ||||
| 	public function LogMissingLocalization(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		if (GROCY_MODE === 'dev') | ||||
| 		{ | ||||
| 			try | ||||
| 			{ | ||||
| 				$requestBody = $request->getParsedBody(); | ||||
|  | ||||
| 				$this->LocalizationService->LogMissingLocalization(GROCY_CULTURE, $requestBody['text']); | ||||
| 				return $this->EmptyApiResponse($response); | ||||
| 			} | ||||
| 			catch (\Exception $ex) | ||||
| 			{ | ||||
| 				return $this->GenericErrorResponse($response, $ex->getMessage()); | ||||
| 			} | ||||
| 		}	 | ||||
| 	} | ||||
|  | ||||
| 	public function GetSystemInfo(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		return $this->ApiResponse($this->ApplicationService->GetSystemInfo()); | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										40
									
								
								controllers/SystemController.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								controllers/SystemController.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,40 @@ | ||||
| <?php | ||||
|  | ||||
| namespace Grocy\Controllers; | ||||
|  | ||||
| use \Grocy\Services\ApplicationService; | ||||
| use \Grocy\Services\DatabaseMigrationService; | ||||
| use \Grocy\Services\DemoDataGeneratorService; | ||||
|  | ||||
| class SystemController extends BaseController | ||||
| { | ||||
| 	public function __construct(\Slim\Container $container) | ||||
| 	{ | ||||
| 		parent::__construct($container); | ||||
| 		$this->ApplicationService = new ApplicationService(); | ||||
| 	} | ||||
|  | ||||
| 	protected $ApplicationService; | ||||
|  | ||||
| 	public function Root(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		// Schema migration is done here | ||||
| 		$databaseMigrationService = new DatabaseMigrationService(); | ||||
| 		$databaseMigrationService->MigrateDatabase(); | ||||
|  | ||||
| 		if (GROCY_IS_DEMO_INSTALL) | ||||
| 		{ | ||||
| 			$demoDataGeneratorService = new DemoDataGeneratorService(); | ||||
| 			$demoDataGeneratorService->PopulateDemoData(); | ||||
| 		} | ||||
|  | ||||
| 		return $response->withRedirect($this->AppContainer->UrlManager->ConstructUrl('/stockoverview')); | ||||
| 	} | ||||
|  | ||||
| 	public function About(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		return $this->AppContainer->view->render($response, 'about', [ | ||||
| 			'system_info' => $this->ApplicationService->GetSystemInfo() | ||||
| 		]); | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										42
									
								
								controllers/TasksApiController.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								controllers/TasksApiController.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,42 @@ | ||||
| <?php | ||||
|  | ||||
| namespace Grocy\Controllers; | ||||
|  | ||||
| use \Grocy\Services\TasksService; | ||||
|  | ||||
| class TasksApiController extends BaseApiController | ||||
| { | ||||
| 	public function __construct(\Slim\Container $container) | ||||
| 	{ | ||||
| 		parent::__construct($container); | ||||
| 		$this->TasksService = new TasksService(); | ||||
| 	} | ||||
|  | ||||
| 	protected $TasksService; | ||||
|  | ||||
| 	public function Current(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		return $this->ApiResponse($this->TasksService->GetCurrent()); | ||||
| 	} | ||||
|  | ||||
| 	public function MarkTaskAsCompleted(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		$requestBody = $request->getParsedBody(); | ||||
|  | ||||
| 		try | ||||
| 		{ | ||||
| 			$doneTime = date('Y-m-d H:i:s'); | ||||
| 			if (array_key_exists('done_time', $requestBody) && IsIsoDateTime($requestBody['done_time'])) | ||||
| 			{ | ||||
| 				$doneTime = $requestBody['done_time']; | ||||
| 			} | ||||
|  | ||||
| 			$this->TasksService->MarkTaskAsCompleted($args['taskId'], $doneTime); | ||||
| 			return $this->EmptyApiResponse($response); | ||||
| 		} | ||||
| 		catch (\Exception $ex) | ||||
| 		{ | ||||
| 			return $this->GenericErrorResponse($response, $ex->getMessage()); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										80
									
								
								controllers/TasksController.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								controllers/TasksController.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,80 @@ | ||||
| <?php | ||||
|  | ||||
| namespace Grocy\Controllers; | ||||
|  | ||||
| use \Grocy\Services\TasksService; | ||||
|  | ||||
| class TasksController extends BaseController | ||||
| { | ||||
| 	public function __construct(\Slim\Container $container) | ||||
| 	{ | ||||
| 		parent::__construct($container); | ||||
| 		$this->TasksService = new TasksService(); | ||||
| 	} | ||||
|  | ||||
| 	protected $TasksService; | ||||
|  | ||||
| 	public function Overview(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		if (isset($request->getQueryParams()['include_done'])) | ||||
| 		{ | ||||
| 			$tasks = $this->Database->tasks()->orderBy('name'); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			$tasks = $this->TasksService->GetCurrent(); | ||||
| 		} | ||||
|  | ||||
| 		return $this->AppContainer->view->render($response, 'tasks', [ | ||||
| 			'tasks' => $tasks, | ||||
| 			'nextXDays' => 5, | ||||
| 			'taskCategories' => $this->Database->task_categories()->orderBy('name'), | ||||
| 			'users' => $this->Database->users() | ||||
| 		]); | ||||
| 	} | ||||
|  | ||||
| 	public function TaskEditForm(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		if ($args['taskId'] == 'new') | ||||
| 		{ | ||||
| 			return $this->AppContainer->view->render($response, 'taskform', [ | ||||
| 				'mode' => 'create', | ||||
| 				'taskCategories' => $this->Database->task_categories()->orderBy('name'), | ||||
| 				'users' => $this->Database->users()->orderBy('username') | ||||
| 			]); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			return $this->AppContainer->view->render($response, 'taskform', [ | ||||
| 				'task' =>  $this->Database->tasks($args['taskId']), | ||||
| 				'mode' => 'edit', | ||||
| 				'taskCategories' => $this->Database->task_categories()->orderBy('name'), | ||||
| 				'users' => $this->Database->users()->orderBy('username') | ||||
| 			]); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	public function TaskCategoriesList(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		return $this->AppContainer->view->render($response, 'taskcategories', [ | ||||
| 			'taskCategories' => $this->Database->task_categories()->orderBy('name') | ||||
| 		]); | ||||
| 	} | ||||
|  | ||||
| 	public function TaskCategoryEditForm(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		if ($args['categoryId'] == 'new') | ||||
| 		{ | ||||
| 			return $this->AppContainer->view->render($response, 'taskcategoryform', [ | ||||
| 				'mode' => 'create' | ||||
| 			]); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			return $this->AppContainer->view->render($response, 'taskcategoryform', [ | ||||
| 				'category' =>  $this->Database->task_categories($args['categoryId']), | ||||
| 				'mode' => 'edit' | ||||
| 			]); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| @@ -22,7 +22,7 @@ class UsersApiController extends BaseApiController | ||||
| 		} | ||||
| 		catch (\Exception $ex) | ||||
| 		{ | ||||
| 			return $this->VoidApiActionResponse($response, false, 400, $ex->getMessage()); | ||||
| 			return $this->GenericErrorResponse($response, $ex->getMessage()); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @@ -32,12 +32,17 @@ class UsersApiController extends BaseApiController | ||||
|  | ||||
| 		try | ||||
| 		{ | ||||
| 			if ($requestBody === null) | ||||
| 			{ | ||||
| 				throw new \Exception('Request body could not be parsed (probably invalid JSON format or missing/wrong Content-Type header)'); | ||||
| 			} | ||||
|  | ||||
| 			$this->UsersService->CreateUser($requestBody['username'], $requestBody['first_name'], $requestBody['last_name'], $requestBody['password']); | ||||
| 			return $this->ApiResponse(array('success' => true)); | ||||
| 			return $this->EmptyApiResponse($response); | ||||
| 		} | ||||
| 		catch (\Exception $ex) | ||||
| 		{ | ||||
| 			return $this->VoidApiActionResponse($response, false, 400, $ex->getMessage()); | ||||
| 			return $this->GenericErrorResponse($response, $ex->getMessage()); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @@ -46,11 +51,11 @@ class UsersApiController extends BaseApiController | ||||
| 		try | ||||
| 		{ | ||||
| 			$this->UsersService->DeleteUser($args['userId']); | ||||
| 			return $this->ApiResponse(array('success' => true)); | ||||
| 			return $this->EmptyApiResponse($response); | ||||
| 		} | ||||
| 		catch (\Exception $ex) | ||||
| 		{ | ||||
| 			return $this->VoidApiActionResponse($response, false, 400, $ex->getMessage()); | ||||
| 			return $this->GenericErrorResponse($response, $ex->getMessage()); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @@ -61,11 +66,39 @@ class UsersApiController extends BaseApiController | ||||
| 		try | ||||
| 		{ | ||||
| 			$this->UsersService->EditUser($args['userId'], $requestBody['username'], $requestBody['first_name'], $requestBody['last_name'], $requestBody['password']); | ||||
| 			return $this->ApiResponse(array('success' => true)); | ||||
| 			return $this->EmptyApiResponse($response); | ||||
| 		} | ||||
| 		catch (\Exception $ex) | ||||
| 		{ | ||||
| 			return $this->VoidApiActionResponse($response, false, 400, $ex->getMessage()); | ||||
| 			return $this->GenericErrorResponse($response, $ex->getMessage()); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	public function GetUserSetting(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		try | ||||
| 		{ | ||||
| 			$value = $this->UsersService->GetUserSetting(GROCY_USER_ID, $args['settingKey']); | ||||
| 			return $this->ApiResponse(array('value' => $value)); | ||||
| 		} | ||||
| 		catch (\Exception $ex) | ||||
| 		{ | ||||
| 			return $this->GenericErrorResponse($response, $ex->getMessage()); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	public function SetUserSetting(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) | ||||
| 	{ | ||||
| 		try | ||||
| 		{ | ||||
| 			$requestBody = $request->getParsedBody(); | ||||
|  | ||||
| 			$value = $this->UsersService->SetUserSetting(GROCY_USER_ID, $args['settingKey'], $requestBody['value']); | ||||
| 			return $this->EmptyApiResponse($response); | ||||
| 		} | ||||
| 		catch (\Exception $ex) | ||||
| 		{ | ||||
| 			return $this->GenericErrorResponse($response, $ex->getMessage()); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|   | ||||
							
								
								
									
										2036
									
								
								grocy.openapi.json
									
									
									
									
									
								
							
							
						
						
									
										2036
									
								
								grocy.openapi.json
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -32,6 +32,11 @@ class UrlManager | ||||
|  | ||||
| 	private function GetBaseUrl() | ||||
| 	{ | ||||
| 		if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) | ||||
| 		{ | ||||
| 			$_SERVER['HTTPS'] = 'on'; | ||||
| 		} | ||||
|  | ||||
| 		return (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]"; | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -138,6 +138,10 @@ function Setting(string $name, $value) | ||||
| 		{ | ||||
| 			define('GROCY_' . $name, file_get_contents($settingOverrideFile)); | ||||
| 		} | ||||
| 		elseif (getenv('GROCY_' . $name) !== false) // An environment variable with the same name and prefix GROCY_ overwrites the given setting | ||||
| 		{ | ||||
| 			define('GROCY_' . $name, getenv('GROCY_' . $name)); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			define('GROCY_' . $name, $value); | ||||
| @@ -145,6 +149,17 @@ function Setting(string $name, $value) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| global $GROCY_DEFAULT_USER_SETTINGS; | ||||
| $GROCY_DEFAULT_USER_SETTINGS = array(); | ||||
| function DefaultUserSetting(string $name, $value) | ||||
| { | ||||
| 	global $GROCY_DEFAULT_USER_SETTINGS; | ||||
| 	if (!array_key_exists($name, $GROCY_DEFAULT_USER_SETTINGS)) | ||||
| 	{ | ||||
| 		$GROCY_DEFAULT_USER_SETTINGS[$name] = $value; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| function GetUserDisplayName($user) | ||||
| { | ||||
| 	$displayName = ''; | ||||
| @@ -178,3 +193,13 @@ function Pluralize($number, $singularForm, $pluralForm) | ||||
| 	} | ||||
| 	return $text; | ||||
| } | ||||
|  | ||||
| function IsValidFileName($fileName) | ||||
| { | ||||
| 	if(preg_match('=^[^/?*;:{}\\\\]+\.[^/?*;:{}\\\\]+$=', $fileName)) | ||||
| 	{ | ||||
| 		return true; | ||||
| 	} | ||||
|  | ||||
| 	return false; | ||||
| } | ||||
|   | ||||
							
								
								
									
										6
									
								
								localization/da/chore_types.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								localization/da/chore_types.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'manually' => 'Manuelt', | ||||
| 	'dynamic-regular' => 'Dynamic regular' | ||||
| ); | ||||
| @@ -1,13 +1,10 @@ | ||||
| <?php | ||||
| 
 | ||||
| return array( | ||||
| 	//Constants
 | ||||
| 	'manually' => 'Manually', | ||||
| 	'dynamic-regular' => 'Dynamic regular', | ||||
| 	 | ||||
| 	//Technical component translations
 | ||||
| 	'timeago_locale' => 'en', | ||||
| 	'timeago_nan' => 'NaN years ago', | ||||
| 	'moment_locale' => '', | ||||
| 	'datatables_localization' => '{"sEmptyTable":"No data available in table","sInfo":"Showing _START_ to _END_ of _TOTAL_ entries","sInfoEmpty":"Showing 0 to 0 of 0 entries","sInfoFiltered":"(filtered from _MAX_ total entries)","sInfoPostFix":"","sInfoThousands":",","sLengthMenu":"Show _MENU_ entries","sLoadingRecords":"Loading...","sProcessing":"Processing...","sSearch":"Search:","sZeroRecords":"No matching records found","oPaginate":{"sFirst":"First","sLast":"Last","sNext":"Next","sPrevious":"Previous"},"oAria":{"sSortAscending":": activate to sort column ascending","sSortDescending":": activate to sort column descending"}}' | ||||
| 	'moment_locale' => 'x', | ||||
| 	'datatables_localization' => '{"sEmptyTable":"No data available in table","sInfo":"Showing _START_ to _END_ of _TOTAL_ entries","sInfoEmpty":"Showing 0 to 0 of 0 entries","sInfoFiltered":"(filtered from _MAX_ total entries)","sInfoPostFix":"","sInfoThousands":",","sLengthMenu":"Show _MENU_ entries","sLoadingRecords":"Loading...","sProcessing":"Processing...","sSearch":"Search:","sZeroRecords":"No matching records found","oPaginate":{"sFirst":"First","sLast":"Last","sNext":"Next","sPrevious":"Previous"},"oAria":{"sSortAscending":": activate to sort column ascending","sSortDescending":": activate to sort column descending"}}', | ||||
| 	'summernote_locale' => 'x', | ||||
| 	'fullcalendar_locale' => 'x' | ||||
| ); | ||||
							
								
								
									
										89
									
								
								localization/da/demo_data.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								localization/da/demo_data.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,89 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'Cookies' => 'Småkager', | ||||
| 	'Chocolate' => 'chokolade', | ||||
| 	'Pantry' => 'Spisekammer', | ||||
| 	'Candy cupboard' => 'Slik skuffe', | ||||
| 	'Tinned food cupboard' => 'Dåsemadsskab', | ||||
| 	'Fridge' => 'Køleskab', | ||||
| 	'Piece' => 'Styk', | ||||
| 	'Pieces' => 'Stykker', | ||||
| 	'Pack' => 'Pakke', | ||||
| 	'Packs' => 'Pakker', | ||||
| 	'Glass' => 'Glas', | ||||
| 	'Glasses' => 'Glas', | ||||
| 	'Tin' => 'Beholder', | ||||
| 	'Tins' => 'Beholdere', | ||||
| 	'Can' => 'Dåse', | ||||
| 	'Cans' => 'Dåser', | ||||
| 	'Bunch' => 'Bundt', | ||||
| 	'Bunches' => 'Bundt', | ||||
| 	'Gummy bears' => 'Vingummi bamser', | ||||
| 	'Crisps' => 'Chips', | ||||
| 	'Eggs' => 'Æg', | ||||
| 	'Noodles' => 'Nudler', | ||||
| 	'Pickles' => 'Syltede agurker', | ||||
| 	'Gulash soup' => 'Gulash', | ||||
| 	'Yogurt' => 'Yoghurt', | ||||
| 	'Cheese' => 'Ost', | ||||
| 	'Cold cuts' => 'Pålæg', | ||||
| 	'Paprika' => 'Paprika', | ||||
| 	'Cucumber' => 'Agurk', | ||||
| 	'Radish' => 'Radisse', | ||||
| 	'Tomato' => 'Tomat', | ||||
| 	'Changed towels in the bathroom' => 'Skiftede håndklæder i badeværelset', | ||||
| 	'Cleaned the kitchen floor' => 'Gjorde køkkengulvet rent', | ||||
| 	'Warranty ends' => 'Reklamationsret udløber', | ||||
| 	'TV remote control' => 'Fjernbetjening', | ||||
| 	'Alarm clock' => 'Vægge ur', | ||||
| 	'Heat remote control' => 'Varmefjernbetjening', | ||||
| 	'Lawn mowed in the garden' => 'Græs slået', | ||||
| 	'Some good snacks' => 'Nogle gode snacks', | ||||
| 	'Pizza dough' => 'Pizza dej', | ||||
| 	'Sieved tomatoes' => 'Sigtede tomater', | ||||
| 	'Salami' => 'Salami', | ||||
| 	'Toast' => 'Toast', | ||||
| 	'Minced meat' => 'Hakkekød', | ||||
| 	'Pizza' => 'Pizza', | ||||
| 	'Spaghetti bolognese' => 'Spaghetti bolognese', | ||||
| 	'Sandwiches' => 'Sandwiches', | ||||
| 	'English' => 'Engelsk', | ||||
| 	'German' => 'Tysk', | ||||
| 	'Italian' => 'Italiænsk', | ||||
| 	'Demo in different language' => 'Demo i et andet sprog', | ||||
| 	'This is the note content of the recipe ingredient' => 'Dette er indholdet af opskrift ingrediensens notefelt', | ||||
| 	'Demo User' => 'Demo Bruger', | ||||
| 	'Gram' => 'Gram', | ||||
| 	'Grams' => 'Gram', | ||||
| 	'Flour' => 'Mel', | ||||
| 	'Pancakes' => 'Pandekager', | ||||
| 	'Sugar' => 'Sukker', | ||||
| 	'Home' => 'Hjem', | ||||
| 	'Life' => 'Liv', | ||||
| 	'Projects' => 'Projekter', | ||||
| 	'Repair the garage door' => 'Reparér garagedøren', | ||||
| 	'Fork and improve grocy' => 'Fork og forbedre grocy', | ||||
| 	'Find a solution for what to do when I forget the door keys' => 'Find en løsning for når jeg glemmer husnøglen', | ||||
| 	'Sweets' => 'Slik', | ||||
| 	'Bakery products' => 'Bageriprodukter', | ||||
| 	'Tinned food' => 'Dåsemad', | ||||
| 	'Butchery products' => 'Slagteriprodukter', | ||||
| 	'Vegetables/Fruits' => 'Frugt og grønt', | ||||
| 	'Refrigerated products' => 'Nedkølede produkter', | ||||
| 	'Coffee machine' => 'Kaffemaskine', | ||||
| 	'Dishwasher' => 'Opvasker', | ||||
| 	'Liter' => 'Liter', | ||||
| 	'Liters' => 'Liter', | ||||
| 	'Bottle' => 'Flaske', | ||||
| 	'Bottles' => 'Flasker', | ||||
| 	'Milk' => 'Mælk', | ||||
| 	'Chocolate sauce' => 'Chokoladesauce', | ||||
| 	'Milliliters' => 'Milliliter', | ||||
| 	'Milliliter' => 'Milliliter', | ||||
| 	'Bottom' => 'Bund', | ||||
| 	'Topping' => 'Topping', | ||||
| 	'French' => 'Fransk', | ||||
| 	'Turkish' => 'Turkish', | ||||
| 	'Spanish' => 'Spanish' | ||||
| ); | ||||
							
								
								
									
										8
									
								
								localization/da/stock_transaction_types.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								localization/da/stock_transaction_types.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'purchase' => 'Køb', | ||||
| 	'consume' => 'Brug', | ||||
| 	'inventory-correction' => 'Beholdningsrettelse', | ||||
| 	'product-opened' => 'Produkt åbnet' | ||||
| ); | ||||
							
								
								
									
										348
									
								
								localization/da/strings.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										348
									
								
								localization/da/strings.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,348 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'Stock overview' => 'Beholdnings oversigt', | ||||
| 	'#1 products expiring within the next #2 days' => '#1 produkter der udløber inden for de næste #2 dage', | ||||
| 	'#1 products are already expired' => '#1 produkter er allerede udløbede', | ||||
| 	'#1 products are below defined min. stock amount' => 'Beholdningen af #1 produkter er under minimums antallet', | ||||
| 	'Product' => 'Produkt', | ||||
| 	'Amount' => 'Mængde', | ||||
| 	'Next best before date' => 'Næste bedst før dato', | ||||
| 	'Logout' => 'Log ud', | ||||
| 	'Chores overview' => 'Pligt oversigt', | ||||
| 	'Batteries overview' => 'Batteri oversigt', | ||||
| 	'Purchase' => 'Køb', | ||||
| 	'Consume' => 'Brug', | ||||
| 	'Inventory' => 'Beholdning', | ||||
| 	'Shopping list' => 'Indkøbsliste', | ||||
| 	'Chore tracking' => 'Pligt overvågning', | ||||
| 	'Battery tracking' => 'Batteri overvågning', | ||||
| 	'Products' => 'Produkter', | ||||
| 	'Locations' => 'Steder', | ||||
| 	'Quantity units' => 'Mængde enheder', | ||||
| 	'Chores' => 'Pligter', | ||||
| 	'Batteries' => 'Batterier', | ||||
| 	'Chore' => 'Pligt', | ||||
| 	'Next estimated tracking' => 'Next estimated tracking', | ||||
| 	'Last tracked' => 'Sidst overvåget', | ||||
| 	'Battery' => 'Batteri', | ||||
| 	'Last charged' => 'Sidst opladt', | ||||
| 	'Next planned charge cycle' => 'Næste planlagte opladning', | ||||
| 	'Best before' => 'Bedst før', | ||||
| 	'OK' => 'OK', | ||||
| 	'Product overview' => 'Produkt oversigt', | ||||
| 	'Stock quantity unit' => 'Standard enhed', | ||||
| 	'Stock amount' => 'Standard mængde', | ||||
| 	'Last purchased' => 'Sidst købt', | ||||
| 	'Last used' => 'Sidst brugt', | ||||
| 	'Spoiled' => 'Udløbet', | ||||
| 	'Barcode lookup is disabled' => 'Stregkode opslag er slået fra', | ||||
| 	'will be added to the list of barcodes for the selected product on submit' => 'Bliver tilføjet til stregkodelisten for det valgte produkt når du sender', | ||||
| 	'New amount' => 'Ny mængde', | ||||
| 	'Note' => 'Note', | ||||
| 	'Tracked time' => 'Overvåget tid', | ||||
| 	'Chore overview' => 'Pligt oversigt', | ||||
| 	'Tracked count' => 'Antal overvågede', | ||||
| 	'Battery overview' => 'Batteri oversigt', | ||||
| 	'Charge cycles count' => 'Antal opladninger', | ||||
| 	'Create shopping list item' => 'Lav indkøbsliste punkt', | ||||
| 	'Edit shopping list item' => 'Ændr indkøbsliste punkt', | ||||
| 	'Save' => 'Gem', | ||||
| 	'Add' => 'Tilføj', | ||||
| 	'Name' => 'Navn', | ||||
| 	'Location' => 'Sted', | ||||
| 	'Min. stock amount' => 'Mindste beholdning', | ||||
| 	'QU purchase' => 'QU køb', | ||||
| 	'QU stock' => 'QU beholdning', | ||||
| 	'QU factor' => 'QU factor', | ||||
| 	'Description' => 'Beskrivelse', | ||||
| 	'Create product' => 'Lav produkt', | ||||
| 	'Barcode(s)' => 'Stegkode(r)', | ||||
| 	'Minimum stock amount' => 'Minimum mængde', | ||||
| 	'Default best before days' => 'Standard bedst før dage', | ||||
| 	'Quantity unit purchase' => 'Quantity unit purchase', | ||||
| 	'Quantity unit stock' => 'Quantity unit stock', | ||||
| 	'Factor purchase to stock quantity unit' => 'Factor purchase to stock quantity unit', | ||||
| 	'Create location' => 'Lav placering', | ||||
| 	'Create quantity unit' => 'Lav mængde enhed', | ||||
| 	'Period type' => 'Periode type', | ||||
| 	'Period days' => 'Period days', | ||||
| 	'Create chore' => 'Lav pligt', | ||||
| 	'Used in' => 'Brugt i', | ||||
| 	'Create battery' => 'Lav batteri', | ||||
| 	'Edit battery' => 'Ændr batteri', | ||||
| 	'Edit chore' => 'Ændr pligt', | ||||
| 	'Edit quantity unit' => 'Ændr mængde enhed', | ||||
| 	'Edit product' => 'Ændr produkt', | ||||
| 	'Edit location' => 'Ændr placering', | ||||
| 	'Record data' => 'Optag data', | ||||
| 	'Manage master data' => 'Manage master data', | ||||
| 	'This will apply to added products' => 'Dette vil gælde tilføjede produkter', | ||||
| 	'never' => 'aldrig', | ||||
| 	'Add products that are below defined min. stock amount' => 'Tilføj produkter der er under minimumsantallet', | ||||
| 	'For purchases this amount of days will be added to today for the best before date suggestion' => 'For purchases this amount of days will be added to today for the best before date suggestion', | ||||
| 	'This means 1 #1 purchased will be converted into #2 #3 in stock' => 'Dette betyder at 1 #1 bliver lavet om til #2 #3 i beholdningen', | ||||
| 	'Login' => 'Login', | ||||
| 	'Username' => 'Brugernavn', | ||||
| 	'Password' => 'Kode', | ||||
| 	'Invalid credentials, please try again' => 'Ugyldige informationer, prøv igen', | ||||
| 	'Are you sure to delete battery "#1"?' => 'Er du sikker på du vil slette batteriet "#1"?', | ||||
| 	'Yes' => 'Ja', | ||||
| 	'No' => 'Nej', | ||||
| 	'Are you sure to delete chore "#1"?' => 'Er du sikker på du vil slette pligten "#1"?', | ||||
| 	'"#1" could not be resolved to a product, how do you want to proceed?' => '"#1" kunne ikke findes som produkt. Hvordan vil du fortsætte?', | ||||
| 	'Create or assign product' => 'Lav eller tilknyt produkt', | ||||
| 	'Cancel' => 'Afbryd', | ||||
| 	'Add as new product' => 'Tilføj som nyt produkt', | ||||
| 	'Add as barcode to existing product' => 'Tilføj som stregkode til et eksisterende produkt', | ||||
| 	'Add as new product and prefill barcode' => 'Tilføj som nyt produkt og udfyld stregkoden på forhånd', | ||||
| 	'Are you sure to delete quantity unit "#1"?' => 'Er du sikker på du vil slette mængde enheden "#1"?', | ||||
| 	'Are you sure to delete product "#1"?' => 'Er du sikker på du vil slette produktet "#1"?', | ||||
| 	'Are you sure to delete location "#1"?' => 'Er du sikker på du vil slette placeringen "#1"?', | ||||
| 	'Manage API keys' => 'Styr API nøgler', | ||||
| 	'REST API & data model documentation' => 'REST API & datamodel dokumentation', | ||||
| 	'API keys' => 'API nøgler', | ||||
| 	'Create new API key' => 'Lav ny API nøgle', | ||||
| 	'API key' => 'API nøgle', | ||||
| 	'Expires' => 'Udløber', | ||||
| 	'Created' => 'Lavet', | ||||
| 	'This product is not in stock' => 'Dette produkt er ikke i beholdningen', | ||||
| 	'This means #1 will be added to stock' => 'Dette betyder #1 bliver tilføjet til beholdningen', | ||||
| 	'This means #1 will be removed from stock' => 'Dette betyder at #1 bliver fjernet fra beholdningen', | ||||
| 	'This means it is estimated that a new execution of this chore is tracked #1 days after the last was tracked' => 'This means it is estimated that a new execution of this chore is tracked #1 days after the last was tracked', | ||||
| 	'Removed #1 #2 of #3 from stock' => 'Fjernede #1 #2 af #3 fra beholdningen', | ||||
| 	'About grocy' => 'Omkring Grocy', | ||||
| 	'Close' => 'Luk', | ||||
| 	'#1 batteries are due to be charged within the next #2 days' => '#1 batterier skal oplades indenfor de næste #2 dage', | ||||
| 	'#1 batteries are overdue to be charged' => '#1 batterier trænger til at blive opladt', | ||||
| 	'#1 chores are due to be done within the next #2 days' => '#1 pligter skal udfyldes indenfor de næste #2 dage', | ||||
| 	'#1 chores are overdue to be done' => '#1 pligter skulle have været gjort', | ||||
| 	'Released on' => 'Released on', | ||||
| 	'Consume #3 #1 of #2' => 'Brug #3 #1 af #2', | ||||
| 	'Added #1 #2 of #3 to stock' => 'Tilføjede #1 #2 af #3 til beholdningen', | ||||
| 	'Stock amount of #1 is now #2 #3' => 'Mængden af #1 er nu #2 #3', | ||||
| 	'Tracked execution of chore #1 on #2' => 'Overvågede udførslen af pligt #1 på #2', | ||||
| 	'Tracked charge cycle of battery #1 on #2' => 'Tracked charge cycle of battery #1 on #2', | ||||
| 	'Consume all #1 which are currently in stock' => 'Brug alle #1 i beholdningen', | ||||
| 	'All' => 'Alle', | ||||
| 	'Track charge cycle of battery #1' => 'Overvåg opladningscyklus af batteri #1', | ||||
| 	'Track execution of chore #1' => 'Track execution of chore #1', | ||||
| 	'Filter by location' => 'Filtre med placering', | ||||
| 	'Search' => 'Søg', | ||||
| 	'Not logged in' => 'Ikke logget ind', | ||||
| 	'You have to select a product' => 'Du skal vælge et produkt', | ||||
| 	'You have to select a chore' => 'Du skal vælge en pligt', | ||||
| 	'You have to select a battery' => 'Du skal vælge et batteri', | ||||
| 	'A name is required' => 'Du skal vælge et navn', | ||||
| 	'A location is required' => 'Du skal vælge en placering', | ||||
| 	'The amount cannot be lower than #1' => 'Mængden kan ikek kvære lavere end #1', | ||||
| 	'This cannot be negative' => 'Dette kan ikke være negativt', | ||||
| 	'A quantity unit is required' => 'Du skal vælge en enhed for mængden', | ||||
| 	'A period type is required' => 'Du skal vælge en slags periode', | ||||
| 	'A best before date is required and must be later than today' => 'Du skal vælge en bedst før dato som er senere end i dag', | ||||
| 	'Settings' => 'Indstillinger', | ||||
| 	'This can only be before now' => 'Dette skal være før nu', | ||||
| 	'Calendar' => 'Kalender', | ||||
| 	'Recipes' => 'Opskrifter', | ||||
| 	'Edit recipe' => 'Ændr opskrift', | ||||
| 	'New recipe' => 'Ny opskrift', | ||||
| 	'Ingredients list' => 'Ingrediens liste', | ||||
| 	'Add recipe ingredient' => 'Tilføj ingrediens til opskrift', | ||||
| 	'Edit recipe ingredient' => 'Ændr ingrediens til opskrift', | ||||
| 	'Are you sure to delete recipe "#1"?' => 'Er du sikker på du vil slette opskriften "#1"?', | ||||
| 	'Are you sure to delete recipe ingredient "#1"?' => 'Er du sikker på du vil slette ingrediensen "#1" fra opskriften?', | ||||
| 	'Are you sure to empty the shopping list?' => 'Er du sikker på du vil tømme indkøbslisten?', | ||||
| 	'Clear list' => 'Ryd liste', | ||||
| 	'Requirements fulfilled' => 'Skal udfyldes', | ||||
| 	'Put missing products on shopping list' => 'Sæt manglende produkter på en indkøbsliste', | ||||
| 	'Not enough in stock, #1 ingredients missing' => 'Der er ikke nok i beholdningen. Der mangler #1 ingredienser. ', | ||||
| 	'Enough in stock' => 'Der er nok i beholdningen', | ||||
| 	'Not enough in stock, #1 ingredients missing but already on the shopping list' => 'Der er ikke nok i beholdningen.  Der mangler #1 ingredienser som allerede er på indkøbslisten', | ||||
| 	'Expand to fullscreen' => 'Udvid til fuldskærm', | ||||
| 	'Ingredients' => 'Ingredienser', | ||||
| 	'Preparation' => 'Tilberedning', | ||||
| 	'Recipe' => 'Opskrift', | ||||
| 	'Not enough in stock, #1 missing, #2 already on shopping list' => 'Der er ikke nok i beholdningen. Der mangler #1, #2 er allerede i beholdningen', | ||||
| 	'Show notes' => 'Vis noter', | ||||
| 	'Put missing amount on shopping list' => 'Put manglende mængde på indkøbsliste', | ||||
| 	'Are you sure to put all missing ingredients for recipe "#1" on the shopping list?' => 'Er du sikker på du vil sætte alle manglende ingredienser til "#1" på indkøbslisten?', | ||||
| 	'Added for recipe #1' => 'Tilføjet til opskriften #1', | ||||
| 	'Manage users' => 'Manage users', | ||||
| 	'User' => 'Bruger', | ||||
| 	'Users' => 'Brugere', | ||||
| 	'Are you sure to delete user "#1"?' => 'Er du sikker på du vil slette brugeren "#1"?', | ||||
| 	'Create user' => 'Lav bruger', | ||||
| 	'Edit user' => 'Ændr bruger', | ||||
| 	'First name' => 'First name', | ||||
| 	'Last name' => 'Last name', | ||||
| 	'A username is required' => 'A username is required', | ||||
| 	'Confirm password' => 'Confirm password', | ||||
| 	'Passwords do not match' => 'Passwords do not match', | ||||
| 	'Change password' => 'Change password', | ||||
| 	'Done by' => 'Done by', | ||||
| 	'Last done by' => 'Last done by', | ||||
| 	'Unknown' => 'Unknown', | ||||
| 	'Filter by chore' => 'Filter by chore', | ||||
| 	'Chores journal' => 'Chores journal', | ||||
| 	'0 means suggestions for the next charge cycle are disabled' => '0 means suggestions for the next charge cycle are disabled', | ||||
| 	'Charge cycle interval (days)' => 'Charge cycle interval (days)', | ||||
| 	'Last price' => 'Last price', | ||||
| 	'Price history' => 'Price history', | ||||
| 	'No price history available' => 'No price history available', | ||||
| 	'Price' => 'Price', | ||||
| 	'in #1 per purchase quantity unit' => 'in #1 per purchase quantity unit', | ||||
| 	'The price cannot be lower than #1' => 'The price cannot be lower than #1', | ||||
| 	'#1 product expires within the next #2 days' => '#1 product expires within the next #2 days', | ||||
| 	'#1 product is already expired' => '#1 product is already expired', | ||||
| 	'#1 product is below defined min. stock amount' => '#1 product is below defined min. stock amount', | ||||
| 	'Unit' => 'Unit', | ||||
| 	'Units' => 'Units', | ||||
| 	'#1 chore is due to be done within the next #2 days' => '#1 chore is due to be done within the next #2 days', | ||||
| 	'#1 chore is overdue to be done' => '#1 chore is overdue to be done', | ||||
| 	'#1 battery is due to be charged within the next #2 days' => '#1 battery is due to be charged within the next #2 days', | ||||
| 	'#1 battery is overdue to be charged' => '#1 battery is overdue to be charged', | ||||
| 	'#1 unit was automatically added and will apply in addition to the amount entered here' => '#1 unit was automatically added and will apply in addition to the amount entered here', | ||||
| 	'in singular form' => 'in singular form', | ||||
| 	'in plural form' => 'in plural form', | ||||
| 	'Never expires' => 'Never expires', | ||||
| 	'This cannot be lower than #1' => 'This cannot be lower than #1', | ||||
| 	'-1 means that this product never expires' => '-1 means that this product never expires', | ||||
| 	'Quantity unit' => 'Quantity unit', | ||||
| 	'Only check if a single unit is in stock (a different quantity can then be used above)' => 'Only check if a single unit is in stock (a different quantity can then be used above)', | ||||
| 	'Are you sure to consume all ingredients needed by recipe "#1" (ingredients marked with "check only if a single unit is in stock" will be ignored)?' => 'Are you sure to consume all ingredients needed by recipe "#1" (ingredients marked with "check only if a single unit is in stock" will be ignored)?', | ||||
| 	'Removed all ingredients of recipe "#1" from stock' => 'Removed all ingredients of recipe "#1" from stock', | ||||
| 	'Consume all ingredients needed by this recipe' => 'Consume all ingredients needed by this recipe', | ||||
| 	'Click to show technical details' => 'Click to show technical details', | ||||
| 	'Error while saving, probably this item already exists' => 'Error while saving, probably this item already exists', | ||||
| 	'Error details' => 'Error details', | ||||
| 	'Tasks' => 'Tasks', | ||||
| 	'Show done tasks' => 'Show done tasks', | ||||
| 	'Task' => 'Task', | ||||
| 	'Due' => 'Due', | ||||
| 	'Assigned to' => 'Assigned to', | ||||
| 	'Mark task "#1" as completed' => 'Mark task "#1" as completed', | ||||
| 	'Uncategorized' => 'Uncategorized', | ||||
| 	'Task categories' => 'Task categories', | ||||
| 	'Create task' => 'Create task', | ||||
| 	'A due date is required' => 'A due date is required', | ||||
| 	'Category' => 'Category', | ||||
| 	'Edit task' => 'Edit task', | ||||
| 	'Are you sure to delete task "#1"?' => 'Are you sure to delete task "#1"?', | ||||
| 	'#1 task is due to be done within the next #2 days' => '#1 task is due to be done within the next #2 days', | ||||
| 	'#1 tasks are due to be done within the next #2 days' => '#1 tasks are due to be done within the next #2 days', | ||||
| 	'#1 task is overdue to be done' => '#1 task is overdue to be done', | ||||
| 	'#1 tasks are overdue to be done' => '#1 tasks are overdue to be done', | ||||
| 	'Edit task category' => 'Edit task category', | ||||
| 	'Create task category' => 'Create task category', | ||||
| 	'Product groups' => 'Product groups', | ||||
| 	'Ungrouped' => 'Ungrouped', | ||||
| 	'Create product group' => 'Create product group', | ||||
| 	'Edit product group' => 'Edit product group', | ||||
| 	'Product group' => 'Product group', | ||||
| 	'Are you sure to delete product group "#1"?' => 'Are you sure to delete product group "#1"?', | ||||
| 	'Stay logged in permanently' => 'Stay logged in permanently', | ||||
| 	'When not set, you will get logged out at latest after 30 days' => 'When not set, you will get logged out at latest after 30 days', | ||||
| 	'Filter by status' => 'Filter by status', | ||||
| 	'Below min. stock amount' => 'Below min. stock amount', | ||||
| 	'Expiring soon' => 'Expiring soon', | ||||
| 	'Already expired' => 'Already expired', | ||||
| 	'Due soon' => 'Due soon', | ||||
| 	'Overdue' => 'Overdue', | ||||
| 	'View settings' => 'View settings', | ||||
| 	'Auto reload on external changes' => 'Auto reload on external changes', | ||||
| 	'Enable night mode' => 'Enable night mode', | ||||
| 	'Auto enable in time range' => 'Auto enable in time range', | ||||
| 	'From' => 'From', | ||||
| 	'in format' => 'in format', | ||||
| 	'To' => 'To', | ||||
| 	'Time range goes over midnight' => 'Time range goes over midnight', | ||||
| 	'Product picture' => 'Product picture', | ||||
| 	'No file selected' => 'No file selected', | ||||
| 	'If you don\'t select a file, the current picture will not be altered' => 'If you don\'t select a file, the current picture will not be altered', | ||||
| 	'Delete' => 'Delete', | ||||
| 	'The current picture will be deleted when you save the product' => 'The current picture will be deleted when you save the product', | ||||
| 	'Select file' => 'Select file', | ||||
| 	'Image of product #1' => 'Image of product #1', | ||||
| 	'This product cannot be deleted because it is in stock, please remove the stock amount first.' => 'This product cannot be deleted because it is in stock, please remove the stock amount first.', | ||||
| 	'Delete not possible' => 'Delete not possible', | ||||
| 	'Equipment' => 'Equipment', | ||||
| 	'Instruction manual' => 'Instruction manual', | ||||
| 	'The selected equipment has no instruction manual' => 'The selected equipment has no instruction manual', | ||||
| 	'Notes' => 'Notes', | ||||
| 	'Edit equipment' => 'Edit equipment', | ||||
| 	'Create equipment' => 'Create equipment', | ||||
| 	'If you don\'t select a file, the current instruction manual will not be altered' => 'If you don\'t select a file, the current instruction manual will not be altered', | ||||
| 	'No instruction manual available' => 'No instruction manual available', | ||||
| 	'The current instruction manual will be deleted when you save the equipment' => 'The current instruction manual will be deleted when you save the equipment', | ||||
| 	'No picture available' => 'No picture available', | ||||
| 	'Filter by product group' => 'Filter by product group', | ||||
| 	'Presets for new products' => 'Presets for new products', | ||||
| 	'Included recipes' => 'Included recipes', | ||||
| 	'A recipe is required' => 'A recipe is required', | ||||
| 	'Add included recipe' => 'Add included recipe', | ||||
| 	'Edit included recipe' => 'Edit included recipe', | ||||
| 	'Group' => 'Group', | ||||
| 	'This will be used as a headline to group ingredients together' => 'This will be used as a headline to group ingredients together', | ||||
| 	'Journal' => 'Journal', | ||||
| 	'Stock journal' => 'Stock journal', | ||||
| 	'Filter by product' => 'Filter by product', | ||||
| 	'Booking time' => 'Booking time', | ||||
| 	'Booking type' => 'Booking type', | ||||
| 	'Undo booking' => 'Undo booking', | ||||
| 	'Undone on' => 'Undone on', | ||||
| 	'Batteries journal' => 'Batteries journal', | ||||
| 	'Filter by battery' => 'Filter by battery', | ||||
| 	'Undo charge cycle' => 'Undo charge cycle', | ||||
| 	'Undo chore execution' => 'Undo chore execution', | ||||
| 	'Chore execution successfully undone' => 'Chore execution successfully undone', | ||||
| 	'Undo' => 'Undo', | ||||
| 	'Booking successfully undone' => 'Booking successfully undone', | ||||
| 	'Charge cycle successfully undone' => 'Charge cycle successfully undone', | ||||
| 	'This cannot be negative and must be an integral number' => 'This cannot be negative and must be an integral number', | ||||
| 	'Disable stock fulfillment checking for this ingredient' => 'Disable stock fulfillment checking for this ingredient', | ||||
| 	'Add all list items to stock' => 'Add all list items to stock', | ||||
| 	'Add #3 #1 of #2 to stock' => 'Add #3 #1 of #2 to stock', | ||||
| 	'Adding shopping list item #1 of #2' => 'Adding shopping list item #1 of #2', | ||||
| 	'Use a specific stock item' => 'Use a specific stock item', | ||||
| 	'The first item in this list would be picked by the default rule which is "First expiring first, then first in first out"' => 'The first item in this list would be picked by the default rule which is "First expiring first, then first in first out"', | ||||
| 	'Mark #3 #1 of #2 as open' => 'Mark #3 #1 of #2 as open', | ||||
| 	'When a product was marked as opened, the best before date will be replaced by today + this amount of days (a value of 0 disables this)' => 'When a product was marked as opened, the best before date will be replaced by today + this amount of days (a value of 0 disables this)', | ||||
| 	'Default best before days after opened' => 'Default best before days after opened', | ||||
| 	'Marked #1 #2 of #3 as opened' => 'Marked #1 #2 of #3 as opened', | ||||
| 	'Mark as opened' => 'Mark as opened', | ||||
| 	'Expires on #1; Bought on #2' => 'Expires on #1; Bought on #2', | ||||
| 	'Not opened' => 'Not opened', | ||||
| 	'Opened' => 'Opened', | ||||
| 	'Mark #3 #1 of #2 as open' => 'Mark #3 #1 of #2 as open', | ||||
| 	'#1 opened' => '#1 opened', | ||||
| 	'Product expires' => 'Product expires', | ||||
| 	'Task due' => 'Task due', | ||||
| 	'Chore due' => 'Chore due', | ||||
| 	'Battery charge cycle due' => 'Battery charge cycle due', | ||||
| 	'Show clock in header' => 'Show clock in header', | ||||
| 	'Stock settings' => 'Stock settings', | ||||
| 	'Shopping list to stock workflow' => 'Shopping list to stock workflow', | ||||
| 	'Automatically do the booking using the last price and the amount of the shopping list item, if the product has "Default best before days" set' => 'Automatically do the booking using the last price and the amount of the shopping list item, if the product has "Default best before days" set', | ||||
| 	'Skip' => 'Skip', | ||||
| 	'Servings' => 'Servings', | ||||
| 	'Costs' => 'Costs', | ||||
| 	'Based on the prices of the last purchase per product' => 'Based on the prices of the last purchase per product', | ||||
| 	'The ingredients listed here result in this amount of servings' => 'The ingredients listed here result in this amount of servings', | ||||
| 	'Do not check against the shopping list when adding missing items to it' => 'Do not check against the shopping list when adding missing items to it', | ||||
| 	'By default the amount to be added to the shopping list is "needed amount - stock amount - shopping list amount" - when this is enabled, it is only checked against the stock amount, not against what is already on the shopping list' => 'By default the amount to be added to the shopping list is "needed amount - stock amount - shopping list amount" - when this is enabled, it is only checked against the stock amount, not against what is already on the shopping list', | ||||
| 	'Picture' => 'Picture', | ||||
| 	'Uncheck ingredients to not put them on the shopping list' => 'Uncheck ingredients to not put them on the shopping list', | ||||
| 	'This is for statistical purposes only' => 'This is for statistical purposes only', | ||||
| 	'You have to select a recipe' => 'You have to select a recipe', | ||||
| 	'Key type' => 'Key type', | ||||
| 	'Share/Integrate calendar (iCal)' => 'Share/Integrate calendar (iCal)', | ||||
| 	'Use the following (public) URL to share or integrate the calendar in iCal format' => 'Use the following (public) URL to share or integrate the calendar in iCal format', | ||||
| 	'Allow partial units in stock' => 'Allow partial units in stock', | ||||
| 	'Enable tare weight handling' => 'Enable tare weight handling', | ||||
| 	'This is useful e.g. for flour in jars - on purchase/consume/inventory you always weigh the whole jar, the amount to be posted is then automatically calculated based on what is in stock and the tare weight defined below' => 'This is useful e.g. for flour in jars - on purchase/consume/inventory you always weigh the whole jar, the amount to be posted is then automatically calculated based on what is in stock and the tare weight defined below', | ||||
| 	'Tare weight' => 'Tare weight', | ||||
| 	'Tare weight handling enabled - please weigh the whole container, the amount to be posted will be automatically calculcated' => 'Tare weight handling enabled - please weigh the whole container, the amount to be posted will be automatically calculcated', | ||||
| 	'You have to select a location' => 'You have to select a location', | ||||
| 	'List' => 'List', | ||||
| 	'Gallery' => 'Gallery' | ||||
| ); | ||||
| @@ -1,273 +0,0 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'Stock overview' => 'Bestand', | ||||
| 	'#1 products expiring within the next #2 days' => '#1 Produkte laufen innerhalb der nächsten #2 Tage ab', | ||||
| 	'#1 products are already expired' => '#1 Produkte sind bereits abgelaufen', | ||||
| 	'#1 products are below defined min. stock amount' => '#1 Produkte sind unter Mindestbestand', | ||||
| 	'Product' => 'Produkt', | ||||
| 	'Amount' => 'Menge', | ||||
| 	'Next best before date' => 'Nächstes MHD', | ||||
| 	'Logout' => 'Abmelden', | ||||
| 	'Habits overview' => 'Gewohnheiten', | ||||
| 	'Batteries overview' => 'Batterien', | ||||
| 	'Purchase' => 'Einkauf', | ||||
| 	'Consume' => 'Verbrauch', | ||||
| 	'Inventory' => 'Inventur', | ||||
| 	'Shopping list' => 'Einkaufszettel', | ||||
| 	'Habit tracking' => 'Gewohnheit-Ausführung', | ||||
| 	'Battery tracking' => 'Batterie-Ladzyklus', | ||||
| 	'Products' => 'Produkte', | ||||
| 	'Locations' => 'Standorte', | ||||
| 	'Quantity units' => 'Mengeneinheiten', | ||||
| 	'Habits' => 'Gewohnheiten', | ||||
| 	'Batteries' => 'Batterien', | ||||
| 	'Habit' => 'Gewohnheit', | ||||
| 	'Next estimated tracking' => 'Nächste geplante Ausführung', | ||||
| 	'Last tracked' => 'Zuletzt ausgeführt', | ||||
| 	'Battery' => 'Batterie', | ||||
| 	'Last charged' => 'Zuletzt geladen', | ||||
| 	'Next planned charge cycle' => 'Nächster geplanter Ladezyklus', | ||||
| 	'Best before' => 'MHD', | ||||
| 	'OK' => 'OK', | ||||
| 	'Product overview' => 'Produktübersicht', | ||||
| 	'Stock quantity unit' => 'Mengeneinheit Bestand', | ||||
| 	'Stock amount' => 'Bestand', | ||||
| 	'Last purchased' => 'Zuletzt gekauft', | ||||
| 	'Last used' => 'Zuletzt benutzt', | ||||
| 	'Spoiled' => 'Verdorben', | ||||
| 	'Barcode lookup is disabled' => 'Barcode-Suche ist deaktiviert', | ||||
| 	'will be added to the list of barcodes for the selected product on submit' => 'wird der Liste der Barcodes für das ausgewählte Produkt beim Speichern hinzugefügt', | ||||
| 	'New amount' => 'Neue Menge', | ||||
| 	'Note' => 'Notiz', | ||||
| 	'Tracked time' => 'Ausführungszeit', | ||||
| 	'Habit overview' => 'Gewohnheit Übersicht', | ||||
| 	'Tracked count' => 'Ausführungsanzahl', | ||||
| 	'Battery overview' => 'Batterie Übersicht', | ||||
| 	'Charge cycles count' => 'Ladezyklen', | ||||
| 	'Create shopping list item' => 'Einkaufszettel Eintrag erstellen', | ||||
| 	'Edit shopping list item' => 'Einkaufszettel Eintrag bearbeiten', | ||||
| 	'#1 units were automatically added and will apply in addition to the amount entered here' => '#1 Einheiten wurden automatisch hinzugefügt und gelten zusätzlich der hier eingegebenen Menge', | ||||
| 	'Save' => 'Speichern', | ||||
| 	'Add' => 'Hinzufügen', | ||||
| 	'Name' => 'Name', | ||||
| 	'Location' => 'Standort', | ||||
| 	'Min. stock amount' => 'Mindestbestand', | ||||
| 	'QU purchase' => 'ME Einkauf', | ||||
| 	'QU stock' => 'ME Bestand', | ||||
| 	'QU factor' => 'ME-Faktor', | ||||
| 	'Description' => 'Beschreibung', | ||||
| 	'Create product' => 'Produkt erstellen', | ||||
| 	'Barcode(s)' => 'Barcode(s)', | ||||
| 	'Minimum stock amount' => 'Mindestbestand', | ||||
| 	'Default best before days' => 'Standard Haltbarkeit in Tagen', | ||||
| 	'Quantity unit purchase' => 'Mengeneinheit Einkauf', | ||||
| 	'Quantity unit stock' => 'Mengeneinheit Bestand', | ||||
| 	'Factor purchase to stock quantity unit' => 'Faktor Mengeneinheit Einkauf zu Mengeneinheit Bestand', | ||||
| 	'Create location' => 'Standort erstellen', | ||||
| 	'Create quantity unit' => 'Mengeneinheit erstellen', | ||||
| 	'Period type' => 'Periodentyp', | ||||
| 	'Period days' => 'Tage/Periode', | ||||
| 	'Create habit' => 'Gewohnheit erstellen', | ||||
| 	'Used in' => 'Benutzt in', | ||||
| 	'Create battery' => 'Batterie erstellen', | ||||
| 	'Edit battery' => 'Batterie bearbeiten', | ||||
| 	'Edit habit' => 'Gewohnheit bearbeiten', | ||||
| 	'Edit quantity unit' => 'Mengeneinheit bearbeiten', | ||||
| 	'Edit product' => 'Produkt bearbeiten', | ||||
| 	'Edit location' => 'Standort bearbeiten', | ||||
| 	'Record data' => 'Daten erfassen', | ||||
| 	'Manage master data' => 'Stammdaten verwalten', | ||||
| 	'This will apply to added products' => 'Dies gilt für hinzugefügte Produkte', | ||||
| 	'never' => 'nie', | ||||
| 	'Add products that are below defined min. stock amount' => 'Produkte unter Mindestbestand hinzufügen', | ||||
| 	'For purchases this amount of days will be added to today for the best before date suggestion' => 'Bei Einkäufen wird hierauf basierend das MHD vorausgefüllt', | ||||
| 	'This means 1 #1 purchased will be converted into #2 #3 in stock' => 'Das bedeutet 1 #1 im Einkauf entsprechen #2 #3 im Bestand', | ||||
| 	'Login' => 'Anmelden', | ||||
| 	'Username' => 'Benutzername', | ||||
| 	'Password' => 'Passwort', | ||||
| 	'Invalid credentials, please try again' => 'Ungültige Zugangsdaten, bitte versuche es erneut', | ||||
| 	'Are you sure to delete battery "#1"?' => 'Battery "#1" wirklich löschen?', | ||||
| 	'Yes' => 'Ja', | ||||
| 	'No' => 'Nein', | ||||
| 	'Are you sure to delete habit "#1"?' => 'Gewohnheit "#1" wirklich löschen?', | ||||
| 	'"#1" could not be resolved to a product, how do you want to proceed?' => '"#1" konnte nicht zu einem Produkt aufgelöst werden, wie möchtest du weiter machen?', | ||||
| 	'Create or assign product' => 'Produkt erstellen oder verknüpfen', | ||||
| 	'Cancel' => 'Abbrechen', | ||||
| 	'Add as new product' => 'Als neues Produkt hinzufügen', | ||||
| 	'Add as barcode to existing product' => 'Barcode vorhandenem Produkt zuweisen', | ||||
| 	'Add as new product and prefill barcode' => 'Neues Produkt erstellen und Barcode vorbelegen', | ||||
| 	'Are you sure to delete quantity unit "#1"?' => 'Mengeneinheit "#1" wirklich löschen?', | ||||
| 	'Are you sure to delete product "#1"?' => 'Produkt "#1" wirklich löschen?', | ||||
| 	'Are you sure to delete location "#1"?' => 'Standort "#1" wirklich löschen?', | ||||
| 	'Manage API keys' => 'API-Keys verwalten', | ||||
|     'REST API & data model documentation' => 'REST-API & Datenmodell Dokumentation', | ||||
|     'API keys' => 'API-Keys', | ||||
|     'Create new API key' => 'Neuen API-Key erstellen', | ||||
|     'API key' => 'API-Key', | ||||
|     'Expires' => 'Läuft ab', | ||||
|     'Created' => 'Erstellt', | ||||
| 	'This product is not in stock' => 'Dieses Produkt ist nicht vorrätig', | ||||
| 	'This means #1 will be added to stock' => 'Das bedeutet #1 wird dem Bestand hinzugefügt', | ||||
| 	'This means #1 will be removed from stock' => 'Das bedeutet #1 wird aus dem Bestand entfernt', | ||||
| 	'This means it is estimated that a new execution of this habit is tracked #1 days after the last was tracked' => 'Das bedeutet, dass eine erneute Ausführung der Gewohnheit #1 Tage nach der letzten Ausführung geplant wird', | ||||
| 	'Removed #1 #2 of #3 from stock' => '#1 #2 #3 aus dem Bestand entfernt', | ||||
| 	'About grocy' => 'Über grocy', | ||||
| 	'Close' => 'Schließen', | ||||
| 	'#1 batteries are due to be charged within the next #2 days' => '#1 Batterien müssen in den nächsten #2 Tagen geladen werden', | ||||
| 	'#1 batteries are overdue to be charged' => '#1 Batterien sind überfällig', | ||||
| 	'#1 habits are due to be done within the next #2 days' => '#1 Gewohnheiten stehen in den nächsten #2 Tagen an', | ||||
| 	'#1 habits are overdue to be done' => '#1 Gewohnheiten sind überfällig', | ||||
| 	'Released on' => 'Veröffentlicht am', | ||||
| 	'Consume #3 #1 of #2' => 'Verbrauche #3 #1 #2', | ||||
| 	'Added #1 #2 of #3 to stock' => '#1 #2 #3 dem Bestand hinzugefügt', | ||||
| 	'Stock amount of #1 is now #2 #3' => 'Es sind nun #2 #3 #1 im Bestand', | ||||
| 	'Tracked execution of habit #1 on #2' => 'Ausführung von #1 am #2 erfasst', | ||||
| 	'Tracked charge cylce of battery #1 on #2' => 'Ladezyklus für Batterie #1 am #2 erfasst', | ||||
| 	'Consume all #1 which are currently in stock' => 'Verbrauche den kompletten Bestand von #1', | ||||
| 	'All' => 'Alle', | ||||
| 	'Track charge cycle of battery #1' => 'Erfasse einen Ladezyklus für Batterie #1', | ||||
| 	'Track execution of habit #1' => 'Erfasse eine Ausführung von #1', | ||||
| 	'Filter by location' => 'Nach Standort filtern', | ||||
| 	'Search' => 'Suche', | ||||
| 	'Not logged in' => 'Nicht angemeldet', | ||||
| 	'You have to select a product' => 'Ein Produkt muss ausgewählt werden', | ||||
| 	'You have to select a habit' => 'Eine Gewohnheit muss ausgewählt werden', | ||||
| 	'You have to select a battery' => 'Eine Batterie muss ausgewählt werden', | ||||
| 	'A name is required' => 'Ein Name ist erforderlich', | ||||
| 	'A location is required' => 'Ein Standort ist erforderlich', | ||||
| 	'The amount cannot be lower than #1' => 'Die Menge darf nicht kleiner als #1 sein', | ||||
| 	'This cannot be negative' => 'Dies darf nicht negativ sein', | ||||
| 	'A quantity unit is required' => 'Eine Mengeneinheit muss ausgewählt werden', | ||||
| 	'A period type is required' => 'Eine Periodentyp muss ausgewählt werden', | ||||
| 	'A best before date is required and must be later than today' => 'Ein Mindesthaltbarkeitsdatum ist erforderlich und muss später als heute sein', | ||||
| 	'Settings' => 'Einstellungen', | ||||
| 	'This can only be before now' => 'Dies kann nur vor jetzt sein', | ||||
| 	'Calendar' => 'Kalender', | ||||
| 	'Recipes' => 'Rezepte', | ||||
| 	'Edit recipe' => 'Rezept bearbeiten', | ||||
| 	'New recipe' => 'Neues Rezept', | ||||
| 	'Ingredients list' => 'Zutatenliste', | ||||
| 	'Add recipe ingredient' => 'Rezeptzutat hinzufügen', | ||||
| 	'Edit recipe ingredient' => 'Rezeptzutat bearbeiten', | ||||
| 	'Are you sure to delete recipe "#1"?' => 'Rezept "#1" wirklich löschen?', | ||||
| 	'Are you sure to delete recipe ingredient "#1"?' => 'Rezeptzutat "#1" wirklich löschen?', | ||||
| 	'Are you sure to empty the shopping list?' => 'Sicher, dass den Einkaufszettel geleert werden soll?', | ||||
| 	'Clear list' => 'Liste leeren', | ||||
| 	'Requirements fulfilled' => 'Bedarf im Bestand', | ||||
| 	'Put missing products on shopping list' => 'Fehlende Produkte auf den Einkaufszettel setzen', | ||||
| 	'Not enough in stock, #1 ingredients missing' => 'Nicht ausreichend im Bestand, #1 Zutaten fehlen', | ||||
| 	'Enough in stock' => 'Bestand reicht aus', | ||||
| 	'Not enough in stock, #1 ingredients missing but already on the shopping list' => 'Bestand nicht ausreichend, #1 Zutaten fehlen, stehen aber bereits auf dem Einkaufszettel', | ||||
| 	'Expand to fullscreen' => 'Auf ganzen Bildschirm vergrößern', | ||||
| 	'Ingredients' => 'Zutaten', | ||||
| 	'Preparation' => 'Zubereitung', | ||||
| 	'Recipe' => 'Rezept', | ||||
| 	'Not enough in stock, #1 missing, #2 already on shopping list' => 'Nicht ausreichend im Bestand, #1 fehlen, #2 stehen bereits auf dem Einkaufszettel', | ||||
| 	'Show notes' => 'Notizen anzeigen', | ||||
| 	'Put missing amount on shopping list' => 'Fehlende Menge auf den Einkaufszettel setzen', | ||||
| 	'Are you sure to put all missing ingredients for recipe "#1" on the shopping list?' => 'Sicher alle fehlenden Zutaten für Rezept "#1" auf die Einkaufsliste zu setzen?', | ||||
| 	'Added for recipe #1' => 'Hinzugefügt für Rezept #1', | ||||
| 	'Manage users' => 'Benutzer verwalten', | ||||
| 	'User' => 'Benutzer', | ||||
| 	'Users' => 'Benutzer', | ||||
| 	'Are you sure to delete user "#1"?' => 'Benutzer "#1" wirklich löschen?', | ||||
| 	'Create user' => 'Benutzer erstellen', | ||||
| 	'Edit user' => 'Benutzer bearbeiten', | ||||
| 	'First name' => 'Vorname', | ||||
| 	'Last name' => 'Nachname', | ||||
| 	'A username is required' => 'Ein Benutzername ist erforderlich', | ||||
| 	'Confirm password' => 'Passwort bestätigen', | ||||
| 	'Passwords do not match' => 'Passwörter stimmen nicht überein', | ||||
| 	'Change password' => 'Passwort ändern', | ||||
| 	'Done by' => 'Ausgeführt von', | ||||
| 	'Last done by' => 'Zuletzt ausgeführt von', | ||||
| 	'Unknown' => 'Unbekannt', | ||||
| 	'Filter by habit' => 'Nach Gewohnheit filtern', | ||||
| 	'Habits analysis' => 'Gewohnheiten Analyse', | ||||
| 	'0 means suggestions for the next charge cycle are disabled' => '0 bedeutet dass Vorschläge für den nächsten Ladezyklus deaktiviert sind', | ||||
| 	'Charge cycle interval (days)' => 'Ladezyklusintervall (Tage)', | ||||
| 	'Last price' => 'Letzter Preis', | ||||
| 	'Price history' => 'Preisentwicklung', | ||||
| 	'No price history available' => 'Keine Preisdaten verfügbar', | ||||
| 	'Price' => 'Preis', | ||||
| 	'in #1 per purchase quantity unit' => 'in #1 pro Einkaufsmengeneinheit', | ||||
| 	'The price cannot be lower than #1' => 'Der Preis darf nicht niedriger als #1 sein', | ||||
| 	'#1 product expires within the next #2 days' => '#1 Produkt läuft innerhalb der nächsten #2 Tage ab', | ||||
| 	'#1 product is already expired' => '#1 Produkt ist bereits abgelaufen', | ||||
| 	'#1 product is below defined min. stock amount' => '#1 Produkt ist unter Mindestbestand', | ||||
| 	'Unit' => 'Einheit', | ||||
| 	'Units' => 'Einheiten', | ||||
| 	'#1 habit is due to be done within the next #2 days' => '#1 Gewohnheit steht in den nächsten #2 Tagen an', | ||||
| 	'#1 habit is overdue to be done' => '#1 Gewohnheit ist überfällig', | ||||
| 	'#1 battery is due to be charged within the next #2 days' => '#1 Batterie muss in den nächsten #2 Tagen geladen werden', | ||||
| 	'#1 battery is overdue to be charged' => '#1 Batterie ist überfällig', | ||||
| 	'#1 unit was automatically added and will apply in addition to the amount entered here' => '#1 Einheit wurde automatisch hinzugefügt und gilt zusätzlich der hier eingegebenen Menge', | ||||
| 	'in singular form' => 'in der Einzahl', | ||||
| 	'in plural form' => 'in der Mehrzahl', | ||||
| 	 | ||||
| 	//Constants | ||||
| 	'manually' => 'Manuell', | ||||
| 	'dynamic-regular' => 'Dynamisch regelmäßig', | ||||
| 	 | ||||
| 	//Technical component translations | ||||
| 	'timeago_locale' => 'de', | ||||
| 	'timeago_nan' => 'vor NaN Jahren', | ||||
| 	'moment_locale' => 'de', | ||||
| 	'datatables_localization' => '{"sEmptyTable":"Keine Daten in der Tabelle vorhanden","sInfo":"_START_ bis _END_ von _TOTAL_ Einträgen","sInfoEmpty":"Keine Daten vorhanden","sInfoFiltered":"(gefiltert von _MAX_ Einträgen)","sInfoPostFix":"","sInfoThousands":".","sLengthMenu":"_MENU_ Einträge anzeigen","sLoadingRecords":"Wird geladen ..","sProcessing":"Bitte warten ..","sSearch":"Suchen","sZeroRecords":"Keine Einträge vorhanden","oPaginate":{"sFirst":"Erste","sPrevious":"Zurück","sNext":"Nächste","sLast":"Letzte"},"oAria":{"sSortAscending":": aktivieren, um Spalte aufsteigend zu sortieren","sSortDescending":": aktivieren, um Spalte absteigend zu sortieren"},"select":{"rows":{"0":"Zum Auswählen auf eine Zeile klicken","1":"1 Zeile ausgewählt","_":"%d Zeilen ausgewählt"}},"buttons":{"print":"Drucken","colvis":"Spalten","copy":"Kopieren","copyTitle":"In Zwischenablage kopieren","copyKeys":"Taste <i>ctrl</i> oder <i>⌘</i> + <i>C</i> um Tabelle<br>in Zwischenspeicher zu kopieren.<br><br>Um abzubrechen die Nachricht anklicken oder Escape drücken.","copySuccess":{"1":"1 Spalte kopiert","_":"%d Spalten kopiert"}}}', | ||||
| 	 | ||||
| 	//Demo data | ||||
| 	'Cookies' => 'Cookies', | ||||
| 	'Chocolate' => 'Schokolade', | ||||
| 	'Pantry' => 'Vorratskammer', | ||||
| 	'Candy cupboard' => 'Süßigkeitenschrank', | ||||
| 	'Tinned food cupboard' => 'Konservenschrank', | ||||
| 	'Fridge' => 'Kühlschrank', | ||||
| 	'Piece' => 'Stück', | ||||
| 	'Pieces' => 'Stücke', | ||||
| 	'Pack' => 'Packung', | ||||
| 	'Packs' => 'Packungen', | ||||
| 	'Glass' => 'Glas', | ||||
| 	'Glasses' => 'Gläser', | ||||
| 	'Tin' => 'Dose', | ||||
| 	'Tins' => 'Dosen', | ||||
| 	'Can' => 'Becher', | ||||
| 	'Cans' => 'Becher', | ||||
| 	'Bunch' => 'Bund', | ||||
| 	'Bunches' => 'Bunde', | ||||
| 	'Gummy bears' => 'Gummibärchen', | ||||
| 	'Crisps' => 'Chips', | ||||
| 	'Eggs' => 'Eier', | ||||
| 	'Noodles' => 'Nudeln', | ||||
| 	'Pickles' => 'Essiggurken', | ||||
| 	'Gulash soup' => 'Gulaschsuppe', | ||||
| 	'Yogurt' => 'Joghurt', | ||||
| 	'Cheese' => 'Käse', | ||||
| 	'Cold cuts' => 'Aufschnitt', | ||||
| 	'Paprika' => 'Paprika', | ||||
| 	'Cucumber' => 'Gurke', | ||||
| 	'Radish' => 'Radieschen', | ||||
| 	'Tomato' => 'Tomaten', | ||||
| 	'Changed towels in the bathroom' => 'Handtücher im Bad gewechselt', | ||||
| 	'Cleaned the kitchen floor' => 'Küchenboden gewischt', | ||||
| 	'Warranty ends' => 'Garantie endet', | ||||
| 	'TV remote control' => 'TV Fernbedienung', | ||||
| 	'Alarm clock' => 'Wecker', | ||||
| 	'Heat remote control' => 'Fernbedienung Heizung', | ||||
| 	'Lawn mowed in the garden' => 'Rasen im Garten gemäht', | ||||
| 	'Some good snacks' => 'Paar gute Snacks', | ||||
| 	'Pizza dough' => 'Pizzateig', | ||||
| 	'Sieved tomatoes' => 'Passierte Tomaten', | ||||
| 	'Salami' => 'Salami', | ||||
| 	'Toast' => 'Toast', | ||||
| 	'Minced meat' => 'Hackfleisch', | ||||
| 	'Pizza' => 'Pizza', | ||||
| 	'Spaghetti bolognese' => 'Spaghetti Bolognese', | ||||
| 	'Sandwiches' => 'Belegte Toasts', | ||||
| 	'English' => 'Englisch', | ||||
| 	'German' => 'Deutsch', | ||||
| 	'Italian' => 'Italienisch', | ||||
| 	'Demo in different language' => 'Demo in anderer Sprache', | ||||
| 	'This is the note content of the recipe ingredient' => 'Dies ist der Inhalt der Notiz der Zutat', | ||||
| 	'Demo User' => 'Demo Benutzer' | ||||
| ); | ||||
							
								
								
									
										6
									
								
								localization/de/chore_types.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								localization/de/chore_types.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'manually' => 'Manuell', | ||||
| 	'dynamic-regular' => 'Dynamisch regelmäßig' | ||||
| ); | ||||
							
								
								
									
										10
									
								
								localization/de/component_translations.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								localization/de/component_translations.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'timeago_locale' => 'de', | ||||
| 	'timeago_nan' => 'vor NaN Jahren', | ||||
| 	'moment_locale' => 'de', | ||||
| 	'datatables_localization' => '{"sEmptyTable":"Keine Daten in der Tabelle vorhanden","sInfo":"_START_ bis _END_ von _TOTAL_ Einträgen","sInfoEmpty":"Keine Daten vorhanden","sInfoFiltered":"(gefiltert von _MAX_ Einträgen)","sInfoPostFix":"","sInfoThousands":".","sLengthMenu":"_MENU_ Einträge anzeigen","sLoadingRecords":"Wird geladen ..","sProcessing":"Bitte warten ..","sSearch":"Suchen","sZeroRecords":"Keine Einträge vorhanden","oPaginate":{"sFirst":"Erste","sPrevious":"Zurück","sNext":"Nächste","sLast":"Letzte"},"oAria":{"sSortAscending":": aktivieren, um Spalte aufsteigend zu sortieren","sSortDescending":": aktivieren, um Spalte absteigend zu sortieren"},"select":{"rows":{"0":"Zum Auswählen auf eine Zeile klicken","1":"1 Zeile ausgewählt","_":"%d Zeilen ausgewählt"}},"buttons":{"print":"Drucken","colvis":"Spalten","copy":"Kopieren","copyTitle":"In Zwischenablage kopieren","copyKeys":"Taste <i>ctrl</i> oder <i>⌘</i> + <i>C</i> um Tabelle<br>in Zwischenspeicher zu kopieren.<br><br>Um abzubrechen die Nachricht anklicken oder Escape drücken.","copySuccess":{"1":"1 Spalte kopiert","_":"%d Spalten kopiert"}}}', | ||||
| 	'summernote_locale' => 'de-DE', | ||||
| 	'fullcalendar_locale' => 'de' | ||||
| ); | ||||
							
								
								
									
										89
									
								
								localization/de/demo_data.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								localization/de/demo_data.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,89 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'Cookies' => 'Cookies', | ||||
| 	'Chocolate' => 'Schokolade', | ||||
| 	'Pantry' => 'Vorratskammer', | ||||
| 	'Candy cupboard' => 'Süßigkeitenschrank', | ||||
| 	'Tinned food cupboard' => 'Konservenschrank', | ||||
| 	'Fridge' => 'Kühlschrank', | ||||
| 	'Piece' => 'Stück', | ||||
| 	'Pieces' => 'Stücke', | ||||
| 	'Pack' => 'Packung', | ||||
| 	'Packs' => 'Packungen', | ||||
| 	'Glass' => 'Glas', | ||||
| 	'Glasses' => 'Gläser', | ||||
| 	'Tin' => 'Dose', | ||||
| 	'Tins' => 'Dosen', | ||||
| 	'Can' => 'Becher', | ||||
| 	'Cans' => 'Becher', | ||||
| 	'Bunch' => 'Bund', | ||||
| 	'Bunches' => 'Bunde', | ||||
| 	'Gummy bears' => 'Gummibärchen', | ||||
| 	'Crisps' => 'Chips', | ||||
| 	'Eggs' => 'Eier', | ||||
| 	'Noodles' => 'Nudeln', | ||||
| 	'Pickles' => 'Essiggurken', | ||||
| 	'Gulash soup' => 'Gulaschsuppe', | ||||
| 	'Yogurt' => 'Joghurt', | ||||
| 	'Cheese' => 'Käse', | ||||
| 	'Cold cuts' => 'Aufschnitt', | ||||
| 	'Paprika' => 'Paprika', | ||||
| 	'Cucumber' => 'Gurke', | ||||
| 	'Radish' => 'Radieschen', | ||||
| 	'Tomato' => 'Tomaten', | ||||
| 	'Changed towels in the bathroom' => 'Handtücher im Bad gewechselt', | ||||
| 	'Cleaned the kitchen floor' => 'Küchenboden gewischt', | ||||
| 	'Warranty ends' => 'Garantie endet', | ||||
| 	'TV remote control' => 'TV Fernbedienung', | ||||
| 	'Alarm clock' => 'Wecker', | ||||
| 	'Heat remote control' => 'Fernbedienung Heizung', | ||||
| 	'Lawn mowed in the garden' => 'Rasen im Garten gemäht', | ||||
| 	'Some good snacks' => 'Paar gute Snacks', | ||||
| 	'Pizza dough' => 'Pizzateig', | ||||
| 	'Sieved tomatoes' => 'Passierte Tomaten', | ||||
| 	'Salami' => 'Salami', | ||||
| 	'Toast' => 'Toast', | ||||
| 	'Minced meat' => 'Hackfleisch', | ||||
| 	'Pizza' => 'Pizza', | ||||
| 	'Spaghetti bolognese' => 'Spaghetti Bolognese', | ||||
| 	'Sandwiches' => 'Belegte Toasts', | ||||
| 	'English' => 'Englisch', | ||||
| 	'German' => 'Deutsch', | ||||
| 	'Italian' => 'Italienisch', | ||||
| 	'Demo in different language' => 'Demo in anderer Sprache', | ||||
| 	'This is the note content of the recipe ingredient' => 'Dies ist der Inhalt der Notiz der Zutat', | ||||
| 	'Demo User' => 'Demo Benutzer', | ||||
| 	'Gram' => 'Gramm', | ||||
| 	'Grams' => 'Gramm', | ||||
| 	'Flour' => 'Mehl', | ||||
| 	'Pancakes' => 'Pfannkuchen', | ||||
| 	'Sugar' => 'Zucker', | ||||
| 	'Home' => 'Zuhause', | ||||
| 	'Life' => 'Leben', | ||||
| 	'Projects' => 'Projekte', | ||||
| 	'Repair the garage door' => 'Garagentor reparieren', | ||||
| 	'Fork and improve grocy' => 'grocy forken und verbessern', | ||||
| 	'Find a solution for what to do when I forget the door keys' => 'Eine Lösung für "Haustürschlüssel vergessen" finden', | ||||
| 	'Sweets' => 'Süßigkeiten', | ||||
| 	'Bakery products' => 'Bäckerei Produkte', | ||||
| 	'Tinned food' => 'Konservern', | ||||
| 	'Butchery products' => 'Metzgerei', | ||||
| 	'Vegetables/Fruits' => 'Obst/Gemüse', | ||||
| 	'Refrigerated products' => 'Kühlregal', | ||||
| 	'Coffee machine' => 'Kaffeemaschine', | ||||
| 	'Dishwasher' => 'Spülmaschine', | ||||
| 	'Liter' => 'Liter', | ||||
| 	'Liters' => 'Liter', | ||||
| 	'Bottle' => 'Flasche', | ||||
| 	'Bottles' => 'Flaschen', | ||||
| 	'Milk' => 'Milch', | ||||
| 	'Chocolate sauce' => 'Schokoladensoße', | ||||
| 	'Milliliters' => 'Milliliter', | ||||
| 	'Milliliter' => 'Milliliter', | ||||
| 	'Bottom' => 'Boden', | ||||
| 	'Topping' => 'Belag', | ||||
| 	'French' => 'Französisch', | ||||
| 	'Turkish' => 'Türkisch', | ||||
| 	'Spanish' => 'Spanisch' | ||||
| ); | ||||
							
								
								
									
										8
									
								
								localization/de/stock_transaction_types.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								localization/de/stock_transaction_types.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'purchase' => 'Einkauf', | ||||
| 	'consume' => 'Verbrauch', | ||||
| 	'inventory-correction' => 'Inventur-Korrektur', | ||||
| 	'product-opened' => 'Produkt geöffnet' | ||||
| ); | ||||
							
								
								
									
										349
									
								
								localization/de/strings.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										349
									
								
								localization/de/strings.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,349 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'Stock overview' => 'Bestand', | ||||
| 	'#1 products expiring within the next #2 days' => '#1 Produkte laufen innerhalb der nächsten #2 Tage ab', | ||||
| 	'#1 products are already expired' => '#1 Produkte sind bereits abgelaufen', | ||||
| 	'#1 products are below defined min. stock amount' => '#1 Produkte sind unter Mindestbestand', | ||||
| 	'Product' => 'Produkt', | ||||
| 	'Amount' => 'Menge', | ||||
| 	'Next best before date' => 'Nächstes MHD', | ||||
| 	'Logout' => 'Abmelden', | ||||
| 	'Chores overview' => 'Hausarbeiten', | ||||
| 	'Batteries overview' => 'Batterien', | ||||
| 	'Purchase' => 'Einkauf', | ||||
| 	'Consume' => 'Verbrauch', | ||||
| 	'Inventory' => 'Inventur', | ||||
| 	'Shopping list' => 'Einkaufszettel', | ||||
| 	'Chore tracking' => 'Hausarbeiten-Ausführung', | ||||
| 	'Battery tracking' => 'Batterie-Ladzyklus', | ||||
| 	'Products' => 'Produkte', | ||||
| 	'Locations' => 'Standorte', | ||||
| 	'Quantity units' => 'Mengeneinheiten', | ||||
| 	'Chores' => 'Hausarbeiten', | ||||
| 	'Batteries' => 'Batterien', | ||||
| 	'Chore' => 'Hausarbeit', | ||||
| 	'Next estimated tracking' => 'Nächste geplante Ausführung', | ||||
| 	'Last tracked' => 'Zuletzt ausgeführt', | ||||
| 	'Battery' => 'Batterie', | ||||
| 	'Last charged' => 'Zuletzt geladen', | ||||
| 	'Next planned charge cycle' => 'Nächster geplanter Ladezyklus', | ||||
| 	'Best before' => 'MHD', | ||||
| 	'OK' => 'OK', | ||||
| 	'Product overview' => 'Produktübersicht', | ||||
| 	'Stock quantity unit' => 'Mengeneinheit Bestand', | ||||
| 	'Stock amount' => 'Bestand', | ||||
| 	'Last purchased' => 'Zuletzt gekauft', | ||||
| 	'Last used' => 'Zuletzt benutzt', | ||||
| 	'Spoiled' => 'Verdorben', | ||||
| 	'Barcode lookup is disabled' => 'Barcode-Suche ist deaktiviert', | ||||
| 	'will be added to the list of barcodes for the selected product on submit' => 'wird der Liste der Barcodes für das ausgewählte Produkt beim Speichern hinzugefügt', | ||||
| 	'New amount' => 'Neue Menge', | ||||
| 	'Note' => 'Notiz', | ||||
| 	'Tracked time' => 'Ausführungszeit', | ||||
| 	'Chore overview' => 'Hausarbeit Übersicht', | ||||
| 	'Tracked count' => 'Ausführungsanzahl', | ||||
| 	'Battery overview' => 'Batterie Übersicht', | ||||
| 	'Charge cycles count' => 'Ladezyklen', | ||||
| 	'Create shopping list item' => 'Einkaufszettel Eintrag erstellen', | ||||
| 	'Edit shopping list item' => 'Einkaufszettel Eintrag bearbeiten', | ||||
| 	'Save' => 'Speichern', | ||||
| 	'Add' => 'Hinzufügen', | ||||
| 	'Name' => 'Name', | ||||
| 	'Location' => 'Standort', | ||||
| 	'Min. stock amount' => 'Mindestbestand', | ||||
| 	'QU purchase' => 'ME Einkauf', | ||||
| 	'QU stock' => 'ME Bestand', | ||||
| 	'QU factor' => 'ME-Faktor', | ||||
| 	'Description' => 'Beschreibung', | ||||
| 	'Create product' => 'Produkt erstellen', | ||||
| 	'Barcode(s)' => 'Barcode(s)', | ||||
| 	'Minimum stock amount' => 'Mindestbestand', | ||||
| 	'Default best before days' => 'Standard Haltbarkeit in Tagen', | ||||
| 	'Quantity unit purchase' => 'Mengeneinheit Einkauf', | ||||
| 	'Quantity unit stock' => 'Mengeneinheit Bestand', | ||||
| 	'Factor purchase to stock quantity unit' => 'Faktor Mengeneinheit Einkauf zu Mengeneinheit Bestand', | ||||
| 	'Create location' => 'Standort erstellen', | ||||
| 	'Create quantity unit' => 'Mengeneinheit erstellen', | ||||
| 	'Period type' => 'Periodentyp', | ||||
| 	'Period days' => 'Tage/Periode', | ||||
| 	'Create chore' => 'Hausarbeit erstellen', | ||||
| 	'Used in' => 'Benutzt in', | ||||
| 	'Create battery' => 'Batterie erstellen', | ||||
| 	'Edit battery' => 'Batterie bearbeiten', | ||||
| 	'Edit chore' => 'Hausarbeit bearbeiten', | ||||
| 	'Edit quantity unit' => 'Mengeneinheit bearbeiten', | ||||
| 	'Edit product' => 'Produkt bearbeiten', | ||||
| 	'Edit location' => 'Standort bearbeiten', | ||||
| 	'Record data' => 'Daten erfassen', | ||||
| 	'Manage master data' => 'Stammdaten verwalten', | ||||
| 	'This will apply to added products' => 'Dies gilt für hinzugefügte Produkte', | ||||
| 	'never' => 'nie', | ||||
| 	'Add products that are below defined min. stock amount' => 'Produkte unter Mindestbestand hinzufügen', | ||||
| 	'For purchases this amount of days will be added to today for the best before date suggestion' => 'Bei Einkäufen wird hierauf basierend das MHD vorausgefüllt', | ||||
| 	'This means 1 #1 purchased will be converted into #2 #3 in stock' => 'Das bedeutet 1 #1 im Einkauf entsprechen #2 #3 im Bestand', | ||||
| 	'Login' => 'Anmelden', | ||||
| 	'Username' => 'Benutzername', | ||||
| 	'Password' => 'Passwort', | ||||
| 	'Invalid credentials, please try again' => 'Ungültige Zugangsdaten, bitte versuche es erneut', | ||||
| 	'Are you sure to delete battery "#1"?' => 'Battery "#1" wirklich löschen?', | ||||
| 	'Yes' => 'Ja', | ||||
| 	'No' => 'Nein', | ||||
| 	'Are you sure to delete chore "#1"?' => 'Hausarbeit "#1" wirklich löschen?', | ||||
| 	'"#1" could not be resolved to a product, how do you want to proceed?' => '"#1" konnte nicht zu einem Produkt aufgelöst werden, wie möchtest du weiter machen?', | ||||
| 	'Create or assign product' => 'Produkt erstellen oder verknüpfen', | ||||
| 	'Cancel' => 'Abbrechen', | ||||
| 	'Add as new product' => 'Als neues Produkt hinzufügen', | ||||
| 	'Add as barcode to existing product' => 'Barcode vorhandenem Produkt zuweisen', | ||||
| 	'Add as new product and prefill barcode' => 'Neues Produkt erstellen und Barcode vorbelegen', | ||||
| 	'Are you sure to delete quantity unit "#1"?' => 'Mengeneinheit "#1" wirklich löschen?', | ||||
| 	'Are you sure to delete product "#1"?' => 'Produkt "#1" wirklich löschen?', | ||||
| 	'Are you sure to delete location "#1"?' => 'Standort "#1" wirklich löschen?', | ||||
| 	'Manage API keys' => 'API-Keys verwalten', | ||||
| 	'REST API & data model documentation' => 'REST-API & Datenmodell Dokumentation', | ||||
| 	'API keys' => 'API-Keys', | ||||
| 	'Create new API key' => 'Neuen API-Key erstellen', | ||||
| 	'API key' => 'API-Key', | ||||
| 	'Expires' => 'Läuft ab', | ||||
| 	'Created' => 'Erstellt', | ||||
| 	'This product is not in stock' => 'Dieses Produkt ist nicht vorrätig', | ||||
| 	'This means #1 will be added to stock' => 'Das bedeutet #1 wird dem Bestand hinzugefügt', | ||||
| 	'This means #1 will be removed from stock' => 'Das bedeutet #1 wird aus dem Bestand entfernt', | ||||
| 	'This means it is estimated that a new execution of this chore is tracked #1 days after the last was tracked' => 'Das bedeutet, dass eine erneute Ausführung der Hausarbeit #1 Tage nach der letzten Ausführung geplant wird', | ||||
| 	'Removed #1 #2 of #3 from stock' => '#1 #2 #3 aus dem Bestand entfernt', | ||||
| 	'About grocy' => 'Über grocy', | ||||
| 	'Close' => 'Schließen', | ||||
| 	'#1 batteries are due to be charged within the next #2 days' => '#1 Batterien müssen in den nächsten #2 Tagen geladen werden', | ||||
| 	'#1 batteries are overdue to be charged' => '#1 Batterien sind überfällig', | ||||
| 	'#1 chores are due to be done within the next #2 days' => '#1 Hausarbeiten stehen in den nächsten #2 Tagen an', | ||||
| 	'#1 chores are overdue to be done' => '#1 Hausarbeiten sind überfällig', | ||||
| 	'Released on' => 'Veröffentlicht am', | ||||
| 	'Consume #3 #1 of #2' => 'Verbrauche #3 #1 #2', | ||||
| 	'Added #1 #2 of #3 to stock' => '#1 #2 #3 dem Bestand hinzugefügt', | ||||
| 	'Stock amount of #1 is now #2 #3' => 'Es sind nun #2 #3 #1 im Bestand', | ||||
| 	'Tracked execution of chore #1 on #2' => 'Ausführung von #1 am #2 erfasst', | ||||
| 	'Tracked charge cycle of battery #1 on #2' => 'Ladezyklus für Batterie #1 am #2 erfasst', | ||||
| 	'Consume all #1 which are currently in stock' => 'Verbrauche den kompletten Bestand von #1', | ||||
| 	'All' => 'Alle', | ||||
| 	'Track charge cycle of battery #1' => 'Erfasse einen Ladezyklus für Batterie #1', | ||||
| 	'Track execution of chore #1' => 'Erfasse eine Ausführung von #1', | ||||
| 	'Filter by location' => 'Nach Standort filtern', | ||||
| 	'Search' => 'Suche', | ||||
| 	'Not logged in' => 'Nicht angemeldet', | ||||
| 	'You have to select a product' => 'Ein Produkt muss ausgewählt werden', | ||||
| 	'You have to select a chore' => 'Eine Hausarbeit muss ausgewählt werden', | ||||
| 	'You have to select a battery' => 'Eine Batterie muss ausgewählt werden', | ||||
| 	'A name is required' => 'Ein Name ist erforderlich', | ||||
| 	'A location is required' => 'Ein Standort ist erforderlich', | ||||
| 	'The amount cannot be lower than #1' => 'Die Menge darf nicht kleiner als #1 sein', | ||||
| 	'This cannot be negative' => 'Dies darf nicht negativ sein', | ||||
| 	'A quantity unit is required' => 'Eine Mengeneinheit muss ausgewählt werden', | ||||
| 	'A period type is required' => 'Eine Periodentyp muss ausgewählt werden', | ||||
| 	'A best before date is required and must be later than today' => 'Ein Mindesthaltbarkeitsdatum ist erforderlich und muss später als heute sein', | ||||
| 	'Settings' => 'Einstellungen', | ||||
| 	'This can only be before now' => 'Dies kann nur vor jetzt sein', | ||||
| 	'Calendar' => 'Kalender', | ||||
| 	'Recipes' => 'Rezepte', | ||||
| 	'Edit recipe' => 'Rezept bearbeiten', | ||||
| 	'New recipe' => 'Neues Rezept', | ||||
| 	'Ingredients list' => 'Zutatenliste', | ||||
| 	'Add recipe ingredient' => 'Rezeptzutat hinzufügen', | ||||
| 	'Edit recipe ingredient' => 'Rezeptzutat bearbeiten', | ||||
| 	'Are you sure to delete recipe "#1"?' => 'Rezept "#1" wirklich löschen?', | ||||
| 	'Are you sure to delete recipe ingredient "#1"?' => 'Rezeptzutat "#1" wirklich löschen?', | ||||
| 	'Are you sure to empty the shopping list?' => 'Sicher, dass den Einkaufszettel geleert werden soll?', | ||||
| 	'Clear list' => 'Liste leeren', | ||||
| 	'Requirements fulfilled' => 'Bedarf im Bestand', | ||||
| 	'Put missing products on shopping list' => 'Fehlende Produkte auf den Einkaufszettel setzen', | ||||
| 	'Not enough in stock, #1 ingredients missing' => 'Nicht ausreichend im Bestand, #1 Zutaten fehlen', | ||||
| 	'Enough in stock' => 'Bestand reicht aus', | ||||
| 	'Not enough in stock, #1 ingredients missing but already on the shopping list' => 'Bestand nicht ausreichend, #1 Zutaten fehlen, stehen aber bereits auf dem Einkaufszettel', | ||||
| 	'Expand to fullscreen' => 'Auf ganzen Bildschirm vergrößern', | ||||
| 	'Ingredients' => 'Zutaten', | ||||
| 	'Preparation' => 'Zubereitung', | ||||
| 	'Recipe' => 'Rezept', | ||||
| 	'Not enough in stock, #1 missing, #2 already on shopping list' => 'Nicht ausreichend im Bestand, #1 fehlen, #2 stehen bereits auf dem Einkaufszettel', | ||||
| 	'Show notes' => 'Notizen anzeigen', | ||||
| 	'Put missing amount on shopping list' => 'Fehlende Menge auf den Einkaufszettel setzen', | ||||
| 	'Are you sure to put all missing ingredients for recipe "#1" on the shopping list?' => 'Sicher alle fehlenden Zutaten für Rezept "#1" auf die Einkaufsliste zu setzen?', | ||||
| 	'Added for recipe #1' => 'Hinzugefügt für Rezept #1', | ||||
| 	'Manage users' => 'Benutzer verwalten', | ||||
| 	'User' => 'Benutzer', | ||||
| 	'Users' => 'Benutzer', | ||||
| 	'Are you sure to delete user "#1"?' => 'Benutzer "#1" wirklich löschen?', | ||||
| 	'Create user' => 'Benutzer erstellen', | ||||
| 	'Edit user' => 'Benutzer bearbeiten', | ||||
| 	'First name' => 'Vorname', | ||||
| 	'Last name' => 'Nachname', | ||||
| 	'A username is required' => 'Ein Benutzername ist erforderlich', | ||||
| 	'Confirm password' => 'Passwort bestätigen', | ||||
| 	'Passwords do not match' => 'Passwörter stimmen nicht überein', | ||||
| 	'Change password' => 'Passwort ändern', | ||||
| 	'Done by' => 'Ausgeführt von', | ||||
| 	'Last done by' => 'Zuletzt ausgeführt von', | ||||
| 	'Unknown' => 'Unbekannt', | ||||
| 	'Filter by chore' => 'Nach Hausarbeit filtern', | ||||
| 	'Chores journal' => 'Hausarbeitenjournal', | ||||
| 	'0 means suggestions for the next charge cycle are disabled' => '0 bedeutet dass Vorschläge für den nächsten Ladezyklus deaktiviert sind', | ||||
| 	'Charge cycle interval (days)' => 'Ladezyklusintervall (Tage)', | ||||
| 	'Last price' => 'Letzter Preis', | ||||
| 	'Price history' => 'Preisentwicklung', | ||||
| 	'No price history available' => 'Keine Preisdaten verfügbar', | ||||
| 	'Price' => 'Preis', | ||||
| 	'in #1 per purchase quantity unit' => 'in #1 pro Einkaufsmengeneinheit', | ||||
| 	'The price cannot be lower than #1' => 'Der Preis darf nicht niedriger als #1 sein', | ||||
| 	'#1 product expires within the next #2 days' => '#1 Produkt läuft innerhalb der nächsten #2 Tage ab', | ||||
| 	'#1 product is already expired' => '#1 Produkt ist bereits abgelaufen', | ||||
| 	'#1 product is below defined min. stock amount' => '#1 Produkt ist unter Mindestbestand', | ||||
| 	'Unit' => 'Einheit', | ||||
| 	'Units' => 'Einheiten', | ||||
| 	'#1 chore is due to be done within the next #2 days' => '#1 Hausarbeit steht in den nächsten #2 Tagen an', | ||||
| 	'#1 chore is overdue to be done' => '#1 Hausarbeit ist überfällig', | ||||
| 	'#1 battery is due to be charged within the next #2 days' => '#1 Batterie muss in den nächsten #2 Tagen geladen werden', | ||||
| 	'#1 battery is overdue to be charged' => '#1 Batterie ist überfällig', | ||||
| 	'#1 unit was automatically added and will apply in addition to the amount entered here' => '#1 Einheit wurde automatisch hinzugefügt und gilt zusätzlich der hier eingegebenen Menge', | ||||
| 	'in singular form' => 'in der Einzahl', | ||||
| 	'in plural form' => 'in der Mehrzahl', | ||||
| 	'Never expires' => 'Läuft nie ab', | ||||
| 	'This cannot be lower than #1' => 'Dies darf nicht kleiner als #1 sein', | ||||
| 	'-1 means that this product never expires' => '-1 bedeuet, dass dieses Produkt niemals abläuft', | ||||
| 	'Quantity unit' => 'Mengeneinheit', | ||||
| 	'Only check if a single unit is in stock (a different quantity can then be used above)' => 'Nur prüfen, ob eine einzelne Einheit vorrätig ist (eine abweichende Mengeneinheit kann dann oben verwendet werden)', | ||||
| 	'Are you sure to consume all ingredients needed by recipe "#1" (ingredients marked with "check only if a single unit is in stock" will be ignored)?' => 'Sicher, dass alle Zutaten die vom Rezept "#1" benötigt werden aus dem Bestand entfernt werden sollen (Zutaten markiert mit "nur prüfen, ob eine einzelne Einheit vorrätig ist" werden ignoriert)?', | ||||
| 	'Removed all ingredients of recipe "#1" from stock' => 'Alle Zutaten, die vom Rezept "#1" benötigt werden, wurdem aus dem Bestand entfernt', | ||||
| 	'Consume all ingredients needed by this recipe' => 'Alle Zutaten, die von diesem Rezept benötigt werden, aus dem Bestand enternen', | ||||
| 	'Click to show technical details' => 'Klick um technische Details anzuzeigen', | ||||
| 	'Error while saving, probably this item already exists' => 'Fehler beim Speichern, möglicherweise existiert das Element bereits', | ||||
| 	'Error details' => 'Fehlerdetails', | ||||
| 	'Tasks' => 'Aufgaben', | ||||
| 	'Show done tasks' => 'Erledigte Aufgaben anzeigen', | ||||
| 	'Task' => 'Aufgabe', | ||||
| 	'Due' => 'Fällig', | ||||
| 	'Assigned to' => 'Zugewiesen an', | ||||
| 	'Mark task "#1" as completed' => 'Aufgabe "#1" als erledigt markieren', | ||||
| 	'Uncategorized' => 'Nicht kategorisiert', | ||||
| 	'Task categories' => 'Aufgabenkategorien', | ||||
| 	'Create task' => 'Aufgabe erstellen', | ||||
| 	'A due date is required' => 'Ein Fälligkeitsdatum ist erforderlich', | ||||
| 	'Category' => 'Kategorie', | ||||
| 	'Edit task' => 'Aufgabe bearbeiten', | ||||
| 	'Are you sure to delete task "#1"?' => 'Aufgabe "#1" wirklich löschen?', | ||||
| 	'#1 task is due to be done within the next #2 days' => '#1 Aufgabe steht in den nächsten #2 Tagen an', | ||||
| 	'#1 tasks are due to be done within the next #2 days' => '#1 Aufgaben stehen in den nächsten #2 Tagen an', | ||||
| 	'#1 task is overdue to be done' => '#1 Aufgabe ist überfällig', | ||||
| 	'#1 tasks are overdue to be done' => '#1 Aufgaben sind überfällig', | ||||
| 	'Edit task category' => 'Aufgabenkategorie bearbeiten', | ||||
| 	'Create task category' => 'Aufgabenkategorie erstellen', | ||||
| 	'Product groups' => 'Produktgruppen', | ||||
| 	'Ungrouped' => 'Ungruppiert', | ||||
| 	'Create product group' => 'Produktgruppe erstellen', | ||||
| 	'Edit product group' => 'Produktgruppe bearbeiten', | ||||
| 	'Product group' => 'Produktgruppe', | ||||
| 	'Are you sure to delete product group "#1"?' => 'Produktgruppe "#1" wirklich löschen?', | ||||
| 	'Stay logged in permanently' => 'Dauerhaft angemeldet bleiben', | ||||
| 	'When not set, you will get logged out at latest after 30 days' => 'Wenn nicht gesetzt, wirst du spätestens nach 30 Tagen automatisch abgemeldet', | ||||
| 	'Filter by status' => 'Nach Status filtern', | ||||
| 	'Below min. stock amount' => 'Unter Mindestbestand', | ||||
| 	'Expiring soon' => 'Bald ablaufend', | ||||
| 	'Already expired' => 'Bereits abgelaufen', | ||||
| 	'Due soon' => 'Bald fällig', | ||||
| 	'Overdue' => 'Überfällig', | ||||
| 	'View settings' => 'Ansichtseinstellungen', | ||||
| 	'Auto reload on external changes' => 'Autom. akt. bei externen Änderungen', | ||||
| 	'Enable night mode' => 'Nachtmodus aktivieren', | ||||
| 	'Auto enable in time range' => 'Autom. akt. in diesem Zeitraum', | ||||
| 	'From' => 'Von', | ||||
| 	'in format' => 'im Format', | ||||
| 	'To' => 'Bis', | ||||
| 	'Time range goes over midnight' => 'Zeitraum geht über Mitternacht', | ||||
| 	'Product picture' => 'Produktbild', | ||||
| 	'No file selected' => 'Keine Datei ausgewählt', | ||||
| 	'If you don\'t select a file, the current picture will not be altered' => 'Wenn du keine Datei auswählst, wird das aktuelle Bild nicht verändert', | ||||
| 	'Delete' => 'Löschen', | ||||
| 	'The current picture will be deleted when you save the product' => 'Das aktuelle Bild wird beim Speichern des Produkts gelöscht', | ||||
| 	'Select file' => 'Datei auswählen', | ||||
| 	'Image of product #1' => 'Bild des Produkts #1', | ||||
| 	'This product cannot be deleted because it is in stock, please remove the stock amount first.' => 'Dieses Produkt kann nicht gelöscht werden, da es auf Lager ist, bitte  zuerst den Bestand entfernen.', | ||||
| 	'Delete not possible' => 'Löschen nicht möglich', | ||||
| 	'Equipment' => 'Ausstattung', | ||||
| 	'Instruction manual' => 'Bedienungsanleitung', | ||||
| 	'The selected equipment has no instruction manual' => 'Das ausgewählte Gerät hat keine Bedienungsanleitung', | ||||
| 	'Notes' => 'Notizen', | ||||
| 	'Edit equipment' => 'Geräte bearbeiten', | ||||
| 	'Create equipment' => 'Geräte erstellen', | ||||
| 	'If you don\'t select a file, the current instruction manual will not be altered' => 'Wenn du keine Datei auswählst, wird die aktuelle Bedienungsanleitung nicht verändert', | ||||
| 	'No instruction manual available' => 'Keine Bedienungsanleitung vorhanden', | ||||
| 	'The current instruction manual will be deleted when you save the equipment' => 'Die aktuelle Bedienungsanleitung wird beim Speichern des Geräts gelöscht', | ||||
| 	'No picture available' => 'Kein Bild vorhanden', | ||||
| 	'Filter by product group' => 'Nach Produktgruppe filtern', | ||||
| 	'Presets for new products' => 'Vorgaben für neue Produkte', | ||||
| 	'Included recipes' => 'Enthaltene Rezepte', | ||||
| 	'A recipe is required' => 'Ein Rezept ist erforderlich', | ||||
| 	'Add included recipe' => 'Enthaltenes Rezept hinzufügen', | ||||
| 	'Edit included recipe' => 'Enthaltenes Rezept bearbeiten', | ||||
| 	'Group' => 'Gruppe', | ||||
| 	'This will be used as a headline to group ingredients together' => 'Dies wird als Überschrift verwendet, um  Zutaten zusammenzufassen', | ||||
| 	'Journal' => 'Journal', | ||||
| 	'Stock journal' => 'Bestandsjournal', | ||||
| 	'Filter by product' => 'Nach Produkt filtern', | ||||
| 	'Booking time' => 'Buchungszeit', | ||||
| 	'Booking type' => 'Buchungsart', | ||||
| 	'Undo booking' => 'Buchung rückgängig machen', | ||||
| 	'Undone on' => 'Rückgängig gemacht am', | ||||
| 	'Batteries journal' => 'Batteriejournal', | ||||
| 	'Filter by battery' => 'Nach Batterie filtern', | ||||
| 	'Undo charge cycle' => 'Ladezyklus rückgängig machen', | ||||
| 	'Undo chore execution' => 'Ausführung rückgängig machen', | ||||
| 	'Chore execution successfully undone' => 'Ausführung erfolgreich rückgängig gemacht', | ||||
| 	'Undo' => 'Rückgängig machen', | ||||
| 	'Booking successfully undone' => 'Buchung erfolgreich rückgängig gemacht', | ||||
| 	'Charge cycle successfully undone' => 'Ladezyklus erfolgreich rückgängig gemacht', | ||||
| 	'This cannot be negative and must be an integral number' => 'Diese darf nicht negativ und muss eine ganze Zahl sein', | ||||
| 	'Disable stock fulfillment checking for this ingredient' => 'Bestandsprüfung für diese Zutat deaktivieren', | ||||
| 	'Add all list items to stock' => 'Alle Einträge zum Bestand hinzufügen', | ||||
| 	'Add #3 #1 of #2 to stock' => 'Füge #3 #1 of #2 dem Bestand hinzu', | ||||
| 	'Adding shopping list item #1 of #2' => 'Bearbeite Einkausfzettel-Eintrag #1 von #2', | ||||
| 	'Use a specific stock item' => 'Einen bestimmten Bestandseintrag verwenden', | ||||
| 	'The first item in this list would be picked by the default rule which is "First expiring first, then first in first out"' => 'Der erste Eintrag in dieser Liste würde von der Standardregel "Zuerst ablaufende zuerst, dann First In - First Out" ausgewählt werden', | ||||
| 	'Mark #3 #1 of #2 as open' => '#3 #1 von #2 als geöffnet markieren', | ||||
| 	'When a product was marked as opened, the best before date will be replaced by today + this amount of days (a value of 0 disables this)' => 'Wenn ein Produkt als geöffnet markiert wurde, wird das Mindesthaltbarkeitsdatum durch heute + diese Anzahl von Tagen ersetzt (ein Wert von 0 deaktiviert dies)', | ||||
| 	'Default best before days after opened' => 'Standard Haltbarkeit in Tagen nach dem Öffnen', | ||||
| 	'Marked #1 #2 of #3 as opened' => '#1 #2 von #3 als geöffnet markiert', | ||||
| 	'Mark as opened' => 'Als geöffnet markieren', | ||||
| 	'Expires on #1; Bought on #2' => 'Läuft ab am #1; Gekauft am #2', | ||||
| 	'Not opened' => 'Nicht geöffnet', | ||||
| 	'Opened' => 'Geöffnet', | ||||
| 	'Mark #3 #1 of #2 as open' => '#3 #1 von #2 als geöffnet markieren', | ||||
| 	'#1 opened' => '#1 geöffnet', | ||||
| 	'Product expires' => 'Produkt läuft ab', | ||||
| 	'Task due' => 'Aufgabe fällig', | ||||
| 	'Chore due' => 'Hausarbeit fällig', | ||||
| 	'Battery charge cycle due' => 'Battery-Ladezyklus fällig', | ||||
| 	'Show clock in header' => 'Uhr in der Kopfzeile anzeigen', | ||||
| 	'Stock settings' => 'Bestandseinstellungen', | ||||
| 	'Shopping list to stock workflow' => 'Einkaufsliste -> Bestand Workflow', | ||||
| 	'Automatically do the booking using the last price and the amount of the shopping list item, if the product has "Default best before days" set' => 'Buchung automatisch ausführen, wenn das Produkt "Standard Haltbarkeit in Tagen" hinterlegt hat (als Preis wird der letzte Preis verwendet)', | ||||
| 	'Skip' => 'Überspringen', | ||||
| 	'Servings' => 'Portionen', | ||||
| 	'Costs' => 'Kosten', | ||||
| 	'Based on the prices of the last purchase per product' => 'Basierend auf den Preisen des letzten Kaufs pro Produkt', | ||||
| 	'The ingredients listed here result in this amount of servings' => 'Die hier aufgeführten Zutaten ergeben diese Menge an Portionen', | ||||
| 	'Do not check against the shopping list when adding missing items to it' => 'Nicht gegen die bereits auf der Einkaufsliste vorhandene Menge prüfen, wenn fehlende Zutaten auf die Einkaufsliste gesetzt werden', | ||||
| 	'By default the amount to be added to the shopping list is "needed amount - stock amount - shopping list amount" - when this is enabled, it is only checked against the stock amount, not against what is already on the shopping list' => 'Standardmäßig ist die Menge, die der Einkaufsliste hinzugefügt werden soll, "benötigte Menge - Lagerbestand - Menge bereits auf der Einkaufsliste" - wenn dies aktiviert ist, wird nur gegen den Lagerbestand geprüft, nicht gegen das, was bereits auf der Einkaufsliste steht', | ||||
| 	'Picture' => 'Bild', | ||||
| 	'Uncheck ingredients to not put them on the shopping list' => 'Entferne den Haken einer Zutat, um diese nicht auf die Einkaufsliste zu übernehmen', | ||||
| 	'This is for statistical purposes only' => 'Dies wird nur für Auswertezwecke benötigt', | ||||
| 	'You have to select a recipe' => 'Ein Rezept muss ausgewählt werden', | ||||
| 	'Key type' => 'Schlusseltyp', | ||||
| 	'Share/Integrate calendar (iCal)' => 'Kalender teilen/integrieren (iCal)', | ||||
| 	'Use the following (public) URL to share or integrate the calendar in iCal format' => 'Verwende die folgende (öffentliche) URL, um den Kalender im iCal-Format zu teilen oder zu integrieren', | ||||
| 	'Allow partial units in stock' => 'Teilmengen im Bestand zulassen', | ||||
| 	'Enable tare weight handling' => 'Taragewichtbehandlung aktivieren', | ||||
| 	'This is useful e.g. for flour in jars - on purchase/consume/inventory you always weigh the whole jar, the amount to be posted is then automatically calculated based on what is in stock and the tare weight defined below' => 'Dies ist z.B. für Mehl im Glas nützlich - beim Buchen eines Kaufs/Verbrauchs oder bei der Inventur musst du dann immer das gesamte Glas wiegen, die zu buchende Menge wird dann automatisch basierend auf dem Bestand und dem unten definierten Eigengewicht berechnet', | ||||
| 	'Tare weight' => 'Taragewicht', | ||||
| 	'Tare weight handling enabled - please weigh the whole container, the amount to be posted will be automatically calculcated' => 'Taragewichtbehandlung aktiviert - bitte den gesamten Behälter wiegen, die zu buchende Menge wird automatisch berechnet', | ||||
| 	'You have to select a location' => 'Ein Standort muss ausgewählt werden', | ||||
| 	'List' => 'Liste', | ||||
| 	'Gallery' => 'Galerie', | ||||
| 	'The current picture will be deleted when you save the recipe' => 'Das aktuelle Bild wird beim Speichern des Rezepts gelöscht ' | ||||
| ); | ||||
							
								
								
									
										6
									
								
								localization/en/chore_types.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								localization/en/chore_types.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'manually' => 'Manually', | ||||
| 	'dynamic-regular' => 'Dynamic regular' | ||||
| ); | ||||
							
								
								
									
										10
									
								
								localization/en/component_translations.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								localization/en/component_translations.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'timeago_locale' => 'en', | ||||
| 	'timeago_nan' => 'NaN years ago', | ||||
| 	'moment_locale' => 'x', | ||||
| 	'datatables_localization' => '{"sEmptyTable":"No data available in table","sInfo":"Showing _START_ to _END_ of _TOTAL_ entries","sInfoEmpty":"Showing 0 to 0 of 0 entries","sInfoFiltered":"(filtered from _MAX_ total entries)","sInfoPostFix":"","sInfoThousands":",","sLengthMenu":"Show _MENU_ entries","sLoadingRecords":"Loading...","sProcessing":"Processing...","sSearch":"Search:","sZeroRecords":"No matching records found","oPaginate":{"sFirst":"First","sLast":"Last","sNext":"Next","sPrevious":"Previous"},"oAria":{"sSortAscending":": activate to sort column ascending","sSortDescending":": activate to sort column descending"}}', | ||||
| 	'summernote_locale' => 'x', | ||||
| 	'fullcalendar_locale' => 'x' | ||||
| ); | ||||
							
								
								
									
										89
									
								
								localization/en/demo_data.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								localization/en/demo_data.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,89 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'Cookies' => 'Cookies', | ||||
| 	'Chocolate' => 'Chocolate', | ||||
| 	'Pantry' => 'Pantry', | ||||
| 	'Candy cupboard' => 'Candy cupboard', | ||||
| 	'Tinned food cupboard' => 'Tinned food cupboard', | ||||
| 	'Fridge' => 'Fridge', | ||||
| 	'Piece' => 'Piece', | ||||
| 	'Pieces' => 'Pieces', | ||||
| 	'Pack' => 'Pack', | ||||
| 	'Packs' => 'Packs', | ||||
| 	'Glass' => 'Glass', | ||||
| 	'Glasses' => 'Glasses', | ||||
| 	'Tin' => 'Tin', | ||||
| 	'Tins' => 'Tins', | ||||
| 	'Can' => 'Can', | ||||
| 	'Cans' => 'Cans', | ||||
| 	'Bunch' => 'Bunch', | ||||
| 	'Bunches' => 'Bunches', | ||||
| 	'Gummy bears' => 'Gummy bears', | ||||
| 	'Crisps' => 'Crisps', | ||||
| 	'Eggs' => 'Eggs', | ||||
| 	'Noodles' => 'Noodles', | ||||
| 	'Pickles' => 'Pickles', | ||||
| 	'Gulash soup' => 'Gulash soup', | ||||
| 	'Yogurt' => 'Yogurt', | ||||
| 	'Cheese' => 'Cheese', | ||||
| 	'Cold cuts' => 'Cold cuts', | ||||
| 	'Paprika' => 'Paprika', | ||||
| 	'Cucumber' => 'Cucumber', | ||||
| 	'Radish' => 'Radish', | ||||
| 	'Tomato' => 'Tomato', | ||||
| 	'Changed towels in the bathroom' => 'Changed towels in the bathroom', | ||||
| 	'Cleaned the kitchen floor' => 'Cleaned the kitchen floor', | ||||
| 	'Warranty ends' => 'Warranty ends', | ||||
| 	'TV remote control' => 'TV remote control', | ||||
| 	'Alarm clock' => 'Alarm clock', | ||||
| 	'Heat remote control' => 'Heat remote control', | ||||
| 	'Lawn mowed in the garden' => 'Lawn mowed in the garden', | ||||
| 	'Some good snacks' => 'Some good snacks', | ||||
| 	'Pizza dough' => 'Pizza dough', | ||||
| 	'Sieved tomatoes' => 'Sieved tomatoes', | ||||
| 	'Salami' => 'Salami', | ||||
| 	'Toast' => 'Toast', | ||||
| 	'Minced meat' => 'Minced meat', | ||||
| 	'Pizza' => 'Pizza', | ||||
| 	'Spaghetti bolognese' => 'Spaghetti bolognese', | ||||
| 	'Sandwiches' => 'Sandwiches', | ||||
| 	'English' => 'English', | ||||
| 	'German' => 'German', | ||||
| 	'Italian' => 'Italian', | ||||
| 	'Demo in different language' => 'Demo in different language', | ||||
| 	'This is the note content of the recipe ingredient' => 'This is the note content of the recipe ingredient', | ||||
| 	'Demo User' => 'Demo User', | ||||
| 	'Gram' => 'Gram', | ||||
| 	'Grams' => 'Grams', | ||||
| 	'Flour' => 'Flour', | ||||
| 	'Pancakes' => 'Pancakes', | ||||
| 	'Sugar' => 'Sugar', | ||||
| 	'Home' => 'Home', | ||||
| 	'Life' => 'Life', | ||||
| 	'Projects' => 'Projects', | ||||
| 	'Repair the garage door' => 'Repair the garage door', | ||||
| 	'Fork and improve grocy' => 'Fork and improve grocy', | ||||
| 	'Find a solution for what to do when I forget the door keys' => 'Find a solution for what to do when I forget the door keys', | ||||
| 	'Sweets' => 'Sweets', | ||||
| 	'Bakery products' => 'Bakery products', | ||||
| 	'Tinned food' => 'Tinned food', | ||||
| 	'Butchery products' => 'Butchery products', | ||||
| 	'Vegetables/Fruits' => 'Vegetables/Fruits', | ||||
| 	'Refrigerated products' => 'Refrigerated products', | ||||
| 	'Coffee machine' => 'Coffee machine', | ||||
| 	'Dishwasher' => 'Dishwasher', | ||||
| 	'Liter' => 'Liter', | ||||
| 	'Liters' => 'Liters', | ||||
| 	'Bottle' => 'Bottle', | ||||
| 	'Bottles' => 'Bottles', | ||||
| 	'Milk' => 'Milk', | ||||
| 	'Chocolate sauce' => 'Chocolate sauce', | ||||
| 	'Milliliters' => 'Milliliters', | ||||
| 	'Milliliter' => 'Milliliter', | ||||
| 	'Bottom' => 'Bottom', | ||||
| 	'Topping' => 'Topping', | ||||
| 	'French' => 'French', | ||||
| 	'Turkish' => 'Turkish', | ||||
| 	'Spanish' => 'Spanish' | ||||
| ); | ||||
							
								
								
									
										8
									
								
								localization/en/stock_transaction_types.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								localization/en/stock_transaction_types.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'purchase' => 'Purchase', | ||||
| 	'consume' => 'Consume', | ||||
| 	'inventory-correction' => 'Inventory correction', | ||||
| 	'product-opened' => 'Product opened' | ||||
| ); | ||||
							
								
								
									
										349
									
								
								localization/en/strings.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										349
									
								
								localization/en/strings.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,349 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'Stock overview' => 'Stock overview', | ||||
| 	'#1 products expiring within the next #2 days' => '#1 products expiring within the next #2 days', | ||||
| 	'#1 products are already expired' => '#1 products are already expired', | ||||
| 	'#1 products are below defined min. stock amount' => '#1 products are below defined min. stock amount', | ||||
| 	'Product' => 'Product', | ||||
| 	'Amount' => 'Amount', | ||||
| 	'Next best before date' => 'Next best before date', | ||||
| 	'Logout' => 'Logout', | ||||
| 	'Chores overview' => 'Chores overview', | ||||
| 	'Batteries overview' => 'Batteries overview', | ||||
| 	'Purchase' => 'Purchase', | ||||
| 	'Consume' => 'Consume', | ||||
| 	'Inventory' => 'Inventory', | ||||
| 	'Shopping list' => 'Shopping list', | ||||
| 	'Chore tracking' => 'Chore tracking', | ||||
| 	'Battery tracking' => 'Battery tracking', | ||||
| 	'Products' => 'Products', | ||||
| 	'Locations' => 'Locations', | ||||
| 	'Quantity units' => 'Quantity units', | ||||
| 	'Chores' => 'Chores', | ||||
| 	'Batteries' => 'Batteries', | ||||
| 	'Chore' => 'Chore', | ||||
| 	'Next estimated tracking' => 'Next estimated tracking', | ||||
| 	'Last tracked' => 'Last tracked', | ||||
| 	'Battery' => 'Battery', | ||||
| 	'Last charged' => 'Last charged', | ||||
| 	'Next planned charge cycle' => 'Next planned charge cycle', | ||||
| 	'Best before' => 'Best before', | ||||
| 	'OK' => 'OK', | ||||
| 	'Product overview' => 'Product overview', | ||||
| 	'Stock quantity unit' => 'Stock quantity unit', | ||||
| 	'Stock amount' => 'Stock amount', | ||||
| 	'Last purchased' => 'Last purchased', | ||||
| 	'Last used' => 'Last used', | ||||
| 	'Spoiled' => 'Spoiled', | ||||
| 	'Barcode lookup is disabled' => 'Barcode lookup is disabled', | ||||
| 	'will be added to the list of barcodes for the selected product on submit' => 'will be added to the list of barcodes for the selected product on submit', | ||||
| 	'New amount' => 'New amount', | ||||
| 	'Note' => 'Note', | ||||
| 	'Tracked time' => 'Tracked time', | ||||
| 	'Chore overview' => 'Chore overview', | ||||
| 	'Tracked count' => 'Tracked count', | ||||
| 	'Battery overview' => 'Battery overview', | ||||
| 	'Charge cycles count' => 'Charge cycles count', | ||||
| 	'Create shopping list item' => 'Create shopping list item', | ||||
| 	'Edit shopping list item' => 'Edit shopping list item', | ||||
| 	'Save' => 'Save', | ||||
| 	'Add' => 'Add', | ||||
| 	'Name' => 'Name', | ||||
| 	'Location' => 'Location', | ||||
| 	'Min. stock amount' => 'Min. stock amount', | ||||
| 	'QU purchase' => 'QU purchase', | ||||
| 	'QU stock' => 'QU stock', | ||||
| 	'QU factor' => 'QU factor', | ||||
| 	'Description' => 'Description', | ||||
| 	'Create product' => 'Create product', | ||||
| 	'Barcode(s)' => 'Barcode(s)', | ||||
| 	'Minimum stock amount' => 'Minimum stock amount', | ||||
| 	'Default best before days' => 'Default best before days', | ||||
| 	'Quantity unit purchase' => 'Quantity unit purchase', | ||||
| 	'Quantity unit stock' => 'Quantity unit stock', | ||||
| 	'Factor purchase to stock quantity unit' => 'Factor purchase to stock quantity unit', | ||||
| 	'Create location' => 'Create location', | ||||
| 	'Create quantity unit' => 'Create quantity unit', | ||||
| 	'Period type' => 'Period type', | ||||
| 	'Period days' => 'Period days', | ||||
| 	'Create chore' => 'Create chore', | ||||
| 	'Used in' => 'Used in', | ||||
| 	'Create battery' => 'Create battery', | ||||
| 	'Edit battery' => 'Edit battery', | ||||
| 	'Edit chore' => 'Edit chore', | ||||
| 	'Edit quantity unit' => 'Edit quantity unit', | ||||
| 	'Edit product' => 'Edit product', | ||||
| 	'Edit location' => 'Edit location', | ||||
| 	'Record data' => 'Record data', | ||||
| 	'Manage master data' => 'Manage master data', | ||||
| 	'This will apply to added products' => 'This will apply to added products', | ||||
| 	'never' => 'never', | ||||
| 	'Add products that are below defined min. stock amount' => 'Add products that are below defined min. stock amount', | ||||
| 	'For purchases this amount of days will be added to today for the best before date suggestion' => 'For purchases this amount of days will be added to today for the best before date suggestion', | ||||
| 	'This means 1 #1 purchased will be converted into #2 #3 in stock' => 'This means 1 #1 purchased will be converted into #2 #3 in stock', | ||||
| 	'Login' => 'Login', | ||||
| 	'Username' => 'Username', | ||||
| 	'Password' => 'Password', | ||||
| 	'Invalid credentials, please try again' => 'Invalid credentials, please try again', | ||||
| 	'Are you sure to delete battery "#1"?' => 'Are you sure to delete battery "#1"?', | ||||
| 	'Yes' => 'Yes', | ||||
| 	'No' => 'No', | ||||
| 	'Are you sure to delete chore "#1"?' => 'Are you sure to delete chore "#1"?', | ||||
| 	'"#1" could not be resolved to a product, how do you want to proceed?' => '"#1" could not be resolved to a product, how do you want to proceed?', | ||||
| 	'Create or assign product' => 'Create or assign product', | ||||
| 	'Cancel' => 'Cancel', | ||||
| 	'Add as new product' => 'Add as new product', | ||||
| 	'Add as barcode to existing product' => 'Add as barcode to existing product', | ||||
| 	'Add as new product and prefill barcode' => 'Add as new product and prefill barcode', | ||||
| 	'Are you sure to delete quantity unit "#1"?' => 'Are you sure to delete quantity unit "#1"?', | ||||
| 	'Are you sure to delete product "#1"?' => 'Are you sure to delete product "#1"?', | ||||
| 	'Are you sure to delete location "#1"?' => 'Are you sure to delete location "#1"?', | ||||
| 	'Manage API keys' => 'Manage API keys', | ||||
| 	'REST API & data model documentation' => 'REST API & data model documentation', | ||||
| 	'API keys' => 'API keys', | ||||
| 	'Create new API key' => 'Create new API key', | ||||
| 	'API key' => 'API key', | ||||
| 	'Expires' => 'Expires', | ||||
| 	'Created' => 'Created', | ||||
| 	'This product is not in stock' => 'This product is not in stock', | ||||
| 	'This means #1 will be added to stock' => 'This means #1 will be added to stock', | ||||
| 	'This means #1 will be removed from stock' => 'This means #1 will be removed from stock', | ||||
| 	'This means it is estimated that a new execution of this chore is tracked #1 days after the last was tracked' => 'This means it is estimated that a new execution of this chore is tracked #1 days after the last was tracked', | ||||
| 	'Removed #1 #2 of #3 from stock' => 'Removed #1 #2 of #3 from stock', | ||||
| 	'About grocy' => 'About grocy', | ||||
| 	'Close' => 'Close', | ||||
| 	'#1 batteries are due to be charged within the next #2 days' => '#1 batteries are due to be charged within the next #2 days', | ||||
| 	'#1 batteries are overdue to be charged' => '#1 batteries are overdue to be charged', | ||||
| 	'#1 chores are due to be done within the next #2 days' => '#1 chores are due to be done within the next #2 days', | ||||
| 	'#1 chores are overdue to be done' => '#1 chores are overdue to be done', | ||||
| 	'Released on' => 'Released on', | ||||
| 	'Consume #3 #1 of #2' => 'Consume #3 #1 of #2', | ||||
| 	'Added #1 #2 of #3 to stock' => 'Added #1 #2 of #3 to stock', | ||||
| 	'Stock amount of #1 is now #2 #3' => 'Stock amount of #1 is now #2 #3', | ||||
| 	'Tracked execution of chore #1 on #2' => 'Tracked execution of chore #1 on #2', | ||||
| 	'Tracked charge cycle of battery #1 on #2' => 'Tracked charge cycle of battery #1 on #2', | ||||
| 	'Consume all #1 which are currently in stock' => 'Consume all #1 which are currently in stock', | ||||
| 	'All' => 'All', | ||||
| 	'Track charge cycle of battery #1' => 'Track charge cycle of battery #1', | ||||
| 	'Track execution of chore #1' => 'Track execution of chore #1', | ||||
| 	'Filter by location' => 'Filter by location', | ||||
| 	'Search' => 'Search', | ||||
| 	'Not logged in' => 'Not logged in', | ||||
| 	'You have to select a product' => 'You have to select a product', | ||||
| 	'You have to select a chore' => 'You have to select a chore', | ||||
| 	'You have to select a battery' => 'You have to select a battery', | ||||
| 	'A name is required' => 'A name is required', | ||||
| 	'A location is required' => 'A location is required', | ||||
| 	'The amount cannot be lower than #1' => 'The amount cannot be lower than #1', | ||||
| 	'This cannot be negative' => 'This cannot be negative', | ||||
| 	'A quantity unit is required' => 'A quantity unit is required', | ||||
| 	'A period type is required' => 'A period type is required', | ||||
| 	'A best before date is required and must be later than today' => 'A best before date is required and must be later than today', | ||||
| 	'Settings' => 'Settings', | ||||
| 	'This can only be before now' => 'This can only be before now', | ||||
| 	'Calendar' => 'Calendar', | ||||
| 	'Recipes' => 'Recipes', | ||||
| 	'Edit recipe' => 'Edit recipe', | ||||
| 	'New recipe' => 'New recipe', | ||||
| 	'Ingredients list' => 'Ingredients list', | ||||
| 	'Add recipe ingredient' => 'Add recipe ingredient', | ||||
| 	'Edit recipe ingredient' => 'Edit recipe ingredient', | ||||
| 	'Are you sure to delete recipe "#1"?' => 'Are you sure to delete recipe "#1"?', | ||||
| 	'Are you sure to delete recipe ingredient "#1"?' => 'Are you sure to delete recipe ingredient "#1"?', | ||||
| 	'Are you sure to empty the shopping list?' => 'Are you sure to empty the shopping list?', | ||||
| 	'Clear list' => 'Clear list', | ||||
| 	'Requirements fulfilled' => 'Requirements fulfilled', | ||||
| 	'Put missing products on shopping list' => 'Put missing products on shopping list', | ||||
| 	'Not enough in stock, #1 ingredients missing' => 'Not enough in stock, #1 ingredients missing', | ||||
| 	'Enough in stock' => 'Enough in stock', | ||||
| 	'Not enough in stock, #1 ingredients missing but already on the shopping list' => 'Not enough in stock, #1 ingredients missing but already on the shopping list', | ||||
| 	'Expand to fullscreen' => 'Expand to fullscreen', | ||||
| 	'Ingredients' => 'Ingredients', | ||||
| 	'Preparation' => 'Preparation', | ||||
| 	'Recipe' => 'Recipe', | ||||
| 	'Not enough in stock, #1 missing, #2 already on shopping list' => 'Not enough in stock, #1 missing, #2 already on shopping list', | ||||
| 	'Show notes' => 'Show notes', | ||||
| 	'Put missing amount on shopping list' => 'Put missing amount on shopping list', | ||||
| 	'Are you sure to put all missing ingredients for recipe "#1" on the shopping list?' => 'Are you sure to put all missing ingredients for recipe "#1" on the shopping list?', | ||||
| 	'Added for recipe #1' => 'Added for recipe #1', | ||||
| 	'Manage users' => 'Manage users', | ||||
| 	'User' => 'User', | ||||
| 	'Users' => 'Users', | ||||
| 	'Are you sure to delete user "#1"?' => 'Are you sure to delete user "#1"?', | ||||
| 	'Create user' => 'Create user', | ||||
| 	'Edit user' => 'Edit user', | ||||
| 	'First name' => 'First name', | ||||
| 	'Last name' => 'Last name', | ||||
| 	'A username is required' => 'A username is required', | ||||
| 	'Confirm password' => 'Confirm password', | ||||
| 	'Passwords do not match' => 'Passwords do not match', | ||||
| 	'Change password' => 'Change password', | ||||
| 	'Done by' => 'Done by', | ||||
| 	'Last done by' => 'Last done by', | ||||
| 	'Unknown' => 'Unknown', | ||||
| 	'Filter by chore' => 'Filter by chore', | ||||
| 	'Chores journal' => 'Chores journal', | ||||
| 	'0 means suggestions for the next charge cycle are disabled' => '0 means suggestions for the next charge cycle are disabled', | ||||
| 	'Charge cycle interval (days)' => 'Charge cycle interval (days)', | ||||
| 	'Last price' => 'Last price', | ||||
| 	'Price history' => 'Price history', | ||||
| 	'No price history available' => 'No price history available', | ||||
| 	'Price' => 'Price', | ||||
| 	'in #1 per purchase quantity unit' => 'in #1 per purchase quantity unit', | ||||
| 	'The price cannot be lower than #1' => 'The price cannot be lower than #1', | ||||
| 	'#1 product expires within the next #2 days' => '#1 product expires within the next #2 days', | ||||
| 	'#1 product is already expired' => '#1 product is already expired', | ||||
| 	'#1 product is below defined min. stock amount' => '#1 product is below defined min. stock amount', | ||||
| 	'Unit' => 'Unit', | ||||
| 	'Units' => 'Units', | ||||
| 	'#1 chore is due to be done within the next #2 days' => '#1 chore is due to be done within the next #2 days', | ||||
| 	'#1 chore is overdue to be done' => '#1 chore is overdue to be done', | ||||
| 	'#1 battery is due to be charged within the next #2 days' => '#1 battery is due to be charged within the next #2 days', | ||||
| 	'#1 battery is overdue to be charged' => '#1 battery is overdue to be charged', | ||||
| 	'#1 unit was automatically added and will apply in addition to the amount entered here' => '#1 unit was automatically added and will apply in addition to the amount entered here', | ||||
| 	'in singular form' => 'in singular form', | ||||
| 	'in plural form' => 'in plural form', | ||||
| 	'Never expires' => 'Never expires', | ||||
| 	'This cannot be lower than #1' => 'This cannot be lower than #1', | ||||
| 	'-1 means that this product never expires' => '-1 means that this product never expires', | ||||
| 	'Quantity unit' => 'Quantity unit', | ||||
| 	'Only check if a single unit is in stock (a different quantity can then be used above)' => 'Only check if a single unit is in stock (a different quantity can then be used above)', | ||||
| 	'Are you sure to consume all ingredients needed by recipe "#1" (ingredients marked with "check only if a single unit is in stock" will be ignored)?' => 'Are you sure to consume all ingredients needed by recipe "#1" (ingredients marked with "check only if a single unit is in stock" will be ignored)?', | ||||
| 	'Removed all ingredients of recipe "#1" from stock' => 'Removed all ingredients of recipe "#1" from stock', | ||||
| 	'Consume all ingredients needed by this recipe' => 'Consume all ingredients needed by this recipe', | ||||
| 	'Click to show technical details' => 'Click to show technical details', | ||||
| 	'Error while saving, probably this item already exists' => 'Error while saving, probably this item already exists', | ||||
| 	'Error details' => 'Error details', | ||||
| 	'Tasks' => 'Tasks', | ||||
| 	'Show done tasks' => 'Show done tasks', | ||||
| 	'Task' => 'Task', | ||||
| 	'Due' => 'Due', | ||||
| 	'Assigned to' => 'Assigned to', | ||||
| 	'Mark task "#1" as completed' => 'Mark task "#1" as completed', | ||||
| 	'Uncategorized' => 'Uncategorized', | ||||
| 	'Task categories' => 'Task categories', | ||||
| 	'Create task' => 'Create task', | ||||
| 	'A due date is required' => 'A due date is required', | ||||
| 	'Category' => 'Category', | ||||
| 	'Edit task' => 'Edit task', | ||||
| 	'Are you sure to delete task "#1"?' => 'Are you sure to delete task "#1"?', | ||||
| 	'#1 task is due to be done within the next #2 days' => '#1 task is due to be done within the next #2 days', | ||||
| 	'#1 tasks are due to be done within the next #2 days' => '#1 tasks are due to be done within the next #2 days', | ||||
| 	'#1 task is overdue to be done' => '#1 task is overdue to be done', | ||||
| 	'#1 tasks are overdue to be done' => '#1 tasks are overdue to be done', | ||||
| 	'Edit task category' => 'Edit task category', | ||||
| 	'Create task category' => 'Create task category', | ||||
| 	'Product groups' => 'Product groups', | ||||
| 	'Ungrouped' => 'Ungrouped', | ||||
| 	'Create product group' => 'Create product group', | ||||
| 	'Edit product group' => 'Edit product group', | ||||
| 	'Product group' => 'Product group', | ||||
| 	'Are you sure to delete product group "#1"?' => 'Are you sure to delete product group "#1"?', | ||||
| 	'Stay logged in permanently' => 'Stay logged in permanently', | ||||
| 	'When not set, you will get logged out at latest after 30 days' => 'When not set, you will get logged out at latest after 30 days', | ||||
| 	'Filter by status' => 'Filter by status', | ||||
| 	'Below min. stock amount' => 'Below min. stock amount', | ||||
| 	'Expiring soon' => 'Expiring soon', | ||||
| 	'Already expired' => 'Already expired', | ||||
| 	'Due soon' => 'Due soon', | ||||
| 	'Overdue' => 'Overdue', | ||||
| 	'View settings' => 'View settings', | ||||
| 	'Auto reload on external changes' => 'Auto reload on external changes', | ||||
| 	'Enable night mode' => 'Enable night mode', | ||||
| 	'Auto enable in time range' => 'Auto enable in time range', | ||||
| 	'From' => 'From', | ||||
| 	'in format' => 'in format', | ||||
| 	'To' => 'To', | ||||
| 	'Time range goes over midnight' => 'Time range goes over midnight', | ||||
| 	'Product picture' => 'Product picture', | ||||
| 	'No file selected' => 'No file selected', | ||||
| 	'If you don\'t select a file, the current picture will not be altered' => 'If you don\'t select a file, the current picture will not be altered', | ||||
| 	'Delete' => 'Delete', | ||||
| 	'The current picture will be deleted when you save the product' => 'The current picture will be deleted when you save the product', | ||||
| 	'Select file' => 'Select file', | ||||
| 	'Image of product #1' => 'Image of product #1', | ||||
| 	'This product cannot be deleted because it is in stock, please remove the stock amount first.' => 'This product cannot be deleted because it is in stock, please remove the stock amount first.', | ||||
| 	'Delete not possible' => 'Delete not possible', | ||||
| 	'Equipment' => 'Equipment', | ||||
| 	'Instruction manual' => 'Instruction manual', | ||||
| 	'The selected equipment has no instruction manual' => 'The selected equipment has no instruction manual', | ||||
| 	'Notes' => 'Notes', | ||||
| 	'Edit equipment' => 'Edit equipment', | ||||
| 	'Create equipment' => 'Create equipment', | ||||
| 	'If you don\'t select a file, the current instruction manual will not be altered' => 'If you don\'t select a file, the current instruction manual will not be altered', | ||||
| 	'No instruction manual available' => 'No instruction manual available', | ||||
| 	'The current instruction manual will be deleted when you save the equipment' => 'The current instruction manual will be deleted when you save the equipment', | ||||
| 	'No picture available' => 'No picture available', | ||||
| 	'Filter by product group' => 'Filter by product group', | ||||
| 	'Presets for new products' => 'Presets for new products', | ||||
| 	'Included recipes' => 'Included recipes', | ||||
| 	'A recipe is required' => 'A recipe is required', | ||||
| 	'Add included recipe' => 'Add included recipe', | ||||
| 	'Edit included recipe' => 'Edit included recipe', | ||||
| 	'Group' => 'Group', | ||||
| 	'This will be used as a headline to group ingredients together' => 'This will be used as a headline to group ingredients together', | ||||
| 	'Journal' => 'Journal', | ||||
| 	'Stock journal' => 'Stock journal', | ||||
| 	'Filter by product' => 'Filter by product', | ||||
| 	'Booking time' => 'Booking time', | ||||
| 	'Booking type' => 'Booking type', | ||||
| 	'Undo booking' => 'Undo booking', | ||||
| 	'Undone on' => 'Undone on', | ||||
| 	'Batteries journal' => 'Batteries journal', | ||||
| 	'Filter by battery' => 'Filter by battery', | ||||
| 	'Undo charge cycle' => 'Undo charge cycle', | ||||
| 	'Undo chore execution' => 'Undo chore execution', | ||||
| 	'Chore execution successfully undone' => 'Chore execution successfully undone', | ||||
| 	'Undo' => 'Undo', | ||||
| 	'Booking successfully undone' => 'Booking successfully undone', | ||||
| 	'Charge cycle successfully undone' => 'Charge cycle successfully undone', | ||||
| 	'This cannot be negative and must be an integral number' => 'This cannot be negative and must be an integral number', | ||||
| 	'Disable stock fulfillment checking for this ingredient' => 'Disable stock fulfillment checking for this ingredient', | ||||
| 	'Add all list items to stock' => 'Add all list items to stock', | ||||
| 	'Add #3 #1 of #2 to stock' => 'Add #3 #1 of #2 to stock', | ||||
| 	'Adding shopping list item #1 of #2' => 'Adding shopping list item #1 of #2', | ||||
| 	'Use a specific stock item' => 'Use a specific stock item', | ||||
| 	'The first item in this list would be picked by the default rule which is "First expiring first, then first in first out"' => 'The first item in this list would be picked by the default rule which is "First expiring first, then first in first out"', | ||||
| 	'Mark #3 #1 of #2 as open' => 'Mark #3 #1 of #2 as open', | ||||
| 	'When a product was marked as opened, the best before date will be replaced by today + this amount of days (a value of 0 disables this)' => 'When a product was marked as opened, the best before date will be replaced by today + this amount of days (a value of 0 disables this)', | ||||
| 	'Default best before days after opened' => 'Default best before days after opened', | ||||
| 	'Marked #1 #2 of #3 as opened' => 'Marked #1 #2 of #3 as opened', | ||||
| 	'Mark as opened' => 'Mark as opened', | ||||
| 	'Expires on #1; Bought on #2' => 'Expires on #1; Bought on #2', | ||||
| 	'Not opened' => 'Not opened', | ||||
| 	'Opened' => 'Opened', | ||||
| 	'Mark #3 #1 of #2 as open' => 'Mark #3 #1 of #2 as open', | ||||
| 	'#1 opened' => '#1 opened', | ||||
| 	'Product expires' => 'Product expires', | ||||
| 	'Task due' => 'Task due', | ||||
| 	'Chore due' => 'Chore due', | ||||
| 	'Battery charge cycle due' => 'Battery charge cycle due', | ||||
| 	'Show clock in header' => 'Show clock in header', | ||||
| 	'Stock settings' => 'Stock settings', | ||||
| 	'Shopping list to stock workflow' => 'Shopping list to stock workflow', | ||||
| 	'Automatically do the booking using the last price and the amount of the shopping list item, if the product has "Default best before days" set' => 'Automatically do the booking using the last price and the amount of the shopping list item, if the product has "Default best before days" set', | ||||
| 	'Skip' => 'Skip', | ||||
| 	'Servings' => 'Servings', | ||||
| 	'Costs' => 'Costs', | ||||
| 	'Based on the prices of the last purchase per product' => 'Based on the prices of the last purchase per product', | ||||
| 	'The ingredients listed here result in this amount of servings' => 'The ingredients listed here result in this amount of servings', | ||||
| 	'Do not check against the shopping list when adding missing items to it' => 'Do not check against the shopping list when adding missing items to it', | ||||
| 	'By default the amount to be added to the shopping list is "needed amount - stock amount - shopping list amount" - when this is enabled, it is only checked against the stock amount, not against what is already on the shopping list' => 'By default the amount to be added to the shopping list is "needed amount - stock amount - shopping list amount" - when this is enabled, it is only checked against the stock amount, not against what is already on the shopping list', | ||||
| 	'Picture' => 'Picture', | ||||
| 	'Uncheck ingredients to not put them on the shopping list' => 'Uncheck ingredients to not put them on the shopping list', | ||||
| 	'This is for statistical purposes only' => 'This is for statistical purposes only', | ||||
| 	'You have to select a recipe' => 'You have to select a recipe', | ||||
| 	'Key type' => 'Key type', | ||||
| 	'Share/Integrate calendar (iCal)' => 'Share/Integrate calendar (iCal)', | ||||
| 	'Use the following (public) URL to share or integrate the calendar in iCal format' => 'Use the following (public) URL to share or integrate the calendar in iCal format', | ||||
| 	'Allow partial units in stock' => 'Allow partial units in stock', | ||||
| 	'Enable tare weight handling' => 'Enable tare weight handling', | ||||
| 	'This is useful e.g. for flour in jars - on purchase/consume/inventory you always weigh the whole jar, the amount to be posted is then automatically calculated based on what is in stock and the tare weight defined below' => 'This is useful e.g. for flour in jars - on purchase/consume/inventory you always weigh the whole jar, the amount to be posted is then automatically calculated based on what is in stock and the tare weight defined below', | ||||
| 	'Tare weight' => 'Tare weight', | ||||
| 	'Tare weight handling enabled - please weigh the whole container, the amount to be posted will be automatically calculcated' => 'Tare weight handling enabled - please weigh the whole container, the amount to be posted will be automatically calculcated', | ||||
| 	'You have to select a location' => 'You have to select a location', | ||||
| 	'List' => 'List', | ||||
| 	'Gallery' => 'Gallery', | ||||
| 	'The current picture will be deleted when you save the recipe' => 'The current picture will be deleted when you save the recipe' | ||||
| ); | ||||
							
								
								
									
										6
									
								
								localization/es/chore_types.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								localization/es/chore_types.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'manually' => 'Manualmente', | ||||
| 	'dynamic-regular' => 'Dinámico regular' | ||||
| ); | ||||
							
								
								
									
										10
									
								
								localization/es/component_translations.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								localization/es/component_translations.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'timeago_locale' => 'es', | ||||
| 	'timeago_nan' => 'Hace NaN años', | ||||
| 	'moment_locale' => 'es', | ||||
| 	'datatables_localization' => '{"sEmptyTable":"Sin datos en la tabla","sInfo":"Mostrando de  _START_ a _END_ de _TOTAL_ entradas","sInfoEmpty":"Mostrando de 0 a 0 de 0 entradas","sInfoFiltered":"(filtrando a _MAX_ entradas máximas)","sInfoPostFix":"","sInfoThousands":",","sLengthMenu":"Mostrar _MENU_ entradas","sLoadingRecords":"Cargando...","sProcessing":"Procesando...","sSearch":"Buscar:","sZeroRecords":"No se han encontrado resultados coincidentes","oPaginate":{"sFirst":"Primero","sLast":"Último","sNext":"Siguiente","sPrevious":"Anterior"},"oAria":{"sSortAscending":": activar para ordenar ascendentemente","sSortDescending":": activar para ordenar descendentemente"}}', | ||||
| 	'summernote_locale' => 'es-ES', | ||||
| 	'fullcalendar_locale' => 'es' | ||||
| ); | ||||
							
								
								
									
										89
									
								
								localization/es/demo_data.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								localization/es/demo_data.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,89 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'Cookies' => 'Galletas', | ||||
| 	'Chocolate' => 'Chocolate', | ||||
| 	'Pantry' => 'Despensa', | ||||
| 	'Candy cupboard' => 'Estante de los dulces', | ||||
| 	'Tinned food cupboard' => 'Estante de las latas', | ||||
| 	'Fridge' => 'Nevera', | ||||
| 	'Piece' => 'Pieza', | ||||
| 	'Pieces' => 'Piezas', | ||||
| 	'Pack' => 'Pack', | ||||
| 	'Packs' => 'Packs', | ||||
| 	'Glass' => 'Vaso', | ||||
| 	'Glasses' => 'Vasos', | ||||
| 	'Tin' => 'Envase', | ||||
| 	'Tins' => 'Envases', | ||||
| 	'Can' => 'Lata', | ||||
| 	'Cans' => 'Latas', | ||||
| 	'Bunch' => 'Puñado', | ||||
| 	'Bunches' => 'Puñados', | ||||
| 	'Gummy bears' => 'Ositos', | ||||
| 	'Crisps' => 'Patatas fritas', | ||||
| 	'Eggs' => 'Huevos', | ||||
| 	'Noodles' => 'Fideos', | ||||
| 	'Pickles' => 'Pepinillos', | ||||
| 	'Gulash soup' => 'Sopa', | ||||
| 	'Yogurt' => 'Yogurt', | ||||
| 	'Cheese' => 'Queso', | ||||
| 	'Cold cuts' => 'Fiambres', | ||||
| 	'Paprika' => 'Pimentón', | ||||
| 	'Cucumber' => 'Pepino', | ||||
| 	'Radish' => 'Rábano', | ||||
| 	'Tomato' => 'Tomate', | ||||
| 	'Changed towels in the bathroom' => 'Cambiar las toallas del baño', | ||||
| 	'Cleaned the kitchen floor' => 'Limpiar el suelo de la cocina', | ||||
| 	'Warranty ends' => 'Final de la garantía', | ||||
| 	'TV remote control' => 'Mando de la TV', | ||||
| 	'Alarm clock' => 'Despertador', | ||||
| 	'Heat remote control' => 'Mando de la calefacción', | ||||
| 	'Lawn mowed in the garden' => 'Cortar el césped del jardín', | ||||
| 	'Some good snacks' => 'Cosas de picar', | ||||
| 	'Pizza dough' => 'Masa de pizza', | ||||
| 	'Sieved tomatoes' => 'Tomate triturado', | ||||
| 	'Salami' => 'Salami', | ||||
| 	'Toast' => 'Tostada', | ||||
| 	'Minced meat' => 'Carne picada', | ||||
| 	'Pizza' => 'Pizza', | ||||
| 	'Spaghetti bolognese' => 'Spaghetti boloñesa', | ||||
| 	'Sandwiches' => 'Bocadillos', | ||||
| 	'English' => 'Inglés', | ||||
| 	'German' => 'Alemán', | ||||
| 	'Italian' => 'Italiano', | ||||
| 	'Demo in different language' => 'Demo en otro idioma', | ||||
| 	'This is the note content of the recipe ingredient' => 'Este es el contenido de la nota del ingrediente de la receta', | ||||
| 	'Demo User' => 'Usuario de demostración', | ||||
| 	'Gram' => 'Gramo', | ||||
| 	'Grams' => 'Gramos', | ||||
| 	'Flour' => 'Harina', | ||||
| 	'Pancakes' => 'Tortitas', | ||||
| 	'Sugar' => 'Azucar', | ||||
| 	'Home' => 'Casa', | ||||
| 	'Life' => 'Vida', | ||||
| 	'Projects' => 'Proyectos', | ||||
| 	'Repair the garage door' => 'Reparar la puerta del garaje', | ||||
| 	'Fork and improve grocy' => 'Forkea y mejora grocy', | ||||
| 	'Find a solution for what to do when I forget the door keys' => 'Encontrar una solución a qué hacer cuando me olvido las llaves', | ||||
| 	'Sweets' => 'Dulces', | ||||
| 	'Bakery products' => 'Productos de panadería', | ||||
| 	'Tinned food' => 'Comida en lata', | ||||
| 	'Butchery products' => 'Productos de carnicería', | ||||
| 	'Vegetables/Fruits' => 'Verduras/Frutas', | ||||
| 	'Refrigerated products' => 'Productos refrigerados', | ||||
| 	'Coffee machine' => 'Máquina de café', | ||||
| 	'Dishwasher' => 'Lavavajillas', | ||||
| 	'Liter' => 'Litro', | ||||
| 	'Liters' => 'Litros', | ||||
| 	'Bottle' => 'Botella', | ||||
| 	'Bottles' => 'Botellas', | ||||
| 	'Milk' => 'Leche', | ||||
| 	'Chocolate sauce' => 'Salsa de chocolate', | ||||
| 	'Milliliters' => 'Mililitros', | ||||
| 	'Milliliter' => 'Mililitro', | ||||
| 	'Bottom' => 'Fondo', | ||||
| 	'Topping' => 'Parte superior', | ||||
| 	'French' => 'Francés', | ||||
| 	'Turkish' => 'Turkish', | ||||
| 	'Spanish' => 'Spanish' | ||||
| ); | ||||
							
								
								
									
										8
									
								
								localization/es/stock_transaction_types.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								localization/es/stock_transaction_types.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'purchase' => 'Compra', | ||||
| 	'consume' => 'Consumo', | ||||
| 	'inventory-correction' => 'Corrección de inventario', | ||||
| 	'product-opened' => 'Producto abierto' | ||||
| ); | ||||
							
								
								
									
										349
									
								
								localization/es/strings.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										349
									
								
								localization/es/strings.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,349 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'Stock overview' => 'Resumen de stock', | ||||
| 	'#1 products expiring within the next #2 days' => '#1 productos caducan en los próximos #2 días', | ||||
| 	'#1 products are already expired' => '#1 productos ya han caducado', | ||||
| 	'#1 products are below defined min. stock amount' => '#1 productos están por debajo del mínimo de stock definido', | ||||
| 	'Product' => 'Producto', | ||||
| 	'Amount' => 'Cantidad', | ||||
| 	'Next best before date' => 'Siguiente fecha de caducidad', | ||||
| 	'Logout' => 'Cerrar sesión', | ||||
| 	'Chores overview' => 'Resumen de tareas del hogar', | ||||
| 	'Batteries overview' => 'Resumen de pilas', | ||||
| 	'Purchase' => 'Compra', | ||||
| 	'Consume' => 'Consumo', | ||||
| 	'Inventory' => 'Inventario', | ||||
| 	'Shopping list' => 'Lista de la compra', | ||||
| 	'Chore tracking' => 'Seguimiento de tareas del hogar', | ||||
| 	'Battery tracking' => 'Seguimiento de pilas', | ||||
| 	'Products' => 'Productos', | ||||
| 	'Locations' => 'Lugares', | ||||
| 	'Quantity units' => 'Unidades', | ||||
| 	'Chores' => 'Tareas del hogar', | ||||
| 	'Batteries' => 'Pilas', | ||||
| 	'Chore' => 'Tarea del hogar', | ||||
| 	'Next estimated tracking' => 'Siguiente seguimiento estimado', | ||||
| 	'Last tracked' => 'Último seguimiento', | ||||
| 	'Battery' => 'Pila', | ||||
| 	'Last charged' => 'Última carga', | ||||
| 	'Next planned charge cycle' => 'Siguiente ciclo de carga planificado', | ||||
| 	'Best before' => 'Preferentemente antes de', | ||||
| 	'OK' => 'OK', | ||||
| 	'Product overview' => 'Resumen de producto', | ||||
| 	'Stock quantity unit' => 'Unidad de stock', | ||||
| 	'Stock amount' => 'Cantidad de stock', | ||||
| 	'Last purchased' => 'Última compra', | ||||
| 	'Last used' => 'Último uso', | ||||
| 	'Spoiled' => 'Desperdiciado', | ||||
| 	'Barcode lookup is disabled' => 'El buscador de códigos de barras está deshabilitado', | ||||
| 	'will be added to the list of barcodes for the selected product on submit' => 'será añadido a la lista de códigos de barras para el producto seleccionado al enviar', | ||||
| 	'New amount' => 'Nueva cantidad', | ||||
| 	'Note' => 'Nota', | ||||
| 	'Tracked time' => 'Tiempo seguido', | ||||
| 	'Chore overview' => 'Resumen de tarea del hogar', | ||||
| 	'Tracked count' => 'Cuenta seguida', | ||||
| 	'Battery overview' => 'Resumen de pila', | ||||
| 	'Charge cycles count' => 'Cuenta de ciclos de carga', | ||||
| 	'Create shopping list item' => 'Crear elemento de la lista de la compra', | ||||
| 	'Edit shopping list item' => 'Editar elemento de la lista de la compra', | ||||
| 	'Save' => 'Grabar', | ||||
| 	'Add' => 'Añadir', | ||||
| 	'Name' => 'Nombre', | ||||
| 	'Location' => 'Lugar', | ||||
| 	'Min. stock amount' => 'Min. cantidad de stock', | ||||
| 	'QU purchase' => 'Cantidad de compra', | ||||
| 	'QU stock' => 'Cantidad de stock', | ||||
| 	'QU factor' => 'Factor de cantidad', | ||||
| 	'Description' => 'Descripción', | ||||
| 	'Create product' => 'Crear producto', | ||||
| 	'Barcode(s)' => 'Código(s) de barras', | ||||
| 	'Minimum stock amount' => 'Mínima cantidad de stock', | ||||
| 	'Default best before days' => 'Días de caducidad por defecto', | ||||
| 	'Quantity unit purchase' => 'Unidad de compra', | ||||
| 	'Quantity unit stock' => 'Unidad de stock', | ||||
| 	'Factor purchase to stock quantity unit' => 'Factor de unidad entre compra y stock', | ||||
| 	'Create location' => 'Crear lugar', | ||||
| 	'Create quantity unit' => 'Crear unidad', | ||||
| 	'Period type' => 'Tipo de periodo', | ||||
| 	'Period days' => 'Días del periodo', | ||||
| 	'Create chore' => 'Crear tarea del hogar', | ||||
| 	'Used in' => 'Usado en', | ||||
| 	'Create battery' => 'Crear pila', | ||||
| 	'Edit battery' => 'Editar pila', | ||||
| 	'Edit chore' => 'Editar tarea del hogar', | ||||
| 	'Edit quantity unit' => 'Editar unidad', | ||||
| 	'Edit product' => 'Editar producto', | ||||
| 	'Edit location' => 'Editar lugar', | ||||
| 	'Record data' => 'Grabar datos', | ||||
| 	'Manage master data' => 'Administrar datos maestros', | ||||
| 	'This will apply to added products' => 'Esto se aplicará a los productos añadidos', | ||||
| 	'never' => 'nunca', | ||||
| 	'Add products that are below defined min. stock amount' => 'Añadir productos que están por debajo del mínimo de stock definido', | ||||
| 	'For purchases this amount of days will be added to today for the best before date suggestion' => 'Para nuevas compras, esta cantidad de días se añadirán desde hoy como sugerencia de fecha de caducidad', | ||||
| 	'This means 1 #1 purchased will be converted into #2 #3 in stock' => 'Quiere decir que 1 #1 comprada se convertirá en #2 #3 en el stock', | ||||
| 	'Login' => 'Iniciar sesión', | ||||
| 	'Username' => 'Nombre usuario', | ||||
| 	'Password' => 'Contraseña', | ||||
| 	'Invalid credentials, please try again' => 'Credenciales inválidas, prueba de nuevo', | ||||
| 	'Are you sure to delete battery "#1"?' => '¿Estás seguro de querer borrar la pila "#1"?', | ||||
| 	'Yes' => 'Sí', | ||||
| 	'No' => 'No', | ||||
| 	'Are you sure to delete chore "#1"?' => '¿Estás seguro de querer borrar la tarea del hogar "#1"?', | ||||
| 	'"#1" could not be resolved to a product, how do you want to proceed?' => '"#1" no puede resolverse a un producto, ¿cómo quieres proceder?', | ||||
| 	'Create or assign product' => 'Crear o asignar un producto', | ||||
| 	'Cancel' => 'Cancelar', | ||||
| 	'Add as new product' => 'Añadir como un nuevo producto', | ||||
| 	'Add as barcode to existing product' => 'Añadir como código de barras de un producto existente', | ||||
| 	'Add as new product and prefill barcode' => 'Añadir un nuevo producto y rellenar código de barras', | ||||
| 	'Are you sure to delete quantity unit "#1"?' => '¿Estás seguro de querer borrar la unidad "#1"?', | ||||
| 	'Are you sure to delete product "#1"?' => '¿Estás seguro de querer borrar el producto "#1"?', | ||||
| 	'Are you sure to delete location "#1"?' => '¿Estás seguro de querer borrar el lugar "#1"?', | ||||
| 	'Manage API keys' => 'Administrar las claves de API', | ||||
| 	'REST API & data model documentation' => 'Documentación de la API REST y modelo de datos', | ||||
| 	'API keys' => 'Claves de API', | ||||
| 	'Create new API key' => 'Crear nueva clave de API', | ||||
| 	'API key' => 'Clave de API', | ||||
| 	'Expires' => 'Caduca', | ||||
| 	'Created' => 'Creado', | ||||
| 	'This product is not in stock' => 'Este producto no está en stock', | ||||
| 	'This means #1 will be added to stock' => 'Quiere decir que #1 será añadido al stock', | ||||
| 	'This means #1 will be removed from stock' => 'Quiere decir que #1 será eliminado del stock', | ||||
| 	'This means it is estimated that a new execution of this chore is tracked #1 days after the last was tracked' => 'Quiere decir que una nueva ocurrencia de esta tarea del hogar se seguirá #1 días después de la última vez', | ||||
| 	'Removed #1 #2 of #3 from stock' => 'Eliminado #1 #2 de #3 del stock', | ||||
| 	'About grocy' => 'Sobre grocy', | ||||
| 	'Close' => 'Cerrar', | ||||
| 	'#1 batteries are due to be charged within the next #2 days' => '#1 pilas están pendientes de carga en los siguientes #2 días', | ||||
| 	'#1 batteries are overdue to be charged' => '#1 pilas han pasado su fecha de carga prevista', | ||||
| 	'#1 chores are due to be done within the next #2 days' => '#1 tareas del hogar están pendientes de suceder en los siguientes #2 días', | ||||
| 	'#1 chores are overdue to be done' => '#1 tareas del hogar están vencidas', | ||||
| 	'Released on' => 'Publicado el', | ||||
| 	'Consume #3 #1 of #2' => 'Consumir #3 #1 de #2', | ||||
| 	'Added #1 #2 of #3 to stock' => 'Añadido #1 #2 de #3 al stock', | ||||
| 	'Stock amount of #1 is now #2 #3' => 'La cantidad de stock de #1 es ahora #2 #3', | ||||
| 	'Tracked execution of chore #1 on #2' => 'Registrada ejecución de tarea del hogar #1 en #2', | ||||
| 	'Tracked charge cycle of battery #1 on #2' => 'Registrado ciclo de carga de la pila #1 en #2', | ||||
| 	'Consume all #1 which are currently in stock' => 'Consumir todo #1 que está en stock', | ||||
| 	'All' => 'Todo', | ||||
| 	'Track charge cycle of battery #1' => 'Registrar ciclo de carga de la pila #1', | ||||
| 	'Track execution of chore #1' => 'Registrar ejecución de tarea del hogar #1', | ||||
| 	'Filter by location' => 'Filtrar por lugar', | ||||
| 	'Search' => 'Buscar', | ||||
| 	'Not logged in' => 'Sesión no iniciada', | ||||
| 	'You have to select a product' => 'Has de seleccionar un producto', | ||||
| 	'You have to select a chore' => 'Has de seleccionar una tarea del hogar', | ||||
| 	'You have to select a battery' => 'Has de seleccionar una pila', | ||||
| 	'A name is required' => 'Es necesario un nombre', | ||||
| 	'A location is required' => 'Es necesario un lugar', | ||||
| 	'The amount cannot be lower than #1' => 'La cantidad no puede ser menor a #1', | ||||
| 	'This cannot be negative' => 'Esto no puede ser negativo', | ||||
| 	'A quantity unit is required' => 'Es necesaria una unidad', | ||||
| 	'A period type is required' => 'Es necesario un tipo de periodo', | ||||
| 	'A best before date is required and must be later than today' => 'Es necesaria una fecha de caducidad y debe ser posterior a hoy', | ||||
| 	'Settings' => 'Configuración', | ||||
| 	'This can only be before now' => 'Sólo puede ser antes que ahora', | ||||
| 	'Calendar' => 'Calendario', | ||||
| 	'Recipes' => 'Recetas', | ||||
| 	'Edit recipe' => 'Editar receta', | ||||
| 	'New recipe' => 'Nueva receta', | ||||
| 	'Ingredients list' => 'Lista de ingredientes', | ||||
| 	'Add recipe ingredient' => 'Añadir ingrediente', | ||||
| 	'Edit recipe ingredient' => 'Editar ingrediente', | ||||
| 	'Are you sure to delete recipe "#1"?' => '¿Estás seguro de querer borrar la receta "#1"?', | ||||
| 	'Are you sure to delete recipe ingredient "#1"?' => '¿Estás seguro de querer borrar el ingrediente "#1" de la receta?', | ||||
| 	'Are you sure to empty the shopping list?' => '¿Estás seguro de querer borrar la lista de la compra?', | ||||
| 	'Clear list' => 'Borrar lista', | ||||
| 	'Requirements fulfilled' => 'Requerimientos completos', | ||||
| 	'Put missing products on shopping list' => 'Añadir productos faltantes a la lista de la compra', | ||||
| 	'Not enough in stock, #1 ingredients missing' => 'No hay suficiente stock, faltan #1 ingredientes', | ||||
| 	'Enough in stock' => 'Suficiente stock', | ||||
| 	'Not enough in stock, #1 ingredients missing but already on the shopping list' => 'No hay suficiente stock, faltan #1 ingredientes, pero están en la lista de la compra', | ||||
| 	'Expand to fullscreen' => 'Pantalla completa', | ||||
| 	'Ingredients' => 'Ingredientes', | ||||
| 	'Preparation' => 'Preparación', | ||||
| 	'Recipe' => 'Receta', | ||||
| 	'Not enough in stock, #1 missing, #2 already on shopping list' => 'No hay suficiente stock, faltan #1, pero #2 están en la lista de la compra', | ||||
| 	'Show notes' => 'Mostrar notas', | ||||
| 	'Put missing amount on shopping list' => 'Añadir cantidades faltantes en la lista de la compra', | ||||
| 	'Are you sure to put all missing ingredients for recipe "#1" on the shopping list?' => '¿Estás seguro de poner todos los ingredientes faltantes para la recepta "#1" en la lista de la compra?', | ||||
| 	'Added for recipe #1' => 'Añadido para la receta #1', | ||||
| 	'Manage users' => 'Administrar usuarios', | ||||
| 	'User' => 'Usuario', | ||||
| 	'Users' => 'Usuarios', | ||||
| 	'Are you sure to delete user "#1"?' => '¿Estás seguro de borrar el usuario "#1"?', | ||||
| 	'Create user' => 'Crear usuario', | ||||
| 	'Edit user' => 'Editar usuario', | ||||
| 	'First name' => 'Nombre', | ||||
| 	'Last name' => 'Apellidos', | ||||
| 	'A username is required' => 'Es necesario un nombre de usuario', | ||||
| 	'Confirm password' => 'Confirma la contraseña', | ||||
| 	'Passwords do not match' => 'Las contraseñas no coinciden', | ||||
| 	'Change password' => 'Cambiar contraseña', | ||||
| 	'Done by' => 'Hecho el', | ||||
| 	'Last done by' => 'Último hecho el', | ||||
| 	'Unknown' => 'Desconocido', | ||||
| 	'Filter by chore' => 'Filtrar por tarea del hogar', | ||||
| 	'Chores journal' => 'Diario de tareas del hogar', | ||||
| 	'0 means suggestions for the next charge cycle are disabled' => '0 significa que las sugerencias para el siguiente ciclo de carga estarán deshabilitadas', | ||||
| 	'Charge cycle interval (days)' => 'Intervalo de ciclo de carga (días)', | ||||
| 	'Last price' => 'Último precio', | ||||
| 	'Price history' => 'Histórico de precios', | ||||
| 	'No price history available' => 'No hay histórico de precios disponible', | ||||
| 	'Price' => 'Precio', | ||||
| 	'in #1 per purchase quantity unit' => 'en #1 por unidad de compra', | ||||
| 	'The price cannot be lower than #1' => 'El precio no puede ser menor que #1', | ||||
| 	'#1 product expires within the next #2 days' => '#1 producto caduca en los próximos #2 días', | ||||
| 	'#1 product is already expired' => '#1 producto está ya caducado', | ||||
| 	'#1 product is below defined min. stock amount' => '#1 producto está por debajo de la min. cantidad de stock', | ||||
| 	'Unit' => 'Unidad', | ||||
| 	'Units' => 'Unidades', | ||||
| 	'#1 chore is due to be done within the next #2 days' => '#1 tarea del hogar vence en los próximos #2 días', | ||||
| 	'#1 chore is overdue to be done' => '#1 tarea del hogar está vencida', | ||||
| 	'#1 battery is due to be charged within the next #2 days' => '#1 pila debe ser cargada en los próximos #2 días', | ||||
| 	'#1 battery is overdue to be charged' => '#1 pila ha vencido para ser cargada', | ||||
| 	'#1 unit was automatically added and will apply in addition to the amount entered here' => '#1 unidad se ha añadido automáticamente y se aplicará además de la cantidad indicada aquí', | ||||
| 	'in singular form' => 'en singular', | ||||
| 	'in plural form' => 'en plural', | ||||
| 	'Never expires' => 'Nunca caduca', | ||||
| 	'This cannot be lower than #1' => 'No puede ser menor que #1', | ||||
| 	'-1 means that this product never expires' => '-1 significa que este producto nunca caduca', | ||||
| 	'Quantity unit' => 'Unidad', | ||||
| 	'Only check if a single unit is in stock (a different quantity can then be used above)' => 'Solo comprobar si una unidad está en stock (una cantidad diferente puede usarse arriba)', | ||||
| 	'Are you sure to consume all ingredients needed by recipe "#1" (ingredients marked with "check only if a single unit is in stock" will be ignored)?' => '¿Estás seguro de consumir todos los ingredientes necesarios de la receta "#1" (los ingredientes marcados como "solo comprobar si una unidad está en stock" se ignorarán)?', | ||||
| 	'Removed all ingredients of recipe "#1" from stock' => 'Eliminar todos los ingredientes de la recepta "#1" del stock', | ||||
| 	'Consume all ingredients needed by this recipe' => 'Consumir todos los ingredientes necesarios para esta receta', | ||||
| 	'Click to show technical details' => 'Haz click para mostrar detalles técnicos', | ||||
| 	'Error while saving, probably this item already exists' => 'Error al gabar, probablemente este elemento ya existe', | ||||
| 	'Error details' => 'Detalles del error', | ||||
| 	'Tasks' => 'Tareas', | ||||
| 	'Show done tasks' => 'Mostrar tareas completadas', | ||||
| 	'Task' => 'Tarea', | ||||
| 	'Due' => 'Vence', | ||||
| 	'Assigned to' => 'Asignado a', | ||||
| 	'Mark task "#1" as completed' => 'Marcar la tarea "#1" como completada', | ||||
| 	'Uncategorized' => 'Sin categorizar', | ||||
| 	'Task categories' => 'Categoría de tareas', | ||||
| 	'Create task' => 'Crear tarea', | ||||
| 	'A due date is required' => 'Es necesaria una fecha de vencimiento', | ||||
| 	'Category' => 'Categoría', | ||||
| 	'Edit task' => 'Editar tarea', | ||||
| 	'Are you sure to delete task "#1"?' => '¿Estás seguro de borrar la tarea "#1"?', | ||||
| 	'#1 task is due to be done within the next #2 days' => '#1 tarea vence en los próximos #2 días', | ||||
| 	'#1 tasks are due to be done within the next #2 days' => '#1 tareas vencen en los próximos #2 días', | ||||
| 	'#1 task is overdue to be done' => '#1 tarea está vencida', | ||||
| 	'#1 tasks are overdue to be done' => '#1 tareas están vencidas', | ||||
| 	'Edit task category' => 'Editar categoría de tarea', | ||||
| 	'Create task category' => 'Crear categoría de tarea', | ||||
| 	'Product groups' => 'Grupos de producto', | ||||
| 	'Ungrouped' => 'Sin agrupar', | ||||
| 	'Create product group' => 'Crear grupo de productos', | ||||
| 	'Edit product group' => 'Editar grupos de producto', | ||||
| 	'Product group' => 'Grupo de producto', | ||||
| 	'Are you sure to delete product group "#1"?' => '¿Estás seguro de querer borrar el grupo de productos "#1"?', | ||||
| 	'Stay logged in permanently' => 'Permanecer con la sesión iniciada', | ||||
| 	'When not set, you will get logged out at latest after 30 days' => 'Si no está marcado, se cerrará la sesión como máximo en 30 días', | ||||
| 	'Filter by status' => 'Filtrar por estado', | ||||
| 	'Below min. stock amount' => 'Por debajo de la min. cantidad de stock', | ||||
| 	'Expiring soon' => 'Caduca pronto', | ||||
| 	'Already expired' => 'Ya caducado', | ||||
| 	'Due soon' => 'Vence pronto', | ||||
| 	'Overdue' => 'Vencido', | ||||
| 	'View settings' => 'Ver configuración', | ||||
| 	'Auto reload on external changes' => 'Autorecarga en cambios externos', | ||||
| 	'Enable night mode' => 'Habilitar modo noche', | ||||
| 	'Auto enable in time range' => 'Autohabilitar en una franja de tiempo', | ||||
| 	'From' => 'Desde', | ||||
| 	'in format' => 'en formato', | ||||
| 	'To' => 'A', | ||||
| 	'Time range goes over midnight' => 'La franja del tiempo atraviesa la media noche', | ||||
| 	'Product picture' => 'Foto del producto', | ||||
| 	'No file selected' => 'No hay fichero seleccionado', | ||||
| 	'If you don\'t select a file, the current picture will not be altered' => 'Si no seleccionas un fichero, la imagen actual no cambiará', | ||||
| 	'Delete' => 'Borrar', | ||||
| 	'The current picture will be deleted when you save the product' => 'Se borrará la imagen actual si grabas el producto', | ||||
| 	'Select file' => 'Seleccionar fichero', | ||||
| 	'Image of product #1' => 'Imagen del producto #1', | ||||
| 	'This product cannot be deleted because it is in stock, please remove the stock amount first.' => 'Este producto no se puede borrar porque está en stock, por favor, elimina el stock antes.', | ||||
| 	'Delete not possible' => 'No es posible eliminar', | ||||
| 	'Equipment' => 'Equipamiento', | ||||
| 	'Instruction manual' => 'Manual de instrucciones', | ||||
| 	'The selected equipment has no instruction manual' => 'El equipamiento seleccionado no tiene manual de instrucciones', | ||||
| 	'Notes' => 'Notas', | ||||
| 	'Edit equipment' => 'Editar equipamiento', | ||||
| 	'Create equipment' => 'Crear equipamiento', | ||||
| 	'If you don\'t select a file, the current instruction manual will not be altered' => 'Si no seleccionas un fichero, el manual de instrucciones actual no cambiará', | ||||
| 	'No instruction manual available' => 'No hay manual de instrucciones disponible', | ||||
| 	'The current instruction manual will be deleted when you save the equipment' => 'Se borrará el manual de instrucciones si grabas el equipamiento', | ||||
| 	'No picture available' => 'No hay imagen disponible', | ||||
| 	'Filter by product group' => 'Filtrar por grupo de producto', | ||||
| 	'Presets for new products' => 'Configuraciones para nuevos productos', | ||||
| 	'Included recipes' => 'Recetas incluidas', | ||||
| 	'A recipe is required' => 'Es necesaria una receta', | ||||
| 	'Add included recipe' => 'Añadir receta incluida', | ||||
| 	'Edit included recipe' => 'Editar receta incluida', | ||||
| 	'Group' => 'Grupo', | ||||
| 	'This will be used as a headline to group ingredients together' => 'Esto se usará como titular del grupo de ingredientes', | ||||
| 	'Journal' => 'Diario', | ||||
| 	'Stock journal' => 'Diario de stock', | ||||
| 	'Filter by product' => 'Filtrar por producto', | ||||
| 	'Booking time' => 'Momento de reserva', | ||||
| 	'Booking type' => 'Tipo de reserva', | ||||
| 	'Undo booking' => 'Deshacer reserva', | ||||
| 	'Undone on' => 'Deshecho el', | ||||
| 	'Batteries journal' => 'Diario de pilas', | ||||
| 	'Filter by battery' => 'Filtrar por pila', | ||||
| 	'Undo charge cycle' => 'Deshacer el ciclo de carga', | ||||
| 	'Undo chore execution' => 'Deshacer ejecución de tarea del hogar', | ||||
| 	'Chore execution successfully undone' => 'Ejecución de tarea del hogar deshecha', | ||||
| 	'Undo' => 'Deshacer', | ||||
| 	'Booking successfully undone' => 'Reserva deshecha', | ||||
| 	'Charge cycle successfully undone' => 'Ciclo de carga deshecho', | ||||
| 	'This cannot be negative and must be an integral number' => 'No puede ser negativo y ha de ser un número entero', | ||||
| 	'Disable stock fulfillment checking for this ingredient' => 'Deshabilitar comprobación de stock para este ingrediente', | ||||
| 	'Add all list items to stock' => 'Añadir todos los elementos de la lista al stock', | ||||
| 	'Add #3 #1 of #2 to stock' => 'Añadir #3 #1 de #2 al stock', | ||||
| 	'Adding shopping list item #1 of #2' => 'Añadiendo elemento de la lista de la compra #1 a #2', | ||||
| 	'Use a specific stock item' => 'Usar un elemento específico del stock', | ||||
| 	'The first item in this list would be picked by the default rule which is "First expiring first, then first in first out"' => 'El primer elemento de esta lista sería elegido por la regla "primero lo primero a caducar, luego primero en llegar, primero en salir"', | ||||
| 	'Mark #3 #1 of #2 as open' => 'Marcar #3 #1 de #2 como abierto', | ||||
| 	'When a product was marked as opened, the best before date will be replaced by today + this amount of days (a value of 0 disables this)' => 'Cuando un producto es marcado como abierto, la fecha de caducidad se cambiará por hoy más esta cantidad de días (un valor de 0 deshabilita esto)', | ||||
| 	'Default best before days after opened' => 'Días de consumo después de abierto por defecto', | ||||
| 	'Marked #1 #2 of #3 as opened' => 'Marcado #1 #2 de #3 como abierto', | ||||
| 	'Mark as opened' => 'Marcar como abierto', | ||||
| 	'Expires on #1; Bought on #2' => 'Caduca el #1; comprado el #2', | ||||
| 	'Not opened' => 'Sin abrir', | ||||
| 	'Opened' => 'Abierto', | ||||
| 	'Mark #3 #1 of #2 as open' => 'Marcar #3 #1 de #2 como abierto', | ||||
| 	'#1 opened' => '#1 abierto', | ||||
| 	'Product expires' => 'El producto caduca', | ||||
| 	'Task due' => 'Vencimiento de tarea', | ||||
| 	'Chore due' => 'Vencimiento de tarea del hogar', | ||||
| 	'Battery charge cycle due' => 'Vencimiento de ciclo de carga', | ||||
| 	'Show clock in header' => 'Mostrar reloj en la cabecera', | ||||
| 	'Stock settings' => 'Configuración de stock', | ||||
| 	'Shopping list to stock workflow' => 'Flujo de lista de la compra a stock', | ||||
| 	'Automatically do the booking using the last price and the amount of the shopping list item, if the product has "Default best before days" set' => 'Hacer automáticamente la reserva utilizando el último precio y cantidad del elemento de la lista de la compra, si el producto tiene valor en "días de consumo por defecto"', | ||||
| 	'Skip' => 'Pasar', | ||||
| 	'Servings' => 'Servings', | ||||
| 	'Costs' => 'Costs', | ||||
| 	'Based on the prices of the last purchase per product' => 'Based on the prices of the last purchase per product', | ||||
| 	'The ingredients listed here result in this amount of servings' => 'The ingredients listed here result in this amount of servings', | ||||
| 	'Do not check against the shopping list when adding missing items to it' => 'Do not check against the shopping list when adding missing items to it', | ||||
| 	'By default the amount to be added to the shopping list is "needed amount - stock amount - shopping list amount" - when this is enabled, it is only checked against the stock amount, not against what is already on the shopping list' => 'By default the amount to be added to the shopping list is "needed amount - stock amount - shopping list amount" - when this is enabled, it is only checked against the stock amount, not against what is already on the shopping list', | ||||
| 	'Picture' => 'Picture', | ||||
| 	'Uncheck ingredients to not put them on the shopping list' => 'Uncheck ingredients to not put them on the shopping list', | ||||
| 	'This is for statistical purposes only' => 'This is for statistical purposes only', | ||||
| 	'You have to select a recipe' => 'You have to select a recipe', | ||||
| 	'Key type' => 'Key type', | ||||
| 	'Share/Integrate calendar (iCal)' => 'Share/Integrate calendar (iCal)', | ||||
| 	'Use the following (public) URL to share or integrate the calendar in iCal format' => 'Use the following (public) URL to share or integrate the calendar in iCal format', | ||||
| 	'Allow partial units in stock' => 'Allow partial units in stock', | ||||
| 	'Enable tare weight handling' => 'Enable tare weight handling', | ||||
| 	'This is useful e.g. for flour in jars - on purchase/consume/inventory you always weigh the whole jar, the amount to be posted is then automatically calculated based on what is in stock and the tare weight defined below' => 'This is useful e.g. for flour in jars - on purchase/consume/inventory you always weigh the whole jar, the amount to be posted is then automatically calculated based on what is in stock and the tare weight defined below', | ||||
| 	'Tare weight' => 'Tare weight', | ||||
| 	'Tare weight handling enabled - please weigh the whole container, the amount to be posted will be automatically calculcated' => 'Tare weight handling enabled - please weigh the whole container, the amount to be posted will be automatically calculcated', | ||||
| 	'You have to select a location' => 'You have to select a location', | ||||
| 	'List' => 'List', | ||||
| 	'Gallery' => 'Gallery', | ||||
| 	'The current picture will be deleted when you save the recipe' => 'The current picture will be deleted when you save the recipe' | ||||
| ); | ||||
							
								
								
									
										6
									
								
								localization/fr/chore_types.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								localization/fr/chore_types.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'manually' => 'Manuelle', | ||||
| 	'dynamic-regular' => 'Régulière-dynamique' | ||||
| ); | ||||
							
								
								
									
										10
									
								
								localization/fr/component_translations.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								localization/fr/component_translations.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'timeago_locale' => 'fr', | ||||
| 	'timeago_nan' => 'Il y a NaN années', | ||||
| 	'moment_locale' => 'fr', | ||||
| 	'datatables_localization' => '{"sProcessing":"Traitement en cours...","sSearch":"Rechercher :","sLengthMenu":"Afficher _MENU_ éléments","sInfo":"Affichage de l\'élément _START_ à _END_ sur _TOTAL_ éléments","sInfoEmpty":"Affichage de l\'élément 0 à 0 sur 0 élément","sInfoFiltered":"(filtré de _MAX_ éléments au total)","sInfoPostFix":"","sLoadingRecords":"Chargement en cours...","sZeroRecords":"Aucun élément à afficher","sEmptyTable":"Aucune donnée disponible dans le tableau","oPaginate":{"sFirst":"Premier","sPrevious":"Précédent","sNext":"Suivant","sLast":"Dernier"},"oAria":{"sSortAscending":": activer pour trier la colonne par ordre croissant","sSortDescending":": activer pour trier la colonne par ordre décroissant"}}', | ||||
| 	'summernote_locale' => 'fr-FR', | ||||
| 	'fullcalendar_locale' => 'fr' | ||||
| ); | ||||
							
								
								
									
										89
									
								
								localization/fr/demo_data.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								localization/fr/demo_data.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,89 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'Cookies' => 'Cookies', | ||||
| 	'Chocolate' => 'Chocolat', | ||||
| 	'Pantry' => 'Garde-manger', | ||||
| 	'Candy cupboard' => 'Boîte de bonbons', | ||||
| 	'Tinned food cupboard' => 'Conserve de nourriture', | ||||
| 	'Fridge' => 'Réfrigérateur', | ||||
| 	'Piece' => 'Pièce', | ||||
| 	'Pieces' => 'Pièces', | ||||
| 	'Pack' => 'Pack', | ||||
| 	'Packs' => 'Packs', | ||||
| 	'Glass' => 'Verre', | ||||
| 	'Glasses' => 'Verres', | ||||
| 	'Tin' => 'Pot', | ||||
| 	'Tins' => 'Pots', | ||||
| 	'Can' => 'Canette', | ||||
| 	'Cans' => 'Canettes', | ||||
| 	'Bunch' => 'Brunch', | ||||
| 	'Bunches' => 'Brunchs', | ||||
| 	'Gummy bears' => 'Oursons en gélatine', | ||||
| 	'Crisps' => 'Chips', | ||||
| 	'Eggs' => 'Oeufs', | ||||
| 	'Noodles' => 'Nouilles', | ||||
| 	'Pickles' => 'Cornichons', | ||||
| 	'Gulash soup' => 'Soupe de goulache', | ||||
| 	'Yogurt' => 'Yaourt', | ||||
| 	'Cheese' => 'Fromage', | ||||
| 	'Cold cuts' => 'Charcuterie', | ||||
| 	'Paprika' => 'Paprika', | ||||
| 	'Cucumber' => 'Concombre', | ||||
| 	'Radish' => 'Radis', | ||||
| 	'Tomato' => 'Tomate', | ||||
| 	'Changed towels in the bathroom' => 'Changement des serviettes dans la salle de bain', | ||||
| 	'Cleaned the kitchen floor' => 'Nettoyage du sol de la cuisine', | ||||
| 	'Warranty ends' => 'Fin de garantie', | ||||
| 	'TV remote control' => 'Télécommande de la TV', | ||||
| 	'Alarm clock' => 'Réveil', | ||||
| 	'Heat remote control' => 'Télécommande du chauffage', | ||||
| 	'Lawn mowed in the garden' => 'Jardin tondu', | ||||
| 	'Some good snacks' => 'Quelques bons snacks', | ||||
| 	'Pizza dough' => 'Pâte à pizza', | ||||
| 	'Sieved tomatoes' => 'Sauce tomate', | ||||
| 	'Salami' => 'Salami', | ||||
| 	'Toast' => 'Pain grillé', | ||||
| 	'Minced meat' => 'Viande hachée', | ||||
| 	'Pizza' => 'PIzza', | ||||
| 	'Spaghetti bolognese' => 'Spaghetti bolognaise', | ||||
| 	'Sandwiches' => 'Sandwiches', | ||||
| 	'English' => 'Anglais', | ||||
| 	'German' => 'Allemand', | ||||
| 	'Italian' => 'Italien', | ||||
| 	'Demo in different language' => 'Démo dans une langue différente', | ||||
| 	'This is the note content of the recipe ingredient' => 'Ceci est le contenu de la note concernant l\'ingrédient de la recette', | ||||
| 	'Demo User' => 'Utilisateur de démonstration', | ||||
| 	'Gram' => 'Gramme', | ||||
| 	'Grams' => 'Grammes', | ||||
| 	'Flour' => 'Farine', | ||||
| 	'Pancakes' => 'Crêpes', | ||||
| 	'Sugar' => 'Sucre', | ||||
| 	'Home' => 'Domicile', | ||||
| 	'Life' => 'Vie', | ||||
| 	'Projects' => 'Projets', | ||||
| 	'Repair the garage door' => 'Réparer la porte du garage', | ||||
| 	'Fork and improve grocy' => 'Forker et améliorer grocy', | ||||
| 	'Find a solution for what to do when I forget the door keys' => 'Trouver une solution pour savoir quoi faire quand j\'oublie les clefs de la porte', | ||||
| 	'Sweets' => 'Bonbons', | ||||
| 	'Bakery products' => 'Produits de la boulangerie', | ||||
| 	'Tinned food' => 'Conserve', | ||||
| 	'Butchery products' => 'Produits de la boucherie', | ||||
| 	'Vegetables/Fruits' => 'Légumes/Fruits', | ||||
| 	'Refrigerated products' => 'Produits réfrigérés', | ||||
| 	'Coffee machine' => 'Machie à café', | ||||
| 	'Dishwasher' => 'Lave-vaisselle', | ||||
| 	'Liter' => 'Litière', | ||||
| 	'Liters' => 'Litières', | ||||
| 	'Bottle' => 'Bouteille', | ||||
| 	'Bottles' => 'Bouteilles', | ||||
| 	'Milk' => 'Lait', | ||||
| 	'Chocolate sauce' => 'Coulis de chocolat', | ||||
| 	'Milliliters' => 'Millilitres', | ||||
| 	'Milliliter' => 'Millilitre', | ||||
| 	'Bottom' => 'Dessous', | ||||
| 	'Topping' => 'Garniture', | ||||
| 	'French' => 'Français', | ||||
| 	'Turkish' => 'Turkish', | ||||
| 	'Spanish' => 'Spanish' | ||||
| ); | ||||
							
								
								
									
										8
									
								
								localization/fr/stock_transaction_types.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								localization/fr/stock_transaction_types.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'purchase' => 'Achat', | ||||
| 	'consume' => 'Consommation', | ||||
| 	'inventory-correction' => 'Correction d\'inventaire', | ||||
| 	'product-opened' => 'Produit ouvert' | ||||
| ); | ||||
							
								
								
									
										349
									
								
								localization/fr/strings.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										349
									
								
								localization/fr/strings.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,349 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'Stock overview' => 'Aperçu du stock', | ||||
| 	'#1 products expiring within the next #2 days' => '#1 produits se périment dans les #2 jours', | ||||
| 	'#1 products are already expired' => '#1 produits sont périmés', | ||||
| 	'#1 products are below defined min. stock amount' => '#1 produits sont sous le seuil de stock minimum', | ||||
| 	'Product' => 'Produit', | ||||
| 	'Amount' => 'Quantité', | ||||
| 	'Next best before date' => 'Prochaine date de péremption', | ||||
| 	'Logout' => 'Se déconnecter', | ||||
| 	'Chores overview' => 'Aperçu des corvées', | ||||
| 	'Batteries overview' => 'Batteries', | ||||
| 	'Purchase' => 'Achat', | ||||
| 	'Consume' => 'Consommation', | ||||
| 	'Inventory' => 'Inventaire', | ||||
| 	'Shopping list' => 'Liste de courses', | ||||
| 	'Chore tracking' => 'Suivi des corvées', | ||||
| 	'Battery tracking' => 'Suivi des batteries', | ||||
| 	'Products' => 'Produits', | ||||
| 	'Locations' => 'Emplacements', | ||||
| 	'Quantity units' => 'Formats', | ||||
| 	'Chores' => 'Corvées', | ||||
| 	'Batteries' => 'Batteries', | ||||
| 	'Chore' => 'Corvée', | ||||
| 	'Next estimated tracking' => 'Prochaine occurrence estimée', | ||||
| 	'Last tracked' => 'Dernière réalisation', | ||||
| 	'Battery' => 'Batterie', | ||||
| 	'Last charged' => 'Dernier chargement', | ||||
| 	'Next planned charge cycle' => 'Prochaine charge planifiée', | ||||
| 	'Best before' => 'Date d\'expiration', | ||||
| 	'OK' => 'Ok', | ||||
| 	'Product overview' => 'Aperçu du produit', | ||||
| 	'Stock quantity unit' => 'Format de stockage', | ||||
| 	'Stock amount' => 'Quantité en stock', | ||||
| 	'Last purchased' => 'Dernier achat', | ||||
| 	'Last used' => 'Dernière utilisation', | ||||
| 	'Spoiled' => 'Périmé', | ||||
| 	'Barcode lookup is disabled' => 'La recherche par code barres est désactivée', | ||||
| 	'will be added to the list of barcodes for the selected product on submit' => 'sera ajouté à la liste des codes barres du produit sélectionné à l\'envoi', | ||||
| 	'New amount' => 'Nouvelle quantité', | ||||
| 	'Note' => 'Note', | ||||
| 	'Tracked time' => 'Réalisé le', | ||||
| 	'Chore overview' => 'Aperçu de la corvée', | ||||
| 	'Tracked count' => 'Nombre de réalisations', | ||||
| 	'Battery overview' => 'Aperçu des batteries', | ||||
| 	'Charge cycles count' => 'Nombre de charges', | ||||
| 	'Create shopping list item' => 'Créer une liste de courses', | ||||
| 	'Edit shopping list item' => 'Modifier une liste de courses', | ||||
| 	'Save' => 'Sauvegarder', | ||||
| 	'Add' => 'Ajouter', | ||||
| 	'Name' => 'Nom', | ||||
| 	'Location' => 'Emplacement', | ||||
| 	'Min. stock amount' => 'Quantité minimum en stock', | ||||
| 	'QU purchase' => 'Format achat', | ||||
| 	'QU stock' => 'Format stock', | ||||
| 	'QU factor' => 'Facteur format', | ||||
| 	'Description' => 'Description', | ||||
| 	'Create product' => 'Créer un produit', | ||||
| 	'Barcode(s)' => 'Code(s) barres', | ||||
| 	'Minimum stock amount' => 'Quantité minimum en stock', | ||||
| 	'Default best before days' => 'Jours avant péremption par défaut', | ||||
| 	'Quantity unit purchase' => 'Format à l\'achat', | ||||
| 	'Quantity unit stock' => 'Format au stockage', | ||||
| 	'Factor purchase to stock quantity unit' => 'Facteur entre la quantité à l\'achat et la quantité en stock', | ||||
| 	'Create location' => 'Créer un emplacement', | ||||
| 	'Create quantity unit' => 'Créer un format', | ||||
| 	'Period type' => 'Type de période', | ||||
| 	'Period days' => 'Jours dans la période', | ||||
| 	'Create chore' => 'Créer une corvée', | ||||
| 	'Used in' => 'Utilisé dans', | ||||
| 	'Create battery' => 'Créer une batterie', | ||||
| 	'Edit battery' => 'Modifier une batterie', | ||||
| 	'Edit chore' => 'Modifier une corvée', | ||||
| 	'Edit quantity unit' => 'Modifier le format', | ||||
| 	'Edit product' => 'Modifier le produit', | ||||
| 	'Edit location' => 'Modifier l\'emplacement', | ||||
| 	'Record data' => 'Enregistrer les données', | ||||
| 	'Manage master data' => 'Gérer les données', | ||||
| 	'This will apply to added products' => 'Sera appliqué aux produits ajoutés', | ||||
| 	'never' => 'jamais', | ||||
| 	'Add products that are below defined min. stock amount' => 'Ajouter les produits qui sont en dessous du seuil de stock minimum', | ||||
| 	'For purchases this amount of days will be added to today for the best before date suggestion' => 'A l\'achat, ce nombre de jours sera ajouté à la date de péremption suggérée', | ||||
| 	'This means 1 #1 purchased will be converted into #2 #3 in stock' => '1 #1 acheté sera converti en #2 #3 dans le stock', | ||||
| 	'Login' => 'Se connecter', | ||||
| 	'Username' => 'Identifiant', | ||||
| 	'Password' => 'Mot de passe', | ||||
| 	'Invalid credentials, please try again' => 'Identifiants invalides, merci de réessayer', | ||||
| 	'Are you sure to delete battery "#1"?' => 'Êtes vous sûr de vouloir supprimer la batterie "#1" ?', | ||||
| 	'Yes' => 'Oui', | ||||
| 	'No' => 'Non', | ||||
| 	'Are you sure to delete chore "#1"?' => 'Voulez-vous vraiment supprimer la corvée "#1" ?', | ||||
| 	'"#1" could not be resolved to a product, how do you want to proceed?' => '"#1" n\'a pas été retrouvé en tant que produit, comment voulez-vous procéder ?', | ||||
| 	'Create or assign product' => 'Créer ou assigner à un produit', | ||||
| 	'Cancel' => 'Annuler', | ||||
| 	'Add as new product' => 'Ajouter un nouveau produit', | ||||
| 	'Add as barcode to existing product' => 'Ajouter en tant que code-barres à un produit existant', | ||||
| 	'Add as new product and prefill barcode' => 'Ajouter un nouveau produit et pré-renseigner le code-barres', | ||||
| 	'Are you sure to delete quantity unit "#1"?' => 'Voulez-vous vraiment supprimer le format "#1" ?', | ||||
| 	'Are you sure to delete product "#1"?' => 'Voulez-vous vraiment supprimer le produit "#1" ?', | ||||
| 	'Are you sure to delete location "#1"?' => 'Voulez-vous vraiment supprimer l\'emplacement "#1" ?', | ||||
| 	'Manage API keys' => 'Gérer les clefs API', | ||||
| 	'REST API & data model documentation' => 'Documentation sur l\'API REST & le modèle des données', | ||||
| 	'API keys' => 'Clefs API', | ||||
| 	'Create new API key' => 'Créer une nouvelle clef API', | ||||
| 	'API key' => 'Clef API', | ||||
| 	'Expires' => 'Valide jusqu\'à', | ||||
| 	'Created' => 'Créée', | ||||
| 	'This product is not in stock' => 'Ce produit n\'est pas en stock', | ||||
| 	'This means #1 will be added to stock' => '#1 sera ajouté au stock', | ||||
| 	'This means #1 will be removed from stock' => '#1 sera supprimé du stock', | ||||
| 	'This means it is estimated that a new execution of this chore is tracked #1 days after the last was tracked' => 'La prochaine exécution de cette corvée sera programmée #1 jours après sa dernière exécution', | ||||
| 	'Removed #1 #2 of #3 from stock' => '#1 #2 de #3 supprimés du stock', | ||||
| 	'About grocy' => 'À propos de grocy', | ||||
| 	'Close' => 'Fermer', | ||||
| 	'#1 batteries are due to be charged within the next #2 days' => '#1 batteries doivent être rechargées dans les #2 prochains jours', | ||||
| 	'#1 batteries are overdue to be charged' => '#1 batteries n\'ont pas été rechargées à temps', | ||||
| 	'#1 chores are due to be done within the next #2 days' => '#1 corvées doivent être réalisées dans les #2 prochains jours', | ||||
| 	'#1 chores are overdue to be done' => '#1 corvées n\'ont pas été réalisées à temps', | ||||
| 	'Released on' => 'Date de sortie', | ||||
| 	'Consume #3 #1 of #2' => 'Consommer #3 #1 de #2', | ||||
| 	'Added #1 #2 of #3 to stock' => '#1 #2 de #3 ajoutés au stock', | ||||
| 	'Stock amount of #1 is now #2 #3' => 'La quantité en stock de #1 est maintenant de #2 #3', | ||||
| 	'Tracked execution of chore #1 on #2' => 'La corvée "#1" a été réalisée le #2', | ||||
| 	'Tracked charge cycle of battery #1 on #2' => 'La batterie "#1" a été rechargée le #2', | ||||
| 	'Consume all #1 which are currently in stock' => 'Consommer tous les #1 actuellement en stock', | ||||
| 	'All' => 'Tout', | ||||
| 	'Track charge cycle of battery #1' => 'Indiquer le rechargement de la batterie #1', | ||||
| 	'Track execution of chore #1' => 'Indiquer la réalisation de la corvée #1', | ||||
| 	'Filter by location' => 'Filtrer par emplacement', | ||||
| 	'Search' => 'Recherche', | ||||
| 	'Not logged in' => 'Non connecté', | ||||
| 	'You have to select a product' => 'Vous devez sélectionner un produit', | ||||
| 	'You have to select a chore' => 'Vous devez sélectionner une corvée', | ||||
| 	'You have to select a battery' => 'Vous devez sélectionner une batterie', | ||||
| 	'A name is required' => 'Un nom est requis', | ||||
| 	'A location is required' => 'Un emplacement est requis', | ||||
| 	'The amount cannot be lower than #1' => 'La quantité ne peut être inférieure à #1', | ||||
| 	'This cannot be negative' => 'Ne peut être négatif', | ||||
| 	'A quantity unit is required' => 'Un format est requis', | ||||
| 	'A period type is required' => 'Un type de période est requis', | ||||
| 	'A best before date is required and must be later than today' => 'Une date de péremption est requise et doit être supérieure à la date du jour', | ||||
| 	'Settings' => 'Paramètres', | ||||
| 	'This can only be before now' => 'Ne peut être qu\'antérieur à maintenant', | ||||
| 	'Calendar' => 'Calendrier', | ||||
| 	'Recipes' => 'Recettes', | ||||
| 	'Edit recipe' => 'Modifier une recette', | ||||
| 	'New recipe' => 'Nouvelle recette', | ||||
| 	'Ingredients list' => 'Liste des ingrédients', | ||||
| 	'Add recipe ingredient' => 'Ajouter un ingrédient dans la recette', | ||||
| 	'Edit recipe ingredient' => 'Modifier un ingrédient dans la recette', | ||||
| 	'Are you sure to delete recipe "#1"?' => 'Voulez-vous vraiment supprimer la recette "#1" ?', | ||||
| 	'Are you sure to delete recipe ingredient "#1"?' => 'Voulez-vous vraiment supprimer l\'ingrédient "#1" de la recette ?', | ||||
| 	'Are you sure to empty the shopping list?' => 'Voulez-vous vraiment vider la liste de courses ?', | ||||
| 	'Clear list' => 'Vider la liste', | ||||
| 	'Requirements fulfilled' => 'Prérequis remplis', | ||||
| 	'Put missing products on shopping list' => 'Ajouter les produits manquants dans la liste de courses', | ||||
| 	'Not enough in stock, #1 ingredients missing' => 'Pas assez en stock, #1 ingrédients manquants', | ||||
| 	'Enough in stock' => 'Il y en a assez en stock', | ||||
| 	'Not enough in stock, #1 ingredients missing but already on the shopping list' => 'Pas assez en stock, #1 ingrédients manquants mais déjà dans la liste de courses', | ||||
| 	'Expand to fullscreen' => 'Mettre en plein écran', | ||||
| 	'Ingredients' => 'Ingrédients', | ||||
| 	'Preparation' => 'Préparation', | ||||
| 	'Recipe' => 'Recette', | ||||
| 	'Not enough in stock, #1 missing, #2 already on shopping list' => 'Pas assez en stock, #1 manquant et #2 déjà dans la liste de courses', | ||||
| 	'Show notes' => 'Afficher les notes', | ||||
| 	'Put missing amount on shopping list' => 'Ajouter la quantité manquante dans la liste de courses', | ||||
| 	'Are you sure to put all missing ingredients for recipe "#1" on the shopping list?' => 'Voulez-vous vraiment ajouter tous les ingrédients manquants de la recette "#1" dans la liste de courses ?', | ||||
| 	'Added for recipe #1' => 'Ajoutés pour la recette #1', | ||||
| 	'Manage users' => 'Gérer les utilisateurs', | ||||
| 	'User' => 'Utilisateur', | ||||
| 	'Users' => 'Utilisateurs', | ||||
| 	'Are you sure to delete user "#1"?' => 'Voulez-vous vraiment supprimer l\'utilisateur "#1" ?', | ||||
| 	'Create user' => 'Créer un utilisateur', | ||||
| 	'Edit user' => 'Modifier un utilisateur', | ||||
| 	'First name' => 'Prénom', | ||||
| 	'Last name' => 'Nom', | ||||
| 	'A username is required' => 'Un nom d\'utilisateur est requis', | ||||
| 	'Confirm password' => 'Confirmation du mot de passe', | ||||
| 	'Passwords do not match' => 'Les mots de passe ne sont pas identiques', | ||||
| 	'Change password' => 'Changer le mot de passe', | ||||
| 	'Done by' => 'Fait par', | ||||
| 	'Last done by' => 'Dernière réalisation par', | ||||
| 	'Unknown' => 'Inconnu', | ||||
| 	'Filter by chore' => 'Filtrer par corvée', | ||||
| 	'Chores journal' => 'Journal des corvées', | ||||
| 	'0 means suggestions for the next charge cycle are disabled' => '0 implique que les suggestions du prochain cycle de charge seront désactivées', | ||||
| 	'Charge cycle interval (days)' => 'Intervalle du cycle de charge (jours)', | ||||
| 	'Last price' => 'Dernier prix', | ||||
| 	'Price history' => 'Historique des prix', | ||||
| 	'No price history available' => 'Aucun historique disponible', | ||||
| 	'Price' => 'Prix', | ||||
| 	'in #1 per purchase quantity unit' => 'en #1 par quantité achetée (au format d\'achat)', | ||||
| 	'The price cannot be lower than #1' => 'Le prix ne peut être inférieur à #1', | ||||
| 	'#1 product expires within the next #2 days' => '#1 produit se périme dans les #2 prochains jours', | ||||
| 	'#1 product is already expired' => '#1 produit est périmé', | ||||
| 	'#1 product is below defined min. stock amount' => '#1 produit est sous le seuil de stock minimum', | ||||
| 	'Unit' => 'Unité', | ||||
| 	'Units' => 'Unités', | ||||
| 	'#1 chore is due to be done within the next #2 days' => '#1 corvée doit être réalisée dans les #2 prochains jours', | ||||
| 	'#1 chore is overdue to be done' => '#1 corvée n\'a pas été réalisée à temps', | ||||
| 	'#1 battery is due to be charged within the next #2 days' => '#1 batterie doit être rechargée dans les #2 prochains jours', | ||||
| 	'#1 battery is overdue to be charged' => '#1 batterie n\'a pas été rechargée à temps', | ||||
| 	'#1 unit was automatically added and will apply in addition to the amount entered here' => '#1 unité a automatiquement été ajoutée et sera appliquée en plus à la quantité entrée ici', | ||||
| 	'in singular form' => 'Au singulier', | ||||
| 	'in plural form' => 'Au pluriel', | ||||
| 	'Never expires' => 'Ne périme jamais', | ||||
| 	'This cannot be lower than #1' => 'Ne peut être inférieur à #1', | ||||
| 	'-1 means that this product never expires' => '-1 implique que ce produit ne périme jamais', | ||||
| 	'Quantity unit' => 'Format', | ||||
| 	'Only check if a single unit is in stock (a different quantity can then be used above)' => 'Vérifier uniquement si une unité est en stock (une quantité différente peut alors être utilisée au dessus)', | ||||
| 	'Are you sure to consume all ingredients needed by recipe "#1" (ingredients marked with "check only if a single unit is in stock" will be ignored)?' => 'Voulez-vous vraiment consommer tous les ingrédients requis par la recette "#1" (les ingrédients avec l\'option "Vérifier uniquement si une unité est en stock" seront ignorés) ?', | ||||
| 	'Removed all ingredients of recipe "#1" from stock' => 'Enlever tous les ingrédients de la recette "#1" du stock', | ||||
| 	'Consume all ingredients needed by this recipe' => 'Consommer tous les ingrédients requis par cette recette', | ||||
| 	'Click to show technical details' => 'Cliquer pour afficher les détails techniques', | ||||
| 	'Error while saving, probably this item already exists' => 'Erreur à l\'enregistrement, cet objet existe déjà', | ||||
| 	'Error details' => 'Détails sur l\'erreur', | ||||
| 	'Tasks' => 'Tâches', | ||||
| 	'Show done tasks' => 'Afficher les tâches terminées', | ||||
| 	'Task' => 'Tâche', | ||||
| 	'Due' => 'À faire', | ||||
| 	'Assigned to' => 'Assigné à', | ||||
| 	'Mark task "#1" as completed' => 'Indiquer la tâche "#1" comme terminée', | ||||
| 	'Uncategorized' => 'Sans catégorie', | ||||
| 	'Task categories' => 'Catégories de tâche', | ||||
| 	'Create task' => 'Créer une tâche', | ||||
| 	'A due date is required' => 'Une date de réalisation est requise', | ||||
| 	'Category' => 'Catégorie', | ||||
| 	'Edit task' => 'Modifier la tâche', | ||||
| 	'Are you sure to delete task "#1"?' => 'Voulez-vous vraiment supprimer la tâche "#1" ?', | ||||
| 	'#1 task is due to be done within the next #2 days' => '#1 tâche doit être réalisée dans les #2 prochains jours', | ||||
| 	'#1 tasks are due to be done within the next #2 days' => '#1 tâches doivent être réalisées dans les #2 prochains jours', | ||||
| 	'#1 task is overdue to be done' => '#1 tâche n\'a pas été réalisée à temps', | ||||
| 	'#1 tasks are overdue to be done' => '#1 tâches n\'ont pas été réalisées à temps', | ||||
| 	'Edit task category' => 'Modifier la catégorie de tâche', | ||||
| 	'Create task category' => 'Créer une catégorie de tâche', | ||||
| 	'Product groups' => 'Groupes de produit', | ||||
| 	'Ungrouped' => 'Sans groupe', | ||||
| 	'Create product group' => 'Créer un groupe de produit', | ||||
| 	'Edit product group' => 'Modifier le groupe de produit', | ||||
| 	'Product group' => 'Groupe de produit', | ||||
| 	'Are you sure to delete product group "#1"?' => 'Voulez-vous vraiment supprimer le groupe de produit "#1" ?', | ||||
| 	'Stay logged in permanently' => 'Rester connecté de manière permanente', | ||||
| 	'When not set, you will get logged out at latest after 30 days' => 'Si non défini, vous serez déconnecté après au moins 30 jours', | ||||
| 	'Filter by status' => 'Filtrer par statut', | ||||
| 	'Below min. stock amount' => 'En dessous du seuil de stock minimum', | ||||
| 	'Expiring soon' => 'Expire bientôt', | ||||
| 	'Already expired' => 'Déjà périmé', | ||||
| 	'Due soon' => 'À réaliser bientôt', | ||||
| 	'Overdue' => 'En retard', | ||||
| 	'View settings' => 'Voir les paramètres', | ||||
| 	'Auto reload on external changes' => 'Mettre à jour automatiquement lors d\'un changement externe', | ||||
| 	'Enable night mode' => 'Activer le mode nuit', | ||||
| 	'Auto enable in time range' => 'Activer automatiquement pendant la période', | ||||
| 	'From' => 'De', | ||||
| 	'in format' => 'Au format', | ||||
| 	'To' => 'à', | ||||
| 	'Time range goes over midnight' => 'La période inclus minuit', | ||||
| 	'Product picture' => 'Photo du produit', | ||||
| 	'No file selected' => 'Aucun fichier sélectionné', | ||||
| 	'If you don\'t select a file, the current picture will not be altered' => 'Si vous ne sélectionnez pas de photo, l\'actuelle sera conservée', | ||||
| 	'Delete' => 'Supprimer', | ||||
| 	'The current picture will be deleted when you save the product' => 'La photo actuelle va être supprimée lors de la sauvegarde du produit', | ||||
| 	'Select file' => 'Sélectionner un fichier', | ||||
| 	'Image of product #1' => 'Photo du produit #1', | ||||
| 	'This product cannot be deleted because it is in stock, please remove the stock amount first.' => 'Ce produit ne peut être supprimé puisqu\'il est en stock. Merci d\'enlever la quantité en stock avant.', | ||||
| 	'Delete not possible' => 'Impossible de supprimer', | ||||
| 	'Equipment' => 'Équipement', | ||||
| 	'Instruction manual' => 'Manuel d\'utilisation', | ||||
| 	'The selected equipment has no instruction manual' => 'L\'équipement sélectionné n\'a pas de manuel d\'utilisation', | ||||
| 	'Notes' => 'Notes', | ||||
| 	'Edit equipment' => 'Modifier un équipement', | ||||
| 	'Create equipment' => 'Créer un équipement', | ||||
| 	'If you don\'t select a file, the current instruction manual will not be altered' => 'Si vous ne sélectionnez pas de fichier, le manuel actuel ne sera pas modifié', | ||||
| 	'No instruction manual available' => 'Aucun manuel d\'utilisation disponible', | ||||
| 	'The current instruction manual will be deleted when you save the equipment' => 'Le manuel d\'utilisation actuel sera supprimé lors de la sauvegarde de cet équipement', | ||||
| 	'No picture available' => 'Aucune photo disponible', | ||||
| 	'Filter by product group' => 'Filtrer par groupe de produits', | ||||
| 	'Presets for new products' => 'Modèle pour les nouveaux produits', | ||||
| 	'Included recipes' => 'Recettes incluses', | ||||
| 	'A recipe is required' => 'Une recette est requise', | ||||
| 	'Add included recipe' => 'Ajouter une recette incluse', | ||||
| 	'Edit included recipe' => 'Supprimer une recette incluse', | ||||
| 	'Group' => 'Groupe', | ||||
| 	'This will be used as a headline to group ingredients together' => 'Cela sera utilisé comme titre pour regrouper les ingrédients ensemble', | ||||
| 	'Journal' => 'Journal', | ||||
| 	'Stock journal' => 'Journal du stock', | ||||
| 	'Filter by product' => 'Filtrer par produit', | ||||
| 	'Booking time' => 'Temps de réservation', | ||||
| 	'Booking type' => 'Type de réservation', | ||||
| 	'Undo booking' => 'Annuler la réservation', | ||||
| 	'Undone on' => 'Annulé le', | ||||
| 	'Batteries journal' => 'Journal des batteries', | ||||
| 	'Filter by battery' => 'Filtrer par batterie', | ||||
| 	'Undo charge cycle' => 'Annuler le cycle de charge', | ||||
| 	'Undo chore execution' => 'Annuler la réalisation de la corvée', | ||||
| 	'Chore execution successfully undone' => 'La réalisation de la corvée a bien été annulée', | ||||
| 	'Undo' => 'Annuler', | ||||
| 	'Booking successfully undone' => 'Réservation annulée', | ||||
| 	'Charge cycle successfully undone' => 'Le cycle de charge a bien été annulé', | ||||
| 	'This cannot be negative and must be an integral number' => 'Ne peut être négatif et doit être un nombre entier', | ||||
| 	'Disable stock fulfillment checking for this ingredient' => 'Désactiver la vérification du stock pour cet ingrédient', | ||||
| 	'Add all list items to stock' => 'Ajouter toute la liste dans le stock', | ||||
| 	'Add #3 #1 of #2 to stock' => 'Ajouter #3 #1 de #2 au stock', | ||||
| 	'Adding shopping list item #1 of #2' => 'Ajout du produit #1 sur #2 de la liste de courses', | ||||
| 	'Use a specific stock item' => 'Utiliser un objet spécifique du stock', | ||||
| 	'The first item in this list would be picked by the default rule which is "First expiring first, then first in first out"' => 'Le premier élément de cette liste sera sélectionné par la règle par défaut qui est "Le premier arrivant à péremption en premier, puis premier entré premier sorti"', | ||||
| 	'Mark #3 #1 of #2 as open' => 'Indiquer #3 #1 de #2 comme ouvert', | ||||
| 	'When a product was marked as opened, the best before date will be replaced by today + this amount of days (a value of 0 disables this)' => 'Quand un produit est marqué comme ouvert, la date de péremption sera remplacée par la date du jour + ce nombre de jours (une valeur de 0 désactive ce changement)', | ||||
| 	'Default best before days after opened' => 'Date de péremption en jours par défaut après ouverture', | ||||
| 	'Marked #1 #2 of #3 as opened' => '#1 #2 de #3 indiqués comme ouverts', | ||||
| 	'Mark as opened' => 'Indiquer comme ouvert', | ||||
| 	'Expires on #1; Bought on #2' => 'Périme le #1; Acheté le #2', | ||||
| 	'Not opened' => 'Non ouvert', | ||||
| 	'Opened' => 'Ouvert', | ||||
| 	'Mark #3 #1 of #2 as open' => 'Indiquer #3 #1 de #2 comme ouvert', | ||||
| 	'#1 opened' => '#1 ouvert', | ||||
| 	'Product expires' => 'Expiration du produit', | ||||
| 	'Task due' => 'Tâche à réaliser', | ||||
| 	'Chore due' => 'Corvée à réaliser', | ||||
| 	'Battery charge cycle due' => 'Rechargement à réaliser', | ||||
| 	'Show clock in header' => 'Afficher l\'horloge dans l\'en-tête', | ||||
| 	'Stock settings' => 'Paramètres du stock', | ||||
| 	'Shopping list to stock workflow' => 'Transition de la liste de courses vers le stock', | ||||
| 	'Automatically do the booking using the last price and the amount of the shopping list item, if the product has "Default best before days" set' => 'Réaliser automatiquement les achats en utilisant le dernier prix connu et la quantité indiquée dans la liste, si le premier a une date de péremption par défaut renseignée', | ||||
| 	'Skip' => 'Passer', | ||||
| 	'Servings' => 'Servings', | ||||
| 	'Costs' => 'Costs', | ||||
| 	'Based on the prices of the last purchase per product' => 'Based on the prices of the last purchase per product', | ||||
| 	'The ingredients listed here result in this amount of servings' => 'The ingredients listed here result in this amount of servings', | ||||
| 	'Do not check against the shopping list when adding missing items to it' => 'Do not check against the shopping list when adding missing items to it', | ||||
| 	'By default the amount to be added to the shopping list is "needed amount - stock amount - shopping list amount" - when this is enabled, it is only checked against the stock amount, not against what is already on the shopping list' => 'By default the amount to be added to the shopping list is "needed amount - stock amount - shopping list amount" - when this is enabled, it is only checked against the stock amount, not against what is already on the shopping list', | ||||
| 	'Picture' => 'Picture', | ||||
| 	'Uncheck ingredients to not put them on the shopping list' => 'Uncheck ingredients to not put them on the shopping list', | ||||
| 	'This is for statistical purposes only' => 'This is for statistical purposes only', | ||||
| 	'You have to select a recipe' => 'You have to select a recipe', | ||||
| 	'Key type' => 'Key type', | ||||
| 	'Share/Integrate calendar (iCal)' => 'Share/Integrate calendar (iCal)', | ||||
| 	'Use the following (public) URL to share or integrate the calendar in iCal format' => 'Use the following (public) URL to share or integrate the calendar in iCal format', | ||||
| 	'Allow partial units in stock' => 'Allow partial units in stock', | ||||
| 	'Enable tare weight handling' => 'Enable tare weight handling', | ||||
| 	'This is useful e.g. for flour in jars - on purchase/consume/inventory you always weigh the whole jar, the amount to be posted is then automatically calculated based on what is in stock and the tare weight defined below' => 'This is useful e.g. for flour in jars - on purchase/consume/inventory you always weigh the whole jar, the amount to be posted is then automatically calculated based on what is in stock and the tare weight defined below', | ||||
| 	'Tare weight' => 'Tare weight', | ||||
| 	'Tare weight handling enabled - please weigh the whole container, the amount to be posted will be automatically calculcated' => 'Tare weight handling enabled - please weigh the whole container, the amount to be posted will be automatically calculcated', | ||||
| 	'You have to select a location' => 'You have to select a location', | ||||
| 	'List' => 'List', | ||||
| 	'Gallery' => 'Gallery', | ||||
| 	'The current picture will be deleted when you save the recipe' => 'The current picture will be deleted when you save the recipe' | ||||
| ); | ||||
| @@ -1,192 +0,0 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'Stock overview' => 'Dispensa', | ||||
| 	'#1 products expiring within the next #2 days' => '#1 prodotti scadranno tra #2 giorni', | ||||
| 	'#1 products are already expired' => '#1 prodotti scaduti', | ||||
| 	'#1 products are below defined min. stock amount' => '#1 prodotti sotto il limite minimo', | ||||
| 	'Product' => 'prodotto', | ||||
| 	'Amount' => 'quantità', | ||||
| 	'Next best before date' => 'Prossima data di scadenza', | ||||
| 	'Logout' => 'Logout', | ||||
| 	'Habits overview' => 'Riepilogo delle abitudini', | ||||
| 	'Batteries overview' => 'Riepilogo delle batterie', | ||||
| 	'Purchase' => 'Acquisti', | ||||
| 	'Consume' => 'Consumi', | ||||
| 	'Inventory' => 'Inventario', | ||||
| 	'Shopping list' => 'Lista della spesa', | ||||
| 	'Habit tracking' => 'Dati abitudini', | ||||
| 	'Battery tracking' => 'Dati batterie', | ||||
| 	'Products' => 'Prodotti', | ||||
| 	'Locations' => 'Posizioni', | ||||
| 	'Quantity units' => 'Unità di misura', | ||||
| 	'Habits' => 'Abitudini', | ||||
| 	'Batteries' => 'Batterie', | ||||
| 	'Habit' => 'Abitudine', | ||||
| 	'Next estimated tracking' => 'Prossima esecuzione', | ||||
| 	'Last tracked' => 'Ultima esecuzione', | ||||
| 	'Battery' => 'Batterie', | ||||
| 	'Last charged' => 'Ultima ricarica', | ||||
| 	'Next planned charge cycle' => 'Prossima ricarica', | ||||
| 	'Best before' => 'Data di scadenza', | ||||
| 	'OK' => 'OK', | ||||
| 	'Product overview' => 'Riepilogo dei prodotti', | ||||
| 	'Stock quantity unit' => 'Unità di misura', | ||||
| 	'Stock amount' => 'Quantità', | ||||
| 	'Last purchased' => 'Ultimo acquisto', | ||||
| 	'Last used' => 'Ultimo utilizzo', | ||||
| 	'Spoiled' => 'Scaduto', | ||||
| 	'Barcode lookup is disabled' => 'I codici a barre sono disabilitati', | ||||
| 	'will be added to the list of barcodes for the selected product on submit' => 'sarà aggiunto alla lista dei codici a barre per questo prodotto', | ||||
| 	'New amount' => 'Nuova quantità', | ||||
| 	'Note' => 'Nota', | ||||
| 	'Tracked time' => 'Ora di esecuzione', | ||||
| 	'Habit overview' => 'Riepilogo dell\'abitudine', | ||||
| 	'Tracked count' => 'Numero di esecuzioni', | ||||
| 	'Battery overview' => 'Riepilogo della batteria', | ||||
| 	'Charge cycles count' => 'Numero di ricariche', | ||||
| 	'Create shopping list item' => 'Aggiungi un prodotto alla lista della spesa', | ||||
| 	'Edit shopping list item' => 'Modifica un\'entrata della lista della spesa', | ||||
| 	'#1 units were automatically added and will apply in addition to the amount entered here' => '#1 sono state aggiunte automaticamente', | ||||
| 	'Save' => 'Salva', | ||||
| 	'Add' => 'Aggiungi', | ||||
| 	'Name' => 'Nome', | ||||
| 	'Location' => 'Posizione', | ||||
| 	'Min. stock amount' => 'Quantità minima', | ||||
| 	'QU purchase' => 'Unità di acquisto', | ||||
| 	'QU stock' => 'Unità di dispensa', | ||||
| 	'QU factor' => 'Fattore di conversione', | ||||
| 	'Description' => 'Descrizione', | ||||
| 	'Create product' => 'Aggiungi prodotto', | ||||
| 	'Barcode(s)' => 'Codice a barre', | ||||
| 	'Minimum stock amount' => 'Quantità minima', | ||||
| 	'Default best before days' => 'Data di scadenza standard in giorni', | ||||
| 	'Quantity unit purchase' => 'Unità di acquisto', | ||||
| 	'Quantity unit stock' => 'Unità di dispensa', | ||||
| 	'Factor purchase to stock quantity unit' => 'Fattore di conversione tra quantità di acquisto e di dispensa', | ||||
| 	'Create location' => 'Aggiungi posizione', | ||||
| 	'Create quantity unit' => 'Aggiungi unità di misura', | ||||
| 	'Period type' => 'Tipo di ripetizione', | ||||
| 	'Period days' => 'Periodo in giorni', | ||||
| 	'Create habit' => 'Aggiungi abitudine', | ||||
| 	'Used in' => 'Usato in', | ||||
| 	'Create battery' => 'Aggiungi batteria', | ||||
| 	'Edit battery' => 'Modifica batteria', | ||||
| 	'Edit habit' => 'Modifica abitudine', | ||||
| 	'Edit quantity unit' => 'Modifica unità di misura', | ||||
| 	'Edit product' => 'Modifica prodotto', | ||||
| 	'Edit location' => 'Modifica posizione', | ||||
| 	'Record data' => 'Registra dati', | ||||
| 	'Manage master data' => 'Gestisci dati', | ||||
| 	'This will apply to added products' => 'Verrà applicato ai prodotti aggiunti', | ||||
| 	'never' => 'mai', | ||||
| 	'Add products that are below defined min. stock amount' => 'Aggiungi prodotti sotti il limite minimo', | ||||
| 	'For purchases this amount of days will be added to today for the best before date suggestion' => 'Questo numero di giorni verrà aggiunto alla data di acquisto per la data di scadenza', | ||||
| 	'This means 1 #1 purchased will be converted into #2 #3 in stock' => 'Questo significa che 1 #1 acquistato diventerà #2 #3 in dispensa', | ||||
| 	'Login' => 'Login', | ||||
| 	'Username' => 'Username', | ||||
| 	'Password' => 'Password', | ||||
| 	'Invalid credentials, please try again' => 'Credenziali non valide, per favore riprova', | ||||
| 	'Are you sure to delete battery "#1"?' => 'Sei sicuro di voler eliminare la batteria "#1"?', | ||||
| 	'Yes' => 'Si', | ||||
| 	'No' => 'No', | ||||
| 	'Are you sure to delete habit "#1"?' => 'Sei sicuro di voler eliminare l\'abitudine "#1"?', | ||||
| 	'"#1" could not be resolved to a product, how do you want to proceed?' => '"#1" non è stato associato a nessun prodotto, vuoi procedere?', | ||||
| 	'Create or assign product' => 'Aggiungi o assegna prodotto', | ||||
| 	'Cancel' => 'Annulla', | ||||
| 	'Add as new product' => 'Aggiungi come nuovo prodotto', | ||||
| 	'Add as barcode to existing product' => 'Assegna il codice a barre ad un prodotto', | ||||
| 	'Add as new product and prefill barcode' => 'Aggiungi come nuovo prodotto ed assegna il codice a barre', | ||||
| 	'Are you sure to delete quantity unit "#1"?' => 'Sei sicuro di voler eliminare l\'unità di misura "#1"?', | ||||
| 	'Are you sure to delete product "#1"?' => 'Sei sicuro di voler eliminare il prodotto "#1"?', | ||||
| 	'Are you sure to delete location "#1"?' => 'Sei sicuro di voler eliminare la posizione "#1"?', | ||||
| 	'Manage API keys' => 'Gestisci le chiavi API', | ||||
|     'REST API & data model documentation' => 'REST API & Documentazione del modello di dati', | ||||
|     'API keys' => 'Chiavi API', | ||||
|     'Create new API key' => 'Crea nuova chiave API', | ||||
|     'API key' => 'Chiave API', | ||||
|     'Expires' => 'Scade il', | ||||
|     'Created' => 'Creata il', | ||||
| 	'This product is not in stock' => 'Questo prodotto non è in dispensa', | ||||
| 	'This means #1 will be added to stock' => '#1 sarà aggiunto alla dispensa', | ||||
| 	'This means #1 will be removed from stock' => '#1 sarà rimosso dalla dispensa', | ||||
| 	'This means it is estimated that a new execution of this habit is tracked #1 days after the last was tracked' => 'L\'esecuzione dell\'abitudine è #1 giorni dopo la precedente', | ||||
| 	'Removed #1 #2 of #3 from stock' => '#1 #2 su #3 rimossi dalla dispensa', | ||||
| 	'About grocy' => 'Riguardo grocy', | ||||
| 	'Close' => 'Chiudi', | ||||
| 	'#1 batteries are due to be charged within the next #2 days' => '#1 batterie da ricaricare entro #2 giorni', | ||||
| 	'#1 batteries are overdue to be charged' => '#1 batterie devono essere ricaricate', | ||||
| 	'#1 habits are due to be done within the next #2 days' => '#1 abitudini da eseguire entro #2 giorni', | ||||
| 	'#1 habits are overdue to be done' => '#1 abitudini da eseguire', | ||||
| 	'Released on' => 'Rilasciato il', | ||||
| 	'Consume #3 #1 of #2' => 'Consumati #3 #1 di #2', | ||||
| 	'Added #1 #2 of #3 to stock' => 'Aggiunti #1 #2 di #3', | ||||
| 	'Stock amount of #1 is now #2 #3' => 'La quantità in dispensa di #1 è ora #2 #3', | ||||
| 	'Tracked execution of habit #1 on #2' => 'Esecuzione dell\'abitudine #1 registrata il #2', | ||||
| 	'Tracked charge cylce of battery #1 on #2' => 'Ricarica della batteria #1 effettuata il #2', | ||||
| 	'Consume all #1 which are currently in stock' => 'Consuma tutto #1 in dispensa', | ||||
| 	'All' => 'Tutto', | ||||
| 	'Track charge cycle of battery #1' => 'Registra la ricarica della batteria #1', | ||||
| 	'Track execution of habit #1' => 'Registra l\'esecuzione dell\'abitudine #1', | ||||
| 	'Filter by location' => 'Filtra per posizione', | ||||
| 	'Search' => 'Cerca', | ||||
| 	'Not logged in' => 'Non autenticato', | ||||
| 	'You have to select a product' => 'Devi selezionare un prodotto', | ||||
| 	'You have to select a habit' => 'Devi selezionare un\'abitudine', | ||||
| 	'You have to select a battery' => 'Devi selezionare una batteria', | ||||
| 	'A name is required' => 'Inserisci un nome', | ||||
| 	'A location is required' => 'Inserisci la posizione', | ||||
| 	'The amount cannot be lower than #1' => 'La quantità non può essere minore di #1', | ||||
| 	'This cannot be negative' => 'Il numero non può essere negativo', | ||||
| 	'A quantity unit is required' => 'Inserisci un\'unità di misura', | ||||
| 	'A period type is required' => 'Seleziona un tipo di ripetizione', | ||||
| 	 | ||||
| 	//Constants | ||||
| 	'manually' => 'Manualmente', | ||||
| 	'dynamic-regular' => 'Regolatore dinamico', | ||||
| 	 | ||||
| 	//Technical component translations | ||||
| 	'timeago_locale' => 'it', | ||||
| 	'timeago_nan' => 'NaN anni fa', | ||||
| 	'moment_locale' => 'it', | ||||
| 	'datatables_localization' => '{"sEmptyTable":"Nessun dato disponibile","sInfo":"Mostrando da _START_ a _END_ di _TOTAL_ voci","sInfoEmpty":"Mostrando da 0 a 0 di 0 voci","sInfoFiltered":"(Filtrato da _MAX_ voci totali)","sInfoPostFix":"","sInfoThousands":",","sLengthMenu":"Mostra _MENU_ voci","sLoadingRecords":"Caricando...","sProcessing":"Calcolando...","sSearch":"Cerca:","sZeroRecords":"Nessun risultato trovato","oPaginate":{"sFirst":"Prima","sLast":"Ultima","sNext":"Prossima","sPrevious":"Precedente"},"oAria":{"sSortAscending":": ordine crescente","sSortDescending":": ordine decrescente"}}', | ||||
| 	 | ||||
| 	//Demo data | ||||
| 	'Cookies' => 'Biscotti', | ||||
| 	'Chocolate' => 'Cioccolato', | ||||
| 	'Pantry' => 'Vorratskammer', | ||||
| 	'Candy cupboard' => 'Süßigkeitenschrank', | ||||
| 	'Tinned food cupboard' => 'Konservenschrank', | ||||
| 	'Fridge' => 'Kühlschrank', | ||||
| 	'Piece' => 'Pezzo', | ||||
| 	'Pieces' => 'Pezzi', | ||||
| 	'Pack' => 'Pacco', | ||||
| 	'Packs' => 'Pacchi', | ||||
| 	'Glass' => 'Bicchiere', | ||||
| 	'Glasses' => 'Bicchieri', | ||||
| 	'Tin' => 'Scatola', | ||||
| 	'Tins' => 'Scatole', | ||||
| 	'Can' => 'Lattina', | ||||
| 	'Cans' => 'Lattine', | ||||
| 	'Bunch' => 'Cespo', | ||||
| 	'Bunches' => 'Cespi', | ||||
| 	'Gummy bears' => 'Caramelle', | ||||
| 	'Crisps' => 'Patatine', | ||||
| 	'Eggs' => 'Uova', | ||||
| 	'Noodles' => 'Spaghetti', | ||||
| 	'Pickles' => 'Marmellata', | ||||
| 	'Gulash soup' => 'Dado', | ||||
| 	'Yogurt' => 'Yogurt', | ||||
| 	'Cheese' => 'Parmigiano', | ||||
| 	'Cold cuts' => 'Pancetta', | ||||
| 	'Paprika' => 'Pepe', | ||||
| 	'Cucumber' => 'Zucchine', | ||||
| 	'Radish' => 'Radicchio', | ||||
| 	'Tomato' => 'Pomodori', | ||||
| 	'Changed towels in the bathroom' => 'Cambiare asciugamani in bagno', | ||||
| 	'Cleaned the kitchen floor' => 'Pulire la cucina', | ||||
| 	'Warranty ends' => 'Scadenza dalla garanzia', | ||||
| 	'TV remote control' => 'Telecomando', | ||||
| 	'Alarm clock' => 'Sveglia', | ||||
| 	'Heat remote control' => 'Termostato' | ||||
| ); | ||||
							
								
								
									
										6
									
								
								localization/it/chore_types.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								localization/it/chore_types.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'manually' => 'Manualmente', | ||||
| 	'dynamic-regular' => 'Regolatore dinamico' | ||||
| ); | ||||
							
								
								
									
										10
									
								
								localization/it/component_translations.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								localization/it/component_translations.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'timeago_locale' => 'it', | ||||
| 	'timeago_nan' => 'NaN anni fa', | ||||
| 	'moment_locale' => 'it', | ||||
| 	'datatables_localization' => '{"sEmptyTable":"Nessun dato disponibile","sInfo":"Mostrando da _START_ a _END_ di _TOTAL_ voci","sInfoEmpty":"Mostrando da 0 a 0 di 0 voci","sInfoFiltered":"(Filtrato da _MAX_ voci totali)","sInfoPostFix":"","sInfoThousands":",","sLengthMenu":"Mostra _MENU_ voci","sLoadingRecords":"Caricando...","sProcessing":"Calcolando...","sSearch":"Cerca:","sZeroRecords":"Nessun risultato trovato","oPaginate":{"sFirst":"Prima","sLast":"Ultima","sNext":"Prossima","sPrevious":"Precedente"},"oAria":{"sSortAscending":": ordine crescente","sSortDescending":": ordine decrescente"}}', | ||||
| 	'summernote_locale' => 'it-IT', | ||||
| 	'fullcalendar_locale' => 'fr' | ||||
| ); | ||||
							
								
								
									
										89
									
								
								localization/it/demo_data.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								localization/it/demo_data.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,89 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'Cookies' => 'Biscotti', | ||||
| 	'Chocolate' => 'Cioccolato', | ||||
| 	'Pantry' => 'Vorratskammer', | ||||
| 	'Candy cupboard' => 'Süßigkeitenschrank', | ||||
| 	'Tinned food cupboard' => 'Konservenschrank', | ||||
| 	'Fridge' => 'Kühlschrank', | ||||
| 	'Piece' => 'Pezzo', | ||||
| 	'Pieces' => 'Pezzi', | ||||
| 	'Pack' => 'Pacco', | ||||
| 	'Packs' => 'Pacchi', | ||||
| 	'Glass' => 'Bicchiere', | ||||
| 	'Glasses' => 'Bicchieri', | ||||
| 	'Tin' => 'Scatola', | ||||
| 	'Tins' => 'Scatole', | ||||
| 	'Can' => 'Lattina', | ||||
| 	'Cans' => 'Lattine', | ||||
| 	'Bunch' => 'Cespo', | ||||
| 	'Bunches' => 'Cespi', | ||||
| 	'Gummy bears' => 'Caramelle', | ||||
| 	'Crisps' => 'Patatine', | ||||
| 	'Eggs' => 'Uova', | ||||
| 	'Noodles' => 'Spaghetti', | ||||
| 	'Pickles' => 'Marmellata', | ||||
| 	'Gulash soup' => 'Dado', | ||||
| 	'Yogurt' => 'Yogurt', | ||||
| 	'Cheese' => 'Parmigiano', | ||||
| 	'Cold cuts' => 'Pancetta', | ||||
| 	'Paprika' => 'Pepe', | ||||
| 	'Cucumber' => 'Zucchine', | ||||
| 	'Radish' => 'Radicchio', | ||||
| 	'Tomato' => 'Pomodori', | ||||
| 	'Changed towels in the bathroom' => 'Cambiare asciugamani in bagno', | ||||
| 	'Cleaned the kitchen floor' => 'Pulire la cucina', | ||||
| 	'Warranty ends' => 'Scadenza dalla garanzia', | ||||
| 	'TV remote control' => 'Telecomando', | ||||
| 	'Alarm clock' => 'Sveglia', | ||||
| 	'Heat remote control' => 'Termostato', | ||||
| 	'Lawn mowed in the garden' => 'Prato falciato nel giardino', | ||||
| 	'Some good snacks' => 'Alcuni buoni spuntini', | ||||
| 	'Pizza dough' => 'Impasto per pizza', | ||||
| 	'Sieved tomatoes' => 'Pomodori setacciati', | ||||
| 	'Salami' => 'Salame', | ||||
| 	'Toast' => 'Toast', | ||||
| 	'Minced meat' => 'Carne macinata', | ||||
| 	'Pizza' => 'Pizza', | ||||
| 	'Spaghetti bolognese' => 'Spaghetti alla bolognese', | ||||
| 	'Sandwiches' => 'Sandwiches', | ||||
| 	'English' => 'Inglese', | ||||
| 	'German' => 'Tedesco', | ||||
| 	'Italian' => 'Italiano', | ||||
| 	'Demo in different language' => 'Demo in lingue diverse', | ||||
| 	'This is the note content of the recipe ingredient' => 'Questo è il contenuto della nota dell\'ingrediente della ricetta', | ||||
| 	'Demo User' => 'Utente Demo', | ||||
| 	'Gram' => 'Grammo', | ||||
| 	'Grams' => 'Grammi', | ||||
| 	'Flour' => 'Farina', | ||||
| 	'Pancakes' => 'Pancakes', | ||||
| 	'Sugar' => 'Zucchero', | ||||
| 	'Home' => 'Casa', | ||||
| 	'Life' => 'Vita', | ||||
| 	'Projects' => 'Progetti', | ||||
| 	'Repair the garage door' => 'Riparare la porta del garage', | ||||
| 	'Fork and improve grocy' => 'Forka e migliora grocy', | ||||
| 	'Find a solution for what to do when I forget the door keys' => 'Trova una soluzione per cosa fare quando dimentico le chiavi della porta', | ||||
| 	'Sweets' => 'Dolci', | ||||
| 	'Bakery products' => 'Prodotti da forno', | ||||
| 	'Tinned food' => 'Cibo in scatola', | ||||
| 	'Butchery products' => 'Prodotti della macelleria', | ||||
| 	'Vegetables/Fruits' => 'Verdura/Frutta', | ||||
| 	'Refrigerated products' => 'Prodotti refrigerati', | ||||
| 	'Coffee machine' => 'Macchina per il caffè', | ||||
| 	'Dishwasher' => 'Lavastoviglie', | ||||
| 	'Liter' => 'Litro', | ||||
| 	'Liters' => 'Litri', | ||||
| 	'Bottle' => 'Bottiglia', | ||||
| 	'Bottles' => 'Bottiglie', | ||||
| 	'Milk' => 'Latte', | ||||
| 	'Chocolate sauce' => 'Salsa al cioccolato', | ||||
| 	'Milliliters' => 'Millilitri', | ||||
| 	'Milliliter' => 'Millilitro', | ||||
| 	'Bottom' => 'Parte inferiore', | ||||
| 	'Topping' => 'Guarnizione', | ||||
| 	'French' => 'Francese', | ||||
| 	'Turkish' => 'Turkish', | ||||
| 	'Spanish' => 'Spanish' | ||||
| ); | ||||
							
								
								
									
										8
									
								
								localization/it/stock_transaction_types.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								localization/it/stock_transaction_types.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'purchase' => 'Acquista', | ||||
| 	'consume' => 'Consumare', | ||||
| 	'inventory-correction' => 'Correzione dell\'inventario', | ||||
| 	'product-opened' => 'Prodotto aperto' | ||||
| ); | ||||
							
								
								
									
										348
									
								
								localization/it/strings.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										348
									
								
								localization/it/strings.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,348 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'Stock overview' => 'Dispensa', | ||||
| 	'#1 products expiring within the next #2 days' => '#1 prodotti scadranno tra #2 giorni', | ||||
| 	'#1 products are already expired' => '#1 prodotti scaduti', | ||||
| 	'#1 products are below defined min. stock amount' => '#1 prodotti sotto il limite minimo', | ||||
| 	'Product' => 'prodotto', | ||||
| 	'Amount' => 'quantità', | ||||
| 	'Next best before date' => 'Prossima data di scadenza', | ||||
| 	'Logout' => 'Logout', | ||||
| 	'Chores overview' => 'Riepilogo delle abitudini', | ||||
| 	'Batteries overview' => 'Riepilogo delle batterie', | ||||
| 	'Purchase' => 'Acquisti', | ||||
| 	'Consume' => 'Consumi', | ||||
| 	'Inventory' => 'Inventario', | ||||
| 	'Shopping list' => 'Lista della spesa', | ||||
| 	'Chore tracking' => 'Dati abitudini', | ||||
| 	'Battery tracking' => 'Dati batterie', | ||||
| 	'Products' => 'Prodotti', | ||||
| 	'Locations' => 'Posizioni', | ||||
| 	'Quantity units' => 'Unità di misura', | ||||
| 	'Chores' => 'Abitudini', | ||||
| 	'Batteries' => 'Batterie', | ||||
| 	'Chore' => 'Abitudine', | ||||
| 	'Next estimated tracking' => 'Prossima esecuzione', | ||||
| 	'Last tracked' => 'Ultima esecuzione', | ||||
| 	'Battery' => 'Batterie', | ||||
| 	'Last charged' => 'Ultima ricarica', | ||||
| 	'Next planned charge cycle' => 'Prossima ricarica', | ||||
| 	'Best before' => 'Data di scadenza', | ||||
| 	'OK' => 'OK', | ||||
| 	'Product overview' => 'Riepilogo dei prodotti', | ||||
| 	'Stock quantity unit' => 'Unità di misura', | ||||
| 	'Stock amount' => 'Quantità', | ||||
| 	'Last purchased' => 'Ultimo acquisto', | ||||
| 	'Last used' => 'Ultimo utilizzo', | ||||
| 	'Spoiled' => 'Scaduto', | ||||
| 	'Barcode lookup is disabled' => 'I codici a barre sono disabilitati', | ||||
| 	'will be added to the list of barcodes for the selected product on submit' => 'sarà aggiunto alla lista dei codici a barre per questo prodotto', | ||||
| 	'New amount' => 'Nuova quantità', | ||||
| 	'Note' => 'Nota', | ||||
| 	'Tracked time' => 'Ora di esecuzione', | ||||
| 	'Chore overview' => 'Riepilogo dell\'abitudine', | ||||
| 	'Tracked count' => 'Numero di esecuzioni', | ||||
| 	'Battery overview' => 'Riepilogo della batteria', | ||||
| 	'Charge cycles count' => 'Numero di ricariche', | ||||
| 	'Create shopping list item' => 'Aggiungi un prodotto alla lista della spesa', | ||||
| 	'Edit shopping list item' => 'Modifica un\'entrata della lista della spesa', | ||||
| 	'Save' => 'Salva', | ||||
| 	'Add' => 'Aggiungi', | ||||
| 	'Name' => 'Nome', | ||||
| 	'Location' => 'Posizione', | ||||
| 	'Min. stock amount' => 'Quantità minima', | ||||
| 	'QU purchase' => 'Unità di acquisto', | ||||
| 	'QU stock' => 'Unità di dispensa', | ||||
| 	'QU factor' => 'Fattore di conversione', | ||||
| 	'Description' => 'Descrizione', | ||||
| 	'Create product' => 'Aggiungi prodotto', | ||||
| 	'Barcode(s)' => 'Codice a barre', | ||||
| 	'Minimum stock amount' => 'Quantità minima', | ||||
| 	'Default best before days' => 'Data di scadenza standard in giorni', | ||||
| 	'Quantity unit purchase' => 'Unità di acquisto', | ||||
| 	'Quantity unit stock' => 'Unità di dispensa', | ||||
| 	'Factor purchase to stock quantity unit' => 'Fattore di conversione tra quantità di acquisto e di dispensa', | ||||
| 	'Create location' => 'Aggiungi posizione', | ||||
| 	'Create quantity unit' => 'Aggiungi unità di misura', | ||||
| 	'Period type' => 'Tipo di ripetizione', | ||||
| 	'Period days' => 'Periodo in giorni', | ||||
| 	'Create chore' => 'Aggiungi abitudine', | ||||
| 	'Used in' => 'Usato in', | ||||
| 	'Create battery' => 'Aggiungi batteria', | ||||
| 	'Edit battery' => 'Modifica batteria', | ||||
| 	'Edit chore' => 'Modifica abitudine', | ||||
| 	'Edit quantity unit' => 'Modifica unità di misura', | ||||
| 	'Edit product' => 'Modifica prodotto', | ||||
| 	'Edit location' => 'Modifica posizione', | ||||
| 	'Record data' => 'Registra dati', | ||||
| 	'Manage master data' => 'Gestisci dati', | ||||
| 	'This will apply to added products' => 'Verrà applicato ai prodotti aggiunti', | ||||
| 	'never' => 'mai', | ||||
| 	'Add products that are below defined min. stock amount' => 'Aggiungi prodotti sotti il limite minimo', | ||||
| 	'For purchases this amount of days will be added to today for the best before date suggestion' => 'Questo numero di giorni verrà aggiunto alla data di acquisto per la data di scadenza', | ||||
| 	'This means 1 #1 purchased will be converted into #2 #3 in stock' => 'Questo significa che 1 #1 acquistato diventerà #2 #3 in dispensa', | ||||
| 	'Login' => 'Login', | ||||
| 	'Username' => 'Username', | ||||
| 	'Password' => 'Password', | ||||
| 	'Invalid credentials, please try again' => 'Credenziali non valide, per favore riprova', | ||||
| 	'Are you sure to delete battery "#1"?' => 'Sei sicuro di voler eliminare la batteria "#1"?', | ||||
| 	'Yes' => 'Si', | ||||
| 	'No' => 'No', | ||||
| 	'Are you sure to delete chore "#1"?' => 'Sei sicuro di voler eliminare l\'abitudine "#1"?', | ||||
| 	'"#1" could not be resolved to a product, how do you want to proceed?' => '"#1" non è stato associato a nessun prodotto, vuoi procedere?', | ||||
| 	'Create or assign product' => 'Aggiungi o assegna prodotto', | ||||
| 	'Cancel' => 'Annulla', | ||||
| 	'Add as new product' => 'Aggiungi come nuovo prodotto', | ||||
| 	'Add as barcode to existing product' => 'Assegna il codice a barre ad un prodotto', | ||||
| 	'Add as new product and prefill barcode' => 'Aggiungi come nuovo prodotto ed assegna il codice a barre', | ||||
| 	'Are you sure to delete quantity unit "#1"?' => 'Sei sicuro di voler eliminare l\'unità di misura "#1"?', | ||||
| 	'Are you sure to delete product "#1"?' => 'Sei sicuro di voler eliminare il prodotto "#1"?', | ||||
| 	'Are you sure to delete location "#1"?' => 'Sei sicuro di voler eliminare la posizione "#1"?', | ||||
| 	'Manage API keys' => 'Gestisci le chiavi API', | ||||
| 	'REST API & data model documentation' => 'REST API & Documentazione del modello di dati', | ||||
| 	'API keys' => 'Chiavi API', | ||||
| 	'Create new API key' => 'Crea nuova chiave API', | ||||
| 	'API key' => 'Chiave API', | ||||
| 	'Expires' => 'Scade il', | ||||
| 	'Created' => 'Creata il', | ||||
| 	'This product is not in stock' => 'Questo prodotto non è in dispensa', | ||||
| 	'This means #1 will be added to stock' => '#1 sarà aggiunto alla dispensa', | ||||
| 	'This means #1 will be removed from stock' => '#1 sarà rimosso dalla dispensa', | ||||
| 	'This means it is estimated that a new execution of this chore is tracked #1 days after the last was tracked' => 'L\'esecuzione dell\'abitudine è #1 giorni dopo la precedente', | ||||
| 	'Removed #1 #2 of #3 from stock' => '#1 #2 su #3 rimossi dalla dispensa', | ||||
| 	'About grocy' => 'Riguardo grocy', | ||||
| 	'Close' => 'Chiudi', | ||||
| 	'#1 batteries are due to be charged within the next #2 days' => '#1 batterie da ricaricare entro #2 giorni', | ||||
| 	'#1 batteries are overdue to be charged' => '#1 batterie devono essere ricaricate', | ||||
| 	'#1 chores are due to be done within the next #2 days' => '#1 abitudini da eseguire entro #2 giorni', | ||||
| 	'#1 chores are overdue to be done' => '#1 abitudini da eseguire', | ||||
| 	'Released on' => 'Rilasciato il', | ||||
| 	'Consume #3 #1 of #2' => 'Consumati #3 #1 di #2', | ||||
| 	'Added #1 #2 of #3 to stock' => 'Aggiunti #1 #2 di #3', | ||||
| 	'Stock amount of #1 is now #2 #3' => 'La quantità in dispensa di #1 è ora #2 #3', | ||||
| 	'Tracked execution of chore #1 on #2' => 'Esecuzione dell\'abitudine #1 registrata il #2', | ||||
| 	'Tracked charge cycle of battery #1 on #2' => 'Ricarica della batteria #1 effettuata il #2', | ||||
| 	'Consume all #1 which are currently in stock' => 'Consuma tutto #1 in dispensa', | ||||
| 	'All' => 'Tutto', | ||||
| 	'Track charge cycle of battery #1' => 'Registra la ricarica della batteria #1', | ||||
| 	'Track execution of chore #1' => 'Registra l\'esecuzione dell\'abitudine #1', | ||||
| 	'Filter by location' => 'Filtra per posizione', | ||||
| 	'Search' => 'Cerca', | ||||
| 	'Not logged in' => 'Non autenticato', | ||||
| 	'You have to select a product' => 'Devi selezionare un prodotto', | ||||
| 	'You have to select a chore' => 'Devi selezionare un\'abitudine', | ||||
| 	'You have to select a battery' => 'Devi selezionare una batteria', | ||||
| 	'A name is required' => 'Inserisci un nome', | ||||
| 	'A location is required' => 'Inserisci la posizione', | ||||
| 	'The amount cannot be lower than #1' => 'La quantità non può essere minore di #1', | ||||
| 	'This cannot be negative' => 'Il numero non può essere negativo', | ||||
| 	'A quantity unit is required' => 'Inserisci un\'unità di misura', | ||||
| 	'A period type is required' => 'Seleziona un tipo di ripetizione', | ||||
| 	'A best before date is required and must be later than today' => 'È necessaria una data di scadenza anticipata e deve essere successiva a quella di oggi', | ||||
| 	'Settings' => 'Impostazioni', | ||||
| 	'This can only be before now' => 'Questo può essere solo prima d\'ora', | ||||
| 	'Calendar' => 'Calendario', | ||||
| 	'Recipes' => 'Ricette', | ||||
| 	'Edit recipe' => 'Modifica Ricetta', | ||||
| 	'New recipe' => 'Nuova Ricetta', | ||||
| 	'Ingredients list' => 'Lista Ingredienti', | ||||
| 	'Add recipe ingredient' => 'Aggiungi l\'ingrediente della ricetta', | ||||
| 	'Edit recipe ingredient' => 'Modifica l\'ingrediente della ricetta', | ||||
| 	'Are you sure to delete recipe "#1"?' => 'Sei sicuro di voler eliminare la ricetta "# 1"?', | ||||
| 	'Are you sure to delete recipe ingredient "#1"?' => 'Sei sicuro di voler eliminare l\'ingrediente della ricetta "# 1"?', | ||||
| 	'Are you sure to empty the shopping list?' => 'Sei sicuro di svuotare la lista della spesa?', | ||||
| 	'Clear list' => 'Pulisci lista', | ||||
| 	'Requirements fulfilled' => 'Requisiti soddisfatti', | ||||
| 	'Put missing products on shopping list' => 'Metti i prodotti mancanti nella lista della spesa', | ||||
| 	'Not enough in stock, #1 ingredients missing' => 'Non abbastanza in magazzino, mancano gli ingredienti # 1', | ||||
| 	'Enough in stock' => 'Abbastanza in magazzino', | ||||
| 	'Not enough in stock, #1 ingredients missing but already on the shopping list' => 'Non abbastanza in magazzino, mancano gli ingredienti # 1 ma sono già nella lista della spesa', | ||||
| 	'Expand to fullscreen' => 'Espandi a schermo intero', | ||||
| 	'Ingredients' => 'Ingredienti', | ||||
| 	'Preparation' => 'Preparation', | ||||
| 	'Recipe' => 'Recipe', | ||||
| 	'Not enough in stock, #1 missing, #2 already on shopping list' => 'Not enough in stock, #1 missing, #2 already on shopping list', | ||||
| 	'Show notes' => 'Show notes', | ||||
| 	'Put missing amount on shopping list' => 'Put missing amount on shopping list', | ||||
| 	'Are you sure to put all missing ingredients for recipe "#1" on the shopping list?' => 'Are you sure to put all missing ingredients for recipe "#1" on the shopping list?', | ||||
| 	'Added for recipe #1' => 'Added for recipe #1', | ||||
| 	'Manage users' => 'Manage users', | ||||
| 	'User' => 'User', | ||||
| 	'Users' => 'Users', | ||||
| 	'Are you sure to delete user "#1"?' => 'Are you sure to delete user "#1"?', | ||||
| 	'Create user' => 'Create user', | ||||
| 	'Edit user' => 'Edit user', | ||||
| 	'First name' => 'First name', | ||||
| 	'Last name' => 'Last name', | ||||
| 	'A username is required' => 'A username is required', | ||||
| 	'Confirm password' => 'Confirm password', | ||||
| 	'Passwords do not match' => 'Passwords do not match', | ||||
| 	'Change password' => 'Change password', | ||||
| 	'Done by' => 'Done by', | ||||
| 	'Last done by' => 'Last done by', | ||||
| 	'Unknown' => 'Unknown', | ||||
| 	'Filter by chore' => 'Filter by chore', | ||||
| 	'Chores journal' => 'Chores journal', | ||||
| 	'0 means suggestions for the next charge cycle are disabled' => '0 means suggestions for the next charge cycle are disabled', | ||||
| 	'Charge cycle interval (days)' => 'Charge cycle interval (days)', | ||||
| 	'Last price' => 'Last price', | ||||
| 	'Price history' => 'Price history', | ||||
| 	'No price history available' => 'No price history available', | ||||
| 	'Price' => 'Price', | ||||
| 	'in #1 per purchase quantity unit' => 'in #1 per purchase quantity unit', | ||||
| 	'The price cannot be lower than #1' => 'The price cannot be lower than #1', | ||||
| 	'#1 product expires within the next #2 days' => '#1 product expires within the next #2 days', | ||||
| 	'#1 product is already expired' => '#1 product is already expired', | ||||
| 	'#1 product is below defined min. stock amount' => '#1 product is below defined min. stock amount', | ||||
| 	'Unit' => 'Unit', | ||||
| 	'Units' => 'Units', | ||||
| 	'#1 chore is due to be done within the next #2 days' => '#1 chore is due to be done within the next #2 days', | ||||
| 	'#1 chore is overdue to be done' => '#1 chore is overdue to be done', | ||||
| 	'#1 battery is due to be charged within the next #2 days' => '#1 battery is due to be charged within the next #2 days', | ||||
| 	'#1 battery is overdue to be charged' => '#1 battery is overdue to be charged', | ||||
| 	'#1 unit was automatically added and will apply in addition to the amount entered here' => '#1 unit was automatically added and will apply in addition to the amount entered here', | ||||
| 	'in singular form' => 'in singular form', | ||||
| 	'in plural form' => 'in plural form', | ||||
| 	'Never expires' => 'Never expires', | ||||
| 	'This cannot be lower than #1' => 'This cannot be lower than #1', | ||||
| 	'-1 means that this product never expires' => '-1 means that this product never expires', | ||||
| 	'Quantity unit' => 'Quantity unit', | ||||
| 	'Only check if a single unit is in stock (a different quantity can then be used above)' => 'Only check if a single unit is in stock (a different quantity can then be used above)', | ||||
| 	'Are you sure to consume all ingredients needed by recipe "#1" (ingredients marked with "check only if a single unit is in stock" will be ignored)?' => 'Are you sure to consume all ingredients needed by recipe "#1" (ingredients marked with "check only if a single unit is in stock" will be ignored)?', | ||||
| 	'Removed all ingredients of recipe "#1" from stock' => 'Removed all ingredients of recipe "#1" from stock', | ||||
| 	'Consume all ingredients needed by this recipe' => 'Consume all ingredients needed by this recipe', | ||||
| 	'Click to show technical details' => 'Click to show technical details', | ||||
| 	'Error while saving, probably this item already exists' => 'Error while saving, probably this item already exists', | ||||
| 	'Error details' => 'Error details', | ||||
| 	'Tasks' => 'Tasks', | ||||
| 	'Show done tasks' => 'Show done tasks', | ||||
| 	'Task' => 'Task', | ||||
| 	'Due' => 'Due', | ||||
| 	'Assigned to' => 'Assigned to', | ||||
| 	'Mark task "#1" as completed' => 'Mark task "#1" as completed', | ||||
| 	'Uncategorized' => 'Uncategorized', | ||||
| 	'Task categories' => 'Task categories', | ||||
| 	'Create task' => 'Create task', | ||||
| 	'A due date is required' => 'A due date is required', | ||||
| 	'Category' => 'Category', | ||||
| 	'Edit task' => 'Edit task', | ||||
| 	'Are you sure to delete task "#1"?' => 'Are you sure to delete task "#1"?', | ||||
| 	'#1 task is due to be done within the next #2 days' => '#1 task is due to be done within the next #2 days', | ||||
| 	'#1 tasks are due to be done within the next #2 days' => '#1 tasks are due to be done within the next #2 days', | ||||
| 	'#1 task is overdue to be done' => '#1 task is overdue to be done', | ||||
| 	'#1 tasks are overdue to be done' => '#1 tasks are overdue to be done', | ||||
| 	'Edit task category' => 'Edit task category', | ||||
| 	'Create task category' => 'Create task category', | ||||
| 	'Product groups' => 'Product groups', | ||||
| 	'Ungrouped' => 'Ungrouped', | ||||
| 	'Create product group' => 'Create product group', | ||||
| 	'Edit product group' => 'Edit product group', | ||||
| 	'Product group' => 'Product group', | ||||
| 	'Are you sure to delete product group "#1"?' => 'Are you sure to delete product group "#1"?', | ||||
| 	'Stay logged in permanently' => 'Stay logged in permanently', | ||||
| 	'When not set, you will get logged out at latest after 30 days' => 'When not set, you will get logged out at latest after 30 days', | ||||
| 	'Filter by status' => 'Filter by status', | ||||
| 	'Below min. stock amount' => 'Below min. stock amount', | ||||
| 	'Expiring soon' => 'Expiring soon', | ||||
| 	'Already expired' => 'Already expired', | ||||
| 	'Due soon' => 'Due soon', | ||||
| 	'Overdue' => 'Overdue', | ||||
| 	'View settings' => 'View settings', | ||||
| 	'Auto reload on external changes' => 'Auto reload on external changes', | ||||
| 	'Enable night mode' => 'Enable night mode', | ||||
| 	'Auto enable in time range' => 'Auto enable in time range', | ||||
| 	'From' => 'From', | ||||
| 	'in format' => 'in format', | ||||
| 	'To' => 'To', | ||||
| 	'Time range goes over midnight' => 'Time range goes over midnight', | ||||
| 	'Product picture' => 'Product picture', | ||||
| 	'No file selected' => 'No file selected', | ||||
| 	'If you don\'t select a file, the current picture will not be altered' => 'If you don\'t select a file, the current picture will not be altered', | ||||
| 	'Delete' => 'Delete', | ||||
| 	'The current picture will be deleted when you save the product' => 'The current picture will be deleted when you save the product', | ||||
| 	'Select file' => 'Select file', | ||||
| 	'Image of product #1' => 'Image of product #1', | ||||
| 	'This product cannot be deleted because it is in stock, please remove the stock amount first.' => 'This product cannot be deleted because it is in stock, please remove the stock amount first.', | ||||
| 	'Delete not possible' => 'Delete not possible', | ||||
| 	'Equipment' => 'Equipment', | ||||
| 	'Instruction manual' => 'Instruction manual', | ||||
| 	'The selected equipment has no instruction manual' => 'The selected equipment has no instruction manual', | ||||
| 	'Notes' => 'Notes', | ||||
| 	'Edit equipment' => 'Edit equipment', | ||||
| 	'Create equipment' => 'Create equipment', | ||||
| 	'If you don\'t select a file, the current instruction manual will not be altered' => 'If you don\'t select a file, the current instruction manual will not be altered', | ||||
| 	'No instruction manual available' => 'No instruction manual available', | ||||
| 	'The current instruction manual will be deleted when you save the equipment' => 'The current instruction manual will be deleted when you save the equipment', | ||||
| 	'No picture available' => 'No picture available', | ||||
| 	'Filter by product group' => 'Filter by product group', | ||||
| 	'Presets for new products' => 'Presets for new products', | ||||
| 	'Included recipes' => 'Included recipes', | ||||
| 	'A recipe is required' => 'A recipe is required', | ||||
| 	'Add included recipe' => 'Add included recipe', | ||||
| 	'Edit included recipe' => 'Edit included recipe', | ||||
| 	'Group' => 'Group', | ||||
| 	'This will be used as a headline to group ingredients together' => 'This will be used as a headline to group ingredients together', | ||||
| 	'Journal' => 'Journal', | ||||
| 	'Stock journal' => 'Stock journal', | ||||
| 	'Filter by product' => 'Filter by product', | ||||
| 	'Booking time' => 'Booking time', | ||||
| 	'Booking type' => 'Booking type', | ||||
| 	'Undo booking' => 'Undo booking', | ||||
| 	'Undone on' => 'Undone on', | ||||
| 	'Batteries journal' => 'Batteries journal', | ||||
| 	'Filter by battery' => 'Filter by battery', | ||||
| 	'Undo charge cycle' => 'Undo charge cycle', | ||||
| 	'Undo chore execution' => 'Undo chore execution', | ||||
| 	'Chore execution successfully undone' => 'Chore execution successfully undone', | ||||
| 	'Undo' => 'Undo', | ||||
| 	'Booking successfully undone' => 'Booking successfully undone', | ||||
| 	'Charge cycle successfully undone' => 'Charge cycle successfully undone', | ||||
| 	'This cannot be negative and must be an integral number' => 'This cannot be negative and must be an integral number', | ||||
| 	'Disable stock fulfillment checking for this ingredient' => 'Disable stock fulfillment checking for this ingredient', | ||||
| 	'Add all list items to stock' => 'Add all list items to stock', | ||||
| 	'Add #3 #1 of #2 to stock' => 'Add #3 #1 of #2 to stock', | ||||
| 	'Adding shopping list item #1 of #2' => 'Adding shopping list item #1 of #2', | ||||
| 	'Use a specific stock item' => 'Use a specific stock item', | ||||
| 	'The first item in this list would be picked by the default rule which is "First expiring first, then first in first out"' => 'The first item in this list would be picked by the default rule which is "First expiring first, then first in first out"', | ||||
| 	'Mark #3 #1 of #2 as open' => 'Mark #3 #1 of #2 as open', | ||||
| 	'When a product was marked as opened, the best before date will be replaced by today + this amount of days (a value of 0 disables this)' => 'When a product was marked as opened, the best before date will be replaced by today + this amount of days (a value of 0 disables this)', | ||||
| 	'Default best before days after opened' => 'Default best before days after opened', | ||||
| 	'Marked #1 #2 of #3 as opened' => 'Marked #1 #2 of #3 as opened', | ||||
| 	'Mark as opened' => 'Mark as opened', | ||||
| 	'Expires on #1; Bought on #2' => 'Expires on #1; Bought on #2', | ||||
| 	'Not opened' => 'Not opened', | ||||
| 	'Opened' => 'Opened', | ||||
| 	'Mark #3 #1 of #2 as open' => 'Mark #3 #1 of #2 as open', | ||||
| 	'#1 opened' => '#1 opened', | ||||
| 	'Product expires' => 'Product expires', | ||||
| 	'Task due' => 'Task due', | ||||
| 	'Chore due' => 'Chore due', | ||||
| 	'Battery charge cycle due' => 'Battery charge cycle due', | ||||
| 	'Show clock in header' => 'Show clock in header', | ||||
| 	'Stock settings' => 'Stock settings', | ||||
| 	'Shopping list to stock workflow' => 'Shopping list to stock workflow', | ||||
| 	'Automatically do the booking using the last price and the amount of the shopping list item, if the product has "Default best before days" set' => 'Automatically do the booking using the last price and the amount of the shopping list item, if the product has "Default best before days" set', | ||||
| 	'Skip' => 'Salta', | ||||
| 	'Servings' => 'Servings', | ||||
| 	'Costs' => 'Costs', | ||||
| 	'Based on the prices of the last purchase per product' => 'Based on the prices of the last purchase per product', | ||||
| 	'The ingredients listed here result in this amount of servings' => 'The ingredients listed here result in this amount of servings', | ||||
| 	'Do not check against the shopping list when adding missing items to it' => 'Do not check against the shopping list when adding missing items to it', | ||||
| 	'By default the amount to be added to the shopping list is "needed amount - stock amount - shopping list amount" - when this is enabled, it is only checked against the stock amount, not against what is already on the shopping list' => 'By default the amount to be added to the shopping list is "needed amount - stock amount - shopping list amount" - when this is enabled, it is only checked against the stock amount, not against what is already on the shopping list', | ||||
| 	'Picture' => 'Picture', | ||||
| 	'Uncheck ingredients to not put them on the shopping list' => 'Uncheck ingredients to not put them on the shopping list', | ||||
| 	'This is for statistical purposes only' => 'This is for statistical purposes only', | ||||
| 	'You have to select a recipe' => 'You have to select a recipe', | ||||
| 	'Key type' => 'Key type', | ||||
| 	'Share/Integrate calendar (iCal)' => 'Share/Integrate calendar (iCal)', | ||||
| 	'Use the following (public) URL to share or integrate the calendar in iCal format' => 'Use the following (public) URL to share or integrate the calendar in iCal format', | ||||
| 	'Allow partial units in stock' => 'Allow partial units in stock', | ||||
| 	'Enable tare weight handling' => 'Enable tare weight handling', | ||||
| 	'This is useful e.g. for flour in jars - on purchase/consume/inventory you always weigh the whole jar, the amount to be posted is then automatically calculated based on what is in stock and the tare weight defined below' => 'This is useful e.g. for flour in jars - on purchase/consume/inventory you always weigh the whole jar, the amount to be posted is then automatically calculated based on what is in stock and the tare weight defined below', | ||||
| 	'Tare weight' => 'Tare weight', | ||||
| 	'Tare weight handling enabled - please weigh the whole container, the amount to be posted will be automatically calculcated' => 'Tare weight handling enabled - please weigh the whole container, the amount to be posted will be automatically calculcated', | ||||
| 	'You have to select a location' => 'You have to select a location', | ||||
| 	'List' => 'List', | ||||
| 	'Gallery' => 'Gallery' | ||||
| ); | ||||
							
								
								
									
										6
									
								
								localization/nl/chore_types.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								localization/nl/chore_types.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'manually' => 'Handmatig', | ||||
| 	'dynamic-regular' => 'Dynamic regular' | ||||
| ); | ||||
							
								
								
									
										10
									
								
								localization/nl/component_translations.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								localization/nl/component_translations.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'timeago_locale' => 'nl', | ||||
| 	'timeago_nan' => 'NaN jaar', | ||||
| 	'moment_locale' => 'nl', | ||||
| 	'datatables_localization' => '{"sEmptyTable":"No data available in table","sInfo":"Showing _START_ to _END_ of _TOTAL_ entries","sInfoEmpty":"Showing 0 to 0 of 0 entries","sInfoFiltered":"(filtered from _MAX_ total entries)","sInfoPostFix":"","sInfoThousands":",","sLengthMenu":"Show _MENU_ entries","sLoadingRecords":"Loading...","sProcessing":"Processing...","sSearch":"Search:","sZeroRecords":"No matching records found","oPaginate":{"sFirst":"First","sLast":"Last","sNext":"Next","sPrevious":"Previous"},"oAria":{"sSortAscending":": activate to sort column ascending","sSortDescending":": activate to sort column descending"}}', | ||||
| 	'summernote_locale' => 'nl-NL', | ||||
| 	'fullcalendar_locale' => 'nl' | ||||
| ); | ||||
							
								
								
									
										89
									
								
								localization/nl/demo_data.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								localization/nl/demo_data.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,89 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'Cookies' => 'Cookies', | ||||
| 	'Chocolate' => 'Chocolate', | ||||
| 	'Pantry' => 'Pantry', | ||||
| 	'Candy cupboard' => 'Candy cupboard', | ||||
| 	'Tinned food cupboard' => 'Tinned food cupboard', | ||||
| 	'Fridge' => 'Fridge', | ||||
| 	'Piece' => 'Piece', | ||||
| 	'Pieces' => 'Pieces', | ||||
| 	'Pack' => 'Pack', | ||||
| 	'Packs' => 'Packs', | ||||
| 	'Glass' => 'Glass', | ||||
| 	'Glasses' => 'Glasses', | ||||
| 	'Tin' => 'Tin', | ||||
| 	'Tins' => 'Tins', | ||||
| 	'Can' => 'Can', | ||||
| 	'Cans' => 'Cans', | ||||
| 	'Bunch' => 'Bunch', | ||||
| 	'Bunches' => 'Bunches', | ||||
| 	'Gummy bears' => 'Gummy bears', | ||||
| 	'Crisps' => 'Crisps', | ||||
| 	'Eggs' => 'Eggs', | ||||
| 	'Noodles' => 'Noodles', | ||||
| 	'Pickles' => 'Pickles', | ||||
| 	'Gulash soup' => 'Gulash soup', | ||||
| 	'Yogurt' => 'Yogurt', | ||||
| 	'Cheese' => 'Cheese', | ||||
| 	'Cold cuts' => 'Cold cuts', | ||||
| 	'Paprika' => 'Paprika', | ||||
| 	'Cucumber' => 'Cucumber', | ||||
| 	'Radish' => 'Radish', | ||||
| 	'Tomato' => 'Tomato', | ||||
| 	'Changed towels in the bathroom' => 'Changed towels in the bathroom', | ||||
| 	'Cleaned the kitchen floor' => 'Cleaned the kitchen floor', | ||||
| 	'Warranty ends' => 'Warranty ends', | ||||
| 	'TV remote control' => 'TV remote control', | ||||
| 	'Alarm clock' => 'Alarm clock', | ||||
| 	'Heat remote control' => 'Heat remote control', | ||||
| 	'Lawn mowed in the garden' => 'Lawn mowed in the garden', | ||||
| 	'Some good snacks' => 'Some good snacks', | ||||
| 	'Pizza dough' => 'Pizza dough', | ||||
| 	'Sieved tomatoes' => 'Sieved tomatoes', | ||||
| 	'Salami' => 'Salami', | ||||
| 	'Toast' => 'Toast', | ||||
| 	'Minced meat' => 'Minced meat', | ||||
| 	'Pizza' => 'Pizza', | ||||
| 	'Spaghetti bolognese' => 'Spaghetti bolognese', | ||||
| 	'Sandwiches' => 'Sandwiches', | ||||
| 	'English' => 'English', | ||||
| 	'German' => 'German', | ||||
| 	'Italian' => 'Italian', | ||||
| 	'Demo in different language' => 'Demo in different language', | ||||
| 	'This is the note content of the recipe ingredient' => 'This is the note content of the recipe ingredient', | ||||
| 	'Demo User' => 'Demo User', | ||||
| 	'Gram' => 'Gram', | ||||
| 	'Grams' => 'Grams', | ||||
| 	'Flour' => 'Flour', | ||||
| 	'Pancakes' => 'Pancakes', | ||||
| 	'Sugar' => 'Sugar', | ||||
| 	'Home' => 'Home', | ||||
| 	'Life' => 'Life', | ||||
| 	'Projects' => 'Projects', | ||||
| 	'Repair the garage door' => 'Repair the garage door', | ||||
| 	'Fork and improve grocy' => 'Fork and improve grocy', | ||||
| 	'Find a solution for what to do when I forget the door keys' => 'Find a solution for what to do when I forget the door keys', | ||||
| 	'Sweets' => 'Sweets', | ||||
| 	'Bakery products' => 'Bakery products', | ||||
| 	'Tinned food' => 'Tinned food', | ||||
| 	'Butchery products' => 'Butchery products', | ||||
| 	'Vegetables/Fruits' => 'Vegetables/Fruits', | ||||
| 	'Refrigerated products' => 'Refrigerated products', | ||||
| 	'Coffee machine' => 'Coffee machine', | ||||
| 	'Dishwasher' => 'Dishwasher', | ||||
| 	'Liter' => 'Liter', | ||||
| 	'Liters' => 'Liters', | ||||
| 	'Bottle' => 'Bottle', | ||||
| 	'Bottles' => 'Bottles', | ||||
| 	'Milk' => 'Milk', | ||||
| 	'Chocolate sauce' => 'Chocolate sauce', | ||||
| 	'Milliliters' => 'Milliliters', | ||||
| 	'Milliliter' => 'Milliliter', | ||||
| 	'Bottom' => 'Bottom', | ||||
| 	'Topping' => 'Topping', | ||||
| 	'French' => 'French', | ||||
| 	'Turkish' => 'Turkish', | ||||
| 	'Spanish' => 'Spanish' | ||||
| ); | ||||
							
								
								
									
										8
									
								
								localization/nl/stock_transaction_types.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								localization/nl/stock_transaction_types.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'purchase' => 'Aankoop', | ||||
| 	'consume' => 'Consumeren', | ||||
| 	'inventory-correction' => 'Voorraadcorrectie', | ||||
| 	'product-opened' => 'Product geopend' | ||||
| ); | ||||
							
								
								
									
										348
									
								
								localization/nl/strings.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										348
									
								
								localization/nl/strings.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,348 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'Stock overview' => 'Voorraadoverzicht', | ||||
| 	'#1 products expiring within the next #2 days' => '#1 producten vervallen binnen de volgende #2 dagen', | ||||
| 	'#1 products are already expired' => '#1 producten zijn al verlopen', | ||||
| 	'#1 products are below defined min. stock amount' => '#1 producten zijn onder gedefinieerde min. voorraad aantal', | ||||
| 	'Product' => 'Product', | ||||
| 	'Amount' => 'Aantal', | ||||
| 	'Next best before date' => 'De eerstvolgende houdbaarheidsdatum', | ||||
| 	'Logout' => 'Uitloggen', | ||||
| 	'Chores overview' => 'Overzicht klusjes', | ||||
| 	'Batteries overview' => 'Batterijen overzicht', | ||||
| 	'Purchase' => 'Aankoop', | ||||
| 	'Consume' => 'Consumeren', | ||||
| 	'Inventory' => 'Voorraad', | ||||
| 	'Shopping list' => 'Boodschappenlijst', | ||||
| 	'Chore tracking' => 'Klusjes volgen', | ||||
| 	'Battery tracking' => 'Batterij volgen', | ||||
| 	'Products' => 'Producten', | ||||
| 	'Locations' => 'Locaties', | ||||
| 	'Quantity units' => 'Aantal eenheden', | ||||
| 	'Chores' => 'Klusjes', | ||||
| 	'Batteries' => 'Batterijen', | ||||
| 	'Chore' => 'Klus', | ||||
| 	'Next estimated tracking' => 'Next estimated tracking', | ||||
| 	'Last tracked' => 'Laatst gevolgd', | ||||
| 	'Battery' => 'Batterij', | ||||
| 	'Last charged' => 'Laatst opgeladen', | ||||
| 	'Next planned charge cycle' => 'Volgende geplande laadcyclus', | ||||
| 	'Best before' => 'Houdbaar tot', | ||||
| 	'OK' => 'OK', | ||||
| 	'Product overview' => 'Productoverzicht', | ||||
| 	'Stock quantity unit' => 'Voorraadhoeveelheidseenheid', | ||||
| 	'Stock amount' => 'Voorraadhoeveelheid', | ||||
| 	'Last purchased' => 'Laatst gekocht', | ||||
| 	'Last used' => 'Laatst gebruikt', | ||||
| 	'Spoiled' => 'Verspild', | ||||
| 	'Barcode lookup is disabled' => 'Opzoeken op streepjescode is uitgeschakeld', | ||||
| 	'will be added to the list of barcodes for the selected product on submit' => 'will be added to the list of barcodes for the selected product on submit', | ||||
| 	'New amount' => 'Nieuwe aantal', | ||||
| 	'Note' => 'Notitie', | ||||
| 	'Tracked time' => 'Bijgehouden tijd', | ||||
| 	'Chore overview' => 'Overzicht klus', | ||||
| 	'Tracked count' => 'Bijgehouden aantal', | ||||
| 	'Battery overview' => 'Batterijoverzicht', | ||||
| 	'Charge cycles count' => 'Aantal laadcycli', | ||||
| 	'Create shopping list item' => 'Maak een item in de boodschappenlijst', | ||||
| 	'Edit shopping list item' => 'Bewerk item in de boodschappenlijst', | ||||
| 	'Save' => 'Opslaan', | ||||
| 	'Add' => 'Toevoegen', | ||||
| 	'Name' => 'Naam', | ||||
| 	'Location' => 'Locatie', | ||||
| 	'Min. stock amount' => 'Min. voorraadhoeveelheid', | ||||
| 	'QU purchase' => 'QU purchase', | ||||
| 	'QU stock' => 'QU stock', | ||||
| 	'QU factor' => 'QU factor', | ||||
| 	'Description' => 'Omschrijving', | ||||
| 	'Create product' => 'Maak een product', | ||||
| 	'Barcode(s)' => 'Barcode(s)', | ||||
| 	'Minimum stock amount' => 'Minimale voorraadhoeveelheid', | ||||
| 	'Default best before days' => 'Standaard houdbaarheidsdatum', | ||||
| 	'Quantity unit purchase' => 'Aankoop aantal eenheden ', | ||||
| 	'Quantity unit stock' => 'Voorraad aantal eenheden', | ||||
| 	'Factor purchase to stock quantity unit' => 'Factor purchase to stock quantity unit', | ||||
| 	'Create location' => 'Maak een locatie', | ||||
| 	'Create quantity unit' => 'Maak eenheidseenheid', | ||||
| 	'Period type' => 'Periode type', | ||||
| 	'Period days' => 'Periode dagen', | ||||
| 	'Create chore' => 'Create chore', | ||||
| 	'Used in' => 'Gebruikt in', | ||||
| 	'Create battery' => 'Maak een batterij', | ||||
| 	'Edit battery' => 'Edit battery', | ||||
| 	'Edit chore' => 'Edit chore', | ||||
| 	'Edit quantity unit' => 'Edit quantity unit', | ||||
| 	'Edit product' => 'Edit product', | ||||
| 	'Edit location' => 'Wijzig locatie', | ||||
| 	'Record data' => 'Record data', | ||||
| 	'Manage master data' => 'Manage master data', | ||||
| 	'This will apply to added products' => 'This will apply to added products', | ||||
| 	'never' => 'never', | ||||
| 	'Add products that are below defined min. stock amount' => 'Add products that are below defined min. stock amount', | ||||
| 	'For purchases this amount of days will be added to today for the best before date suggestion' => 'For purchases this amount of days will be added to today for the best before date suggestion', | ||||
| 	'This means 1 #1 purchased will be converted into #2 #3 in stock' => 'This means 1 #1 purchased will be converted into #2 #3 in stock', | ||||
| 	'Login' => 'Login', | ||||
| 	'Username' => 'Username', | ||||
| 	'Password' => 'Password', | ||||
| 	'Invalid credentials, please try again' => 'Invalid credentials, please try again', | ||||
| 	'Are you sure to delete battery "#1"?' => 'Are you sure to delete battery "#1"?', | ||||
| 	'Yes' => 'Yes', | ||||
| 	'No' => 'No', | ||||
| 	'Are you sure to delete chore "#1"?' => 'Are you sure to delete chore "#1"?', | ||||
| 	'"#1" could not be resolved to a product, how do you want to proceed?' => '"#1" could not be resolved to a product, how do you want to proceed?', | ||||
| 	'Create or assign product' => 'Create or assign product', | ||||
| 	'Cancel' => 'Cancel', | ||||
| 	'Add as new product' => 'Add as new product', | ||||
| 	'Add as barcode to existing product' => 'Add as barcode to existing product', | ||||
| 	'Add as new product and prefill barcode' => 'Add as new product and prefill barcode', | ||||
| 	'Are you sure to delete quantity unit "#1"?' => 'Are you sure to delete quantity unit "#1"?', | ||||
| 	'Are you sure to delete product "#1"?' => 'Are you sure to delete product "#1"?', | ||||
| 	'Are you sure to delete location "#1"?' => 'Weet u zeker dat u locatie "#1" wilt verwijderen?', | ||||
| 	'Manage API keys' => 'Manage API keys', | ||||
| 	'REST API & data model documentation' => 'REST API & data model documentation', | ||||
| 	'API keys' => 'API keys', | ||||
| 	'Create new API key' => 'Create new API key', | ||||
| 	'API key' => 'API key', | ||||
| 	'Expires' => 'Expires', | ||||
| 	'Created' => 'Created', | ||||
| 	'This product is not in stock' => 'This product is not in stock', | ||||
| 	'This means #1 will be added to stock' => 'This means #1 will be added to stock', | ||||
| 	'This means #1 will be removed from stock' => 'This means #1 will be removed from stock', | ||||
| 	'This means it is estimated that a new execution of this chore is tracked #1 days after the last was tracked' => 'This means it is estimated that a new execution of this chore is tracked #1 days after the last was tracked', | ||||
| 	'Removed #1 #2 of #3 from stock' => 'Removed #1 #2 of #3 from stock', | ||||
| 	'About grocy' => 'About grocy', | ||||
| 	'Close' => 'Close', | ||||
| 	'#1 batteries are due to be charged within the next #2 days' => '#1 batteries are due to be charged within the next #2 days', | ||||
| 	'#1 batteries are overdue to be charged' => '#1 batteries are overdue to be charged', | ||||
| 	'#1 chores are due to be done within the next #2 days' => '#1 chores are due to be done within the next #2 days', | ||||
| 	'#1 chores are overdue to be done' => '#1 chores are overdue to be done', | ||||
| 	'Released on' => 'Released on', | ||||
| 	'Consume #3 #1 of #2' => 'Consume #3 #1 of #2', | ||||
| 	'Added #1 #2 of #3 to stock' => 'Added #1 #2 of #3 to stock', | ||||
| 	'Stock amount of #1 is now #2 #3' => 'Stock amount of #1 is now #2 #3', | ||||
| 	'Tracked execution of chore #1 on #2' => 'Tracked execution of chore #1 on #2', | ||||
| 	'Tracked charge cycle of battery #1 on #2' => 'Tracked charge cycle of battery #1 on #2', | ||||
| 	'Consume all #1 which are currently in stock' => 'Consume all #1 which are currently in stock', | ||||
| 	'All' => 'All', | ||||
| 	'Track charge cycle of battery #1' => 'Track charge cycle of battery #1', | ||||
| 	'Track execution of chore #1' => 'Track execution of chore #1', | ||||
| 	'Filter by location' => 'Filteren op locatie', | ||||
| 	'Search' => 'Search', | ||||
| 	'Not logged in' => 'Not logged in', | ||||
| 	'You have to select a product' => 'You have to select a product', | ||||
| 	'You have to select a chore' => 'You have to select a chore', | ||||
| 	'You have to select a battery' => 'You have to select a battery', | ||||
| 	'A name is required' => 'A name is required', | ||||
| 	'A location is required' => 'Een locatie is verplicht', | ||||
| 	'The amount cannot be lower than #1' => 'The amount cannot be lower than #1', | ||||
| 	'This cannot be negative' => 'Dit kan niet negatief zijn', | ||||
| 	'A quantity unit is required' => 'A quantity unit is required', | ||||
| 	'A period type is required' => 'A period type is required', | ||||
| 	'A best before date is required and must be later than today' => 'A best before date is required and must be later than today', | ||||
| 	'Settings' => 'Instellingen', | ||||
| 	'This can only be before now' => 'This can only be before now', | ||||
| 	'Calendar' => 'Calendar', | ||||
| 	'Recipes' => 'Recipes', | ||||
| 	'Edit recipe' => 'Edit recipe', | ||||
| 	'New recipe' => 'New recipe', | ||||
| 	'Ingredients list' => 'Ingredients list', | ||||
| 	'Add recipe ingredient' => 'Add recipe ingredient', | ||||
| 	'Edit recipe ingredient' => 'Edit recipe ingredient', | ||||
| 	'Are you sure to delete recipe "#1"?' => 'Are you sure to delete recipe "#1"?', | ||||
| 	'Are you sure to delete recipe ingredient "#1"?' => 'Are you sure to delete recipe ingredient "#1"?', | ||||
| 	'Are you sure to empty the shopping list?' => 'Are you sure to empty the shopping list?', | ||||
| 	'Clear list' => 'Clear list', | ||||
| 	'Requirements fulfilled' => 'Requirements fulfilled', | ||||
| 	'Put missing products on shopping list' => 'Put missing products on shopping list', | ||||
| 	'Not enough in stock, #1 ingredients missing' => 'Not enough in stock, #1 ingredients missing', | ||||
| 	'Enough in stock' => 'Enough in stock', | ||||
| 	'Not enough in stock, #1 ingredients missing but already on the shopping list' => 'Not enough in stock, #1 ingredients missing but already on the shopping list', | ||||
| 	'Expand to fullscreen' => 'Expand to fullscreen', | ||||
| 	'Ingredients' => 'Ingredients', | ||||
| 	'Preparation' => 'Preparation', | ||||
| 	'Recipe' => 'Recipe', | ||||
| 	'Not enough in stock, #1 missing, #2 already on shopping list' => 'Not enough in stock, #1 missing, #2 already on shopping list', | ||||
| 	'Show notes' => 'Show notes', | ||||
| 	'Put missing amount on shopping list' => 'Put missing amount on shopping list', | ||||
| 	'Are you sure to put all missing ingredients for recipe "#1" on the shopping list?' => 'Are you sure to put all missing ingredients for recipe "#1" on the shopping list?', | ||||
| 	'Added for recipe #1' => 'Added for recipe #1', | ||||
| 	'Manage users' => 'Beheer gebruikers', | ||||
| 	'User' => 'Gebruiker', | ||||
| 	'Users' => 'Gebruikers', | ||||
| 	'Are you sure to delete user "#1"?' => 'Are you sure to delete user "#1"?', | ||||
| 	'Create user' => 'Create user', | ||||
| 	'Edit user' => 'Bewerk gebruiker', | ||||
| 	'First name' => 'Voornaam', | ||||
| 	'Last name' => 'Achternaam', | ||||
| 	'A username is required' => 'een gebruikersnaam is verplicht', | ||||
| 	'Confirm password' => 'Bevestig wachtwoord', | ||||
| 	'Passwords do not match' => 'Wachtwoorden komen niet overeen', | ||||
| 	'Change password' => 'Wachtwoord wijzigen', | ||||
| 	'Done by' => 'Gedaan door', | ||||
| 	'Last done by' => 'Laatst gedaan door', | ||||
| 	'Unknown' => 'Onbekend', | ||||
| 	'Filter by chore' => 'Filter op klus', | ||||
| 	'Chores journal' => 'Klusjesjournaal', | ||||
| 	'0 means suggestions for the next charge cycle are disabled' => '0 betekent dat suggesties voor de volgende laadcyclus zijn uitgeschakeld', | ||||
| 	'Charge cycle interval (days)' => 'Laadcyclusinterval (dagen)', | ||||
| 	'Last price' => 'Laatste prijs', | ||||
| 	'Price history' => 'Prijs geschiedenis', | ||||
| 	'No price history available' => 'Geen prijsgeschiedenis beschikbaar', | ||||
| 	'Price' => 'Price', | ||||
| 	'in #1 per purchase quantity unit' => 'in #1 per purchase quantity unit', | ||||
| 	'The price cannot be lower than #1' => 'The price cannot be lower than #1', | ||||
| 	'#1 product expires within the next #2 days' => '#1 product expires within the next #2 days', | ||||
| 	'#1 product is already expired' => '#1 product is already expired', | ||||
| 	'#1 product is below defined min. stock amount' => '#1 product is below defined min. stock amount', | ||||
| 	'Unit' => 'Unit', | ||||
| 	'Units' => 'Units', | ||||
| 	'#1 chore is due to be done within the next #2 days' => '#1 chore is due to be done within the next #2 days', | ||||
| 	'#1 chore is overdue to be done' => '#1 chore is overdue to be done', | ||||
| 	'#1 battery is due to be charged within the next #2 days' => '#1 battery is due to be charged within the next #2 days', | ||||
| 	'#1 battery is overdue to be charged' => '#1 battery is overdue to be charged', | ||||
| 	'#1 unit was automatically added and will apply in addition to the amount entered here' => '#1 unit was automatically added and will apply in addition to the amount entered here', | ||||
| 	'in singular form' => 'in singular form', | ||||
| 	'in plural form' => 'in plural form', | ||||
| 	'Never expires' => 'Never expires', | ||||
| 	'This cannot be lower than #1' => 'This cannot be lower than #1', | ||||
| 	'-1 means that this product never expires' => '-1 means that this product never expires', | ||||
| 	'Quantity unit' => 'Quantity unit', | ||||
| 	'Only check if a single unit is in stock (a different quantity can then be used above)' => 'Only check if a single unit is in stock (a different quantity can then be used above)', | ||||
| 	'Are you sure to consume all ingredients needed by recipe "#1" (ingredients marked with "check only if a single unit is in stock" will be ignored)?' => 'Are you sure to consume all ingredients needed by recipe "#1" (ingredients marked with "check only if a single unit is in stock" will be ignored)?', | ||||
| 	'Removed all ingredients of recipe "#1" from stock' => 'Removed all ingredients of recipe "#1" from stock', | ||||
| 	'Consume all ingredients needed by this recipe' => 'Consume all ingredients needed by this recipe', | ||||
| 	'Click to show technical details' => 'Click to show technical details', | ||||
| 	'Error while saving, probably this item already exists' => 'Error while saving, probably this item already exists', | ||||
| 	'Error details' => 'Error details', | ||||
| 	'Tasks' => 'Tasks', | ||||
| 	'Show done tasks' => 'Show done tasks', | ||||
| 	'Task' => 'Task', | ||||
| 	'Due' => 'Due', | ||||
| 	'Assigned to' => 'Assigned to', | ||||
| 	'Mark task "#1" as completed' => 'Mark task "#1" as completed', | ||||
| 	'Uncategorized' => 'Uncategorized', | ||||
| 	'Task categories' => 'Task categories', | ||||
| 	'Create task' => 'Create task', | ||||
| 	'A due date is required' => 'A due date is required', | ||||
| 	'Category' => 'Category', | ||||
| 	'Edit task' => 'Edit task', | ||||
| 	'Are you sure to delete task "#1"?' => 'Are you sure to delete task "#1"?', | ||||
| 	'#1 task is due to be done within the next #2 days' => '#1 task is due to be done within the next #2 days', | ||||
| 	'#1 tasks are due to be done within the next #2 days' => '#1 tasks are due to be done within the next #2 days', | ||||
| 	'#1 task is overdue to be done' => '#1 task is overdue to be done', | ||||
| 	'#1 tasks are overdue to be done' => '#1 tasks are overdue to be done', | ||||
| 	'Edit task category' => 'Edit task category', | ||||
| 	'Create task category' => 'Create task category', | ||||
| 	'Product groups' => 'Product groups', | ||||
| 	'Ungrouped' => 'Ungrouped', | ||||
| 	'Create product group' => 'Create product group', | ||||
| 	'Edit product group' => 'Edit product group', | ||||
| 	'Product group' => 'Product group', | ||||
| 	'Are you sure to delete product group "#1"?' => 'Are you sure to delete product group "#1"?', | ||||
| 	'Stay logged in permanently' => 'Stay logged in permanently', | ||||
| 	'When not set, you will get logged out at latest after 30 days' => 'When not set, you will get logged out at latest after 30 days', | ||||
| 	'Filter by status' => 'Filter by status', | ||||
| 	'Below min. stock amount' => 'Below min. stock amount', | ||||
| 	'Expiring soon' => 'Expiring soon', | ||||
| 	'Already expired' => 'Already expired', | ||||
| 	'Due soon' => 'Due soon', | ||||
| 	'Overdue' => 'Overdue', | ||||
| 	'View settings' => 'View settings', | ||||
| 	'Auto reload on external changes' => 'Auto reload on external changes', | ||||
| 	'Enable night mode' => 'Enable night mode', | ||||
| 	'Auto enable in time range' => 'Auto enable in time range', | ||||
| 	'From' => 'From', | ||||
| 	'in format' => 'in format', | ||||
| 	'To' => 'To', | ||||
| 	'Time range goes over midnight' => 'Time range goes over midnight', | ||||
| 	'Product picture' => 'Product picture', | ||||
| 	'No file selected' => 'No file selected', | ||||
| 	'If you don\'t select a file, the current picture will not be altered' => 'If you don\'t select a file, the current picture will not be altered', | ||||
| 	'Delete' => 'Delete', | ||||
| 	'The current picture will be deleted when you save the product' => 'The current picture will be deleted when you save the product', | ||||
| 	'Select file' => 'Select file', | ||||
| 	'Image of product #1' => 'Image of product #1', | ||||
| 	'This product cannot be deleted because it is in stock, please remove the stock amount first.' => 'This product cannot be deleted because it is in stock, please remove the stock amount first.', | ||||
| 	'Delete not possible' => 'Delete not possible', | ||||
| 	'Equipment' => 'Equipment', | ||||
| 	'Instruction manual' => 'Instruction manual', | ||||
| 	'The selected equipment has no instruction manual' => 'The selected equipment has no instruction manual', | ||||
| 	'Notes' => 'Notes', | ||||
| 	'Edit equipment' => 'Edit equipment', | ||||
| 	'Create equipment' => 'Create equipment', | ||||
| 	'If you don\'t select a file, the current instruction manual will not be altered' => 'If you don\'t select a file, the current instruction manual will not be altered', | ||||
| 	'No instruction manual available' => 'No instruction manual available', | ||||
| 	'The current instruction manual will be deleted when you save the equipment' => 'The current instruction manual will be deleted when you save the equipment', | ||||
| 	'No picture available' => 'No picture available', | ||||
| 	'Filter by product group' => 'Filter by product group', | ||||
| 	'Presets for new products' => 'Presets for new products', | ||||
| 	'Included recipes' => 'Included recipes', | ||||
| 	'A recipe is required' => 'A recipe is required', | ||||
| 	'Add included recipe' => 'Add included recipe', | ||||
| 	'Edit included recipe' => 'Edit included recipe', | ||||
| 	'Group' => 'Groep', | ||||
| 	'This will be used as a headline to group ingredients together' => 'This will be used as a headline to group ingredients together', | ||||
| 	'Journal' => 'Journal', | ||||
| 	'Stock journal' => 'Stock journal', | ||||
| 	'Filter by product' => 'Filter by product', | ||||
| 	'Booking time' => 'Booking time', | ||||
| 	'Booking type' => 'Booking type', | ||||
| 	'Undo booking' => 'Undo booking', | ||||
| 	'Undone on' => 'Undone on', | ||||
| 	'Batteries journal' => 'Batteries journal', | ||||
| 	'Filter by battery' => 'Filter by battery', | ||||
| 	'Undo charge cycle' => 'Undo charge cycle', | ||||
| 	'Undo chore execution' => 'Undo chore execution', | ||||
| 	'Chore execution successfully undone' => 'Chore execution successfully undone', | ||||
| 	'Undo' => 'Undo', | ||||
| 	'Booking successfully undone' => 'Booking successfully undone', | ||||
| 	'Charge cycle successfully undone' => 'Charge cycle successfully undone', | ||||
| 	'This cannot be negative and must be an integral number' => 'This cannot be negative and must be an integral number', | ||||
| 	'Disable stock fulfillment checking for this ingredient' => 'Disable stock fulfillment checking for this ingredient', | ||||
| 	'Add all list items to stock' => 'Add all list items to stock', | ||||
| 	'Add #3 #1 of #2 to stock' => 'Add #3 #1 of #2 to stock', | ||||
| 	'Adding shopping list item #1 of #2' => 'Adding shopping list item #1 of #2', | ||||
| 	'Use a specific stock item' => 'Use a specific stock item', | ||||
| 	'The first item in this list would be picked by the default rule which is "First expiring first, then first in first out"' => 'The first item in this list would be picked by the default rule which is "First expiring first, then first in first out"', | ||||
| 	'Mark #3 #1 of #2 as open' => 'Mark #3 #1 of #2 as open', | ||||
| 	'When a product was marked as opened, the best before date will be replaced by today + this amount of days (a value of 0 disables this)' => 'When a product was marked as opened, the best before date will be replaced by today + this amount of days (a value of 0 disables this)', | ||||
| 	'Default best before days after opened' => 'Default best before days after opened', | ||||
| 	'Marked #1 #2 of #3 as opened' => 'Marked #1 #2 of #3 as opened', | ||||
| 	'Mark as opened' => 'Mark as opened', | ||||
| 	'Expires on #1; Bought on #2' => 'Expires on #1; Bought on #2', | ||||
| 	'Not opened' => 'Not opened', | ||||
| 	'Opened' => 'Geopend', | ||||
| 	'Mark #3 #1 of #2 as open' => 'Mark #3 #1 of #2 as open', | ||||
| 	'#1 opened' => '#1 opened', | ||||
| 	'Product expires' => 'Product expires', | ||||
| 	'Task due' => 'Task due', | ||||
| 	'Chore due' => 'Chore due', | ||||
| 	'Battery charge cycle due' => 'Battery charge cycle due', | ||||
| 	'Show clock in header' => 'Toon klok in koptekst', | ||||
| 	'Stock settings' => 'Voorraadinstellingen', | ||||
| 	'Shopping list to stock workflow' => 'Shopping list to stock workflow', | ||||
| 	'Automatically do the booking using the last price and the amount of the shopping list item, if the product has "Default best before days" set' => 'Automatically do the booking using the last price and the amount of the shopping list item, if the product has "Default best before days" set', | ||||
| 	'Skip' => 'Overslaan', | ||||
| 	'Servings' => 'Servings', | ||||
| 	'Costs' => 'Costs', | ||||
| 	'Based on the prices of the last purchase per product' => 'Based on the prices of the last purchase per product', | ||||
| 	'The ingredients listed here result in this amount of servings' => 'The ingredients listed here result in this amount of servings', | ||||
| 	'Do not check against the shopping list when adding missing items to it' => 'Do not check against the shopping list when adding missing items to it', | ||||
| 	'By default the amount to be added to the shopping list is "needed amount - stock amount - shopping list amount" - when this is enabled, it is only checked against the stock amount, not against what is already on the shopping list' => 'By default the amount to be added to the shopping list is "needed amount - stock amount - shopping list amount" - when this is enabled, it is only checked against the stock amount, not against what is already on the shopping list', | ||||
| 	'Picture' => 'Picture', | ||||
| 	'Uncheck ingredients to not put them on the shopping list' => 'Uncheck ingredients to not put them on the shopping list', | ||||
| 	'This is for statistical purposes only' => 'This is for statistical purposes only', | ||||
| 	'You have to select a recipe' => 'You have to select a recipe', | ||||
| 	'Key type' => 'Key type', | ||||
| 	'Share/Integrate calendar (iCal)' => 'Share/Integrate calendar (iCal)', | ||||
| 	'Use the following (public) URL to share or integrate the calendar in iCal format' => 'Use the following (public) URL to share or integrate the calendar in iCal format', | ||||
| 	'Allow partial units in stock' => 'Allow partial units in stock', | ||||
| 	'Enable tare weight handling' => 'Enable tare weight handling', | ||||
| 	'This is useful e.g. for flour in jars - on purchase/consume/inventory you always weigh the whole jar, the amount to be posted is then automatically calculated based on what is in stock and the tare weight defined below' => 'This is useful e.g. for flour in jars - on purchase/consume/inventory you always weigh the whole jar, the amount to be posted is then automatically calculated based on what is in stock and the tare weight defined below', | ||||
| 	'Tare weight' => 'Tare weight', | ||||
| 	'Tare weight handling enabled - please weigh the whole container, the amount to be posted will be automatically calculcated' => 'Tare weight handling enabled - please weigh the whole container, the amount to be posted will be automatically calculcated', | ||||
| 	'You have to select a location' => 'You have to select a location', | ||||
| 	'List' => 'List', | ||||
| 	'Gallery' => 'Gallery' | ||||
| ); | ||||
| @@ -1,267 +0,0 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'Stock overview' => 'Husholdning', | ||||
| 	'#1 products expiring within the next #2 days' => '#1 Produkter som går ut på dato innen de neste #2 dagene', | ||||
| 	'#1 products are already expired' => '#1 Produkt som har gått ut på dato', | ||||
| 	'#1 products are below defined min. stock amount' => '#1 Produkt under minimum husholdningsnivå', | ||||
| 	'Product' => 'Produkt', | ||||
| 	'Amount' => 'Antall', | ||||
| 	'Next best before date' => 'Kommende best før dato', | ||||
| 	'Logout' => 'Logg ut', | ||||
| 	'Habits overview' => 'Oversikt Husoppgaver', | ||||
| 	'Batteries overview' => 'Oversikt Batteri', | ||||
| 	'Purchase' => 'Innkjøp', | ||||
| 	'Consume' => 'Forbrukt', | ||||
| 	'Inventory' => 'Endre Husholdning', | ||||
| 	'Shopping list' => 'Handleliste', | ||||
| 	'Habit tracking' => 'Logge Husoppgaver', | ||||
| 	'Battery tracking' => 'Batteri Ladesyklus', | ||||
| 	'Products' => 'Produkter', | ||||
| 	'Locations' => 'Lokasjoner', | ||||
| 	'Quantity units' => 'Forpakning', | ||||
| 	'Habits' => 'Husoppgaver', | ||||
| 	'Batteries' => 'Batterier', | ||||
| 	'Habit' => 'Husoppgave', | ||||
| 	'Next estimated tracking' => 'Neste handling', | ||||
| 	'Last tracked' => 'Sist logget', | ||||
| 	'Battery' => 'Batteri', | ||||
| 	'Last charged' => 'Sist ladet', | ||||
| 	'Next planned charge cycle' => 'Neste planlagte ladesyklus', | ||||
| 	'Best before' => 'Best før', | ||||
| 	'OK' => 'OK', | ||||
| 	'Product overview' => 'Oversikt Produkt', | ||||
| 	'Stock quantity unit' => 'Forpakningstype i husholdningen', | ||||
| 	'Stock amount' => 'Husholdning', | ||||
| 	'Last purchased' => 'Sist kjøpt', | ||||
| 	'Last used' => 'Sist brukt', | ||||
| 	'Spoiled' => 'Produkt har gått ut på dato', | ||||
| 	'Barcode lookup is disabled' => 'Strekkodesøk deaktivert', | ||||
| 	'will be added to the list of barcodes for the selected product on submit' => 'Blir lagt til liste over strekkoder når produkt blir lagt inn.', | ||||
| 	'New amount' => 'Nytt antall', | ||||
| 	'Note' => 'Info', | ||||
| 	'Tracked time' => 'Tid logget', | ||||
| 	'Habit overview' => 'Oversikt Husoppgave', | ||||
| 	'Tracked count' => 'Logget', | ||||
| 	'Battery overview' => 'Batteri Oversikt', | ||||
| 	'Charge cycles count' => 'Antall ladesykluser', | ||||
| 	'Create shopping list item' => 'Opprett handelisteoppføring', | ||||
| 	'Edit shopping list item' => 'Endre på handlelistoppføring', | ||||
| 	'#1 units were automatically added and will apply in addition to the amount entered here' => '#1 enheter ble automatisk lagt til i tillegg til hva som blir skrevet inn her', | ||||
| 	'Save' => 'Lagre', | ||||
| 	'Add' => 'Legg til', | ||||
| 	'Name' => 'Navn', | ||||
| 	'Location' => 'Lokasjon', | ||||
| 	'Min. stock amount' => 'Minimums antall for husholdingen', | ||||
| 	'QU purchase' => 'FPK innkjøp', | ||||
| 	'QU stock' => 'FPK husholdning', | ||||
| 	'QU factor' => 'FPK faktor', | ||||
| 	'Description' => 'Beskrivelse', | ||||
| 	'Create product' => 'Opprett produkt', | ||||
| 	'Barcode(s)' => 'Strekkode(r)', | ||||
| 	'Minimum stock amount' => 'Minimums antall for husholdningen', | ||||
| 	'Default best before days' => 'Standard antall dager best før', | ||||
| 	'Quantity unit purchase' => 'Forpakning kjøpt', | ||||
| 	'Quantity unit stock' => 'Forpakning husholdning', | ||||
| 	'Factor purchase to stock quantity unit' => 'Innkjøpsfaktor for forpakning', | ||||
| 	'Create location' => 'Opprett lokasjon', | ||||
| 	'Create quantity unit' => 'Opprett forpakning', | ||||
| 	'Period type' => 'Gjentakelse', | ||||
| 	'Period days' => 'Dager for gjentakelse', | ||||
| 	'Create habit' => 'Opprett husoppgave', | ||||
| 	'Used in' => 'Brukt', | ||||
| 	'Create battery' => 'Opprett batteri', | ||||
| 	'Edit battery' => 'Endre batteri', | ||||
| 	'Edit habit' => 'Endre husoppgave', | ||||
| 	'Edit quantity unit' => 'Endre forpakning', | ||||
| 	'Edit product' => 'Endre produkt', | ||||
| 	'Edit location' => 'Endre lokasjon', | ||||
| 	'Record data' => 'Logg handlinger', | ||||
| 	'Manage master data' => 'Administrer masterdata', | ||||
| 	'This will apply to added products' => 'Dette vil gjelde for produkt som blir lagt til', | ||||
| 	'never' => 'aldri', | ||||
| 	'Add products that are below defined min. stock amount' => 'Legg til produkt som er under definert minimums antall for husholdningen', | ||||
| 	'For purchases this amount of days will be added to today for the best before date suggestion' => 'For innkjøp vil dette antallet dager legges til bestfør forslaget', | ||||
| 	'This means 1 #1 purchased will be converted into #2 #3 in stock' => 'Dette betyr at 1 #1 innkjøp vil bli omgjort til #2 #3 husholdning', | ||||
| 	'Login' => 'Logg inn', | ||||
| 	'Username' => 'Brukernavn', | ||||
| 	'Password' => 'Passord', | ||||
| 	'Invalid credentials, please try again' => 'Feil brukernavn og/eller passord, prøv igjen', | ||||
| 	'Are you sure to delete battery "#1"?' => 'Er du sikker du ønsker å slette Batteri "#1"?', | ||||
| 	'Yes' => 'Ja', | ||||
| 	'No' => 'Nei', | ||||
| 	'Are you sure to delete habit "#1"?' => 'Er du sikker på du ønsker å slette husoppgave "#1"?', | ||||
| 	'"#1" could not be resolved to a product, how do you want to proceed?' => '"#1" kunne ikke bli tildelt et produkt, hvordan ønsker du å fortsette?', | ||||
| 	'Create or assign product' => 'Opprett eller tildel til produkt', | ||||
| 	'Cancel' => 'Avbryt', | ||||
| 	'Add as new product' => 'Legg til som nytt produkt', | ||||
| 	'Add as barcode to existing product' => 'Legg til strekkode til allerede eksisterende produkt', | ||||
| 	'Add as new product and prefill barcode' => 'Legg til som nytt produkt med forhåndsutfylt strekkode', | ||||
| 	'Are you sure to delete quantity unit "#1"?' => 'Er du sikker du ønsker å slette forpakning "#1"?', | ||||
| 	'Are you sure to delete product "#1"?' => 'Er du sikker du ønsker å slette produkt "#1"?', | ||||
| 	'Are you sure to delete location "#1"?' => 'Er du sikker du ønsker å slette lokasjon "#1"?', | ||||
| 	'Manage API keys' => 'Administrer API-Keys', | ||||
|     'REST API & data model documentation' => 'REST-API & Datamodell Dokumentasjon', | ||||
|     'API keys' => 'API-Keys', | ||||
|     'Create new API key' => 'Opprett ny API-Key', | ||||
|     'API key' => 'API-Key', | ||||
|     'Expires' => 'Går ut', | ||||
|     'Created' => 'Opprettet', | ||||
| 	'This product is not in stock' => 'Dette produktet er ikke i husholdningen', | ||||
| 	'This means #1 will be added to stock' => 'Dette betyr at #1 vil bli lagt til i husholdningen', | ||||
| 	'This means #1 will be removed from stock' => 'Dette betyr at #1 vil bli fjernet fra husholdningen', | ||||
| 	'This means it is estimated that a new execution of this habit is tracked #1 days after the last was tracked' => 'Dette betyr at det er estimert at den nye utførelsen av denne husoppgaven er logget #1 dag etter den sist var logget', | ||||
| 	'Removed #1 #2 of #3 from stock' => 'Fjernet #1 #2 av #3 fra husholdningen', | ||||
| 	'About grocy' => 'Om Grocy', | ||||
| 	'Close' => 'Lukk', | ||||
| 	'#1 batteries are due to be charged within the next #2 days' => '#1 Batteri må lades innen de #2 neste dagene', | ||||
| 	'#1 batteries are overdue to be charged' => '#1 Batteri har gått over fristen for å bli ladet opp', | ||||
| 	'#1 habits are due to be done within the next #2 days' => '#1 husoppgaver skal gjøres inne de #2 neste dagene', | ||||
| 	'#1 habits are overdue to be done' => '#1 husoppgaver har gått over fristen for utførelse', | ||||
| 	'Released on' => 'Utgitt', | ||||
| 	'Consume #3 #1 of #2' => 'Forbruk #3 #1 #2', | ||||
| 	'Added #1 #2 of #3 to stock' => '#1 #2 #3 lagt til i husholdningen', | ||||
| 	'Stock amount of #1 is now #2 #3' => 'Husholdning antall #1 er nå #2 #3', | ||||
| 	'Tracked execution of habit #1 on #2' => 'Logget utførelse av husoppgave "#1" den #2', | ||||
| 	'Tracked charge cylce of battery #1 on #2' => 'Logget ladesyklus for batteri #1 og #2', | ||||
| 	'Consume all #1 which are currently in stock' => 'Konsumér alle #1 som er i husholdningen', | ||||
| 	'All' => 'Alle', | ||||
| 	'Track charge cycle of battery #1' => 'Logg ladesyklus for batteri #1', | ||||
| 	'Track execution of habit #1' => 'Logg utførelse av husoppgave #1', | ||||
| 	'Filter by location' => 'Filtrér etter lokasjon', | ||||
| 	'Search' => 'Søk', | ||||
| 	'Not logged in' => 'Ikke logget inn', | ||||
| 	'You have to select a product' => 'Du må velge et produkt', | ||||
| 	'You have to select a habit' => 'Du må velge en husoppgaven', | ||||
| 	'You have to select a battery' => 'Du må velge et batteri', | ||||
| 	'A name is required' => 'Et navn kreves', | ||||
| 	'A location is required' => 'En lokasjon kreves', | ||||
| 	'The amount cannot be lower than #1' => 'Antallet kan ikke være lavere enn #1', | ||||
| 	'This cannot be negative' => 'Dette kan ikke være negativt', | ||||
| 	'A quantity unit is required' => 'Forpakning antall/størrelse kreves', | ||||
| 	'A period type is required' => 'En periodetype kreves', | ||||
| 	'A best before date is required and must be later than today' => 'En best før dato kreves, denne må være senere enn i dag', | ||||
| 	'Settings' => 'Innstillinger', | ||||
| 	'This can only be before now' => 'Dette kan kun være før nå', | ||||
|         'Calendar' => 'Kalender', | ||||
| 	'Recipes' => 'Oppskrifter', | ||||
| 	'Edit recipe' => 'Endre oppskrift', | ||||
| 	'New recipe' => 'Ny oppskrift', | ||||
| 	'Ingredients list' => 'Liste over ingredienser', | ||||
| 	'Add recipe ingredient' => 'Legg ingrediens til oppskrift', | ||||
| 	'Edit recipe ingredient' => 'Endre ingrediens i oppskrift', | ||||
| 	'Are you sure to delete recipe "#1"?' => 'Er du sikker du ønsker å slette oppskrift "#1"?', | ||||
| 	'Are you sure to delete recipe ingredient "#1"?' => 'Er du sikker du ønsker å slette ingrediens "#1" fra oppskriften?', | ||||
| 	'Are you sure to empty the shopping list?' => 'Er du sikker du ønsker å slette handlelisten?', | ||||
| 	'Clear list' => 'Tøm liste', | ||||
| 	'Requirements fulfilled' => 'Krav oppfylt', | ||||
| 	'Put missing products on shopping list' => 'Legg manglende produkter til handlelisten', | ||||
| 	'Not enough in stock, #1 ingredients missing' => 'Ikke nok i husholdningen, #1 ingredienser mangler', | ||||
| 	'Enough in stock' => 'Nok i husholdningen', | ||||
| 	'Not enough in stock, #1 ingredients missing but already on the shopping list' => 'Ikke nok i husholdningen, #1 ingrediens mangler, men står allerede på handelisten', | ||||
| 	'Expand to fullscreen' => 'Full skjerm', | ||||
| 	'Ingredients' => 'Ingredienser', | ||||
| 	'Preparation' => 'Forberedelse / Slik gjør du', | ||||
| 	'Recipe' => 'Oppskrift', | ||||
| 	'Not enough in stock, #1 missing, #2 already on shopping list' => 'Ikke nok i husholdningen, #1 mangler, #2 allerede i handlisten', | ||||
| 	'Show notes' => 'Vis notater', | ||||
| 	'Put missing amount on shopping list' => 'Legg manglende til handlelisten', | ||||
| 	'Are you sure to put all missing ingredients for recipe "#1" on the shopping list?' => 'Er du sikker du ønsker å legge alle manglende ingredienser til oppskrift "#1"?', | ||||
| 	'Added for recipe #1' => 'Lagt til oppskrift #1', | ||||
| 	'Manage users' => 'Administrer brukere', | ||||
| 	'User' => 'Bruker', | ||||
| 	'Users' => 'Brukere', | ||||
| 	'Are you sure to delete user "#1"?' => 'Er du sikker på du ønsker å slette bruker, "#1"?', | ||||
| 	'Create user' => 'Legg til bruker', | ||||
| 	'Edit user' => 'Endre på bruker', | ||||
| 	'First name' => 'Fornavn', | ||||
| 	'Last name' => 'Etternavn', | ||||
| 	'A username is required' => 'Et brukernavn er nødvendig', | ||||
| 	'Confirm password' => 'Bekreft passord', | ||||
| 	'Passwords do not match' => 'Passord er ikke like', | ||||
| 	'Change password' => 'Endre passord', | ||||
| 	'Done by' => 'Utført av', | ||||
| 	'Last done by' => 'Sist utført av', | ||||
| 	'Unknown' => 'Ukjent', | ||||
| 	'Filter by habit' => 'Filtrér husoppave', | ||||
| 	'Habits analysis' => 'Statistikk husoppgaver', | ||||
|  	'0 means suggestions for the next charge cycle are disabled' => '0 betyr neste ladesyklus er avslått', | ||||
|  	'Charge cycle interval (days)' => 'Ladesyklysintervall (Dager)', | ||||
|  	'Last price' => 'Siste pris', | ||||
|  	'Price history' => 'Prishistorikk', | ||||
|  	'No price history available' => 'Ingen prishistorikk tilgjengelig', | ||||
| 	'Price' => 'Pris', | ||||
| 	'in #1 per purchase quantity unit' => 'I #1 per kjøpt forpakning ', | ||||
| 	'The price cannot be lower than #1' => 'Prisen kan ikke være lavere enn #1', | ||||
| 	'#1 product expires within the next #2 days' => '#1 Produkt går ut på dato innen de #2  neste dagene', | ||||
| 	'#1 product is already expired' => '#1 Produkt er allerede gått ut på dato', | ||||
| 	'#1 product is below defined min. stock amount' => '#1 Produkt er under minimums husholdningsnivå', | ||||
| 	'Unit' => 'Enhet', | ||||
| 	'Units' => 'Enheter', | ||||
| 	'#1 habit is due to be done within the next #2 days' => '#1 husoppgave skal gjøres inne de #2 neste dagene', | ||||
| 	'#1 habit is overdue to be done' => '#1 husoppgave har gått over fristen for utførelse', | ||||
| 	'#1 battery is due to be charged within the next #2 days' => '#1 Batteri må lades innen #2 dager', | ||||
| 	'#1 battery is overdue to be charged' => '#1 Batteri har gått over fristen for å lades', | ||||
| 	'#1 unit was automatically added and will apply in addition to the amount entered here' => '#1 enhet ble automatisk lagt til i tillegg til hva som blir skrevet inn her', | ||||
| 	'in singular form' => 'I entall', | ||||
| 	'in plural form' => 'I flertall', | ||||
| 	 | ||||
| 	//Constants | ||||
| 	'manually' => 'Manuel', | ||||
| 	'dynamic-regular' => 'Automatisk (rullering settes under)', | ||||
| 	 | ||||
| 	//Technical component translations | ||||
| 	'timeago_locale' => 'no', | ||||
| 	'timeago_nan' => 'for NaN År', | ||||
| 	'moment_locale' => 'nb', | ||||
| 	'datatables_localization' => '{"sEmptyTable":"Det finnes ingen data i tabellen","sInfo":"_START_ fra _END_ til _TOTAL_ skriv","sInfoEmpty":"Ingen data tilgjengelign","sInfoFiltered":"(filtrert fra _MAX_ skriv)","sInfoPostFix":"","sInfoThousands":".","sLengthMenu":"_MENU_ registrer deg","sLoadingRecords":"Laster ..","sProcessing":"Vennligst vent ..","sSearch":"Søk","sZeroRecords":"Ingen oppføringer tilgjengelig","oPaginate":{"sFirst":"Første","sPrevious":"Bakover","sNext":"Neste","sLast":"Siste"},"oAria":{"sSortAscending":": Sortér stigende","sSortDescending":": Sortér synkende"},"select":{"rows":{"0":"klikk på en linje for å velge","1":"1 linje valgt","_":"%d linger valgt"}},"buttons":{"print":"Print","colvis":"Søyle","copy":"Kopi","copyTitle":"Kopier til utklippstavlen","copyKeys":"Trykk <i>ctrl</i> eller <i>⌘</i> + <i>C</i> for å kopiere tabell<br> til utklipptavlen.<br><br>For å avbryte, klikke på meldingen eller trykk på ESC.","copySuccess":{"1":"1 Kolonne kopiert","_":"%d kolonne kopiert"}}}', | ||||
| 	 | ||||
| 	//Demo data | ||||
| 	'Cookies' => 'Cookies', | ||||
| 	'Chocolate' => 'Sjokolade', | ||||
| 	'Pantry' => 'Spiskammers', | ||||
| 	'Candy cupboard' => 'Godteriskapet', | ||||
| 	'Tinned food cupboard' => 'Boksematskapet', | ||||
| 	'Fridge' => 'Kjøleskapet', | ||||
| 	'Piece' => 'Ett', | ||||
| 	'Pack' => 'Pakke', | ||||
| 	'Glass' => 'Glass', | ||||
| 	'Tin' => 'Hermetikkboks', | ||||
| 	'Can' => 'Boks', | ||||
| 	'Bunch' => 'Klase', | ||||
| 	'Gummy bears' => 'Vingummibjørner', | ||||
| 	'Crisps' => 'Chips', | ||||
| 	'Eggs' => 'Egg', | ||||
| 	'Noodles' => 'Nuddler', | ||||
| 	'Pickles' => 'Sur agurk', | ||||
| 	'Gulash soup' => 'Gulasj suppe', | ||||
| 	'Yogurt' => 'Yoghurt', | ||||
| 	'Cheese' => 'Ost', | ||||
| 	'Cold cuts' => 'Kjøttpålegg', | ||||
| 	'Paprika' => 'Paprika', | ||||
| 	'Cucumber' => 'Agurk', | ||||
| 	'Radish' => 'Reddik', | ||||
| 	'Tomato' => 'Tomat', | ||||
| 	'Changed towels in the bathroom' => 'Bytt handklær på badet', | ||||
| 	'Cleaned the kitchen floor' => 'Vasket kjøkkengulvet', | ||||
| 	'Warranty ends' => 'Garanti utgår', | ||||
| 	'TV remote control' => 'Fjernkontroll for TV', | ||||
| 	'Alarm clock' => 'Alarmklokke', | ||||
| 	'Heat remote control' => 'Fjernkontroll for termostat', | ||||
|         'Lawn mowed in the garden' => 'Kuttet gresse i hagen', | ||||
| 	'Some good snacks' => 'Noen gode snacks', | ||||
| 	'Pizza dough' => 'Pizzadeig', | ||||
| 	'Sieved tomatoes' => 'Tomatpuré', | ||||
| 	'Salami' => 'Salami', | ||||
| 	'Toast' => 'Ristet brød', | ||||
| 	'Minced meat' => 'Kjøttdeig', | ||||
| 	'Pizza' => 'Pizza', | ||||
| 	'Spaghetti bolognese' => 'Spaghetti Bolognese', | ||||
| 	'Sandwiches' => 'Smørbrød', | ||||
| 	'English' => 'Engelsk', | ||||
| 	'German' => 'Tysk', | ||||
| 	'Italian' => 'Italiensk', | ||||
| 	'Demo in different language' => 'Demo i annet språk', | ||||
| 	'This is the note content of the recipe ingredient' => 'Dette er notisen for ingrediensen i oppskriften' | ||||
| 	'Demo User' => 'Demo Bruker' | ||||
| ); | ||||
							
								
								
									
										6
									
								
								localization/no/chore_types.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								localization/no/chore_types.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'manually' => 'Manuel', | ||||
| 	'dynamic-regular' => 'Automatisk' | ||||
| ); | ||||
							
								
								
									
										10
									
								
								localization/no/component_translations.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								localization/no/component_translations.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'timeago_locale' => 'no', | ||||
| 	'timeago_nan' => 'for NaN År', | ||||
| 	'moment_locale' => 'nb', | ||||
| 	'datatables_localization' => '{"sEmptyTable":"Det finnes ingen data i tabellen","sInfo":"_START_ fra _END_ til _TOTAL_ skriv","sInfoEmpty":"Ingen data tilgjengelign","sInfoFiltered":"(filtrert fra _MAX_ skriv)","sInfoPostFix":"","sInfoThousands":".","sLengthMenu":"_MENU_ registrer deg","sLoadingRecords":"Laster ..","sProcessing":"Vennligst vent ..","sSearch":"Søk","sZeroRecords":"Ingen oppføringer tilgjengelig","oPaginate":{"sFirst":"Første","sPrevious":"Bakover","sNext":"Neste","sLast":"Siste"},"oAria":{"sSortAscending":": Sortér stigende","sSortDescending":": Sortér synkende"},"select":{"rows":{"0":"klikk på en linje for å velge","1":"1 linje valgt","_":"%d linger valgt"}},"buttons":{"print":"Print","colvis":"Søyle","copy":"Kopi","copyTitle":"Kopier til utklippstavlen","copyKeys":"Trykk <i>ctrl</i> eller <i>⌘</i> + <i>C</i> for å kopiere tabell<br> til utklipptavlen.<br><br>For å avbryte, klikke på meldingen eller trykk på ESC.","copySuccess":{"1":"1 Kolonne kopiert","_":"%d kolonne kopiert"}}}', | ||||
| 	'summernote_locale' => 'nb-NO', | ||||
| 	'fullcalendar_locale' => 'nb' | ||||
| ); | ||||
							
								
								
									
										89
									
								
								localization/no/demo_data.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								localization/no/demo_data.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,89 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'Cookies' => 'Cookies', | ||||
| 	'Chocolate' => 'Sjokolade', | ||||
| 	'Pantry' => 'Spiskammers', | ||||
| 	'Candy cupboard' => 'Godteriskapet', | ||||
| 	'Tinned food cupboard' => 'Boksematskapet', | ||||
| 	'Fridge' => 'Kjøleskapet', | ||||
| 	'Piece' => 'Ett', | ||||
| 	'Pieces' => 'Flere', | ||||
| 	'Pack' => 'Pakke', | ||||
| 	'Packs' => 'Pakker', | ||||
| 	'Glass' => 'Glass', | ||||
| 	'Glasses' => 'Glass', | ||||
| 	'Tin' => 'Hermetikkboks', | ||||
| 	'Tins' => 'Hermetikkbokser', | ||||
| 	'Can' => 'Boks', | ||||
| 	'Cans' => 'Bokser', | ||||
| 	'Bunch' => 'Klase', | ||||
| 	'Bunches' => 'Klaser', | ||||
| 	'Gummy bears' => 'Vingummibjørner', | ||||
| 	'Crisps' => 'Chips', | ||||
| 	'Eggs' => 'Egg', | ||||
| 	'Noodles' => 'Nuddler', | ||||
| 	'Pickles' => 'Sur agurk', | ||||
| 	'Gulash soup' => 'Gulasj suppe', | ||||
| 	'Yogurt' => 'Yoghurt', | ||||
| 	'Cheese' => 'Ost', | ||||
| 	'Cold cuts' => 'Kjøttpålegg', | ||||
| 	'Paprika' => 'Paprika', | ||||
| 	'Cucumber' => 'Agurk', | ||||
| 	'Radish' => 'Reddik', | ||||
| 	'Tomato' => 'Tomat', | ||||
| 	'Changed towels in the bathroom' => 'Bytt handklær på badet', | ||||
| 	'Cleaned the kitchen floor' => 'Vasket kjøkkengulvet', | ||||
| 	'Warranty ends' => 'Garanti utgår', | ||||
| 	'TV remote control' => 'Fjernkontroll for TV', | ||||
| 	'Alarm clock' => 'Alarmklokke', | ||||
| 	'Heat remote control' => 'Fjernkontroll for termostat', | ||||
| 	'Lawn mowed in the garden' => 'Kuttet gresset i hagen', | ||||
| 	'Some good snacks' => 'Noen gode snacks', | ||||
| 	'Pizza dough' => 'Pizzadeig', | ||||
| 	'Sieved tomatoes' => 'Tomatpuré', | ||||
| 	'Salami' => 'Salami', | ||||
| 	'Toast' => 'Ristet brød', | ||||
| 	'Minced meat' => 'Kjøttdeig', | ||||
| 	'Pizza' => 'Pizza', | ||||
| 	'Spaghetti bolognese' => 'Spaghetti Bolognese', | ||||
| 	'Sandwiches' => 'Smørbrød', | ||||
| 	'English' => 'Engelsk', | ||||
| 	'German' => 'Tysk', | ||||
| 	'Italian' => 'Italiensk', | ||||
| 	'Demo in different language' => 'Demo i annet språk', | ||||
| 	'This is the note content of the recipe ingredient' => 'Dette er notisen for ingrediensen i oppskriften', | ||||
| 	'Demo User' => 'Demo Bruker', | ||||
| 	'Gram' => 'Gram', | ||||
| 	'Grams' => 'Gram', | ||||
| 	'Flour' => 'Mel', | ||||
| 	'Pancakes' => 'Pannekaker', | ||||
| 	'Sugar' => 'Sukker', | ||||
| 	'Home' => 'Hus', | ||||
| 	'Life' => 'Livstil', | ||||
| 	'Projects' => 'Projekter', | ||||
| 	'Repair the garage door' => 'Reparere garasjedøren', | ||||
| 	'Fork and improve grocy' => 'Fork og forbedre grocy', | ||||
| 	'Find a solution for what to do when I forget the door keys' => 'Finne på løsning for hva jeg skal gjøre når jeg mister dørnøklene', | ||||
| 	'Sweets' => 'Godteri', | ||||
| 	'Bakery products' => 'Bakevarer', | ||||
| 	'Tinned food' => 'Boksemat', | ||||
| 	'Butchery products' => 'Kjøtt/ Ferskvare', | ||||
| 	'Vegetables/Fruits' => 'Frukt/ Grønnsaker', | ||||
| 	'Refrigerated products' => 'Frysedisk', | ||||
| 	'Coffee machine' => 'Kaffetrakter', | ||||
| 	'Dishwasher' => 'Oppvaskmaskin', | ||||
| 	'Liter' => 'Liter', | ||||
| 	'Liters' => 'Liter', | ||||
| 	'Bottle' => 'Flaske', | ||||
| 	'Bottles' => 'Flasker', | ||||
| 	'Milk' => 'Melk', | ||||
| 	'Chocolate sauce' => 'Sjokoladesaus', | ||||
| 	'Milliliters' => 'Milliliter', | ||||
| 	'Milliliter' => 'Milliliter', | ||||
| 	'Bottom' => 'Bunn', | ||||
| 	'Topping' => 'Topping', | ||||
| 	'French' => 'Fransk', | ||||
| 	'Turkish' => 'Turkish', | ||||
| 	'Spanish' => 'Spanish' | ||||
| ); | ||||
							
								
								
									
										8
									
								
								localization/no/stock_transaction_types.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								localization/no/stock_transaction_types.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'purchase' => 'Innkjøp', | ||||
| 	'consume' => 'Forbruke produkt', | ||||
| 	'inventory-correction' => 'Korreksjon av husholdningsantall ', | ||||
| 	'product-opened' => 'Produkt åpnet' | ||||
| ); | ||||
							
								
								
									
										349
									
								
								localization/no/strings.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										349
									
								
								localization/no/strings.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,349 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'Stock overview' => 'Husholdning', | ||||
| 	'#1 products expiring within the next #2 days' => '#1 produkt går ut på dato innen de neste #2 dagene', | ||||
| 	'#1 products are already expired' => '#1 produkt har gått ut på dato', | ||||
| 	'#1 products are below defined min. stock amount' => '#1 produkt under minimum husholdningsnivå', | ||||
| 	'Product' => 'Produkt', | ||||
| 	'Amount' => 'Antall', | ||||
| 	'Next best before date' => 'Kommende best før dato', | ||||
| 	'Logout' => 'Logg ut', | ||||
| 	'Chores overview' => 'Oversikt husarbeid', | ||||
| 	'Batteries overview' => 'Oversikt batteri', | ||||
| 	'Purchase' => 'Innkjøp', | ||||
| 	'Consume' => 'Forbruk produkt', | ||||
| 	'Inventory' => 'Endre husholdning', | ||||
| 	'Shopping list' => 'Handleliste', | ||||
| 	'Chore tracking' => 'Logge husarbeid', | ||||
| 	'Battery tracking' => 'Batteri ladesyklus', | ||||
| 	'Products' => 'Produkter', | ||||
| 	'Locations' => 'Lokasjoner', | ||||
| 	'Quantity units' => 'Forpakning', | ||||
| 	'Chores' => 'Husarbeid', | ||||
| 	'Batteries' => 'Batterier', | ||||
| 	'Chore' => 'Husarbeid', | ||||
| 	'Next estimated tracking' => 'Neste handling', | ||||
| 	'Last tracked' => 'Sist logget', | ||||
| 	'Battery' => 'Batteri', | ||||
| 	'Last charged' => 'Sist ladet', | ||||
| 	'Next planned charge cycle' => 'Neste planlagte ladesyklus', | ||||
| 	'Best before' => 'Best før', | ||||
| 	'OK' => 'OK', | ||||
| 	'Product overview' => 'Produkt oversikt', | ||||
| 	'Stock quantity unit' => 'Forpakningstype i husholdningen', | ||||
| 	'Stock amount' => 'Husholdning', | ||||
| 	'Last purchased' => 'Sist kjøpt', | ||||
| 	'Last used' => 'Sist brukt', | ||||
| 	'Spoiled' => 'Produkt har gått ut på dato', | ||||
| 	'Barcode lookup is disabled' => 'Strekkodesøk deaktivert', | ||||
| 	'will be added to the list of barcodes for the selected product on submit' => 'Blir lagt til liste over strekkoder når produkt blir lagt inn.', | ||||
| 	'New amount' => 'Nytt antall', | ||||
| 	'Note' => 'Info', | ||||
| 	'Tracked time' => 'Tid utført/ ladet', | ||||
| 	'Chore overview' => 'Oversikt husarbeid', | ||||
| 	'Tracked count' => 'Antall utførelser/ ladninger', | ||||
| 	'Battery overview' => 'Batteri oversikt', | ||||
| 	'Charge cycles count' => 'Antall ladesykluser', | ||||
| 	'Create shopping list item' => 'Opprett handelisteoppføring', | ||||
| 	'Edit shopping list item' => 'Endre på handlelistoppføring', | ||||
| 	'Save' => 'Lagre', | ||||
| 	'Add' => 'Legg til', | ||||
| 	'Name' => 'Navn', | ||||
| 	'Location' => 'Lokasjon', | ||||
| 	'Min. stock amount' => 'Minimumsantall for husholdningen', | ||||
| 	'QU purchase' => 'Forpakingsfaktor innkjøp', | ||||
| 	'QU stock' => 'Forpakingsfaktor husholdning', | ||||
| 	'QU factor' => 'Forpakingsfaktor', | ||||
| 	'Description' => 'Beskrivelse', | ||||
| 	'Create product' => 'Opprett produkt', | ||||
| 	'Barcode(s)' => 'Strekkode(r)', | ||||
| 	'Minimum stock amount' => 'Minimumsantall for husholdningen', | ||||
| 	'Default best before days' => 'Standard for antall dager best før', | ||||
| 	'Quantity unit purchase' => 'Forpakning kjøpt', | ||||
| 	'Quantity unit stock' => 'Forpakning husholdning', | ||||
| 	'Factor purchase to stock quantity unit' => 'Innkjøpsfaktor for forpakning', | ||||
| 	'Create location' => 'Opprett lokasjon', | ||||
| 	'Create quantity unit' => 'Opprett forpakning', | ||||
| 	'Period type' => 'Gjentakelse', | ||||
| 	'Period days' => 'Antall dager for gjentakelse', | ||||
| 	'Create chore' => 'Opprett husarbeid oppgave', | ||||
| 	'Used in' => 'Brukt', | ||||
| 	'Create battery' => 'Opprett batteri', | ||||
| 	'Edit battery' => 'Endre batteri', | ||||
| 	'Edit chore' => 'Endre husarbeid oppgave', | ||||
| 	'Edit quantity unit' => 'Endre forpakning', | ||||
| 	'Edit product' => 'Endre produkt', | ||||
| 	'Edit location' => 'Endre lokasjon', | ||||
| 	'Record data' => 'Logg handlinger', | ||||
| 	'Manage master data' => 'Administrer masterdata', | ||||
| 	'This will apply to added products' => 'Dette vil gjelde for produkt som blir lagt til', | ||||
| 	'never' => 'aldri', | ||||
| 	'Add products that are below defined min. stock amount' => 'Legg til produkt som er under minimumsnivå for husholdningen', | ||||
| 	'For purchases this amount of days will be added to today for the best before date suggestion' => 'Når innkjøp gjøres vil dette bli brukt som antall dager "best før"', | ||||
| 	'This means 1 #1 purchased will be converted into #2 #3 in stock' => 'Dette betyr at 1 #1 innkjøp vil bli omgjort til #2 #3 husholdning', | ||||
| 	'Login' => 'Logg inn', | ||||
| 	'Username' => 'Brukernavn', | ||||
| 	'Password' => 'Passord', | ||||
| 	'Invalid credentials, please try again' => 'Feil brukernavn og/eller passord, prøv igjen', | ||||
| 	'Are you sure to delete battery "#1"?' => 'Er du sikker du ønsker å slette batteri "#1"?', | ||||
| 	'Yes' => 'Ja', | ||||
| 	'No' => 'Nei', | ||||
| 	'Are you sure to delete chore "#1"?' => 'Er du sikker på du ønsker å slette husarbeid oppgave "#1"?', | ||||
| 	'"#1" could not be resolved to a product, how do you want to proceed?' => '"#1" kunne ikke bli tildelt et produkt, hvordan ønsker du å fortsette?', | ||||
| 	'Create or assign product' => 'Opprett eller tildel til et produkt', | ||||
| 	'Cancel' => 'Avbryt', | ||||
| 	'Add as new product' => 'Legg til som nytt produkt', | ||||
| 	'Add as barcode to existing product' => 'Legg til strekkode til allerede eksisterende produkt', | ||||
| 	'Add as new product and prefill barcode' => 'Legg til som nytt produkt med forhåndsfylt strekkode', | ||||
| 	'Are you sure to delete quantity unit "#1"?' => 'Er du sikker du ønsker å slette forpakning "#1"?', | ||||
| 	'Are you sure to delete product "#1"?' => 'Er du sikker du ønsker å slette produkt "#1"?', | ||||
| 	'Are you sure to delete location "#1"?' => 'Er du sikker du ønsker å slette lokasjon "#1"?', | ||||
| 	'Manage API keys' => 'Administrer API-Keys', | ||||
| 	'REST API & data model documentation' => 'REST-API & Datamodell Dokumentasjon', | ||||
| 	'API keys' => 'API-Keys', | ||||
| 	'Create new API key' => 'Opprett ny API-Key', | ||||
| 	'API key' => 'API-Key', | ||||
| 	'Expires' => 'Går ut', | ||||
| 	'Created' => 'Opprettet', | ||||
| 	'This product is not in stock' => 'Dette produktet er ikke i husholdningen', | ||||
| 	'This means #1 will be added to stock' => 'Dette betyr at #1 vil bli lagt til i husholdningen', | ||||
| 	'This means #1 will be removed from stock' => 'Dette betyr at #1 vil bli fjernet fra husholdningen', | ||||
| 	'This means it is estimated that a new execution of this chore is tracked #1 days after the last was tracked' => 'Dette betyr at det er estimert at den nye utførelsen av denne husarbeid oppgaven er logget #1 dag etter den sist var logget', | ||||
| 	'Removed #1 #2 of #3 from stock' => 'Fjernet #1 #2 #3 fra husholdningen', | ||||
| 	'About grocy' => 'Om Grocy', | ||||
| 	'Close' => 'Lukk', | ||||
| 	'#1 batteries are due to be charged within the next #2 days' => '#1 batteri må lades innen de #2 neste dagene', | ||||
| 	'#1 batteries are overdue to be charged' => '#1 batteri har gått over fristen for å bli ladet opp', | ||||
| 	'#1 chores are due to be done within the next #2 days' => '#1 husarbeids oppgaver skal gjøres inne de #2 neste dagene', | ||||
| 	'#1 chores are overdue to be done' => '#1 husarbeids oppgaver har gått over fristen for utførelse', | ||||
| 	'Released on' => 'Utgitt', | ||||
| 	'Consume #3 #1 of #2' => 'Forbruk #3 #1 av #2', | ||||
| 	'Added #1 #2 of #3 to stock' => '#1 #2 #3 lagt til i husholdningen', | ||||
| 	'Stock amount of #1 is now #2 #3' => 'Husholdning antall #1 er nå #2 #3', | ||||
| 	'Tracked execution of chore #1 on #2' => 'Utførte husarbeid oppgave "#1" den #2', | ||||
| 	'Tracked charge cycle of battery #1 on #2' => 'Ladet #1 den #2', | ||||
| 	'Consume all #1 which are currently in stock' => 'Forbruk alle #1 som er i husholdningen', | ||||
| 	'All' => 'Alle', | ||||
| 	'Track charge cycle of battery #1' => '#1 ladet', | ||||
| 	'Track execution of chore #1' => 'Utfør husarbeidsoppgave "#1"', | ||||
| 	'Filter by location' => 'Filtrér etter lokasjon', | ||||
| 	'Search' => 'Søk', | ||||
| 	'Not logged in' => 'Ikke logget inn', | ||||
| 	'You have to select a product' => 'Du må velge et produkt', | ||||
| 	'You have to select a chore' => 'Du må velge en husarbeids oppgave', | ||||
| 	'You have to select a battery' => 'Du må velge et batteri', | ||||
| 	'A name is required' => 'Vennligst fyll inn et navn', | ||||
| 	'A location is required' => 'En lokasjon kreves', | ||||
| 	'The amount cannot be lower than #1' => 'Antallet kan ikke være lavere enn #1', | ||||
| 	'This cannot be negative' => 'Dette kan ikke være negativt', | ||||
| 	'A quantity unit is required' => 'Forpakning antall/størrelse kreves', | ||||
| 	'A period type is required' => 'En periodetype kreves', | ||||
| 	'A best before date is required and must be later than today' => 'En best før dato kreves, denne må være senere enn i dag', | ||||
| 	'Settings' => 'Innstillinger', | ||||
| 	'This can only be before now' => 'Dette kan kun være før nå', | ||||
| 	'Calendar' => 'Kalender', | ||||
| 	'Recipes' => 'Oppskrifter', | ||||
| 	'Edit recipe' => 'Endre oppskrift', | ||||
| 	'New recipe' => 'Ny oppskrift', | ||||
| 	'Ingredients list' => 'Liste over ingredienser', | ||||
| 	'Add recipe ingredient' => 'Legg ingrediens til oppskrift', | ||||
| 	'Edit recipe ingredient' => 'Endre ingrediens i oppskrift', | ||||
| 	'Are you sure to delete recipe "#1"?' => 'Er du sikker du ønsker å slette oppskrift "#1"?', | ||||
| 	'Are you sure to delete recipe ingredient "#1"?' => 'Er du sikker du ønsker å slette ingrediens "#1" fra oppskriften?', | ||||
| 	'Are you sure to empty the shopping list?' => 'Er du sikker du ønsker å slette handlelisten?', | ||||
| 	'Clear list' => 'Slett handleliste', | ||||
| 	'Requirements fulfilled' => 'Har jeg alt jeg trenger for denne oppskriften?', | ||||
| 	'Put missing products on shopping list' => 'Legg manglende produkter til handlelisten', | ||||
| 	'Not enough in stock, #1 ingredients missing' => 'Ikke nok i husholdningen, #1 ingrediens(er) mangler', | ||||
| 	'Enough in stock' => 'Nok i husholdningen', | ||||
| 	'Not enough in stock, #1 ingredients missing but already on the shopping list' => 'Ikke nok i husholdningen, #1 ingrediens(er) mangler, men denne/disse er på handlelisten', | ||||
| 	'Expand to fullscreen' => 'Full skjerm', | ||||
| 	'Ingredients' => 'Ingredienser', | ||||
| 	'Preparation' => 'Forberedelse / Slik gjør du', | ||||
| 	'Recipe' => 'Oppskrift', | ||||
| 	'Not enough in stock, #1 missing, #2 already on shopping list' => 'Ikke nok i husholdningen, mangler #1, er #2 på handlelisten', | ||||
| 	'Show notes' => 'Vis notater', | ||||
| 	'Put missing amount on shopping list' => 'Legg manglende til handlelisten', | ||||
| 	'Are you sure to put all missing ingredients for recipe "#1" on the shopping list?' => 'Er du sikker du ønsker å legge alle manglende ingredienser for oppskrift "#1" i handlelisten?', | ||||
| 	'Added for recipe #1' => 'Lagt til fra oppskrift "#1"', | ||||
| 	'Manage users' => 'Administrer brukere', | ||||
| 	'User' => 'Bruker', | ||||
| 	'Users' => 'Brukere', | ||||
| 	'Are you sure to delete user "#1"?' => 'Er du sikker på du ønsker å slette bruker, "#1"?', | ||||
| 	'Create user' => 'Legg til bruker', | ||||
| 	'Edit user' => 'Endre på bruker', | ||||
| 	'First name' => 'Fornavn', | ||||
| 	'Last name' => 'Etternavn', | ||||
| 	'A username is required' => 'Et brukernavn er nødvendig', | ||||
| 	'Confirm password' => 'Bekreft passord', | ||||
| 	'Passwords do not match' => 'Passord er ikke like', | ||||
| 	'Change password' => 'Endre passord', | ||||
| 	'Done by' => 'Utført av', | ||||
| 	'Last done by' => 'Sist utført av', | ||||
| 	'Unknown' => 'Ukjent', | ||||
| 	'Filter by chore' => 'Filtrér husarbeid', | ||||
| 	'Chores journal' => 'Statistikk husarbeid', | ||||
| 	'0 means suggestions for the next charge cycle are disabled' => '0 betyr neste ladesyklus er avslått', | ||||
| 	'Charge cycle interval (days)' => 'Ladesyklysintervall (dager)', | ||||
| 	'Last price' => 'Siste pris', | ||||
| 	'Price history' => 'Prishistorikk', | ||||
| 	'No price history available' => 'Ingen prishistorikk tilgjengelig', | ||||
| 	'Price' => 'Pris', | ||||
| 	'in #1 per purchase quantity unit' => 'I #1 per kjøpt forpakning ', | ||||
| 	'The price cannot be lower than #1' => 'Prisen kan ikke være lavere enn #1', | ||||
| 	'#1 product expires within the next #2 days' => '#1 produkt går ut på dato innen de #2 neste dagene', | ||||
| 	'#1 product is already expired' => '#1 produkt er allerede gått ut på dato', | ||||
| 	'#1 product is below defined min. stock amount' => '#1 produkt er under minimums husholdningsnivå', | ||||
| 	'Unit' => 'Enhet', | ||||
| 	'Units' => 'Enheter', | ||||
| 	'#1 chore is due to be done within the next #2 days' => '#1 husarbeid oppgave skal gjøres inne de #2 neste dagene', | ||||
| 	'#1 chore is overdue to be done' => '#1 husarbeid oppgave har gått over fristen for utførelse', | ||||
| 	'#1 battery is due to be charged within the next #2 days' => '#1 Batteri må lades innen #2 dager', | ||||
| 	'#1 battery is overdue to be charged' => '#1 Batteri har gått over fristen for å lades', | ||||
| 	'#1 unit was automatically added and will apply in addition to the amount entered here' => '#1 enhet ble automatisk lagt til i tillegg til hva som blir skrevet inn her', | ||||
| 	'in singular form' => 'I entall', | ||||
| 	'in plural form' => 'I flertall', | ||||
| 	'Never expires' => 'Går ikke ut på dato', | ||||
| 	'This cannot be lower than #1' => 'Dette kan ikke være lavere enn #1', | ||||
| 	'-1 means that this product never expires' => 'Ved å skrive -1 vil produktet ikke gå ut på dato', | ||||
| 	'Quantity unit' => 'Forpakning', | ||||
| 	'Only check if a single unit is in stock (a different quantity can then be used above)' => 'Ønsker du å bruke mindre/større enn normal forpakningsstørrelse?', | ||||
| 	'Are you sure to consume all ingredients needed by recipe "#1" (ingredients marked with "check only if a single unit is in stock" will be ignored)?' => 'Er du sikker du ønsker å forbruke alle ingredienser for "#1" oppskriften? (Ingredienser merket med "Ønsker du å bruke mindre/større enn normal forpakningsstørrelse??" blir ignorert', | ||||
| 	'Removed all ingredients of recipe "#1" from stock' => 'Fjern alle ingredienser for "#1" oppskriften fra husholdningen.', | ||||
| 	'Consume all ingredients needed by this recipe' => 'Forbruk alle ingredienser for denne oppskriften', | ||||
| 	'Click to show technical details' => 'Klikk for å vise teknisk informasjon', | ||||
| 	'Error while saving, probably this item already exists' => 'Kunne ikke lagre, produkt er lagt til fra før', | ||||
| 	'Error details' => 'Detaljer om feil', | ||||
| 	'Tasks' => 'Oppgaver', | ||||
| 	'Show done tasks' => 'Vis ferdige oppgaver', | ||||
| 	'Task' => 'Oppgave', | ||||
| 	'Due' => 'Forfall', | ||||
| 	'Assigned to' => 'Tildelt', | ||||
| 	'Mark task "#1" as completed' => 'Merk oppgave "#1" som ferdig', | ||||
| 	'Uncategorized' => 'Mangler kategori', | ||||
| 	'Task categories' => 'Oppgave kategorier', | ||||
| 	'Create task' => 'Opprett en oppgave', | ||||
| 	'A due date is required' => 'En forfallsdato kreves', | ||||
| 	'Category' => 'Kategori', | ||||
| 	'Edit task' => 'Endre oppgave', | ||||
| 	'Are you sure to delete task "#1"?' => 'Er du sikker du ønsker slette oppgave "#1"?', | ||||
| 	'#1 task is due to be done within the next #2 days' => '#1 oppgave har utførelse forfall innen de neste #2 dagene', | ||||
| 	'#1 tasks are due to be done within the next #2 days' => '#1 oppgaver har utførelse forfall innen de neste #2 dagene', | ||||
| 	'#1 task is overdue to be done' => '#1 oppgave har forfalt utførelse dato', | ||||
| 	'#1 tasks are overdue to be done' => '#1 oppgaver har forfalt utførelse dato', | ||||
| 	'Edit task category' => 'Endre oppgave kategori', | ||||
| 	'Create task category' => 'Opprett oppgave kategori', | ||||
| 	'Product groups' => 'Produktgrupper', | ||||
| 	'Ungrouped' => 'Mangler gruppe', | ||||
| 	'Create product group' => 'Opprett produkt gruppe', | ||||
| 	'Edit product group' => 'Endre produkt gruppe', | ||||
| 	'Product group' => 'Produktgruppe', | ||||
| 	'Are you sure to delete product group "#1"?' => 'Er du sikker du ønsker å slette produktgruppe "#1"?', | ||||
| 	'Stay logged in permanently' => 'Alltid være innlogget', | ||||
| 	'When not set, you will get logged out at latest after 30 days' => 'Når den ikke er satt vil du bli logget ut etter 30 dager', | ||||
| 	'Filter by status' => 'Filtrér etter status', | ||||
| 	'Below min. stock amount' => 'Under under minimum husholdningsnivå', | ||||
| 	'Expiring soon' => 'Går snart ut på dato', | ||||
| 	'Already expired' => 'Utgått på dato', | ||||
| 	'Due soon' => 'Forfaller snart', | ||||
| 	'Overdue' => 'Forfalt', | ||||
| 	'View settings' => 'Se instillinger', | ||||
| 	'Auto reload on external changes' => 'Automatisk fornying ved ekstern endring', | ||||
| 	'Enable night mode' => 'Aktiver nattmodus', | ||||
| 	'Auto enable in time range' => 'Automatisk aktivering i tidsrommet', | ||||
| 	'From' => 'Fra', | ||||
| 	'in format' => 'format', | ||||
| 	'To' => 'Til', | ||||
| 	'Time range goes over midnight' => 'Tidsrommet går over midnatt', | ||||
| 	'Product picture' => 'Produktbilde', | ||||
| 	'No file selected' => 'Produktbilde ikke valgt', | ||||
| 	'If you don\'t select a file, the current picture will not be altered' => 'Hvis du ikke velger et bilde, vil nåværende produktbilde bli værende', | ||||
| 	'Delete' => 'Slett', | ||||
| 	'The current picture will be deleted when you save the product' => 'Nåværende produktbilde vil bli slettet når du lagrer produktet', | ||||
| 	'Select file' => 'Velg produktbilde', | ||||
| 	'Image of product #1' => 'Bilde av produkt #1', | ||||
| 	'This product cannot be deleted because it is in stock, please remove the stock amount first.' => 'Dette produktet kan ikke slettes fordi det er gjenværende produkter i husholdningen', | ||||
| 	'Delete not possible' => 'Ikke mulig å slette', | ||||
| 	'Equipment' => 'Instruksjonmanualer', | ||||
| 	'Instruction manual' => 'Instruksjonsmanual', | ||||
| 	'The selected equipment has no instruction manual' => 'Merket utstyr har ingen instruksjonsmanual', | ||||
| 	'Notes' => 'Notater', | ||||
| 	'Edit equipment' => 'Endre instruksjonmanualer for utstyr', | ||||
| 	'Create equipment' => 'Opprett instruksjonmanualer for utstyr', | ||||
| 	'If you don\'t select a file, the current instruction manual will not be altered' => 'Hvis du ikke velger en instruksjonsmanual, vil nåværende instruksjonsmanual ikke bli endret', | ||||
| 	'No instruction manual available' => 'Ingen instruksjonsmanual tilgjengelig', | ||||
| 	'The current instruction manual will be deleted when you save the equipment' => 'Nåværende instruksjonsmanual vil bli slettet når du lagrer utstyret', | ||||
| 	'No picture available' => 'Ingen bilde tilgjengelig', | ||||
| 	'Filter by product group' => 'Filtrér etter produktgruppe', | ||||
| 	'Presets for new products' => 'Standard for nye produkter', | ||||
| 	'Included recipes' => 'Inkludert oppskrift', | ||||
| 	'A recipe is required' => 'En oppskrift kreves', | ||||
| 	'Add included recipe' => 'Legg til inkludert oppskrift', | ||||
| 	'Edit included recipe' => 'Endre inkludert oppskrift', | ||||
| 	'Group' => 'Gruppe', | ||||
| 	'This will be used as a headline to group ingredients together' => 'Dette vil bli brukt som overskrift for gruppering av ingredienser', | ||||
| 	'Journal' => 'Logg', | ||||
| 	'Stock journal' => 'Husholdningslogg', | ||||
| 	'Filter by product' => 'Filtrér etter produkt', | ||||
| 	'Booking time' => 'Tid logget', | ||||
| 	'Booking type' => 'Booking type', | ||||
| 	'Undo booking' => 'Angre booking', | ||||
| 	'Undone on' => 'Angret den', | ||||
| 	'Batteries journal' => 'Batterilogg', | ||||
| 	'Filter by battery' => 'Filtrér etter batteri', | ||||
| 	'Undo charge cycle' => 'Angre ladesyklus', | ||||
| 	'Undo chore execution' => 'Fjerne utførelse av husarbeidsoppgave', | ||||
| 	'Chore execution successfully undone' => 'Husarbeid fjernet', | ||||
| 	'Undo' => 'Angre', | ||||
| 	'Booking successfully undone' => 'Booking fjernet', | ||||
| 	'Charge cycle successfully undone' => 'Ladesyklus fjernet', | ||||
| 	'This cannot be negative and must be an integral number' => 'Tallet kan ikke være negativ og må være et helt tall', | ||||
| 	'Disable stock fulfillment checking for this ingredient' => 'Ikke bruk husholdningsjekk for denne ingrediensen ', | ||||
| 	'Add all list items to stock' => 'Legg alle produktene i listen til husholdningen', | ||||
| 	'Add #3 #1 of #2 to stock' => 'Legg til #3 #1 av #2 til husholdningen', | ||||
| 	'Adding shopping list item #1 of #2' => 'Legger til produkt #1 av #2 fra handlelisten', | ||||
| 	'Use a specific stock item' => 'Velg et bestemt produkt', | ||||
| 	'The first item in this list would be picked by the default rule which is "First expiring first, then first in first out"' => 'Første produkt på listen vil bli konsumert først i henhold til standard regelen. "Går ut på dato først. Deretter først inn, først ut".', | ||||
| 	'Mark #3 #1 of #2 as open' => 'Merk #3 #1 av #2 som åpnet', | ||||
| 	'When a product was marked as opened, the best before date will be replaced by today + this amount of days (a value of 0 disables this)' => 'Når et produkt blir merket som åpnet endres best før datoen fra i dag + dette antallet av dager. (Et 0 vil deaktivere dette)', | ||||
| 	'Default best before days after opened' => 'Standard best før dager etter åpnet', | ||||
| 	'Marked #1 #2 of #3 as opened' => 'Merket #1 #2 av #3 som åpnet', | ||||
| 	'Mark as opened' => 'Merk som åpnet', | ||||
| 	'Expires on #1; Bought on #2' => 'Går ut på dato #1; Kjøpt #2', | ||||
| 	'Not opened' => 'Ikke åpnet', | ||||
| 	'Opened' => 'Åpnet', | ||||
| 	'Mark #3 #1 of #2 as open' => 'Merk #3 #1 av #2 som åpnet', | ||||
| 	'#1 opened' => '#1 åpnet', | ||||
| 	'Product expires' => 'Produkt går ut på dato', | ||||
| 	'Task due' => 'Tidsfrist for oppgave', | ||||
| 	'Chore due' => 'Tidsfrist for husarbeid', | ||||
| 	'Battery charge cycle due' => 'Batteri må lades', | ||||
| 	'Show clock in header' => 'Vis klokken på toppen av siden', | ||||
| 	'Stock settings' => 'Husholdningsinnstillinger', | ||||
| 	'Shopping list to stock workflow' => 'Arbeidsflyt fra handleliste til husholding', | ||||
| 	'Automatically do the booking using the last price and the amount of the shopping list item, if the product has "Default best before days" set' => 'Legg produkter automatisk til fra handlelisten. Dette vil bruke sist innkjøpspris og forutsetter at "Standard for antall dager best før" er satt', | ||||
| 	'Skip' => 'Hopp over', | ||||
| 	'Servings' => 'Servings', | ||||
| 	'Costs' => 'Costs', | ||||
| 	'Based on the prices of the last purchase per product' => 'Based on the prices of the last purchase per product', | ||||
| 	'The ingredients listed here result in this amount of servings' => 'The ingredients listed here result in this amount of servings', | ||||
| 	'Do not check against the shopping list when adding missing items to it' => 'Do not check against the shopping list when adding missing items to it', | ||||
| 	'By default the amount to be added to the shopping list is "needed amount - stock amount - shopping list amount" - when this is enabled, it is only checked against the stock amount, not against what is already on the shopping list' => 'By default the amount to be added to the shopping list is "needed amount - stock amount - shopping list amount" - when this is enabled, it is only checked against the stock amount, not against what is already on the shopping list', | ||||
| 	'Picture' => 'Picture', | ||||
| 	'Uncheck ingredients to not put them on the shopping list' => 'Uncheck ingredients to not put them on the shopping list', | ||||
| 	'This is for statistical purposes only' => 'This is for statistical purposes only', | ||||
| 	'You have to select a recipe' => 'You have to select a recipe', | ||||
| 	'Key type' => 'Key type', | ||||
| 	'Share/Integrate calendar (iCal)' => 'Share/Integrate calendar (iCal)', | ||||
| 	'Use the following (public) URL to share or integrate the calendar in iCal format' => 'Use the following (public) URL to share or integrate the calendar in iCal format', | ||||
| 	'Allow partial units in stock' => 'Allow partial units in stock', | ||||
| 	'Enable tare weight handling' => 'Enable tare weight handling', | ||||
| 	'This is useful e.g. for flour in jars - on purchase/consume/inventory you always weigh the whole jar, the amount to be posted is then automatically calculated based on what is in stock and the tare weight defined below' => 'This is useful e.g. for flour in jars - on purchase/consume/inventory you always weigh the whole jar, the amount to be posted is then automatically calculated based on what is in stock and the tare weight defined below', | ||||
| 	'Tare weight' => 'Tare weight', | ||||
| 	'Tare weight handling enabled - please weigh the whole container, the amount to be posted will be automatically calculcated' => 'Tare weight handling enabled - please weigh the whole container, the amount to be posted will be automatically calculcated', | ||||
| 	'You have to select a location' => 'You have to select a location', | ||||
| 	'List' => 'List', | ||||
| 	'Gallery' => 'Gallery', | ||||
| 	'The current picture will be deleted when you save the recipe' => 'The current picture will be deleted when you save the recipe' | ||||
| ); | ||||
							
								
								
									
										6
									
								
								localization/pl/chore_types.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								localization/pl/chore_types.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'manually' => 'Manually', | ||||
| 	'dynamic-regular' => 'Dynamic regular' | ||||
| ); | ||||
							
								
								
									
										10
									
								
								localization/pl/component_translations.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								localization/pl/component_translations.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'timeago_locale' => 'en', | ||||
| 	'timeago_nan' => 'NaN years ago', | ||||
| 	'moment_locale' => 'x', | ||||
| 	'datatables_localization' => '{"sEmptyTable":"No data available in table","sInfo":"Showing _START_ to _END_ of _TOTAL_ entries","sInfoEmpty":"Showing 0 to 0 of 0 entries","sInfoFiltered":"(filtered from _MAX_ total entries)","sInfoPostFix":"","sInfoThousands":",","sLengthMenu":"Show _MENU_ entries","sLoadingRecords":"Loading...","sProcessing":"Processing...","sSearch":"Search:","sZeroRecords":"No matching records found","oPaginate":{"sFirst":"First","sLast":"Last","sNext":"Next","sPrevious":"Previous"},"oAria":{"sSortAscending":": activate to sort column ascending","sSortDescending":": activate to sort column descending"}}', | ||||
| 	'summernote_locale' => 'x', | ||||
| 	'fullcalendar_locale' => 'x' | ||||
| ); | ||||
							
								
								
									
										89
									
								
								localization/pl/demo_data.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								localization/pl/demo_data.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,89 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'Cookies' => 'Ciastka', | ||||
| 	'Chocolate' => 'Czekolada', | ||||
| 	'Pantry' => 'Pantry', | ||||
| 	'Candy cupboard' => 'Candy cupboard', | ||||
| 	'Tinned food cupboard' => 'Tinned food cupboard', | ||||
| 	'Fridge' => 'Lodówka', | ||||
| 	'Piece' => 'Piece', | ||||
| 	'Pieces' => 'Pieces', | ||||
| 	'Pack' => 'Pack', | ||||
| 	'Packs' => 'Packs', | ||||
| 	'Glass' => 'Szklanka', | ||||
| 	'Glasses' => 'Szklanki', | ||||
| 	'Tin' => 'Tin', | ||||
| 	'Tins' => 'Tins', | ||||
| 	'Can' => 'Can', | ||||
| 	'Cans' => 'Cans', | ||||
| 	'Bunch' => 'Bunch', | ||||
| 	'Bunches' => 'Bunches', | ||||
| 	'Gummy bears' => 'Gummy bears', | ||||
| 	'Crisps' => 'Crisps', | ||||
| 	'Eggs' => 'Eggs', | ||||
| 	'Noodles' => 'Noodles', | ||||
| 	'Pickles' => 'Pickles', | ||||
| 	'Gulash soup' => 'Gulash soup', | ||||
| 	'Yogurt' => 'Yogurt', | ||||
| 	'Cheese' => 'Cheese', | ||||
| 	'Cold cuts' => 'Cold cuts', | ||||
| 	'Paprika' => 'Paprika', | ||||
| 	'Cucumber' => 'Cucumber', | ||||
| 	'Radish' => 'Radish', | ||||
| 	'Tomato' => 'Tomato', | ||||
| 	'Changed towels in the bathroom' => 'Changed towels in the bathroom', | ||||
| 	'Cleaned the kitchen floor' => 'Cleaned the kitchen floor', | ||||
| 	'Warranty ends' => 'Warranty ends', | ||||
| 	'TV remote control' => 'TV remote control', | ||||
| 	'Alarm clock' => 'Alarm clock', | ||||
| 	'Heat remote control' => 'Heat remote control', | ||||
| 	'Lawn mowed in the garden' => 'Lawn mowed in the garden', | ||||
| 	'Some good snacks' => 'Some good snacks', | ||||
| 	'Pizza dough' => 'Pizza dough', | ||||
| 	'Sieved tomatoes' => 'Sieved tomatoes', | ||||
| 	'Salami' => 'Salami', | ||||
| 	'Toast' => 'Toast', | ||||
| 	'Minced meat' => 'Minced meat', | ||||
| 	'Pizza' => 'Pizza', | ||||
| 	'Spaghetti bolognese' => 'Spaghetti bolognese', | ||||
| 	'Sandwiches' => 'Sandwiches', | ||||
| 	'English' => 'English', | ||||
| 	'German' => 'German', | ||||
| 	'Italian' => 'Italian', | ||||
| 	'Demo in different language' => 'Demo in different language', | ||||
| 	'This is the note content of the recipe ingredient' => 'This is the note content of the recipe ingredient', | ||||
| 	'Demo User' => 'Demo User', | ||||
| 	'Gram' => 'Gram', | ||||
| 	'Grams' => 'Grams', | ||||
| 	'Flour' => 'Flour', | ||||
| 	'Pancakes' => 'Pancakes', | ||||
| 	'Sugar' => 'Sugar', | ||||
| 	'Home' => 'Home', | ||||
| 	'Life' => 'Life', | ||||
| 	'Projects' => 'Projects', | ||||
| 	'Repair the garage door' => 'Repair the garage door', | ||||
| 	'Fork and improve grocy' => 'Fork and improve grocy', | ||||
| 	'Find a solution for what to do when I forget the door keys' => 'Find a solution for what to do when I forget the door keys', | ||||
| 	'Sweets' => 'Sweets', | ||||
| 	'Bakery products' => 'Bakery products', | ||||
| 	'Tinned food' => 'Tinned food', | ||||
| 	'Butchery products' => 'Butchery products', | ||||
| 	'Vegetables/Fruits' => 'Vegetables/Fruits', | ||||
| 	'Refrigerated products' => 'Refrigerated products', | ||||
| 	'Coffee machine' => 'Coffee machine', | ||||
| 	'Dishwasher' => 'Dishwasher', | ||||
| 	'Liter' => 'Liter', | ||||
| 	'Liters' => 'Liters', | ||||
| 	'Bottle' => 'Bottle', | ||||
| 	'Bottles' => 'Bottles', | ||||
| 	'Milk' => 'Milk', | ||||
| 	'Chocolate sauce' => 'Chocolate sauce', | ||||
| 	'Milliliters' => 'Milliliters', | ||||
| 	'Milliliter' => 'Milliliter', | ||||
| 	'Bottom' => 'Bottom', | ||||
| 	'Topping' => 'Topping', | ||||
| 	'French' => 'French', | ||||
| 	'Turkish' => 'Turkish', | ||||
| 	'Spanish' => 'Spanish' | ||||
| ); | ||||
							
								
								
									
										8
									
								
								localization/pl/stock_transaction_types.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								localization/pl/stock_transaction_types.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'purchase' => 'Zakup', | ||||
| 	'consume' => 'Konsumpcja', | ||||
| 	'inventory-correction' => 'Korekta zapasów', | ||||
| 	'product-opened' => 'Produkt otwarty' | ||||
| ); | ||||
							
								
								
									
										348
									
								
								localization/pl/strings.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										348
									
								
								localization/pl/strings.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,348 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'Stock overview' => 'Przegląd magazynu', | ||||
| 	'#1 products expiring within the next #2 days' => '#1 produktów będzie przeterminowanych w ciągu #2 dni', | ||||
| 	'#1 products are already expired' => '#1 przeterminowanych produktów', | ||||
| 	'#1 products are below defined min. stock amount' => '#1 produktów są poniżej zdefiniowanej minimalnej ilości w magazynie', | ||||
| 	'Product' => 'Produkt', | ||||
| 	'Amount' => 'Ilość', | ||||
| 	'Next best before date' => 'Następna data przydatności do spożycia ', | ||||
| 	'Logout' => 'Wyloguj', | ||||
| 	'Chores overview' => 'Przegląd obowiązków domowych', | ||||
| 	'Batteries overview' => 'Przegląd baterii', | ||||
| 	'Purchase' => 'Zakup', | ||||
| 	'Consume' => 'Skonsumuj', | ||||
| 	'Inventory' => 'Spis produktów', | ||||
| 	'Shopping list' => 'Lista zakupów', | ||||
| 	'Chore tracking' => 'Śledzenie stanu obowiązków domowych', | ||||
| 	'Battery tracking' => 'Śledzenie stanu baterii', | ||||
| 	'Products' => 'Produkty', | ||||
| 	'Locations' => 'Miejsca', | ||||
| 	'Quantity units' => 'Jednostki ilości', | ||||
| 	'Chores' => 'Obowiązki domowe', | ||||
| 	'Batteries' => 'Baterie', | ||||
| 	'Chore' => 'Obowiązek domowy', | ||||
| 	'Next estimated tracking' => 'Następne oszacowane śledzenie', | ||||
| 	'Last tracked' => 'Ostatnio śledzono', | ||||
| 	'Battery' => 'Bateria', | ||||
| 	'Last charged' => 'Ostatnio ładowane', | ||||
| 	'Next planned charge cycle' => 'Następny planowany cykl ładowania', | ||||
| 	'Best before' => 'Najlepiej spożyć przed', | ||||
| 	'OK' => 'OK', | ||||
| 	'Product overview' => 'Przegląd produktów', | ||||
| 	'Stock quantity unit' => 'Jednostka ilości w magazynie', | ||||
| 	'Stock amount' => 'Ilość w magazynie', | ||||
| 	'Last purchased' => 'Ostatnio kupione', | ||||
| 	'Last used' => 'Ostatnio użyte', | ||||
| 	'Spoiled' => 'Zepsute', | ||||
| 	'Barcode lookup is disabled' => 'Czytnik kodów kreskowych jest wyłączony', | ||||
| 	'will be added to the list of barcodes for the selected product on submit' => 'po przesłaniu zostanie dodany do listy kodów kreskowych dla podanego produktu', | ||||
| 	'New amount' => 'Nowa ilość', | ||||
| 	'Note' => 'Notatka', | ||||
| 	'Tracked time' => 'Śledzony czas', | ||||
| 	'Chore overview' => 'Przegląd obowiązków domowych', | ||||
| 	'Tracked count' => 'Śledzona ilość', | ||||
| 	'Battery overview' => 'Przegląd baterii', | ||||
| 	'Charge cycles count' => 'Ilość cykli ładowania', | ||||
| 	'Create shopping list item' => 'Utwórz przedmiot na liście zakupów', | ||||
| 	'Edit shopping list item' => 'Edytuj przedmiot na liście zakupów', | ||||
| 	'Save' => 'Zapisz', | ||||
| 	'Add' => 'Dodaj', | ||||
| 	'Name' => 'Nazwa', | ||||
| 	'Location' => 'Miejsce', | ||||
| 	'Min. stock amount' => 'Minimalna ilość', | ||||
| 	'QU purchase' => 'QU purchase', | ||||
| 	'QU stock' => 'QU stock', | ||||
| 	'QU factor' => 'QU factor', | ||||
| 	'Description' => 'Opis', | ||||
| 	'Create product' => 'Utwórz produkt', | ||||
| 	'Barcode(s)' => 'Kod(y) kreskowe', | ||||
| 	'Minimum stock amount' => 'Minimalna ilość', | ||||
| 	'Default best before days' => 'Domyślna ilość dni przydatności do spożycia ', | ||||
| 	'Quantity unit purchase' => 'Quantity unit purchase', | ||||
| 	'Quantity unit stock' => 'Quantity unit stock', | ||||
| 	'Factor purchase to stock quantity unit' => 'Factor purchase to stock quantity unit', | ||||
| 	'Create location' => 'Utwórz miejsce', | ||||
| 	'Create quantity unit' => 'Utwórz jednostkę miary', | ||||
| 	'Period type' => 'Typ okresu', | ||||
| 	'Period days' => 'Dni okresu', | ||||
| 	'Create chore' => 'Utwórz obowiązek domowy', | ||||
| 	'Used in' => 'Użyte w', | ||||
| 	'Create battery' => 'Utwórz baterię', | ||||
| 	'Edit battery' => 'Edytuj baterię', | ||||
| 	'Edit chore' => 'Edytuj obowiązek domowy', | ||||
| 	'Edit quantity unit' => 'Edit quantity unit', | ||||
| 	'Edit product' => 'Edytuj produkt', | ||||
| 	'Edit location' => 'Edytuj lokalizację', | ||||
| 	'Record data' => 'Record data', | ||||
| 	'Manage master data' => 'Manage master data', | ||||
| 	'This will apply to added products' => 'This will apply to added products', | ||||
| 	'never' => 'nigdy', | ||||
| 	'Add products that are below defined min. stock amount' => 'Dodaj produkty poniżej zdefiniowanej minimalnej ilości w magazynie', | ||||
| 	'For purchases this amount of days will be added to today for the best before date suggestion' => 'For purchases this amount of days will be added to today for the best before date suggestion', | ||||
| 	'This means 1 #1 purchased will be converted into #2 #3 in stock' => 'This means 1 #1 purchased will be converted into #2 #3 in stock', | ||||
| 	'Login' => 'Zaloguj', | ||||
| 	'Username' => 'Nazwa użytkownika', | ||||
| 	'Password' => 'Hasło', | ||||
| 	'Invalid credentials, please try again' => 'Nieprawidłowe dane logowania, spróbuj jeszcze raz', | ||||
| 	'Are you sure to delete battery "#1"?' => 'Czy na pewno chcesz usunąć baterię "#1"?', | ||||
| 	'Yes' => 'Tak', | ||||
| 	'No' => 'Nie', | ||||
| 	'Are you sure to delete chore "#1"?' => 'Czy na pewno chcesz usunąć obowiązek domowy "#1"?', | ||||
| 	'"#1" could not be resolved to a product, how do you want to proceed?' => '"#1" could not be resolved to a product, how do you want to proceed?', | ||||
| 	'Create or assign product' => 'Utwórz lub przydziel produkt', | ||||
| 	'Cancel' => 'Anuluj', | ||||
| 	'Add as new product' => 'Dodaj jako nowy produkt', | ||||
| 	'Add as barcode to existing product' => 'Dodaj jako kod kreskowy do istniejącego produktu', | ||||
| 	'Add as new product and prefill barcode' => 'Dodaj jako nowy produkt i dodaj kod kreskowy', | ||||
| 	'Are you sure to delete quantity unit "#1"?' => 'Are you sure to delete quantity unit "#1"?', | ||||
| 	'Are you sure to delete product "#1"?' => 'Are you sure to delete product "#1"?', | ||||
| 	'Are you sure to delete location "#1"?' => 'Are you sure to delete location "#1"?', | ||||
| 	'Manage API keys' => 'Zarządzaj kluczami API', | ||||
| 	'REST API & data model documentation' => 'REST API & dokumentacja modelu danych', | ||||
| 	'API keys' => 'Klucze API', | ||||
| 	'Create new API key' => 'Utwórz nowy klucz API', | ||||
| 	'API key' => 'Klucz API', | ||||
| 	'Expires' => 'Traci ważność', | ||||
| 	'Created' => 'Utworzono', | ||||
| 	'This product is not in stock' => 'Nie ma tego produktu na stanie', | ||||
| 	'This means #1 will be added to stock' => ' To znaczy że #1 zostanie dodany do magazynu', | ||||
| 	'This means #1 will be removed from stock' => 'To znaczy że #1 zostanie usunięty z magazynu', | ||||
| 	'This means it is estimated that a new execution of this chore is tracked #1 days after the last was tracked' => 'This means it is estimated that a new execution of this chore is tracked #1 days after the last was tracked', | ||||
| 	'Removed #1 #2 of #3 from stock' => 'Removed #1 #2 of #3 from stock', | ||||
| 	'About grocy' => 'O grocy', | ||||
| 	'Close' => 'Zamknij', | ||||
| 	'#1 batteries are due to be charged within the next #2 days' => '#1 batteries are due to be charged within the next #2 days', | ||||
| 	'#1 batteries are overdue to be charged' => '#1 batteries are overdue to be charged', | ||||
| 	'#1 chores are due to be done within the next #2 days' => '#1 chores are due to be done within the next #2 days', | ||||
| 	'#1 chores are overdue to be done' => '#1 chores are overdue to be done', | ||||
| 	'Released on' => 'Released on', | ||||
| 	'Consume #3 #1 of #2' => 'Consume #3 #1 of #2', | ||||
| 	'Added #1 #2 of #3 to stock' => 'Added #1 #2 of #3 to stock', | ||||
| 	'Stock amount of #1 is now #2 #3' => 'Stock amount of #1 is now #2 #3', | ||||
| 	'Tracked execution of chore #1 on #2' => 'Tracked execution of chore #1 on #2', | ||||
| 	'Tracked charge cycle of battery #1 on #2' => 'Tracked charge cycle of battery #1 on #2', | ||||
| 	'Consume all #1 which are currently in stock' => 'Consume all #1 which are currently in stock', | ||||
| 	'All' => 'Wszystko', | ||||
| 	'Track charge cycle of battery #1' => 'Track charge cycle of battery #1', | ||||
| 	'Track execution of chore #1' => 'Track execution of chore #1', | ||||
| 	'Filter by location' => 'Filter by location', | ||||
| 	'Search' => 'Szukaj', | ||||
| 	'Not logged in' => 'Not logged in', | ||||
| 	'You have to select a product' => 'Musisz wybrać produkt', | ||||
| 	'You have to select a chore' => 'Musisz wybrać obowiązek domowy', | ||||
| 	'You have to select a battery' => 'Musisz wybrać baterię', | ||||
| 	'A name is required' => 'Nazwa jest wymagana', | ||||
| 	'A location is required' => 'Lokalizacja jest wymagana', | ||||
| 	'The amount cannot be lower than #1' => 'Wartość nie może być mniejsza niż #1', | ||||
| 	'This cannot be negative' => 'This cannot be negative', | ||||
| 	'A quantity unit is required' => 'A quantity unit is required', | ||||
| 	'A period type is required' => 'A period type is required', | ||||
| 	'A best before date is required and must be later than today' => 'A best before date is required and must be later than today', | ||||
| 	'Settings' => 'Ustawienia', | ||||
| 	'This can only be before now' => 'This can only be before now', | ||||
| 	'Calendar' => 'Kalendarz', | ||||
| 	'Recipes' => 'Przepisy', | ||||
| 	'Edit recipe' => 'Edytuj przepis', | ||||
| 	'New recipe' => 'Nowy przepis', | ||||
| 	'Ingredients list' => 'Lista składników', | ||||
| 	'Add recipe ingredient' => 'Dodaj składnik przepisu', | ||||
| 	'Edit recipe ingredient' => 'Edytuj składnik przepisu', | ||||
| 	'Are you sure to delete recipe "#1"?' => 'Czy na pewno chcesz usunąć przepis "#1"?', | ||||
| 	'Are you sure to delete recipe ingredient "#1"?' => 'Czy na pewno chcesz usunąć składnik przepisu "#1"?', | ||||
| 	'Are you sure to empty the shopping list?' => 'Czy na pewno chcesz wyczyścić listę zakupów?', | ||||
| 	'Clear list' => 'Wyczyść listę', | ||||
| 	'Requirements fulfilled' => 'Requirements fulfilled', | ||||
| 	'Put missing products on shopping list' => 'Put missing products on shopping list', | ||||
| 	'Not enough in stock, #1 ingredients missing' => 'Not enough in stock, #1 ingredients missing', | ||||
| 	'Enough in stock' => 'Enough in stock', | ||||
| 	'Not enough in stock, #1 ingredients missing but already on the shopping list' => 'Not enough in stock, #1 ingredients missing but already on the shopping list', | ||||
| 	'Expand to fullscreen' => 'Pokaż w pełnym ekranie', | ||||
| 	'Ingredients' => 'Składniki', | ||||
| 	'Preparation' => 'Przygotowanie', | ||||
| 	'Recipe' => 'Przepis', | ||||
| 	'Not enough in stock, #1 missing, #2 already on shopping list' => 'Not enough in stock, #1 missing, #2 already on shopping list', | ||||
| 	'Show notes' => 'Pokaż notatki', | ||||
| 	'Put missing amount on shopping list' => 'Put missing amount on shopping list', | ||||
| 	'Are you sure to put all missing ingredients for recipe "#1" on the shopping list?' => 'Are you sure to put all missing ingredients for recipe "#1" on the shopping list?', | ||||
| 	'Added for recipe #1' => 'Dodano do przepisu #1', | ||||
| 	'Manage users' => 'Zarządzaj użytkownikami', | ||||
| 	'User' => 'Użytkownik', | ||||
| 	'Users' => 'Użytkownicy', | ||||
| 	'Are you sure to delete user "#1"?' => 'Czy na pewno chcesz usunąć użytkownika "#1"?', | ||||
| 	'Create user' => 'Utwórz użytkownika', | ||||
| 	'Edit user' => 'Edytuj użytkownika', | ||||
| 	'First name' => 'Imię', | ||||
| 	'Last name' => 'Nazwisko', | ||||
| 	'A username is required' => 'Nazwa użytkownika jest wymagana', | ||||
| 	'Confirm password' => 'Potwierdź hasło', | ||||
| 	'Passwords do not match' => 'Hasła nie są identyczne', | ||||
| 	'Change password' => 'Zmień hasło', | ||||
| 	'Done by' => 'Ukończony przez', | ||||
| 	'Last done by' => 'Ostatnio ukończony przez', | ||||
| 	'Unknown' => 'Nieznany', | ||||
| 	'Filter by chore' => 'Filtruj po pracach domowych', | ||||
| 	'Chores journal' => 'Pamiętnik prac domowych', | ||||
| 	'0 means suggestions for the next charge cycle are disabled' => '0 means suggestions for the next charge cycle are disabled', | ||||
| 	'Charge cycle interval (days)' => 'Charge cycle interval (days)', | ||||
| 	'Last price' => 'Ostatnia cena', | ||||
| 	'Price history' => 'Historia cen', | ||||
| 	'No price history available' => 'Historia cen jest niedostępna', | ||||
| 	'Price' => 'Cena', | ||||
| 	'in #1 per purchase quantity unit' => 'in #1 per purchase quantity unit', | ||||
| 	'The price cannot be lower than #1' => 'The price cannot be lower than #1', | ||||
| 	'#1 product expires within the next #2 days' => '#1 product expires within the next #2 days', | ||||
| 	'#1 product is already expired' => '#1 product is already expired', | ||||
| 	'#1 product is below defined min. stock amount' => '#1 product is below defined min. stock amount', | ||||
| 	'Unit' => 'Jednostka', | ||||
| 	'Units' => 'Jednostki', | ||||
| 	'#1 chore is due to be done within the next #2 days' => '#1 chore is due to be done within the next #2 days', | ||||
| 	'#1 chore is overdue to be done' => '#1 chore is overdue to be done', | ||||
| 	'#1 battery is due to be charged within the next #2 days' => '#1 battery is due to be charged within the next #2 days', | ||||
| 	'#1 battery is overdue to be charged' => '#1 battery is overdue to be charged', | ||||
| 	'#1 unit was automatically added and will apply in addition to the amount entered here' => '#1 unit was automatically added and will apply in addition to the amount entered here', | ||||
| 	'in singular form' => 'in singular form', | ||||
| 	'in plural form' => 'in plural form', | ||||
| 	'Never expires' => 'Never expires', | ||||
| 	'This cannot be lower than #1' => 'This cannot be lower than #1', | ||||
| 	'-1 means that this product never expires' => '-1 means that this product never expires', | ||||
| 	'Quantity unit' => 'Quantity unit', | ||||
| 	'Only check if a single unit is in stock (a different quantity can then be used above)' => 'Only check if a single unit is in stock (a different quantity can then be used above)', | ||||
| 	'Are you sure to consume all ingredients needed by recipe "#1" (ingredients marked with "check only if a single unit is in stock" will be ignored)?' => 'Are you sure to consume all ingredients needed by recipe "#1" (ingredients marked with "check only if a single unit is in stock" will be ignored)?', | ||||
| 	'Removed all ingredients of recipe "#1" from stock' => 'Removed all ingredients of recipe "#1" from stock', | ||||
| 	'Consume all ingredients needed by this recipe' => 'Consume all ingredients needed by this recipe', | ||||
| 	'Click to show technical details' => 'Naciśnij, aby poznać techniczne szczegóły', | ||||
| 	'Error while saving, probably this item already exists' => 'Error while saving, probably this item already exists', | ||||
| 	'Error details' => 'Szczegóły błędu', | ||||
| 	'Tasks' => 'Zadania', | ||||
| 	'Show done tasks' => 'Pokaż ukończone zadania', | ||||
| 	'Task' => 'Zadanie', | ||||
| 	'Due' => 'Należy', | ||||
| 	'Assigned to' => 'Przypisany do', | ||||
| 	'Mark task "#1" as completed' => 'Mark task "#1" as completed', | ||||
| 	'Uncategorized' => 'Bez kategorii', | ||||
| 	'Task categories' => 'Kategorie zadań', | ||||
| 	'Create task' => 'Utwórz zadanie', | ||||
| 	'A due date is required' => 'A due date is required', | ||||
| 	'Category' => 'Kategoria', | ||||
| 	'Edit task' => 'Edytuj zadanie', | ||||
| 	'Are you sure to delete task "#1"?' => 'Czy jesteś pewien, że chcesz usunąć zadanie "#1"?', | ||||
| 	'#1 task is due to be done within the next #2 days' => '#1 task is due to be done within the next #2 days', | ||||
| 	'#1 tasks are due to be done within the next #2 days' => '#1 tasks are due to be done within the next #2 days', | ||||
| 	'#1 task is overdue to be done' => '#1 task is overdue to be done', | ||||
| 	'#1 tasks are overdue to be done' => '#1 tasks are overdue to be done', | ||||
| 	'Edit task category' => 'Edytuj kategorię zadania', | ||||
| 	'Create task category' => 'Utwórz kategorię zadania', | ||||
| 	'Product groups' => 'Grupy produktów', | ||||
| 	'Ungrouped' => 'Bez grupy', | ||||
| 	'Create product group' => 'Utwórz grupę produktów', | ||||
| 	'Edit product group' => 'Edytuj grupę produktów', | ||||
| 	'Product group' => 'Grupa produktów', | ||||
| 	'Are you sure to delete product group "#1"?' => 'Are you sure to delete product group "#1"?', | ||||
| 	'Stay logged in permanently' => 'Pozostań zalogowany na zawsze', | ||||
| 	'When not set, you will get logged out at latest after 30 days' => 'When not set, you will get logged out at latest after 30 days', | ||||
| 	'Filter by status' => 'Filtruj po statusie', | ||||
| 	'Below min. stock amount' => 'Below min. stock amount', | ||||
| 	'Expiring soon' => 'Expiring soon', | ||||
| 	'Already expired' => 'Already expired', | ||||
| 	'Due soon' => 'Due soon', | ||||
| 	'Overdue' => 'Overdue', | ||||
| 	'View settings' => 'Zobacz ustawienia', | ||||
| 	'Auto reload on external changes' => 'Auto reload on external changes', | ||||
| 	'Enable night mode' => 'Włącz tryb nocny', | ||||
| 	'Auto enable in time range' => 'Auto enable in time range', | ||||
| 	'From' => 'Od', | ||||
| 	'in format' => 'w formacie', | ||||
| 	'To' => 'Do', | ||||
| 	'Time range goes over midnight' => 'Time range goes over midnight', | ||||
| 	'Product picture' => 'Zdjęcie produktu', | ||||
| 	'No file selected' => 'Nie wybrano pliku', | ||||
| 	'If you don\'t select a file, the current picture will not be altered' => 'If you don\'t select a file, the current picture will not be altered', | ||||
| 	'Delete' => 'Usuń', | ||||
| 	'The current picture will be deleted when you save the product' => 'The current picture will be deleted when you save the product', | ||||
| 	'Select file' => 'Wybierz plik', | ||||
| 	'Image of product #1' => 'Image of product #1', | ||||
| 	'This product cannot be deleted because it is in stock, please remove the stock amount first.' => 'This product cannot be deleted because it is in stock, please remove the stock amount first.', | ||||
| 	'Delete not possible' => 'Delete not possible', | ||||
| 	'Equipment' => 'Equipment', | ||||
| 	'Instruction manual' => 'Instruction manual', | ||||
| 	'The selected equipment has no instruction manual' => 'The selected equipment has no instruction manual', | ||||
| 	'Notes' => 'Notatki', | ||||
| 	'Edit equipment' => 'Edit equipment', | ||||
| 	'Create equipment' => 'Create equipment', | ||||
| 	'If you don\'t select a file, the current instruction manual will not be altered' => 'If you don\'t select a file, the current instruction manual will not be altered', | ||||
| 	'No instruction manual available' => 'No instruction manual available', | ||||
| 	'The current instruction manual will be deleted when you save the equipment' => 'The current instruction manual will be deleted when you save the equipment', | ||||
| 	'No picture available' => 'No picture available', | ||||
| 	'Filter by product group' => 'Filter by product group', | ||||
| 	'Presets for new products' => 'Presets for new products', | ||||
| 	'Included recipes' => 'Included recipes', | ||||
| 	'A recipe is required' => 'A recipe is required', | ||||
| 	'Add included recipe' => 'Add included recipe', | ||||
| 	'Edit included recipe' => 'Edit included recipe', | ||||
| 	'Group' => 'Grupa', | ||||
| 	'This will be used as a headline to group ingredients together' => 'This will be used as a headline to group ingredients together', | ||||
| 	'Journal' => 'Pamiętnik', | ||||
| 	'Stock journal' => 'Stock journal', | ||||
| 	'Filter by product' => 'Filter by product', | ||||
| 	'Booking time' => 'Booking time', | ||||
| 	'Booking type' => 'Booking type', | ||||
| 	'Undo booking' => 'Undo booking', | ||||
| 	'Undone on' => 'Undone on', | ||||
| 	'Batteries journal' => 'Batteries journal', | ||||
| 	'Filter by battery' => 'Filter by battery', | ||||
| 	'Undo charge cycle' => 'Undo charge cycle', | ||||
| 	'Undo chore execution' => 'Undo chore execution', | ||||
| 	'Chore execution successfully undone' => 'Chore execution successfully undone', | ||||
| 	'Undo' => 'Cofnij', | ||||
| 	'Booking successfully undone' => 'Booking successfully undone', | ||||
| 	'Charge cycle successfully undone' => 'Charge cycle successfully undone', | ||||
| 	'This cannot be negative and must be an integral number' => 'This cannot be negative and must be an integral number', | ||||
| 	'Disable stock fulfillment checking for this ingredient' => 'Disable stock fulfillment checking for this ingredient', | ||||
| 	'Add all list items to stock' => 'Add all list items to stock', | ||||
| 	'Add #3 #1 of #2 to stock' => 'Add #3 #1 of #2 to stock', | ||||
| 	'Adding shopping list item #1 of #2' => 'Adding shopping list item #1 of #2', | ||||
| 	'Use a specific stock item' => 'Use a specific stock item', | ||||
| 	'The first item in this list would be picked by the default rule which is "First expiring first, then first in first out"' => 'The first item in this list would be picked by the default rule which is "First expiring first, then first in first out"', | ||||
| 	'Mark #3 #1 of #2 as open' => 'Mark #3 #1 of #2 as open', | ||||
| 	'When a product was marked as opened, the best before date will be replaced by today + this amount of days (a value of 0 disables this)' => 'When a product was marked as opened, the best before date will be replaced by today + this amount of days (a value of 0 disables this)', | ||||
| 	'Default best before days after opened' => 'Default best before days after opened', | ||||
| 	'Marked #1 #2 of #3 as opened' => 'Marked #1 #2 of #3 as opened', | ||||
| 	'Mark as opened' => 'Mark as opened', | ||||
| 	'Expires on #1; Bought on #2' => 'Expires on #1; Bought on #2', | ||||
| 	'Not opened' => 'Not opened', | ||||
| 	'Opened' => 'Opened', | ||||
| 	'Mark #3 #1 of #2 as open' => 'Mark #3 #1 of #2 as open', | ||||
| 	'#1 opened' => '#1 opened', | ||||
| 	'Product expires' => 'Product expires', | ||||
| 	'Task due' => 'Task due', | ||||
| 	'Chore due' => 'Chore due', | ||||
| 	'Battery charge cycle due' => 'Battery charge cycle due', | ||||
| 	'Show clock in header' => 'Show clock in header', | ||||
| 	'Stock settings' => 'Stock settings', | ||||
| 	'Shopping list to stock workflow' => 'Shopping list to stock workflow', | ||||
| 	'Automatically do the booking using the last price and the amount of the shopping list item, if the product has "Default best before days" set' => 'Automatically do the booking using the last price and the amount of the shopping list item, if the product has "Default best before days" set', | ||||
| 	'Skip' => 'Pomiń', | ||||
| 	'Servings' => 'Servings', | ||||
| 	'Costs' => 'Costs', | ||||
| 	'Based on the prices of the last purchase per product' => 'Based on the prices of the last purchase per product', | ||||
| 	'The ingredients listed here result in this amount of servings' => 'The ingredients listed here result in this amount of servings', | ||||
| 	'Do not check against the shopping list when adding missing items to it' => 'Do not check against the shopping list when adding missing items to it', | ||||
| 	'By default the amount to be added to the shopping list is "needed amount - stock amount - shopping list amount" - when this is enabled, it is only checked against the stock amount, not against what is already on the shopping list' => 'By default the amount to be added to the shopping list is "needed amount - stock amount - shopping list amount" - when this is enabled, it is only checked against the stock amount, not against what is already on the shopping list', | ||||
| 	'Picture' => 'Picture', | ||||
| 	'Uncheck ingredients to not put them on the shopping list' => 'Uncheck ingredients to not put them on the shopping list', | ||||
| 	'This is for statistical purposes only' => 'This is for statistical purposes only', | ||||
| 	'You have to select a recipe' => 'You have to select a recipe', | ||||
| 	'Key type' => 'Key type', | ||||
| 	'Share/Integrate calendar (iCal)' => 'Share/Integrate calendar (iCal)', | ||||
| 	'Use the following (public) URL to share or integrate the calendar in iCal format' => 'Use the following (public) URL to share or integrate the calendar in iCal format', | ||||
| 	'Allow partial units in stock' => 'Allow partial units in stock', | ||||
| 	'Enable tare weight handling' => 'Enable tare weight handling', | ||||
| 	'This is useful e.g. for flour in jars - on purchase/consume/inventory you always weigh the whole jar, the amount to be posted is then automatically calculated based on what is in stock and the tare weight defined below' => 'This is useful e.g. for flour in jars - on purchase/consume/inventory you always weigh the whole jar, the amount to be posted is then automatically calculated based on what is in stock and the tare weight defined below', | ||||
| 	'Tare weight' => 'Tare weight', | ||||
| 	'Tare weight handling enabled - please weigh the whole container, the amount to be posted will be automatically calculcated' => 'Tare weight handling enabled - please weigh the whole container, the amount to be posted will be automatically calculcated', | ||||
| 	'You have to select a location' => 'You have to select a location', | ||||
| 	'List' => 'List', | ||||
| 	'Gallery' => 'Gallery' | ||||
| ); | ||||
							
								
								
									
										6
									
								
								localization/ru/chore_types.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								localization/ru/chore_types.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'manually' => 'Вручную', | ||||
| 	'dynamic-regular' => 'Динамически постоянно' | ||||
| ); | ||||
							
								
								
									
										10
									
								
								localization/ru/component_translations.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								localization/ru/component_translations.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'timeago_locale' => 'en', | ||||
| 	'timeago_nan' => 'NaN years ago', | ||||
| 	'moment_locale' => 'x', | ||||
| 	'datatables_localization' => '{"sEmptyTable":"No data available in table","sInfo":"Showing _START_ to _END_ of _TOTAL_ entries","sInfoEmpty":"Showing 0 to 0 of 0 entries","sInfoFiltered":"(filtered from _MAX_ total entries)","sInfoPostFix":"","sInfoThousands":",","sLengthMenu":"Show _MENU_ entries","sLoadingRecords":"Loading...","sProcessing":"Processing...","sSearch":"Search:","sZeroRecords":"No matching records found","oPaginate":{"sFirst":"First","sLast":"Last","sNext":"Next","sPrevious":"Previous"},"oAria":{"sSortAscending":": activate to sort column ascending","sSortDescending":": activate to sort column descending"}}', | ||||
| 	'summernote_locale' => 'x', | ||||
| 	'fullcalendar_locale' => 'x' | ||||
| ); | ||||
							
								
								
									
										89
									
								
								localization/ru/demo_data.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								localization/ru/demo_data.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,89 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'Cookies' => 'Печенье', | ||||
| 	'Chocolate' => 'Шоколад', | ||||
| 	'Pantry' => 'Pantry', | ||||
| 	'Candy cupboard' => 'Candy cupboard', | ||||
| 	'Tinned food cupboard' => 'Tinned food cupboard', | ||||
| 	'Fridge' => 'Холодильник', | ||||
| 	'Piece' => 'Штука', | ||||
| 	'Pieces' => 'Штук(и)', | ||||
| 	'Pack' => 'Упаковка', | ||||
| 	'Packs' => 'Упаков(ки/ок)', | ||||
| 	'Glass' => 'Стакан', | ||||
| 	'Glasses' => 'Стакан(а/ов)', | ||||
| 	'Tin' => 'Tin', | ||||
| 	'Tins' => 'Tins', | ||||
| 	'Can' => 'Can', | ||||
| 	'Cans' => 'Cans', | ||||
| 	'Bunch' => 'Bunch', | ||||
| 	'Bunches' => 'Bunches', | ||||
| 	'Gummy bears' => 'Gummy bears', | ||||
| 	'Crisps' => 'Crisps', | ||||
| 	'Eggs' => 'Яйца', | ||||
| 	'Noodles' => 'Макароны', | ||||
| 	'Pickles' => 'Огурцы', | ||||
| 	'Gulash soup' => 'Gulash soup', | ||||
| 	'Yogurt' => 'Йогурт', | ||||
| 	'Cheese' => 'Сыр', | ||||
| 	'Cold cuts' => 'Cold cuts', | ||||
| 	'Paprika' => 'Paprika', | ||||
| 	'Cucumber' => 'Cucumber', | ||||
| 	'Radish' => 'Radish', | ||||
| 	'Tomato' => 'Помидор', | ||||
| 	'Changed towels in the bathroom' => 'Changed towels in the bathroom', | ||||
| 	'Cleaned the kitchen floor' => 'Cleaned the kitchen floor', | ||||
| 	'Warranty ends' => 'Гарантия заканчивается', | ||||
| 	'TV remote control' => 'Пульт ДУ', | ||||
| 	'Alarm clock' => 'Часы с будильником', | ||||
| 	'Heat remote control' => 'Heat remote control', | ||||
| 	'Lawn mowed in the garden' => 'Lawn mowed in the garden', | ||||
| 	'Some good snacks' => 'Some good snacks', | ||||
| 	'Pizza dough' => 'Pizza dough', | ||||
| 	'Sieved tomatoes' => 'Sieved tomatoes', | ||||
| 	'Salami' => 'Salami', | ||||
| 	'Toast' => 'Toast', | ||||
| 	'Minced meat' => 'Minced meat', | ||||
| 	'Pizza' => 'Pizza', | ||||
| 	'Spaghetti bolognese' => 'Spaghetti bolognese', | ||||
| 	'Sandwiches' => 'Sandwiches', | ||||
| 	'English' => 'English', | ||||
| 	'German' => 'German', | ||||
| 	'Italian' => 'Italian', | ||||
| 	'Demo in different language' => 'Demo in different language', | ||||
| 	'This is the note content of the recipe ingredient' => 'This is the note content of the recipe ingredient', | ||||
| 	'Demo User' => 'Demo User', | ||||
| 	'Gram' => 'Gram', | ||||
| 	'Grams' => 'Grams', | ||||
| 	'Flour' => 'Flour', | ||||
| 	'Pancakes' => 'Pancakes', | ||||
| 	'Sugar' => 'Sugar', | ||||
| 	'Home' => 'Home', | ||||
| 	'Life' => 'Life', | ||||
| 	'Projects' => 'Projects', | ||||
| 	'Repair the garage door' => 'Repair the garage door', | ||||
| 	'Fork and improve grocy' => 'Fork and improve grocy', | ||||
| 	'Find a solution for what to do when I forget the door keys' => 'Find a solution for what to do when I forget the door keys', | ||||
| 	'Sweets' => 'Sweets', | ||||
| 	'Bakery products' => 'Bakery products', | ||||
| 	'Tinned food' => 'Tinned food', | ||||
| 	'Butchery products' => 'Butchery products', | ||||
| 	'Vegetables/Fruits' => 'Vegetables/Fruits', | ||||
| 	'Refrigerated products' => 'Refrigerated products', | ||||
| 	'Coffee machine' => 'Coffee machine', | ||||
| 	'Dishwasher' => 'Dishwasher', | ||||
| 	'Liter' => 'Liter', | ||||
| 	'Liters' => 'Liters', | ||||
| 	'Bottle' => 'Bottle', | ||||
| 	'Bottles' => 'Bottles', | ||||
| 	'Milk' => 'Milk', | ||||
| 	'Chocolate sauce' => 'Chocolate sauce', | ||||
| 	'Milliliters' => 'Milliliters', | ||||
| 	'Milliliter' => 'Milliliter', | ||||
| 	'Bottom' => 'Bottom', | ||||
| 	'Topping' => 'Topping', | ||||
| 	'French' => 'Французский', | ||||
| 	'Turkish' => 'Турецкий', | ||||
| 	'Spanish' => 'Испанский' | ||||
| ); | ||||
							
								
								
									
										8
									
								
								localization/ru/stock_transaction_types.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								localization/ru/stock_transaction_types.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'purchase' => 'Купить', | ||||
| 	'consume' => 'Употребить', | ||||
| 	'inventory-correction' => 'Исправление инвентаря', | ||||
| 	'product-opened' => 'Продукт открыт' | ||||
| ); | ||||
							
								
								
									
										349
									
								
								localization/ru/strings.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										349
									
								
								localization/ru/strings.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,349 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'Stock overview' => 'Обзор склада', | ||||
| 	'#1 products expiring within the next #2 days' => 'У #1 продуктов заканчивается срок годности через #2 дня (дней)', | ||||
| 	'#1 products are already expired' => 'У #1 продуктов закончился срок годности', | ||||
| 	'#1 products are below defined min. stock amount' => '#1 продуктов имеются в количестве меньше минимально заданного', | ||||
| 	'Product' => 'Продукт', | ||||
| 	'Amount' => 'Количество', | ||||
| 	'Next best before date' => 'Следующий срок годности', | ||||
| 	'Logout' => 'Выйти', | ||||
| 	'Chores overview' => 'Обзор работ по дому', | ||||
| 	'Batteries overview' => 'Обзор батарей', | ||||
| 	'Purchase' => 'Покупка', | ||||
| 	'Consume' => 'Потребление', | ||||
| 	'Inventory' => 'Инвентарь', | ||||
| 	'Shopping list' => 'Список покупок', | ||||
| 	'Chore tracking' => 'Выполнить работу по дому', | ||||
| 	'Battery tracking' => 'Отслеживание батарей', | ||||
| 	'Products' => 'Продукты', | ||||
| 	'Locations' => 'Места хранения', | ||||
| 	'Quantity units' => 'Единицы измерения', | ||||
| 	'Chores' => 'Работы по дому', | ||||
| 	'Batteries' => 'Батареи', | ||||
| 	'Chore' => 'Работа по дому', | ||||
| 	'Next estimated tracking' => 'Следующий период отслеживания', | ||||
| 	'Last tracked' => 'Последнее время отслеживания', | ||||
| 	'Battery' => 'Батарея', | ||||
| 	'Last charged' => 'Последний раз заряжалась', | ||||
| 	'Next planned charge cycle' => 'Следующий запланированный цикл заряда', | ||||
| 	'Best before' => 'Срок годности', | ||||
| 	'OK' => 'Готово', | ||||
| 	'Product overview' => 'Обзор продуктов', | ||||
| 	'Stock quantity unit' => 'Единица измерения запаса', | ||||
| 	'Stock amount' => 'Количество в запасе', | ||||
| 	'Last purchased' => 'Последняя покупка', | ||||
| 	'Last used' => 'Последний раз использовалось', | ||||
| 	'Spoiled' => 'Испорчено', | ||||
| 	'Barcode lookup is disabled' => 'Поиск по штрихкоду отключён', | ||||
| 	'will be added to the list of barcodes for the selected product on submit' => 'будет добавлен к списку штрихкодов для выбранного продукта при сохранении', | ||||
| 	'New amount' => 'Новое количество', | ||||
| 	'Note' => 'Заметки', | ||||
| 	'Tracked time' => 'Время выполнения', | ||||
| 	'Chore overview' => 'Обзор работы по дому', | ||||
| 	'Tracked count' => 'Количество выполнений', | ||||
| 	'Battery overview' => 'Обзор батарей', | ||||
| 	'Charge cycles count' => 'Количество циклов заряда', | ||||
| 	'Create shopping list item' => 'Создать элемент списка покупок', | ||||
| 	'Edit shopping list item' => 'Изменить элемент списка покупок', | ||||
| 	'Save' => 'Сохранить', | ||||
| 	'Add' => 'Добавить', | ||||
| 	'Name' => 'Имя', | ||||
| 	'Location' => 'Место хранения', | ||||
| 	'Min. stock amount' => 'Мин. количество в запасе', | ||||
| 	'QU purchase' => 'Ед.изм. покупки', | ||||
| 	'QU stock' => 'Ед.изм. запаса', | ||||
| 	'QU factor' => 'Пересчёт ед.изм.', | ||||
| 	'Description' => 'Описание', | ||||
| 	'Create product' => 'Создать продукт', | ||||
| 	'Barcode(s)' => 'Штрихкод(ы)', | ||||
| 	'Minimum stock amount' => 'Минимальное количество в запасе', | ||||
| 	'Default best before days' => 'Срок годности по умолчанию', | ||||
| 	'Quantity unit purchase' => 'Единица измерения про покупке', | ||||
| 	'Quantity unit stock' => 'Единица измерения в запасе', | ||||
| 	'Factor purchase to stock quantity unit' => 'Коэффициент пересчёта единиц измерения при покупке и в запасе', | ||||
| 	'Create location' => 'Создать место хранения', | ||||
| 	'Create quantity unit' => 'Создать единицу измерения', | ||||
| 	'Period type' => 'Тип периода', | ||||
| 	'Period days' => 'Период в днях', | ||||
| 	'Create chore' => 'Создать работу по дому', | ||||
| 	'Used in' => 'Используется в', | ||||
| 	'Create battery' => 'Создать батарею', | ||||
| 	'Edit battery' => 'Изменить батарею', | ||||
| 	'Edit chore' => 'Изменить работу по дому', | ||||
| 	'Edit quantity unit' => 'Изменить единицу измерения', | ||||
| 	'Edit product' => 'Изменить продукт', | ||||
| 	'Edit location' => 'Изменить место хранения', | ||||
| 	'Record data' => 'Записать данные', | ||||
| 	'Manage master data' => 'Управление основными данными', | ||||
| 	'This will apply to added products' => 'Будет применено к добавленным продуктам', | ||||
| 	'never' => 'никогда', | ||||
| 	'Add products that are below defined min. stock amount' => 'Add products that are below defined min. stock amount', | ||||
| 	'For purchases this amount of days will be added to today for the best before date suggestion' => 'For purchases this amount of days will be added to today for the best before date suggestion', | ||||
| 	'This means 1 #1 purchased will be converted into #2 #3 in stock' => 'Означает, что 1 купленный #1 будет пересчитан в #2 #3 в запасе', | ||||
| 	'Login' => 'Вход', | ||||
| 	'Username' => 'Имя пользователя', | ||||
| 	'Password' => 'Пароль', | ||||
| 	'Invalid credentials, please try again' => 'Неправильные данные для входа, попробуйте снова', | ||||
| 	'Are you sure to delete battery "#1"?' => 'Вы уверены, что нужно удалить батарею "#1"? ', | ||||
| 	'Yes' => 'Да', | ||||
| 	'No' => 'Нет', | ||||
| 	'Are you sure to delete chore "#1"?' => 'Вы уверены, что нужно удалить работу по дому "#1"?', | ||||
| 	'"#1" could not be resolved to a product, how do you want to proceed?' => '"#1" не может быть преобразован к существующему продукту. Как вы хотите продолжить?', | ||||
| 	'Create or assign product' => 'Создать или назначить продукт', | ||||
| 	'Cancel' => 'Отмена', | ||||
| 	'Add as new product' => 'Добавить как новый продукт', | ||||
| 	'Add as barcode to existing product' => 'Добавить в качестве штрихкода к существующему продукту', | ||||
| 	'Add as new product and prefill barcode' => 'Добавить новый продукт, заполнив штрихкод', | ||||
| 	'Are you sure to delete quantity unit "#1"?' => 'Вы уверены, что нужно удалить единицу измерения "#1"?', | ||||
| 	'Are you sure to delete product "#1"?' => 'Вы уверены, что нужно удалить продукт "#1"?', | ||||
| 	'Are you sure to delete location "#1"?' => 'Вы уверены, что нужно удалить место хранения "#1"?', | ||||
| 	'Manage API keys' => 'Управление ключами доступа к API', | ||||
| 	'REST API & data model documentation' => 'Документация на REST API и модуль данных', | ||||
| 	'API keys' => 'Ключи доступа к API', | ||||
| 	'Create new API key' => 'Создать ключ доступа к API', | ||||
| 	'API key' => 'Ключ доступа к API', | ||||
| 	'Expires' => 'Истекает', | ||||
| 	'Created' => 'Создан', | ||||
| 	'This product is not in stock' => 'Данного продукта нет в запасе', | ||||
| 	'This means #1 will be added to stock' => 'Означает, что #1 будет добавлен в запас', | ||||
| 	'This means #1 will be removed from stock' => 'Означает, что #1 будет убран из запаса', | ||||
| 	'This means it is estimated that a new execution of this chore is tracked #1 days after the last was tracked' => 'Это означает, что следующее выполнение данной работы по дому будет назначено спустя #1 дней после самого недавнего выполнения', | ||||
| 	'Removed #1 #2 of #3 from stock' => 'Убрано #1 #2 из #3 из запаса', | ||||
| 	'About grocy' => 'О grocy', | ||||
| 	'Close' => 'Закрыть', | ||||
| 	'#1 batteries are due to be charged within the next #2 days' => '#1 батарей нужно будет зарядить в ближайшие #2 дня', | ||||
| 	'#1 batteries are overdue to be charged' => '#1 батарей нужно зарядить', | ||||
| 	'#1 chores are due to be done within the next #2 days' => 'Срок исполнения #1 работ по дому наступает в ближайшие  #2 дня (дней)', | ||||
| 	'#1 chores are overdue to be done' => 'У #1 работ по дому уже подошёл срок выполнения', | ||||
| 	'Released on' => 'Выпуск от', | ||||
| 	'Consume #3 #1 of #2' => 'Употреблено #3 #1 из #2', | ||||
| 	'Added #1 #2 of #3 to stock' => 'Добавлено #1 #2 из #3 в запас', | ||||
| 	'Stock amount of #1 is now #2 #3' => '#1 в запасе теперь #2 #3', | ||||
| 	'Tracked execution of chore #1 on #2' => 'Отмечено выполнения работы по дому #1 в #2', | ||||
| 	'Tracked charge cycle of battery #1 on #2' => 'Отмечен цикл заряд батареи #1 в #2', | ||||
| 	'Consume all #1 which are currently in stock' => 'Употребить все #1, что находятся в запасе', | ||||
| 	'All' => 'Все', | ||||
| 	'Track charge cycle of battery #1' => 'Отметить цикл заряда батареи #1', | ||||
| 	'Track execution of chore #1' => 'Отметить выполнение работы по дому #1', | ||||
| 	'Filter by location' => 'Отфильтровать по месту хранения', | ||||
| 	'Search' => 'Поиск', | ||||
| 	'Not logged in' => 'Нет входа в систему', | ||||
| 	'You have to select a product' => 'Вам нужно выбрать продукт', | ||||
| 	'You have to select a chore' => 'Вам нужно выбрать работу по дому', | ||||
| 	'You have to select a battery' => 'Вам нужно выбрать батарею', | ||||
| 	'A name is required' => 'Имя необходимо', | ||||
| 	'A location is required' => 'Место хранения необходимо', | ||||
| 	'The amount cannot be lower than #1' => 'Количество не может быть меньше #1', | ||||
| 	'This cannot be negative' => 'Значение не может быть отрицательным', | ||||
| 	'A quantity unit is required' => 'Необходима единица измерения', | ||||
| 	'A period type is required' => 'Необходим тип периода', | ||||
| 	'A best before date is required and must be later than today' => 'Необходим срок годности и он должен быть не раньше сегодня', | ||||
| 	'Settings' => 'Настройки', | ||||
| 	'This can only be before now' => 'Данное поле должно быть раньше текущего времени', | ||||
| 	'Calendar' => 'Календарь', | ||||
| 	'Recipes' => 'Рецепты', | ||||
| 	'Edit recipe' => 'Изменить рецепт', | ||||
| 	'New recipe' => 'Новый рецепт', | ||||
| 	'Ingredients list' => 'Список ингредиентов', | ||||
| 	'Add recipe ingredient' => 'Добавить ингредиент рецепта', | ||||
| 	'Edit recipe ingredient' => 'Изменить ингредиент рецепта', | ||||
| 	'Are you sure to delete recipe "#1"?' => 'Вы уверены, что нужно удалить рецепт "#1"?', | ||||
| 	'Are you sure to delete recipe ingredient "#1"?' => 'Вы уверены, что нужно удалить ингредиент рецепта "#1"?', | ||||
| 	'Are you sure to empty the shopping list?' => 'Вы уверены, что нужно очистить список покупок?', | ||||
| 	'Clear list' => 'Очистить список', | ||||
| 	'Requirements fulfilled' => 'Требования выполнены', | ||||
| 	'Put missing products on shopping list' => 'Добавить отсутствующие продукты в список покупок', | ||||
| 	'Not enough in stock, #1 ingredients missing' => 'Запаса недостаточно, #1 ингредиентов нет', | ||||
| 	'Enough in stock' => 'Достаточно в запасе', | ||||
| 	'Not enough in stock, #1 ingredients missing but already on the shopping list' => 'Запаса недостаточно, #1 ингредиентов нет, но уже добавлены в список покупок', | ||||
| 	'Expand to fullscreen' => 'Раскрыть на весь экран', | ||||
| 	'Ingredients' => 'Ингредиенты', | ||||
| 	'Preparation' => 'Приготовление', | ||||
| 	'Recipe' => 'Рецепт', | ||||
| 	'Not enough in stock, #1 missing, #2 already on shopping list' => 'Запаса недостаточно, #1 ингредиентов нет, #2 уже добавлены в список покупок', | ||||
| 	'Show notes' => 'Показать заметки', | ||||
| 	'Put missing amount on shopping list' => 'Добавить отсутствующее количество в список покупок', | ||||
| 	'Are you sure to put all missing ingredients for recipe "#1" on the shopping list?' => 'Вы уверены, что нужно добавить все отсутствующие ингредиенты для рецепта "#1" в список покупок?', | ||||
| 	'Added for recipe #1' => 'Добавлен рецепт #1', | ||||
| 	'Manage users' => 'Управление пользователями', | ||||
| 	'User' => 'Пользователь', | ||||
| 	'Users' => 'Пользователи', | ||||
| 	'Are you sure to delete user "#1"?' => 'Вы уверены, что нужно удалить пользователя "#1"?', | ||||
| 	'Create user' => 'Создать пользователя', | ||||
| 	'Edit user' => 'Изменить пользователя', | ||||
| 	'First name' => 'Имя', | ||||
| 	'Last name' => 'Фамилия', | ||||
| 	'A username is required' => 'Имя пользователя обязательно', | ||||
| 	'Confirm password' => 'Подтверждение пароля', | ||||
| 	'Passwords do not match' => 'Пароли не совпадают', | ||||
| 	'Change password' => 'Изменить пароль', | ||||
| 	'Done by' => 'Выполнено ', | ||||
| 	'Last done by' => 'Последний раз выполнено', | ||||
| 	'Unknown' => 'Неизвестно', | ||||
| 	'Filter by chore' => 'Отфильтровать по работе по дому', | ||||
| 	'Chores journal' => 'Журнал выполнения работ по дому', | ||||
| 	'0 means suggestions for the next charge cycle are disabled' => '0 означен, что предложения следующего цикла заряда выключены', | ||||
| 	'Charge cycle interval (days)' => 'Цикл работы от 1 заряда (дней)', | ||||
| 	'Last price' => 'Последняя цена покупки', | ||||
| 	'Price history' => 'История цен', | ||||
| 	'No price history available' => 'Нет истории цен для показа', | ||||
| 	'Price' => 'Цена', | ||||
| 	'in #1 per purchase quantity unit' => 'в #1 на покупку единицы измерения', | ||||
| 	'The price cannot be lower than #1' => 'Цена не может быть ниже #1', | ||||
| 	'#1 product expires within the next #2 days' => 'У #1 продукта закончится срок годности через #2 дня(дней)', | ||||
| 	'#1 product is already expired' => 'У #1 продукта уже закончился срок годности', | ||||
| 	'#1 product is below defined min. stock amount' => '#1 продукт имеется в количестве меньше минимально заданного', | ||||
| 	'Unit' => 'Ед.изм.', | ||||
| 	'Units' => 'Ед.изм.', | ||||
| 	'#1 chore is due to be done within the next #2 days' => 'Срок исполнения #1 работы по дому наступает в ближайшие #2 дня (дней) ', | ||||
| 	'#1 chore is overdue to be done' => 'У #1 работы по дому уже подошёл срок исполнения ', | ||||
| 	'#1 battery is due to be charged within the next #2 days' => '#1 батарею нужно будет зарядить в ближайшие #2 дня ', | ||||
| 	'#1 battery is overdue to be charged' => '#1 батарею нужно зарядить', | ||||
| 	'#1 unit was automatically added and will apply in addition to the amount entered here' => '#1 unit was automatically added and will apply in addition to the amount entered here', | ||||
| 	'in singular form' => 'в единственном числе', | ||||
| 	'in plural form' => 'в множественном числе', | ||||
| 	'Never expires' => 'Бесконечный срок годности', | ||||
| 	'This cannot be lower than #1' => 'Не может быть менее #1', | ||||
| 	'-1 means that this product never expires' => '-1 означает, что у данного продукта бесконечный срок годности', | ||||
| 	'Quantity unit' => 'Единица измерения', | ||||
| 	'Only check if a single unit is in stock (a different quantity can then be used above)' => 'Only check if a single unit is in stock (a different quantity can then be used above)', | ||||
| 	'Are you sure to consume all ingredients needed by recipe "#1" (ingredients marked with "check only if a single unit is in stock" will be ignored)?' => 'Are you sure to consume all ingredients needed by recipe "#1" (ingredients marked with "check only if a single unit is in stock" will be ignored)?', | ||||
| 	'Removed all ingredients of recipe "#1" from stock' => 'Все ингредиенты рецепта "#1" убраны из запаса', | ||||
| 	'Consume all ingredients needed by this recipe' => 'Употребить все ингредиенты, необходимые данному рецепту', | ||||
| 	'Click to show technical details' => 'Нажмите, чтобы посмотреть технические детали', | ||||
| 	'Error while saving, probably this item already exists' => 'Ошибка при сохранении, вероятно, данный элемент уже существует', | ||||
| 	'Error details' => 'Детали ошибки', | ||||
| 	'Tasks' => 'Задачи', | ||||
| 	'Show done tasks' => 'Показать законченные задачи', | ||||
| 	'Task' => 'Задача', | ||||
| 	'Due' => 'Срок выполнения', | ||||
| 	'Assigned to' => 'Назначена', | ||||
| 	'Mark task "#1" as completed' => 'Пометить задачу "#1" как выполненную', | ||||
| 	'Uncategorized' => 'Без категории', | ||||
| 	'Task categories' => 'Категории задач', | ||||
| 	'Create task' => 'Создать задачу', | ||||
| 	'A due date is required' => 'Необходим срок выполнения', | ||||
| 	'Category' => 'Категория', | ||||
| 	'Edit task' => 'Изменить задачу', | ||||
| 	'Are you sure to delete task "#1"?' => 'Вы уверены, что нужно удалить задачу "#1"?', | ||||
| 	'#1 task is due to be done within the next #2 days' => 'У #1 задачи заканчивается срок выполнения в ближайшие #2 дня(дней)', | ||||
| 	'#1 tasks are due to be done within the next #2 days' => 'У #1 задач заканчивается срок выполнения в ближайшие #2 дня (дней)', | ||||
| 	'#1 task is overdue to be done' => 'У #1 задачи вышел срок выполнения', | ||||
| 	'#1 tasks are overdue to be done' => 'У #1 задач вышел срок выполнения', | ||||
| 	'Edit task category' => 'Изменить категорию задач', | ||||
| 	'Create task category' => 'Создать категорию задач', | ||||
| 	'Product groups' => 'Группы продуктов', | ||||
| 	'Ungrouped' => 'Без группы', | ||||
| 	'Create product group' => 'Создать группу продуктов', | ||||
| 	'Edit product group' => 'Изменить группу продуктов', | ||||
| 	'Product group' => 'Группа продуктов', | ||||
| 	'Are you sure to delete product group "#1"?' => 'Are you sure to delete product group "#1"?', | ||||
| 	'Stay logged in permanently' => 'Оставаться  в сети всегда', | ||||
| 	'When not set, you will get logged out at latest after 30 days' => 'Если не отмечено, то вы выйдете автоматически через 30 дней', | ||||
| 	'Filter by status' => 'Отфильтровать по статусу', | ||||
| 	'Below min. stock amount' => 'Below min. stock amount', | ||||
| 	'Expiring soon' => 'Скоро заканчивается срок', | ||||
| 	'Already expired' => 'Срок годности вышел', | ||||
| 	'Due soon' => 'Срок выполнения подходит', | ||||
| 	'Overdue' => 'Срок выполнен кончился', | ||||
| 	'View settings' => 'Настройки показа', | ||||
| 	'Auto reload on external changes' => 'Автоматическая перезагрузка при внешних изменениях', | ||||
| 	'Enable night mode' => 'Включить ночной режим', | ||||
| 	'Auto enable in time range' => 'Автоматически включать на данном отрезке времени', | ||||
| 	'From' => 'Начиная с', | ||||
| 	'in format' => 'в формате', | ||||
| 	'To' => 'Заканчивая на', | ||||
| 	'Time range goes over midnight' => 'Временной период пересекает полночь', | ||||
| 	'Product picture' => 'Изображение продукта', | ||||
| 	'No file selected' => 'Файл не выбран', | ||||
| 	'If you don\'t select a file, the current picture will not be altered' => 'Если файл не выбран, то текущее изображение не изменится', | ||||
| 	'Delete' => 'Удалить', | ||||
| 	'The current picture will be deleted when you save the product' => 'Текущее изображение будет удалено при сохранении продукта', | ||||
| 	'Select file' => 'Выбрать файл', | ||||
| 	'Image of product #1' => 'Изображение продукта #1', | ||||
| 	'This product cannot be deleted because it is in stock, please remove the stock amount first.' => 'Данный продукт не может быть удалён, так как он ещё есть в запасе. Пожалуйста, сначала опустошите запас.', | ||||
| 	'Delete not possible' => 'Удаление невозможно', | ||||
| 	'Equipment' => 'Техника', | ||||
| 	'Instruction manual' => 'Инструкция', | ||||
| 	'The selected equipment has no instruction manual' => 'У данной техники нет инструкции', | ||||
| 	'Notes' => 'Заметки', | ||||
| 	'Edit equipment' => 'Изменить технику', | ||||
| 	'Create equipment' => 'Создать технику', | ||||
| 	'If you don\'t select a file, the current instruction manual will not be altered' => 'Если файл не выбран, то текущая инструкция  не будет изменена', | ||||
| 	'No instruction manual available' => 'Нет доступной инструкции | ||||
| ', | ||||
| 	'The current instruction manual will be deleted when you save the equipment' => 'Текущая инструкция будет удалена при сохранении техники', | ||||
| 	'No picture available' => 'Нет доступного изображения', | ||||
| 	'Filter by product group' => 'Отфильтровать по групп', | ||||
| 	'Presets for new products' => 'Настройки по умолчанию для новых продуктов', | ||||
| 	'Included recipes' => 'Включённые рецепты', | ||||
| 	'A recipe is required' => 'Необходим рецепт', | ||||
| 	'Add included recipe' => 'Добавить включённый рецепт', | ||||
| 	'Edit included recipe' => 'Изменить включённый рецепт', | ||||
| 	'Group' => 'Группа', | ||||
| 	'This will be used as a headline to group ingredients together' => 'This will be used as a headline to group ingredients together', | ||||
| 	'Journal' => 'Журнал', | ||||
| 	'Stock journal' => 'Журнал запасов', | ||||
| 	'Filter by product' => 'Отфильтровать по продукту', | ||||
| 	'Booking time' => 'Booking time', | ||||
| 	'Booking type' => 'Booking type', | ||||
| 	'Undo booking' => 'Undo booking', | ||||
| 	'Undone on' => 'Отменено', | ||||
| 	'Batteries journal' => 'Журнал батарей', | ||||
| 	'Filter by battery' => 'Отфильтровать по батарее', | ||||
| 	'Undo charge cycle' => 'Undo charge cycle', | ||||
| 	'Undo chore execution' => 'Отменить выполнение работы по дому', | ||||
| 	'Chore execution successfully undone' => 'Успешно отменено выполнение работы по дому', | ||||
| 	'Undo' => 'Отменить', | ||||
| 	'Booking successfully undone' => 'Booking successfully undone', | ||||
| 	'Charge cycle successfully undone' => 'Charge cycle successfully undone', | ||||
| 	'This cannot be negative and must be an integral number' => 'This cannot be negative and must be an integral number', | ||||
| 	'Disable stock fulfillment checking for this ingredient' => 'Disable stock fulfillment checking for this ingredient', | ||||
| 	'Add all list items to stock' => 'Add all list items to stock', | ||||
| 	'Add #3 #1 of #2 to stock' => 'Add #3 #1 of #2 to stock', | ||||
| 	'Adding shopping list item #1 of #2' => 'Adding shopping list item #1 of #2', | ||||
| 	'Use a specific stock item' => 'Use a specific stock item', | ||||
| 	'The first item in this list would be picked by the default rule which is "First expiring first, then first in first out"' => 'The first item in this list would be picked by the default rule which is "First expiring first, then first in first out"', | ||||
| 	'Mark #3 #1 of #2 as open' => 'Mark #3 #1 of #2 as open', | ||||
| 	'When a product was marked as opened, the best before date will be replaced by today + this amount of days (a value of 0 disables this)' => 'When a product was marked as opened, the best before date will be replaced by today + this amount of days (a value of 0 disables this)', | ||||
| 	'Default best before days after opened' => 'Default best before days after opened', | ||||
| 	'Marked #1 #2 of #3 as opened' => 'Marked #1 #2 of #3 as opened', | ||||
| 	'Mark as opened' => 'Mark as opened', | ||||
| 	'Expires on #1; Bought on #2' => 'Expires on #1; Bought on #2', | ||||
| 	'Not opened' => 'Not opened', | ||||
| 	'Opened' => 'Opened', | ||||
| 	'Mark #3 #1 of #2 as open' => 'Mark #3 #1 of #2 as open', | ||||
| 	'#1 opened' => '#1 opened', | ||||
| 	'Product expires' => 'Product expires', | ||||
| 	'Task due' => 'Task due', | ||||
| 	'Chore due' => 'Срок выполнения работы по дому', | ||||
| 	'Battery charge cycle due' => 'Battery charge cycle due', | ||||
| 	'Show clock in header' => 'Show clock in header', | ||||
| 	'Stock settings' => 'Stock settings', | ||||
| 	'Shopping list to stock workflow' => 'Shopping list to stock workflow', | ||||
| 	'Automatically do the booking using the last price and the amount of the shopping list item, if the product has "Default best before days" set' => 'Automatically do the booking using the last price and the amount of the shopping list item, if the product has "Default best before days" set', | ||||
| 	'Skip' => 'Skip', | ||||
| 	'Servings' => 'Servings', | ||||
| 	'Costs' => 'Costs', | ||||
| 	'Based on the prices of the last purchase per product' => 'Based on the prices of the last purchase per product', | ||||
| 	'The ingredients listed here result in this amount of servings' => 'The ingredients listed here result in this amount of servings', | ||||
| 	'Do not check against the shopping list when adding missing items to it' => 'Do not check against the shopping list when adding missing items to it', | ||||
| 	'By default the amount to be added to the shopping list is "needed amount - stock amount - shopping list amount" - when this is enabled, it is only checked against the stock amount, not against what is already on the shopping list' => 'By default the amount to be added to the shopping list is "needed amount - stock amount - shopping list amount" - when this is enabled, it is only checked against the stock amount, not against what is already on the shopping list', | ||||
| 	'Picture' => 'Picture', | ||||
| 	'Uncheck ingredients to not put them on the shopping list' => 'Uncheck ingredients to not put them on the shopping list', | ||||
| 	'This is for statistical purposes only' => 'This is for statistical purposes only', | ||||
| 	'You have to select a recipe' => 'You have to select a recipe', | ||||
| 	'Key type' => 'Key type', | ||||
| 	'Share/Integrate calendar (iCal)' => 'Share/Integrate calendar (iCal)', | ||||
| 	'Use the following (public) URL to share or integrate the calendar in iCal format' => 'Use the following (public) URL to share or integrate the calendar in iCal format', | ||||
| 	'Allow partial units in stock' => 'Allow partial units in stock', | ||||
| 	'Enable tare weight handling' => 'Enable tare weight handling', | ||||
| 	'This is useful e.g. for flour in jars - on purchase/consume/inventory you always weigh the whole jar, the amount to be posted is then automatically calculated based on what is in stock and the tare weight defined below' => 'This is useful e.g. for flour in jars - on purchase/consume/inventory you always weigh the whole jar, the amount to be posted is then automatically calculated based on what is in stock and the tare weight defined below', | ||||
| 	'Tare weight' => 'Tare weight', | ||||
| 	'Tare weight handling enabled - please weigh the whole container, the amount to be posted will be automatically calculcated' => 'Tare weight handling enabled - please weigh the whole container, the amount to be posted will be automatically calculcated', | ||||
| 	'You have to select a location' => 'You have to select a location', | ||||
| 	'List' => 'List', | ||||
| 	'Gallery' => 'Gallery' | ||||
| ); | ||||
							
								
								
									
										6
									
								
								localization/ta/chore_types.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								localization/ta/chore_types.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'manually' => 'Manually', | ||||
| 	'dynamic-regular' => 'Dynamic regular' | ||||
| ); | ||||
							
								
								
									
										10
									
								
								localization/ta/component_translations.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								localization/ta/component_translations.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'timeago_locale' => 'en', | ||||
| 	'timeago_nan' => 'NaN years ago', | ||||
| 	'moment_locale' => 'x', | ||||
| 	'datatables_localization' => '{"sEmptyTable":"No data available in table","sInfo":"Showing _START_ to _END_ of _TOTAL_ entries","sInfoEmpty":"Showing 0 to 0 of 0 entries","sInfoFiltered":"(filtered from _MAX_ total entries)","sInfoPostFix":"","sInfoThousands":",","sLengthMenu":"Show _MENU_ entries","sLoadingRecords":"Loading...","sProcessing":"Processing...","sSearch":"Search:","sZeroRecords":"No matching records found","oPaginate":{"sFirst":"First","sLast":"Last","sNext":"Next","sPrevious":"Previous"},"oAria":{"sSortAscending":": activate to sort column ascending","sSortDescending":": activate to sort column descending"}}', | ||||
| 	'summernote_locale' => 'x', | ||||
| 	'fullcalendar_locale' => 'x' | ||||
| ); | ||||
							
								
								
									
										89
									
								
								localization/ta/demo_data.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								localization/ta/demo_data.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,89 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'Cookies' => 'Cookies', | ||||
| 	'Chocolate' => 'Chocolate', | ||||
| 	'Pantry' => 'Pantry', | ||||
| 	'Candy cupboard' => 'Candy cupboard', | ||||
| 	'Tinned food cupboard' => 'Tinned food cupboard', | ||||
| 	'Fridge' => 'Fridge', | ||||
| 	'Piece' => 'Piece', | ||||
| 	'Pieces' => 'Pieces', | ||||
| 	'Pack' => 'Pack', | ||||
| 	'Packs' => 'Packs', | ||||
| 	'Glass' => 'Glass', | ||||
| 	'Glasses' => 'Glasses', | ||||
| 	'Tin' => 'Tin', | ||||
| 	'Tins' => 'Tins', | ||||
| 	'Can' => 'Can', | ||||
| 	'Cans' => 'Cans', | ||||
| 	'Bunch' => 'Bunch', | ||||
| 	'Bunches' => 'Bunches', | ||||
| 	'Gummy bears' => 'Gummy bears', | ||||
| 	'Crisps' => 'Crisps', | ||||
| 	'Eggs' => 'Eggs', | ||||
| 	'Noodles' => 'Noodles', | ||||
| 	'Pickles' => 'Pickles', | ||||
| 	'Gulash soup' => 'Gulash soup', | ||||
| 	'Yogurt' => 'Yogurt', | ||||
| 	'Cheese' => 'Cheese', | ||||
| 	'Cold cuts' => 'Cold cuts', | ||||
| 	'Paprika' => 'Paprika', | ||||
| 	'Cucumber' => 'Cucumber', | ||||
| 	'Radish' => 'Radish', | ||||
| 	'Tomato' => 'Tomato', | ||||
| 	'Changed towels in the bathroom' => 'Changed towels in the bathroom', | ||||
| 	'Cleaned the kitchen floor' => 'Cleaned the kitchen floor', | ||||
| 	'Warranty ends' => 'Warranty ends', | ||||
| 	'TV remote control' => 'TV remote control', | ||||
| 	'Alarm clock' => 'Alarm clock', | ||||
| 	'Heat remote control' => 'Heat remote control', | ||||
| 	'Lawn mowed in the garden' => 'Lawn mowed in the garden', | ||||
| 	'Some good snacks' => 'Some good snacks', | ||||
| 	'Pizza dough' => 'Pizza dough', | ||||
| 	'Sieved tomatoes' => 'Sieved tomatoes', | ||||
| 	'Salami' => 'Salami', | ||||
| 	'Toast' => 'Toast', | ||||
| 	'Minced meat' => 'Minced meat', | ||||
| 	'Pizza' => 'Pizza', | ||||
| 	'Spaghetti bolognese' => 'Spaghetti bolognese', | ||||
| 	'Sandwiches' => 'Sandwiches', | ||||
| 	'English' => 'English', | ||||
| 	'German' => 'German', | ||||
| 	'Italian' => 'Italian', | ||||
| 	'Demo in different language' => 'Demo in different language', | ||||
| 	'This is the note content of the recipe ingredient' => 'This is the note content of the recipe ingredient', | ||||
| 	'Demo User' => 'Demo User', | ||||
| 	'Gram' => 'Gram', | ||||
| 	'Grams' => 'Grams', | ||||
| 	'Flour' => 'Flour', | ||||
| 	'Pancakes' => 'Pancakes', | ||||
| 	'Sugar' => 'Sugar', | ||||
| 	'Home' => 'Home', | ||||
| 	'Life' => 'Life', | ||||
| 	'Projects' => 'Projects', | ||||
| 	'Repair the garage door' => 'Repair the garage door', | ||||
| 	'Fork and improve grocy' => 'Fork and improve grocy', | ||||
| 	'Find a solution for what to do when I forget the door keys' => 'Find a solution for what to do when I forget the door keys', | ||||
| 	'Sweets' => 'Sweets', | ||||
| 	'Bakery products' => 'Bakery products', | ||||
| 	'Tinned food' => 'Tinned food', | ||||
| 	'Butchery products' => 'Butchery products', | ||||
| 	'Vegetables/Fruits' => 'Vegetables/Fruits', | ||||
| 	'Refrigerated products' => 'Refrigerated products', | ||||
| 	'Coffee machine' => 'Coffee machine', | ||||
| 	'Dishwasher' => 'Dishwasher', | ||||
| 	'Liter' => 'Liter', | ||||
| 	'Liters' => 'Liters', | ||||
| 	'Bottle' => 'Bottle', | ||||
| 	'Bottles' => 'Bottles', | ||||
| 	'Milk' => 'Milk', | ||||
| 	'Chocolate sauce' => 'Chocolate sauce', | ||||
| 	'Milliliters' => 'Milliliters', | ||||
| 	'Milliliter' => 'Milliliter', | ||||
| 	'Bottom' => 'Bottom', | ||||
| 	'Topping' => 'Topping', | ||||
| 	'French' => 'French', | ||||
| 	'Turkish' => 'Turkish', | ||||
| 	'Spanish' => 'Spanish' | ||||
| ); | ||||
							
								
								
									
										8
									
								
								localization/ta/stock_transaction_types.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								localization/ta/stock_transaction_types.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'purchase' => 'Purchase', | ||||
| 	'consume' => 'Consume', | ||||
| 	'inventory-correction' => 'Inventory correction', | ||||
| 	'product-opened' => 'Product opened' | ||||
| ); | ||||
							
								
								
									
										348
									
								
								localization/ta/strings.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										348
									
								
								localization/ta/strings.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,348 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'Stock overview' => 'Stock overview', | ||||
| 	'#1 products expiring within the next #2 days' => '#1 products expiring within the next #2 days', | ||||
| 	'#1 products are already expired' => '#1 products are already expired', | ||||
| 	'#1 products are below defined min. stock amount' => '#1 products are below defined min. stock amount', | ||||
| 	'Product' => 'Product', | ||||
| 	'Amount' => 'Amount', | ||||
| 	'Next best before date' => 'Next best before date', | ||||
| 	'Logout' => 'Logout', | ||||
| 	'Chores overview' => 'Chores overview', | ||||
| 	'Batteries overview' => 'Batteries overview', | ||||
| 	'Purchase' => 'Purchase', | ||||
| 	'Consume' => 'Consume', | ||||
| 	'Inventory' => 'Inventory', | ||||
| 	'Shopping list' => 'Shopping list', | ||||
| 	'Chore tracking' => 'Chore tracking', | ||||
| 	'Battery tracking' => 'Battery tracking', | ||||
| 	'Products' => 'Products', | ||||
| 	'Locations' => 'Locations', | ||||
| 	'Quantity units' => 'Quantity units', | ||||
| 	'Chores' => 'Chores', | ||||
| 	'Batteries' => 'Batteries', | ||||
| 	'Chore' => 'Chore', | ||||
| 	'Next estimated tracking' => 'Next estimated tracking', | ||||
| 	'Last tracked' => 'Last tracked', | ||||
| 	'Battery' => 'Battery', | ||||
| 	'Last charged' => 'Last charged', | ||||
| 	'Next planned charge cycle' => 'Next planned charge cycle', | ||||
| 	'Best before' => 'Best before', | ||||
| 	'OK' => 'OK', | ||||
| 	'Product overview' => 'Product overview', | ||||
| 	'Stock quantity unit' => 'Stock quantity unit', | ||||
| 	'Stock amount' => 'Stock amount', | ||||
| 	'Last purchased' => 'Last purchased', | ||||
| 	'Last used' => 'Last used', | ||||
| 	'Spoiled' => 'Spoiled', | ||||
| 	'Barcode lookup is disabled' => 'Barcode lookup is disabled', | ||||
| 	'will be added to the list of barcodes for the selected product on submit' => 'will be added to the list of barcodes for the selected product on submit', | ||||
| 	'New amount' => 'New amount', | ||||
| 	'Note' => 'Note', | ||||
| 	'Tracked time' => 'Tracked time', | ||||
| 	'Chore overview' => 'Chore overview', | ||||
| 	'Tracked count' => 'Tracked count', | ||||
| 	'Battery overview' => 'Battery overview', | ||||
| 	'Charge cycles count' => 'Charge cycles count', | ||||
| 	'Create shopping list item' => 'Create shopping list item', | ||||
| 	'Edit shopping list item' => 'Edit shopping list item', | ||||
| 	'Save' => 'Save', | ||||
| 	'Add' => 'Add', | ||||
| 	'Name' => 'Name', | ||||
| 	'Location' => 'Location', | ||||
| 	'Min. stock amount' => 'Min. stock amount', | ||||
| 	'QU purchase' => 'QU purchase', | ||||
| 	'QU stock' => 'QU stock', | ||||
| 	'QU factor' => 'QU factor', | ||||
| 	'Description' => 'Description', | ||||
| 	'Create product' => 'Create product', | ||||
| 	'Barcode(s)' => 'Barcode(s)', | ||||
| 	'Minimum stock amount' => 'Minimum stock amount', | ||||
| 	'Default best before days' => 'Default best before days', | ||||
| 	'Quantity unit purchase' => 'Quantity unit purchase', | ||||
| 	'Quantity unit stock' => 'Quantity unit stock', | ||||
| 	'Factor purchase to stock quantity unit' => 'Factor purchase to stock quantity unit', | ||||
| 	'Create location' => 'Create location', | ||||
| 	'Create quantity unit' => 'Create quantity unit', | ||||
| 	'Period type' => 'Period type', | ||||
| 	'Period days' => 'Period days', | ||||
| 	'Create chore' => 'Create chore', | ||||
| 	'Used in' => 'Used in', | ||||
| 	'Create battery' => 'Create battery', | ||||
| 	'Edit battery' => 'Edit battery', | ||||
| 	'Edit chore' => 'Edit chore', | ||||
| 	'Edit quantity unit' => 'Edit quantity unit', | ||||
| 	'Edit product' => 'Edit product', | ||||
| 	'Edit location' => 'Edit location', | ||||
| 	'Record data' => 'Record data', | ||||
| 	'Manage master data' => 'Manage master data', | ||||
| 	'This will apply to added products' => 'This will apply to added products', | ||||
| 	'never' => 'never', | ||||
| 	'Add products that are below defined min. stock amount' => 'Add products that are below defined min. stock amount', | ||||
| 	'For purchases this amount of days will be added to today for the best before date suggestion' => 'For purchases this amount of days will be added to today for the best before date suggestion', | ||||
| 	'This means 1 #1 purchased will be converted into #2 #3 in stock' => 'This means 1 #1 purchased will be converted into #2 #3 in stock', | ||||
| 	'Login' => 'Login', | ||||
| 	'Username' => 'Username', | ||||
| 	'Password' => 'Password', | ||||
| 	'Invalid credentials, please try again' => 'Invalid credentials, please try again', | ||||
| 	'Are you sure to delete battery "#1"?' => 'Are you sure to delete battery "#1"?', | ||||
| 	'Yes' => 'Yes', | ||||
| 	'No' => 'No', | ||||
| 	'Are you sure to delete chore "#1"?' => 'Are you sure to delete chore "#1"?', | ||||
| 	'"#1" could not be resolved to a product, how do you want to proceed?' => '"#1" could not be resolved to a product, how do you want to proceed?', | ||||
| 	'Create or assign product' => 'Create or assign product', | ||||
| 	'Cancel' => 'Cancel', | ||||
| 	'Add as new product' => 'Add as new product', | ||||
| 	'Add as barcode to existing product' => 'Add as barcode to existing product', | ||||
| 	'Add as new product and prefill barcode' => 'Add as new product and prefill barcode', | ||||
| 	'Are you sure to delete quantity unit "#1"?' => 'Are you sure to delete quantity unit "#1"?', | ||||
| 	'Are you sure to delete product "#1"?' => 'Are you sure to delete product "#1"?', | ||||
| 	'Are you sure to delete location "#1"?' => 'Are you sure to delete location "#1"?', | ||||
| 	'Manage API keys' => 'Manage API keys', | ||||
| 	'REST API & data model documentation' => 'REST API & data model documentation', | ||||
| 	'API keys' => 'API keys', | ||||
| 	'Create new API key' => 'Create new API key', | ||||
| 	'API key' => 'API key', | ||||
| 	'Expires' => 'Expires', | ||||
| 	'Created' => 'Created', | ||||
| 	'This product is not in stock' => 'This product is not in stock', | ||||
| 	'This means #1 will be added to stock' => 'This means #1 will be added to stock', | ||||
| 	'This means #1 will be removed from stock' => 'This means #1 will be removed from stock', | ||||
| 	'This means it is estimated that a new execution of this chore is tracked #1 days after the last was tracked' => 'This means it is estimated that a new execution of this chore is tracked #1 days after the last was tracked', | ||||
| 	'Removed #1 #2 of #3 from stock' => 'Removed #1 #2 of #3 from stock', | ||||
| 	'About grocy' => 'About grocy', | ||||
| 	'Close' => 'Close', | ||||
| 	'#1 batteries are due to be charged within the next #2 days' => '#1 batteries are due to be charged within the next #2 days', | ||||
| 	'#1 batteries are overdue to be charged' => '#1 batteries are overdue to be charged', | ||||
| 	'#1 chores are due to be done within the next #2 days' => '#1 chores are due to be done within the next #2 days', | ||||
| 	'#1 chores are overdue to be done' => '#1 chores are overdue to be done', | ||||
| 	'Released on' => 'Released on', | ||||
| 	'Consume #3 #1 of #2' => 'Consume #3 #1 of #2', | ||||
| 	'Added #1 #2 of #3 to stock' => 'Added #1 #2 of #3 to stock', | ||||
| 	'Stock amount of #1 is now #2 #3' => 'Stock amount of #1 is now #2 #3', | ||||
| 	'Tracked execution of chore #1 on #2' => 'Tracked execution of chore #1 on #2', | ||||
| 	'Tracked charge cycle of battery #1 on #2' => 'Tracked charge cycle of battery #1 on #2', | ||||
| 	'Consume all #1 which are currently in stock' => 'Consume all #1 which are currently in stock', | ||||
| 	'All' => 'All', | ||||
| 	'Track charge cycle of battery #1' => 'Track charge cycle of battery #1', | ||||
| 	'Track execution of chore #1' => 'Track execution of chore #1', | ||||
| 	'Filter by location' => 'Filter by location', | ||||
| 	'Search' => 'Search', | ||||
| 	'Not logged in' => 'Not logged in', | ||||
| 	'You have to select a product' => 'You have to select a product', | ||||
| 	'You have to select a chore' => 'You have to select a chore', | ||||
| 	'You have to select a battery' => 'You have to select a battery', | ||||
| 	'A name is required' => 'A name is required', | ||||
| 	'A location is required' => 'A location is required', | ||||
| 	'The amount cannot be lower than #1' => 'The amount cannot be lower than #1', | ||||
| 	'This cannot be negative' => 'This cannot be negative', | ||||
| 	'A quantity unit is required' => 'A quantity unit is required', | ||||
| 	'A period type is required' => 'A period type is required', | ||||
| 	'A best before date is required and must be later than today' => 'A best before date is required and must be later than today', | ||||
| 	'Settings' => 'Settings', | ||||
| 	'This can only be before now' => 'This can only be before now', | ||||
| 	'Calendar' => 'Calendar', | ||||
| 	'Recipes' => 'Recipes', | ||||
| 	'Edit recipe' => 'Edit recipe', | ||||
| 	'New recipe' => 'New recipe', | ||||
| 	'Ingredients list' => 'Ingredients list', | ||||
| 	'Add recipe ingredient' => 'Add recipe ingredient', | ||||
| 	'Edit recipe ingredient' => 'Edit recipe ingredient', | ||||
| 	'Are you sure to delete recipe "#1"?' => 'Are you sure to delete recipe "#1"?', | ||||
| 	'Are you sure to delete recipe ingredient "#1"?' => 'Are you sure to delete recipe ingredient "#1"?', | ||||
| 	'Are you sure to empty the shopping list?' => 'Are you sure to empty the shopping list?', | ||||
| 	'Clear list' => 'Clear list', | ||||
| 	'Requirements fulfilled' => 'Requirements fulfilled', | ||||
| 	'Put missing products on shopping list' => 'Put missing products on shopping list', | ||||
| 	'Not enough in stock, #1 ingredients missing' => 'Not enough in stock, #1 ingredients missing', | ||||
| 	'Enough in stock' => 'Enough in stock', | ||||
| 	'Not enough in stock, #1 ingredients missing but already on the shopping list' => 'Not enough in stock, #1 ingredients missing but already on the shopping list', | ||||
| 	'Expand to fullscreen' => 'Expand to fullscreen', | ||||
| 	'Ingredients' => 'Ingredients', | ||||
| 	'Preparation' => 'Preparation', | ||||
| 	'Recipe' => 'Recipe', | ||||
| 	'Not enough in stock, #1 missing, #2 already on shopping list' => 'Not enough in stock, #1 missing, #2 already on shopping list', | ||||
| 	'Show notes' => 'Show notes', | ||||
| 	'Put missing amount on shopping list' => 'Put missing amount on shopping list', | ||||
| 	'Are you sure to put all missing ingredients for recipe "#1" on the shopping list?' => 'Are you sure to put all missing ingredients for recipe "#1" on the shopping list?', | ||||
| 	'Added for recipe #1' => 'Added for recipe #1', | ||||
| 	'Manage users' => 'Manage users', | ||||
| 	'User' => 'User', | ||||
| 	'Users' => 'Users', | ||||
| 	'Are you sure to delete user "#1"?' => 'Are you sure to delete user "#1"?', | ||||
| 	'Create user' => 'Create user', | ||||
| 	'Edit user' => 'Edit user', | ||||
| 	'First name' => 'First name', | ||||
| 	'Last name' => 'Last name', | ||||
| 	'A username is required' => 'A username is required', | ||||
| 	'Confirm password' => 'Confirm password', | ||||
| 	'Passwords do not match' => 'Passwords do not match', | ||||
| 	'Change password' => 'Change password', | ||||
| 	'Done by' => 'Done by', | ||||
| 	'Last done by' => 'Last done by', | ||||
| 	'Unknown' => 'Unknown', | ||||
| 	'Filter by chore' => 'Filter by chore', | ||||
| 	'Chores journal' => 'Chores journal', | ||||
| 	'0 means suggestions for the next charge cycle are disabled' => '0 means suggestions for the next charge cycle are disabled', | ||||
| 	'Charge cycle interval (days)' => 'Charge cycle interval (days)', | ||||
| 	'Last price' => 'Last price', | ||||
| 	'Price history' => 'Price history', | ||||
| 	'No price history available' => 'No price history available', | ||||
| 	'Price' => 'Price', | ||||
| 	'in #1 per purchase quantity unit' => 'in #1 per purchase quantity unit', | ||||
| 	'The price cannot be lower than #1' => 'The price cannot be lower than #1', | ||||
| 	'#1 product expires within the next #2 days' => '#1 product expires within the next #2 days', | ||||
| 	'#1 product is already expired' => '#1 product is already expired', | ||||
| 	'#1 product is below defined min. stock amount' => '#1 product is below defined min. stock amount', | ||||
| 	'Unit' => 'Unit', | ||||
| 	'Units' => 'Units', | ||||
| 	'#1 chore is due to be done within the next #2 days' => '#1 chore is due to be done within the next #2 days', | ||||
| 	'#1 chore is overdue to be done' => '#1 chore is overdue to be done', | ||||
| 	'#1 battery is due to be charged within the next #2 days' => '#1 battery is due to be charged within the next #2 days', | ||||
| 	'#1 battery is overdue to be charged' => '#1 battery is overdue to be charged', | ||||
| 	'#1 unit was automatically added and will apply in addition to the amount entered here' => '#1 unit was automatically added and will apply in addition to the amount entered here', | ||||
| 	'in singular form' => 'in singular form', | ||||
| 	'in plural form' => 'in plural form', | ||||
| 	'Never expires' => 'Never expires', | ||||
| 	'This cannot be lower than #1' => 'This cannot be lower than #1', | ||||
| 	'-1 means that this product never expires' => '-1 means that this product never expires', | ||||
| 	'Quantity unit' => 'Quantity unit', | ||||
| 	'Only check if a single unit is in stock (a different quantity can then be used above)' => 'Only check if a single unit is in stock (a different quantity can then be used above)', | ||||
| 	'Are you sure to consume all ingredients needed by recipe "#1" (ingredients marked with "check only if a single unit is in stock" will be ignored)?' => 'Are you sure to consume all ingredients needed by recipe "#1" (ingredients marked with "check only if a single unit is in stock" will be ignored)?', | ||||
| 	'Removed all ingredients of recipe "#1" from stock' => 'Removed all ingredients of recipe "#1" from stock', | ||||
| 	'Consume all ingredients needed by this recipe' => 'Consume all ingredients needed by this recipe', | ||||
| 	'Click to show technical details' => 'Click to show technical details', | ||||
| 	'Error while saving, probably this item already exists' => 'Error while saving, probably this item already exists', | ||||
| 	'Error details' => 'Error details', | ||||
| 	'Tasks' => 'Tasks', | ||||
| 	'Show done tasks' => 'Show done tasks', | ||||
| 	'Task' => 'Task', | ||||
| 	'Due' => 'Due', | ||||
| 	'Assigned to' => 'Assigned to', | ||||
| 	'Mark task "#1" as completed' => 'Mark task "#1" as completed', | ||||
| 	'Uncategorized' => 'Uncategorized', | ||||
| 	'Task categories' => 'Task categories', | ||||
| 	'Create task' => 'Create task', | ||||
| 	'A due date is required' => 'A due date is required', | ||||
| 	'Category' => 'Category', | ||||
| 	'Edit task' => 'Edit task', | ||||
| 	'Are you sure to delete task "#1"?' => 'Are you sure to delete task "#1"?', | ||||
| 	'#1 task is due to be done within the next #2 days' => '#1 task is due to be done within the next #2 days', | ||||
| 	'#1 tasks are due to be done within the next #2 days' => '#1 tasks are due to be done within the next #2 days', | ||||
| 	'#1 task is overdue to be done' => '#1 task is overdue to be done', | ||||
| 	'#1 tasks are overdue to be done' => '#1 tasks are overdue to be done', | ||||
| 	'Edit task category' => 'Edit task category', | ||||
| 	'Create task category' => 'Create task category', | ||||
| 	'Product groups' => 'Product groups', | ||||
| 	'Ungrouped' => 'Ungrouped', | ||||
| 	'Create product group' => 'Create product group', | ||||
| 	'Edit product group' => 'Edit product group', | ||||
| 	'Product group' => 'Product group', | ||||
| 	'Are you sure to delete product group "#1"?' => 'Are you sure to delete product group "#1"?', | ||||
| 	'Stay logged in permanently' => 'Stay logged in permanently', | ||||
| 	'When not set, you will get logged out at latest after 30 days' => 'When not set, you will get logged out at latest after 30 days', | ||||
| 	'Filter by status' => 'Filter by status', | ||||
| 	'Below min. stock amount' => 'Below min. stock amount', | ||||
| 	'Expiring soon' => 'Expiring soon', | ||||
| 	'Already expired' => 'Already expired', | ||||
| 	'Due soon' => 'Due soon', | ||||
| 	'Overdue' => 'Overdue', | ||||
| 	'View settings' => 'View settings', | ||||
| 	'Auto reload on external changes' => 'Auto reload on external changes', | ||||
| 	'Enable night mode' => 'Enable night mode', | ||||
| 	'Auto enable in time range' => 'Auto enable in time range', | ||||
| 	'From' => 'From', | ||||
| 	'in format' => 'in format', | ||||
| 	'To' => 'To', | ||||
| 	'Time range goes over midnight' => 'Time range goes over midnight', | ||||
| 	'Product picture' => 'Product picture', | ||||
| 	'No file selected' => 'No file selected', | ||||
| 	'If you don\'t select a file, the current picture will not be altered' => 'If you don\'t select a file, the current picture will not be altered', | ||||
| 	'Delete' => 'Delete', | ||||
| 	'The current picture will be deleted when you save the product' => 'The current picture will be deleted when you save the product', | ||||
| 	'Select file' => 'Select file', | ||||
| 	'Image of product #1' => 'Image of product #1', | ||||
| 	'This product cannot be deleted because it is in stock, please remove the stock amount first.' => 'This product cannot be deleted because it is in stock, please remove the stock amount first.', | ||||
| 	'Delete not possible' => 'Delete not possible', | ||||
| 	'Equipment' => 'Equipment', | ||||
| 	'Instruction manual' => 'Instruction manual', | ||||
| 	'The selected equipment has no instruction manual' => 'The selected equipment has no instruction manual', | ||||
| 	'Notes' => 'Notes', | ||||
| 	'Edit equipment' => 'Edit equipment', | ||||
| 	'Create equipment' => 'Create equipment', | ||||
| 	'If you don\'t select a file, the current instruction manual will not be altered' => 'If you don\'t select a file, the current instruction manual will not be altered', | ||||
| 	'No instruction manual available' => 'No instruction manual available', | ||||
| 	'The current instruction manual will be deleted when you save the equipment' => 'The current instruction manual will be deleted when you save the equipment', | ||||
| 	'No picture available' => 'No picture available', | ||||
| 	'Filter by product group' => 'Filter by product group', | ||||
| 	'Presets for new products' => 'Presets for new products', | ||||
| 	'Included recipes' => 'Included recipes', | ||||
| 	'A recipe is required' => 'A recipe is required', | ||||
| 	'Add included recipe' => 'Add included recipe', | ||||
| 	'Edit included recipe' => 'Edit included recipe', | ||||
| 	'Group' => 'Group', | ||||
| 	'This will be used as a headline to group ingredients together' => 'This will be used as a headline to group ingredients together', | ||||
| 	'Journal' => 'Journal', | ||||
| 	'Stock journal' => 'Stock journal', | ||||
| 	'Filter by product' => 'Filter by product', | ||||
| 	'Booking time' => 'Booking time', | ||||
| 	'Booking type' => 'Booking type', | ||||
| 	'Undo booking' => 'Undo booking', | ||||
| 	'Undone on' => 'Undone on', | ||||
| 	'Batteries journal' => 'Batteries journal', | ||||
| 	'Filter by battery' => 'Filter by battery', | ||||
| 	'Undo charge cycle' => 'Undo charge cycle', | ||||
| 	'Undo chore execution' => 'Undo chore execution', | ||||
| 	'Chore execution successfully undone' => 'Chore execution successfully undone', | ||||
| 	'Undo' => 'Undo', | ||||
| 	'Booking successfully undone' => 'Booking successfully undone', | ||||
| 	'Charge cycle successfully undone' => 'Charge cycle successfully undone', | ||||
| 	'This cannot be negative and must be an integral number' => 'This cannot be negative and must be an integral number', | ||||
| 	'Disable stock fulfillment checking for this ingredient' => 'Disable stock fulfillment checking for this ingredient', | ||||
| 	'Add all list items to stock' => 'Add all list items to stock', | ||||
| 	'Add #3 #1 of #2 to stock' => 'Add #3 #1 of #2 to stock', | ||||
| 	'Adding shopping list item #1 of #2' => 'Adding shopping list item #1 of #2', | ||||
| 	'Use a specific stock item' => 'Use a specific stock item', | ||||
| 	'The first item in this list would be picked by the default rule which is "First expiring first, then first in first out"' => 'The first item in this list would be picked by the default rule which is "First expiring first, then first in first out"', | ||||
| 	'Mark #3 #1 of #2 as open' => 'Mark #3 #1 of #2 as open', | ||||
| 	'When a product was marked as opened, the best before date will be replaced by today + this amount of days (a value of 0 disables this)' => 'When a product was marked as opened, the best before date will be replaced by today + this amount of days (a value of 0 disables this)', | ||||
| 	'Default best before days after opened' => 'Default best before days after opened', | ||||
| 	'Marked #1 #2 of #3 as opened' => 'Marked #1 #2 of #3 as opened', | ||||
| 	'Mark as opened' => 'Mark as opened', | ||||
| 	'Expires on #1; Bought on #2' => 'Expires on #1; Bought on #2', | ||||
| 	'Not opened' => 'Not opened', | ||||
| 	'Opened' => 'Opened', | ||||
| 	'Mark #3 #1 of #2 as open' => 'Mark #3 #1 of #2 as open', | ||||
| 	'#1 opened' => '#1 opened', | ||||
| 	'Product expires' => 'Product expires', | ||||
| 	'Task due' => 'Task due', | ||||
| 	'Chore due' => 'Chore due', | ||||
| 	'Battery charge cycle due' => 'Battery charge cycle due', | ||||
| 	'Show clock in header' => 'Show clock in header', | ||||
| 	'Stock settings' => 'Stock settings', | ||||
| 	'Shopping list to stock workflow' => 'Shopping list to stock workflow', | ||||
| 	'Automatically do the booking using the last price and the amount of the shopping list item, if the product has "Default best before days" set' => 'Automatically do the booking using the last price and the amount of the shopping list item, if the product has "Default best before days" set', | ||||
| 	'Skip' => 'Skip', | ||||
| 	'Servings' => 'Servings', | ||||
| 	'Costs' => 'Costs', | ||||
| 	'Based on the prices of the last purchase per product' => 'Based on the prices of the last purchase per product', | ||||
| 	'The ingredients listed here result in this amount of servings' => 'The ingredients listed here result in this amount of servings', | ||||
| 	'Do not check against the shopping list when adding missing items to it' => 'Do not check against the shopping list when adding missing items to it', | ||||
| 	'By default the amount to be added to the shopping list is "needed amount - stock amount - shopping list amount" - when this is enabled, it is only checked against the stock amount, not against what is already on the shopping list' => 'By default the amount to be added to the shopping list is "needed amount - stock amount - shopping list amount" - when this is enabled, it is only checked against the stock amount, not against what is already on the shopping list', | ||||
| 	'Picture' => 'Picture', | ||||
| 	'Uncheck ingredients to not put them on the shopping list' => 'Uncheck ingredients to not put them on the shopping list', | ||||
| 	'This is for statistical purposes only' => 'This is for statistical purposes only', | ||||
| 	'You have to select a recipe' => 'You have to select a recipe', | ||||
| 	'Key type' => 'Key type', | ||||
| 	'Share/Integrate calendar (iCal)' => 'Share/Integrate calendar (iCal)', | ||||
| 	'Use the following (public) URL to share or integrate the calendar in iCal format' => 'Use the following (public) URL to share or integrate the calendar in iCal format', | ||||
| 	'Allow partial units in stock' => 'Allow partial units in stock', | ||||
| 	'Enable tare weight handling' => 'Enable tare weight handling', | ||||
| 	'This is useful e.g. for flour in jars - on purchase/consume/inventory you always weigh the whole jar, the amount to be posted is then automatically calculated based on what is in stock and the tare weight defined below' => 'This is useful e.g. for flour in jars - on purchase/consume/inventory you always weigh the whole jar, the amount to be posted is then automatically calculated based on what is in stock and the tare weight defined below', | ||||
| 	'Tare weight' => 'Tare weight', | ||||
| 	'Tare weight handling enabled - please weigh the whole container, the amount to be posted will be automatically calculcated' => 'Tare weight handling enabled - please weigh the whole container, the amount to be posted will be automatically calculcated', | ||||
| 	'You have to select a location' => 'You have to select a location', | ||||
| 	'List' => 'List', | ||||
| 	'Gallery' => 'Gallery' | ||||
| ); | ||||
							
								
								
									
										6
									
								
								localization/tr/chore_types.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								localization/tr/chore_types.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'manually' => 'Manuel', | ||||
| 	'dynamic-regular' => 'Dinamik düzenli' | ||||
| ); | ||||
							
								
								
									
										10
									
								
								localization/tr/component_translations.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								localization/tr/component_translations.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'timeago_locale' => 'tr', | ||||
| 	'timeago_nan' => 'NaN yıl önce', | ||||
| 	'moment_locale' => 'tr', | ||||
| 	'datatables_localization' => '{"sEmptyTable":"Tablo içerisinde uygun veri yok","sInfo":"_TOTAL_ girdiden _START_ - _END_ aralığı gösteriliyor","sInfoEmpty":"0 girdiden 0 - 0 aralığı gösteriliyor","sInfoFiltered":"(_MAX_ toplam girdiden filtrelendi)","sInfoPostFix":"","sInfoThousands":",","sLengthMenu":"_MENU_ girdilerini göster","sLoadingRecords":"Yükleniyor...","sProcessing":"İşleniyor...","sSearch":"Ara:","sZeroRecords":"Eşleşen kayıt bulunamadı","oPaginate":{"sFirst":"İlk","sLast":"Son","sNext":"Sonraki","sPrevious":"Önceki"},"oAria":{"sSortAscending":": sütunu artan sıraya göre sıralamak için aktif edin","sSortDescending":": sütunu azalan sıraya göre sıralamak için aktif edin"}}', | ||||
| 	'summernote_locale' => 'tr-TR', | ||||
| 	'fullcalendar_locale' => 'tr' | ||||
| ); | ||||
							
								
								
									
										89
									
								
								localization/tr/demo_data.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								localization/tr/demo_data.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,89 @@ | ||||
| <?php | ||||
|  | ||||
| return array( | ||||
| 	'Cookies' => 'Kurabiyeler', | ||||
| 	'Chocolate' => 'Çikolata', | ||||
| 	'Pantry' => 'Kiler', | ||||
| 	'Candy cupboard' => 'Şeker dolabı', | ||||
| 	'Tinned food cupboard' => 'Konserve dolabı', | ||||
| 	'Fridge' => 'Buzdolabı', | ||||
| 	'Piece' => 'Tane', | ||||
| 	'Pieces' => 'Tane', | ||||
| 	'Pack' => 'Paket', | ||||
| 	'Packs' => 'Paket', | ||||
| 	'Glass' => 'Bardak', | ||||
| 	'Glasses' => 'Bardak', | ||||
| 	'Tin' => 'Teneke', | ||||
| 	'Tins' => 'Teneke', | ||||
| 	'Can' => 'Konserve', | ||||
| 	'Cans' => 'Konserve', | ||||
| 	'Bunch' => 'Demet', | ||||
| 	'Bunches' => 'Demet', | ||||
| 	'Gummy bears' => 'Jelibon ayı', | ||||
| 	'Crisps' => 'Cips', | ||||
| 	'Eggs' => 'Yumurta', | ||||
| 	'Noodles' => 'Noodle', | ||||
| 	'Pickles' => 'Turşu', | ||||
| 	'Gulash soup' => 'Gulaş çorbası', | ||||
| 	'Yogurt' => 'Yoğurt', | ||||
| 	'Cheese' => 'Peynir', | ||||
| 	'Cold cuts' => 'Söğüş', | ||||
| 	'Paprika' => 'Kırmızı biber', | ||||
| 	'Cucumber' => 'Salatalık', | ||||
| 	'Radish' => 'Turp', | ||||
| 	'Tomato' => 'Domates', | ||||
| 	'Changed towels in the bathroom' => 'Banyoda değişen havlular', | ||||
| 	'Cleaned the kitchen floor' => 'Temizlenen mutfak zeminleri', | ||||
| 	'Warranty ends' => 'Garantisi bitiyor', | ||||
| 	'TV remote control' => 'TV uzaktan kumandası', | ||||
| 	'Alarm clock' => 'Alarm saati', | ||||
| 	'Heat remote control' => 'Uzaktan ısı kontrolü', | ||||
| 	'Lawn mowed in the garden' => 'Biçilen bahçeler', | ||||
| 	'Some good snacks' => 'Bazı iyi atıştırmalıklar', | ||||
| 	'Pizza dough' => 'Pizza hamuru', | ||||
| 	'Sieved tomatoes' => 'Elenmiş domates', | ||||
| 	'Salami' => 'Salam', | ||||
| 	'Toast' => 'Tost', | ||||
| 	'Minced meat' => 'Kıyma', | ||||
| 	'Pizza' => 'Pizza', | ||||
| 	'Spaghetti bolognese' => 'Spagetti bolonez', | ||||
| 	'Sandwiches' => 'Sandviç', | ||||
| 	'English' => 'İngilizce', | ||||
| 	'German' => 'Almanca', | ||||
| 	'Italian' => 'İtalyanca', | ||||
| 	'Demo in different language' => 'Farklı dilde bir demo', | ||||
| 	'This is the note content of the recipe ingredient' => 'Bu, tarif malzemesi için bir not içeriği', | ||||
| 	'Demo User' => 'Demo Kullanıcısı', | ||||
| 	'Gram' => 'Gram', | ||||
| 	'Grams' => 'Gram', | ||||
| 	'Flour' => 'Un', | ||||
| 	'Pancakes' => 'Pankek', | ||||
| 	'Sugar' => 'Şeker', | ||||
| 	'Home' => 'Ev', | ||||
| 	'Life' => 'Yaşam', | ||||
| 	'Projects' => 'Projeler', | ||||
| 	'Repair the garage door' => 'Garaj kapısını tamir et', | ||||
| 	'Fork and improve grocy' => 'grocy\'i forkla ve geliştir', | ||||
| 	'Find a solution for what to do when I forget the door keys' => 'Anahtarları unuttuğumda ne yapmam gerektiğine dair bir çözüm bul', | ||||
| 	'Sweets' => 'Tatlılar', | ||||
| 	'Bakery products' => 'Fırın ürünleri', | ||||
| 	'Tinned food' => 'Konserve yiyecekler', | ||||
| 	'Butchery products' => 'Kasap ürünleri', | ||||
| 	'Vegetables/Fruits' => 'Sebze/Meyve', | ||||
| 	'Refrigerated products' => 'Dondurulmuş ürünler', | ||||
| 	'Coffee machine' => 'Kahve makinesi', | ||||
| 	'Dishwasher' => 'Bulaşık makinesi', | ||||
| 	'Liter' => 'Litre', | ||||
| 	'Liters' => 'Litre', | ||||
| 	'Bottle' => 'Şişe', | ||||
| 	'Bottles' => 'Şişe', | ||||
| 	'Milk' => 'Süt', | ||||
| 	'Chocolate sauce' => 'Çikolata sosu', | ||||
| 	'Milliliters' => 'Mililitre', | ||||
| 	'Milliliter' => 'Mililitre', | ||||
| 	'Bottom' => 'Dip', | ||||
| 	'Topping' => 'Süsleme', | ||||
| 	'French' => 'Fransızca', | ||||
| 	'Turkish' => 'Türkçe', | ||||
| 	'Spanish' => 'İspanyolca' | ||||
| ); | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user