mirror of
https://github.com/grocy/grocy.git
synced 2025-09-17 02:05:47 +00:00
Compare commits
191 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 |
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": {
|
||||
|
354
composer.lock
generated
354
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.7.5",
|
||||
"version": "v5.8.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/illuminate/container.git",
|
||||
"reference": "0fc33b14ae6cf9a1e694fd43f2a274e590a824b2"
|
||||
"reference": "b984960d2634c6be97b0dd368a8953e8c4e06ec7"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/illuminate/container/zipball/0fc33b14ae6cf9a1e694fd43f2a274e590a824b2",
|
||||
"reference": "0fc33b14ae6cf9a1e694fd43f2a274e590a824b2",
|
||||
"url": "https://api.github.com/repos/illuminate/container/zipball/b984960d2634c6be97b0dd368a8953e8c4e06ec7",
|
||||
"reference": "b984960d2634c6be97b0dd368a8953e8c4e06ec7",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"illuminate/contracts": "5.7.*",
|
||||
"illuminate/contracts": "5.8.*",
|
||||
"illuminate/support": "5.8.*",
|
||||
"php": "^7.1.3",
|
||||
"psr/container": "^1.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "5.7-dev"
|
||||
"dev-master": "5.8-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -199,20 +251,20 @@
|
||||
],
|
||||
"description": "The Illuminate Container package.",
|
||||
"homepage": "https://laravel.com",
|
||||
"time": "2018-05-28T08:50:10+00:00"
|
||||
"time": "2019-03-03T15:13:35+00:00"
|
||||
},
|
||||
{
|
||||
"name": "illuminate/contracts",
|
||||
"version": "v5.7.5",
|
||||
"version": "v5.8.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/illuminate/contracts.git",
|
||||
"reference": "2daf3c078610f744e2a4dc2f44fb5060cce9835b"
|
||||
"reference": "3e3a9a654adbf798e05491a5dbf90112df1effde"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/illuminate/contracts/zipball/2daf3c078610f744e2a4dc2f44fb5060cce9835b",
|
||||
"reference": "2daf3c078610f744e2a4dc2f44fb5060cce9835b",
|
||||
"url": "https://api.github.com/repos/illuminate/contracts/zipball/3e3a9a654adbf798e05491a5dbf90112df1effde",
|
||||
"reference": "3e3a9a654adbf798e05491a5dbf90112df1effde",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -223,7 +275,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "5.7-dev"
|
||||
"dev-master": "5.8-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -243,32 +295,32 @@
|
||||
],
|
||||
"description": "The Illuminate Contracts package.",
|
||||
"homepage": "https://laravel.com",
|
||||
"time": "2018-09-18T12:50:05+00:00"
|
||||
"time": "2019-02-18T18:37:54+00:00"
|
||||
},
|
||||
{
|
||||
"name": "illuminate/events",
|
||||
"version": "v5.7.5",
|
||||
"version": "v5.8.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/illuminate/events.git",
|
||||
"reference": "4cf622acc05592f86d4a5c77ad1a544d38e58dee"
|
||||
"reference": "a85d7c273bc4e3357000c5fc4812374598515de3"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/illuminate/events/zipball/4cf622acc05592f86d4a5c77ad1a544d38e58dee",
|
||||
"reference": "4cf622acc05592f86d4a5c77ad1a544d38e58dee",
|
||||
"url": "https://api.github.com/repos/illuminate/events/zipball/a85d7c273bc4e3357000c5fc4812374598515de3",
|
||||
"reference": "a85d7c273bc4e3357000c5fc4812374598515de3",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"illuminate/container": "5.7.*",
|
||||
"illuminate/contracts": "5.7.*",
|
||||
"illuminate/support": "5.7.*",
|
||||
"illuminate/container": "5.8.*",
|
||||
"illuminate/contracts": "5.8.*",
|
||||
"illuminate/support": "5.8.*",
|
||||
"php": "^7.1.3"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "5.7-dev"
|
||||
"dev-master": "5.8-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -288,27 +340,27 @@
|
||||
],
|
||||
"description": "The Illuminate Events package.",
|
||||
"homepage": "https://laravel.com",
|
||||
"time": "2018-07-26T15:27:42+00:00"
|
||||
"time": "2019-02-18T18:37:54+00:00"
|
||||
},
|
||||
{
|
||||
"name": "illuminate/filesystem",
|
||||
"version": "v5.7.5",
|
||||
"version": "v5.8.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/illuminate/filesystem.git",
|
||||
"reference": "a09fae4470494dc9867609221b46fe844f2f3b70"
|
||||
"reference": "8aef3ed5028eea80fa20287b776d6ec8e7eafbba"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/illuminate/filesystem/zipball/a09fae4470494dc9867609221b46fe844f2f3b70",
|
||||
"reference": "a09fae4470494dc9867609221b46fe844f2f3b70",
|
||||
"url": "https://api.github.com/repos/illuminate/filesystem/zipball/8aef3ed5028eea80fa20287b776d6ec8e7eafbba",
|
||||
"reference": "8aef3ed5028eea80fa20287b776d6ec8e7eafbba",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"illuminate/contracts": "5.7.*",
|
||||
"illuminate/support": "5.7.*",
|
||||
"illuminate/contracts": "5.8.*",
|
||||
"illuminate/support": "5.8.*",
|
||||
"php": "^7.1.3",
|
||||
"symfony/finder": "^4.1"
|
||||
"symfony/finder": "^4.2"
|
||||
},
|
||||
"suggest": {
|
||||
"league/flysystem": "Required to use the Flysystem local and FTP drivers (^1.0).",
|
||||
@@ -320,7 +372,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "5.7-dev"
|
||||
"dev-master": "5.8-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -340,43 +392,45 @@
|
||||
],
|
||||
"description": "The Illuminate Filesystem package.",
|
||||
"homepage": "https://laravel.com",
|
||||
"time": "2018-08-14T19:42:44+00:00"
|
||||
"time": "2019-02-18T18:37:54+00:00"
|
||||
},
|
||||
{
|
||||
"name": "illuminate/support",
|
||||
"version": "v5.7.5",
|
||||
"version": "v5.8.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/illuminate/support.git",
|
||||
"reference": "f7c68e8c8aab200cc8ad84f974d5511cda58a742"
|
||||
"reference": "0f0291d1bc2f036af3fceb8e46900b58812533c4"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/illuminate/support/zipball/f7c68e8c8aab200cc8ad84f974d5511cda58a742",
|
||||
"reference": "f7c68e8c8aab200cc8ad84f974d5511cda58a742",
|
||||
"url": "https://api.github.com/repos/illuminate/support/zipball/0f0291d1bc2f036af3fceb8e46900b58812533c4",
|
||||
"reference": "0f0291d1bc2f036af3fceb8e46900b58812533c4",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"doctrine/inflector": "^1.1",
|
||||
"ext-json": "*",
|
||||
"ext-mbstring": "*",
|
||||
"illuminate/contracts": "5.7.*",
|
||||
"nesbot/carbon": "^1.26.3",
|
||||
"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.7.*).",
|
||||
"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.1).",
|
||||
"symfony/var-dumper": "Required to use the dd function (^4.1)."
|
||||
"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.7-dev"
|
||||
"dev-master": "5.8-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -399,35 +453,36 @@
|
||||
],
|
||||
"description": "The Illuminate Support package.",
|
||||
"homepage": "https://laravel.com",
|
||||
"time": "2018-09-19T18:36:57+00:00"
|
||||
"time": "2019-03-05T13:38:58+00:00"
|
||||
},
|
||||
{
|
||||
"name": "illuminate/view",
|
||||
"version": "v5.7.5",
|
||||
"version": "v5.8.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/illuminate/view.git",
|
||||
"reference": "3ccd29550afe61eb02ad9e4bae0c2e661aadd7af"
|
||||
"reference": "33818dc7b783f3afbeea9b0b09455c8cc89aa899"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/illuminate/view/zipball/3ccd29550afe61eb02ad9e4bae0c2e661aadd7af",
|
||||
"reference": "3ccd29550afe61eb02ad9e4bae0c2e661aadd7af",
|
||||
"url": "https://api.github.com/repos/illuminate/view/zipball/33818dc7b783f3afbeea9b0b09455c8cc89aa899",
|
||||
"reference": "33818dc7b783f3afbeea9b0b09455c8cc89aa899",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"illuminate/container": "5.7.*",
|
||||
"illuminate/contracts": "5.7.*",
|
||||
"illuminate/events": "5.7.*",
|
||||
"illuminate/filesystem": "5.7.*",
|
||||
"illuminate/support": "5.7.*",
|
||||
"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.1"
|
||||
"symfony/debug": "^4.2"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "5.7-dev"
|
||||
"dev-master": "5.8-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -447,7 +502,7 @@
|
||||
],
|
||||
"description": "The Illuminate View package.",
|
||||
"homepage": "https://laravel.com",
|
||||
"time": "2018-09-18T12:50:05+00:00"
|
||||
"time": "2019-02-27T12:03:43+00:00"
|
||||
},
|
||||
{
|
||||
"name": "morris/lessql",
|
||||
@@ -554,25 +609,30 @@
|
||||
},
|
||||
{
|
||||
"name": "nesbot/carbon",
|
||||
"version": "1.34.0",
|
||||
"version": "2.14.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/briannesbitt/Carbon.git",
|
||||
"reference": "1dbd3cb01c5645f3e7deda7aa46ef780d95fcc33"
|
||||
"reference": "a1f4f9abcde8241ce33bf5090896e9c16d0b4232"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/1dbd3cb01c5645f3e7deda7aa46ef780d95fcc33",
|
||||
"reference": "1dbd3cb01c5645f3e7deda7aa46ef780d95fcc33",
|
||||
"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": {
|
||||
@@ -584,7 +644,7 @@
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"": "src/"
|
||||
"Carbon\\": "src/Carbon/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
@@ -605,7 +665,7 @@
|
||||
"datetime",
|
||||
"time"
|
||||
],
|
||||
"time": "2018-09-20T19:36:25+00:00"
|
||||
"time": "2019-02-28T09:07:12+00:00"
|
||||
},
|
||||
{
|
||||
"name": "nikic/fast-route",
|
||||
@@ -845,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": {
|
||||
@@ -894,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": {
|
||||
@@ -947,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": {
|
||||
@@ -994,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",
|
||||
@@ -1096,16 +1156,16 @@
|
||||
},
|
||||
{
|
||||
"name": "slim/slim",
|
||||
"version": "3.11.0",
|
||||
"version": "3.12.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/slimphp/Slim.git",
|
||||
"reference": "d378e70431e78ee92ee32ddde61ecc72edf5dc0a"
|
||||
"reference": "f4947cc900b6e51cbfda58b9f1247bca2f76f9f0"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/slimphp/Slim/zipball/d378e70431e78ee92ee32ddde61ecc72edf5dc0a",
|
||||
"reference": "d378e70431e78ee92ee32ddde61ecc72edf5dc0a",
|
||||
"url": "https://api.github.com/repos/slimphp/Slim/zipball/f4947cc900b6e51cbfda58b9f1247bca2f76f9f0",
|
||||
"reference": "f4947cc900b6e51cbfda58b9f1247bca2f76f9f0",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1163,20 +1223,88 @@
|
||||
"micro",
|
||||
"router"
|
||||
],
|
||||
"time": "2018-09-16T10:54:21+00:00"
|
||||
"time": "2019-01-15T13:21:25+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/debug",
|
||||
"version": "v4.1.4",
|
||||
"name": "symfony/contracts",
|
||||
"version": "v1.0.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/debug.git",
|
||||
"reference": "47ead688f1f2877f3f14219670f52e4722ee7052"
|
||||
"url": "https://github.com/symfony/contracts.git",
|
||||
"reference": "1aa7ab2429c3d594dd70689604b5cf7421254cdf"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/debug/zipball/47ead688f1f2877f3f14219670f52e4722ee7052",
|
||||
"reference": "47ead688f1f2877f3f14219670f52e4722ee7052",
|
||||
"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": {
|
||||
@@ -1192,7 +1320,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "4.1-dev"
|
||||
"dev-master": "4.2-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -1219,20 +1347,20 @@
|
||||
],
|
||||
"description": "Symfony Debug Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2018-08-03T11:13:38+00:00"
|
||||
"time": "2019-03-03T18:11:24+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/finder",
|
||||
"version": "v4.1.4",
|
||||
"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": {
|
||||
@@ -1241,7 +1369,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "4.1-dev"
|
||||
"dev-master": "4.2-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -1268,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.9.0",
|
||||
"version": "v1.10.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
||||
"reference": "d0cd638f4634c16d8df4508e847f14e9e43168b8"
|
||||
"reference": "c79c051f5b3a46be09205c73b80b346e4153e494"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d0cd638f4634c16d8df4508e847f14e9e43168b8",
|
||||
"reference": "d0cd638f4634c16d8df4508e847f14e9e43168b8",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494",
|
||||
"reference": "c79c051f5b3a46be09205c73b80b346e4153e494",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1327,24 +1455,25 @@
|
||||
"portable",
|
||||
"shim"
|
||||
],
|
||||
"time": "2018-08-06T14:22:27+00:00"
|
||||
"time": "2018-09-21T13:07:52+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/translation",
|
||||
"version": "v4.1.4",
|
||||
"version": "v4.2.4",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/translation.git",
|
||||
"reference": "fa2182669f7983b7aa5f1a770d053f79f0ef144f"
|
||||
"reference": "748464177a77011f8f4cdd076773862ce4915f8f"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/translation/zipball/fa2182669f7983b7aa5f1a770d053f79f0ef144f",
|
||||
"reference": "fa2182669f7983b7aa5f1a770d053f79f0ef144f",
|
||||
"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": {
|
||||
@@ -1352,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",
|
||||
@@ -1369,7 +1501,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "4.1-dev"
|
||||
"dev-master": "4.2-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -1396,7 +1528,7 @@
|
||||
],
|
||||
"description": "Symfony Translation Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2018-08-07T12:45:11+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()
|
||||
]);
|
||||
}
|
||||
}
|
@@ -16,26 +16,28 @@ class ChoresApiController extends BaseApiController
|
||||
|
||||
public function TrackChoreExecution(\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'];
|
||||
}
|
||||
$requestBody = $request->getParsedBody();
|
||||
|
||||
try
|
||||
{
|
||||
$this->ChoresService->TrackChore($args['choreId'], $trackedTime, $doneBy);
|
||||
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'];
|
||||
}
|
||||
|
||||
$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->VoidApiActionResponse($response, false, 400, $ex->getMessage());
|
||||
return $this->GenericErrorResponse($response, $ex->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,7 +49,7 @@ class ChoresApiController extends BaseApiController
|
||||
}
|
||||
catch (\Exception $ex)
|
||||
{
|
||||
return $this->VoidApiActionResponse($response, false, 400, $ex->getMessage());
|
||||
return $this->GenericErrorResponse($response, $ex->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,4 +57,17 @@ class ChoresApiController extends BaseApiController
|
||||
{
|
||||
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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -38,9 +38,9 @@ class ChoresController extends BaseController
|
||||
]);
|
||||
}
|
||||
|
||||
public function Analysis(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args)
|
||||
public function Journal(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args)
|
||||
{
|
||||
return $this->AppContainer->view->render($response, 'choresanalysis', [
|
||||
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')
|
||||
@@ -49,7 +49,7 @@ class ChoresController extends BaseController
|
||||
|
||||
public function ChoreEditForm(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args)
|
||||
{
|
||||
if ($args['choredId'] == 'new')
|
||||
if ($args['choreId'] == 'new')
|
||||
{
|
||||
return $this->AppContainer->view->render($response, 'choreform', [
|
||||
'periodTypes' => GetClassConstants('\Grocy\Services\ChoresService'),
|
||||
|
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);
|
||||
}
|
||||
}
|
||||
|
@@ -30,7 +30,7 @@ class LoginController extends BaseController
|
||||
if ($user !== null && password_verify($inputPassword, $user->password))
|
||||
{
|
||||
$sessionKey = $this->SessionService->CreateSession($user->id, $stayLoggedInPermanently);
|
||||
setcookie($this->SessionCookieName, $sessionKey, time() + 31220640000); // Cookie expires in 999 years, but session validity is up to SessionService
|
||||
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))
|
||||
{
|
||||
@@ -63,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,8 +16,16 @@ 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)
|
||||
@@ -25,11 +33,11 @@ class RecipesApiController extends BaseApiController
|
||||
try
|
||||
{
|
||||
$this->RecipesService->ConsumeRecipe($args['recipeId']);
|
||||
return $this->VoidApiActionResponse($response);
|
||||
return $this->EmptyApiResponse($response);
|
||||
}
|
||||
catch (\Exception $ex)
|
||||
{
|
||||
return $this->VoidApiActionResponse($response, false, 400, $ex->getMessage());
|
||||
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)
|
||||
]);
|
||||
}
|
||||
|
||||
|
@@ -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')
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -69,6 +73,15 @@ class StockController extends BaseController
|
||||
]);
|
||||
}
|
||||
|
||||
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')
|
||||
]);
|
||||
}
|
||||
|
||||
public function LocationsList(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args)
|
||||
{
|
||||
return $this->AppContainer->view->render($response, 'locations', [
|
||||
@@ -182,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')
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
@@ -3,6 +3,7 @@
|
||||
namespace Grocy\Controllers;
|
||||
|
||||
use \Grocy\Services\DatabaseService;
|
||||
use \Grocy\Services\ApplicationService;
|
||||
|
||||
class SystemApiController extends BaseApiController
|
||||
{
|
||||
@@ -10,9 +11,11 @@ class SystemApiController extends BaseApiController
|
||||
{
|
||||
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)
|
||||
{
|
||||
@@ -20,4 +23,27 @@ class SystemApiController extends BaseApiController
|
||||
'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()
|
||||
]);
|
||||
}
|
||||
}
|
@@ -21,20 +21,22 @@ class TasksApiController extends BaseApiController
|
||||
|
||||
public function MarkTaskAsCompleted(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args)
|
||||
{
|
||||
$doneTime = date('Y-m-d H:i:s');
|
||||
if (isset($request->getQueryParams()['done_time']) && !empty($request->getQueryParams()['done_time']) && IsIsoDateTime($request->getQueryParams()['done_time']))
|
||||
{
|
||||
$doneTime = $request->getQueryParams()['done_time'];
|
||||
}
|
||||
$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->VoidApiActionResponse($response);
|
||||
return $this->EmptyApiResponse($response);
|
||||
}
|
||||
catch (\Exception $ex)
|
||||
{
|
||||
return $this->VoidApiActionResponse($response, false, 400, $ex->getMessage());
|
||||
return $this->GenericErrorResponse($response, $ex->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
1843
grocy.openapi.json
1843
grocy.openapi.json
File diff suppressed because it is too large
Load Diff
@@ -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'
|
||||
);
|
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'
|
||||
);
|
@@ -47,7 +47,6 @@ return array(
|
||||
'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',
|
||||
@@ -101,12 +100,12 @@ return array(
|
||||
'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',
|
||||
'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',
|
||||
@@ -184,7 +183,7 @@ return array(
|
||||
'Last done by' => 'Zuletzt ausgeführt von',
|
||||
'Unknown' => 'Unbekannt',
|
||||
'Filter by chore' => 'Nach Hausarbeit filtern',
|
||||
'Chores analysis' => 'Hausarbeiten Analyse',
|
||||
'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',
|
||||
@@ -243,86 +242,108 @@ return array(
|
||||
'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',
|
||||
|
||||
//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',
|
||||
'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'
|
||||
'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',
|
||||
'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',
|
||||
'#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 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',
|
||||
|
||||
//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,286 +0,0 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
'Stock overview' => 'Husholdning',
|
||||
'#1 products expiring within the next #2 days' => '#1 Produkt 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',
|
||||
'Chores overview' => 'Oversikt Husoppgaver',
|
||||
'Batteries overview' => 'Oversikt Batteri',
|
||||
'Purchase' => 'Innkjøp',
|
||||
'Consume' => 'Forbrukt',
|
||||
'Inventory' => 'Endre Husholdning',
|
||||
'Shopping list' => 'Handleliste',
|
||||
'Chore tracking' => 'Logge Husoppgaver',
|
||||
'Battery tracking' => 'Batteri Ladesyklus',
|
||||
'Products' => 'Produkter',
|
||||
'Locations' => 'Lokasjoner',
|
||||
'Quantity units' => 'Forpakning',
|
||||
'Chores' => 'Husoppgaver',
|
||||
'Batteries' => 'Batterier',
|
||||
'Chore' => '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' => '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 Husoppgave',
|
||||
'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',
|
||||
'#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' => 'Antall dager for gjentakelse',
|
||||
'Create chore' => 'Opprett husoppgave',
|
||||
'Used in' => 'Brukt',
|
||||
'Create battery' => 'Opprett batteri',
|
||||
'Edit battery' => 'Endre batteri',
|
||||
'Edit chore' => '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 minimumsnivå 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 chore "#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 chore 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 #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 husoppgaver skal gjøres inne de #2 neste dagene',
|
||||
'#1 chores 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 chore #1 on #2' => 'Utførte husoppgave "#1" den #2',
|
||||
'Tracked charge cycle of battery #1 on #2' => 'Ladet #1 den #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' => '#1 ladet',
|
||||
'Track execution of chore #1' => 'Utfør 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 chore' => 'Du må velge en husoppgaven',
|
||||
'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' => 'Tøm liste',
|
||||
'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 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 denne er 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, 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 til oppskrift "#1"?',
|
||||
'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 husoppave',
|
||||
'Chores 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 chore is due to be done within the next #2 days' => '#1 husoppgave skal gjøres inne de #2 neste dagene',
|
||||
'#1 chore 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',
|
||||
'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' => '-1 Betyr at dette produktet aldri går ut på dato',
|
||||
'Quantity unit' => 'Forpakning',
|
||||
'Only check if a single unit is in stock (a different quantity can then be used above)' => 'Huk av hvis du ønsker å bruke mindre enn forpakningsstørrelse i husholdningen',
|
||||
'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 "bruke mindre enn forpakningsstørrelse i husholdningen" 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' => 'Konsumer alle ingredienser for denne oppskriften',
|
||||
|
||||
//Constants
|
||||
'manually' => 'Manuel',
|
||||
'dynamic-regular' => 'Automatisk',
|
||||
|
||||
//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',
|
||||
'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'
|
||||
);
|
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'
|
||||
);
|
8
localization/tr/stock_transaction_types.php
Normal file
8
localization/tr/stock_transaction_types.php
Normal file
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
'purchase' => 'Satın al',
|
||||
'consume' => 'Tüket',
|
||||
'inventory-correction' => 'Envanter doğrulama',
|
||||
'product-opened' => 'Ürün açıldı'
|
||||
);
|
349
localization/tr/strings.php
Normal file
349
localization/tr/strings.php
Normal file
@@ -0,0 +1,349 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
'Stock overview' => 'Stoklara genel bakış',
|
||||
'#1 products expiring within the next #2 days' => '#1 ürünün son kullanma tarihi #2 gün içerisinde dolacak',
|
||||
'#1 products are already expired' => '#1 ürünün son kullanma tarihi geçti',
|
||||
'#1 products are below defined min. stock amount' => '#1 ürün belirlenen minimum stok miktarının altında',
|
||||
'Product' => 'Ürün',
|
||||
'Amount' => 'Miktar',
|
||||
'Next best before date' => 'Son kullanma tarihi',
|
||||
'Logout' => 'Çıkış yap',
|
||||
'Chores overview' => 'Ev işlerine genel bakış',
|
||||
'Batteries overview' => 'Pillere genel bakış',
|
||||
'Purchase' => 'Satın al',
|
||||
'Consume' => 'Tüket',
|
||||
'Inventory' => 'Envanter',
|
||||
'Shopping list' => 'Alışveriş listesi',
|
||||
'Chore tracking' => 'Ev işleri takibi',
|
||||
'Battery tracking' => 'Pil takibi',
|
||||
'Products' => 'Ürünler',
|
||||
'Locations' => 'Lokasyonlar',
|
||||
'Quantity units' => 'Miktar birimleri',
|
||||
'Chores' => 'Ev işleri',
|
||||
'Batteries' => 'Piller',
|
||||
'Chore' => 'Ev işi',
|
||||
'Next estimated tracking' => 'Sonraki tahmini takip',
|
||||
'Last tracked' => 'Son takip',
|
||||
'Battery' => 'Pil',
|
||||
'Last charged' => 'Son şarj ediş',
|
||||
'Next planned charge cycle' => 'Sonraki planlanan şarj döngüsü',
|
||||
'Best before' => 'Son kullanma tarihi',
|
||||
'OK' => 'Tamam',
|
||||
'Product overview' => 'Ürün genel bakışı',
|
||||
'Stock quantity unit' => 'Stok miktar birimi',
|
||||
'Stock amount' => 'Stok miktarı',
|
||||
'Last purchased' => 'Son satın alış',
|
||||
'Last used' => 'Son kullanış',
|
||||
'Spoiled' => 'Bozulmuş',
|
||||
'Barcode lookup is disabled' => 'Barkod inceleme özelliği devre dışı bırakıldı',
|
||||
'will be added to the list of barcodes for the selected product on submit' => 'kayıt esnasında seçilen ürün için barkod listesine eklenecek',
|
||||
'New amount' => 'Yeni miktar',
|
||||
'Note' => 'Not',
|
||||
'Tracked time' => 'Takip edilen süre',
|
||||
'Chore overview' => 'Ev işlerine genel bakış',
|
||||
'Tracked count' => 'Takip sayısı',
|
||||
'Battery overview' => 'Pillere genel bakış',
|
||||
'Charge cycles count' => 'Şarj döngüsü sayısı',
|
||||
'Create shopping list item' => 'Alışveriş listesine bir madde ekle',
|
||||
'Edit shopping list item' => 'Alışveriş listesi maddesini düzenle',
|
||||
'Save' => 'Kaydet',
|
||||
'Add' => 'Ekle',
|
||||
'Name' => 'İsim',
|
||||
'Location' => 'Lokasyon',
|
||||
'Min. stock amount' => 'Min. stok miktarı',
|
||||
'QU purchase' => 'QU satın al',
|
||||
'QU stock' => 'QU stok',
|
||||
'QU factor' => 'QU faktör',
|
||||
'Description' => 'Açıklama',
|
||||
'Create product' => 'Ürün oluştur',
|
||||
'Barcode(s)' => 'Barkod(lar)',
|
||||
'Minimum stock amount' => 'Minimum stok miktarı',
|
||||
'Default best before days' => 'Varsayılan son kullanım tarihi',
|
||||
'Quantity unit purchase' => 'Miktar birim alımı',
|
||||
'Quantity unit stock' => 'Miktar birim stoğu',
|
||||
'Factor purchase to stock quantity unit' => 'Alımı stok miktar birimle çarp',
|
||||
'Create location' => 'Lokasyon oluştur',
|
||||
'Create quantity unit' => 'Miktar birimi oluştur',
|
||||
'Period type' => 'Dönem türü',
|
||||
'Period days' => 'Dönem günleri',
|
||||
'Create chore' => 'Ev işi oluştur',
|
||||
'Used in' => 'içinde kullanılıyor',
|
||||
'Create battery' => 'Pil oluştur',
|
||||
'Edit battery' => 'Pil düzenle',
|
||||
'Edit chore' => 'Ev işi düzenle',
|
||||
'Edit quantity unit' => 'Miktar birimi düzenle',
|
||||
'Edit product' => 'Ürünü düzenle',
|
||||
'Edit location' => 'Lokasyonu düzenle',
|
||||
'Record data' => 'Veri kaydet',
|
||||
'Manage master data' => 'Ana veriyi yönet',
|
||||
'This will apply to added products' => 'Bu eklenen ürünlere uygulanacak',
|
||||
'never' => 'asla',
|
||||
'Add products that are below defined min. stock amount' => 'Tanımlanan min. stok miktarının altındaki ürünleri ekle',
|
||||
'For purchases this amount of days will be added to today for the best before date suggestion' => 'Satın alımlar için bu kadar gün son kullanım tarihi önerisi üzerine bugün eklenecek',
|
||||
'This means 1 #1 purchased will be converted into #2 #3 in stock' => 'Bu 1 #1 satın alımının #2 #3 stoklarına dönüştürüleceğini ifade ediyor',
|
||||
'Login' => 'Giriş yap',
|
||||
'Username' => 'Kullanıcı adı',
|
||||
'Password' => 'Parola',
|
||||
'Invalid credentials, please try again' => 'Yanlış giriş bilgisi, lütfen tekrar deneyin',
|
||||
'Are you sure to delete battery "#1"?' => 'Pil "#1"\'i silmek istediğine emin misin?',
|
||||
'Yes' => 'Evet',
|
||||
'No' => 'Hayır',
|
||||
'Are you sure to delete chore "#1"?' => 'Ev işi "#1"\'i silmek istediğine emin misin?',
|
||||
'"#1" could not be resolved to a product, how do you want to proceed?' => '"#1" bir ürünle eşleşmiyor, nasıl ilerlemek istersin?',
|
||||
'Create or assign product' => 'Oluştur veya bir ürüne ata',
|
||||
'Cancel' => 'İptal et',
|
||||
'Add as new product' => 'Yeni ürün olarak ekle',
|
||||
'Add as barcode to existing product' => 'Var olan ürüne barkod olarak ekle',
|
||||
'Add as new product and prefill barcode' => 'Yeni ürün olarak ekle ve barkodu otomatik doldur',
|
||||
'Are you sure to delete quantity unit "#1"?' => 'Miktar birimi "#1"\'i silmek istediğine emin misin?',
|
||||
'Are you sure to delete product "#1"?' => 'Ürün "#1"\'i silmek istediğine emin misin?',
|
||||
'Are you sure to delete location "#1"?' => 'Lokasyon "#1"\'i silmek istediğine emin misin?',
|
||||
'Manage API keys' => 'API anahtarlarını yönet',
|
||||
'REST API & data model documentation' => 'REST API & veri modeli dökümantasyonu',
|
||||
'API keys' => 'API anahtarları',
|
||||
'Create new API key' => 'Yeni API anahtarı oluştur',
|
||||
'API key' => 'API anahtarı',
|
||||
'Expires' => 'Süresi doluyor',
|
||||
'Created' => 'Oluşturuldu',
|
||||
'This product is not in stock' => 'Bu ürün stoklarda yok',
|
||||
'This means #1 will be added to stock' => 'Bu #1\'in stoklara ekleneceğini ifade ediyor',
|
||||
'This means #1 will be removed from stock' => 'Bu #1\'in stoklardan silineceğini ifade ediyor',
|
||||
'This means it is estimated that a new execution of this chore is tracked #1 days after the last was tracked' => 'Bu ev işinin sonraki takibinin son takipten #1 gün sonra olacağının tahmin edildiğini ifade ediyor',
|
||||
'Removed #1 #2 of #3 from stock' => '#3\'ün #1 #2\'si stoklardan silindi',
|
||||
'About grocy' => 'grocy hakkında',
|
||||
'Close' => 'Kapat',
|
||||
'#1 batteries are due to be charged within the next #2 days' => '#1 pilin önümüzdeki #2 gün içerisinde şarj olması bekleniyor',
|
||||
'#1 batteries are overdue to be charged' => '#1 pilin şarj etme zamanı geçti',
|
||||
'#1 chores are due to be done within the next #2 days' => '#1 ev işi önümüzdeki #2 gün içerisinde yapılacak',
|
||||
'#1 chores are overdue to be done' => '#1 ev işinin yapılma zamanı geçti',
|
||||
'Released on' => 'Yayınlanma tarihi',
|
||||
'Consume #3 #1 of #2' => '#3\'ün #1/#2\'sini tüket',
|
||||
'Added #1 #2 of #3 to stock' => '#1\'in #2/#3\'ü stoklara eklendi',
|
||||
'Stock amount of #1 is now #2 #3' => '#1\'in stok miktarı şimdi #2 #3',
|
||||
'Tracked execution of chore #1 on #2' => '#1\'in #2 üzerindeki uygulaması takip edildi',
|
||||
'Tracked charge cycle of battery #1 on #2' => 'Pil #1\'in #2 üzerindeki şarj döngüsü takip edildi',
|
||||
'Consume all #1 which are currently in stock' => '#1\'in bütün stoklarını tüket',
|
||||
'All' => 'Hepsi',
|
||||
'Track charge cycle of battery #1' => 'Pil #1\'in şarj döngüsünü takip et',
|
||||
'Track execution of chore #1' => 'Ev işi #1\'in uygulamasını takip et',
|
||||
'Filter by location' => 'Lokasyona göre filtrele',
|
||||
'Search' => 'Ara',
|
||||
'Not logged in' => 'Giriş yapılmadı',
|
||||
'You have to select a product' => 'Ürün seçmeniz lazım',
|
||||
'You have to select a chore' => 'Ev işi seçmeniz lazım',
|
||||
'You have to select a battery' => 'Pil seçmeniz lazım',
|
||||
'A name is required' => 'Bir isim zorunlu',
|
||||
'A location is required' => 'Bir lokasyon zorunlu',
|
||||
'The amount cannot be lower than #1' => 'Miktar #1\'den az olamaz',
|
||||
'This cannot be negative' => 'Bu negatif olamaz',
|
||||
'A quantity unit is required' => 'Miktar birim zorunlu',
|
||||
'A period type is required' => 'Dönem tipi zorunlu',
|
||||
'A best before date is required and must be later than today' => 'Bugünden ileride bir son kullanma tarihi girmek zorunlu',
|
||||
'Settings' => 'Ayarlar',
|
||||
'This can only be before now' => 'Bu sadece şu andan önce olabilir',
|
||||
'Calendar' => 'Takvim',
|
||||
'Recipes' => 'Tarifler',
|
||||
'Edit recipe' => 'Tarifi düzenle',
|
||||
'New recipe' => 'Yeni tarif',
|
||||
'Ingredients list' => 'Malzeme listesi',
|
||||
'Add recipe ingredient' => 'Tarife malzeme ekle',
|
||||
'Edit recipe ingredient' => 'Tarif malzemesini düzenle',
|
||||
'Are you sure to delete recipe "#1"?' => 'Tarif "#1"\'i silmek istediğine emin misin?',
|
||||
'Are you sure to delete recipe ingredient "#1"?' => 'Tarif malzemesi "#1"\'i silmek istediğine emin misin?',
|
||||
'Are you sure to empty the shopping list?' => 'Alışveriş listesini temizlemek istediğine emin misin?',
|
||||
'Clear list' => 'Listeyi temizle',
|
||||
'Requirements fulfilled' => 'Gereklilikler sağlandı',
|
||||
'Put missing products on shopping list' => 'Eksik malzemeleri alışveriş listesine ekle',
|
||||
'Not enough in stock, #1 ingredients missing' => 'Stokta yeterince #1 malzemesi yok',
|
||||
'Enough in stock' => 'Stokta yeteri kadar var',
|
||||
'Not enough in stock, #1 ingredients missing but already on the shopping list' => 'Stokta #1 yok ancak alışveriş listesine eklenmiş',
|
||||
'Expand to fullscreen' => 'Tam ekran yap',
|
||||
'Ingredients' => 'Malzemeler',
|
||||
'Preparation' => 'Hazırlanışı',
|
||||
'Recipe' => 'Tarif',
|
||||
'Not enough in stock, #1 missing, #2 already on shopping list' => 'Stokta yeterince #1 yok, #2 alış veriş listesine eklenmiş',
|
||||
'Show notes' => 'Notları göster',
|
||||
'Put missing amount on shopping list' => 'Eksik miktar kadar alışveriş listesine ekle',
|
||||
'Are you sure to put all missing ingredients for recipe "#1" on the shopping list?' => 'Tarif "#1"\'deki bütün eksik malzemeleri alışveriş listesine eklemek istediğinize emin misiniz?',
|
||||
'Added for recipe #1' => 'Tarif #1 için eklendi',
|
||||
'Manage users' => 'Kullanıcıları yönet',
|
||||
'User' => 'Kullanıcı',
|
||||
'Users' => 'Kullanıcılar',
|
||||
'Are you sure to delete user "#1"?' => 'Kullanıcı "#1"\'i silmek istediğine emin misin?',
|
||||
'Create user' => 'Kullanıcı oluştur',
|
||||
'Edit user' => 'Kullanıcıyı düzenle',
|
||||
'First name' => 'İsim',
|
||||
'Last name' => 'Soyisim',
|
||||
'A username is required' => 'Bir kullanıcı adı zorunlu',
|
||||
'Confirm password' => 'Parolayı doğrulayın',
|
||||
'Passwords do not match' => 'Parolalar uyuşmuyor',
|
||||
'Change password' => 'Parolayı değiştir',
|
||||
'Done by' => 'Tamamlanma tarihi',
|
||||
'Last done by' => 'Son tamamlanma tarih',
|
||||
'Unknown' => 'Bilinmeyen',
|
||||
'Filter by chore' => 'Ev işine göre filtrele',
|
||||
'Chores journal' => 'Ev işi günlüğü',
|
||||
'0 means suggestions for the next charge cycle are disabled' => '0 sonraki şarj döngüsünün devre dışı bırakıldığını ifade eder',
|
||||
'Charge cycle interval (days)' => 'Şart döngüsü aralığı (gün)',
|
||||
'Last price' => 'Son fiyat',
|
||||
'Price history' => 'Fiyat tarihçesi',
|
||||
'No price history available' => 'Fiyat tarihçesi yok',
|
||||
'Price' => 'Fiyat',
|
||||
'in #1 per purchase quantity unit' => '#1 için her miktar birimini satın al',
|
||||
'The price cannot be lower than #1' => 'Fiyat #1\'den az olamaz',
|
||||
'#1 product expires within the next #2 days' => '#1 ürünün son kullanma tarihi #2 gün içerisinde dolacak',
|
||||
'#1 product is already expired' => '#1 ürünün son kullanma tarihi geçti',
|
||||
'#1 product is below defined min. stock amount' => '#1 ürün belirlenen min. stok miktarının altında',
|
||||
'Unit' => 'Birim',
|
||||
'Units' => 'Birimler',
|
||||
'#1 chore is due to be done within the next #2 days' => '#1 ev işi önümüzdeki #2 gün içerisinde yapılacak',
|
||||
'#1 chore is overdue to be done' => '#1 ev işinin yapılma zamanı geçti',
|
||||
'#1 battery is due to be charged within the next #2 days' => '#1 pilin önümüzdeki #2 gün içerisinde şarj olması bekleniyor',
|
||||
'#1 battery is overdue to be charged' => '#1 pilin şarj etme zamanı geçti',
|
||||
'#1 unit was automatically added and will apply in addition to the amount entered here' => '#1 birim otomatik olarak eklendi ve buraya girilen miktar haricinde uygulanacak',
|
||||
'in singular form' => 'tekil formda',
|
||||
'in plural form' => 'çoğul formda',
|
||||
'Never expires' => 'Son kullanma tarihi asla dolmuyor',
|
||||
'This cannot be lower than #1' => 'Bu #1\'den az olamaz',
|
||||
'-1 means that this product never expires' => '-1 ürünün son kullanma tarihinin asla dolmadığını ifade eder',
|
||||
'Quantity unit' => 'Miktar birimi',
|
||||
'Only check if a single unit is in stock (a different quantity can then be used above)' => 'Sadece tek ürün stoklardaysa işaretleyin (farklı miktar daha sonra yukarıdan kullanılabilir)',
|
||||
'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)?' => '"#1" için gereken tüm malzemeleri tüketmek istediğine emin misin ("sadece tek ürün varsa işaretle" ile işaretlenmiş ürünler ihmal edilecek)?',
|
||||
'Removed all ingredients of recipe "#1" from stock' => 'Tarif "#1"\'in tüm malzemeleri stoklardan silindi',
|
||||
'Consume all ingredients needed by this recipe' => 'Bu tarif için gereken tüm malzemeleri tüket',
|
||||
'Click to show technical details' => 'Teknik detayları görmek için tıkla',
|
||||
'Error while saving, probably this item already exists' => 'Kaydederken problem oldu, bu ürün muhtemelen zaten kayıtlı',
|
||||
'Error details' => 'Hata detayları',
|
||||
'Tasks' => 'Görevler',
|
||||
'Show done tasks' => 'Tamamlanmış görevleri göster',
|
||||
'Task' => 'Görev',
|
||||
'Due' => 'Tamamlanma tarihi',
|
||||
'Assigned to' => 'Atanan kişi',
|
||||
'Mark task "#1" as completed' => 'Görev "#1"\'i tamamlandı olarak işaretle',
|
||||
'Uncategorized' => 'Kategorize edilmemiş',
|
||||
'Task categories' => 'Görev kategorileri',
|
||||
'Create task' => 'Görev oluştur',
|
||||
'A due date is required' => 'Bir tamamlanma tarihi zorunlu',
|
||||
'Category' => 'Kategori',
|
||||
'Edit task' => 'Görevi düzenle',
|
||||
'Are you sure to delete task "#1"?' => 'Görev "#1"\'i silmek istediğine emin misin?',
|
||||
'#1 task is due to be done within the next #2 days' => '#1 görev önümüzdeki #2 gün içerisinde yapılacak',
|
||||
'#1 tasks are due to be done within the next #2 days' => '#1 görev önümüzdeki #2 gün içerisinde yapılacak',
|
||||
'#1 task is overdue to be done' => '#1 görevin yapılma zamanı geçti',
|
||||
'#1 tasks are overdue to be done' => '#1 görevin yapılma zamanı geçti',
|
||||
'Edit task category' => 'Görev kategorisini düzenle',
|
||||
'Create task category' => 'Görev kategorisi oluştur',
|
||||
'Product groups' => 'Ürün grupları',
|
||||
'Ungrouped' => 'Grupsuz',
|
||||
'Create product group' => 'Ürün grubu oluştur',
|
||||
'Edit product group' => 'Ürün grubunu düzenle',
|
||||
'Product group' => 'Ürün grubu',
|
||||
'Are you sure to delete product group "#1"?' => 'Ürün grubu "#1"\'i silmek istediğine emin misin?',
|
||||
'Stay logged in permanently' => 'Sürekli olarak girişli kal',
|
||||
'When not set, you will get logged out at latest after 30 days' => 'Seçilmediği takdirde, en az 30 gün sonra otomatik olarak çıkış yapacaksınız',
|
||||
'Filter by status' => 'Duruma göre filtrele',
|
||||
'Below min. stock amount' => 'Min. stok miktarının altında',
|
||||
'Expiring soon' => 'Son kullanma tarihi yakında doluyor',
|
||||
'Already expired' => 'Son kullanma tarihi dolmuş',
|
||||
'Due soon' => 'Tamamlanma süresi yakında',
|
||||
'Overdue' => 'Tamamlanma süresi geçmiş',
|
||||
'View settings' => 'Ayarlara bak',
|
||||
'Auto reload on external changes' => 'Dış değişikliklerde otomatik olarak yenile',
|
||||
'Enable night mode' => 'Gece modunu aktif et',
|
||||
'Auto enable in time range' => 'Zaman aralığında otomatik olarak aktif et',
|
||||
'From' => 'Tarafından',
|
||||
'in format' => 'biçiminde',
|
||||
'To' => 'İçin',
|
||||
'Time range goes over midnight' => 'Zaman aralığı gece yarısını geçiyor',
|
||||
'Product picture' => 'Ürün fotoğrafı',
|
||||
'No file selected' => 'Hiçbir dosya seçilmedi',
|
||||
'If you don\'t select a file, the current picture will not be altered' => 'Eğer herhangi bir dosya seçmezseniz, şimdiki fotoğraf değişmeyecek',
|
||||
'Delete' => 'Sil',
|
||||
'The current picture will be deleted when you save the product' => 'Ürünü kaydettiğiniz zaman şimdiki fotoğraf silinecek',
|
||||
'Select file' => 'Dosya seç',
|
||||
'Image of product #1' => '#1 ürününe ait fotoğraf',
|
||||
'This product cannot be deleted because it is in stock, please remove the stock amount first.' => 'Bu ürün silinemiyor çünkü stoklarda var, lütfen öncelikle stok miktarını silin',
|
||||
'Delete not possible' => 'Silme işlemi mümkün değil',
|
||||
'Equipment' => 'Ekipman',
|
||||
'Instruction manual' => 'Kullanım kılavuzu',
|
||||
'The selected equipment has no instruction manual' => 'Seçili ekipmanın kullanım kılavuzu yok',
|
||||
'Notes' => 'Notlar',
|
||||
'Edit equipment' => 'Ekipmanı düzenle',
|
||||
'Create equipment' => 'Ekipman oluştur',
|
||||
'If you don\'t select a file, the current instruction manual will not be altered' => 'Eğer herhangi bir dosya seçmezseniz, şimdiki kullanım kılavuzu değişmeyecek',
|
||||
'No instruction manual available' => 'Herhangi bir kullanım kılavuzu yok',
|
||||
'The current instruction manual will be deleted when you save the equipment' => 'Ekipmanı kaydettiğiniz zaman şimdiki kullanım kılavuzu silinecek',
|
||||
'No picture available' => 'Görsel mevcut değil',
|
||||
'Filter by product group' => 'Ürün grubuna göre filtrele',
|
||||
'Presets for new products' => 'Yeni ürünler için ön tanımlar',
|
||||
'Included recipes' => 'Dahil edilmiş tarifler',
|
||||
'A recipe is required' => 'Bir tarif gerekiyor',
|
||||
'Add included recipe' => 'Dahil edilmiş tarif ekle',
|
||||
'Edit included recipe' => 'Dahil edilmiş tarifi düzenle',
|
||||
'Group' => 'Grup',
|
||||
'This will be used as a headline to group ingredients together' => 'Bu, malzemeleri beraber gruplamak için başlık olarak kullanılacak',
|
||||
'Journal' => 'Günlük',
|
||||
'Stock journal' => 'Stok günlüğü',
|
||||
'Filter by product' => 'Ürüne göre filtrele',
|
||||
'Booking time' => 'Rezervasyon zamanı',
|
||||
'Booking type' => 'Rezervasyon türü',
|
||||
'Undo booking' => 'Rezervasyonu geri al',
|
||||
'Undone on' => 'Tarihinde tamamlanmamış',
|
||||
'Batteries journal' => 'Pil günlüğü',
|
||||
'Filter by battery' => 'Pile göre filtrele',
|
||||
'Undo charge cycle' => 'Şart döngüsünü geri al',
|
||||
'Undo chore execution' => 'Ev işi uygulamasını geri al',
|
||||
'Chore execution successfully undone' => 'Ev işi başarıyla geri alındı',
|
||||
'Undo' => 'Geri al',
|
||||
'Booking successfully undone' => 'Rezervasyon başarıyla geri alındı',
|
||||
'Charge cycle successfully undone' => 'Şarj döngüsü başarıyla geri alındı',
|
||||
'This cannot be negative and must be an integral number' => 'Bu, negatif olamaz ve bir tam sayı olmak zorunda',
|
||||
'Disable stock fulfillment checking for this ingredient' => 'Bu malzeme için stok yenilemeyi kapat',
|
||||
'Add all list items to stock' => 'Bütün liste maddelerini stoğa ekle',
|
||||
'Add #3 #1 of #2 to stock' => '#3\'ün #1/#2\'sini stoğa ekle',
|
||||
'Adding shopping list item #1 of #2' => 'Alışveriş listesi maddelerinin #1/#2\'si ekleniyor',
|
||||
'Use a specific stock item' => 'Spesifik bir stok maddesi kullan',
|
||||
'The first item in this list would be picked by the default rule which is "First expiring first, then first in first out"' => 'Bu listedeki ilk madde ön tanımlı olarak "Süresi ilk dolan ilk, ondan sonra ilk giren ilk çıkar" mantığıyla seçilecektir',
|
||||
'Mark #3 #1 of #2 as open' => '#3\'ün #1/#2\'sini açık olarak işaretle',
|
||||
'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)' => 'Ürün açık olarak işaretlendikten sonra, son kullanım tarihi bugün + belirtilen gün miktarı olarak güncellenecektir (0 değeri bunu kapatır)',
|
||||
'Default best before days after opened' => 'Açıldıktan sonrası için ön tanımlı son kullanım tarihi',
|
||||
'Marked #1 #2 of #3 as opened' => '#1\'in #2/#3\'ü açık olarak işaretlendi',
|
||||
'Mark as opened' => 'Açıldı olarak işaretle',
|
||||
'Expires on #1; Bought on #2' => '#1\'de son kullanım tarihi doluyor; #2\'de satın alındı',
|
||||
'Not opened' => 'Açılmadı',
|
||||
'Opened' => 'Açıldı',
|
||||
'Mark #3 #1 of #2 as open' => '#3\'ün #1/#2\'sini açık olarak işaretle',
|
||||
'#1 opened' => '#1 açıldı',
|
||||
'Product expires' => 'Ürünün son kullanma tarihi doluyor',
|
||||
'Task due' => 'Görev süresi',
|
||||
'Chore due' => 'Ev işi süresi',
|
||||
'Battery charge cycle due' => 'Pil şarj döngüsü süresi',
|
||||
'Show clock in header' => 'Saati başlıkta göster',
|
||||
'Stock settings' => 'Stok ayarları',
|
||||
'Shopping list to stock workflow' => 'Alışveriş listesinden stok akışına',
|
||||
'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' => 'Eğer ürünün "ön tanımlı son kullanım tarihi" ayarlanmamışsa, otomatik olarak rezervasyonu son fiyatı ve alışveriş listesindeki madde sayısını baz alarak yap',
|
||||
'Skip' => 'Geç',
|
||||
'Servings' => 'Porsiyon',
|
||||
'Costs' => 'Maliyet',
|
||||
'Based on the prices of the last purchase per product' => 'Satın alınan her ürünün son satın alış fiyatlarına göre',
|
||||
'The ingredients listed here result in this amount of servings' => 'Burada listelenen malzemelerle bu kadar porsiyon çıkıyor',
|
||||
'Do not check against the shopping list when adding missing items to it' => 'Eksik malzemeleri eklerken alışveriş listesine karşı kontrol etme',
|
||||
'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' => 'Varsayılan olarak alışveriş listesine eklenen miktar "gereken miktar - stok miktarı - alışveriş listesi miktarı" olarak hesaplanır. Bu aktif edildiği zaman sadece stok miktarına karşı kontrol yapılır ve alışveriş listesi kontrol edilmez.',
|
||||
'Picture' => 'Resim',
|
||||
'Uncheck ingredients to not put them on the shopping list' => 'Alışveriş listesine malzemeleri eklememek için işareti kaldırın',
|
||||
'This is for statistical purposes only' => 'Bu sadece istatistiki amaçlar için',
|
||||
'You have to select a recipe' => 'Bir tarif seçmelisiniz',
|
||||
'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'
|
||||
);
|
@@ -44,6 +44,18 @@ class ApiKeyAuthMiddleware extends BaseMiddleware
|
||||
$validApiKey = false;
|
||||
}
|
||||
|
||||
// Handling of special purpose API keys
|
||||
if (!$validApiKey)
|
||||
{
|
||||
if ($routeName === 'calendar-ical')
|
||||
{
|
||||
if ($request->getQueryParam('secret') !== null && $apiKeyService->IsValidApiKey($request->getQueryParam('secret'), ApiKeyService::API_KEY_TYPE_SPECIAL_PURPOSE_CALENDAR_ICAL))
|
||||
{
|
||||
$validApiKey = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!$validSession && !$validApiKey)
|
||||
{
|
||||
define('GROCY_AUTHENTICATED', false);
|
||||
|
@@ -7,6 +7,14 @@ class JsonMiddleware extends BaseMiddleware
|
||||
public function __invoke(\Slim\Http\Request $request, \Slim\Http\Response $response, callable $next)
|
||||
{
|
||||
$response = $next($request, $response);
|
||||
return $response->withHeader('Content-Type', 'application/json');
|
||||
|
||||
if ($response->hasHeader('Content-Disposition'))
|
||||
{
|
||||
return $response;
|
||||
}
|
||||
else
|
||||
{
|
||||
return $response->withHeader('Content-Type', 'application/json');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
27
migrations/0038.sql
Normal file
27
migrations/0038.sql
Normal file
@@ -0,0 +1,27 @@
|
||||
DROP VIEW stock_missing_products;
|
||||
CREATE VIEW stock_missing_products
|
||||
AS
|
||||
SELECT
|
||||
p.id,
|
||||
MAX(p.name) AS name,
|
||||
p.min_stock_amount - IFNULL(SUM(s.amount), 0) AS amount_missing,
|
||||
CASE WHEN s.id IS NOT NULL THEN 1 ELSE 0 END AS is_partly_in_stock
|
||||
FROM products p
|
||||
LEFT JOIN stock s
|
||||
ON p.id = s.product_id
|
||||
WHERE p.min_stock_amount != 0
|
||||
GROUP BY p.id
|
||||
HAVING IFNULL(SUM(s.amount), 0) < p.min_stock_amount;
|
||||
|
||||
DROP VIEW stock_current;
|
||||
CREATE VIEW stock_current
|
||||
AS
|
||||
SELECT product_id, SUM(amount) AS amount, MIN(best_before_date) AS best_before_date
|
||||
FROM stock
|
||||
GROUP BY product_id
|
||||
|
||||
UNION
|
||||
|
||||
SELECT id, 0, null
|
||||
FROM stock_missing_products
|
||||
WHERE is_partly_in_stock = 0;
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user