Compare commits
274 Commits
v4.0.1
...
4c5fbffd25
Author | SHA1 | Date | |
---|---|---|---|
|
4c5fbffd25 | ||
|
8509645985 | ||
|
7de98db143 | ||
|
31185beac5 | ||
|
c8ee47f935 | ||
|
4148f8e88e | ||
|
ba2cb6ce08 | ||
|
6b18b0a7be | ||
|
ad0447497c | ||
|
3e4f200475 | ||
|
8560becb83 | ||
|
d6f3595684 | ||
|
8de5700310 | ||
|
21aa5eab21 | ||
|
b5c9cbccf5 | ||
|
de7ad6b115 | ||
|
a3f66b664b | ||
|
4364f07899 | ||
|
d26f24a28b | ||
|
e786433273 | ||
|
03ab765ccd | ||
|
b2ba1de9e3 | ||
|
89b8a9c1a9 | ||
|
541318e964 | ||
|
d1a8900f98 | ||
|
6ca87a9a49 | ||
|
2a3e23ded4 | ||
|
46253c455f | ||
|
63dcfcde47 | ||
|
54cd5a004d | ||
|
c11bbba214 | ||
|
fdddc9295d | ||
|
1d6e545710 | ||
|
57438409c4 | ||
|
72453eac0a | ||
|
27b79841fc | ||
|
2b994fd2ee | ||
|
ce5be6645e | ||
|
b7c4011e80 | ||
|
ebcc9a422e | ||
|
6a7436dbf0 | ||
|
bf353d9622 | ||
|
2690e535e3 | ||
|
98769aea11 | ||
|
9c60fdec5a | ||
|
d37c98e5f0 | ||
|
a1dea994c9 | ||
|
11fdf5929a | ||
|
56d8c2f13a | ||
|
aa88046ca4 | ||
|
a35db9f1d3 | ||
|
c8ac094bf4 | ||
|
a177e2a185 | ||
|
1f5263ef22 | ||
|
d747a6c86a | ||
|
e3d0ddbce6 | ||
|
ab09ce219c | ||
|
646263ab2a | ||
|
cccf1d430f | ||
|
aad589eaca | ||
|
f4226876c9 | ||
|
12a318c6f2 | ||
|
844d6279ae | ||
|
de881eb78e | ||
|
0d1a8bdfb6 | ||
|
bbd5f5e7ae | ||
|
262f3df3ab | ||
|
f8e2e4ced7 | ||
|
c24679b799 | ||
|
33ec1626e8 | ||
|
4468a6ac98 | ||
|
4f964cb386 | ||
|
9d92020a07 | ||
|
3abf4865bc | ||
|
69e21fd483 | ||
|
0bbc06a70c | ||
|
8e1d9a4871 | ||
|
d76d5d2537 | ||
|
38882c5ec6 | ||
|
4f9e39edd7 | ||
|
9c0e0c5870 | ||
|
a4b3a5592e | ||
|
ef9413c5c1 | ||
|
0ff5aee6f6 | ||
|
61b6afa364 | ||
|
1946ff870e | ||
|
e3965ed82c | ||
|
f3effc5a60 | ||
|
bc78359dba | ||
|
72e1a9aee7 | ||
|
83b8b95b73 | ||
|
23d7b6ad3c | ||
|
f9c7c67dc7 | ||
|
c05181aa53 | ||
|
1daa15a303 | ||
|
4300da8f64 | ||
|
abf109885a | ||
|
f142798a81 | ||
|
fe2a628f35 | ||
|
6605eeafd0 | ||
|
ded742a7c1 | ||
|
b0dded1346 | ||
|
113a9ecf39 | ||
|
9e5ce48091 | ||
|
dc05753a0f | ||
|
49839d933b | ||
|
97dbd7bf08 | ||
|
9cac3b2311 | ||
|
11d28622e8 | ||
|
c99dd46007 | ||
|
645f9e2599 | ||
|
caa28af0d2 | ||
|
cc40344845 | ||
|
c8ccc0b529 | ||
|
a734d1c3ae | ||
|
f4d5f21832 | ||
|
e7cea3d949 | ||
|
96059a1b32 | ||
|
a06991f81b | ||
|
245bdbe6e8 | ||
|
4a674e3bfa | ||
|
632162c1be | ||
|
7d6b76effb | ||
|
b706f0c65a | ||
|
b6ce9eec30 | ||
|
c73be7d18e | ||
|
c9ffe4885d | ||
|
a2c2049037 | ||
|
2c0b1a7be0 | ||
|
5721c4bd62 | ||
|
a373f8ae4b | ||
|
201bda93a2 | ||
|
1900a5b8a2 | ||
|
98fad559d4 | ||
|
bed18b1981 | ||
|
0270f6aa08 | ||
|
5f26e914a2 | ||
|
b2aa882abb | ||
|
e273158796 | ||
|
a1008eac30 | ||
|
d7b5b8958a | ||
|
04c5928612 | ||
|
9a319a6ee0 | ||
|
cd25284d35 | ||
|
58eda2f152 | ||
|
ceb6774260 | ||
|
7b7293e108 | ||
|
11ea8f3716 | ||
|
1b8f4e6a4f | ||
|
3321deec70 | ||
|
5b48004449 | ||
|
9e1020b7f8 | ||
|
185e6b20ad | ||
|
2bc58e083d | ||
|
1323fff3e2 | ||
|
d186e26898 | ||
|
4f6075d8c5 | ||
|
d5dacb1053 | ||
|
1246f402e5 | ||
|
7080ec9a8f | ||
|
df28026a80 | ||
|
434525826e | ||
|
c21090f522 | ||
|
5a2600209f | ||
|
8ac8000f30 | ||
|
8821280642 | ||
|
2047d38c6e | ||
|
a68c1087dd | ||
|
2f7478bddb | ||
|
af1f2aef96 | ||
|
6602c76005 | ||
|
8f9b295e68 | ||
|
5167ba1154 | ||
|
b26dfe3fb0 | ||
|
402d98757e | ||
|
a7fc87c9bc | ||
|
5c1814989a | ||
|
e005c51b1a | ||
|
f14110aa1e | ||
|
affa7c41a1 | ||
|
9c123bd92a | ||
|
7f1dfd0496 | ||
|
49ff780e3f | ||
|
477f333466 | ||
|
e01e0f3abe | ||
|
8ba3305a21 | ||
|
24cac247f5 | ||
|
6a68e410e4 | ||
|
88d0d32ea0 | ||
|
11ac985e57 | ||
|
ac26c5510b | ||
|
85bff136de | ||
|
d2a878e98e | ||
|
4d8f08eddd | ||
|
edf973df00 | ||
|
8497f37b24 | ||
|
40d1a9c3d0 | ||
|
c7abed0d68 | ||
|
bf05434a5c | ||
|
18125d8989 | ||
|
75f0af2bd3 | ||
|
7b1a864486 | ||
|
f2f9a16e59 | ||
|
9f94ba55a4 | ||
|
15ab198af0 | ||
|
4659f51551 | ||
|
33d5ec44d2 | ||
|
fc072b13f2 | ||
|
efae5fea5b | ||
|
3aeecfa24d | ||
|
bae83535dd | ||
|
fb407a7fa7 | ||
|
151bd7f025 | ||
|
99f448dd64 | ||
|
7f7f1e8dce | ||
|
6b69487bc5 | ||
|
ee01f41979 | ||
|
97ecbd25b6 | ||
|
9458eb8b90 | ||
|
3c35a69c32 | ||
|
c9bc10820d | ||
|
8f52aaeadc | ||
|
dc05476d09 | ||
|
80d7284d72 | ||
|
b3a5128dbd | ||
|
7969145bbf | ||
|
f01ca33c33 | ||
|
fdf5559c25 | ||
|
27f9d70b56 | ||
|
c9215a9a4e | ||
|
69db4b558b | ||
|
35a4b75432 | ||
|
f36ad805b3 | ||
|
35766bf5b3 | ||
|
3308e79027 | ||
|
1e60f940e4 | ||
|
c8891236e6 | ||
|
b0d6e24bd4 | ||
|
b2295ce6d2 | ||
|
32ce04a1b7 | ||
|
dfa3262426 | ||
|
1f7580af3f | ||
|
60adda2b42 | ||
|
387a5f7dd3 | ||
|
f6bdb6e836 | ||
|
82d899d609 | ||
|
fdbb8a045a | ||
|
07db1f35bc | ||
|
dde577b98b | ||
|
5080d776a7 | ||
|
8c21969b84 | ||
|
13e99d3f07 | ||
|
dedbee3181 | ||
|
16f686deb8 | ||
|
973e4226b6 | ||
|
6e22d3b100 | ||
|
9b119da8e0 | ||
|
03f9ba45ea | ||
|
a965d01fb9 | ||
|
a123535b0a | ||
|
3a2929c016 | ||
|
106f25cc6b | ||
|
d6cc87ac86 | ||
|
a47bccab3f | ||
|
393a312186 | ||
|
7f21e2de34 | ||
|
82ac996b3a | ||
|
827134c972 | ||
|
787d5f11e0 | ||
|
2d2039f988 | ||
|
268f0d8a50 | ||
|
9dde46d419 | ||
|
162ba267a1 | ||
|
4691b45510 |
@@ -10,7 +10,7 @@ for /f "tokens=*" %%a in ('jq .Version versiontemp.json --raw-output') do set ve
|
||||
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!docs
|
||||
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!docs -xr!test -x!public\packages\@fortawesome\fontawesome-free\js -x!public\packages\@fortawesome\fontawesome-free\less -x!public\packages\@fortawesome\fontawesome-free\metadata -x!public\packages\@fortawesome\fontawesome-free\scss -x!public\packages\@fortawesome\fontawesome-free\sprites -x!public\packages\@fortawesome\fontawesome-free\svgs
|
||||
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\* changelog\__TEMPLATE.md
|
||||
|
@@ -1,9 +1,11 @@
|
||||
pushd ..
|
||||
|
||||
for /d %%d in (localization\*) do (
|
||||
if %%~nxd neq en (
|
||||
tx pull --languages %%~nxd --force
|
||||
)
|
||||
)
|
||||
|
||||
copy /Y localization\en\userfield_types.po localization\en_GB\userfield_types.po
|
||||
copy /Y localization\en\stock_transaction_types.po localization\en_GB\stock_transaction_types.po
|
||||
copy /Y localization\en\component_translations.po localization\en_GB\component_translations.po
|
||||
@@ -11,4 +13,5 @@ copy /Y localization\en\chore_period_types.po localization\en_GB\chore_period_ty
|
||||
copy /Y localization\en\chore_assignment_types.po localization\en_GB\chore_assignment_types.po
|
||||
copy /Y localization\en\permissions.po localization\en_GB\permissions.po
|
||||
copy /Y localization\en\locales.po localization\en_GB\locales.po
|
||||
|
||||
popd
|
||||
|
2
.github/ISSUE_TEMPLATE/bug-report.md
vendored
@@ -18,5 +18,5 @@ Please make sure to:
|
||||
|
||||
Please also try to reproduce the problem on the pre-release demo: => https://demo-prerelease.grocy.info
|
||||
- Use a private demo instance to make your example persistent
|
||||
- If the problem is not reproducible there, it's most likely not a bug - please use the r/grocy subreddit for general questions / help: => https://www.reddit.com/r/grocy
|
||||
- If the problem is not reproducible there, it's most likely not a bug - please use the r/grocy subreddit for general help and usage questions: => https://www.reddit.com/r/grocy
|
||||
-->
|
||||
|
2
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -2,4 +2,4 @@ blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: Questions / Help
|
||||
url: https://www.reddit.com/r/grocy
|
||||
about: Please use the r/grocy subreddit for general questions / help
|
||||
about: Please use the r/grocy subreddit for general help and usage questions
|
||||
|
2
.github/ISSUE_TEMPLATE/feature-request.md
vendored
@@ -11,7 +11,7 @@ assignees: ''
|
||||
<!--
|
||||
Please make sure to:
|
||||
|
||||
- Describe what you would find useful
|
||||
- Describe what you would find useful as detailed as possible
|
||||
- Check if your idea was maybe already requested by searching open requests here
|
||||
- Keep it to one topic per request
|
||||
-->
|
||||
|
4
.github/SECURITY.md
vendored
@@ -1,5 +1,5 @@
|
||||
Grocy is not an enterprise application and neither one you (should) host publicly (means without authentication) on the internet.
|
||||
|
||||
So unless something really bad can be abused _unauthenticated_, please just open a regular issue on the [Issue Tracker](https://github.com/grocy/grocy/issues/new/choose).
|
||||
So unless something really bad can be abused _unauthenticated_, it's considered practically irrelevant for the target use case of Grocy and therefore not even worth reporting that.
|
||||
|
||||
You can also contact me directly, please see [berrnd.de](https://berrnd.de) for any contact information.
|
||||
If you really think you've found something critical and valid for the target use case of Grocy and you feel the need to contact me privately on that, please see [berrnd.de](https://berrnd.de) for any contact information.
|
||||
|
BIN
.github/publication_assets/chores.png
vendored
Before Width: | Height: | Size: 87 KiB After Width: | Height: | Size: 131 KiB |
BIN
.github/publication_assets/mealplan.png
vendored
Before Width: | Height: | Size: 476 KiB After Width: | Height: | Size: 540 KiB |
BIN
.github/publication_assets/shoppinglist.png
vendored
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 53 KiB |
BIN
.github/publication_assets/stock.png
vendored
Before Width: | Height: | Size: 170 KiB After Width: | Height: | Size: 212 KiB |
68
README.md
@@ -1,7 +1,10 @@
|
||||
-----
|
||||
|
||||
<div align="center">
|
||||
<img alt="Logo" height="60" src="https://raw.githubusercontent.com/grocy/grocy/master/public/img/logo.svg?sanitize=true" />
|
||||
<h3>ERP beyond your fridge</h3>
|
||||
<h4>Grocy is a web-based self-hosted groceries & household management solution for your home<br>Created by <a href="https://github.com/berrnd">@berrnd</a></h4>
|
||||
<img alt="Logo" height="50" src="https://raw.githubusercontent.com/grocy/grocy/master/public/img/logo.svg?sanitize=true" />
|
||||
<h2>ERP beyond your fridge</h2>
|
||||
<h3>Grocy is a web-based self-hosted groceries & household management solution for your home</h3>
|
||||
<em><h4>This is a hobby project by <a href="https://berrnd.de">Bernd Bestel</a></h4></em>
|
||||
</div>
|
||||
|
||||
-----
|
||||
@@ -13,14 +16,14 @@
|
||||
|
||||
## Features
|
||||
|
||||
See the website → <https://grocy.info>
|
||||
See the website. → <https://grocy.info>
|
||||
|
||||
## Questions / Help / Bug Reports / Feature Requests
|
||||
|
||||
- General help and usage questions → [r/grocy subreddit](https://www.reddit.com/r/grocy)
|
||||
- Bug Reports and Feature Requests → [Issue Tracker](https://github.com/grocy/grocy/issues/new/choose)
|
||||
|
||||
_Please don't send me private messages or call me regarding Grocy help. I check the issue tracker and the subreddit pretty much daily, but don't provide any support beyond that._
|
||||
_Please don't send me private messages or call me regarding anything Grocy. I check the issue tracker and the subreddit pretty much daily, but don't provide any support beyond that._
|
||||
|
||||
## Community contributions
|
||||
|
||||
@@ -32,8 +35,6 @@ See the website for a list of community contributed Add-ons / Tools. → [htt
|
||||
>
|
||||
> Directly download the [latest release](https://releases.grocy.info/latest-desktop) - the installation is nothing more than just clicking 2 times "next".
|
||||
|
||||
See the website for some installation guides and troubleshooting help. → [https://grocy.info/links](https://grocy.info/links)
|
||||
|
||||
Grocy is technically a pretty simple PHP application, so the basic notes to get it running are:
|
||||
- Unpack the [latest release](https://releases.grocy.info/latest)
|
||||
- Copy `config-dist.php` to `data/config.php` + edit to your needs
|
||||
@@ -45,23 +46,23 @@ Grocy is technically a pretty simple PHP application, so the basic notes to get
|
||||
|
||||
Alternatively clone this repository (the `release` branch always references the latest released version) and install Composer and Yarn dependencies manually.
|
||||
|
||||
See the website for more installation guides and troubleshooting help. → [https://grocy.info/links](https://grocy.info/links)
|
||||
|
||||
### Platform support
|
||||
|
||||
- PHP 8.1 or 8.2 (with SQLite 3.34.0+)
|
||||
- Required PHP extensions: `fileinfo`, `pdo_sqlite`, `gd`, `ctype`, `json`, `intl`, `zlib`, `mbstring`
|
||||
- PHP 8.2 or 8.3 (with SQLite 3.34.0+)
|
||||
- Required PHP extensions: `fileinfo`, `pdo_sqlite`, `gd`, `ctype`, `intl`, `zlib`, `mbstring`
|
||||
- _Recommendation: Benchmark tests showed that e.g. unit conversion handling is up to 5 times faster when using a more recent (3.39.4+) SQLite version._
|
||||
- Recent Firefox, Chrome or Edge
|
||||
|
||||
## How to run using Docker
|
||||
|
||||
See [grocy/grocy-docker](https://github.com/grocy/grocy-docker) or [linuxserver/docker-grocy](https://github.com/linuxserver/docker-grocy) for instructions.
|
||||
→ https://hub.docker.com/r/linuxserver/grocy
|
||||
|
||||
## How to update
|
||||
|
||||
- Overwrite everything with the [latest release](https://releases.grocy.info/latest) while keeping the `data` directory
|
||||
- Check `config-dist.php` for new configuration options and add them to your `data/config.php` where appropriate (the default values from `config-dist.php` will be used for not in `data/config.php` defined settings)
|
||||
- Empty the `data/viewcache` directory
|
||||
- Visit the main route once to apply database migrations ([see below](https://github.com/grocy/grocy#database-migrations))
|
||||
|
||||
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).
|
||||
|
||||
@@ -69,19 +70,19 @@ If you run Grocy on Linux, there is also `update.sh` (remember to make the scrip
|
||||
|
||||
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 on [Transifex](https://www.transifex.com/grocy/grocy/dashboard/) if your language is incomplete or not available yet.
|
||||
You can easily help translating Grocy on [Transifex](https://explore.transifex.com/grocy/grocy/) if your language is incomplete or not available yet.
|
||||
|
||||
The default language can be set in `data/config.php`, e. g. `Setting('DEFAULT_LOCALE', 'it');` and there is also a user setting (see the user settings page) to set a different language per user.
|
||||
The default language can be set in `data/config.php`, e. g. `Setting('DEFAULT_LOCALE', 'de');` and there is also a user setting (see the user settings page) to set a different language per user.
|
||||
|
||||
The [pre-release demo](https://demo-prerelease.grocy.info) is available for any translation which is at least 70 % complete and will pull the translations from Transifex 10 minutes past every hour, so you can have a kind of instant preview of your contributed translations. Thank you!
|
||||
|
||||
Also any translation which once reached a completion level of 70 % ([`strings` resource](https://www.transifex.com/grocy/grocy/strings/)) will be included in releases.
|
||||
Also any translation which once reached a completion level of 70 % ([`strings` resource](https://app.transifex.com/grocy/grocy/strings/)) will be included in releases.
|
||||
|
||||
_RTL languages are unfortunately not yet supported._
|
||||
|
||||
## 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 was a pain to use at the end 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!
|
||||
A household needs to be managed. Before Grocy I did this (for almost 10 years) using my first self written software (a C# Windows forms application) and with a bunch of Excel sheets. The software was a pain to use at the end 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!
|
||||
|
||||
## Things worth to know
|
||||
|
||||
@@ -89,25 +90,37 @@ A household needs to be managed. I did this so far (almost 10 years) with my fir
|
||||
|
||||
See the integrated Swagger UI instance on [/api](https://demo.grocy.info/api).
|
||||
|
||||
The web frontend uses exactly this API for pretty much everything. So everything you can do there is also possible via the API.
|
||||
|
||||
### Barcode readers & camera scanning
|
||||
|
||||
Some fields (with a barcode icon above) also allow to select a value by scanning a barcode. It works best when your barcode reader prefixes every barcode with a letter which is normally not part of a item name (I use a `$`) and sends a `TAB` after a scan.
|
||||
|
||||
Additionally it's also possible to use your device camera to scan a barcode by using the camera button on the right side of the corresponding field (powered by [Quagga2](https://github.com/ericblade/quagga2), totally offline / client-side camera stream processing, please note due to browser security restrictions, this only works when serving Grocy via a secure connection (`https://`)). Quick video demo: <https://www.youtube.com/watch?v=Y5YH6IJFnfc>
|
||||
Additionally it's also possible to use your device camera to scan a barcode by using the camera button on the right side of the corresponding input field (powered by [ZXing](https://github.com/zxing-js/library), totally offline / client-side camera stream processing, please note due to browser security restrictions, this only works when serving Grocy via a secure connection (`https://`)). [Here](https://www.youtube.com/watch?v=veezFX4X1JU) and [there](https://www.youtube.com/watch?v=Y5YH6IJFnfc) are quick video demos of that.
|
||||
|
||||
_My personal recommendation: Use a USB barcode laser scanner. They are cheap and work 1000 % better, faster, under any lighting condition and from any angle._
|
||||
|
||||
### Barcode lookup via external services
|
||||
|
||||
Products can be directly added to the database via looking them up against external services by a barcode.
|
||||
|
||||
This can be done in-place using the product picker workflow "External barcode lookup" (the workflow dialog is displayed when entering something unknown in any product input field) Quick video demo: <https://www.youtube.com/watch?v=-moXPA-VvGc>
|
||||
|
||||
A plugin for [Open Food Facts](https://world.openfoodfacts.org/) is included and used by default (see the `data/config.php` option `STOCK_BARCODE_LOOKUP_PLUGIN`).
|
||||
|
||||
See that plugin or `plugins/DemoBarcodeLookupPlugin.php` for a commented example implementation if you want to build a plugin.
|
||||
|
||||
### Input shorthands for date fields
|
||||
|
||||
For (productivity) reasons all date (and time) input (and display) fields use the ISO-8601 format regardless of localization.
|
||||
The following shorthands are available:
|
||||
- `MMDD` gets expanded to the given day on the current year, if > today, or to the given day next year, if < today, in proper notation
|
||||
- Example: `0517` will be converted to `2021-05-17`
|
||||
- Example: `0517` will be converted to `2025-05-17`
|
||||
- `YYYYMMDD` gets expanded to the proper ISO-8601 notation
|
||||
- Example: `20210417` will be converted to `2021-04-17`
|
||||
- Example: `20250417` will be converted to `2025-04-17`
|
||||
- `YYYYMMe` or `YYYYMM+` gets expanded to the end of the given month in the given year in proper notation
|
||||
- Example: `202107e` will be converted to `2021-07-31`
|
||||
- `[+/-]n[d/m/y]` gets expanded to a date relative to today, while adding (**+**) or subtracting (**-**) the **n**umber of**d**ays/**m**onths/**y**ears, in proper notation
|
||||
- Example: `202507e` will be converted to `2025-07-31`
|
||||
- `[+/-]n[d/m/y]` gets expanded to a date relative to today, while adding (**+**) or subtracting (**-**) the **n**umber of **d**ays/**m**onths/**y**ears, in proper notation
|
||||
- Example: `+1m` will be converted to the same day next month
|
||||
- `x` gets expanded to `2999-12-31` (which is an alias for "never overdue")
|
||||
- Down/up arrow keys will increase/decrease the date by 1 day
|
||||
@@ -120,17 +133,18 @@ The following shorthands are available:
|
||||
Wherever a button contains a bold highlighted letter, this is a shortcut key.
|
||||
Example: Button "**P** Add as new product" can be "pressed" by using the `P` key on your keyboard.
|
||||
|
||||
### Barcode lookup via external services
|
||||
### Installable web app (PWA)
|
||||
|
||||
Products can be directly added to the database via looking them up against external services by a barcode.
|
||||
This is currently only possible through the REST API.
|
||||
There is no plugin included for any service, see the reference implementation in `data/plugins/DemoBarcodeLookupPlugin.php`.
|
||||
Grocy's web frontend is responsive and an "installable web app" ([PWA](https://en.wikipedia.org/wiki/Progressive_web_app), without providing any offline usage capabilities), that provides a pretty native mobile app-like experience without the need for additional tools.
|
||||
|
||||
- Quick video demo on Android/Firefox: <https://www.youtube.com/watch?v=L38drVZfwHs>
|
||||
- Quick video demo on Android/Chrome: <https://www.youtube.com/watch?v=rjLdXUFDNuk>
|
||||
|
||||
### Database migrations
|
||||
|
||||
Database schema migration is automatically done when visiting the root (`/`) route (click on the logo in the left upper edge).
|
||||
Database schema migration is done when visiting the root (`/`) route (click on the logo in the left upper edge) as needed and is also triggered automatically if the version has changed (so when an update has been made).
|
||||
|
||||
_Please note: Database migrations are supposed to work between releases, not between every commit. If you want to run the current `master` branch (which is the development version), you need to handle that (and maybe more) yourself._
|
||||
_Please note: Database migrations are supposed to work between releases, not between every commit. If you want to run the current `master` branch (which is the development version), you need to handle that (and more) yourself._
|
||||
|
||||
### Disable certain features
|
||||
|
||||
|
25
app.php
@@ -52,9 +52,30 @@ catch (EInvalidConfig $ex)
|
||||
}
|
||||
|
||||
// Create data/viewcache folder if it doesn't exist
|
||||
if (!file_exists(GROCY_DATAPATH . '/viewcache'))
|
||||
$viewcachePath = GROCY_DATAPATH . '/viewcache';
|
||||
if (!file_exists($viewcachePath))
|
||||
{
|
||||
mkdir(GROCY_DATAPATH . '/viewcache');
|
||||
mkdir($viewcachePath);
|
||||
}
|
||||
|
||||
// Empty data/viewcache when and trigger database migrations when:
|
||||
// The version changed (so when an update was done)
|
||||
// GROCY_BASE_URL OR GROCY_BASE_PATH changed
|
||||
$hash = hash('sha256', file_get_contents(__DIR__ . '/version.json') . GROCY_BASE_URL . GROCY_BASE_PATH);
|
||||
$hashCacheFile = $viewcachePath . "/$hash.txt";
|
||||
if (!file_exists($hashCacheFile))
|
||||
{
|
||||
EmptyFolder($viewcachePath);
|
||||
touch($hashCacheFile);
|
||||
|
||||
if (function_exists('opcache_reset'))
|
||||
{
|
||||
opcache_reset();
|
||||
}
|
||||
|
||||
// Schema migration happens on the root route, so redirect to there
|
||||
header('Location: ' . (new UrlManager(GROCY_BASE_URL))->ConstructUrl('/'));
|
||||
exit();
|
||||
}
|
||||
|
||||
// Setup base application
|
||||
|
@@ -1,4 +1,4 @@
|
||||
- New related project: **grocy-desktop**
|
||||
- New related project: **Grocy Desktop**
|
||||
- => https://github.com/grocy/grocy-desktop
|
||||
- Run Grocy without a webserver just like a normal (Windows) desktop application
|
||||
- New "embedded mode" for Grocy to help running in "desktop application mode" [see README](https://github.com/grocy/grocy#embedded-mode)
|
||||
|
@@ -11,7 +11,5 @@
|
||||
- Some other small CSS fixes (context menus were not fully displayed when the parent container was to small, improved padding for text inputs)
|
||||
- As always: Updated translations (thanks all the translators)
|
||||
|
||||
### Self promotion
|
||||
[grocy-desktop](https://github.com/grocy/grocy-desktop) is now also available through the Microsoft Store
|
||||
|
||||
<a href="//www.microsoft.com/store/apps/9nwb1trnnksf?cid=storebadge&ocid=badge"><img src="https://assets.windowsphone.com/85864462-9c82-451e-9355-a3d5f874397a/English_get-it-from-MS_InvariantCulture_Default.png" alt="Get it from Microsoft" width="150px" /></a>
|
||||
### Other
|
||||
- [Grocy Desktop](https://github.com/grocy/grocy-desktop) is now also available through the Microsoft Store: https://apps.microsoft.com/detail/9NWB1TRNNKSF
|
||||
|
@@ -29,6 +29,6 @@
|
||||
- Also applies to quantity units, n-plural forms can be entered on the quantity unit edit page
|
||||
- It's not required to install the PHP gettext extension, on both, server and client, managed implementations of gettext are used ([oscarotero/Gettext](https://github.com/oscarotero/Gettext) & [oscarotero/gettext-translator](https://github.com/oscarotero/gettext-translator))
|
||||
- Some other small fixes and improvements
|
||||
- The "Add as barcode to existing product" productpicker workflow failed to add the barcode to the given product
|
||||
- The "Add as barcode to existing product" product picker workflow failed to add the barcode to the given product
|
||||
- Recipes can now be filter by stock availability
|
||||
- Added a feature flag (`config.php` setting) to also be able to hide all stock related UI elements and routes
|
||||
|
@@ -1,15 +1,15 @@
|
||||
### New feature: Custom entities / objects / lists
|
||||
### New Feature: Custom entities / objects / lists
|
||||
|
||||
- Custom entities are based on Userfields and can be used to add any custom lists you want to have in Grocy
|
||||
- They can have an own menu entry in the sidebar
|
||||
- => See "Manage master data" -> "Userentities" or try it on the demo: https://demo.grocy.info/userobjects/exampleuserentity
|
||||
|
||||
### New feature: Use the device camera for barcode scanning
|
||||
### New Feature: Use the device camera for barcode scanning
|
||||
- Available on any barcode-enabled field (so currently only for picking products) - a new camera button at the right of side the text field
|
||||
- Implemented using [QuaggaJS](https://github.com/serratus/quaggaJS) - camera stream processing happens totally offline / client-side
|
||||
- Please note due to browser security restrictions, this only works when serving Grocy via a secure connection (`https://`)
|
||||
- There is also a `config.php` setting `DISABLE_BROWSER_BARCODE_CAMERA_SCANNING` to disable this, if you don't need it at all (defaults to `false`)
|
||||
- I you have problems that barcodes are not recognized properly, there is a little "barcode scanner testing page" at [/barcodescannertesting](https://demo.grocy.info/barcodescannertesting)
|
||||
- If you have problems that barcodes are not recognized properly, there is a little "barcode scanner testing page" at [/barcodescannertesting](https://demo.grocy.info/barcodescannertesting)
|
||||
- => Quick video demo: https://www.youtube.com/watch?v=Y5YH6IJFnfc
|
||||
|
||||
### Stock improvements/fixes
|
||||
@@ -67,7 +67,7 @@
|
||||
### Userfield improvements/fixes
|
||||
- New Userfield type "Select list" for a list of predefined values where a single or also multiple values can then be selected on the entity object
|
||||
- New Userfield type "Link" - a single-line-textbox where the content will be rendered as a clickable link
|
||||
- Userfields of type "checkbox" are rendered as a checkmark in tables when checked (instead of "1" as till now)
|
||||
- Userfields of type "Checkbox" are rendered as a checkmark in tables when checked (instead of "1" as till now)
|
||||
- Product Userfields are now also rendered on the shopping list (for items which have a product referenced)
|
||||
- Fixed that the Userfield type "Preset list" had always the caption "Product group" instead of the configured one (thanks @oncleben31)
|
||||
|
||||
|
@@ -1,10 +1,10 @@
|
||||
### New feature: Transfer products between locations and edit stock entries
|
||||
### New Feature: Transfer products between locations and edit stock entries
|
||||
- New menu entry in the sidebar to transfer products (or as a shortcut in the more/context menu per line on the stock overview page)
|
||||
- New button "Stock entries" in the header of the stock overview page (or as a shortcut in the more/context menu per line) to show the detail stock entries behind each product
|
||||
- From there you can also edit the stock entries
|
||||
- (A huge THANK YOU goes to @kriddles for the work on this feature)
|
||||
|
||||
### New feature: Scan mode
|
||||
### New Feature: Scan mode
|
||||
- Just scan one product after another, no manual input required and audio feedback is provided
|
||||
- New switch-button on the purchase and consume page
|
||||
- When enabled
|
||||
@@ -14,13 +14,13 @@
|
||||
- Audio feedback is provided after scanning and on success/error of the transaction
|
||||
- => Quick video demo: https://www.youtube.com/watch?v=83dm9iD718k
|
||||
|
||||
### New feature: Self produced products
|
||||
### New Feature: Self produced products
|
||||
- To a recipe a product can be attached
|
||||
- This products needs a "Default best before date"
|
||||
- On using "Consume all ingredients needed by this recipe" and when it has a product attached, one unit of that product (per serving in purchase quantity unit) will be added to stock (with the proper price based on the recipe ingredients)
|
||||
- (Thanks @kriddles for the initial work on this)
|
||||
|
||||
### New feature: Freeze/Thaw products
|
||||
### New Feature: Freeze/Thaw products
|
||||
- New product options "Default best before days after freezing/thawing" to set how the best before date should be changed on freezing/thawing
|
||||
- New location option "Is freezer" to indicate if the location is a freezer
|
||||
- => When moving a product from/to a freezer location, the best before date is changed accordingly
|
||||
|
@@ -1,4 +1,4 @@
|
||||
### New feature: Price history per store
|
||||
### New Feature: Price history per store
|
||||
- Define stores under master data
|
||||
- New product option to set the default store
|
||||
- Track on purchase/inventory in which store you bought the product (gets prefilled by the last store you purchased the product, or the default store of the product if you never bought it)
|
||||
|
@@ -8,18 +8,18 @@
|
||||
|
||||
> ❗ If some pages/tables doesn't load at all, please check that your `/data/config.php` setting `CURRENCY` is a valid ISO 4217 currency code - that's most probably the issue then.
|
||||
|
||||
### New feature: Use any product related quantity unit anywhere
|
||||
### New Feature: Use any product related quantity unit anywhere
|
||||
- Finally it's possible to use any product related quantity unit on any page
|
||||
- Products still have one quantity unit stock and one (default) quantity unit purchase, but any QU, which has a direct or indirect conversion for that product, can be used to pick an amount
|
||||
- Because the stock quantity unit is now the base for everything, it cannot be changed after the product was once added to stock (for now, maybe there will be a possibilty to change it in a future release)
|
||||
|
||||
### New feature: Prefill purchase data by barcodes
|
||||
### New Feature: Prefill purchase data by barcodes
|
||||
- Imagine you buy for example eggs in different pack sizes and they have different barcodes
|
||||
- Each product barcode can be assigned an amount, quantity unit and store (on the product edit page), which is then automatically prefilled on the purchase page
|
||||
- Additionally, the last price per barcode will be tracked and prefilled as a "Total price" on purchase
|
||||
- (Thanks @kriddles for the initial work on this)
|
||||
|
||||
### New feature: User permissions
|
||||
### New Feature: User permissions
|
||||
- Users can now have permissions, can be configured per user on the "Manage users" page (lock icon)
|
||||
- Default permissions for new users can be set via a new `config.php` setting `DEFAULT_PERMISSIONS` (defaults to `ADMIN`, so no changed behavior when not configured)
|
||||
- All currently existing users will get all permissions (`ADMIN`) during the update/migration
|
||||
@@ -27,7 +27,7 @@
|
||||
- Other users only see their API keys on that page
|
||||
- (Thanks @fipwmaqzufheoxq92ebc for the initial work on this)
|
||||
|
||||
### New feature: External authentication support
|
||||
### New Feature: External authentication support
|
||||
- New `config.php` setting `AUTH_CLASS` to change the used authentication provider
|
||||
- Via LDAP
|
||||
- New `config.php` settings `LDAP_DOMAIN`, `LDAP_ADDRESS` and `LDAP_BASE_DN`
|
||||
@@ -56,14 +56,14 @@
|
||||
- Products can now be duplicated (new dropdown menu item on the products list page, all fields will be preset from the copied product, except the name)
|
||||
- Products can now be merged (new dropdown menu item on the products list page)
|
||||
- Useful if you have two products which are basically the same and want to replace all occurrences of one with the other one
|
||||
- When consuming or opening a parent product, which is currently not in stock, any in-stock sub product will now be consumed/opened (like already automatically done when consuming recipes)
|
||||
- When consuming or opening a parent product, which is currently not in stock, any in stock sub product will now be consumed/opened (like already automatically done when consuming recipes)
|
||||
- Opened stock entries get now consumed first by default when no specific stock entry is used/selected
|
||||
- So the default consume rule is now "Opened first, then first due first, then first in first out"
|
||||
- Optimized/clarified what the total/unit price on the purchase page is (thanks @kriddles)
|
||||
- On the purchase page the amount field is now displayed above/before the due date for better `TAB` handling (thanks @kriddles)
|
||||
- Changed that when `FEATURE_FLAG_STOCK_BEST_BEFORE_DATE_TRACKING` is disabled, products now get internally a due date of "never overdue" (aka `2999-12-31`) instead of today (thanks @kriddles)
|
||||
- Products can now be disabled to keep the history/journal, but hide it everywhere, without deleting it (new product option "Active", deleting a product now explicitly also deletes its journal and all other references) (thanks @kriddles for the initial work on this)
|
||||
- Products can now be hidden from the stock overview page, even if they are in-stock (new product option "Never show on stock overview", disabled by default, so no changed behavior when not configured)
|
||||
- Products can now be hidden from the stock overview page, even if they are in stock (new product option "Never show on stock overview", disabled by default, so no changed behavior when not configured)
|
||||
- That's maybe useful for parent products you only use as a kind of "container"
|
||||
- The due date is now also prefilled on the inventory page based on the products "Default due days" (was only done on the purchase page before)
|
||||
- On the stock journal page, it's now visible if a consume-booking was spoiled
|
||||
@@ -100,7 +100,7 @@
|
||||
- Fixed that a "Total price" on purchase was not handled correctly for tare weight handling enabled products (the total price was wrongly related to the amount including the tare weight)
|
||||
|
||||
### Shopping list improvements
|
||||
- Added a button to add all currently in-stock but overdue and expired products to the shopping list (thanks @m-byte)
|
||||
- Added a button to add all currently in stock but overdue and expired products to the shopping list (thanks @m-byte)
|
||||
- Improved that when `FEATURE_FLAG_STOCK` is disabled, all product/stock related inputs and buttons are now hidden on the shopping list page (thanks @fipwmaqzufheoxq92ebc)
|
||||
- Shopping list items can now have their own Userfields (entity `shopping_list`), on the shopping list table those fields are rendered additionally to the product Userfields
|
||||
- The print view is now configurable (new dialog before printing - option to hide header, group products by their product group, alternative list layout)
|
||||
@@ -253,8 +253,8 @@
|
||||
- `>=` greater or equal
|
||||
- `§` regular expression
|
||||
- `<value>` is the value to search for
|
||||
- New endpoint `/stock/shoppinglist/add-overdue-products` to add all currently in-stock but overdue products to a shopping list (thanks @m-byte)
|
||||
- New endpoint `/stock/shoppinglist/add-expired-products` to add all currently in-stock but expired products to a shopping list
|
||||
- New endpoint `/stock/shoppinglist/add-overdue-products` to add all currently in stock but overdue products to a shopping list (thanks @m-byte)
|
||||
- New endpoint `/stock/shoppinglist/add-expired-products` to add all currently in stock but expired products to a shopping list
|
||||
- New endpoints GET/POST/PUT `/users/{userId}/permissions` for the new user permissions feature mentioned above
|
||||
- New endpoint `/user` to get the currently authenticated user
|
||||
- New endpoint DELETE `/user/settings/{settingKey}` to delete a user setting
|
||||
|
@@ -2,7 +2,7 @@
|
||||
|
||||
> ⚠️ PHP 8.0 (with SQLite 3.27.2+) is from now on the only supported runtime version.
|
||||
|
||||
### New feature: Grocycode / label printer support
|
||||
### New Feature: Grocycode / label printer support
|
||||
|
||||
#### (Own) Product/stock entry/chores/batteries labels/barcodes
|
||||
- Print own labels/barcodes for products/stock entries/chores/batteries and then scan that code on every place a product/stock entry/chore/battery can be selected
|
||||
@@ -21,12 +21,12 @@
|
||||
- https://github.com/grocy/grocy/tree/v3.1.0/docs/label-printing.md
|
||||
- (Thanks a lot @mistressofjellyfish for the initial work on this)
|
||||
|
||||
### New feature: Meal plan sections
|
||||
### New Feature: Meal plan sections
|
||||
- Split the meal plan into sections like Breakfast/Lunch/Dinner
|
||||
- => New button "Configure sections" on the meal plan page to configure the sections (top right corner)
|
||||
- => Each meal plan entry can be assigned to a section
|
||||
|
||||
### New feature: Shopping list thermal printer support
|
||||
### New Feature: Shopping list thermal printer support
|
||||
- The shopping list can now be printed on a thermal printer
|
||||
- The printer must be compatible to the `ESC/POS` protocol and needs to be locally attached or network reachable to/by the machine hosting Grocy (so the server)
|
||||
- See the new `TPRINTER*` `config.php` options to configure the printer connection and other options
|
||||
@@ -38,7 +38,7 @@
|
||||
- Product barcodes are now enforced to be unique across products
|
||||
- On the stock overview page it's now also possible to search/filter by product barcodes (via the general search field)
|
||||
- The product picker on the consume and transfer page now only shows products which are currently in stock
|
||||
- Added a filter option to only show currently in-stock products on the stock overview and products list (master data) page
|
||||
- Added a filter option to only show currently in stock products on the stock overview and products list (master data) page
|
||||
- Added new columns on the stock overview page (hidden by default): Product description, product default location, parent product, product picture
|
||||
- Added a new product option "Should not be frozen" (defaults to disabled and only visible when `FEATURE_FLAG_STOCK_PRODUCT_FREEZING` is enabled)
|
||||
- When enabled, on moving the product to a freezer location (so when freezing it), a corresponding warning will be shown
|
||||
@@ -64,7 +64,7 @@
|
||||
- Fixed the form validation on the shopping list item page (thanks @Forceu)
|
||||
- Fixed that when adding products to the shopping list from the stock overview page, the used quantity unit was always the products default purchase QU (and not the selected one)
|
||||
- Fixed that the displayed last unit/total price was wrong when the used quantity unit was not the products stock QU
|
||||
- Fixed that the "Add as barcode to existing product" productpicker workflow did not work
|
||||
- Fixed that the "Add as barcode to existing product" product picker workflow did not work
|
||||
|
||||
### Recipe improvements/fixes
|
||||
- Recipe printing improvements (thanks @Ape)
|
||||
|
@@ -5,7 +5,7 @@
|
||||
- When adding (purchase) a product with "Default due days after freezing" set directly to a freezer location, the due date is now prefilled by that (instead of the normal "Default due days") (thanks @grahamc for the initial work on this)
|
||||
- Chores can now be merged (new item in the context-/more-menu on the chores list page)
|
||||
- Fixed that "Label per unit" stock entry labels (on purchase) weren't unique per unit
|
||||
- Fixed that the "Add as new product" productpicker workflow, started from the shopping list item form, always selected the default shopping list after finishing the flow
|
||||
- Fixed that the "Add as new product" product picker workflow, started from the shopping list item form, always selected the default shopping list after finishing the flow
|
||||
- Fixed that when undoing a product opened transaction and when the product has "Default due days after opened" set, the original due date wasn't restored
|
||||
- Fixed that "Track date only"-chores were shown as overdue on the due day on the chores overview page
|
||||
- Fixed that dropdown filters for tables maybe did not work after reordering columns
|
||||
|
@@ -1,4 +1,4 @@
|
||||
### New feature: Notes and Userfields for stock entries
|
||||
### New Feature: Notes and Userfields for stock entries
|
||||
|
||||
- Stock entries can now have notes
|
||||
- For example to distinguish between same, yet different products (e.g. having only a generic product "Chocolate" and note in that field what special one it is exactly this time - as an alternative to have sub products)
|
||||
@@ -10,7 +10,7 @@
|
||||
- => Configure the desired Userfields for the entity `stock`
|
||||
- => Those Userfields are then visible on the same places as mentioned above for the built-in "Note" field
|
||||
|
||||
### New feature: Recipes "Due score"
|
||||
### New Feature: Recipes "Due score"
|
||||
|
||||
- A number (new column on the recipes page) which represents a score which is higher the more ingredients, of the corresponding recipe, currently in stock are due soon, overdue or already expired
|
||||
- Or in other words: A score to see which recipes to cook to not waste already overdue/expired or due soon products
|
||||
@@ -40,7 +40,7 @@
|
||||
- => Instead the corresponding inverse conversion is now always created/updated/deleted automatically
|
||||
- New product option "Disable own stock" (defaults to disabled)
|
||||
- When enabled, the corresponding product can't have own stock, means it will not be selectable on purchase (useful for parent products which are just used as a summary/total view of the sub products)
|
||||
- The location content sheet can now optionally list also out of stock products (at the products default location, new checkbox "Show only in-stock products" at the top of the page, defaults to enabled)
|
||||
- The location content sheet can now optionally list also out of stock products (at the products default location, new checkbox "Show only in stock products" at the top of the page, defaults to enabled)
|
||||
- Added a location filter to the stock entries page
|
||||
- Added the product Grocycode as a (hidden by default) column to the products list (master data)
|
||||
- The price entered on the inventory page is now related to the selected quantity unit (like on the purchase page, was always related to the products stock QU before)
|
||||
|
@@ -4,14 +4,16 @@
|
||||
|
||||
> _Recommendation: Benchmark tests showed that e.g. unit conversion handling is up to 5 times faster when using a more recent (3.39.4+) SQLite version._
|
||||
|
||||
### New feature: Quantity unit conversions with unlimited hierarchy
|
||||
### New Feature: Indirect quantity unit conversions with unlimited levels
|
||||
|
||||
- Quantity unit conversions now support transitive conversions, means the QU hierarchy has now unlimited levels (thanks a lot @esclear)
|
||||
- Quantity unit conversions now support indirect conversions with unlimited levels (thanks a lot @esclear)
|
||||
- _Explained by a practical example: When a conversion between Teaspoons and Milliliters and another one between Milliliters and Liters exists (and so forth; unlimited levels), Grocy can now calculate Teaspoons to Liters (before a direct conversion definition between Teaspoons and Liters was required)_
|
||||
- **Heads up:** If you have such "each to each absolute conversion definitions" currently (for the example above the conversion between Teaspoons and Liters), you should clean them up, since they are no longer needed
|
||||
- The product option "Factor purchase to stock quantity unit" was removed
|
||||
- => Use normal product specific QU conversions instead, if needed
|
||||
- An existing "Factor purchase to stock quantity unit" was automatically migrated to a product specific QU conversion
|
||||
|
||||
### New feature: Stock reports
|
||||
### New Feature: Stock reports
|
||||
|
||||
- New button "Reports" on the stock overview page
|
||||
- The first report (more to come) "Spendings" makes it possible to explore (pie chart and table data) the total value spend by product or product group in any time range
|
||||
@@ -35,7 +37,7 @@
|
||||
- This option will be automatically set on changing the entry's due date
|
||||
- The product option "Quick consume amount" (the amount used for the "quick consume/open buttons" on the stock overview page) has been split into another option "Quick open amount", to be able to set different amounts for consume and open (defaults to the "Quick consume amount" per product, so no changed behavior when not configured)
|
||||
- Changed that for the product's average and last price (and for the price history chart) stock transactions with an empty or `0` price are ignored
|
||||
- Added a filter option to only show currently out-of-stock products on the products list (master data) page
|
||||
- Added a filter option to only show currently out of stock products on the products list (master data) page
|
||||
- When clicking a product name on the products list (master data) or on the stock journal page, the product card will now be displayed (like on the stock overview page)
|
||||
- When using/scanning a product barcode and the purchase or inventory page, the barcode's note will now also be prefilled (if any)
|
||||
- Each row on the stock journal now also has a context-/more menu for quick access to product related actions (the same as on the stock overview page)
|
||||
@@ -43,7 +45,7 @@
|
||||
- Fixed that hiding the "Purchased date" column (table options) on the stock entries page didn't work
|
||||
- Fixed that sorting by the "Value" and "Min. stock amount" columns on the stock overview page didn't work
|
||||
- Fixed that the consumed amount was wrong, when consuming multiple substituted subproducts at once and when multiple/different conversion factors were involved
|
||||
- Fixed that for a product's average price, only currently in-stock items were considered, not already consumed ones
|
||||
- Fixed that for a product's average price, only currently in stock items were considered, not already consumed ones
|
||||
- Fixed that when copying a product, some fields (like "Default consume location" or "Disable own stock) weren't copied along
|
||||
- Fixed that the total product count on the stock overview page also included products with "Never show on stock overview" enabled
|
||||
|
||||
|
@@ -8,7 +8,7 @@
|
||||
|
||||
### Shopping list
|
||||
|
||||
- Changed that prices on the shopping list (table columns "Last price (Unit)" and "Last price (Total)") are now related to the there selected quantity unit (instead of to the product's QU stock as before)
|
||||
- Changed that unit prices on the shopping list (table column "Last price (Unit)") are now related to the there selected quantity unit (instead of to the product's QU stock as before)
|
||||
|
||||
### Meal plan
|
||||
|
||||
|
13
changelog/72_4.0.2_2023-08-19.md
Normal file
@@ -0,0 +1,13 @@
|
||||
### Stock
|
||||
|
||||
- The stock report "Spendings" now also supports grouping by stores
|
||||
- Fixed that the upgrade failed when having (a lot of) redundant ("each to each") default quantity unit conversion definitions (thanks a lot @alkuzman and @esclear)
|
||||
- More on that by a practical example: When a conversion between Teaspoons and Milliliters and another one between Milliliters and Liters exists (and so forth; unlimited levels), Grocy can now (since v4.0.0) calculate the derived factor to convert Teaspoons to Liters on its own (before a direct conversion definition between Teaspoons and Liters was required)
|
||||
- So you might have a lot of such "each to each absolute conversion definitions" currently, when you were affected by failed upgrades (timeout problems due to that resolving indirect conversion factors took very long)
|
||||
- **Heads up:** This is now fixed, but you should clean up those redundant "each to each" definitions (in the example above the conversion between Teaspoons and Liters), since they are no longer needed
|
||||
- Fixed that the "Mark this stock entry as open"-button on the stock entries page opened always one unit instead of the whole stock entry
|
||||
- Fixed that edited stock entries were not considered in some cases (affecting the product's average price and the stock reports)
|
||||
|
||||
### Recipes
|
||||
|
||||
- Fixed that ingredient cost/energy values were wrong when unit conversions but _no_ product substitutions were involved
|
12
changelog/73_4.0.3_2023-09-02.md
Normal file
@@ -0,0 +1,12 @@
|
||||
### Stock
|
||||
|
||||
- Performance improvements related to the stock overview page / displaying a product card
|
||||
- Performance improvements related to consuming products (thanks @alkuzman)
|
||||
|
||||
### Userfields
|
||||
|
||||
- New Userfield type "Number (currency)", just like the type "Number (decimal)", but it will render the value according to / with the configured currency
|
||||
|
||||
### General
|
||||
|
||||
- Performance improvements related to table (layout) loading handling
|
43
changelog/74_4.1.0_2024-02-09.md
Normal file
@@ -0,0 +1,43 @@
|
||||
> 💡 PHP 8.3 is from now on (additionally to PHP 8.2) supported.
|
||||
>
|
||||
> ⚠️ PHP 8.1 is no longer supported.
|
||||
|
||||
### Stock
|
||||
|
||||
- Fixed that the location dropdown on the consume page contained the same location multiple times if there are currently stock entries at multiple locations of the corresponding product
|
||||
- Fixed that the status filter "_n_ products are overdue" on the stock overview page also counted/included stock entries due today or tomorrow
|
||||
- Fixed that the stock report "Spendings" did not take products without an assigned product group into account (thanks @Torqu3Wr3nch for the initial work on this)
|
||||
- Fixed that the success message after opening a stock entry on the stock entries page displayed always an amount of `1` instead of the actual amount opened
|
||||
- Fixed that the "Consume this stock entry as spoiled" context menu action on the stock entries page consumed always an amount of `1` instead of the whole stock entry
|
||||
|
||||
### Recipes
|
||||
|
||||
- Fixed that copying recipes with special characters in the name was not possible
|
||||
|
||||
### Meal plan
|
||||
|
||||
- Fixed that the meal plan page was broken after deleting all meal plan items of a week
|
||||
|
||||
### Calendar
|
||||
|
||||
- The different event types (due products, chores, tasks and so on) can now have different colors
|
||||
- => New button "Configure colors" on the calendar page to configure these colors (top right corner)
|
||||
|
||||
### Tasks
|
||||
|
||||
- Added a new table filter for categories (thanks @geoffwright240 for the initial work on this)
|
||||
|
||||
### Userfields
|
||||
|
||||
- Fixed that when having a userfield of type "Select list (multiple items can be selected)" and selecting no item, editing of the corresponding form was broken
|
||||
|
||||
### General
|
||||
|
||||
- Night mode is now also used on the login page if that's the system preferred color scheme (generally if night mode is on or not is based on user settings and before logging in no user context is available)
|
||||
- Optimized sidebar icon spacing (thanks @chris-thorn)
|
||||
- Fixed that file uploads (product pictures and so on) didn't work for files where the file name contains multiple spaces
|
||||
- Fixed that some dialogs were not properly (too small) displayed (mostly affecting Firefox >= 121)
|
||||
|
||||
### API
|
||||
|
||||
- Optimized that the endpoints `GET /objects/{entity}` and `GET /objects/{entity}/{objectId}` now also return Userfields for the entity `stock`
|
26
changelog/75_4.2.0_2024-03-15.md
Normal file
@@ -0,0 +1,26 @@
|
||||
### Stock
|
||||
|
||||
- When using/scanning a stock entry Grocycode on the transfer page, the "Use specific stock item" dropdown (and "From location") is now also prefilled accordingly
|
||||
- Fixed that for the product's last price stock transactions with an empty or `0` price weren't ignored
|
||||
- Fixed that when copying a product, the field "Move on open" wasn't copied along
|
||||
|
||||
### Shopping list
|
||||
|
||||
- The shopping lists dropdown on the shopping list page now also shows the number of items on the corresponding shopping list
|
||||
|
||||
### Recipes
|
||||
|
||||
- Optimized that when creating a recipe, the desired serving amount is now initially prefilled by the recipe's base serving amount
|
||||
|
||||
### Batteries
|
||||
|
||||
- It's now possible to track any addtional info on a battery charge cycle by using Userfields (thanks @TheDodger)
|
||||
- => Configure the desired Userfields for the entity `battery_charge_cycles`
|
||||
- => The on a battery charge cycle tracking entered information is then visible on the corresponding battery charge cycle journal entry
|
||||
|
||||
### General
|
||||
|
||||
- Optimized that file uploads are no longer completely buffered in memory before writing them to disk (thanks @bbx0)
|
||||
- Optimized top right corner menus icon spacing (thanks @TheDodger for the initial work on this)
|
||||
- Fixed again that some dialogs were not properly (too small) displayed (this time mostly affecting Chrome/Edge)
|
||||
- Fixed that table states (visible columns, sorting, column order and so on) could be reset to default after not accessing/using the corresponding page for a certain amount of time
|
28
changelog/76_4.3.0_2024-12-23.md
Normal file
@@ -0,0 +1,28 @@
|
||||
### Stock
|
||||
|
||||
- Optimized form validation (max amount checks) related to unit conversion with a lot of decimal places on the consume and transfer page
|
||||
- Optimized that the stock report "Spendings" now excludes self produced products (thanks @danielr18 for the initial work on this)
|
||||
- Fixed that when copying a product, the field "Treat opened as out of stock" wasn't copied along (thanks @TheDodger)
|
||||
- Fixed that the product groups filter on the master data products page used a contains search instead of an exact search
|
||||
- Fixed that Scan Mode on the purchase and consume page didn't work (not all fields were properly populated) when using/scanning a product Grocycode
|
||||
|
||||
### Shopping list
|
||||
|
||||
- Fixed that when printing a shoppping list, the table/list wasn't sorted (will now be sorted alphabetically by the product name of the corresponding list item)
|
||||
- Fixed that when deleting a shopping list item and marking another one as done while not reloading the page in-between, the deleted item reappeared (was only a visual problem, there was no problem on deleting the item on the backend / in the database)
|
||||
|
||||
### Recipes
|
||||
|
||||
- When self producing a product ("Produces product" recipe option) the name of the recipe is now added to the note field of the created stock entry
|
||||
- Fixed that when `FEATURE_FLAG_STOCK_STOCK` was set to `false`, the "Put missing products on shopping list"-button was not visible
|
||||
- Fixed that scanning a product barcode on the recipe ingredient edit page didn't work
|
||||
- Fixed that the recipe edit button on the recipes page gallery view didn't work
|
||||
|
||||
### Userfields
|
||||
|
||||
- Userentity tables (custom objects / lists) now also have the table options icon (top left corner eye icon, to e.g. add a grouping condition)
|
||||
- Userfield names can now also contain underscores
|
||||
|
||||
### API
|
||||
|
||||
- Optimized that uploading files where the file name contains non-ASCII characters is now also possible
|
86
changelog/77_4.4.0_2025-01-24.md
Normal file
@@ -0,0 +1,86 @@
|
||||
### New Feature: External Barcode Lookups as a product picker workflow + a built-in Plugin for Open Food Facts
|
||||
|
||||
- Added a new product picker workflow "External barcode lookup"
|
||||
- This executes the configured barcode lookup plugin with the given barcode
|
||||
- If the lookup was successful, the product edit page of the created product is displayed where the product setup can be completed (if required)
|
||||
- After that, the transaction is continued with that product as usual
|
||||
- A plugin for [Open Food Facts](https://world.openfoodfacts.org/) is now included and used by default (see the `config.php` option `STOCK_BARCODE_LOOKUP_PLUGIN` and maybe change it as needed)
|
||||
- The product name and image (and of course the barcode itself) are taken over from Open Food Facts to the product being looked up
|
||||
- => Quick video demo (using a Barcode Laser Scanner): https://www.youtube.com/watch?v=-moXPA-VvGc
|
||||
- => Quick video demo (using Browser Camera Barcode Scanning): https://www.youtube.com/watch?v=veezFX4X1JU
|
||||
|
||||
### Stock
|
||||
|
||||
- Added a new stock setting (top right corner settings menu) "Show all out of stock products" to optionally also show all out of stock products on the stock overview page (defaults to disabled, so no changed behavior when not configured)
|
||||
- By default the stock overview page lists all products which are currently in stock or below their min. stock amount
|
||||
- When this new setting is enabled, all (active) products are always shown
|
||||
- Added a new product option "Can't be opened"
|
||||
- When enabled the product open functionality for that product is disabled
|
||||
- Defaults to disabled, so no changed behavior when not configured
|
||||
- Added a new product option "Default purchase price type"
|
||||
- Can be used to set the default price type (Unit price / Total price) on the purchase page per product
|
||||
- Previously "Unit price" was the default on purchase and the selection was not saved and not reset when selecting another product, means the price type selection was retained when doing multiple purchase transactions in one go
|
||||
- The default for the new product option is "Unspecified" which keeps the previous behavior
|
||||
- When products are automatically added to the shopping list (e.g. by the "below defined min. stock amount"-functionality or when adding missing recipe ingredients) the product's "Default quantity unit purchase" is now used (instead of the product's "Quantity unit stock")
|
||||
- Product barcode matching is now case-insensitive
|
||||
- Added a new column "Product picture" on the products list (master data) page (hidden by default)
|
||||
- Optimized that when navigation between the different "Group by"-variants on the stock report "Spendings", the selected date range now remains persistent
|
||||
- Added a new "Presets for new products" stock setting for the "Default stock entry label" option of new products
|
||||
- Added a trendline to the price history chart (product card)
|
||||
- Added a "Add to shopping list"-button on the product card
|
||||
- Optimized that when moving a product to a freezer location (so when freezing it) the due date will no longer be replaced when the product option "Default due days after freezing" is set to `0`
|
||||
- The "Decimal places allowed" stock settings now have an upper limit of 10 (since such a high number makes not so much sense in reality and causes form validation problems)
|
||||
- Fixed that a once set quantity unit on a product barcode could not be removed on edit
|
||||
- Fixed that when consuming a specific stock entry which is opened, and which originated from a before partly opened stock entry, the unopened one was wrongly consumed instead
|
||||
|
||||
### Shopping list
|
||||
|
||||
- Added a new shopping list setting (top right corner settings menu) "Round up quantity amounts to the nearest whole number"
|
||||
- When enabled, all quantity amounts on the shopping list are always displayed rounded up to the nearest whole number
|
||||
- Defaults to disabled, so no changed behavior when not configured
|
||||
|
||||
### Recipes
|
||||
|
||||
- Consuming a recipe is now also possible when not all needed ingredients are currently in stock (the in stock amount, if any, of the corresponding ingredient will be consumed in that case)
|
||||
- For in stock ingredients, the amount actually in stock is now displayed next to the hint "Enough in stock"
|
||||
- Added a new recipe ingredient option "Round up quantity amounts to the nearest whole number"
|
||||
- When enabled, resulting quantity amounts (after scaling according the desired serving amount) are always rounded up to the nearest whole number
|
||||
- Defaults to disabled, so no changed behavior when not configured
|
||||
- Optimizations/changes when adding missing recipe ingredients to the shopping list:
|
||||
- When the ingredient option "Only check if any amount is in stock" is enabled and when no corresponding unit conversion exists, the amount/unit is now taken "as is" (as defined in the recipe ingredient) into the created shopping list item
|
||||
- The shopping list item no longer gets a note "Added for recipe" set and the ingredient note is no longer appended
|
||||
- When the corresponding product is already on the shopping list, the amount of the existing item is incremented instead of creating a new shopping list item
|
||||
- When a new shopping list item is created, the product's "Default quantity unit purchase" is now used (instead of the product's "Quantity unit stock")
|
||||
- When no price information is available for at least one ingredient, a red exclamation mark is now displayed next to the recipe total cost information
|
||||
- When clicking a recipe ingredient / product name, the product card will now be opened like on many other places throughout Grocy
|
||||
- Fixed that calories/costs of recipe ingredients were wrong when the ingredient option "Only check if any amount is in stock" was set and the on the ingredient used quantity unit was different from the product's QU stock
|
||||
- Fixed that multi-nested recipes (at least 3 levels of "included recipes") resulted in wrong amounts/costs/calories calculated for the ingredients originating in those nested recipes (also affected the meal plan)
|
||||
|
||||
### Meal plan
|
||||
|
||||
- Fixed that amounts/costs/calories were wrong for recipes which had at least 2 levels of "included recipes"
|
||||
|
||||
### Chores
|
||||
|
||||
- Added a possibility to see if a scheduled chore was tracked/done on time or not:
|
||||
- When tracking chores, the "Next estimated tracking date" (so the current scheduled time) is now also stored in the corresponding chore journal entry and displayed in a new column "Scheduled tracking time" on the chores journal page
|
||||
- When the "Tracked time" is later than the "Scheduled tracking time", the corresponding chore journal entry is now highlighted in red on the chores journal page
|
||||
- Added a new column "Time of tracking" on the chores journal page (displays the time when the tracking actually happened, hidden by default)
|
||||
- Added a new option "Swap track next schedule / track now buttons" (chores settings / top right corner settings menu) to swap the "Track next chore schedule" / "Track chore execution now" buttons/menu items on the chores overview page (defaults to disabled, so no changed behavior when not configured)
|
||||
|
||||
### Userfields
|
||||
|
||||
- Optimized Userfields of type "Checkbox"
|
||||
- When it's a mandatory Userfield, the initial state of the corresponding checkbox is now indeterminate, means it's now also possible to actively not check it (previously mandatory meant the checkbox has to be set)
|
||||
- Fixed that Userfield default values were not initialized for the `stock` entity (so affecting the purchase and inventory page)
|
||||
- Fixed that uploading bigger or multiple files (so when the upload usually takes a little longer) didn't work (Userfield type "File")
|
||||
|
||||
### General
|
||||
|
||||
- Optimized nested modal dialogs:
|
||||
- Nested dialogs are now no longer displayed "in each other" and instead "on top of each other"
|
||||
- Dialogs can now be closed with the `ESC` key on the keyboard
|
||||
- There is no longer a close button at the bottom (outside of the displayed `iframe`) and instead one at the top right corner of the dialog
|
||||
- Wide dialogs (e.g. all showing a table, like showing stock entries of a product from the stock overview more/context menu per line) now use the full screen width
|
||||
- Improved the handling of the initial field focus on form pages
|
||||
- The previously manually necessary update steps (e.g. emptying the `data/viewcache` directory) are now fully automated, so no need to do this manually after this and future updates
|
21
changelog/78_4.4.1_2025-01-31.md
Normal file
@@ -0,0 +1,21 @@
|
||||
### Stock
|
||||
|
||||
- Fixed that the built-in Open Food Facts external barcode lookup plugin used the staging environment of the Open Food Facts API instead of the production one
|
||||
- Fixed that the product group filter on the products page (master data) didn't work when the selected product group contained special characters
|
||||
- Fixed that the product filter on the stock journal summary page didn't work when the selected product contained special characters
|
||||
|
||||
### Shopping list
|
||||
|
||||
- Optimized that non-number amounts are now prevented on database level (was infamously a problem when using specific community contributed alternative clients)
|
||||
|
||||
### Tasks
|
||||
|
||||
- Fixed that set table filters were not applied after editing or adding a task
|
||||
|
||||
### Userfields
|
||||
|
||||
- Fixed that saving Userfields of type "Select list (multiple items can be selected)" did not work
|
||||
|
||||
### General
|
||||
|
||||
- Optimized that when navigating between form input fields via the keyboard (`TAB`) there was an unwanted delay at some places
|
28
changelog/79_4.4.2_2025-02-28.md
Normal file
@@ -0,0 +1,28 @@
|
||||
### Stock
|
||||
|
||||
- Optimized that the built-in Open Food Facts external barcode lookup plugin now uses the localized product name (if provided by the Open Food Facts API, based on the set Grocy language of the current user)
|
||||
- Fixed that the product filter on the stock entires page didn't work when the product column was reordered / not the second one
|
||||
|
||||
### Shopping list
|
||||
|
||||
- When the shopping list setting (top right corner settings menu) "Round up quantity amounts to the nearest whole number" is enabled, the "Last price (Total)" of each shopping list item and the total value of the shopping list are now also scaled up accordingly
|
||||
- The print options (show header, layout type etc.) are now saved (as user settings, so global defaults can also defined in `config.php` as usual)
|
||||
|
||||
### Userfields
|
||||
|
||||
- Fixed that saving Userfields of type "Link (with title)" did not work
|
||||
|
||||
### General
|
||||
|
||||
- Fixed that most dialogs didn't work when hosting Grocy "embedded" in an `iframe` (affecting e.g. the [Home Assistant Add-on](https://github.com/hassio-addons/addon-grocy))
|
||||
|
||||
### API
|
||||
|
||||
- Exposed the `permission_hierarchy` entity (read only, => `GET /objects/permission_hierarchy`) to provide a permission name / id mapping
|
||||
|
||||
### Other
|
||||
- A quick reminder about official native Grocy app experiences:
|
||||
- Grocy's web frontend is responsive and an "installable web app" ([PWA](https://en.wikipedia.org/wiki/Progressive_web_app), without providing any offline usage capabilities), that provides a pretty native mobile app-like experience without the need for additional tools
|
||||
- => Quick video demo on Android/Firefox: https://www.youtube.com/watch?v=L38drVZfwHs
|
||||
- => Quick video demo on Android/Chrome: https://www.youtube.com/watch?v=rjLdXUFDNuk
|
||||
- [Grocy Desktop](https://github.com/grocy/grocy-desktop) is a way to run Grocy without having to manage a webserver, just like a normal (Windows) desktop application - available as a [classic `.msi` installation package](https://releases.grocy.info/latest-desktop) or as a [Microsoft Store App](https://apps.microsoft.com/detail/9NWB1TRNNKSF)
|
16
changelog/80_4.5.0_2025-03-28.md
Normal file
@@ -0,0 +1,16 @@
|
||||
### Stock
|
||||
|
||||
- Optimizations in the built-in Open Food Facts external barcode lookup plugin:
|
||||
- A provided but empty localized product name is now ignored
|
||||
- Non-ASCII characters in product names are now ignored (e.g. line breaks caused problems)
|
||||
- Optimized that when an external barcode lookup plugin returned an image URL with query parameters, an invalid picture (file name) was added to the created product
|
||||
- Added a new column "Default store" on the stock overview page (hidden by default)
|
||||
|
||||
### General
|
||||
|
||||
- Optimized that the default font of the web frontend is now also used for non-latin characters
|
||||
- Label printer WebHooks now include a new property/field `details` (that's the full product/chore/battery/etc. object)
|
||||
- And also `stock_entry` (containing the full stock entry object) when printing a stock entry label
|
||||
- The component used (so far [Quagga2](https://github.com/ericblade/quagga2)) that powers the camera barcode scanner was replaced by [ZXing](https://github.com/zxing-js/library) which should perform overall better and it also supports 2D barcodes (QRCode/DataMatrix) (thanks @gergof)
|
||||
- New translations: (thanks all the translators)
|
||||
- Bulgarian (demo available at <https://bg.demo.grocy.info>)
|
61
changelog/81_UNRELEASED_xxxx-xx-xx.md
Normal file
@@ -0,0 +1,61 @@
|
||||
> ⚠️ xxxBREAKING CHANGESxxx
|
||||
|
||||
> ❗ xxxImportant upgrade informationXXX
|
||||
|
||||
> 💡 xxxMinor upgrade informationXXX
|
||||
|
||||
### New Feature: xxxx
|
||||
|
||||
- xxx
|
||||
|
||||
### Stock
|
||||
|
||||
- Optimized the line plot markers color of the price history chart (product card) (thanks @DeepCoreSystem)
|
||||
- Fixed that German Umlauts were removed from product names when looking up a barcode via the built-in Open Food Facts external barcode lookup plugin
|
||||
- Fixed that when using/scanning a barcode on the purchase page with a note attached (which prefills the note field) and when manually selecting another product afterwards, the note of the previously used barcode was incorrectly prefilled again
|
||||
- Fixed that the "next input focus handling" (jumping to the next input after entering a value) didn't work at some places (e.g. after entering a purchased date on the purchase page)
|
||||
|
||||
### Shopping list
|
||||
|
||||
- An amount of `0` is now allowed for shopping list items (just a convenience optimization, it was already possible to leave the amount field empty which implicitly resulted in an amount of `0`)
|
||||
- Fixed that the "Add all list items to stock" workflow closed the dialog after every item instead only after the last one was added
|
||||
|
||||
### Recipes
|
||||
|
||||
- xxx
|
||||
|
||||
### Meal plan
|
||||
|
||||
- xxx
|
||||
|
||||
### Chores
|
||||
|
||||
- xxx
|
||||
|
||||
### Calendar
|
||||
|
||||
- xxx
|
||||
|
||||
### Tasks
|
||||
|
||||
- xxx
|
||||
|
||||
### Batteries
|
||||
|
||||
- xxx
|
||||
|
||||
### Equipment
|
||||
|
||||
- xxx
|
||||
|
||||
### Userfields
|
||||
|
||||
- xxx
|
||||
|
||||
### General
|
||||
|
||||
- Fixed that the date input shorthand `[+/-]n[d/m/y]` didn't work when the value lenght was >= 4 (e.g. `+10d`)
|
||||
|
||||
### API
|
||||
|
||||
- xxx
|
@@ -4,7 +4,7 @@
|
||||
|
||||
> 💡 xxxMinor upgrade informationXXX
|
||||
|
||||
### New feature: xxxx
|
||||
### New Feature: xxxx
|
||||
|
||||
- xxx
|
||||
|
||||
|
@@ -1,29 +1,25 @@
|
||||
{
|
||||
"require": {
|
||||
"php": ">=8.1",
|
||||
"php": ">=8.2",
|
||||
"slim/slim": "^4.0",
|
||||
"slim/psr7": "^1.0",
|
||||
"slim/http": "^1.0",
|
||||
"php-di/php-di": "^7.0.3",
|
||||
"berrnd/slim-blade-view": "^1.0.0",
|
||||
"morris/lessql": "dev-php82",
|
||||
"gettext/gettext": "dev-php81",
|
||||
"gettext/gettext": "^4.8.10",
|
||||
"eluceo/ical": "^2.2.0",
|
||||
"erusev/parsedown": "^1.7",
|
||||
"gumlet/php-image-resize": "^2.0",
|
||||
"ezyang/htmlpurifier": "^4.13",
|
||||
"interficieis/php-barcode": "^2.0.2",
|
||||
"guzzlehttp/guzzle": "^7.0",
|
||||
"mike42/escpos-php": "^3.0"
|
||||
"mike42/escpos-php": "^4.0"
|
||||
},
|
||||
"repositories": [
|
||||
{
|
||||
"type": "vcs",
|
||||
"url": "https://github.com/berrnd/lessql"
|
||||
},
|
||||
{
|
||||
"type": "vcs",
|
||||
"url": "https://github.com/berrnd/Gettext"
|
||||
}
|
||||
],
|
||||
"autoload": {
|
||||
|
1318
composer.lock
generated
@@ -64,9 +64,10 @@ Setting('BASE_PATH', '');
|
||||
Setting('BASE_URL', '/');
|
||||
|
||||
// The plugin to use for external barcode lookups,
|
||||
// must be the filename (folder /data/plugins) without the .php extension,
|
||||
// see /data/plugins/DemoBarcodeLookupPlugin.php for an example implementation
|
||||
Setting('STOCK_BARCODE_LOOKUP_PLUGIN', 'DemoBarcodeLookupPlugin');
|
||||
// must be the filename (folder "/plugins" for built-in plugins or "/data/plugins" for user plugins) without the .php extension,
|
||||
// see /plugins/DemoBarcodeLookupPlugin.php for a commented example implementation
|
||||
// Leave empty to disable external barcode lookups
|
||||
Setting('STOCK_BARCODE_LOOKUP_PLUGIN', 'OpenFoodFactsBarcodeLookupPlugin');
|
||||
|
||||
// If, however, your webserver does not support URL rewriting, set this to true
|
||||
Setting('DISABLE_URL_REWRITING', false);
|
||||
@@ -102,14 +103,14 @@ Setting('LDAP_UID_ATTR', ''); // Windows AD: "sAMAccountName", OpenLDAP: "uid",
|
||||
Setting('DEFAULT_PERMISSIONS', ['ADMIN']);
|
||||
|
||||
// "1D" (=> Code128) or "2D" (=> DataMatrix)
|
||||
Setting('GROCYCODE_TYPE', '1D');
|
||||
Setting('GROCYCODE_TYPE', '2D');
|
||||
|
||||
|
||||
// Label printer settings
|
||||
Setting('LABEL_PRINTER_WEBHOOK', ''); // The URI that Grocy will POST to when asked to print a label
|
||||
Setting('LABEL_PRINTER_RUN_SERVER', true); // Whether the webhook will be called server- or client-side
|
||||
Setting('LABEL_PRINTER_PARAMS', ['font_family' => 'Source Sans Pro (Regular)']); // Additional parameters supplied to the webhook
|
||||
Setting('LABEL_PRINTER_HOOK_JSON', false); // TRUE to use JSON or FALSE to use normal POST request variables
|
||||
Setting('LABEL_PRINTER_HOOK_JSON', true); // TRUE to use JSON or FALSE to use normal POST request variables
|
||||
|
||||
|
||||
// Thermal printer options
|
||||
@@ -179,6 +180,7 @@ DefaultUserSetting('product_presets_product_group_id', -1); // Default product g
|
||||
DefaultUserSetting('product_presets_qu_id', -1); // Default quantity unit id for new products (-1 means no quantity unit is preset)
|
||||
DefaultUserSetting('product_presets_default_due_days', 0); // Default due days for new products (-1 means that the product will be never overdue)
|
||||
DefaultUserSetting('product_presets_treat_opened_as_out_of_stock', true); // Default "Treat opened as out of stock" option for new products
|
||||
DefaultUserSetting('product_presets_default_stock_label_type', 0); // "Default stock entry label" option for new products (0 = No label, 1 = Single Label, 2 = Label per unit)
|
||||
DefaultUserSetting('stock_decimal_places_amounts', 4); // Default decimal places allowed for amounts
|
||||
DefaultUserSetting('stock_decimal_places_prices_input', 2); // Default decimal places allowed for prices (input)
|
||||
DefaultUserSetting('stock_decimal_places_prices_display', 2); // Default decimal places allowed for prices (display)
|
||||
@@ -190,14 +192,19 @@ DefaultUserSetting('stock_default_consume_amount_use_quick_consume_amount', fals
|
||||
DefaultUserSetting('scan_mode_consume_enabled', false); // If scan mode on the consume page is enabled
|
||||
DefaultUserSetting('scan_mode_purchase_enabled', false); // If scan mode on the purchase page is enabled
|
||||
DefaultUserSetting('show_icon_on_stock_overview_page_when_product_is_on_shopping_list', true); // When enabled, an icon is shown on the stock overview page (next to the product name) when the prodcut is currently on a shopping list
|
||||
DefaultUserSetting('stock_overview_show_all_out_of_stock_products', false); // By default the stock overview page lists all products which are currently in stock or below their min. stock amount - when this is enabled, all (active) products are always shown
|
||||
DefaultUserSetting('show_purchased_date_on_purchase', false); // Whether the purchased date should be editable on purchase (defaults to today otherwise)
|
||||
DefaultUserSetting('show_warning_on_purchase_when_due_date_is_earlier_than_next', true); // Show a warning on purchase when the due date of the purchased product is earlier than the next due date in stock
|
||||
|
||||
// Shopping list settings
|
||||
DefaultUserSetting('shopping_list_to_stock_workflow_auto_submit_when_prefilled', false); // Automatically do the booking using the last price and the amount of the shopping list item, if the product has "Default due days" set
|
||||
DefaultUserSetting('shopping_list_show_calendar', false); // When enabled, a small (month view) calendar will be shown on the shopping list page
|
||||
DefaultUserSetting('shopping_list_round_up', false); // When enabled, all quantity amounts on the shopping list are always displayed rounded up to the nearest whole number
|
||||
DefaultUserSetting('shopping_list_auto_add_below_min_stock_amount', false); // If products should be automatically added to the shopping list when they are below their min. stock amount
|
||||
DefaultUserSetting('shopping_list_auto_add_below_min_stock_amount_list_id', 1); // When the above setting is enabled, the id of the shopping list to which the products will be added
|
||||
DefaultUserSetting('shopping_list_print_show_header', true); // Default for the shopping list print option "Show header"
|
||||
DefaultUserSetting('shopping_list_print_group_by_product_group', true); // Default for the shopping list print option "Group by product group"
|
||||
DefaultUserSetting('shopping_list_print_layout_type', 'table'); // Default for the shopping list print option "Layout type" (table or list)
|
||||
|
||||
// Recipe settings
|
||||
DefaultUserSetting('recipe_ingredients_group_by_product_group', false); // Group recipe ingredients by their product group
|
||||
@@ -206,6 +213,7 @@ DefaultUserSetting('recipes_show_ingredient_checkbox', false); // When enabled,
|
||||
|
||||
// Chores settings
|
||||
DefaultUserSetting('chores_due_soon_days', 5); // The "due soon" days
|
||||
DefaultUserSetting('chores_overview_swap_tracking_buttons', false); // When enabled, the "Track next chore schedule" and "Track chore execution now" buttons/menu items are swapped
|
||||
|
||||
// Batteries settings
|
||||
DefaultUserSetting('batteries_due_soon_days', 5); // The "due soon" days
|
||||
@@ -213,11 +221,9 @@ DefaultUserSetting('batteries_due_soon_days', 5); // The "due soon" days
|
||||
// Tasks settings
|
||||
DefaultUserSetting('tasks_due_soon_days', 5); // The "due soon" days
|
||||
|
||||
// Component configuration for Quagga2 - read https://github.com/ericblade/quagga2#configobject for details
|
||||
// Below is a generic good configuration,
|
||||
// for an iPhone 7 Plus, halfsample = true, patchsize = small, frequency = 5 yields very good results
|
||||
DefaultUserSetting('quagga2_numofworkers', 4);
|
||||
DefaultUserSetting('quagga2_halfsample', false);
|
||||
DefaultUserSetting('quagga2_patchsize', 'medium');
|
||||
DefaultUserSetting('quagga2_frequency', 10);
|
||||
DefaultUserSetting('quagga2_debug', true);
|
||||
// Calendar settings
|
||||
DefaultUserSetting('calendar_color_products', '#007bff'); // The event color (hex code) for due products
|
||||
DefaultUserSetting('calendar_color_tasks', '#28a745'); // The event color (hex code) for due tasks
|
||||
DefaultUserSetting('calendar_color_chores', '#ffc107'); // The event color (hex code) for due chores
|
||||
DefaultUserSetting('calendar_color_batteries', '#17a2b8'); // The event color (hex code) for due battery charge cycles
|
||||
DefaultUserSetting('calendar_color_meal_plan', '#6c757d'); // The event color (hex code) for meal plan items
|
||||
|
@@ -4,6 +4,7 @@ namespace Grocy\Controllers;
|
||||
|
||||
use LessQL\Result;
|
||||
use Psr\Http\Message\ResponseInterface as Response;
|
||||
use Slim\Exception\HttpException;
|
||||
|
||||
class BaseApiController extends BaseController
|
||||
{
|
||||
@@ -149,4 +150,47 @@ class BaseApiController extends BaseController
|
||||
|
||||
return $this->OpenApiSpec;
|
||||
}
|
||||
|
||||
private static $htmlPurifierInstance = null;
|
||||
protected function GetParsedAndFilteredRequestBody($request)
|
||||
{
|
||||
if ($request->getHeaderLine('Content-Type') != 'application/json')
|
||||
{
|
||||
throw new HttpException($request, 'Bad Content-Type', 400);
|
||||
}
|
||||
|
||||
if (self::$htmlPurifierInstance == null)
|
||||
{
|
||||
$htmlPurifierConfig = \HTMLPurifier_Config::createDefault();
|
||||
$htmlPurifierConfig->set('Cache.SerializerPath', GROCY_DATAPATH . '/viewcache');
|
||||
$htmlPurifierConfig->set('HTML.Allowed', 'div,b,strong,i,em,u,a[href|title|target],iframe[src|width|height|frameborder],ul,ol,li,p[style],br,span[style],img[style|width|height|alt|src],table[border|width|style],tbody,tr,td,th,blockquote,*[style|class|id],h1,h2,h3,h4,h5,h6');
|
||||
$htmlPurifierConfig->set('Attr.EnableID', true);
|
||||
$htmlPurifierConfig->set('HTML.SafeIframe', true);
|
||||
$htmlPurifierConfig->set('CSS.AllowedProperties', 'font,font-size,font-weight,font-style,font-family,text-decoration,padding-left,color,background-color,text-align,width,height');
|
||||
$htmlPurifierConfig->set('URI.AllowedSchemes', ['data' => true, 'http' => true, 'https' => true]);
|
||||
$htmlPurifierConfig->set('URI.SafeIframeRegexp', '%^.*%'); // Allow any iframe source
|
||||
$htmlPurifierConfig->set('CSS.MaxImgLength', null);
|
||||
|
||||
self::$htmlPurifierInstance = new \HTMLPurifier($htmlPurifierConfig);
|
||||
}
|
||||
|
||||
$requestBody = $request->getParsedBody();
|
||||
foreach ($requestBody as $key => &$value)
|
||||
{
|
||||
// HTMLPurifier removes boolean values (true/false) and arrays, so explicitly keep them
|
||||
// Maybe also possible through HTMLPurifier config (http://htmlpurifier.org/live/configdoc/plain.html)
|
||||
if (!is_bool($value) && !is_array($value))
|
||||
{
|
||||
$value = self::$htmlPurifierInstance->purify($value);
|
||||
|
||||
// Allow some special chars
|
||||
// Maybe also possible through HTMLPurifier config (http://htmlpurifier.org/live/configdoc/plain.html)
|
||||
$value = str_replace('&', '&', $value);
|
||||
$value = str_replace('>', '>', $value);
|
||||
$value = str_replace('<', '<', $value);
|
||||
}
|
||||
}
|
||||
|
||||
return $requestBody;
|
||||
}
|
||||
}
|
||||
|
@@ -29,7 +29,7 @@ class BaseController
|
||||
}
|
||||
|
||||
protected $AppContainer;
|
||||
private $View;
|
||||
protected $View;
|
||||
|
||||
protected function getApiKeyService()
|
||||
{
|
||||
@@ -208,43 +208,4 @@ class BaseController
|
||||
|
||||
return $this->render($response, $viewName, $data);
|
||||
}
|
||||
|
||||
private static $htmlPurifierInstance = null;
|
||||
|
||||
protected function GetParsedAndFilteredRequestBody($request)
|
||||
{
|
||||
if (self::$htmlPurifierInstance == null)
|
||||
{
|
||||
$htmlPurifierConfig = \HTMLPurifier_Config::createDefault();
|
||||
$htmlPurifierConfig->set('Cache.SerializerPath', GROCY_DATAPATH . '/viewcache');
|
||||
$htmlPurifierConfig->set('HTML.Allowed', 'div,b,strong,i,em,u,a[href|title|target],iframe[src|width|height|frameborder],ul,ol,li,p[style],br,span[style],img[style|width|height|alt|src],table[border|width|style],tbody,tr,td,th,blockquote,*[style|class|id],h1,h2,h3,h4,h5,h6');
|
||||
$htmlPurifierConfig->set('Attr.EnableID', true);
|
||||
$htmlPurifierConfig->set('HTML.SafeIframe', true);
|
||||
$htmlPurifierConfig->set('CSS.AllowedProperties', 'font,font-size,font-weight,font-style,font-family,text-decoration,padding-left,color,background-color,text-align,width,height');
|
||||
$htmlPurifierConfig->set('URI.AllowedSchemes', ['data' => true, 'http' => true, 'https' => true]);
|
||||
$htmlPurifierConfig->set('URI.SafeIframeRegexp', '%^.*%'); // Allow any iframe source
|
||||
$htmlPurifierConfig->set('CSS.MaxImgLength', null);
|
||||
|
||||
self::$htmlPurifierInstance = new \HTMLPurifier($htmlPurifierConfig);
|
||||
}
|
||||
|
||||
$requestBody = $request->getParsedBody();
|
||||
foreach ($requestBody as $key => &$value)
|
||||
{
|
||||
// HTMLPurifier removes boolean values (true/false) and arrays, so explicitly keep them
|
||||
// Maybe also possible through HTMLPurifier config (http://htmlpurifier.org/live/configdoc/plain.html)
|
||||
if (!is_bool($value) && !is_array($value))
|
||||
{
|
||||
$value = self::$htmlPurifierInstance->purify($value);
|
||||
|
||||
// Allow some special chars
|
||||
// Maybe also possible through HTMLPurifier config (http://htmlpurifier.org/live/configdoc/plain.html)
|
||||
$value = str_replace('&', '&', $value);
|
||||
$value = str_replace('>', '>', $value);
|
||||
$value = str_replace('<', '<', $value);
|
||||
}
|
||||
}
|
||||
|
||||
return $requestBody;
|
||||
}
|
||||
}
|
||||
|
@@ -69,11 +69,12 @@ class BatteriesApiController extends BaseApiController
|
||||
{
|
||||
try
|
||||
{
|
||||
$battery = $this->getDatabase()->batteries()->where('id', $args['batteryId'])->fetch();
|
||||
$batteryDetails = (object)$this->getBatteriesService()->GetBatteryDetails($args['batteryId']);
|
||||
|
||||
$webhookData = array_merge([
|
||||
'battery' => $battery->name,
|
||||
'battery' => $batteryDetails->battery->name,
|
||||
'grocycode' => (string)(new Grocycode(Grocycode::BATTERY, $args['batteryId'])),
|
||||
'details' => $batteryDetails,
|
||||
], GROCY_LABEL_PRINTER_PARAMS);
|
||||
|
||||
if (GROCY_LABEL_PRINTER_RUN_SERVER)
|
||||
|
@@ -73,7 +73,9 @@ class BatteriesController extends BaseController
|
||||
|
||||
return $this->renderPage($response, 'batteriesjournal', [
|
||||
'chargeCycles' => $this->getDatabase()->battery_charge_cycles()->where($where)->orderBy('tracked_time', 'DESC'),
|
||||
'batteries' => $this->getDatabase()->batteries()->where('active = 1')->orderBy('name', 'COLLATE NOCASE')
|
||||
'batteries' => $this->getDatabase()->batteries()->where('active = 1')->orderBy('name', 'COLLATE NOCASE'),
|
||||
'userfields' => $this->getUserfieldsService()->GetFields('battery_charge_cycles'),
|
||||
'userfieldValues' => $this->getUserfieldsService()->GetAllValues('battery_charge_cycles')
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -115,7 +117,8 @@ class BatteriesController extends BaseController
|
||||
public function TrackChargeCycle(Request $request, Response $response, array $args)
|
||||
{
|
||||
return $this->renderPage($response, 'batterytracking', [
|
||||
'batteries' => $this->getDatabase()->batteries()->where('active = 1')->orderBy('name', 'COLLATE NOCASE')
|
||||
'batteries' => $this->getDatabase()->batteries()->where('active = 1')->orderBy('name', 'COLLATE NOCASE'),
|
||||
'userfields' => $this->getUserfieldsService()->GetFields('battery_charge_cycles')
|
||||
]);
|
||||
}
|
||||
|
||||
|
@@ -120,11 +120,12 @@ class ChoresApiController extends BaseApiController
|
||||
{
|
||||
try
|
||||
{
|
||||
$chore = $this->getDatabase()->chores()->where('id', $args['choreId'])->fetch();
|
||||
$choreDetails = (object)$this->getChoresService()->GetChoreDetails($args['choreId']);
|
||||
|
||||
$webhookData = array_merge([
|
||||
'chore' => $chore->name,
|
||||
'chore' => $choreDetails->chore->name,
|
||||
'grocycode' => (string)(new Grocycode(Grocycode::CHORE, $args['choreId'])),
|
||||
'details' => $choreDetails,
|
||||
], GROCY_LABEL_PRINTER_PARAMS);
|
||||
|
||||
if (GROCY_LABEL_PRINTER_RUN_SERVER)
|
||||
|
@@ -109,9 +109,27 @@ class FilesApiController extends BaseApiController
|
||||
}
|
||||
|
||||
$fileName = $this->checkFileName($args['fileName']);
|
||||
$data = $request->getBody()->getContents();
|
||||
|
||||
file_put_contents($this->getFilesService()->GetFilePath($args['group'], $fileName), $data);
|
||||
$fileHandle = fopen($this->getFilesService()->GetFilePath($args['group'], $fileName), 'xb');
|
||||
if($fileHandle === false)
|
||||
{
|
||||
throw new \Exception("Error while creating file $fileName");
|
||||
}
|
||||
|
||||
// Save the file to disk in chunks of 1 MB
|
||||
$requestBody = $request->getBody();
|
||||
while ($data = $requestBody->read(1048576))
|
||||
{
|
||||
if (fwrite($fileHandle, $data) === false)
|
||||
{
|
||||
throw new \Exception("Error while writing file $fileName");
|
||||
}
|
||||
}
|
||||
|
||||
if (fclose($fileHandle) === false)
|
||||
{
|
||||
throw new \Exception("Error while closing file $fileName");
|
||||
}
|
||||
|
||||
return $this->EmptyApiResponse($response);
|
||||
}
|
||||
|
@@ -190,28 +190,31 @@ class GenericEntityApiController extends BaseApiController
|
||||
|
||||
public function GetObject(Request $request, Response $response, array $args)
|
||||
{
|
||||
if ($this->IsValidExposedEntity($args['entity']) && !$this->IsEntityWithNoListing($args['entity']))
|
||||
{
|
||||
$userfields = $this->getUserfieldsService()->GetValues($args['entity'], $args['objectId']);
|
||||
if (count($userfields) === 0)
|
||||
{
|
||||
$userfields = null;
|
||||
}
|
||||
|
||||
$object = $this->getDatabase()->{$args['entity']}($args['objectId']);
|
||||
if ($object == null)
|
||||
{
|
||||
return $this->GenericErrorResponse($response, 'Object not found', 404);
|
||||
}
|
||||
|
||||
$object['userfields'] = $userfields;
|
||||
|
||||
return $this->ApiResponse($response, $object);
|
||||
}
|
||||
else
|
||||
if (!$this->IsValidExposedEntity($args['entity']) || $this->IsEntityWithNoListing($args['entity']))
|
||||
{
|
||||
return $this->GenericErrorResponse($response, 'Entity does not exist or is not exposed');
|
||||
}
|
||||
|
||||
$object = $this->getDatabase()->{$args['entity']}($args['objectId']);
|
||||
if ($object == null)
|
||||
{
|
||||
return $this->GenericErrorResponse($response, 'Object not found', 404);
|
||||
}
|
||||
|
||||
// TODO: Handle this somehow more generically
|
||||
$referencingId = $args['objectId'];
|
||||
if ($args['entity'] == 'stock')
|
||||
{
|
||||
$referencingId = $object->stock_id;
|
||||
}
|
||||
$userfields = $this->getUserfieldsService()->GetValues($args['entity'], $referencingId);
|
||||
if (count($userfields) === 0)
|
||||
{
|
||||
$userfields = null;
|
||||
}
|
||||
$object['userfields'] = $userfields;
|
||||
|
||||
return $this->ApiResponse($response, $object);
|
||||
}
|
||||
|
||||
public function GetObjects(Request $request, Response $response, array $args)
|
||||
@@ -222,8 +225,8 @@ class GenericEntityApiController extends BaseApiController
|
||||
}
|
||||
|
||||
$objects = $this->queryData($this->getDatabase()->{$args['entity']}(), $request->getQueryParams());
|
||||
$userfields = $this->getUserfieldsService()->GetFields($args['entity']);
|
||||
|
||||
$userfields = $this->getUserfieldsService()->GetFields($args['entity']);
|
||||
if (count($userfields) > 0)
|
||||
{
|
||||
$allUserfieldValues = $this->getUserfieldsService()->GetAllValues($args['entity']);
|
||||
@@ -233,7 +236,14 @@ class GenericEntityApiController extends BaseApiController
|
||||
$userfieldKeyValuePairs = null;
|
||||
foreach ($userfields as $userfield)
|
||||
{
|
||||
$value = FindObjectInArrayByPropertyValue(FindAllObjectsInArrayByPropertyValue($allUserfieldValues, 'object_id', $object->id), 'name', $userfield->name);
|
||||
// TODO: Handle this somehow more generically
|
||||
$userfieldReference = 'id';
|
||||
if ($args['entity'] == 'stock')
|
||||
{
|
||||
$userfieldReference = 'stock_id';
|
||||
}
|
||||
|
||||
$value = FindObjectInArrayByPropertyValue(FindAllObjectsInArrayByPropertyValue($allUserfieldValues, 'object_id', $object->{$userfieldReference}), 'name', $userfield->name);
|
||||
if ($value)
|
||||
{
|
||||
$userfieldKeyValuePairs[$userfield->name] = $value->value;
|
||||
|
@@ -22,7 +22,7 @@ class LoginController extends BaseController
|
||||
public function ProcessLogin(Request $request, Response $response, array $args)
|
||||
{
|
||||
$authMiddlewareClass = GROCY_AUTH_CLASS;
|
||||
if ($authMiddlewareClass::ProcessLogin($this->GetParsedAndFilteredRequestBody($request)))
|
||||
if ($authMiddlewareClass::ProcessLogin($request->getParsedBody()))
|
||||
{
|
||||
return $response->withRedirect($this->AppContainer->get('UrlManager')->ConstructUrl('/'));
|
||||
}
|
||||
|
@@ -90,6 +90,7 @@ class RecipesApiController extends BaseApiController
|
||||
$webhookData = array_merge([
|
||||
'recipe' => $recipe->name,
|
||||
'grocycode' => (string)(new Grocycode(Grocycode::RECIPE, $args['recipeId'])),
|
||||
'details' => $recipe
|
||||
], GROCY_LABEL_PRINTER_PARAMS);
|
||||
|
||||
if (GROCY_LABEL_PRINTER_RUN_SERVER)
|
||||
|
@@ -57,17 +57,24 @@ class RecipesController extends BaseController
|
||||
];
|
||||
}
|
||||
|
||||
$weekRecipe = $this->getDatabase()->recipes()->where("type = 'mealplan-week' AND name = LTRIM(STRFTIME('%Y-%W', DATE('$start')), '0')")->fetch();
|
||||
$weekRecipeId = 0;
|
||||
if ($weekRecipe != null)
|
||||
{
|
||||
$weekRecipeId = $weekRecipe->id;
|
||||
}
|
||||
|
||||
return $this->renderPage($response, 'mealplan', [
|
||||
'fullcalendarEventSources' => $events,
|
||||
'recipes' => $recipes,
|
||||
'internalRecipes' => $this->getDatabase()->recipes()->where("id IN (SELECT recipe_id FROM meal_plan_internal_recipe_relation WHERE $mealPlanWhereTimespan)")->fetchAll(),
|
||||
'recipesResolved' => $this->getRecipesService()->GetRecipesResolved("recipe_id IN (SELECT recipe_id FROM meal_plan_internal_recipe_relation WHERE $mealPlanWhereTimespan)"),
|
||||
'internalRecipes' => $this->getDatabase()->recipes()->where("id IN (SELECT recipe_id FROM meal_plan_internal_recipe_relation WHERE $mealPlanWhereTimespan) OR id = $weekRecipeId")->fetchAll(),
|
||||
'recipesResolved' => $this->getRecipesService()->GetRecipesResolved("recipe_id IN (SELECT recipe_id FROM meal_plan_internal_recipe_relation WHERE $mealPlanWhereTimespan) OR recipe_id = $weekRecipeId"),
|
||||
'products' => $this->getDatabase()->products()->orderBy('name', 'COLLATE NOCASE'),
|
||||
'quantityUnits' => $this->getDatabase()->quantity_units()->orderBy('name', 'COLLATE NOCASE'),
|
||||
'quantityUnitConversionsResolved' => $this->getDatabase()->cache__quantity_unit_conversions_resolved(),
|
||||
'mealplanSections' => $this->getDatabase()->meal_plan_sections()->orderBy('sort_number'),
|
||||
'usedMealplanSections' => $this->getDatabase()->meal_plan_sections()->where("id IN (SELECT section_id FROM meal_plan WHERE $mealPlanWhereTimespan)")->orderBy('sort_number'),
|
||||
'weekRecipe' => $this->getDatabase()->recipes()->where("type = 'mealplan-week' AND name = LTRIM(STRFTIME('%Y-%W', DATE('$start')), '0')")->fetch()
|
||||
'weekRecipe' => $weekRecipe
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -175,6 +182,7 @@ class RecipesController extends BaseController
|
||||
'recipe' => $this->getDatabase()->recipes($args['recipeId']),
|
||||
'recipePos' => new \stdClass(),
|
||||
'products' => $this->getDatabase()->products()->where('active = 1')->orderBy('name', 'COLLATE NOCASE'),
|
||||
'barcodes' => $this->getDatabase()->product_barcodes_comma_separated(),
|
||||
'quantityUnits' => $this->getDatabase()->quantity_units()->orderBy('name', 'COLLATE NOCASE'),
|
||||
'quantityUnitConversionsResolved' => $this->getDatabase()->cache__quantity_unit_conversions_resolved()
|
||||
]);
|
||||
@@ -186,6 +194,7 @@ class RecipesController extends BaseController
|
||||
'recipe' => $this->getDatabase()->recipes($args['recipeId']),
|
||||
'recipePos' => $this->getDatabase()->recipes_pos($args['recipePosId']),
|
||||
'products' => $this->getDatabase()->products()->orderBy('name', 'COLLATE NOCASE'),
|
||||
'barcodes' => $this->getDatabase()->product_barcodes_comma_separated(),
|
||||
'quantityUnits' => $this->getDatabase()->quantity_units()->orderBy('name', 'COLLATE NOCASE'),
|
||||
'quantityUnitConversionsResolved' => $this->getDatabase()->cache__quantity_unit_conversions_resolved()
|
||||
]);
|
||||
|
@@ -442,7 +442,6 @@ class StockApiController extends BaseApiController
|
||||
try
|
||||
{
|
||||
$addFoundProduct = false;
|
||||
|
||||
if (isset($request->getQueryParams()['add']) && ($request->getQueryParams()['add'] === 'true' || $request->getQueryParams()['add'] === 1))
|
||||
{
|
||||
$addFoundProduct = true;
|
||||
@@ -673,11 +672,12 @@ class StockApiController extends BaseApiController
|
||||
{
|
||||
try
|
||||
{
|
||||
$product = $this->getDatabase()->products()->where('id', $args['productId'])->fetch();
|
||||
$productDetails = (object)$this->getStockService()->GetProductDetails($args['productId']);
|
||||
|
||||
$webhookData = array_merge([
|
||||
'product' => $product->name,
|
||||
'grocycode' => (string)(new Grocycode(Grocycode::PRODUCT, $product->id)),
|
||||
'product' => $productDetails->product->name,
|
||||
'grocycode' => (string)(new Grocycode(Grocycode::PRODUCT, $productDetails->product->id)),
|
||||
'details' => $productDetails,
|
||||
], GROCY_LABEL_PRINTER_PARAMS);
|
||||
|
||||
if (GROCY_LABEL_PRINTER_RUN_SERVER)
|
||||
@@ -698,11 +698,13 @@ class StockApiController extends BaseApiController
|
||||
try
|
||||
{
|
||||
$stockEntry = $this->getDatabase()->stock()->where('id', $args['entryId'])->fetch();
|
||||
$product = $this->getDatabase()->products()->where('id', $stockEntry->product_id)->fetch();
|
||||
$productDetails = (object)$this->getStockService()->GetProductDetails($stockEntry->product_id);
|
||||
|
||||
$webhookData = array_merge([
|
||||
'product' => $product->name,
|
||||
'product' => $productDetails->product->name,
|
||||
'grocycode' => (string)(new Grocycode(Grocycode::PRODUCT, $stockEntry->product_id, [$stockEntry->stock_id])),
|
||||
'details' => $productDetails,
|
||||
'stock_entry' => $stockEntry,
|
||||
], GROCY_LABEL_PRINTER_PARAMS);
|
||||
|
||||
if (GROCY_FEATURE_FLAG_STOCK_BEST_BEFORE_DATE_TRACKING)
|
||||
|
@@ -4,6 +4,7 @@ namespace Grocy\Controllers;
|
||||
|
||||
use Grocy\Helpers\Grocycode;
|
||||
use Grocy\Services\RecipesService;
|
||||
use DI\Container;
|
||||
use Psr\Http\Message\ResponseInterface as Response;
|
||||
use Psr\Http\Message\ServerRequestInterface as Request;
|
||||
|
||||
@@ -11,6 +12,24 @@ class StockController extends BaseController
|
||||
{
|
||||
use GrocycodeTrait;
|
||||
|
||||
public function __construct(Container $container)
|
||||
{
|
||||
parent::__construct($container);
|
||||
|
||||
try
|
||||
{
|
||||
$externalBarcodeLookupPluginName = $this->getStockService()->GetExternalBarcodeLookupPluginName();
|
||||
}
|
||||
catch (\Exception)
|
||||
{
|
||||
$externalBarcodeLookupPluginName = '';
|
||||
}
|
||||
finally
|
||||
{
|
||||
$this->View->set('ExternalBarcodeLookupPluginName', $externalBarcodeLookupPluginName);
|
||||
}
|
||||
}
|
||||
|
||||
public function Consume(Request $request, Response $response, array $args)
|
||||
{
|
||||
return $this->renderPage($response, 'consume', [
|
||||
@@ -118,10 +137,17 @@ class StockController extends BaseController
|
||||
public function Overview(Request $request, Response $response, array $args)
|
||||
{
|
||||
$usersService = $this->getUsersService();
|
||||
$nextXDays = $usersService->GetUserSettings(GROCY_USER_ID)['stock_due_soon_days'];
|
||||
$userSettings = $usersService->GetUserSettings(GROCY_USER_ID);
|
||||
$nextXDays = $userSettings['stock_due_soon_days'];
|
||||
|
||||
$where = 'is_in_stock_or_below_min_stock = 1';
|
||||
if (boolval($userSettings['stock_overview_show_all_out_of_stock_products']))
|
||||
{
|
||||
$where = '1=1';
|
||||
}
|
||||
|
||||
return $this->renderPage($response, 'stockoverview', [
|
||||
'currentStock' => $this->getStockService()->GetCurrentStockOverview(),
|
||||
'currentStock' => $this->getDatabase()->uihelper_stock_current_overview()->where($where),
|
||||
'locations' => $this->getDatabase()->locations()->where('active = 1')->orderBy('name', 'COLLATE NOCASE'),
|
||||
'currentStockLocations' => $this->getStockService()->GetCurrentStockLocations(),
|
||||
'nextXDays' => $nextXDays,
|
||||
@@ -393,11 +419,11 @@ class StockController extends BaseController
|
||||
}
|
||||
|
||||
return $this->renderPage($response, 'shoppinglist', [
|
||||
'listItems' => $this->getDatabase()->uihelper_shopping_list()->where('shopping_list_id = :1', $listId),
|
||||
'listItems' => $this->getDatabase()->uihelper_shopping_list()->where('shopping_list_id = :1', $listId)->orderBy('product_name', 'COLLATE NOCASE'),
|
||||
'products' => $this->getDatabase()->products()->where('active = 1')->orderBy('name', 'COLLATE NOCASE'),
|
||||
'quantityunits' => $this->getDatabase()->quantity_units()->orderBy('name', 'COLLATE NOCASE'),
|
||||
'missingProducts' => $this->getStockService()->GetMissingProducts(),
|
||||
'shoppingLists' => $this->getDatabase()->shopping_lists()->orderBy('name', 'COLLATE NOCASE'),
|
||||
'shoppingLists' => $this->getDatabase()->shopping_lists_view()->orderBy('name', 'COLLATE NOCASE'),
|
||||
'selectedShoppingListId' => $listId,
|
||||
'quantityUnitConversionsResolved' => $this->getDatabase()->cache__quantity_unit_conversions_resolved(),
|
||||
'productUserfields' => $this->getUserfieldsService()->GetFields('products'),
|
||||
|
@@ -9,41 +9,38 @@ class StockReportsController extends BaseController
|
||||
{
|
||||
public function Spendings(Request $request, Response $response, array $args)
|
||||
{
|
||||
$where = "pph.transaction_type != 'self-production'";
|
||||
|
||||
if (isset($request->getQueryParams()['start_date']) && isset($request->getQueryParams()['end_date']) && IsIsoDate($request->getQueryParams()['start_date']) && IsIsoDate($request->getQueryParams()['end_date']))
|
||||
{
|
||||
$startDate = $request->getQueryParams()['start_date'];
|
||||
$endDate = $request->getQueryParams()['end_date'];
|
||||
$where = "pph.purchased_date BETWEEN '$startDate' AND '$endDate'";
|
||||
$where .= " AND pph.purchased_date BETWEEN '$startDate' AND '$endDate'";
|
||||
}
|
||||
else
|
||||
{
|
||||
// Default to this month
|
||||
$where = "pph.purchased_date >= DATE(DATE('now', 'localtime'), 'start of month')";
|
||||
$where .= " AND pph.purchased_date >= DATE(DATE('now', 'localtime'), 'start of month')";
|
||||
}
|
||||
|
||||
|
||||
if (isset($request->getQueryParams()['byGroup']))
|
||||
$groupBy = 'product';
|
||||
if (isset($request->getQueryParams()['group-by']) && in_array($request->getQueryParams()['group-by'], ['product', 'productgroup', 'store']))
|
||||
{
|
||||
$sql = "
|
||||
SELECT
|
||||
pg.id AS id,
|
||||
pg.name AS name,
|
||||
SUM(pph.amount * pph.price) AS total
|
||||
FROM products_price_history pph
|
||||
JOIN products p
|
||||
ON pph.product_id = p.id
|
||||
JOIN product_groups pg
|
||||
ON p.product_group_id = pg.id
|
||||
WHERE $where
|
||||
GROUP BY pg.id
|
||||
ORDER BY pg.NAME COLLATE NOCASE
|
||||
";
|
||||
$groupBy = $request->getQueryParams()['group-by'];
|
||||
}
|
||||
else
|
||||
|
||||
if ($groupBy == 'product')
|
||||
{
|
||||
if (isset($request->getQueryParams()['product_group']) and $request->getQueryParams()['product_group'] != 'all')
|
||||
if (isset($request->getQueryParams()['product-group']))
|
||||
{
|
||||
$where .= ' AND pg.id = ' . $request->getQueryParams()['product_group'];
|
||||
if ($request->getQueryParams()['product-group'] == 'ungrouped')
|
||||
{
|
||||
$where .= ' AND pg.id IS NULL';
|
||||
}
|
||||
elseif ($request->getQueryParams()['product-group'] != 'all')
|
||||
{
|
||||
$where .= ' AND pg.id = ' . $request->getQueryParams()['product-group'];
|
||||
}
|
||||
}
|
||||
|
||||
$sql = "
|
||||
@@ -56,19 +53,53 @@ class StockReportsController extends BaseController
|
||||
FROM products_price_history pph
|
||||
JOIN products p
|
||||
ON pph.product_id = p.id
|
||||
JOIN product_groups pg
|
||||
LEFT JOIN product_groups pg
|
||||
ON p.product_group_id = pg.id
|
||||
WHERE $where
|
||||
GROUP BY p.id
|
||||
ORDER BY p.NAME COLLATE NOCASE
|
||||
GROUP BY p.id, p.name, pg.id, pg.name
|
||||
ORDER BY p.name COLLATE NOCASE
|
||||
";
|
||||
}
|
||||
elseif ($groupBy == 'productgroup')
|
||||
{
|
||||
$sql = "
|
||||
SELECT
|
||||
pg.id AS id,
|
||||
pg.name AS name,
|
||||
SUM(pph.amount * pph.price) AS total
|
||||
FROM products_price_history pph
|
||||
JOIN products p
|
||||
ON pph.product_id = p.id
|
||||
LEFT JOIN product_groups pg
|
||||
ON p.product_group_id = pg.id
|
||||
WHERE $where
|
||||
GROUP BY pg.id, pg.name
|
||||
ORDER BY pg.name COLLATE NOCASE
|
||||
";
|
||||
}
|
||||
elseif ($groupBy == 'store')
|
||||
{
|
||||
$sql = "
|
||||
SELECT
|
||||
sl.id AS id,
|
||||
sl.name AS name,
|
||||
SUM(pph.amount * pph.price) AS total
|
||||
FROM products_price_history pph
|
||||
JOIN products p
|
||||
ON pph.product_id = p.id
|
||||
LEFT JOIN shopping_locations sl
|
||||
ON pph.shopping_location_id = sl.id
|
||||
WHERE $where
|
||||
GROUP BY sl.id, sl.name
|
||||
ORDER BY sl.NAME COLLATE NOCASE
|
||||
";
|
||||
}
|
||||
|
||||
return $this->renderPage($response, 'stockreportspendings', [
|
||||
'metrics' => $this->getDatabaseService()->ExecuteDbQuery($sql)->fetchAll(\PDO::FETCH_OBJ),
|
||||
'productGroups' => $this->getDatabase()->product_groups()->where('active = 1')->orderBy('name', 'COLLATE NOCASE'),
|
||||
'selectedGroup' => isset($request->getQueryParams()['product_group']) ? $request->getQueryParams()['product_group'] : null,
|
||||
'byGroup' => isset($request->getQueryParams()['byGroup']) ? $request->getQueryParams()['byGroup'] : null
|
||||
'selectedGroup' => isset($request->getQueryParams()['product-group']) ? $request->getQueryParams()['product-group'] : null,
|
||||
'groupBy' => $groupBy
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
1
data/plugins/.gitignore
vendored
@@ -1,3 +1,2 @@
|
||||
*
|
||||
!.gitignore
|
||||
!DemoBarcodeLookupPlugin.php
|
||||
|
@@ -1,78 +0,0 @@
|
||||
<?php
|
||||
|
||||
use Grocy\Helpers\BaseBarcodeLookupPlugin;
|
||||
|
||||
/*
|
||||
This class must extend BaseBarcodeLookupPlugin (in namespace \Grocy\Helpers)
|
||||
*/
|
||||
class DemoBarcodeLookupPlugin extends BaseBarcodeLookupPlugin
|
||||
{
|
||||
/*
|
||||
To use this plugin, configure it in data/config.php like this:
|
||||
Setting('STOCK_BARCODE_LOOKUP_PLUGIN', 'DemoBarcodeLookupPlugin');
|
||||
*/
|
||||
|
||||
/*
|
||||
To try it:
|
||||
Call the API function at /api/stock/barcodes/external-lookup/{barcode}
|
||||
|
||||
When you also add ?add=true as a query parameter to the API call,
|
||||
on a successful lookup the product is added to the database and in the output
|
||||
the new product id is included (automatically, nothing to do here in the plugin)
|
||||
*/
|
||||
|
||||
/*
|
||||
Provided references:
|
||||
|
||||
$this->Locations contains all locations
|
||||
$this->QuantityUnits contains all quantity units
|
||||
*/
|
||||
|
||||
/*
|
||||
Useful hints:
|
||||
|
||||
Get a quantity unit by name:
|
||||
$quantityUnit = FindObjectInArrayByPropertyValue($this->QuantityUnits, 'name', 'Piece');
|
||||
|
||||
Get a location by name:
|
||||
$location = FindObjectInArrayByPropertyValue($this->Locations, 'name', 'Fridge');
|
||||
*/
|
||||
|
||||
/*
|
||||
This class must implement the protected abstract function ExecuteLookup($barcode),
|
||||
which is called with the barcode that needs to be looked up and must return an
|
||||
associative array of the product model or null, when nothing was found for the barcode.
|
||||
|
||||
The returned array must contain at least these properties:
|
||||
array(
|
||||
'name' => '',
|
||||
'location_id' => 1, // A valid id of a location object, check against $this->Locations
|
||||
'qu_id_purchase' => 1, // A valid id of quantity unit object, check against $this->QuantityUnits
|
||||
'qu_id_stock' => 1, // A valid id of quantity unit object, check against $this->QuantityUnits
|
||||
'qu_factor_purchase_to_stock' => 1, // Normally 1 when quantity unit stock and purchase is the same
|
||||
'barcode' => $barcode // The barcode of the product, maybe just pass through $barcode or manipulate it if necessary
|
||||
)
|
||||
*/
|
||||
protected function ExecuteLookup($barcode)
|
||||
{
|
||||
if ($barcode === 'x')
|
||||
{ // Demonstration when nothing is found
|
||||
return null;
|
||||
}
|
||||
elseif ($barcode === 'e')
|
||||
{ // Demonstration when an error occurred
|
||||
throw new \Exception('This is the error message from the plugin...');
|
||||
}
|
||||
else
|
||||
{
|
||||
return [
|
||||
'name' => 'LookedUpProduct_' . RandomString(5),
|
||||
'location_id' => $this->Locations[0]->id,
|
||||
'qu_id_purchase' => $this->QuantityUnits[0]->id,
|
||||
'qu_id_stock' => $this->QuantityUnits[0]->id,
|
||||
'qu_factor_purchase_to_stock' => 1,
|
||||
'barcode' => $barcode
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
@@ -1063,6 +1063,7 @@
|
||||
"/users/{userId}/permissions": {
|
||||
"get": {
|
||||
"summary": "Returns the assigned permissions of the given user",
|
||||
"description": "See \"GET /objects/permission_hierarchy\" for a permission name / id mapping",
|
||||
"tags": [
|
||||
"User management"
|
||||
],
|
||||
@@ -1113,6 +1114,7 @@
|
||||
},
|
||||
"post": {
|
||||
"summary": "Adds a permission to the given user",
|
||||
"description": "See \"GET /objects/permission_hierarchy\" for a permission name / id mapping",
|
||||
"tags": [
|
||||
"User management"
|
||||
],
|
||||
@@ -1161,6 +1163,7 @@
|
||||
},
|
||||
"put": {
|
||||
"summary": "Replaces the assigned permissions of the given user",
|
||||
"description": "See \"GET /objects/permission_hierarchy\" for a permission name / id mapping",
|
||||
"tags": [
|
||||
"User management"
|
||||
],
|
||||
@@ -1614,10 +1617,7 @@
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/CurrentVolatilStockResponse"
|
||||
}
|
||||
"$ref": "#/components/schemas/CurrentVolatilStockResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2007,7 +2007,7 @@
|
||||
},
|
||||
"allow_subproduct_substitution": {
|
||||
"type": "boolean",
|
||||
"description": "`true` when any in-stock sub product should be used when the given product is a parent product and currently not in-stock"
|
||||
"description": "`true` when any in stock sub product should be used when the given product is a parent product and currently not in stock"
|
||||
}
|
||||
},
|
||||
"example": {
|
||||
@@ -2242,7 +2242,7 @@
|
||||
},
|
||||
"allow_subproduct_substitution": {
|
||||
"type": "boolean",
|
||||
"description": "`true` when any in-stock sub product should be used when the given product is a parent product and currently not in-stock"
|
||||
"description": "`true` when any in stock sub product should be used when the given product is a parent product and currently not in stock"
|
||||
}
|
||||
},
|
||||
"example": {
|
||||
@@ -2540,7 +2540,7 @@
|
||||
},
|
||||
"allow_subproduct_substitution": {
|
||||
"type": "boolean",
|
||||
"description": "`rue` when any in-stock sub product should be used when the given product is a parent product and currently not in-stock"
|
||||
"description": "`rue` when any in stock sub product should be used when the given product is a parent product and currently not in stock"
|
||||
}
|
||||
},
|
||||
"example": {
|
||||
@@ -2763,7 +2763,7 @@
|
||||
},
|
||||
"allow_subproduct_substitution": {
|
||||
"type": "boolean",
|
||||
"description": "`rue` when any in-stock sub product should be used when the given product is a parent product and currently not in-stock"
|
||||
"description": "`rue` when any in stock sub product should be used when the given product is a parent product and currently not in stock"
|
||||
}
|
||||
},
|
||||
"example": {
|
||||
@@ -3444,7 +3444,7 @@
|
||||
},
|
||||
"/recipes/{recipeId}/consume": {
|
||||
"post": {
|
||||
"summary": "Consumes all products of the given recipe",
|
||||
"summary": "Consumes all in stock ingredients of the given recipe (for ingredients that are only partially in stock, the in stock amount will be consumed)",
|
||||
"tags": [
|
||||
"Recipes"
|
||||
],
|
||||
@@ -4511,6 +4511,106 @@
|
||||
"move_on_open": "1"
|
||||
}
|
||||
},
|
||||
"ProductWithoutUserfields": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "integer"
|
||||
},
|
||||
"name": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": {
|
||||
"type": "string"
|
||||
},
|
||||
"location_id": {
|
||||
"type": "integer"
|
||||
},
|
||||
"qu_id_purchase": {
|
||||
"type": "integer"
|
||||
},
|
||||
"qu_id_stock": {
|
||||
"type": "integer"
|
||||
},
|
||||
"enable_tare_weight_handling": {
|
||||
"type": "integer"
|
||||
},
|
||||
"not_check_stock_fulfillment_for_recipes": {
|
||||
"type": "integer"
|
||||
},
|
||||
"product_group_id": {
|
||||
"type": "integer"
|
||||
},
|
||||
"tare_weight": {
|
||||
"type": "number"
|
||||
},
|
||||
"min_stock_amount": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"default": 0
|
||||
},
|
||||
"default_best_before_days": {
|
||||
"type": "integer",
|
||||
"minimum": 0,
|
||||
"default": 0
|
||||
},
|
||||
"default_best_before_days_after_open": {
|
||||
"type": "integer",
|
||||
"minimum": 0,
|
||||
"default": 0
|
||||
},
|
||||
"picture_file_name": {
|
||||
"type": "string"
|
||||
},
|
||||
"row_created_timestamp": {
|
||||
"type": "string",
|
||||
"format": "date-time"
|
||||
},
|
||||
"shopping_location_id": {
|
||||
"type": "integer"
|
||||
},
|
||||
"treat_opened_as_out_of_stock": {
|
||||
"type": "integer"
|
||||
},
|
||||
"auto_reprint_stock_label": {
|
||||
"type": "integer"
|
||||
},
|
||||
"no_own_stock": {
|
||||
"type": "integer"
|
||||
},
|
||||
"should_not_be_frozen": {
|
||||
"type": "integer"
|
||||
},
|
||||
"default_consume_location_id": {
|
||||
"type": "integer"
|
||||
},
|
||||
"move_on_open": {
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"example": {
|
||||
"id": "1",
|
||||
"name": "Cookies",
|
||||
"description": null,
|
||||
"location_id": "4",
|
||||
"qu_id_purchase": "3",
|
||||
"qu_id_stock": "3",
|
||||
"min_stock_amount": "8",
|
||||
"default_best_before_days": "0",
|
||||
"row_created_timestamp": "2019-05-02 20:12:26",
|
||||
"product_group_id": "1",
|
||||
"picture_file_name": "cookies.jpg",
|
||||
"default_best_before_days_after_open": "0",
|
||||
"enable_tare_weight_handling": "0",
|
||||
"tare_weight": "0.0",
|
||||
"not_check_stock_fulfillment_for_recipes": "0",
|
||||
"shopping_location_id": null,
|
||||
"userfields": null,
|
||||
"should_not_be_frozen": "1",
|
||||
"default_consume_location_id": "5",
|
||||
"move_on_open": "1"
|
||||
}
|
||||
},
|
||||
"QuantityUnit": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -4733,7 +4833,10 @@
|
||||
"$ref": "#/components/schemas/Product"
|
||||
},
|
||||
"product_barcodes": {
|
||||
"$ref": "#/components/schemas/ProductBarcode"
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/ProductBarcode"
|
||||
}
|
||||
},
|
||||
"quantity_unit_stock": {
|
||||
"$ref": "#/components/schemas/QuantityUnit"
|
||||
@@ -4753,7 +4856,7 @@
|
||||
},
|
||||
"last_used": {
|
||||
"type": "string",
|
||||
"format": "date-time"
|
||||
"format": "date"
|
||||
},
|
||||
"stock_amount": {
|
||||
"type": "number"
|
||||
@@ -4763,7 +4866,7 @@
|
||||
},
|
||||
"next_due_date": {
|
||||
"type": "string",
|
||||
"format": "date-time"
|
||||
"format": "date"
|
||||
},
|
||||
"last_price": {
|
||||
"type": "number",
|
||||
@@ -5326,7 +5429,7 @@
|
||||
},
|
||||
"purchased_date": {
|
||||
"type": "string",
|
||||
"format": "date-time"
|
||||
"format": "date"
|
||||
},
|
||||
"used_date": {
|
||||
"type": "string",
|
||||
@@ -5521,7 +5624,7 @@
|
||||
"description": "Indicates wheter this product has sub-products or not / if the fields `amount_aggregated` and `amount_opened_aggregated` are filled"
|
||||
},
|
||||
"product": {
|
||||
"$ref": "#/components/schemas/Product"
|
||||
"$ref": "#/components/schemas/ProductWithoutUserfields"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -5801,7 +5904,10 @@
|
||||
"products_last_purchased",
|
||||
"products_average_price",
|
||||
"quantity_unit_conversions_resolved",
|
||||
"recipes_pos_resolved"
|
||||
"recipes_pos_resolved",
|
||||
"battery_charge_cycles",
|
||||
"product_barcodes_view",
|
||||
"permission_hierarchy"
|
||||
]
|
||||
},
|
||||
"ExposedEntityNoListing": {
|
||||
@@ -5821,7 +5927,10 @@
|
||||
"products_last_purchased",
|
||||
"products_average_price",
|
||||
"quantity_unit_conversions_resolved",
|
||||
"recipes_pos_resolved"
|
||||
"recipes_pos_resolved",
|
||||
"battery_charge_cycles",
|
||||
"product_barcodes_view",
|
||||
"permission_hierarchy"
|
||||
]
|
||||
},
|
||||
"ExposedEntityNoDelete": {
|
||||
@@ -5834,7 +5943,10 @@
|
||||
"products_last_purchased",
|
||||
"products_average_price",
|
||||
"quantity_unit_conversions_resolved",
|
||||
"recipes_pos_resolved"
|
||||
"recipes_pos_resolved",
|
||||
"battery_charge_cycles",
|
||||
"product_barcodes_view",
|
||||
"permission_hierarchy"
|
||||
]
|
||||
},
|
||||
"ExposedEntityEditRequiresAdmin": {
|
||||
|
@@ -4,14 +4,19 @@ namespace Grocy\Helpers;
|
||||
|
||||
abstract class BaseBarcodeLookupPlugin
|
||||
{
|
||||
final public function __construct($locations, $quantityUnits)
|
||||
// That's a "self-referencing constant" and forces the child class to define it
|
||||
public const PLUGIN_NAME = self::PLUGIN_NAME;
|
||||
|
||||
final public function __construct($locations, $quantityUnits, $userSettings)
|
||||
{
|
||||
$this->Locations = $locations;
|
||||
$this->QuantityUnits = $quantityUnits;
|
||||
$this->UserSettings = $userSettings;
|
||||
}
|
||||
|
||||
protected $Locations;
|
||||
protected $QuantityUnits;
|
||||
protected $UserSettings;
|
||||
|
||||
final public function Lookup($barcode)
|
||||
{
|
||||
@@ -29,7 +34,8 @@ abstract class BaseBarcodeLookupPlugin
|
||||
}
|
||||
|
||||
if (!IsAssociativeArray($pluginOutput))
|
||||
{ // $pluginOutput is at least an indexed array here
|
||||
{
|
||||
// $pluginOutput is at least an indexed array here
|
||||
throw new \Exception('Plugin output must be an associative array');
|
||||
}
|
||||
|
||||
@@ -39,8 +45,8 @@ abstract class BaseBarcodeLookupPlugin
|
||||
'location_id',
|
||||
'qu_id_purchase',
|
||||
'qu_id_stock',
|
||||
'qu_factor_purchase_to_stock',
|
||||
'barcode'
|
||||
'__qu_factor_purchase_to_stock',
|
||||
'__barcode'
|
||||
];
|
||||
|
||||
foreach ($minimunNeededProperties as $prop)
|
||||
@@ -53,29 +59,29 @@ abstract class BaseBarcodeLookupPlugin
|
||||
|
||||
// $pluginOutput contains all needed properties here
|
||||
|
||||
// Check referenced entity ids are valid
|
||||
// Check if referenced entity ids are valid
|
||||
$locationId = $pluginOutput['location_id'];
|
||||
if (FindObjectInArrayByPropertyValue($this->Locations, 'id', $locationId) === null)
|
||||
{
|
||||
throw new \Exception("Location $locationId is not a valid location id");
|
||||
throw new \Exception("Provided location_id ($locationId) is not a valid location id");
|
||||
}
|
||||
|
||||
$quIdPurchase = $pluginOutput['qu_id_purchase'];
|
||||
if (FindObjectInArrayByPropertyValue($this->QuantityUnits, 'id', $quIdPurchase) === null)
|
||||
{
|
||||
throw new \Exception("Location $quIdPurchase is not a valid quantity unit id");
|
||||
throw new \Exception("Provided qu_id_purchase ($quIdPurchase) is not a valid quantity unit id");
|
||||
}
|
||||
|
||||
$quIdStock = $pluginOutput['qu_id_stock'];
|
||||
if (FindObjectInArrayByPropertyValue($this->QuantityUnits, 'id', $quIdStock) === null)
|
||||
{
|
||||
throw new \Exception("Location $quIdStock is not a valid quantity unit id");
|
||||
throw new \Exception("Provided qu_id_stock ($quIdStock) is not a valid quantity unit id");
|
||||
}
|
||||
|
||||
$quFactor = $pluginOutput['qu_factor_purchase_to_stock'];
|
||||
$quFactor = $pluginOutput['__qu_factor_purchase_to_stock'];
|
||||
if (empty($quFactor) || !is_numeric($quFactor))
|
||||
{
|
||||
throw new \Exception('Quantity unit factor is empty or not a number');
|
||||
throw new \Exception('Provided __qu_factor_purchase_to_stock is empty or not a number');
|
||||
}
|
||||
|
||||
return $pluginOutput;
|
||||
|
@@ -4,12 +4,13 @@ class ERequirementNotMet extends Exception
|
||||
{
|
||||
}
|
||||
|
||||
const REQUIRED_PHP_EXTENSIONS = ['fileinfo', 'pdo_sqlite', 'gd', 'ctype', 'json', 'intl', 'zlib', 'mbstring',
|
||||
const REQUIRED_PHP_EXTENSIONS = ['fileinfo', 'pdo_sqlite', 'gd', 'ctype', 'intl', 'zlib', 'mbstring',
|
||||
|
||||
// These are core extensions, so normally can't be missing, but seems to be the case, however, on FreeBSD
|
||||
'filter', 'iconv', 'tokenizer'
|
||||
'filter', 'iconv', 'tokenizer', 'json'
|
||||
];
|
||||
|
||||
const REQUIRED_PHP_VERSION = '8.1.0';
|
||||
const REQUIRED_PHP_VERSION = '8.2.0';
|
||||
const REQUIRED_SQLITE_VERSION = '3.34.0';
|
||||
|
||||
class PrerequisiteChecker
|
||||
|
@@ -262,3 +262,19 @@ function require_frontend_packages(array $packages)
|
||||
|
||||
$GROCY_REQUIRED_FRONTEND_PACKAGES = array_unique(array_merge($GROCY_REQUIRED_FRONTEND_PACKAGES, $packages));
|
||||
}
|
||||
|
||||
function EmptyFolder($folderPath)
|
||||
{
|
||||
foreach(glob("{$folderPath}/*") as $item)
|
||||
{
|
||||
if(is_dir($item))
|
||||
{
|
||||
EmptyFolder($item);
|
||||
rmdir($item);
|
||||
}
|
||||
else
|
||||
{
|
||||
unlink($item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
32
localization/bg_BG/chore_assignment_types.po
Normal file
@@ -0,0 +1,32 @@
|
||||
#
|
||||
# Translators:
|
||||
# Plamen Stoyanov <fireto@gmail.com>, 2020
|
||||
# Dwight Schrute <rvelitchkov@gmail.com>, 2020
|
||||
# Mihail Andreev, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-09-17 10:45+0000\n"
|
||||
"Last-Translator: Mihail Andreev, 2020\n"
|
||||
"Language-Team: Bulgarian (Bulgaria) (https://app.transifex.com/grocy/teams/93189/bg_BG/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: bg_BG\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Domain: grocy/chore_assignment_types\n"
|
||||
|
||||
msgid "no-assignment"
|
||||
msgstr "не-разпределен"
|
||||
|
||||
msgid "who-least-did-first"
|
||||
msgstr "пръв-последния-направил"
|
||||
|
||||
msgid "random"
|
||||
msgstr "случаен"
|
||||
|
||||
msgid "in-alphabetical-order"
|
||||
msgstr "по-азбучен-ред"
|
40
localization/bg_BG/chore_period_types.po
Normal file
@@ -0,0 +1,40 @@
|
||||
#
|
||||
# Translators:
|
||||
# Plamen Stoyanov <fireto@gmail.com>, 2020
|
||||
# Svetoslav Slavkov <contact@sslavkov.eu>, 2023
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01 17:42+0000\n"
|
||||
"Last-Translator: Svetoslav Slavkov <contact@sslavkov.eu>, 2023\n"
|
||||
"Language-Team: Bulgarian (Bulgaria) (https://app.transifex.com/grocy/teams/93189/bg_BG/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: bg_BG\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Domain: grocy/chore_types\n"
|
||||
|
||||
msgid "manually"
|
||||
msgstr "Ръчно"
|
||||
|
||||
msgid "daily"
|
||||
msgstr "Ежедневно"
|
||||
|
||||
msgid "weekly"
|
||||
msgstr "Ежеседмично"
|
||||
|
||||
msgid "monthly"
|
||||
msgstr "Ежемесечно"
|
||||
|
||||
msgid "yearly"
|
||||
msgstr "Ежегодно"
|
||||
|
||||
msgid "hourly"
|
||||
msgstr "почасово"
|
||||
|
||||
msgid "adaptive"
|
||||
msgstr "адаптивен"
|
85
localization/bg_BG/component_translations.po
Normal file
@@ -0,0 +1,85 @@
|
||||
#
|
||||
# Translators:
|
||||
# Bernd Bestel <bernd@berrnd.de>, 2025
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01 17:42+0000\n"
|
||||
"Last-Translator: Bernd Bestel <bernd@berrnd.de>, 2025\n"
|
||||
"Language-Team: Bulgarian (Bulgaria) (https://app.transifex.com/grocy/teams/93189/bg_BG/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: bg_BG\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Domain: grocy/component_translations\n"
|
||||
|
||||
msgid "moment_locale"
|
||||
msgstr "bg"
|
||||
|
||||
msgid "datatables_localization"
|
||||
msgstr ""
|
||||
"{\"processing\":\"Обработка на резултатите...\",\"lengthMenu\":\"Показване "
|
||||
"на _MENU_ резултата\",\"zeroRecords\":\"Няма намерени "
|
||||
"резултати\",\"info\":\"Показване на резултати от _START_ до _END_ от общо "
|
||||
"_TOTAL_\",\"infoEmpty\":\"Показване на резултати от 0 до 0 от общо "
|
||||
"0\",\"infoFiltered\":\"(филтрирани от общо _MAX_ "
|
||||
"резултата)\",\"search\":\"Търсене:\",\"paginate\":{\"first\":\"Първа\",\"previous\":\"Предишна\",\"next\":\"Следваща\",\"last\":\"Последна\"},\"aria\":{\"sortAscending\":\"сортирай"
|
||||
" възходящо\",\"sortDescending\":\"сортирай "
|
||||
"низходящо\"},\"autoFill\":{\"cancel\":\"Oткажи\",\"fill\":\"Попълни всички "
|
||||
"клетки с <i>%d<i></i></i>\",\"fillHorizontal\":\"Попълни хоризонтални "
|
||||
"клетки\",\"fillVertical\":\"Попълни вертикални "
|
||||
"клетки\"},\"searchBuilder\":{\"add\":\"Добави\",\"deleteTitle\":\"Изтрий "
|
||||
"критериите за търсене\",\"clearAll\":\"Изчисти "
|
||||
"всичко\",\"condition\":\"Правило\",\"conditions\":{\"array\":{\"contains\":\"Съдържа\",\"empty\":\"Празно\",\"equals\":\"Еднакво"
|
||||
" с\",\"not\":\"Различно от\",\"notEmpty\":\"Не е "
|
||||
"празно\",\"without\":\"Без\"},\"date\":{\"after\":\"След\",\"before\":\"Преди\",\"between\":\"Между\",\"empty\":\"Празно\",\"equals\":\"Равна"
|
||||
" на\",\"not\":\"Различна от\",\"notBetween\":\"Не е "
|
||||
"между\",\"notEmpty\":\"Не е "
|
||||
"празно\"},\"number\":{\"between\":\"Между\",\"empty\":\"Празно\",\"equals\":\"Равно\",\"gt\":\"Над\",\"gte\":\"Над"
|
||||
" или равно\",\"lt\":\"Под\",\"lte\":\"Под или равно\",\"not\":\"Различно "
|
||||
"от\",\"notBetween\":\"Не е между\",\"notEmpty\":\"Не е "
|
||||
"празно\"},\"string\":{\"contains\":\"Съдържа\",\"empty\":\"Празно\",\"endsWith\":\"Завършва"
|
||||
" с\",\"equals\":\"Еднакво с\",\"not\":\"Различно от\",\"notEmpty\":\"Не е "
|
||||
"празно\",\"startsWith\":\"Започва "
|
||||
"с\"}},\"data\":\"Поле\",\"logicAnd\":\"И\",\"logicOr\":\"Или\",\"value\":\"Стойност\"},\"searchPanes\":{\"clearMessage\":\"Изтрий"
|
||||
" всички\",\"emptyPanes\":\"Няма "
|
||||
"SearchPanes\",\"loadMessage\":\"Зареждане...\",\"title\":\"Активни филтри - "
|
||||
"%d\"},\"buttons\":{\"collection\":\"Колекция\",\"colvis\":\"Показване/Скриване"
|
||||
" на колони\",\"colvisRestore\":\"Показване на всички "
|
||||
"колони\",\"copy\":\"Копиране\",\"copyKeys\":\"Натисни <i>ctrl или u2318 + C "
|
||||
"за да копираш данните от таблицата.<br /> За да отмените, щракнете върху "
|
||||
"това съобщение или натиснете "
|
||||
"<i>escape</i>.</i>\",\"copySuccess\":{\"1\":\"Копиран един "
|
||||
"ред\",\"_\":\"Копирани %ds реда\"},\"copyTitle\":\"Копиране в "
|
||||
"буфера\",\"pageLength\":{\"_\":\"Покажи %d реда\",\"-1\":\"Покажи всички "
|
||||
"редове\"},\"print\":\"Принтиране\"},\"datetime\":{\"hours\":\"Часове\",\"minutes\":\"Минути\",\"months\":{\"0\":\"Януари\",\"1\":\"Февруари\",\"2\":\"Март\",\"3\":\"Април\",\"4\":\"Май\",\"5\":\"Юни\",\"6\":\"Юли\",\"7\":\"Август\",\"8\":\"Септември\",\"9\":\"Октомври\",\"10\":\"Ноември\",\"11\":\"Декември\"},\"next\":\"Напред\",\"previous\":\"Назад\",\"seconds\":\"Секунди\",\"weekdays\":[\"Нед\",\"Пон\",\"Вт\",\"Ср\",\"Четв\",\"Пет\",\"Съб\"]},\"editor\":{\"close\":\"Затвори\",\"create\":{\"button\":\"Нов"
|
||||
" запис\",\"submit\":\"Създай\",\"title\":\"Създай нов "
|
||||
"запис\"},\"edit\":{\"button\":\"Промени\",\"submit\":\"Промени\",\"title\":\"Промени"
|
||||
" запис\"},\"error\":{\"system\":\"Грешка в "
|
||||
"системата!\"},\"multi\":{\"info\":\"Избраните елементи съдържат различни "
|
||||
"стойности за това поле. За да редактирате и зададете всички елементи за това"
|
||||
" поле на една и съща стойност, щракнете или докоснете тук, в противен случай"
|
||||
" те ще запазят своите индивидуални стойности.\",\"noMulti\":\"Това полеможе "
|
||||
"да се редактира индивидуално, но не е част от група.\",\"restore\":\"Отмяна "
|
||||
"на промените\",\"title\":\"Множество "
|
||||
"стойности\"},\"remove\":{\"button\":\"Изтрий\",\"confirm\":{\"1\":\"Сигурни "
|
||||
"ли сте, че искате да изтриете 1 ред?\",\"_\":\"Сигурни ли сте, че искате да "
|
||||
"изтриете %d реда?\"},\"submit\":\"Изтрий\",\"title\":\"Изтрий "
|
||||
"запис\"}},\"emptyTable\":\"Няма налични данни в "
|
||||
"таблицата\",\"loadingRecords\":\"Зареждане...\",\"select\":{\"cells\":{\"1\":\"%d"
|
||||
" избрана клетка\",\"_\":\"%d избрани клетки\"},\"columns\":{\"1\":\"%d "
|
||||
"избрана колона\",\"_\":\"%d избрани колони\"},\"rows\":{\"1\":\"%d избран "
|
||||
"ред\",\"_\":\"%d избрани реда\"}}}"
|
||||
|
||||
msgid "summernote_locale"
|
||||
msgstr "bg-BG"
|
||||
|
||||
msgid "fullcalendar_locale"
|
||||
msgstr "bg"
|
||||
|
||||
msgid "bootstrap-select_locale"
|
||||
msgstr "bg_BG"
|
418
localization/bg_BG/demo_data.po
Normal file
@@ -0,0 +1,418 @@
|
||||
#
|
||||
# Translators:
|
||||
# Plamen Stoyanov <fireto@gmail.com>, 2020
|
||||
# Mihail Andreev, 2020
|
||||
# Steliyan Stoyanov, 2025
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01 17:42+0000\n"
|
||||
"Last-Translator: Steliyan Stoyanov, 2025\n"
|
||||
"Language-Team: Bulgarian (Bulgaria) (https://app.transifex.com/grocy/teams/93189/bg_BG/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: bg_BG\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Domain: grocy/demo_data\n"
|
||||
|
||||
msgid "Cookies"
|
||||
msgstr "Бисквити"
|
||||
|
||||
msgid "Chocolate"
|
||||
msgstr "Шоколад"
|
||||
|
||||
msgid "Pantry"
|
||||
msgstr "Килер"
|
||||
|
||||
msgid "Candy cupboard"
|
||||
msgstr "Шкаф за бонбони"
|
||||
|
||||
msgid "Tinned food cupboard"
|
||||
msgstr "Шкаф за консерви"
|
||||
|
||||
msgid "Fridge"
|
||||
msgstr "Хладилник"
|
||||
|
||||
msgid "Piece"
|
||||
msgid_plural "Pieces"
|
||||
msgstr[0] "Брой"
|
||||
msgstr[1] "Броя"
|
||||
|
||||
msgid "Pack"
|
||||
msgid_plural "Packs"
|
||||
msgstr[0] "Опаковка"
|
||||
msgstr[1] "Опаковки"
|
||||
|
||||
msgid "Glass"
|
||||
msgid_plural "Glasses"
|
||||
msgstr[0] "Чаша"
|
||||
msgstr[1] "Чаши"
|
||||
|
||||
msgid "Tin"
|
||||
msgid_plural "Tins"
|
||||
msgstr[0] "Консерва"
|
||||
msgstr[1] "Консерви"
|
||||
|
||||
msgid "Can"
|
||||
msgid_plural "Cans"
|
||||
msgstr[0] "Кен"
|
||||
msgstr[1] "Кена"
|
||||
|
||||
msgid "Bunch"
|
||||
msgid_plural "Bunches"
|
||||
msgstr[0] "Куп"
|
||||
msgstr[1] "Куп"
|
||||
|
||||
msgid "Gummy bears"
|
||||
msgstr "Гумени мечета"
|
||||
|
||||
msgid "Crisps"
|
||||
msgstr "Чипс"
|
||||
|
||||
msgid "Eggs"
|
||||
msgstr "Яйца"
|
||||
|
||||
msgid "Noodles"
|
||||
msgstr "Юфка"
|
||||
|
||||
msgid "Pickles"
|
||||
msgstr "Туршия"
|
||||
|
||||
msgid "Gulash soup"
|
||||
msgstr "Супа гулаш"
|
||||
|
||||
msgid "Yogurt"
|
||||
msgstr "Кисело мляко"
|
||||
|
||||
msgid "Cheese"
|
||||
msgstr "Сирене"
|
||||
|
||||
msgid "Cold cuts"
|
||||
msgstr "Сухи мезета"
|
||||
|
||||
msgid "Paprika"
|
||||
msgstr "Пипер"
|
||||
|
||||
msgid "Cucumber"
|
||||
msgstr "Краставица"
|
||||
|
||||
msgid "Radish"
|
||||
msgstr "Ряпа"
|
||||
|
||||
msgid "Tomato"
|
||||
msgstr "Домати"
|
||||
|
||||
msgid "Change towels in the bathroom"
|
||||
msgstr "Смени кърпите в банята"
|
||||
|
||||
msgid "Mop the kitchen floor"
|
||||
msgstr "Избършете пода в кухнята"
|
||||
|
||||
msgid "Warranty ends"
|
||||
msgstr "Край на гаранцията"
|
||||
|
||||
msgid "TV remote control"
|
||||
msgstr "Дистанционно за телевизор"
|
||||
|
||||
msgid "Alarm clock"
|
||||
msgstr "Будилник"
|
||||
|
||||
msgid "Heat remote control"
|
||||
msgstr "Дистанционно за термостат"
|
||||
|
||||
msgid "Take out the trash"
|
||||
msgstr "Изхвърлете боклука"
|
||||
|
||||
msgid "Some good snacks"
|
||||
msgstr "Хубави закуски"
|
||||
|
||||
msgid "Pizza dough"
|
||||
msgstr "Тесто за пица"
|
||||
|
||||
msgid "Sieved tomatoes"
|
||||
msgstr "Пасирани домати"
|
||||
|
||||
msgid "Salami"
|
||||
msgstr "Салам"
|
||||
|
||||
msgid "Toast"
|
||||
msgstr "Хляб за тост"
|
||||
|
||||
msgid "Minced meat"
|
||||
msgstr "Кайма"
|
||||
|
||||
msgid "Pizza"
|
||||
msgstr "Пица"
|
||||
|
||||
msgid "Spaghetti bolognese"
|
||||
msgstr "Спагети болонезе"
|
||||
|
||||
msgid "Sandwiches"
|
||||
msgstr "Сандвичи"
|
||||
|
||||
msgid "English"
|
||||
msgstr "Английски"
|
||||
|
||||
msgid "German"
|
||||
msgstr "Немски"
|
||||
|
||||
msgid "Italian"
|
||||
msgstr "Италиански"
|
||||
|
||||
msgid "This is the note content of the recipe ingredient"
|
||||
msgstr "Това е съдържанието на бележката за съставката на рецептата"
|
||||
|
||||
msgid "Demo User"
|
||||
msgstr "Демо потребител"
|
||||
|
||||
msgid "Gram"
|
||||
msgid_plural "Grams"
|
||||
msgstr[0] "Грам"
|
||||
msgstr[1] "Грама"
|
||||
|
||||
msgid "Flour"
|
||||
msgstr "Брашно"
|
||||
|
||||
msgid "Pancakes"
|
||||
msgstr "Палачинки"
|
||||
|
||||
msgid "Sugar"
|
||||
msgstr "Захар"
|
||||
|
||||
msgid "Sweets"
|
||||
msgstr "Сладкиши"
|
||||
|
||||
msgid "Bakery products"
|
||||
msgstr "Хлебни продукти"
|
||||
|
||||
msgid "Tinned food"
|
||||
msgstr "Консерва"
|
||||
|
||||
msgid "Butchery products"
|
||||
msgstr "Месни продукти"
|
||||
|
||||
msgid "Vegetables/Fruits"
|
||||
msgstr "Зеленчуци/Плодове"
|
||||
|
||||
msgid "Refrigerated products"
|
||||
msgstr "Охладени продукти"
|
||||
|
||||
msgid "Coffee machine"
|
||||
msgstr "Кафе машина"
|
||||
|
||||
msgid "Dishwasher"
|
||||
msgstr "Съдомиялна"
|
||||
|
||||
msgid "Liter"
|
||||
msgstr "Литър"
|
||||
|
||||
msgid "Liters"
|
||||
msgstr "Литри"
|
||||
|
||||
msgid "Bottle"
|
||||
msgstr "Бутилка"
|
||||
|
||||
msgid "Bottles"
|
||||
msgstr "Бутилки"
|
||||
|
||||
msgid "Milk"
|
||||
msgstr "Мляко"
|
||||
|
||||
msgid "Chocolate sauce"
|
||||
msgstr "Шоколадов сос"
|
||||
|
||||
msgid "Milliliters"
|
||||
msgstr "Милилитри"
|
||||
|
||||
msgid "Milliliter"
|
||||
msgstr "Милилитър"
|
||||
|
||||
msgid "Bottom"
|
||||
msgstr "Дъно"
|
||||
|
||||
msgid "Topping"
|
||||
msgstr "Топинг"
|
||||
|
||||
msgid "French"
|
||||
msgstr "Френски"
|
||||
|
||||
msgid "Turkish"
|
||||
msgstr "Турски"
|
||||
|
||||
msgid "Spanish"
|
||||
msgstr "Испански"
|
||||
|
||||
msgid "Russian"
|
||||
msgstr "Руски"
|
||||
|
||||
msgid "Vacuum the living room floor"
|
||||
msgstr "Почистете пода с прахосмукачка в хола"
|
||||
|
||||
msgid "Clean the litter box"
|
||||
msgstr "Почистете кутията за отпадъци"
|
||||
|
||||
msgid "Change the bed sheets"
|
||||
msgstr "Смени чаршафите"
|
||||
|
||||
msgid "Swedish"
|
||||
msgstr "Шведски"
|
||||
|
||||
msgid "Polish"
|
||||
msgstr "Полски"
|
||||
|
||||
msgid "Milk Chocolate"
|
||||
msgstr "Млечен шоколад"
|
||||
|
||||
msgid "Dark Chocolate"
|
||||
msgstr "Тъмен шоколад"
|
||||
|
||||
msgid "Slice"
|
||||
msgid_plural "Slices"
|
||||
msgstr[0] "Резън"
|
||||
msgstr[1] "Резъни"
|
||||
|
||||
msgid "Example userentity"
|
||||
msgstr "Пример за ползване"
|
||||
|
||||
msgid "This is an example user entity..."
|
||||
msgstr "Това е примерен потребителски запис..."
|
||||
|
||||
msgid "Custom field"
|
||||
msgstr "Персонализирано поле"
|
||||
|
||||
msgid "Example field value..."
|
||||
msgstr "Примерна стойност на полето..."
|
||||
|
||||
msgid "Waffle rolls"
|
||||
msgstr "Вафлени рула"
|
||||
|
||||
msgid "Danish"
|
||||
msgstr "Датски"
|
||||
|
||||
msgid "Dutch"
|
||||
msgstr "Холандски"
|
||||
|
||||
msgid "Norwegian"
|
||||
msgstr "Норвежки"
|
||||
|
||||
msgid "Demo"
|
||||
msgstr "Демонстрация"
|
||||
|
||||
msgid "Stable version"
|
||||
msgstr "Стабилна версия"
|
||||
|
||||
msgid "Preview version"
|
||||
msgstr "Предварителна версия"
|
||||
|
||||
msgid "current release"
|
||||
msgstr "текущо издание"
|
||||
|
||||
msgid "not yet released"
|
||||
msgstr "още не издадено"
|
||||
|
||||
msgid "Portuguese (Brazil)"
|
||||
msgstr "Португалски (Бразилия)"
|
||||
|
||||
msgid "This is a note"
|
||||
msgstr "Това е бележка"
|
||||
|
||||
msgid "Freezer"
|
||||
msgstr "Фризер"
|
||||
|
||||
msgid "Hungarian"
|
||||
msgstr "Унгарски"
|
||||
|
||||
msgid "Slovak"
|
||||
msgstr "Словашки"
|
||||
|
||||
msgid "Czech"
|
||||
msgstr "Чехия"
|
||||
|
||||
msgid "Portuguese (Portugal)"
|
||||
msgstr "Португалски (Португалия)"
|
||||
|
||||
# Use a in your country well known supermarket name
|
||||
msgid "DemoSupermarket1"
|
||||
msgstr "ДемоСупермаркет1"
|
||||
|
||||
# Use a in your country well known supermarket name
|
||||
msgid "DemoSupermarket2"
|
||||
msgstr "ТестовСупермаркет2"
|
||||
|
||||
msgid "Japanese"
|
||||
msgstr "Японски"
|
||||
|
||||
msgid "Chinese (Taiwan)"
|
||||
msgstr "Китайски (Тайван)"
|
||||
|
||||
msgid "Greek"
|
||||
msgstr "гръцки"
|
||||
|
||||
msgid "Korean"
|
||||
msgstr "корейски"
|
||||
|
||||
msgid "Chinese (China)"
|
||||
msgstr "Китайски (China)"
|
||||
|
||||
msgid "Hebrew (Israel)"
|
||||
msgstr "Иврит (Israel)"
|
||||
|
||||
msgid "Tamil"
|
||||
msgstr "Тамилски"
|
||||
|
||||
msgid "Finnish"
|
||||
msgstr "Финландски"
|
||||
|
||||
msgid "Breakfast"
|
||||
msgstr "Закуска"
|
||||
|
||||
msgid "Lunch"
|
||||
msgstr "Обяд"
|
||||
|
||||
msgid "Dinner"
|
||||
msgstr "Вечеря"
|
||||
|
||||
msgid "Catalan"
|
||||
msgstr "Каталонски"
|
||||
|
||||
msgid "Slovenian"
|
||||
msgstr "Словенски"
|
||||
|
||||
msgid "Lithuanian"
|
||||
msgstr "Литовски"
|
||||
|
||||
msgid "Ukrainian"
|
||||
msgstr "Украински"
|
||||
|
||||
msgid "Kilogram"
|
||||
msgid_plural "Kilograms"
|
||||
msgstr[0] "килограм"
|
||||
msgstr[1] "Килограми"
|
||||
|
||||
msgid "Romanian"
|
||||
msgstr "Румънски"
|
||||
|
||||
msgid "Pint"
|
||||
msgstr "Закачено"
|
||||
|
||||
msgid "Beverages"
|
||||
msgstr "Напитки"
|
||||
|
||||
msgid "Ice Cream"
|
||||
msgstr "Сладолед"
|
||||
|
||||
msgid "Soda"
|
||||
msgstr "Газирана вода"
|
||||
|
||||
msgid "Beer"
|
||||
msgstr "Бира"
|
||||
|
||||
msgid "Estonian"
|
||||
msgstr "Естонски"
|
||||
|
||||
msgid "Bulgarian"
|
||||
msgstr ""
|
151
localization/bg_BG/locales.po
Normal file
@@ -0,0 +1,151 @@
|
||||
#
|
||||
# Translators:
|
||||
# Mihail Andreev, 2020
|
||||
# N T, 2025
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2020-08-31 19:11+0000\n"
|
||||
"Last-Translator: N T, 2025\n"
|
||||
"Language-Team: Bulgarian (Bulgaria) (https://app.transifex.com/grocy/teams/93189/bg_BG/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: bg_BG\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Domain: grocy/locales\n"
|
||||
|
||||
# Czech
|
||||
msgid "cs"
|
||||
msgstr "cs"
|
||||
|
||||
# Danish
|
||||
msgid "da"
|
||||
msgstr "da"
|
||||
|
||||
# German
|
||||
msgid "de"
|
||||
msgstr "de"
|
||||
|
||||
# Greek
|
||||
msgid "el_GR"
|
||||
msgstr "el_GR"
|
||||
|
||||
# English
|
||||
msgid "en"
|
||||
msgstr "en"
|
||||
|
||||
# English (Great Britain)
|
||||
msgid "en_GB"
|
||||
msgstr "en_GB"
|
||||
|
||||
# Spanish
|
||||
msgid "es"
|
||||
msgstr "es"
|
||||
|
||||
# French
|
||||
msgid "fr"
|
||||
msgstr "fr"
|
||||
|
||||
# Hungarian
|
||||
msgid "hu"
|
||||
msgstr "hu"
|
||||
|
||||
# Italian
|
||||
msgid "it"
|
||||
msgstr "it"
|
||||
|
||||
# Japanese
|
||||
msgid "ja"
|
||||
msgstr "ja"
|
||||
|
||||
# Korean
|
||||
msgid "ko_KR"
|
||||
msgstr "ko_KR"
|
||||
|
||||
# Dutch
|
||||
msgid "nl"
|
||||
msgstr "nl"
|
||||
|
||||
# Norwegian
|
||||
msgid "no"
|
||||
msgstr "no"
|
||||
|
||||
# Polish
|
||||
msgid "pl"
|
||||
msgstr "pl"
|
||||
|
||||
# Portuguese (Brazil)
|
||||
msgid "pt_BR"
|
||||
msgstr "pt_BR"
|
||||
|
||||
# Portuguese (Portugal)
|
||||
msgid "pt_PT"
|
||||
msgstr "pt_PT"
|
||||
|
||||
# Russian
|
||||
msgid "ru"
|
||||
msgstr "ru"
|
||||
|
||||
# Slovak
|
||||
msgid "sk_SK"
|
||||
msgstr "sk_SK"
|
||||
|
||||
# Slovenian
|
||||
msgid "sl"
|
||||
msgstr "sl"
|
||||
|
||||
# Swedish
|
||||
msgid "sv_SE"
|
||||
msgstr "sv_SE"
|
||||
|
||||
# Turkish
|
||||
msgid "tr"
|
||||
msgstr "tr"
|
||||
|
||||
# Chinese (Taiwan)
|
||||
msgid "zh_TW"
|
||||
msgstr "zh_TW"
|
||||
|
||||
# Chinese (China)
|
||||
msgid "zh_CN"
|
||||
msgstr "zh_CN"
|
||||
|
||||
# Hebrew (Israel)
|
||||
msgid "he_IL"
|
||||
msgstr "he_IL"
|
||||
|
||||
# Tamil
|
||||
msgid "ta"
|
||||
msgstr "ta"
|
||||
|
||||
# Finnish
|
||||
msgid "fi"
|
||||
msgstr "fi"
|
||||
|
||||
# Catalan
|
||||
msgid "ca"
|
||||
msgstr "ca"
|
||||
|
||||
# Lithuanian
|
||||
msgid "lt"
|
||||
msgstr "lt"
|
||||
|
||||
# Ukrainian
|
||||
msgid "uk"
|
||||
msgstr "uk"
|
||||
|
||||
# Romanian
|
||||
msgid "ro_RO"
|
||||
msgstr "ro_RO"
|
||||
|
||||
# Estonian
|
||||
msgid "et_EE"
|
||||
msgstr "et_EE"
|
||||
|
||||
# Bulgarian
|
||||
msgid "bg_BG"
|
||||
msgstr ""
|
138
localization/bg_BG/permissions.po
Normal file
@@ -0,0 +1,138 @@
|
||||
#
|
||||
# Translators:
|
||||
# Mihail Andreev, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2020-08-29 16:33+0000\n"
|
||||
"Last-Translator: Mihail Andreev, 2020\n"
|
||||
"Language-Team: Bulgarian (Bulgaria) (https://app.transifex.com/grocy/teams/93189/bg_BG/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: bg_BG\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Domain: grocy/permissions\n"
|
||||
|
||||
# All permissions
|
||||
msgid "ADMIN"
|
||||
msgstr "ADMIN"
|
||||
|
||||
# Create users
|
||||
msgid "USERS_CREATE"
|
||||
msgstr "USERS_CREATE"
|
||||
|
||||
# Edit users (including passwords)
|
||||
msgid "USERS_EDIT"
|
||||
msgstr "USERS_EDIT"
|
||||
|
||||
# Show users
|
||||
msgid "USERS_READ"
|
||||
msgstr "USERS_READ"
|
||||
|
||||
# Edit own user data / change own password
|
||||
msgid "USERS_EDIT_SELF"
|
||||
msgstr "USERS_EDIT_SELF"
|
||||
|
||||
# Undo charge cycle
|
||||
msgid "BATTERIES_UNDO_CHARGE_CYCLE"
|
||||
msgstr "BATTERIES_UNDO_CHARGE_CYCLE"
|
||||
|
||||
# Track charge cycle
|
||||
msgid "BATTERIES_TRACK_CHARGE_CYCLE"
|
||||
msgstr "BATTERIES_TRACK_CHARGE_CYCLE"
|
||||
|
||||
# Track execution
|
||||
msgid "CHORE_TRACK_EXECUTION"
|
||||
msgstr "CHORE_TRACK_EXECUTION"
|
||||
|
||||
# Undo execution
|
||||
msgid "CHORE_UNDO_EXECUTION"
|
||||
msgstr "CHORE_UNDO_EXECUTION"
|
||||
|
||||
# Edit master data
|
||||
msgid "MASTER_DATA_EDIT"
|
||||
msgstr "MASTER_DATA_EDIT"
|
||||
|
||||
# Undo execution
|
||||
msgid "TASKS_UNDO_EXECUTION"
|
||||
msgstr "TASKS_UNDO_EXECUTION"
|
||||
|
||||
# Mark completed
|
||||
msgid "TASKS_MARK_COMPLETED"
|
||||
msgstr "TASKS_MARK_COMPLETED"
|
||||
|
||||
# Edit stock entries
|
||||
msgid "STOCK_EDIT"
|
||||
msgstr "STOCK_EDIT"
|
||||
|
||||
# Transfer
|
||||
msgid "STOCK_TRANSFER"
|
||||
msgstr "STOCK_TRANSFER"
|
||||
|
||||
# Inventory
|
||||
msgid "STOCK_INVENTORY"
|
||||
msgstr "STOCK_INVENTORY"
|
||||
|
||||
# Consume
|
||||
msgid "STOCK_CONSUME"
|
||||
msgstr "STOCK_CONSUME"
|
||||
|
||||
# Open products
|
||||
msgid "STOCK_OPEN"
|
||||
msgstr "STOCK_OPEN"
|
||||
|
||||
# Purchase
|
||||
msgid "STOCK_PURCHASE"
|
||||
msgstr "STOCK_PURCHASE"
|
||||
|
||||
# Add items
|
||||
msgid "SHOPPINGLIST_ITEMS_ADD"
|
||||
msgstr "SHOPPINGLIST_ITEMS_ADD"
|
||||
|
||||
# Remove items
|
||||
msgid "SHOPPINGLIST_ITEMS_DELETE"
|
||||
msgstr "SHOPPINGLIST_ITEMS_DELETE"
|
||||
|
||||
# User management
|
||||
msgid "USERS"
|
||||
msgstr "USERS"
|
||||
|
||||
# Stock
|
||||
msgid "STOCK"
|
||||
msgstr "STOCK"
|
||||
|
||||
# Shopping list
|
||||
msgid "SHOPPINGLIST"
|
||||
msgstr "SHOPPINGLIST"
|
||||
|
||||
# Chores
|
||||
msgid "CHORES"
|
||||
msgstr "CHORES"
|
||||
|
||||
# Batteries
|
||||
msgid "BATTERIES"
|
||||
msgstr "BATTERIES"
|
||||
|
||||
# Tasks
|
||||
msgid "TASKS"
|
||||
msgstr "TASKS"
|
||||
|
||||
# Recipes
|
||||
msgid "RECIPES"
|
||||
msgstr "RECIPES"
|
||||
|
||||
# Equipment
|
||||
msgid "EQUIPMENT"
|
||||
msgstr "EQUIPMENT"
|
||||
|
||||
# Calendar
|
||||
msgid "CALENDAR"
|
||||
msgstr "CALENDAR"
|
||||
|
||||
# Meal plan
|
||||
msgid "RECIPES_MEALPLAN"
|
||||
msgstr "RECIPES_MEALPLAN"
|
46
localization/bg_BG/stock_transaction_types.po
Normal file
@@ -0,0 +1,46 @@
|
||||
#
|
||||
# Translators:
|
||||
# Plamen Stoyanov <fireto@gmail.com>, 2020
|
||||
# Mihail Andreev, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01 17:42+0000\n"
|
||||
"Last-Translator: Mihail Andreev, 2020\n"
|
||||
"Language-Team: Bulgarian (Bulgaria) (https://app.transifex.com/grocy/teams/93189/bg_BG/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: bg_BG\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Domain: grocy/stock_transaction_types\n"
|
||||
|
||||
msgid "purchase"
|
||||
msgstr "покупка"
|
||||
|
||||
msgid "transfer_from"
|
||||
msgstr "прехвърли_от"
|
||||
|
||||
msgid "transfer_to"
|
||||
msgstr "прехвъли_към"
|
||||
|
||||
msgid "consume"
|
||||
msgstr "консумирай"
|
||||
|
||||
msgid "inventory-correction"
|
||||
msgstr "корекция-инвентаризация"
|
||||
|
||||
msgid "product-opened"
|
||||
msgstr "отворен-продукт"
|
||||
|
||||
msgid "stock-edit-old"
|
||||
msgstr "наличност-промяна-стар"
|
||||
|
||||
msgid "stock-edit-new"
|
||||
msgstr "наличност-промяна-нов"
|
||||
|
||||
msgid "self-production"
|
||||
msgstr "домашна-продукция"
|
2835
localization/bg_BG/strings.po
Normal file
76
localization/bg_BG/userfield_types.po
Normal file
@@ -0,0 +1,76 @@
|
||||
#
|
||||
# Translators:
|
||||
# Plamen Stoyanov <fireto@gmail.com>, 2020
|
||||
# Mihail Andreev, 2020
|
||||
# Steliyan Stoyanov, 2025
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01 17:43+0000\n"
|
||||
"Last-Translator: Steliyan Stoyanov, 2025\n"
|
||||
"Language-Team: Bulgarian (Bulgaria) (https://app.transifex.com/grocy/teams/93189/bg_BG/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: bg_BG\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Domain: grocy/userfield_types\n"
|
||||
|
||||
# Text (single line)
|
||||
msgid "text-single-line"
|
||||
msgstr "текст-един-ред"
|
||||
|
||||
# Text (multi line)
|
||||
msgid "text-multi-line"
|
||||
msgstr "текст-няколко-реда"
|
||||
|
||||
# Number (integral)
|
||||
msgid "number-integral"
|
||||
msgstr "Число"
|
||||
|
||||
# Number (decimal)
|
||||
msgid "number-decimal"
|
||||
msgstr "число-цяло"
|
||||
|
||||
# Number (currency)
|
||||
msgid "number-currency"
|
||||
msgstr "Валута число"
|
||||
|
||||
# Date (without time)
|
||||
msgid "date"
|
||||
msgstr "дата"
|
||||
|
||||
# Date & time
|
||||
msgid "datetime"
|
||||
msgstr "момент"
|
||||
|
||||
# Checkbox
|
||||
msgid "checkbox"
|
||||
msgstr "чекбокс"
|
||||
|
||||
# Select list (a single item can be selected)
|
||||
msgid "preset-list"
|
||||
msgstr "предварително зададен списък"
|
||||
|
||||
# Select list (multiple items can be selected)
|
||||
msgid "preset-checklist"
|
||||
msgstr "предварително зададен избираем списък"
|
||||
|
||||
# Link
|
||||
msgid "link"
|
||||
msgstr "връзка"
|
||||
|
||||
# Link (with title)
|
||||
msgid "link-with-title"
|
||||
msgstr "Връзка със заглавие"
|
||||
|
||||
# File
|
||||
msgid "file"
|
||||
msgstr "файл"
|
||||
|
||||
# Image
|
||||
msgid "image"
|
||||
msgstr "изображение"
|
@@ -2,6 +2,7 @@
|
||||
# Translators:
|
||||
# gimy16 <gimy16@hotmail.com>, 2021
|
||||
# Carles Riera <blauigris@gmail.com>, 2022
|
||||
# Auri, 2024
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -9,7 +10,7 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-09-17 10:45+0000\n"
|
||||
"Last-Translator: Carles Riera <blauigris@gmail.com>, 2022\n"
|
||||
"Last-Translator: Auri, 2024\n"
|
||||
"Language-Team: Catalan (https://app.transifex.com/grocy/teams/93189/ca/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -19,7 +20,7 @@ msgstr ""
|
||||
"X-Domain: grocy/chore_assignment_types\n"
|
||||
|
||||
msgid "no-assignment"
|
||||
msgstr "sense actius"
|
||||
msgstr "no assignat"
|
||||
|
||||
msgid "who-least-did-first"
|
||||
msgstr "qui menys ha fet primer"
|
||||
|
@@ -1,8 +1,8 @@
|
||||
#
|
||||
# Translators:
|
||||
# Joan Rodas <joanrc93@gmail.com>, 2020
|
||||
# gimy16 <gimy16@hotmail.com>, 2021
|
||||
# Martí Gombau, 2023
|
||||
# Auri, 2024
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -10,7 +10,7 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01 17:42+0000\n"
|
||||
"Last-Translator: Martí Gombau, 2023\n"
|
||||
"Last-Translator: Auri, 2024\n"
|
||||
"Language-Team: Catalan (https://app.transifex.com/grocy/teams/93189/ca/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -23,16 +23,16 @@ msgid "manually"
|
||||
msgstr "manualment"
|
||||
|
||||
msgid "daily"
|
||||
msgstr "diari"
|
||||
msgstr "cada dia"
|
||||
|
||||
msgid "weekly"
|
||||
msgstr "setmanalment"
|
||||
msgstr "cada setmana"
|
||||
|
||||
msgid "monthly"
|
||||
msgstr "mensual"
|
||||
msgstr "cada mes"
|
||||
|
||||
msgid "yearly"
|
||||
msgstr "anual"
|
||||
msgstr "cada any"
|
||||
|
||||
msgid "hourly"
|
||||
msgstr "cada hora"
|
||||
|
@@ -3,6 +3,7 @@
|
||||
# Joan Rodas <joanrc93@gmail.com>, 2020
|
||||
# gimy16 <gimy16@hotmail.com>, 2021
|
||||
# Martí Gombau, 2023
|
||||
# Auri, 2024
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -10,7 +11,7 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01 17:42+0000\n"
|
||||
"Last-Translator: Martí Gombau, 2023\n"
|
||||
"Last-Translator: Auri, 2024\n"
|
||||
"Language-Team: Catalan (https://app.transifex.com/grocy/teams/93189/ca/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -397,19 +398,22 @@ msgid "Romanian"
|
||||
msgstr "Romanès "
|
||||
|
||||
msgid "Pint"
|
||||
msgstr ""
|
||||
msgstr "Terrina/es"
|
||||
|
||||
msgid "Beverages"
|
||||
msgstr ""
|
||||
msgstr "Begudes"
|
||||
|
||||
msgid "Ice Cream"
|
||||
msgstr ""
|
||||
msgstr "Gelats"
|
||||
|
||||
msgid "Soda"
|
||||
msgstr ""
|
||||
msgstr "Refresc"
|
||||
|
||||
msgid "Beer"
|
||||
msgstr ""
|
||||
msgstr "Cervesa"
|
||||
|
||||
msgid "Estonian"
|
||||
msgstr "Estonià"
|
||||
|
||||
msgid "Bulgarian"
|
||||
msgstr ""
|
||||
|
@@ -1,6 +1,7 @@
|
||||
#
|
||||
# Translators:
|
||||
# Martí Gombau, 2023
|
||||
# Auri, 2024
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -8,7 +9,7 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2020-08-31 19:11+0000\n"
|
||||
"Last-Translator: Martí Gombau, 2023\n"
|
||||
"Last-Translator: Auri, 2024\n"
|
||||
"Language-Team: Catalan (https://app.transifex.com/grocy/teams/93189/ca/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -143,4 +144,8 @@ msgstr "ro_RO"
|
||||
|
||||
# Estonian
|
||||
msgid "et_EE"
|
||||
msgstr "et_EE"
|
||||
|
||||
# Bulgarian
|
||||
msgid "bg_BG"
|
||||
msgstr ""
|
||||
|
@@ -1,6 +1,7 @@
|
||||
#
|
||||
# Translators:
|
||||
# gimy16 <gimy16@hotmail.com>, 2021
|
||||
# Auri, 2024
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -8,7 +9,7 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01 17:42+0000\n"
|
||||
"Last-Translator: gimy16 <gimy16@hotmail.com>, 2021\n"
|
||||
"Last-Translator: Auri, 2024\n"
|
||||
"Language-Team: Catalan (https://app.transifex.com/grocy/teams/93189/ca/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -36,10 +37,10 @@ msgid "product-opened"
|
||||
msgstr "Producte_obert"
|
||||
|
||||
msgid "stock-edit-old"
|
||||
msgstr "Edició_d'estoc_antic"
|
||||
msgstr "edició-existència-antiga"
|
||||
|
||||
msgid "stock-edit-new"
|
||||
msgstr "Edició_d'estoc_nou"
|
||||
msgstr "edició-existència-nova"
|
||||
|
||||
msgid "self-production"
|
||||
msgstr "Producció_pròpia"
|
||||
|
@@ -4,6 +4,9 @@
|
||||
# Carles Riera <blauigris@gmail.com>, 2021
|
||||
# jorclaret, 2022
|
||||
# Martí Gombau, 2023
|
||||
# Auri, 2024
|
||||
# Pau Nofuentes Sendra, 2024
|
||||
# Roger Solé Vilajuliu, 2024
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -11,7 +14,7 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01 17:42+0000\n"
|
||||
"Last-Translator: Martí Gombau, 2023\n"
|
||||
"Last-Translator: Roger Solé Vilajuliu, 2024\n"
|
||||
"Language-Team: Catalan (https://app.transifex.com/grocy/teams/93189/ca/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -129,7 +132,7 @@ msgid "Product overview"
|
||||
msgstr "Resum de productes"
|
||||
|
||||
msgid "Stock quantity unit"
|
||||
msgstr "Unitat d'inventari"
|
||||
msgstr "Unitat d'existències"
|
||||
|
||||
msgid "Stock amount"
|
||||
msgstr "Existències"
|
||||
@@ -213,7 +216,7 @@ msgid "Default quantity unit purchase"
|
||||
msgstr "Unitat predeterminada"
|
||||
|
||||
msgid "Quantity unit stock"
|
||||
msgstr "Unitat d'inventari"
|
||||
msgstr "Unitat d'existències"
|
||||
|
||||
msgid "Create location"
|
||||
msgstr "Afegir ubicació"
|
||||
@@ -281,8 +284,8 @@ msgstr "Clau d'accés"
|
||||
msgid "Invalid credentials, please try again"
|
||||
msgstr "Credencials invàlides, sius-plau torna-ho a intentar"
|
||||
|
||||
msgid "Are you sure to delete battery \"%s\"?"
|
||||
msgstr "Segur que vols eliminar la bateria \"%s\"?"
|
||||
msgid "Are you sure you want to delete battery \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Sí"
|
||||
@@ -290,8 +293,8 @@ msgstr "Sí"
|
||||
msgid "No"
|
||||
msgstr "No"
|
||||
|
||||
msgid "Are you sure to delete chore \"%s\"?"
|
||||
msgstr "Segur que vols eliminar la feina de casa \"%s\"?"
|
||||
msgid "Are you sure you want to delete chore \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "\"%s\" could not be resolved to a product, how do you want to proceed?"
|
||||
msgstr "no s'ha pogut identificar com a producte, com vols procedir?"
|
||||
@@ -311,17 +314,17 @@ msgstr "Afegir com a codi de barres a un producte existent"
|
||||
msgid "Add as new product and prefill barcode"
|
||||
msgstr "Afegir com a nou producte amb el codi de barres"
|
||||
|
||||
msgid "Are you sure to delete quantity unit \"%s\"?"
|
||||
msgstr "Segur que vols eliminar la unitat \"%s\"?"
|
||||
msgid "Are you sure you want to delete quantity unit \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure to delete product \"%s\"?"
|
||||
msgstr "Segur que vols eliminar el producte \"%s\"?"
|
||||
msgid "Are you sure you want to delete product \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure to delete location \"%s\"?"
|
||||
msgstr "Segur que vols eliminar la ubicació \"%s\"?"
|
||||
msgid "Are you sure you want to delete location \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure to delete store \"%s\"?"
|
||||
msgstr "Segur que vols eliminar l'establiment \"%s\"?"
|
||||
msgid "Are you sure you want to delete store \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manage API keys"
|
||||
msgstr "Gestiona les claus de l'API"
|
||||
@@ -357,14 +360,11 @@ msgid "Removed %1$s of %2$s from stock"
|
||||
msgstr "%1$s de %2$s eliminats de l'inventari"
|
||||
|
||||
msgid "About Grocy"
|
||||
msgstr ""
|
||||
msgstr "Sobre Grocy"
|
||||
|
||||
msgid "Close"
|
||||
msgstr "Tancar"
|
||||
|
||||
msgid "Released on"
|
||||
msgstr "Publicat el"
|
||||
|
||||
msgid "Added %1$s of %2$s to stock"
|
||||
msgstr "%1$s de %2$s afegits a l'inventari"
|
||||
|
||||
@@ -437,14 +437,14 @@ msgstr "Afegir ingredient a la recepta"
|
||||
msgid "Edit recipe ingredient"
|
||||
msgstr "Editar ingredient de la recepta"
|
||||
|
||||
msgid "Are you sure to delete recipe \"%s\"?"
|
||||
msgstr "Segur que vols eliminar la recepta \"%s\"?"
|
||||
msgid "Are you sure you want to delete recipe \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure to delete recipe ingredient \"%s\"?"
|
||||
msgstr "Segur que vols eliminar l'ingredient \"%s\" de la recepta?"
|
||||
msgid "Are you sure you want to delete recipe ingredient \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure to empty shopping list \"%s\"?"
|
||||
msgstr "Segur que vols buidar la llista de la compra \"%s\"?"
|
||||
msgid "Are you sure you want to empty shopping list \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Clear list"
|
||||
msgstr "Buidar llista"
|
||||
@@ -493,14 +493,9 @@ msgid "Put missing amount on shopping list"
|
||||
msgstr "Afegeix els que falten a la llista de la compra"
|
||||
|
||||
msgid ""
|
||||
"Are you sure to put all missing ingredients for recipe \"%s\" on the "
|
||||
"shopping list?"
|
||||
"Are you sure you want to put all missing ingredients for recipe \"%s\" on "
|
||||
"the shopping list?"
|
||||
msgstr ""
|
||||
"Segur que vols afegir tots els ingredients que falten per a la recepta "
|
||||
"\"%s\" a la llista de la compra?"
|
||||
|
||||
msgid "Added for recipe %s"
|
||||
msgstr "Afegit per a la recepta %s"
|
||||
|
||||
msgid "Manage users"
|
||||
msgstr "Gestiona els usuaris"
|
||||
@@ -511,8 +506,8 @@ msgstr "Usuari"
|
||||
msgid "Users"
|
||||
msgstr "Usuaris"
|
||||
|
||||
msgid "Are you sure to delete user \"%s\"?"
|
||||
msgstr "Segur que vols eliminar l'usuari \"%s\"?"
|
||||
msgid "Are you sure you want to delete user \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create user"
|
||||
msgstr "Afegir usuari"
|
||||
@@ -608,15 +603,13 @@ msgid "Only check if any amount is in stock"
|
||||
msgstr "Només comprovar si hi ha existències"
|
||||
|
||||
msgid ""
|
||||
"Are you sure to consume all ingredients needed by recipe \"%s\" (ingredients"
|
||||
" marked with \"only check if any amount is in stock\" will be ignored)?"
|
||||
"Are you sure you want to consume all ingredients needed by recipe \"%s\" "
|
||||
"(ingredients marked with \"only check if any amount is in stock\" will be "
|
||||
"ignored)?"
|
||||
msgstr ""
|
||||
"Segur que vols consumir tots els ingredients requerits per fer la recepta "
|
||||
"\"%s\" (Els ingredients marcats amb \"només comprovar si hi ha "
|
||||
"existències\") s'ignoraran?"
|
||||
|
||||
msgid "Removed all ingredients of recipe \"%s\" from stock"
|
||||
msgstr " Tots els ingredients de la recepta \"%s\" s'han eliminat de l'inventari"
|
||||
msgid "Removed all in stock ingredients needed by recipe \"%s\" from stock"
|
||||
msgstr ""
|
||||
|
||||
msgid "Consume all ingredients needed by this recipe"
|
||||
msgstr "Consumir tots els ingredients requerits per aquesta recepta"
|
||||
@@ -666,8 +659,8 @@ msgstr "Categoria"
|
||||
msgid "Edit task"
|
||||
msgstr "Editar tasca"
|
||||
|
||||
msgid "Are you sure to delete task \"%s\"?"
|
||||
msgstr "Segur que vols eliminar la tasca \"%s\"?"
|
||||
msgid "Are you sure you want to delete task \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "%s task is due to be done"
|
||||
msgid_plural "%s tasks are due to be done"
|
||||
@@ -700,8 +693,8 @@ msgstr "Editar grup de productes"
|
||||
msgid "Product group"
|
||||
msgstr "Grup de productes"
|
||||
|
||||
msgid "Are you sure to delete product group \"%s\"?"
|
||||
msgstr "Estàs segur d'eliminar el grup de producte \"%s\"?"
|
||||
msgid "Are you sure you want to delete product group \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Stay logged in permanently"
|
||||
msgstr "Mantenir-se connectat permanentment"
|
||||
@@ -855,6 +848,9 @@ msgid ""
|
||||
"The first item in this list would be picked by the default rule consume rule"
|
||||
" (Opened first, then first due first, then first in first out)"
|
||||
msgstr ""
|
||||
"El primer element d'aquesta llista serà utilitzat per la regla de consum per"
|
||||
" defecte (Primer l'obert, després el que caduca primer, després el primer "
|
||||
"que entra el primer que surt)"
|
||||
|
||||
msgid "Mark %1$s of %2$s as open"
|
||||
msgstr "Marcar %1$s de %2$s com a obert"
|
||||
@@ -869,7 +865,9 @@ msgid "Not opened"
|
||||
msgstr "No obert"
|
||||
|
||||
msgid "Opened"
|
||||
msgstr "Obert"
|
||||
msgid_plural "Opened"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
msgid "%s opened"
|
||||
msgstr "%s obert"
|
||||
@@ -953,6 +951,10 @@ msgid ""
|
||||
"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"
|
||||
msgstr ""
|
||||
"Això serà útil per exemple per a farina en pots - quan es "
|
||||
"compra/consumeix/inventaria, sempre es pesa el pot sencer, la quantitat "
|
||||
"final és calculada automàticament basat en la quantitat en existències i la "
|
||||
"tara definida a continuació."
|
||||
|
||||
msgid "Tare weight"
|
||||
msgstr "Tara"
|
||||
@@ -1034,8 +1036,8 @@ msgstr "Configuració de tasques"
|
||||
msgid "Create shopping list"
|
||||
msgstr "Crear llista de la compra"
|
||||
|
||||
msgid "Are you sure to delete shopping list \"%s\"?"
|
||||
msgstr "Estàs segur d'eliminar la llista de la compra \"%s\"?"
|
||||
msgid "Are you sure you want to delete shopping list \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Average shelf life"
|
||||
msgstr "Temps de vida mitjà de l'inventari"
|
||||
@@ -1156,6 +1158,9 @@ msgid ""
|
||||
"When this is not empty, it will be shown instead of the amount entered above"
|
||||
" while the amount there will still be used for stock fulfillment checking"
|
||||
msgstr ""
|
||||
"Quan no estigui buit, es mostrarà enlloc de la quantitat introduïda a dalt. "
|
||||
"La quantitat de dalt seguirà sent la utilitzada en les comprovacions "
|
||||
"d'existències a l'inventari. "
|
||||
|
||||
msgid "Track date only"
|
||||
msgstr "Només seguiment de data"
|
||||
@@ -1169,7 +1174,7 @@ msgid "Consume %1$s of %2$s"
|
||||
msgstr "Consumir %1$s de %2$s"
|
||||
|
||||
msgid "Meal plan"
|
||||
msgstr "Calendari de menús"
|
||||
msgstr "Calendari d'àpats"
|
||||
|
||||
msgid "%s serving"
|
||||
msgid_plural "%s servings"
|
||||
@@ -1204,11 +1209,6 @@ msgstr "Mai"
|
||||
msgid "Today"
|
||||
msgstr "Avui"
|
||||
|
||||
msgid "Not all ingredients of recipe \"%s\" are in stock, nothing removed"
|
||||
msgstr ""
|
||||
"No tots els ingredients de la recepta \"%s\" tenen existències, no s'ha "
|
||||
"eliminat res"
|
||||
|
||||
msgid "Undo task"
|
||||
msgstr "Desfer tasca"
|
||||
|
||||
@@ -1219,6 +1219,8 @@ msgid ""
|
||||
"When enabled the chore can never be overdue, the due date will shift forward"
|
||||
" each day when due"
|
||||
msgstr ""
|
||||
"Quan s'activa, la tasca no pot vèncer mai, la dada de venciment és moure un "
|
||||
"dia endavant cada dia després del venciment."
|
||||
|
||||
msgid "Location Content Sheet"
|
||||
msgstr "Full de continguts d'ubicació"
|
||||
@@ -1245,8 +1247,8 @@ msgstr "Quantitat consumida"
|
||||
msgid "Time of printing"
|
||||
msgstr "Hora d'impressi"
|
||||
|
||||
msgid "Are you sure to delete equipment \"%s\"?"
|
||||
msgstr "Estàs segur d'eliminar l'equipament \"%s\"?"
|
||||
msgid "Are you sure you want to delete equipment \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Parent product"
|
||||
msgstr "Producte pare"
|
||||
@@ -1310,7 +1312,11 @@ msgid_plural ""
|
||||
"This means the next execution of this chore is scheduled at the same time "
|
||||
"(based on the start date) every %s days"
|
||||
msgstr[0] ""
|
||||
"Això vol dir que la pròxima execució de la tasca està programada a la "
|
||||
"mateixa hora (basat en la data d'inici) cada dia"
|
||||
msgstr[1] ""
|
||||
"Això vol dir que la pròxima execució de la tasca està programada a la "
|
||||
"mateixa hora (basat en la data d'inici) cada %s dies"
|
||||
|
||||
msgid ""
|
||||
"This means the next execution of this chore is scheduled %s hour after the "
|
||||
@@ -1319,7 +1325,11 @@ msgid_plural ""
|
||||
"This means the next execution of this chore is scheduled %s hours after the "
|
||||
"last execution"
|
||||
msgstr[0] ""
|
||||
"Això vol dir que la pròxima execució de la tasca està programada 1 hora "
|
||||
"després de l'última execució"
|
||||
msgstr[1] ""
|
||||
"Això vol dir que la pròxima execució de la tasca està programada %s hores "
|
||||
"després de l'última execució"
|
||||
|
||||
msgid ""
|
||||
"This means the next execution of this chore is scheduled every week on the "
|
||||
@@ -1328,7 +1338,11 @@ msgid_plural ""
|
||||
"This means the next execution of this chore is scheduled every %s weeks on "
|
||||
"the selected weekdays"
|
||||
msgstr[0] ""
|
||||
"Això vol dir que la pròxima execució de la tasca està programada cada "
|
||||
"setmana als dies seleccionats"
|
||||
msgstr[1] ""
|
||||
"Això vol dir que la pròxima execució de la tasca està programada cada %s "
|
||||
"setmanes als dies seleccionats"
|
||||
|
||||
msgid ""
|
||||
"This means the next execution of this chore is scheduled on the selected day"
|
||||
@@ -1337,7 +1351,11 @@ msgid_plural ""
|
||||
"This means the next execution of this chore is scheduled on the selected day"
|
||||
" every %s months"
|
||||
msgstr[0] ""
|
||||
"Això vol dir que la pròxima execució de la tasca està programada al dia "
|
||||
"seleccionat cada mes"
|
||||
msgstr[1] ""
|
||||
"Això vol dir que la pròxima execució de la tasca està programada al dia "
|
||||
"seleccionat cada %s mesos"
|
||||
|
||||
msgid "This means the next execution of this chore is not scheduled"
|
||||
msgstr ""
|
||||
@@ -1346,30 +1364,37 @@ msgstr ""
|
||||
msgid ""
|
||||
"This means the next execution of this chore will not be assigned to anyone"
|
||||
msgstr ""
|
||||
"Això vol dir que la pròxima execució de la tasca no serà assignada a ningú"
|
||||
|
||||
msgid ""
|
||||
"This means the next execution of this chore will be assigned to the one who "
|
||||
"executed it least"
|
||||
msgstr ""
|
||||
"Això vol dir que la pròxima execució de la tasca serà assignada a qui l'hagi"
|
||||
" executat l'última vegada"
|
||||
|
||||
msgid "This means the next execution of this chore will be assigned randomly"
|
||||
msgstr ""
|
||||
"Això vol dir que la pròxima execució de la tasca serà assignada "
|
||||
"aleatòriament a algú"
|
||||
|
||||
msgid ""
|
||||
"This means the next execution of this chore will be assigned to the next one"
|
||||
" in alphabetical order"
|
||||
msgstr ""
|
||||
"Això vol dir que la pròxima execució de la tasca serà assignada la següent "
|
||||
"persona en ordre alfabètic"
|
||||
|
||||
msgid "Assign to"
|
||||
msgstr ""
|
||||
msgstr "Assigna a"
|
||||
|
||||
msgid "This assignment type requires that at least one is assigned"
|
||||
msgstr ""
|
||||
|
||||
msgid "%s chore is assigned to me"
|
||||
msgid_plural "%s chores are assigned to me"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "Tens assignada %s feina"
|
||||
msgstr[1] "Tens assignades %s feines"
|
||||
|
||||
msgid "Assigned to me"
|
||||
msgstr "Assignat a mi"
|
||||
@@ -1383,8 +1408,8 @@ msgstr "Assignació"
|
||||
msgid "Consume product on chore execution"
|
||||
msgstr "Consumir producte al executar la tasca"
|
||||
|
||||
msgid "Are you sure to delete user field \"%s\"?"
|
||||
msgstr "Segur que vols eliminar el camp d'usuari \"%s\"?"
|
||||
msgid "Are you sure you want to delete user field \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Userentities"
|
||||
msgstr "Entitat d'usuari"
|
||||
@@ -1404,8 +1429,8 @@ msgstr "Editar %s"
|
||||
msgid "Create %s"
|
||||
msgstr "Crear %s"
|
||||
|
||||
msgid "Are you sure to delete this userobject?"
|
||||
msgstr "Segur que vols eliminar aquest objecte d'usuari?"
|
||||
msgid "Are you sure you want to delete this userobject?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Icon CSS class"
|
||||
msgstr "Icona classe CSS"
|
||||
@@ -1440,7 +1465,7 @@ msgid "Price factor"
|
||||
msgstr "Factor de preu"
|
||||
|
||||
msgid "Do you find Grocy useful?"
|
||||
msgstr ""
|
||||
msgstr "Trobes que Grocy t'és d'utilitat?"
|
||||
|
||||
msgid "Say thanks"
|
||||
msgstr "Dir gràcies"
|
||||
@@ -1458,7 +1483,7 @@ msgid "Output"
|
||||
msgstr "Resultat"
|
||||
|
||||
msgid "Energy"
|
||||
msgstr ""
|
||||
msgstr "Energia"
|
||||
|
||||
msgid "Per stock quantity unit"
|
||||
msgstr "Per unitat d'existències"
|
||||
@@ -1491,9 +1516,12 @@ msgid ""
|
||||
"If enabled, the min. stock amount of sub products will be accumulated into "
|
||||
"this product, means the sub product will never be missing, only this product"
|
||||
msgstr ""
|
||||
"Si s'activa, el mínim d'existències dels subproductes seran acumulats en "
|
||||
"aquest producte, volent dir que el subproducte mai podrà faltar, només "
|
||||
"aquest producte."
|
||||
|
||||
msgid "Are you sure to remove this conversion?"
|
||||
msgstr "Estas segur d'eliminar aquesta conversió?"
|
||||
msgid "Are you sure you want to remove this conversion?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unit price"
|
||||
msgstr "Preu unitari"
|
||||
@@ -1510,8 +1538,8 @@ msgstr "Il·limitat"
|
||||
msgid "Clear"
|
||||
msgstr "Neteja"
|
||||
|
||||
msgid "Are you sure to remove the included recipe \"%s\"?"
|
||||
msgstr "Segur que vols eliminar la recepta inclosa \"%s\"?"
|
||||
msgid "Are you sure you want to remove the included recipe \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Period interval"
|
||||
msgstr "Interval"
|
||||
@@ -1523,10 +1551,14 @@ msgid_plural ""
|
||||
"This means the next execution of this chore is scheduled every %s years on "
|
||||
"the same day (based on the start date)"
|
||||
msgstr[0] ""
|
||||
"Això vol dir que la pròxima execució de la tasca està programada cada any al"
|
||||
" mateix dia (basat en la data d'inici)"
|
||||
msgstr[1] ""
|
||||
"Això vol dir que la pròxima execució de la tasca està programada cada %s "
|
||||
"anys al mateix dia (basat en la data d'inici)"
|
||||
|
||||
msgid "Transfer"
|
||||
msgstr ""
|
||||
msgstr "Transfereix"
|
||||
|
||||
msgid "From location"
|
||||
msgstr "D'ubicació"
|
||||
@@ -1559,10 +1591,10 @@ msgid "The amount cannot be lower than %1$s"
|
||||
msgstr "La quantitat no pot ser inferior a %1$s"
|
||||
|
||||
msgid "Stock entry successfully updated"
|
||||
msgstr ""
|
||||
msgstr "Entrada d'existències actualitzada correctament"
|
||||
|
||||
msgid "Edit stock entry"
|
||||
msgstr ""
|
||||
msgstr "Edita l'entrada d'inventari"
|
||||
|
||||
msgid ""
|
||||
"Camera access is only possible when supported and allowed by your browser "
|
||||
@@ -1594,8 +1626,8 @@ msgstr ""
|
||||
msgid "Booking does not exist or was already undone"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure to delete API key \"%s\"?"
|
||||
msgstr "Segur que vols eliminar la clau API \"%s\"?"
|
||||
msgid "Are you sure you want to delete API key \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add note"
|
||||
msgstr "Afegir nota"
|
||||
@@ -1648,8 +1680,8 @@ msgstr "Descongelat"
|
||||
msgid "Frozen"
|
||||
msgstr "Congelat"
|
||||
|
||||
msgid "Are you sure to delete userentity \"%s\"?"
|
||||
msgstr "Segur que vols eliminar l'entitat d'usuari \"%s\"?"
|
||||
msgid "Are you sure you want to delete userentity \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Shopping list settings"
|
||||
msgstr "Configuració de la llista de la compra"
|
||||
@@ -1660,9 +1692,6 @@ msgstr "Mostra la vista mensual de calendari"
|
||||
msgid "Desired servings"
|
||||
msgstr "Racions desitjades"
|
||||
|
||||
msgid "Base: %s"
|
||||
msgstr "Base: %s"
|
||||
|
||||
msgid "Recipes settings"
|
||||
msgstr "Configuració de receptes"
|
||||
|
||||
@@ -1746,7 +1775,7 @@ msgstr "Editar codi de barres"
|
||||
|
||||
msgid ""
|
||||
"Based on the prices of the default consume rule (Opened first, then first "
|
||||
"due first, then first in first out) for in-stock ingredients and on the last"
|
||||
"due first, then first in first out) for in stock ingredients and on the last"
|
||||
" price for missing ones"
|
||||
msgstr ""
|
||||
|
||||
@@ -1874,7 +1903,7 @@ msgid "Transaction time"
|
||||
msgstr "Hora de la transacció"
|
||||
|
||||
msgid "Chore journal"
|
||||
msgstr ""
|
||||
msgstr "Resum de tasques"
|
||||
|
||||
msgid "Track next chore schedule"
|
||||
msgstr ""
|
||||
@@ -1904,6 +1933,8 @@ msgid ""
|
||||
"This is the default quantity unit used on purchase and when adding this "
|
||||
"product to the shopping list"
|
||||
msgstr ""
|
||||
"Aquesta és la unitat per defecte que es farà servir en comprar i quan "
|
||||
"s'afegeix el producte a la llista de la compra"
|
||||
|
||||
msgid ""
|
||||
"Show a warning when the due date of the purchased product is earlier than "
|
||||
@@ -1912,9 +1943,8 @@ msgstr ""
|
||||
"Mostra una advertència quan la data de caducitat del producte comprat és més"
|
||||
" propera que la de les existències"
|
||||
|
||||
msgid "This is due earlier than already in-stock items"
|
||||
msgid "This is due earlier than already in stock items"
|
||||
msgstr ""
|
||||
"Aquesta data de caducitat és més propera que la que ja tens en existències"
|
||||
|
||||
msgid ""
|
||||
"When enabled, after changing/scanning a product and if all fields could be "
|
||||
@@ -1929,17 +1959,21 @@ msgid ""
|
||||
"This amount is used for the \"quick consume button\" on the stock overview "
|
||||
"page (related to quantity unit stock)"
|
||||
msgstr ""
|
||||
"Aquesta quantitat és utilitzada pel botó de \"consumir ràpidament\" en la "
|
||||
"pàgina d'existències (en unitats d'existències)"
|
||||
|
||||
msgid ""
|
||||
"This amount is used for the \"quick open button\" on the stock overview page"
|
||||
" (related to quantity unit stock)"
|
||||
msgstr ""
|
||||
"Aquesta quantitat és utilitzada pel botó de \"obrir ràpidament\" en la "
|
||||
"pàgina d'existències (en unitats d'existències)"
|
||||
|
||||
msgid "Copy"
|
||||
msgstr "Copiar"
|
||||
|
||||
msgid "Are you sure to remove this barcode?"
|
||||
msgstr "Segur que vols eliminar aquest codi de barres?"
|
||||
msgid "Are you sure you want to remove this barcode?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Due date type"
|
||||
msgstr "Tipus de data de caducitat"
|
||||
@@ -2062,11 +2096,15 @@ msgid ""
|
||||
"This cannot be lower than %1$s and needs to be a valid number with max. %2$s"
|
||||
" decimal places"
|
||||
msgstr ""
|
||||
"Això no pot ser més baix que %1$s i ha de ser un nombre vàlid amb un màxim "
|
||||
"de %2$s decimals"
|
||||
|
||||
msgid ""
|
||||
"This must between %1$s and %2$s and needs to be a valid number with max. "
|
||||
"%3$s decimal places"
|
||||
msgstr ""
|
||||
"Aquest ha de ser entre %1$s i %2$s i ha de ser un nombre vàlid amb un màxim "
|
||||
"de %3$s decimals"
|
||||
|
||||
msgid ""
|
||||
"Automatically do the booking using the last price and the amount of the "
|
||||
@@ -2123,13 +2161,13 @@ msgid "Ingredient group"
|
||||
msgstr "Grup d'ingredients"
|
||||
|
||||
msgid "Reset"
|
||||
msgstr "Reiniciar"
|
||||
msgstr "Reinicia"
|
||||
|
||||
msgid "Are you sure to reset the table options?"
|
||||
msgstr "Segur que vols reiniciar les opcions de la taula?"
|
||||
msgid "Are you sure you want to reset the table options?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hide/view columns"
|
||||
msgstr "Ocultar/mostrar columnes"
|
||||
msgstr "Oculta/mostra columnes"
|
||||
|
||||
msgid ""
|
||||
"A different amount/unit can then be used below while for stock fulfillment "
|
||||
@@ -2140,7 +2178,7 @@ msgid "Last price (Unit)"
|
||||
msgstr "Últim preu (unitat)"
|
||||
|
||||
msgid "Last price (Total)"
|
||||
msgstr "Últim preu (Total)"
|
||||
msgstr "Últim preu (total)"
|
||||
|
||||
msgid "Show header"
|
||||
msgstr "Mostrar capçalera"
|
||||
@@ -2187,7 +2225,7 @@ msgid "Link"
|
||||
msgstr "Enllaç"
|
||||
|
||||
msgid ""
|
||||
"The stock overview page lists all products which are currently in-stock or "
|
||||
"The stock overview page lists all products which are currently in stock or "
|
||||
"below their min. stock amount - enable this to hide this product there "
|
||||
"always"
|
||||
msgstr ""
|
||||
@@ -2199,7 +2237,7 @@ msgid "A product or a note is required"
|
||||
msgstr "Es requereix un producte o nota"
|
||||
|
||||
msgid "Grocycode"
|
||||
msgstr ""
|
||||
msgstr "Grocycode"
|
||||
|
||||
msgid "Download"
|
||||
msgstr "Descàrrega"
|
||||
@@ -2215,7 +2253,7 @@ msgstr ""
|
||||
|
||||
# Abbreviation for "due date"
|
||||
msgid "DD"
|
||||
msgstr ""
|
||||
msgstr "DC"
|
||||
|
||||
msgid "Print on label printer"
|
||||
msgstr "Imprimir en una impressora d'etiquetes"
|
||||
@@ -2260,8 +2298,8 @@ msgstr "No s'ha pogut imprimir"
|
||||
msgid "Only done items"
|
||||
msgstr "Només elements completats"
|
||||
|
||||
msgid "Show only in-stock products"
|
||||
msgstr "Mostra només productes en existències"
|
||||
msgid "Show only in stock products"
|
||||
msgstr ""
|
||||
|
||||
msgid "Product description"
|
||||
msgstr "Descripció de producte"
|
||||
@@ -2282,8 +2320,8 @@ msgstr "Camp d'usuari obligatori"
|
||||
msgid "When enabled, then this field must be filled on the destination form"
|
||||
msgstr "Quan activat, aquest camp s'ha d'omplir en el formulari de dest"
|
||||
|
||||
msgid "In-stock products"
|
||||
msgstr "Productes en existències"
|
||||
msgid "In stock products"
|
||||
msgstr ""
|
||||
|
||||
msgid "Timestamp"
|
||||
msgstr "Marca de temps"
|
||||
@@ -2348,30 +2386,30 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgid "Stock entry"
|
||||
msgstr ""
|
||||
msgstr "Entrada d'existències"
|
||||
|
||||
msgid "Configure sections"
|
||||
msgstr "Configurar seccions"
|
||||
|
||||
msgid "Meal plan sections"
|
||||
msgstr ""
|
||||
msgstr "Seccions de planificador d'àpats"
|
||||
|
||||
msgid "Create meal plan section"
|
||||
msgstr ""
|
||||
msgstr "Crea una secció al planificador d'àpats"
|
||||
|
||||
msgid "Sections will be ordered by that number on the meal plan"
|
||||
msgstr ""
|
||||
msgstr "Les seccions seran ordenades pel número en el planificador d'àpats."
|
||||
|
||||
msgid "Edit meal plan section"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure to delete meal plan section \"%s\"?"
|
||||
msgid "Are you sure you want to delete meal plan section \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Section"
|
||||
msgstr "Secció"
|
||||
|
||||
msgid "Are you sure to empty the shopping list?"
|
||||
msgid "Are you sure you want to empty the shopping list?"
|
||||
msgstr ""
|
||||
|
||||
msgid "This is the default which will be prefilled on purchase"
|
||||
@@ -2404,8 +2442,8 @@ msgstr[1] ""
|
||||
|
||||
msgid "%s chore is due to be done today"
|
||||
msgid_plural "%s chores are due to be done today"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "%s tasca s'ha d'acabar avui"
|
||||
msgstr[1] "%s tasques s'han d'acabar avui"
|
||||
|
||||
msgid "%s battery is due to be charged today"
|
||||
msgid_plural "%s batteries are due to be charged today"
|
||||
@@ -2416,18 +2454,20 @@ msgid "Set to 0 to hide due soon filters/highlighting"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save & close"
|
||||
msgstr ""
|
||||
msgstr "Desa i tanca"
|
||||
|
||||
msgid "Save & add another task"
|
||||
msgstr ""
|
||||
msgstr "Desa i afegeix una altra tasca"
|
||||
|
||||
msgid "Treat opened as out of stock"
|
||||
msgstr ""
|
||||
msgstr "Tracta obert com a esgotat"
|
||||
|
||||
msgid ""
|
||||
"When enabled, opened items will be counted as missing for calculating if "
|
||||
"this product is below its minimum stock amount"
|
||||
msgstr ""
|
||||
"Quan s'activa, els elements oberts seran comptats com a absents per calcular"
|
||||
" si aquest producte es troba per sota els mínims d'existències."
|
||||
|
||||
msgid "Skipped"
|
||||
msgstr ""
|
||||
@@ -2436,16 +2476,18 @@ msgid "Skip next chore schedule"
|
||||
msgstr ""
|
||||
|
||||
msgid "Time"
|
||||
msgstr ""
|
||||
msgstr "Hora"
|
||||
|
||||
msgid "A start date is required"
|
||||
msgstr ""
|
||||
msgstr "La data d'inici és necessària"
|
||||
|
||||
msgid "Start date"
|
||||
msgstr ""
|
||||
msgstr "Data d'inici"
|
||||
|
||||
msgid "The start date cannot be changed when the chore was once tracked"
|
||||
msgstr ""
|
||||
"La data d'inici no es pot canviar després de començar el seguiment de la "
|
||||
"tasca"
|
||||
|
||||
msgid "Show the recipe list and the recipe side by side"
|
||||
msgstr ""
|
||||
@@ -2454,18 +2496,20 @@ msgid ""
|
||||
"This means the next execution of this chore is scheduled dynamically based "
|
||||
"on the past average execution frequency"
|
||||
msgstr ""
|
||||
"Això vol dir que la pròxima execució de la tasca està programada "
|
||||
"dinàmicament basant-se en la freqüència mitjana d'execució "
|
||||
|
||||
msgid "Average execution frequency"
|
||||
msgstr ""
|
||||
msgstr "Freqüència mitjana de realització"
|
||||
|
||||
msgid "Reschedule next execution"
|
||||
msgstr ""
|
||||
msgstr "Re-programa la següent realització"
|
||||
|
||||
msgid "This can only be in the future"
|
||||
msgstr ""
|
||||
|
||||
msgid "Rescheduled"
|
||||
msgstr ""
|
||||
msgstr "Re-programada"
|
||||
|
||||
msgid "Due score"
|
||||
msgstr ""
|
||||
@@ -2476,13 +2520,16 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgid "Disable own stock"
|
||||
msgstr ""
|
||||
msgstr "Deshabilitar inventari propi"
|
||||
|
||||
msgid ""
|
||||
"When enabled, this product can't have own stock, means it will not be "
|
||||
"selectable on purchase (useful for parent products which are just used as a "
|
||||
"summary/total view of the child products)"
|
||||
msgstr ""
|
||||
"Quan s'habilita, aquest producte no pot tenir quantitat d'existències "
|
||||
"pròpies, això vol dir que no es podrà seleccionar per comprar (útil per "
|
||||
"productes para que són una vista resum/total dels subproductes)"
|
||||
|
||||
msgid "Out of stock items will be shown at the products default location"
|
||||
msgstr ""
|
||||
@@ -2502,45 +2549,47 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgid "Night mode"
|
||||
msgstr ""
|
||||
msgstr "Mode nocturn"
|
||||
|
||||
msgid "On"
|
||||
msgstr ""
|
||||
msgstr "ON"
|
||||
|
||||
msgid "Use system setting"
|
||||
msgstr ""
|
||||
msgstr "Utilitza la configuració del sistema"
|
||||
|
||||
msgid "Off"
|
||||
msgstr ""
|
||||
msgstr "OFF"
|
||||
|
||||
msgid ""
|
||||
"Automatically add products that are below their defined min. stock amount to"
|
||||
" the shopping list"
|
||||
msgstr ""
|
||||
"Afegeix automàticament els productes que estiguin per sota el seu valor "
|
||||
"d'existències mínim definit a la llista de compra"
|
||||
|
||||
msgid "Reassigned"
|
||||
msgstr ""
|
||||
msgstr "Re-assignada"
|
||||
|
||||
msgid "Default value"
|
||||
msgstr ""
|
||||
msgstr "Valor predeterminat"
|
||||
|
||||
msgid "Now / today"
|
||||
msgstr ""
|
||||
msgstr "Ara / avui"
|
||||
|
||||
msgid "Add meal plan entry"
|
||||
msgstr ""
|
||||
msgstr "Afegeix entrada al menú"
|
||||
|
||||
msgid "Edit meal plan entry"
|
||||
msgstr ""
|
||||
msgstr "Edita entrada del menú"
|
||||
|
||||
msgid "Default consume location"
|
||||
msgstr ""
|
||||
msgstr "Ubicació de consum predeterminada"
|
||||
|
||||
msgid "Stock entries at this location will be consumed first"
|
||||
msgstr ""
|
||||
msgstr "Les existències en aquesta ubicació es consumiran primer"
|
||||
|
||||
msgid "Move on open"
|
||||
msgstr ""
|
||||
msgstr "Mou quan s'obri"
|
||||
|
||||
msgid ""
|
||||
"When enabled, on marking this product as opened, the corresponding amount "
|
||||
@@ -2548,13 +2597,13 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgid "Moved to %1$s"
|
||||
msgstr ""
|
||||
msgstr "S'ha mogut a %1$s"
|
||||
|
||||
msgid "Decimal places allowed for prices (input)"
|
||||
msgstr ""
|
||||
msgstr "Posicions decimals permeses pels preus (entrada)"
|
||||
|
||||
msgid "Decimal places allowed for prices (display)"
|
||||
msgstr ""
|
||||
msgstr "Posicions decimals permeses pels preus (visualització)"
|
||||
|
||||
msgid "Clear done items"
|
||||
msgstr ""
|
||||
@@ -2565,25 +2614,27 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgid "Show resolved conversions"
|
||||
msgstr ""
|
||||
msgstr "Mostra les conversions resoltes"
|
||||
|
||||
msgid "QU conversions resolved"
|
||||
msgstr ""
|
||||
msgstr "Conversions QU resoltes"
|
||||
|
||||
msgid "Product specifc QU conversions"
|
||||
msgstr ""
|
||||
msgid "Product specific QU conversions"
|
||||
msgstr "Conversions QU específiques de producte"
|
||||
|
||||
msgid "Default quantity unit consume"
|
||||
msgstr ""
|
||||
msgstr "Unitat de consum predeterminada"
|
||||
|
||||
msgid "This is the default quantity unit used when consuming this product"
|
||||
msgstr ""
|
||||
"Aquesta és la unitat per defecte que es farà servir en consumir aquest "
|
||||
"producte"
|
||||
|
||||
msgid "Add to meal plan"
|
||||
msgstr ""
|
||||
msgstr "Afegeix al menú"
|
||||
|
||||
msgid "Successfully added the recipe to the meal plan"
|
||||
msgstr ""
|
||||
msgstr "Recepta afegida al menú correctament"
|
||||
|
||||
msgid "Reprint stock entry label"
|
||||
msgstr ""
|
||||
@@ -2604,44 +2655,44 @@ msgid "Track chore execution now"
|
||||
msgstr ""
|
||||
|
||||
msgid "Total"
|
||||
msgstr ""
|
||||
msgstr "Total"
|
||||
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
msgstr "Aplica"
|
||||
|
||||
msgid "Custom range"
|
||||
msgstr ""
|
||||
msgstr "Interval personalitzat"
|
||||
|
||||
msgid "Yesterday"
|
||||
msgstr ""
|
||||
msgstr "Ahir"
|
||||
|
||||
msgid "Last %1$s day"
|
||||
msgid_plural "Last %1$s days"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "L'últim %1$s dia"
|
||||
msgstr[1] "Els últims %1$s dies"
|
||||
|
||||
msgid "This month"
|
||||
msgstr ""
|
||||
msgstr "Aquest mes"
|
||||
|
||||
msgid "Last month"
|
||||
msgstr ""
|
||||
msgstr "El mes passat"
|
||||
|
||||
msgid "This year"
|
||||
msgstr ""
|
||||
msgstr "Aquest any"
|
||||
|
||||
msgid "Last year"
|
||||
msgstr ""
|
||||
msgstr "L'any passat"
|
||||
|
||||
msgid "Reports"
|
||||
msgstr ""
|
||||
msgstr "Informes"
|
||||
|
||||
msgid "Spendings"
|
||||
msgstr ""
|
||||
msgstr "Despeses"
|
||||
|
||||
msgid "Stock report"
|
||||
msgstr ""
|
||||
msgstr "Informe d'existències"
|
||||
|
||||
msgid "Out-of-stock products"
|
||||
msgid "Out of stock products"
|
||||
msgstr ""
|
||||
|
||||
msgid "Quantity unit for prices"
|
||||
@@ -2651,8 +2702,69 @@ msgid ""
|
||||
"When displaying prices for this product, they will be related to this "
|
||||
"quantity unit"
|
||||
msgstr ""
|
||||
"Quan es mostrin els preus per aquest producte, seran referits a aquesta "
|
||||
"unitat"
|
||||
|
||||
msgid "This means 1 label will be printed"
|
||||
msgid_plural "This means %1$s labels will be printed"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
msgid "External barcode lookup"
|
||||
msgstr ""
|
||||
|
||||
msgid "Error while executing the barcode lookup plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nothing was found for the given barcode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configure colors"
|
||||
msgstr "Configura els colors"
|
||||
|
||||
msgid "Swap track next schedule / track now buttons"
|
||||
msgstr ""
|
||||
|
||||
msgid "Scheduled tracking time"
|
||||
msgstr ""
|
||||
|
||||
msgid "Time of tracking"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show all out of stock products"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"By default the stock overview page lists all products which are currently in"
|
||||
" stock or below their min. stock amount - when this is enabled, all (active)"
|
||||
" products are always shown"
|
||||
msgstr ""
|
||||
|
||||
msgid "No price information is available for at least one ingredient"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"For ingredients that are only partially in stock, the in stock amount will "
|
||||
"be consumed."
|
||||
msgstr ""
|
||||
|
||||
msgid "Can't be opened"
|
||||
msgstr ""
|
||||
|
||||
msgid "Default purchase price type"
|
||||
msgstr ""
|
||||
|
||||
msgid "This will be used as the default price type selection on purchase"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unspecified"
|
||||
msgstr ""
|
||||
|
||||
msgid "Round up quantity amounts to the nearest whole number"
|
||||
msgstr ""
|
||||
|
||||
msgid "Stock actions"
|
||||
msgstr ""
|
||||
|
||||
msgid "List actions"
|
||||
msgstr ""
|
||||
|
@@ -1,6 +1,7 @@
|
||||
#
|
||||
# Translators:
|
||||
# gimy16 <gimy16@hotmail.com>, 2021
|
||||
# Roger Solé Vilajuliu, 2024
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -8,7 +9,7 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01 17:43+0000\n"
|
||||
"Last-Translator: gimy16 <gimy16@hotmail.com>, 2021\n"
|
||||
"Last-Translator: Roger Solé Vilajuliu, 2024\n"
|
||||
"Language-Team: Catalan (https://app.transifex.com/grocy/teams/93189/ca/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -33,6 +34,10 @@ msgstr "nombre-integral"
|
||||
msgid "number-decimal"
|
||||
msgstr "nombre-decimal"
|
||||
|
||||
# Number (currency)
|
||||
msgid "number-currency"
|
||||
msgstr "nombre-moneda"
|
||||
|
||||
# Date (without time)
|
||||
msgid "date"
|
||||
msgstr "data"
|
||||
|
@@ -432,3 +432,6 @@ msgstr "Pivo"
|
||||
|
||||
msgid "Estonian"
|
||||
msgstr ""
|
||||
|
||||
msgid "Bulgarian"
|
||||
msgstr ""
|
||||
|
@@ -146,3 +146,7 @@ msgstr "Rumunština"
|
||||
# Estonian
|
||||
msgid "et_EE"
|
||||
msgstr ""
|
||||
|
||||
# Bulgarian
|
||||
msgid "bg_BG"
|
||||
msgstr ""
|
||||
|
@@ -8,7 +8,7 @@
|
||||
# Radim Kabeláč <radim.ekk@gmail.com>, 2020
|
||||
# Jaroslav Lichtblau <l10n@lichtblau.cz>, 2020
|
||||
# Jarda Tesar <intossh@gmail.com>, 2021
|
||||
# Pavel Paseka, 2023
|
||||
# Pavel Paseka, 2025
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -16,7 +16,7 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01 17:42+0000\n"
|
||||
"Last-Translator: Pavel Paseka, 2023\n"
|
||||
"Last-Translator: Pavel Paseka, 2025\n"
|
||||
"Language-Team: Czech (https://app.transifex.com/grocy/teams/93189/cs/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -277,9 +277,7 @@ msgid "Manage master data"
|
||||
msgstr "Spravovat základní data"
|
||||
|
||||
msgid "This will apply to added products"
|
||||
msgstr ""
|
||||
"Určuje, jak se změna množství balení produktu zapíše do Seznamu zásob a zda "
|
||||
"se k této změně vytisknou nálepky na produkt"
|
||||
msgstr "Tento údaj se zapíše jen pro přidané produkty do zásoby."
|
||||
|
||||
msgid "never"
|
||||
msgstr "nikdy"
|
||||
@@ -299,8 +297,8 @@ msgstr "Heslo"
|
||||
msgid "Invalid credentials, please try again"
|
||||
msgstr "Nesprávné jméno nebo heslo, zkuste to ještě jednou"
|
||||
|
||||
msgid "Are you sure to delete battery \"%s\"?"
|
||||
msgstr "Opravdu chcete smazat baterii „%s“"
|
||||
msgid "Are you sure you want to delete battery \"%s\"?"
|
||||
msgstr "Odstranit baterii „%s“?"
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Ano"
|
||||
@@ -308,8 +306,8 @@ msgstr "Ano"
|
||||
msgid "No"
|
||||
msgstr "Ne"
|
||||
|
||||
msgid "Are you sure to delete chore \"%s\"?"
|
||||
msgstr "Opravdu chcete smazat povinnost „%s“?"
|
||||
msgid "Are you sure you want to delete chore \"%s\"?"
|
||||
msgstr "Odstranit povinnost „%s“?"
|
||||
|
||||
msgid "\"%s\" could not be resolved to a product, how do you want to proceed?"
|
||||
msgstr "Žádný uložený produkt se nejmenuje „%s“. Jak chcete pokračovat?"
|
||||
@@ -329,17 +327,17 @@ msgstr "Přidat jako čárový kód k existujícímu produktu"
|
||||
msgid "Add as new product and prefill barcode"
|
||||
msgstr "Přidat jako nový produkt a předvyplnit čárový kód"
|
||||
|
||||
msgid "Are you sure to delete quantity unit \"%s\"?"
|
||||
msgstr "Opravdu chcete smazat měrnou jednotku „%s“?"
|
||||
msgid "Are you sure you want to delete quantity unit \"%s\"?"
|
||||
msgstr "Odstranit jednotku množství „%s“?"
|
||||
|
||||
msgid "Are you sure to delete product \"%s\"?"
|
||||
msgstr "Opravdu chcete smazat produkt „%s“?"
|
||||
msgid "Are you sure you want to delete product \"%s\"?"
|
||||
msgstr "Odstranit produkt „%s“?"
|
||||
|
||||
msgid "Are you sure to delete location \"%s\"?"
|
||||
msgstr "Opravdu chcete smazat umístění „%s“?"
|
||||
msgid "Are you sure you want to delete location \"%s\"?"
|
||||
msgstr "Odstranit umístění „%s“?"
|
||||
|
||||
msgid "Are you sure to delete store \"%s\"?"
|
||||
msgstr "Opravdu chcete smazat obchod „%s“?"
|
||||
msgid "Are you sure you want to delete store \"%s\"?"
|
||||
msgstr "Odstranit obchod „%s“?"
|
||||
|
||||
msgid "Manage API keys"
|
||||
msgstr "Spravovat API klíče"
|
||||
@@ -380,9 +378,6 @@ msgstr "Co je Grocy"
|
||||
msgid "Close"
|
||||
msgstr "Zavřít"
|
||||
|
||||
msgid "Released on"
|
||||
msgstr "Vydaná"
|
||||
|
||||
msgid "Added %1$s of %2$s to stock"
|
||||
msgstr "Zásoba se zvýšila o %1$s produktu %2$s"
|
||||
|
||||
@@ -455,14 +450,14 @@ msgstr "Přidat ingredienci"
|
||||
msgid "Edit recipe ingredient"
|
||||
msgstr "Upravit ingredienci"
|
||||
|
||||
msgid "Are you sure to delete recipe \"%s\"?"
|
||||
msgstr "Opravdu chcete smazat recept „%s“?"
|
||||
msgid "Are you sure you want to delete recipe \"%s\"?"
|
||||
msgstr "Odstranit recept „%s“?"
|
||||
|
||||
msgid "Are you sure to delete recipe ingredient \"%s\"?"
|
||||
msgstr "Opravdu chcete smazat ingredienci „%s“?"
|
||||
msgid "Are you sure you want to delete recipe ingredient \"%s\"?"
|
||||
msgstr "Odstranit ingredienci „%s“?"
|
||||
|
||||
msgid "Are you sure to empty shopping list \"%s\"?"
|
||||
msgstr "Opravdu chcete vyprázdnit nákupní seznam „%s“?"
|
||||
msgid "Are you sure you want to empty shopping list \"%s\"?"
|
||||
msgstr "Vyprázdnit nákupní seznam „%s“?"
|
||||
|
||||
msgid "Clear list"
|
||||
msgstr "Vyprázdnit seznam"
|
||||
@@ -507,15 +502,12 @@ msgid "Put missing amount on shopping list"
|
||||
msgstr "Přidat chybějící množství do nákupního seznamu"
|
||||
|
||||
msgid ""
|
||||
"Are you sure to put all missing ingredients for recipe \"%s\" on the "
|
||||
"shopping list?"
|
||||
"Are you sure you want to put all missing ingredients for recipe \"%s\" on "
|
||||
"the shopping list?"
|
||||
msgstr ""
|
||||
"Chcete přidat všechny chybějící ingredience z receptu „%s“ do nákupního "
|
||||
"seznamu?"
|
||||
|
||||
msgid "Added for recipe %s"
|
||||
msgstr "Ingredience pro recept „%s“"
|
||||
|
||||
msgid "Manage users"
|
||||
msgstr "Spravovat uživatele"
|
||||
|
||||
@@ -525,8 +517,8 @@ msgstr "Uživatel"
|
||||
msgid "Users"
|
||||
msgstr "Uživatelé"
|
||||
|
||||
msgid "Are you sure to delete user \"%s\"?"
|
||||
msgstr "Opravdu chcete smazat uživatele „%s“?"
|
||||
msgid "Are you sure you want to delete user \"%s\"?"
|
||||
msgstr "Odstranit uživatele „%s“?"
|
||||
|
||||
msgid "Create user"
|
||||
msgstr "Vytvořit uživatele"
|
||||
@@ -630,14 +622,15 @@ msgid "Only check if any amount is in stock"
|
||||
msgstr "Pouze zkontrolovat, zda je v zásobě jakékoliv množství"
|
||||
|
||||
msgid ""
|
||||
"Are you sure to consume all ingredients needed by recipe \"%s\" (ingredients"
|
||||
" marked with \"only check if any amount is in stock\" will be ignored)?"
|
||||
"Are you sure you want to consume all ingredients needed by recipe \"%s\" "
|
||||
"(ingredients marked with \"only check if any amount is in stock\" will be "
|
||||
"ignored)?"
|
||||
msgstr ""
|
||||
"Opravdu si přejete spotřebovat všechny ingredience receptu „%s“? Ingredience"
|
||||
" označené „Zkontrolovat pouze zda je v zásobě jakékoliv množství“ budou "
|
||||
"Přejete se spotřebovat všechny ingredience receptu „%s“? Ingredience "
|
||||
"označené „Zkontrolovat pouze zda je v zásobě jakékoliv množství“ budou "
|
||||
"ignorovány."
|
||||
|
||||
msgid "Removed all ingredients of recipe \"%s\" from stock"
|
||||
msgid "Removed all in stock ingredients needed by recipe \"%s\" from stock"
|
||||
msgstr "Všechny ingredience z receptu „%s“ byly odebrány ze zásob"
|
||||
|
||||
msgid "Consume all ingredients needed by this recipe"
|
||||
@@ -688,8 +681,8 @@ msgstr "Kategorie"
|
||||
msgid "Edit task"
|
||||
msgstr "Upravit úkol"
|
||||
|
||||
msgid "Are you sure to delete task \"%s\"?"
|
||||
msgstr "Opravdu chcete smazat úkol „%s?"
|
||||
msgid "Are you sure you want to delete task \"%s\"?"
|
||||
msgstr "Odstranit úkol „%s“?"
|
||||
|
||||
msgid "%s task is due to be done"
|
||||
msgid_plural "%s tasks are due to be done"
|
||||
@@ -726,8 +719,8 @@ msgstr "Upravit skupinu produktů"
|
||||
msgid "Product group"
|
||||
msgstr "Skupina produktů"
|
||||
|
||||
msgid "Are you sure to delete product group \"%s\"?"
|
||||
msgstr "Opravdu chcete smazat skupinu produktů „%s“?"
|
||||
msgid "Are you sure you want to delete product group \"%s\"?"
|
||||
msgstr "Odstranit skupinu produktů „%s“?"
|
||||
|
||||
msgid "Stay logged in permanently"
|
||||
msgstr "Zůstat přihlášen"
|
||||
@@ -805,7 +798,7 @@ msgid "Create equipment"
|
||||
msgstr "Vytvořit vybavení"
|
||||
|
||||
msgid "The current file will be deleted on save"
|
||||
msgstr "Aktuální soubor bude smazán při uložení této položky vybavení"
|
||||
msgstr "Soubor se smaže až po kliknutí na tlačítku Uložit"
|
||||
|
||||
msgid "No picture available"
|
||||
msgstr "Obrázek není k dispozici"
|
||||
@@ -898,7 +891,11 @@ msgid "Not opened"
|
||||
msgstr "Neotevřené"
|
||||
|
||||
msgid "Opened"
|
||||
msgstr "Otevřené"
|
||||
msgid_plural "Opened"
|
||||
msgstr[0] "Otevřeno"
|
||||
msgstr[1] "Otevřené"
|
||||
msgstr[2] "Otevřených"
|
||||
msgstr[3] "Otevřených"
|
||||
|
||||
msgid "%s opened"
|
||||
msgstr "%s otevřen"
|
||||
@@ -1007,7 +1004,7 @@ msgid "Gallery"
|
||||
msgstr "Galerie"
|
||||
|
||||
msgid "The current picture will be deleted on save"
|
||||
msgstr "Aktuální obrázek bude smazán při uložení nového"
|
||||
msgstr "Obrázek se smaže až po kliknutí na jedno z tlačítek Uložit"
|
||||
|
||||
msgid "Journal for this battery"
|
||||
msgstr "Deník k této baterii"
|
||||
@@ -1064,8 +1061,8 @@ msgstr "Nastavení úkolů"
|
||||
msgid "Create shopping list"
|
||||
msgstr "Vytvořit nákupní seznam"
|
||||
|
||||
msgid "Are you sure to delete shopping list \"%s\"?"
|
||||
msgstr "Opravdu chcete smazat nákupní seznam „%s?"
|
||||
msgid "Are you sure you want to delete shopping list \"%s\"?"
|
||||
msgstr "Smazat nákupní seznam „%s?"
|
||||
|
||||
msgid "Average shelf life"
|
||||
msgstr "Průměrná doba uskladnění"
|
||||
@@ -1107,10 +1104,10 @@ msgid "Sunday"
|
||||
msgstr "Neděle"
|
||||
|
||||
msgid "Configure userfields"
|
||||
msgstr "Upravit uživatelská pole"
|
||||
msgstr "Upravit sloupce tabulky"
|
||||
|
||||
msgid "Userfields"
|
||||
msgstr "Uživatelská pole"
|
||||
msgstr "Vlastní sloupce tabulky"
|
||||
|
||||
msgid "Entity"
|
||||
msgstr "Entita"
|
||||
@@ -1122,7 +1119,7 @@ msgid "Type"
|
||||
msgstr "Typ"
|
||||
|
||||
msgid "Create userfield"
|
||||
msgstr "Vytvoř uživatelské pole"
|
||||
msgstr "Vytvořit sloupec uživatelské tabulky"
|
||||
|
||||
msgid "A entity is required"
|
||||
msgstr "Proměnná je povinný údaj"
|
||||
@@ -1137,10 +1134,10 @@ msgid "Show as column in tables"
|
||||
msgstr "Zobrazit jako řádek v tabulkách"
|
||||
|
||||
msgid "This is required and can only contain letters and numbers"
|
||||
msgstr "Toto je povinné pole a může obsahovat pouze písmena a číslice"
|
||||
msgstr "Toto je povinný údaj a může obsahovat pouze písmena a číslice"
|
||||
|
||||
msgid "Edit userfield"
|
||||
msgstr "Upravit uživatelská pole"
|
||||
msgstr "Upravit sloupec uživatelské tabulky"
|
||||
|
||||
msgid "Plural forms"
|
||||
msgstr "Množné čislo"
|
||||
@@ -1236,10 +1233,6 @@ msgstr "Nikdy"
|
||||
msgid "Today"
|
||||
msgstr "Dnes"
|
||||
|
||||
msgid "Not all ingredients of recipe \"%s\" are in stock, nothing removed"
|
||||
msgstr ""
|
||||
"V zásobě nejsou všechny ingredience receptu „%s“ – nic nebude odebráno"
|
||||
|
||||
msgid "Undo task"
|
||||
msgstr "Vrátit úkol"
|
||||
|
||||
@@ -1278,8 +1271,8 @@ msgstr "Spotřebované množství"
|
||||
msgid "Time of printing"
|
||||
msgstr "Čas tisku"
|
||||
|
||||
msgid "Are you sure to delete equipment \"%s\"?"
|
||||
msgstr "Opravdu chcete smazat vybavení „%s“?"
|
||||
msgid "Are you sure you want to delete equipment \"%s\"?"
|
||||
msgstr "Odstranit zařízení „%s“?"
|
||||
|
||||
msgid "Parent product"
|
||||
msgstr "Nadřazený produkt"
|
||||
@@ -1458,8 +1451,8 @@ msgstr "Přiřazení"
|
||||
msgid "Consume product on chore execution"
|
||||
msgstr "Spotřebovat produkt při splnění povinnosti"
|
||||
|
||||
msgid "Are you sure to delete user field \"%s\"?"
|
||||
msgstr "Opravdu si přejete smazat uživatelské pole „%s“?"
|
||||
msgid "Are you sure you want to delete user field \"%s\"?"
|
||||
msgstr "Odstranit sloupec „%s“?"
|
||||
|
||||
msgid "Userentities"
|
||||
msgstr "Uživatelské tabulky"
|
||||
@@ -1479,8 +1472,8 @@ msgstr "Upravit %s"
|
||||
msgid "Create %s"
|
||||
msgstr "Vytvořit %s"
|
||||
|
||||
msgid "Are you sure to delete this userobject?"
|
||||
msgstr "Opravdu si přejete smazat položku definovanou uživatelem?"
|
||||
msgid "Are you sure you want to delete this userobject?"
|
||||
msgstr "Odstranit položku definovanou uživatelem?"
|
||||
|
||||
msgid "Icon CSS class"
|
||||
msgstr "CSS třída ikony"
|
||||
@@ -1546,7 +1539,7 @@ msgid "Expected barcode"
|
||||
msgstr "Očekávaný čárový kód"
|
||||
|
||||
msgid "Scan field"
|
||||
msgstr "Skenovací pole"
|
||||
msgstr "Naskenováno"
|
||||
|
||||
msgid "Scanned barcodes"
|
||||
msgstr "Naskenované čárové kódy"
|
||||
@@ -1571,8 +1564,8 @@ msgstr ""
|
||||
"přičteno do tohoto produktu. To znamená že podřízené produkty nikdy nebudou "
|
||||
"chybět, ale pouze tento produkt."
|
||||
|
||||
msgid "Are you sure to remove this conversion?"
|
||||
msgstr "Opravdu chcete odstranit tento převod?"
|
||||
msgid "Are you sure you want to remove this conversion?"
|
||||
msgstr "Odstranit tento převod?"
|
||||
|
||||
msgid "Unit price"
|
||||
msgstr "Cena za jednotku"
|
||||
@@ -1589,8 +1582,8 @@ msgstr "Neomezeně"
|
||||
msgid "Clear"
|
||||
msgstr "Vymazat"
|
||||
|
||||
msgid "Are you sure to remove the included recipe \"%s\"?"
|
||||
msgstr "Opravdu chcete odstranit dílčí recept „%s“?"
|
||||
msgid "Are you sure you want to remove the included recipe \"%s\"?"
|
||||
msgstr "Odstranit dílčí recept „%s“?"
|
||||
|
||||
msgid "Period interval"
|
||||
msgstr "Interval opakování"
|
||||
@@ -1686,8 +1679,8 @@ msgstr "Tato akce nemůže být vrácena zpět"
|
||||
msgid "Booking does not exist or was already undone"
|
||||
msgstr "Tato akce neexistuje nebo již byla vrácena zpět"
|
||||
|
||||
msgid "Are you sure to delete API key \"%s\"?"
|
||||
msgstr "Opravdu chcete smazat API klíč „%s“?"
|
||||
msgid "Are you sure you want to delete API key \"%s\"?"
|
||||
msgstr "Odstranit API klíč „%s“?"
|
||||
|
||||
msgid "Add note"
|
||||
msgstr "Přidat poznámku"
|
||||
@@ -1727,7 +1720,7 @@ msgstr "vypnut"
|
||||
msgid ""
|
||||
"Scan mode is on but not all required fields could be populated automatically"
|
||||
msgstr ""
|
||||
"Skenovací režim je zapnutý, ale ne všechna vyžadovaná pole mohou být "
|
||||
"Skenovací režim je zapnutý, ale ne všechna vyžadovaná data mohou být "
|
||||
"vyplněna automaticky"
|
||||
|
||||
msgid "Is freezer"
|
||||
@@ -1742,8 +1735,8 @@ msgstr "Rozmraženo"
|
||||
msgid "Frozen"
|
||||
msgstr "Zmraženo"
|
||||
|
||||
msgid "Are you sure to delete userentity \"%s\"?"
|
||||
msgstr "Opravdu chcete smazat uživatelskou tabulku „%s“?"
|
||||
msgid "Are you sure you want to delete userentity \"%s\"?"
|
||||
msgstr "Odstranit uživatelský sloupec tabulky „%s“?"
|
||||
|
||||
msgid "Shopping list settings"
|
||||
msgstr "Nastavení nákupního seznamu"
|
||||
@@ -1754,9 +1747,6 @@ msgstr "Zobrazit měsíční kalendář"
|
||||
msgid "Desired servings"
|
||||
msgstr "Počet porcí"
|
||||
|
||||
msgid "Base: %s"
|
||||
msgstr "Základ: %s"
|
||||
|
||||
msgid "Recipes settings"
|
||||
msgstr "Nastavení receptu"
|
||||
|
||||
@@ -1840,13 +1830,13 @@ msgstr "Upravit čárový kód"
|
||||
|
||||
msgid ""
|
||||
"Based on the prices of the default consume rule (Opened first, then first "
|
||||
"due first, then first in first out) for in-stock ingredients and on the last"
|
||||
"due first, then first in first out) for in stock ingredients and on the last"
|
||||
" price for missing ones"
|
||||
msgstr ""
|
||||
"Základem ceny je cena produktu v zásobě podle výchozího pořadí spotřeby "
|
||||
"produktů. Tedy nejprve se spotřebují otevřené, pak ty s nejbližším datem "
|
||||
"spotřeby a nakonec podle pravidla „dříve nakoupený, dříve spotřebovaný“. Pro"
|
||||
" chybějící produkty je použita cena z posledního nákupu."
|
||||
"spotřeby a nakonec podle pravidla „dříve nakoupený – dříve spotřebovaný“. "
|
||||
"Pro chybějící produkty je použita cena z posledního nákupu."
|
||||
|
||||
msgid "Clear filter"
|
||||
msgstr "Smazat filtr"
|
||||
@@ -1880,8 +1870,8 @@ msgstr "Výpis běžících funkcí – stack trace"
|
||||
|
||||
msgid "Easy error info copy & paste (for reporting)"
|
||||
msgstr ""
|
||||
"Budete-li psát vývojářům, pošlete jim celý tento text. Stačí do něj kliknout"
|
||||
" a celý se vybere (pro Ctrl-C)."
|
||||
"Budete-li psát vývojářům, pošlete jim text níže. Stačí do něj kliknout a "
|
||||
"celý se vybere (pro Ctrl-C)."
|
||||
|
||||
msgid "This page does not exist"
|
||||
msgstr "Tato stránka neexistuje"
|
||||
@@ -2016,7 +2006,7 @@ msgstr ""
|
||||
"Upozorni, pokud je datum min. trvanlivosti (použitelnosti) nakoupeného "
|
||||
"produktu dříve, než nejbližší datum spotřeby produktu v zásobě."
|
||||
|
||||
msgid "This is due earlier than already in-stock items"
|
||||
msgid "This is due earlier than already in stock items"
|
||||
msgstr "Datum min. trvanlivosti je dříve, než u produktů v zásobě"
|
||||
|
||||
msgid ""
|
||||
@@ -2047,8 +2037,8 @@ msgstr ""
|
||||
msgid "Copy"
|
||||
msgstr "Kopírovat"
|
||||
|
||||
msgid "Are you sure to remove this barcode?"
|
||||
msgstr "Opravdu chcete smazat tento čárový kód?"
|
||||
msgid "Are you sure you want to remove this barcode?"
|
||||
msgstr "Odstranit tento čárový kód?"
|
||||
|
||||
msgid "Due date type"
|
||||
msgstr "Typ trvanlivosti produktu"
|
||||
@@ -2203,7 +2193,7 @@ msgstr "Takto se položka databáze zobrazuje ve webové stránce"
|
||||
|
||||
msgid "Multiple Userfields will be ordered by that number on the input form"
|
||||
msgstr ""
|
||||
"Řada uživatelských položek bude uspořádána podle tohoto čísla při jejich "
|
||||
"Řada uživatelských sloupců bude uspořádána podle tohoto čísla při jejich "
|
||||
"zadávání"
|
||||
|
||||
msgid "Sort number"
|
||||
@@ -2245,8 +2235,8 @@ msgstr "Skupina ingrediencí"
|
||||
msgid "Reset"
|
||||
msgstr "Resetovat"
|
||||
|
||||
msgid "Are you sure to reset the table options?"
|
||||
msgstr "Opravdu chcete uvést sloupce tabulky do výchozího stavu?"
|
||||
msgid "Are you sure you want to reset the table options?"
|
||||
msgstr "Uvést sloupce tabulky do výchozího stavu?"
|
||||
|
||||
msgid "Hide/view columns"
|
||||
msgstr "Zobrazit/skrýt sloupce"
|
||||
@@ -2312,7 +2302,7 @@ msgid "Link"
|
||||
msgstr "Odkaz"
|
||||
|
||||
msgid ""
|
||||
"The stock overview page lists all products which are currently in-stock or "
|
||||
"The stock overview page lists all products which are currently in stock or "
|
||||
"below their min. stock amount - enable this to hide this product there "
|
||||
"always"
|
||||
msgstr ""
|
||||
@@ -2390,7 +2380,7 @@ msgstr "Nedaří se tisknout"
|
||||
msgid "Only done items"
|
||||
msgstr "vybrané produkty"
|
||||
|
||||
msgid "Show only in-stock products"
|
||||
msgid "Show only in stock products"
|
||||
msgstr "Zobrazit produkty se zásobou"
|
||||
|
||||
msgid "Product description"
|
||||
@@ -2407,12 +2397,12 @@ msgid "Mandatory"
|
||||
msgstr "Povinné"
|
||||
|
||||
msgid "Mandatory Userfield"
|
||||
msgstr "Povinné uživatelské pole"
|
||||
msgstr "Povinný uživatelský údaj"
|
||||
|
||||
msgid "When enabled, then this field must be filled on the destination form"
|
||||
msgstr "Použijete-li tento údaj ve formuláři, bude povinný"
|
||||
|
||||
msgid "In-stock products"
|
||||
msgid "In stock products"
|
||||
msgstr "produkty se zásobou"
|
||||
|
||||
msgid "Timestamp"
|
||||
@@ -2503,14 +2493,14 @@ msgstr ""
|
||||
msgid "Edit meal plan section"
|
||||
msgstr "Upravit část dne v jídelníčku"
|
||||
|
||||
msgid "Are you sure to delete meal plan section \"%s\"?"
|
||||
msgstr "Chcete odstranit rozdělení dne s názvem: %s?"
|
||||
msgid "Are you sure you want to delete meal plan section \"%s\"?"
|
||||
msgstr "Odstranit rozdělení dne s názvem: %s?"
|
||||
|
||||
msgid "Section"
|
||||
msgstr "Část dne v jídelníčku"
|
||||
|
||||
msgid "Are you sure to empty the shopping list?"
|
||||
msgstr "Opravdu chcete smazat nákupní seznam?"
|
||||
msgid "Are you sure you want to empty the shopping list?"
|
||||
msgstr "Vyprázdnit nákupní seznam?"
|
||||
|
||||
msgid "This is the default which will be prefilled on purchase"
|
||||
msgstr ""
|
||||
@@ -2728,7 +2718,7 @@ msgid "Decimal places allowed for prices (display)"
|
||||
msgstr "Počet desetinných míst pro zobrazení ceny"
|
||||
|
||||
msgid "Clear done items"
|
||||
msgstr "Smazat všechna zaškrtnutá"
|
||||
msgstr "Odstranit všechna vybraná"
|
||||
|
||||
msgid ""
|
||||
"This shows all to this product directly or indirectly related quantity units"
|
||||
@@ -2743,7 +2733,7 @@ msgstr "Zobrazit všechny převody"
|
||||
msgid "QU conversions resolved"
|
||||
msgstr "Všechny převody měrných jednotek pro"
|
||||
|
||||
msgid "Product specifc QU conversions"
|
||||
msgid "Product specific QU conversions"
|
||||
msgstr "Převody měrných jednotek pro tento produkt"
|
||||
|
||||
msgid "Default quantity unit consume"
|
||||
@@ -2780,7 +2770,7 @@ msgid "Track chore execution now"
|
||||
msgstr "Splnění povinnosti s dnešním datem"
|
||||
|
||||
msgid "Total"
|
||||
msgstr "Součet"
|
||||
msgstr "Celkem"
|
||||
|
||||
msgid "Apply"
|
||||
msgstr "Provést"
|
||||
@@ -2819,16 +2809,16 @@ msgstr "Výdaje"
|
||||
msgid "Stock report"
|
||||
msgstr "Přehled zásob"
|
||||
|
||||
msgid "Out-of-stock products"
|
||||
msgid "Out of stock products"
|
||||
msgstr "Produkty bez zásoby"
|
||||
|
||||
msgid "Quantity unit for prices"
|
||||
msgstr "Množstevní jednotka pro ceny"
|
||||
msgstr "Měrná jednotka pro ceny"
|
||||
|
||||
msgid ""
|
||||
"When displaying prices for this product, they will be related to this "
|
||||
"quantity unit"
|
||||
msgstr "Zobrazované ceny produktu budou odpovídat této množstevní jednotce"
|
||||
msgstr "Zobrazované ceny produktu budou odpovídat této měrné jednotce"
|
||||
|
||||
msgid "This means 1 label will be printed"
|
||||
msgid_plural "This means %1$s labels will be printed"
|
||||
@@ -2836,3 +2826,69 @@ msgstr[0] "Vytiskne se 1nálepka"
|
||||
msgstr[1] "Vytisknou se %1$s nálepky"
|
||||
msgstr[2] "Vytiskne se %1$s nálepek"
|
||||
msgstr[3] "Vytiskne se %1$s nálepek"
|
||||
|
||||
msgid "External barcode lookup"
|
||||
msgstr "Čtení čárového kódu modulem aplikace"
|
||||
|
||||
msgid "Error while executing the barcode lookup plugin"
|
||||
msgstr "Vyhodnocení doplňkovým modulem se nezdařilo"
|
||||
|
||||
msgid "Nothing was found for the given barcode"
|
||||
msgstr "Pro tento čárový kód nebylo nic nalezeno"
|
||||
|
||||
msgid "Configure colors"
|
||||
msgstr "Změnit barvy"
|
||||
|
||||
msgid "Swap track next schedule / track now buttons"
|
||||
msgstr ""
|
||||
"Změna funkce zeleného tlačítka: Zaznamenat splnění naplánované povinnosti "
|
||||
"NEBO Zaznamenat splnění povinnosti právě teď."
|
||||
|
||||
msgid "Scheduled tracking time"
|
||||
msgstr "Naplánované splnění povinnosti"
|
||||
|
||||
msgid "Time of tracking"
|
||||
msgstr "Plnění povinností"
|
||||
|
||||
msgid "Show all out of stock products"
|
||||
msgstr "Zobrazit produkty bez zásoby"
|
||||
|
||||
msgid ""
|
||||
"By default the stock overview page lists all products which are currently in"
|
||||
" stock or below their min. stock amount - when this is enabled, all (active)"
|
||||
" products are always shown"
|
||||
msgstr ""
|
||||
"Stránka Přehledu zásob zobrazuje všechny produkty, které jsou v zásobě nebo "
|
||||
"pod jejich minimálním stavem. Zaškrtnutím se zobrazí všechny (aktivní) "
|
||||
"produkty."
|
||||
|
||||
msgid "No price information is available for at least one ingredient"
|
||||
msgstr "U nejméně jedné ingredience chybí informace o ceně"
|
||||
|
||||
msgid ""
|
||||
"For ingredients that are only partially in stock, the in stock amount will "
|
||||
"be consumed."
|
||||
msgstr ""
|
||||
"U ingrediencí, kde není v zásobě celé jejich množství se spotřebuje jejich "
|
||||
"aktuální zásoba."
|
||||
|
||||
msgid "Can't be opened"
|
||||
msgstr "Tento produkt nelze „otevřít“."
|
||||
|
||||
msgid "Default purchase price type"
|
||||
msgstr "Výchozí druh ceny"
|
||||
|
||||
msgid "This will be used as the default price type selection on purchase"
|
||||
msgstr "Toto bude použito jako výchozí druh ceny při nákupu"
|
||||
|
||||
msgid "Unspecified"
|
||||
msgstr "Neurčené"
|
||||
|
||||
msgid "Round up quantity amounts to the nearest whole number"
|
||||
msgstr "Zaokrouhlete množství na (nejbližší) celé číslo"
|
||||
|
||||
msgid "Stock actions"
|
||||
msgstr "Operace se zásobami"
|
||||
|
||||
msgid "List actions"
|
||||
msgstr "Operace se seznamem"
|
||||
|
@@ -35,6 +35,10 @@ msgstr "Celé číslo"
|
||||
msgid "number-decimal"
|
||||
msgstr "Desetinné číslo"
|
||||
|
||||
# Number (currency)
|
||||
msgid "number-currency"
|
||||
msgstr ""
|
||||
|
||||
# Date (without time)
|
||||
msgid "date"
|
||||
msgstr "Datum"
|
||||
|
@@ -8,6 +8,7 @@
|
||||
# Jesper Donnis, 2021
|
||||
# Brian Moos Lindberg <brian@blueeel.dk>, 2022
|
||||
# hskdk <henrik@skjaerbaek.net>, 2023
|
||||
# G Momsen, 2024
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -15,7 +16,7 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01 17:42+0000\n"
|
||||
"Last-Translator: hskdk <henrik@skjaerbaek.net>, 2023\n"
|
||||
"Last-Translator: G Momsen, 2024\n"
|
||||
"Language-Team: Danish (https://app.transifex.com/grocy/teams/93189/da/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -402,19 +403,22 @@ msgid "Romanian"
|
||||
msgstr "Rumænsk"
|
||||
|
||||
msgid "Pint"
|
||||
msgstr ""
|
||||
msgstr "Pint"
|
||||
|
||||
msgid "Beverages"
|
||||
msgstr ""
|
||||
msgstr "Drikkevarer"
|
||||
|
||||
msgid "Ice Cream"
|
||||
msgstr ""
|
||||
msgstr "Is"
|
||||
|
||||
msgid "Soda"
|
||||
msgstr ""
|
||||
msgstr "Sodavand"
|
||||
|
||||
msgid "Beer"
|
||||
msgstr ""
|
||||
msgstr "Øl"
|
||||
|
||||
msgid "Estonian"
|
||||
msgstr "Estisk"
|
||||
|
||||
msgid "Bulgarian"
|
||||
msgstr ""
|
||||
|
@@ -3,6 +3,7 @@
|
||||
# klavslund <klavslund@gmail.com>, 2021
|
||||
# Brian Moos Lindberg <brian@blueeel.dk>, 2022
|
||||
# hskdk <henrik@skjaerbaek.net>, 2023
|
||||
# G Momsen, 2024
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -10,7 +11,7 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2020-08-31 19:11+0000\n"
|
||||
"Last-Translator: hskdk <henrik@skjaerbaek.net>, 2023\n"
|
||||
"Last-Translator: G Momsen, 2024\n"
|
||||
"Language-Team: Danish (https://app.transifex.com/grocy/teams/93189/da/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -145,4 +146,8 @@ msgstr "ro_RO"
|
||||
|
||||
# Estonian
|
||||
msgid "et_EE"
|
||||
msgstr "et_EE"
|
||||
|
||||
# Bulgarian
|
||||
msgid "bg_BG"
|
||||
msgstr ""
|
||||
|
@@ -2,7 +2,7 @@
|
||||
# Translators:
|
||||
# Mihai Marinescu <mihai@marinescu.dk>, 2020
|
||||
# klavslund <klavslund@gmail.com>, 2021
|
||||
# hskdk <henrik@skjaerbaek.net>, 2023
|
||||
# Brian Moos Lindberg <brian@blueeel.dk>, 2024
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -10,7 +10,7 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2020-08-29 16:33+0000\n"
|
||||
"Last-Translator: hskdk <henrik@skjaerbaek.net>, 2023\n"
|
||||
"Last-Translator: Brian Moos Lindberg <brian@blueeel.dk>, 2024\n"
|
||||
"Language-Team: Danish (https://app.transifex.com/grocy/teams/93189/da/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -113,7 +113,7 @@ msgstr "INDKØBSLISTE"
|
||||
|
||||
# Chores
|
||||
msgid "CHORES"
|
||||
msgstr "PLIGTER"
|
||||
msgstr "GØREMÅL"
|
||||
|
||||
# Batteries
|
||||
msgid "BATTERIES"
|
||||
|
@@ -1,16 +1,18 @@
|
||||
#
|
||||
# Translators:
|
||||
# dark159123 <r.j.hansen@protonmail.com>, 2019
|
||||
# Bernd Bestel <bernd@berrnd.de>, 2019
|
||||
# Troels Siggaard <troels@siggaard.com>, 2019
|
||||
# Mihai Marinescu <mihai@marinescu.dk>, 2020
|
||||
# Kim Bardrum <kim.bardrum@gmail.com>, 2021
|
||||
# Michael Winkel <mbw@mbw.dk>, 2021
|
||||
# klavslund <klavslund@gmail.com>, 2021
|
||||
# dark159123 <r.j.hansen@protonmail.com>, 2021
|
||||
# Jesper Donnis, 2021
|
||||
# Brian Moos Lindberg <brian@blueeel.dk>, 2022
|
||||
# Tobias Østergaard-Jørgensen, 2023
|
||||
# hskdk <henrik@skjaerbaek.net>, 2023
|
||||
# G Momsen, 2024
|
||||
# Brian Moos Lindberg <brian@blueeel.dk>, 2024
|
||||
# eurosite, 2025
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -18,7 +20,7 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01 17:42+0000\n"
|
||||
"Last-Translator: hskdk <henrik@skjaerbaek.net>, 2023\n"
|
||||
"Last-Translator: eurosite, 2025\n"
|
||||
"Language-Team: Danish (https://app.transifex.com/grocy/teams/93189/da/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -28,7 +30,7 @@ msgstr ""
|
||||
"X-Domain: grocy/strings\n"
|
||||
|
||||
msgid "Stock overview"
|
||||
msgstr "Lagerbeholdning"
|
||||
msgstr "Lageroversigt"
|
||||
|
||||
msgid "%s product expires"
|
||||
msgid_plural "%s products expiring"
|
||||
@@ -286,7 +288,7 @@ msgstr "Adgangskode"
|
||||
msgid "Invalid credentials, please try again"
|
||||
msgstr "Ugyldig brugernavn og/eller adgangskode, prøv igen"
|
||||
|
||||
msgid "Are you sure to delete battery \"%s\"?"
|
||||
msgid "Are you sure you want to delete battery \"%s\"?"
|
||||
msgstr "Er du sikker på du vil slette batteri \"%s\"?"
|
||||
|
||||
msgid "Yes"
|
||||
@@ -295,8 +297,8 @@ msgstr "Ja"
|
||||
msgid "No"
|
||||
msgstr "Nej"
|
||||
|
||||
msgid "Are you sure to delete chore \"%s\"?"
|
||||
msgstr "Er du sikker på du vil slette pligt \"%s\"?"
|
||||
msgid "Are you sure you want to delete chore \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "\"%s\" could not be resolved to a product, how do you want to proceed?"
|
||||
msgstr "\"%s\" kunne ikke findes som vare. Hvordan vil du fortsætte?"
|
||||
@@ -316,16 +318,16 @@ msgstr "Tilføj som stregkode til en eksisterende vare"
|
||||
msgid "Add as new product and prefill barcode"
|
||||
msgstr "Tilføj som ny vare og udfyld stregkoden på forhånd"
|
||||
|
||||
msgid "Are you sure to delete quantity unit \"%s\"?"
|
||||
msgstr "Er du sikker på du vil slette måleenheden \"%s\"?"
|
||||
msgid "Are you sure you want to delete quantity unit \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure to delete product \"%s\"?"
|
||||
msgid "Are you sure you want to delete product \"%s\"?"
|
||||
msgstr "Er du sikker på du vil slette varen \"%s\"?"
|
||||
|
||||
msgid "Are you sure to delete location \"%s\"?"
|
||||
msgid "Are you sure you want to delete location \"%s\"?"
|
||||
msgstr "Er du sikker på du vil slette placeringen \"%s\"?"
|
||||
|
||||
msgid "Are you sure to delete store \"%s\"?"
|
||||
msgid "Are you sure you want to delete store \"%s\"?"
|
||||
msgstr "Er du sikker på du vil slette butikken \"%s\"?"
|
||||
|
||||
msgid "Manage API keys"
|
||||
@@ -362,14 +364,11 @@ msgid "Removed %1$s of %2$s from stock"
|
||||
msgstr "Fjerede %1$s af %2$s fra beholdningen"
|
||||
|
||||
msgid "About Grocy"
|
||||
msgstr ""
|
||||
msgstr "Om Grocy"
|
||||
|
||||
msgid "Close"
|
||||
msgstr "Luk"
|
||||
|
||||
msgid "Released on"
|
||||
msgstr "Udgivet den"
|
||||
|
||||
msgid "Added %1$s of %2$s to stock"
|
||||
msgstr "Tilføjet %1$s af %2$s til beholdningen"
|
||||
|
||||
@@ -442,13 +441,13 @@ msgstr "Tilføj ingrediens til opskrift"
|
||||
msgid "Edit recipe ingredient"
|
||||
msgstr "Rediger ingrediens til opskrift"
|
||||
|
||||
msgid "Are you sure to delete recipe \"%s\"?"
|
||||
msgid "Are you sure you want to delete recipe \"%s\"?"
|
||||
msgstr "Er du sikker på du vil slette opskriften \"%s\"?"
|
||||
|
||||
msgid "Are you sure to delete recipe ingredient \"%s\"?"
|
||||
msgid "Are you sure you want to delete recipe ingredient \"%s\"?"
|
||||
msgstr "Er du sikker på du vil slette ingrediensen \"%s\" fra opskriften?"
|
||||
|
||||
msgid "Are you sure to empty shopping list \"%s\"?"
|
||||
msgid "Are you sure you want to empty shopping list \"%s\"?"
|
||||
msgstr "Er du sikker på at du vil tømme indkøbslisten \"%s\"?"
|
||||
|
||||
msgid "Clear list"
|
||||
@@ -496,15 +495,12 @@ msgid "Put missing amount on shopping list"
|
||||
msgstr "Put manglende mængde på indkøbsliste"
|
||||
|
||||
msgid ""
|
||||
"Are you sure to put all missing ingredients for recipe \"%s\" on the "
|
||||
"shopping list?"
|
||||
"Are you sure you want to put all missing ingredients for recipe \"%s\" on "
|
||||
"the shopping list?"
|
||||
msgstr ""
|
||||
"Er du sikker på du vil sætte alle manglende ingredienser til \"%s\" på "
|
||||
"indkøbslisten?"
|
||||
|
||||
msgid "Added for recipe %s"
|
||||
msgstr "Tilføjet til opskriften %s"
|
||||
|
||||
msgid "Manage users"
|
||||
msgstr "Administrer brugere"
|
||||
|
||||
@@ -514,7 +510,7 @@ msgstr "Bruger"
|
||||
msgid "Users"
|
||||
msgstr "Brugere"
|
||||
|
||||
msgid "Are you sure to delete user \"%s\"?"
|
||||
msgid "Are you sure you want to delete user \"%s\"?"
|
||||
msgstr "Er du sikker på du vil slette brugeren \"%s\"?"
|
||||
|
||||
msgid "Create user"
|
||||
@@ -609,14 +605,12 @@ msgid "Only check if any amount is in stock"
|
||||
msgstr "Marker kun hvis der er lagerbeholdning"
|
||||
|
||||
msgid ""
|
||||
"Are you sure to consume all ingredients needed by recipe \"%s\" (ingredients"
|
||||
" marked with \"only check if any amount is in stock\" will be ignored)?"
|
||||
"Are you sure you want to consume all ingredients needed by recipe \"%s\" "
|
||||
"(ingredients marked with \"only check if any amount is in stock\" will be "
|
||||
"ignored)?"
|
||||
msgstr ""
|
||||
"“Vil du nedskrive beholdning(er) på alle ingredienser der benyttes i "
|
||||
"opskriften “ %s “(Ingredienser der er markeret som : Skal være i beholdning "
|
||||
"- bliver ignoreret).”"
|
||||
|
||||
msgid "Removed all ingredients of recipe \"%s\" from stock"
|
||||
msgid "Removed all in stock ingredients needed by recipe \"%s\" from stock"
|
||||
msgstr "Fjernede alle ingredienser til opskrift \"%s\" fra beholdningen"
|
||||
|
||||
msgid "Consume all ingredients needed by this recipe"
|
||||
@@ -667,8 +661,8 @@ msgstr "Kategori"
|
||||
msgid "Edit task"
|
||||
msgstr "Rediger opgave"
|
||||
|
||||
msgid "Are you sure to delete task \"%s\"?"
|
||||
msgstr "Er du sikker på at du vil slette opgaven \"%s\"?"
|
||||
msgid "Are you sure you want to delete task \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "%s task is due to be done"
|
||||
msgid_plural "%s tasks are due to be done"
|
||||
@@ -701,8 +695,8 @@ msgstr "Rediger varegruppe"
|
||||
msgid "Product group"
|
||||
msgstr "Varegruppe"
|
||||
|
||||
msgid "Are you sure to delete product group \"%s\"?"
|
||||
msgstr "Er du sikker på at du vil slette varegruppen \"%s\"?"
|
||||
msgid "Are you sure you want to delete product group \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Stay logged in permanently"
|
||||
msgstr "Forbliv logget ind"
|
||||
@@ -855,6 +849,8 @@ msgid ""
|
||||
"The first item in this list would be picked by the default rule consume rule"
|
||||
" (Opened first, then first due first, then first in first out)"
|
||||
msgstr ""
|
||||
"Den første varer på denne liste vil blive valgt efter standardreglen: (1. "
|
||||
"Allerede åbnet, 2. Bedst før dato, 3. Først ind først ud.)"
|
||||
|
||||
msgid "Mark %1$s of %2$s as open"
|
||||
msgstr "Marker %1$s %2$s som åben"
|
||||
@@ -869,7 +865,9 @@ msgid "Not opened"
|
||||
msgstr "Ikke åbnet"
|
||||
|
||||
msgid "Opened"
|
||||
msgstr "Åbnet"
|
||||
msgid_plural "Opened"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
msgid "%s opened"
|
||||
msgstr "%s åbnet"
|
||||
@@ -1040,8 +1038,8 @@ msgstr "Opgave-indstillinger"
|
||||
msgid "Create shopping list"
|
||||
msgstr "Opret indkøbsliste"
|
||||
|
||||
msgid "Are you sure to delete shopping list \"%s\"?"
|
||||
msgstr "Er du sikker på at du vil slette indkøbslisten \"%s\"?"
|
||||
msgid "Are you sure you want to delete shopping list \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Average shelf life"
|
||||
msgstr "Gennemsnitlig holdbarhed"
|
||||
@@ -1209,10 +1207,6 @@ msgstr "Aldrig"
|
||||
msgid "Today"
|
||||
msgstr "Idag"
|
||||
|
||||
msgid "Not all ingredients of recipe \"%s\" are in stock, nothing removed"
|
||||
msgstr ""
|
||||
"Ikke alle ingredienser til opskrift \"%s\" er i beholdningen, intet fjernet"
|
||||
|
||||
msgid "Undo task"
|
||||
msgstr "Fortryd opgave"
|
||||
|
||||
@@ -1251,8 +1245,8 @@ msgstr "Forbrugt mængde"
|
||||
msgid "Time of printing"
|
||||
msgstr "Tidspunkt for udskrift"
|
||||
|
||||
msgid "Are you sure to delete equipment \"%s\"?"
|
||||
msgstr "Er du sikker på du vil slette enheden \"%s\"?"
|
||||
msgid "Are you sure you want to delete equipment \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Parent product"
|
||||
msgstr "Overordnet vare"
|
||||
@@ -1316,7 +1310,11 @@ msgid_plural ""
|
||||
"This means the next execution of this chore is scheduled at the same time "
|
||||
"(based on the start date) every %s days"
|
||||
msgstr[0] ""
|
||||
"Dette betyder at næste udførelse af denne pligt er planlagt til samme "
|
||||
"tidspunkt (baseret på startdatoen) hver dag"
|
||||
msgstr[1] ""
|
||||
"Dette betyder at næste udførelse af denne pligt er planlagt til samme "
|
||||
"tidspunkt (baseret på startdatoen) hver %s dage"
|
||||
|
||||
msgid ""
|
||||
"This means the next execution of this chore is scheduled %s hour after the "
|
||||
@@ -1325,7 +1323,11 @@ msgid_plural ""
|
||||
"This means the next execution of this chore is scheduled %s hours after the "
|
||||
"last execution"
|
||||
msgstr[0] ""
|
||||
"Dette betyder at næste udførelse af denne pligt er planlagt til %s time "
|
||||
"efter den seneste udførelse"
|
||||
msgstr[1] ""
|
||||
"Dette betyder at næste udførelse af denne pligt er planlagt til %stimer "
|
||||
"efter den seneste udførelse"
|
||||
|
||||
msgid ""
|
||||
"This means the next execution of this chore is scheduled every week on the "
|
||||
@@ -1334,7 +1336,11 @@ msgid_plural ""
|
||||
"This means the next execution of this chore is scheduled every %s weeks on "
|
||||
"the selected weekdays"
|
||||
msgstr[0] ""
|
||||
"Dette betyder at næste udførelse af denne pligt er planlagt hver uge på de "
|
||||
"valgte ugedage"
|
||||
msgstr[1] ""
|
||||
"Dette betyder at næste udførelse af denne pligt er planlagt hver %s uger på "
|
||||
"de valgte ugedage"
|
||||
|
||||
msgid ""
|
||||
"This means the next execution of this chore is scheduled on the selected day"
|
||||
@@ -1400,8 +1406,8 @@ msgstr "Tildelt"
|
||||
msgid "Consume product on chore execution"
|
||||
msgstr "Forbrug vare ved udførsel af pligt"
|
||||
|
||||
msgid "Are you sure to delete user field \"%s\"?"
|
||||
msgstr "Er du sikker på at du vil slette brugerfeltet \"%s\"?"
|
||||
msgid "Are you sure you want to delete user field \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Userentities"
|
||||
msgstr "Brugerenheder"
|
||||
@@ -1421,8 +1427,8 @@ msgstr "Rediger %s"
|
||||
msgid "Create %s"
|
||||
msgstr "Opret %s"
|
||||
|
||||
msgid "Are you sure to delete this userobject?"
|
||||
msgstr "Er du sikker på at du vil slette denne brugerenhed?"
|
||||
msgid "Are you sure you want to delete this userobject?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Icon CSS class"
|
||||
msgstr "Ikon CSS-klasse"
|
||||
@@ -1456,7 +1462,7 @@ msgid "Price factor"
|
||||
msgstr "Prisfaktor"
|
||||
|
||||
msgid "Do you find Grocy useful?"
|
||||
msgstr ""
|
||||
msgstr "Finder du grocy brugbart?"
|
||||
|
||||
msgid "Say thanks"
|
||||
msgstr "Sig tak"
|
||||
@@ -1507,9 +1513,12 @@ msgid ""
|
||||
"If enabled, the min. stock amount of sub products will be accumulated into "
|
||||
"this product, means the sub product will never be missing, only this product"
|
||||
msgstr ""
|
||||
"Hvis aktiveret bliver minimumsbeholdning for underordnede varer akkumuleret "
|
||||
"ind i denne vare så det kun er denne vare der mangler og ikke de "
|
||||
"underordnede"
|
||||
|
||||
msgid "Are you sure to remove this conversion?"
|
||||
msgstr "Er du sikker på at du vil fjerne denne konvertering"
|
||||
msgid "Are you sure you want to remove this conversion?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unit price"
|
||||
msgstr "Enhedspris"
|
||||
@@ -1526,8 +1535,8 @@ msgstr "Ubegrænset"
|
||||
msgid "Clear"
|
||||
msgstr "Ryd"
|
||||
|
||||
msgid "Are you sure to remove the included recipe \"%s\"?"
|
||||
msgstr "Er du sikker på du vil fjerne den inkluderede opskrift \"%s\"?"
|
||||
msgid "Are you sure you want to remove the included recipe \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Period interval"
|
||||
msgstr "Periodeinterval"
|
||||
@@ -1539,7 +1548,11 @@ msgid_plural ""
|
||||
"This means the next execution of this chore is scheduled every %s years on "
|
||||
"the same day (based on the start date)"
|
||||
msgstr[0] ""
|
||||
"Dette betyder at næste udførelse af dette gøremål er planlagt hvert år på "
|
||||
"den samme dag (baseret på startdatoen)"
|
||||
msgstr[1] ""
|
||||
"Dette betyder at næste udførelse af dette gøremål er planlagt hver %s år på "
|
||||
"den samme dag (baseret på startdatoen)"
|
||||
|
||||
msgid "Transfer"
|
||||
msgstr "Skift placering"
|
||||
@@ -1584,6 +1597,8 @@ msgid ""
|
||||
"Camera access is only possible when supported and allowed by your browser "
|
||||
"and when Grocy is served via a secure (https://) connection"
|
||||
msgstr ""
|
||||
"Kameraadgang er kun muligt når det er understøttet og tilladt af din browser"
|
||||
" og når Grocy tilgås gennem en sikker (https://) forbindelse"
|
||||
|
||||
msgid "Keep screen on"
|
||||
msgstr "Hold skærmen tændt"
|
||||
@@ -1610,8 +1625,8 @@ msgstr "Denne booking kan ikke fortrydes"
|
||||
msgid "Booking does not exist or was already undone"
|
||||
msgstr "Booking findes ikke eller blev allerede fortrudt"
|
||||
|
||||
msgid "Are you sure to delete API key \"%s\"?"
|
||||
msgstr "Er du sikker på at du vil slette API nøglen \"%s\"?"
|
||||
msgid "Are you sure you want to delete API key \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add note"
|
||||
msgstr "Tilføj note"
|
||||
@@ -1664,8 +1679,8 @@ msgstr "Optøet"
|
||||
msgid "Frozen"
|
||||
msgstr "Frossen"
|
||||
|
||||
msgid "Are you sure to delete userentity \"%s\"?"
|
||||
msgstr "Vil du slette bruger-oplysninger for “%1s”?"
|
||||
msgid "Are you sure you want to delete userentity \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Shopping list settings"
|
||||
msgstr "Indkøbsliste, opsætning"
|
||||
@@ -1676,9 +1691,6 @@ msgstr "Vis kalender, månedsoversigt"
|
||||
msgid "Desired servings"
|
||||
msgstr "Antal portioner"
|
||||
|
||||
msgid "Base: %s"
|
||||
msgstr "Basis: %s"
|
||||
|
||||
msgid "Recipes settings"
|
||||
msgstr "Opskrifter, opsætning"
|
||||
|
||||
@@ -1762,7 +1774,7 @@ msgstr "Rediger stregkode"
|
||||
|
||||
msgid ""
|
||||
"Based on the prices of the default consume rule (Opened first, then first "
|
||||
"due first, then first in first out) for in-stock ingredients and on the last"
|
||||
"due first, then first in first out) for in stock ingredients and on the last"
|
||||
" price for missing ones"
|
||||
msgstr ""
|
||||
|
||||
@@ -1894,7 +1906,7 @@ msgid "Chore journal"
|
||||
msgstr "Historik over pligter"
|
||||
|
||||
msgid "Track next chore schedule"
|
||||
msgstr ""
|
||||
msgstr "Føl den næste planlagte pligt"
|
||||
|
||||
msgid "Mark task as completed"
|
||||
msgstr "Marker opgave som afsluttet"
|
||||
@@ -1921,6 +1933,7 @@ msgid ""
|
||||
"This is the default quantity unit used on purchase and when adding this "
|
||||
"product to the shopping list"
|
||||
msgstr ""
|
||||
"Dette er standard-indkøbsenheden når denne vare tilføjes til indkøbslisten"
|
||||
|
||||
msgid ""
|
||||
"Show a warning when the due date of the purchased product is earlier than "
|
||||
@@ -1929,8 +1942,8 @@ msgstr ""
|
||||
"Vis en advarsel når bedst før datoen på den indkøbte vare er kortere end "
|
||||
"allerede eksisterende vare i dit lager."
|
||||
|
||||
msgid "This is due earlier than already in-stock items"
|
||||
msgstr "Bedst før er tidligere end samme vare på lager"
|
||||
msgid "This is due earlier than already in stock items"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"When enabled, after changing/scanning a product and if all fields could be "
|
||||
@@ -1947,17 +1960,21 @@ msgid ""
|
||||
"This amount is used for the \"quick consume button\" on the stock overview "
|
||||
"page (related to quantity unit stock)"
|
||||
msgstr ""
|
||||
"Denne mængde anvendes af 'hurtig-forbrug-knappen' i lageroversigten (i "
|
||||
"lagerenheden)"
|
||||
|
||||
msgid ""
|
||||
"This amount is used for the \"quick open button\" on the stock overview page"
|
||||
" (related to quantity unit stock)"
|
||||
msgstr ""
|
||||
"Denne mængde anvendes af 'hurtig-åbn-knappen' i lageroversigten (i "
|
||||
"lagerenheden)"
|
||||
|
||||
msgid "Copy"
|
||||
msgstr "Kopier"
|
||||
|
||||
msgid "Are you sure to remove this barcode?"
|
||||
msgstr "Vil du slette denne stregkode?"
|
||||
msgid "Are you sure you want to remove this barcode?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Due date type"
|
||||
msgstr "Type af udløbs-dato"
|
||||
@@ -1996,6 +2013,9 @@ msgid ""
|
||||
"today + this amount of days, but only if the resulting date is not after the"
|
||||
" original due date (a value of 0 disables this)"
|
||||
msgstr ""
|
||||
"Når varen markeres åbnet, vil bedst før datoen bliver erstattet med dags "
|
||||
"dato + dette antal dage, men kun hvis resultatet ikke er efter den originale"
|
||||
" bedst før dato (en værdi på 0 deaktiverer dette)"
|
||||
|
||||
msgid "Default due days after opened"
|
||||
msgstr "Bedst før dage efter åbning"
|
||||
@@ -2143,8 +2163,8 @@ msgstr "Ingrediens-kategori"
|
||||
msgid "Reset"
|
||||
msgstr "Nulstil"
|
||||
|
||||
msgid "Are you sure to reset the table options?"
|
||||
msgstr "Vil du nulstille tabel-valgmulighederne?"
|
||||
msgid "Are you sure you want to reset the table options?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hide/view columns"
|
||||
msgstr "Gem/Vis kolonner"
|
||||
@@ -2196,6 +2216,8 @@ msgid ""
|
||||
"After merging, all occurences of this product will be replaced by the kept "
|
||||
"product (means this product will not exist anymore)"
|
||||
msgstr ""
|
||||
"Efter sammenlægning vil alle instanser af denne vare blive erstattet med den"
|
||||
" gemte vare (så denne vare vil ikke længere findes)"
|
||||
|
||||
msgid "Merge"
|
||||
msgstr "Sammenlæg"
|
||||
@@ -2207,13 +2229,10 @@ msgid "Link"
|
||||
msgstr "Lænke"
|
||||
|
||||
msgid ""
|
||||
"The stock overview page lists all products which are currently in-stock or "
|
||||
"The stock overview page lists all products which are currently in stock or "
|
||||
"below their min. stock amount - enable this to hide this product there "
|
||||
"always"
|
||||
msgstr ""
|
||||
"Lager oversigten viser alle varer på lager eller under deres "
|
||||
"minimumsbeholdning. Aktiver denne funktion for at skjule denne vare fra "
|
||||
"listen."
|
||||
|
||||
msgid "Print options"
|
||||
msgstr "Udskrifts-muligheder"
|
||||
@@ -2222,19 +2241,21 @@ msgid "A product or a note is required"
|
||||
msgstr "Der behøves en vare eller en note"
|
||||
|
||||
msgid "Grocycode"
|
||||
msgstr ""
|
||||
msgstr "Grocykode"
|
||||
|
||||
msgid "Download"
|
||||
msgstr "Download"
|
||||
|
||||
# Example: Download *Product* Grocycode
|
||||
msgid "Download %s Grocycode"
|
||||
msgstr ""
|
||||
msgstr "Hent %s grocykode"
|
||||
|
||||
msgid ""
|
||||
"Grocycode is a unique referer to this %s in your Grocy instance - print it "
|
||||
"onto a label and scan it like any other barcode"
|
||||
msgstr ""
|
||||
"Grocycode er en unik reference til denne %s i din Grocy-installation - print"
|
||||
" den på en label og skan den som enhver anden stregkode"
|
||||
|
||||
# Abbreviation for "due date"
|
||||
msgid "DD"
|
||||
@@ -2247,13 +2268,13 @@ msgid "Default stock entry label"
|
||||
msgstr ""
|
||||
|
||||
msgid "Stock entry label"
|
||||
msgstr ""
|
||||
msgstr "Lager indgangslabel"
|
||||
|
||||
msgid "No label"
|
||||
msgstr "Ingen label"
|
||||
|
||||
msgid "Single label"
|
||||
msgstr ""
|
||||
msgstr "Enkelt label"
|
||||
|
||||
msgid "Label per unit"
|
||||
msgstr "Label pr. enhed"
|
||||
@@ -2263,7 +2284,7 @@ msgstr "Fejl ved afvikling af WebHook"
|
||||
|
||||
# Example: Print *Product* Grocycode on label printer
|
||||
msgid "Print %s Grocycode on label printer"
|
||||
msgstr ""
|
||||
msgstr "Print %s grocykode på labelprinter"
|
||||
|
||||
msgid "Open stock entry label in new window"
|
||||
msgstr ""
|
||||
@@ -2283,8 +2304,8 @@ msgstr "Kan ikke printe"
|
||||
msgid "Only done items"
|
||||
msgstr "Kun færdige punkter"
|
||||
|
||||
msgid "Show only in-stock products"
|
||||
msgstr "Vis kun varer på lager"
|
||||
msgid "Show only in stock products"
|
||||
msgstr ""
|
||||
|
||||
msgid "Product description"
|
||||
msgstr "Produktbeskrivelse"
|
||||
@@ -2306,8 +2327,8 @@ msgid "When enabled, then this field must be filled on the destination form"
|
||||
msgstr ""
|
||||
"Når dette felt er aktiveret, skal dette felt udfyldes i destinationsskemaet"
|
||||
|
||||
msgid "In-stock products"
|
||||
msgstr "Varer på lager"
|
||||
msgid "In stock products"
|
||||
msgstr ""
|
||||
|
||||
msgid "Timestamp"
|
||||
msgstr "Tidsstempel"
|
||||
@@ -2391,14 +2412,14 @@ msgstr "Sektioner bliver sorteret efter dette nummer i madplanen"
|
||||
msgid "Edit meal plan section"
|
||||
msgstr "Rediger madplanssektion"
|
||||
|
||||
msgid "Are you sure to delete meal plan section \"%s\"?"
|
||||
msgstr "Er du sikker på at du vil slette madplanssektionen \"%s\"?"
|
||||
msgid "Are you sure you want to delete meal plan section \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Section"
|
||||
msgstr "Sektion"
|
||||
|
||||
msgid "Are you sure to empty the shopping list?"
|
||||
msgstr "Er du sikker på du vil tømme indkøbslisten?"
|
||||
msgid "Are you sure you want to empty the shopping list?"
|
||||
msgstr ""
|
||||
|
||||
msgid "This is the default which will be prefilled on purchase"
|
||||
msgstr ""
|
||||
@@ -2407,13 +2428,13 @@ msgid "Merge chores"
|
||||
msgstr "Sammenlæg pligter"
|
||||
|
||||
msgid "Chore to keep"
|
||||
msgstr "Pligt der beholdes"
|
||||
msgstr "Gøremål der beholdes"
|
||||
|
||||
msgid "After merging, this chore will be kept"
|
||||
msgstr "Efter sammenlægning, vil denne pligt blive gemt"
|
||||
msgstr "Efter sammenlægning, vil dette gøremål blive gemt"
|
||||
|
||||
msgid "Chore to remove"
|
||||
msgstr "Pligt der fjernes"
|
||||
msgstr "Gøremål der fjernes"
|
||||
|
||||
msgid ""
|
||||
"After merging, all occurences of this chore will be replaced by the kept "
|
||||
@@ -2448,7 +2469,7 @@ msgid "Save & add another task"
|
||||
msgstr "Gem & tilføj en anden opgave"
|
||||
|
||||
msgid "Treat opened as out of stock"
|
||||
msgstr ""
|
||||
msgstr "Håndter åbnet som ikke på lager"
|
||||
|
||||
msgid ""
|
||||
"When enabled, opened items will be counted as missing for calculating if "
|
||||
@@ -2474,7 +2495,7 @@ msgid "The start date cannot be changed when the chore was once tracked"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show the recipe list and the recipe side by side"
|
||||
msgstr ""
|
||||
msgstr "Vis opskrift listen og opskrifter side om side"
|
||||
|
||||
msgid ""
|
||||
"This means the next execution of this chore is scheduled dynamically based "
|
||||
@@ -2597,16 +2618,16 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgid "Show resolved conversions"
|
||||
msgstr ""
|
||||
msgstr "Vis løste samtaler"
|
||||
|
||||
msgid "QU conversions resolved"
|
||||
msgstr "mængdeenhed konverteringsproblem løst"
|
||||
|
||||
msgid "Product specifc QU conversions"
|
||||
msgstr "Vare specifikke mængdeenhed omregning"
|
||||
msgid "Product specific QU conversions"
|
||||
msgstr "Produktspecifikke QU-konverteringer"
|
||||
|
||||
msgid "Default quantity unit consume"
|
||||
msgstr ""
|
||||
msgstr "Standard mængdeenhed for forbrug"
|
||||
|
||||
msgid "This is the default quantity unit used when consuming this product"
|
||||
msgstr ""
|
||||
@@ -2630,61 +2651,122 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgid "Quick open amount"
|
||||
msgstr ""
|
||||
msgstr "Hurtig åbn mængde"
|
||||
|
||||
msgid "Track chore execution now"
|
||||
msgstr ""
|
||||
msgstr "Gem udførelse af gøremål nu"
|
||||
|
||||
msgid "Total"
|
||||
msgstr ""
|
||||
msgstr "Total"
|
||||
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
msgstr "Anvend"
|
||||
|
||||
msgid "Custom range"
|
||||
msgstr ""
|
||||
msgstr "Tilpasset område"
|
||||
|
||||
msgid "Yesterday"
|
||||
msgstr ""
|
||||
msgstr "Igår"
|
||||
|
||||
msgid "Last %1$s day"
|
||||
msgid_plural "Last %1$s days"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "Sidste %1$s dag"
|
||||
msgstr[1] "Sidste %1$s dage"
|
||||
|
||||
msgid "This month"
|
||||
msgstr ""
|
||||
msgstr "Denne måned"
|
||||
|
||||
msgid "Last month"
|
||||
msgstr ""
|
||||
msgstr "Sidste måned"
|
||||
|
||||
msgid "This year"
|
||||
msgstr ""
|
||||
msgstr "Dette år"
|
||||
|
||||
msgid "Last year"
|
||||
msgstr ""
|
||||
msgstr "Sidste år"
|
||||
|
||||
msgid "Reports"
|
||||
msgstr ""
|
||||
msgstr "Rapporter"
|
||||
|
||||
msgid "Spendings"
|
||||
msgstr ""
|
||||
msgstr "Brugt"
|
||||
|
||||
msgid "Stock report"
|
||||
msgstr ""
|
||||
msgstr "Lager rapport"
|
||||
|
||||
msgid "Out-of-stock products"
|
||||
msgid "Out of stock products"
|
||||
msgstr ""
|
||||
|
||||
msgid "Quantity unit for prices"
|
||||
msgstr ""
|
||||
msgstr "Mængdeenhed for priser"
|
||||
|
||||
msgid ""
|
||||
"When displaying prices for this product, they will be related to this "
|
||||
"quantity unit"
|
||||
msgstr ""
|
||||
"Når priserne for dette produkt vises, vil de være relateret til denne "
|
||||
"mængdeenhed"
|
||||
|
||||
msgid "This means 1 label will be printed"
|
||||
msgid_plural "This means %1$s labels will be printed"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "Dette betyder at 1 label vil blive printet"
|
||||
msgstr[1] "Dette betyder at %1$s labels vil blive printet"
|
||||
|
||||
msgid "External barcode lookup"
|
||||
msgstr ""
|
||||
|
||||
msgid "Error while executing the barcode lookup plugin"
|
||||
msgstr "Fejl opstået under udførelse af stregkode opslag plugin"
|
||||
|
||||
msgid "Nothing was found for the given barcode"
|
||||
msgstr "Intet fundet på denne stregkode"
|
||||
|
||||
msgid "Configure colors"
|
||||
msgstr "Konfigurer farver"
|
||||
|
||||
msgid "Swap track next schedule / track now buttons"
|
||||
msgstr ""
|
||||
|
||||
msgid "Scheduled tracking time"
|
||||
msgstr ""
|
||||
|
||||
msgid "Time of tracking"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show all out of stock products"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"By default the stock overview page lists all products which are currently in"
|
||||
" stock or below their min. stock amount - when this is enabled, all (active)"
|
||||
" products are always shown"
|
||||
msgstr ""
|
||||
|
||||
msgid "No price information is available for at least one ingredient"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"For ingredients that are only partially in stock, the in stock amount will "
|
||||
"be consumed."
|
||||
msgstr ""
|
||||
|
||||
msgid "Can't be opened"
|
||||
msgstr ""
|
||||
|
||||
msgid "Default purchase price type"
|
||||
msgstr ""
|
||||
|
||||
msgid "This will be used as the default price type selection on purchase"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unspecified"
|
||||
msgstr ""
|
||||
|
||||
msgid "Round up quantity amounts to the nearest whole number"
|
||||
msgstr ""
|
||||
|
||||
msgid "Stock actions"
|
||||
msgstr ""
|
||||
|
||||
msgid "List actions"
|
||||
msgstr ""
|
||||
|
@@ -3,6 +3,7 @@
|
||||
# Brian Moos Lindberg <brian@blueeel.dk>, 2019
|
||||
# Mihai Marinescu <mihai@marinescu.dk>, 2020
|
||||
# klavslund <klavslund@gmail.com>, 2021
|
||||
# G Momsen, 2024
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -10,7 +11,7 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01 17:43+0000\n"
|
||||
"Last-Translator: klavslund <klavslund@gmail.com>, 2021\n"
|
||||
"Last-Translator: G Momsen, 2024\n"
|
||||
"Language-Team: Danish (https://app.transifex.com/grocy/teams/93189/da/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -35,6 +36,10 @@ msgstr "tal-heltal"
|
||||
msgid "number-decimal"
|
||||
msgstr "tal-decimal"
|
||||
|
||||
# Number (currency)
|
||||
msgid "number-currency"
|
||||
msgstr "tal-valuta"
|
||||
|
||||
# Date (without time)
|
||||
msgid "date"
|
||||
msgstr "dato"
|
||||
|
@@ -1,6 +1,6 @@
|
||||
#
|
||||
# Translators:
|
||||
# Bernd Bestel <bernd@berrnd.de>, 2023
|
||||
# Bernd Bestel <bernd@berrnd.de>, 2025
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01 17:42+0000\n"
|
||||
"Last-Translator: Bernd Bestel <bernd@berrnd.de>, 2023\n"
|
||||
"Last-Translator: Bernd Bestel <bernd@berrnd.de>, 2025\n"
|
||||
"Language-Team: German (https://app.transifex.com/grocy/teams/93189/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -411,3 +411,6 @@ msgstr "Bier"
|
||||
|
||||
msgid "Estonian"
|
||||
msgstr "Estnisch"
|
||||
|
||||
msgid "Bulgarian"
|
||||
msgstr "Bulgarisch"
|
||||
|
@@ -1,6 +1,6 @@
|
||||
#
|
||||
# Translators:
|
||||
# Bernd Bestel <bernd@berrnd.de>, 2023
|
||||
# Bernd Bestel <bernd@berrnd.de>, 2025
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2020-08-31 19:11+0000\n"
|
||||
"Last-Translator: Bernd Bestel <bernd@berrnd.de>, 2023\n"
|
||||
"Last-Translator: Bernd Bestel <bernd@berrnd.de>, 2025\n"
|
||||
"Language-Team: German (https://app.transifex.com/grocy/teams/93189/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -27,7 +27,7 @@ msgstr "Dänisch"
|
||||
|
||||
# German
|
||||
msgid "de"
|
||||
msgstr "de"
|
||||
msgstr "Deutsch"
|
||||
|
||||
# Greek
|
||||
msgid "el_GR"
|
||||
@@ -35,7 +35,7 @@ msgstr "Griechisch"
|
||||
|
||||
# English
|
||||
msgid "en"
|
||||
msgstr "de"
|
||||
msgstr "Englisch"
|
||||
|
||||
# English (Great Britain)
|
||||
msgid "en_GB"
|
||||
@@ -144,3 +144,7 @@ msgstr "Rumänisch"
|
||||
# Estonian
|
||||
msgid "et_EE"
|
||||
msgstr "Estnisch"
|
||||
|
||||
# Bulgarian
|
||||
msgid "bg_BG"
|
||||
msgstr "Bulgarisch"
|
||||
|
@@ -3,7 +3,7 @@
|
||||
# Luca RHK <luca@rhk-in.de>, 2020
|
||||
# Tobias Wolter <mumpfpuffel@gmail.com>, 2020
|
||||
# @RubenKelevra <ruben@freifunk-nrw.de>, 2021
|
||||
# Bernd Bestel <bernd@berrnd.de>, 2023
|
||||
# Bernd Bestel <bernd@berrnd.de>, 2025
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -11,7 +11,7 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01 17:42+0000\n"
|
||||
"Last-Translator: Bernd Bestel <bernd@berrnd.de>, 2023\n"
|
||||
"Last-Translator: Bernd Bestel <bernd@berrnd.de>, 2025\n"
|
||||
"Language-Team: German (https://app.transifex.com/grocy/teams/93189/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -21,7 +21,7 @@ msgstr ""
|
||||
"X-Domain: grocy/strings\n"
|
||||
|
||||
msgid "Stock overview"
|
||||
msgstr "Bestand"
|
||||
msgstr "Bestandsübersicht"
|
||||
|
||||
msgid "%s product expires"
|
||||
msgid_plural "%s products expiring"
|
||||
@@ -63,10 +63,10 @@ msgid "Logout"
|
||||
msgstr "Abmelden"
|
||||
|
||||
msgid "Chores overview"
|
||||
msgstr "Hausarbeiten"
|
||||
msgstr "Hausarbeitenübersicht"
|
||||
|
||||
msgid "Batteries overview"
|
||||
msgstr "Batterien"
|
||||
msgstr "Batterienübersicht"
|
||||
|
||||
msgid "Purchase"
|
||||
msgstr "Einkauf"
|
||||
@@ -162,7 +162,7 @@ msgid "Tracked time"
|
||||
msgstr "Ausführungszeit"
|
||||
|
||||
msgid "Chore overview"
|
||||
msgstr "Hausarbeitenübersicht"
|
||||
msgstr "Hausarbeitübersicht"
|
||||
|
||||
msgid "Tracked count"
|
||||
msgstr "Ausführungsanzahl"
|
||||
@@ -281,8 +281,8 @@ msgstr "Passwort"
|
||||
msgid "Invalid credentials, please try again"
|
||||
msgstr "Ungültige Zugangsdaten, bitte versuche es erneut"
|
||||
|
||||
msgid "Are you sure to delete battery \"%s\"?"
|
||||
msgstr "Battery \"%s\" wirklich löschen?"
|
||||
msgid "Are you sure you want to delete battery \"%s\"?"
|
||||
msgstr "Batterie \"%s\" wirklich löschen?"
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Ja"
|
||||
@@ -290,7 +290,7 @@ msgstr "Ja"
|
||||
msgid "No"
|
||||
msgstr "Nein"
|
||||
|
||||
msgid "Are you sure to delete chore \"%s\"?"
|
||||
msgid "Are you sure you want to delete chore \"%s\"?"
|
||||
msgstr "Hausarbeit \"%s\" wirklich löschen?"
|
||||
|
||||
msgid "\"%s\" could not be resolved to a product, how do you want to proceed?"
|
||||
@@ -313,16 +313,16 @@ msgstr "Barcode vorhandenem Produkt zuweisen"
|
||||
msgid "Add as new product and prefill barcode"
|
||||
msgstr "Neues Produkt erstellen und Barcode vorbelegen"
|
||||
|
||||
msgid "Are you sure to delete quantity unit \"%s\"?"
|
||||
msgid "Are you sure you want to delete quantity unit \"%s\"?"
|
||||
msgstr "Mengeneinheit \"%s\" wirklich löschen?"
|
||||
|
||||
msgid "Are you sure to delete product \"%s\"?"
|
||||
msgid "Are you sure you want to delete product \"%s\"?"
|
||||
msgstr "Produkt \"%s\" wirklich löschen?"
|
||||
|
||||
msgid "Are you sure to delete location \"%s\"?"
|
||||
msgid "Are you sure you want to delete location \"%s\"?"
|
||||
msgstr "Standort \"%s\" wirklich löschen?"
|
||||
|
||||
msgid "Are you sure to delete store \"%s\"?"
|
||||
msgid "Are you sure you want to delete store \"%s\"?"
|
||||
msgstr "Geschäft \"%s\" wirklich löschen?"
|
||||
|
||||
msgid "Manage API keys"
|
||||
@@ -364,9 +364,6 @@ msgstr "Über Grocy"
|
||||
msgid "Close"
|
||||
msgstr "Schließen"
|
||||
|
||||
msgid "Released on"
|
||||
msgstr "Veröffentlicht am"
|
||||
|
||||
msgid "Added %1$s of %2$s to stock"
|
||||
msgstr "%1$s %2$s dem Bestand hinzugefügt"
|
||||
|
||||
@@ -439,13 +436,13 @@ msgstr "Rezeptzutat hinzufügen"
|
||||
msgid "Edit recipe ingredient"
|
||||
msgstr "Rezeptzutat bearbeiten"
|
||||
|
||||
msgid "Are you sure to delete recipe \"%s\"?"
|
||||
msgid "Are you sure you want to delete recipe \"%s\"?"
|
||||
msgstr "Rezept \"%s\" wirklich löschen?"
|
||||
|
||||
msgid "Are you sure to delete recipe ingredient \"%s\"?"
|
||||
msgid "Are you sure you want to delete recipe ingredient \"%s\"?"
|
||||
msgstr "Rezeptzutat \"%s\" wirklich löschen?"
|
||||
|
||||
msgid "Are you sure to empty shopping list \"%s\"?"
|
||||
msgid "Are you sure you want to empty shopping list \"%s\"?"
|
||||
msgstr "Einkaufszettel \"%s\" wirklich leeren? "
|
||||
|
||||
msgid "Clear list"
|
||||
@@ -495,15 +492,12 @@ msgid "Put missing amount on shopping list"
|
||||
msgstr "Fehlende Menge auf den Einkaufszettel setzen"
|
||||
|
||||
msgid ""
|
||||
"Are you sure to put all missing ingredients for recipe \"%s\" on the "
|
||||
"shopping list?"
|
||||
"Are you sure you want to put all missing ingredients for recipe \"%s\" on "
|
||||
"the shopping list?"
|
||||
msgstr ""
|
||||
"Alle fehlenden Zutaten für Rezept \"%s\" wirklich auf den Einkaufszettel "
|
||||
"setzen?"
|
||||
|
||||
msgid "Added for recipe %s"
|
||||
msgstr "Hinzugefügt für Rezept %s"
|
||||
|
||||
msgid "Manage users"
|
||||
msgstr "Benutzer verwalten"
|
||||
|
||||
@@ -513,7 +507,7 @@ msgstr "Benutzer"
|
||||
msgid "Users"
|
||||
msgstr "Benutzer"
|
||||
|
||||
msgid "Are you sure to delete user \"%s\"?"
|
||||
msgid "Are you sure you want to delete user \"%s\"?"
|
||||
msgstr "Benutzer \"%s\" wirklich löschen?"
|
||||
|
||||
msgid "Create user"
|
||||
@@ -609,17 +603,18 @@ msgid "Only check if any amount is in stock"
|
||||
msgstr "Nur prüfen, ob eine beliebige Menge im Bestand verfügbar ist"
|
||||
|
||||
msgid ""
|
||||
"Are you sure to consume all ingredients needed by recipe \"%s\" (ingredients"
|
||||
" marked with \"only check if any amount is in stock\" will be ignored)?"
|
||||
"Are you sure you want to consume all ingredients needed by recipe \"%s\" "
|
||||
"(ingredients marked with \"only check if any amount is in stock\" will be "
|
||||
"ignored)?"
|
||||
msgstr ""
|
||||
"Sicher, dass alle Zutaten, die vom Rezept \"%s\" benötigt werden, aus dem "
|
||||
"Bestand entfernt werden sollen (Zutaten markiert mit \"Nur prüfen, ob eine "
|
||||
"beliebige Menge im Bestand verfügbar ist\" werden ignoriert)?"
|
||||
|
||||
msgid "Removed all ingredients of recipe \"%s\" from stock"
|
||||
msgid "Removed all in stock ingredients needed by recipe \"%s\" from stock"
|
||||
msgstr ""
|
||||
"Alle Zutaten, die vom Rezept \"%s\" benötigt werden, wurden aus dem Bestand "
|
||||
"entfernt"
|
||||
"Alle vorrätigen Zutaten, die vom Rezept \"%s\" benötigt werden, wurden aus "
|
||||
"dem Bestand entfernt"
|
||||
|
||||
msgid "Consume all ingredients needed by this recipe"
|
||||
msgstr ""
|
||||
@@ -671,7 +666,7 @@ msgstr "Kategorie"
|
||||
msgid "Edit task"
|
||||
msgstr "Aufgabe bearbeiten"
|
||||
|
||||
msgid "Are you sure to delete task \"%s\"?"
|
||||
msgid "Are you sure you want to delete task \"%s\"?"
|
||||
msgstr "Aufgabe \"%s\" wirklich löschen?"
|
||||
|
||||
msgid "%s task is due to be done"
|
||||
@@ -705,7 +700,7 @@ msgstr "Produktgruppe bearbeiten"
|
||||
msgid "Product group"
|
||||
msgstr "Produktgruppe"
|
||||
|
||||
msgid "Are you sure to delete product group \"%s\"?"
|
||||
msgid "Are you sure you want to delete product group \"%s\"?"
|
||||
msgstr "Produktgruppe \"%s\" wirklich löschen?"
|
||||
|
||||
msgid "Stay logged in permanently"
|
||||
@@ -851,7 +846,7 @@ msgid "Add this item to stock"
|
||||
msgstr "Diesen Eintrag zum Bestand hinzufügen"
|
||||
|
||||
msgid "Adding shopping list item %1$s of %2$s"
|
||||
msgstr "Bearbeite Einkausfzetteleintrag %1$s von %2$s"
|
||||
msgstr "Bearbeite Einkaufszetteleintrag %1$s von %2$s"
|
||||
|
||||
msgid "Use a specific stock item"
|
||||
msgstr "Einen bestimmten Bestandseintrag verwenden"
|
||||
@@ -877,7 +872,9 @@ msgid "Not opened"
|
||||
msgstr "Nicht geöffnet"
|
||||
|
||||
msgid "Opened"
|
||||
msgstr "Geöffnet"
|
||||
msgid_plural "Opened"
|
||||
msgstr[0] "Geöffnet"
|
||||
msgstr[1] "Geöffnet"
|
||||
|
||||
msgid "%s opened"
|
||||
msgstr "%s geöffnet"
|
||||
@@ -946,7 +943,7 @@ msgid "You have to select a recipe"
|
||||
msgstr "Ein Rezept muss ausgewählt werden"
|
||||
|
||||
msgid "Key type"
|
||||
msgstr "Schlusseltyp"
|
||||
msgstr "Schlüsseltyp"
|
||||
|
||||
msgid "Share/Integrate calendar (iCal)"
|
||||
msgstr "Kalender teilen/integrieren (iCal)"
|
||||
@@ -1051,7 +1048,7 @@ msgstr "Aufgabeneinstellungen"
|
||||
msgid "Create shopping list"
|
||||
msgstr "Einkaufszettel erstellen"
|
||||
|
||||
msgid "Are you sure to delete shopping list \"%s\"?"
|
||||
msgid "Are you sure you want to delete shopping list \"%s\"?"
|
||||
msgstr "Einkaufszettel \"%s\" wirklich löschen? "
|
||||
|
||||
msgid "Average shelf life"
|
||||
@@ -1222,11 +1219,6 @@ msgstr "Nie"
|
||||
msgid "Today"
|
||||
msgstr "Heute"
|
||||
|
||||
msgid "Not all ingredients of recipe \"%s\" are in stock, nothing removed"
|
||||
msgstr ""
|
||||
"Nicht alle Zutaten, die vom Rezept \"%s\" benötigt werden, sind vorrätig, es"
|
||||
" wurde nichts aus dem Bestand entfernt"
|
||||
|
||||
msgid "Undo task"
|
||||
msgstr "Aufgabe rückgängig machen"
|
||||
|
||||
@@ -1266,7 +1258,7 @@ msgstr "Verbrauchte Menge"
|
||||
msgid "Time of printing"
|
||||
msgstr "Druckzeitpunkt"
|
||||
|
||||
msgid "Are you sure to delete equipment \"%s\"?"
|
||||
msgid "Are you sure you want to delete equipment \"%s\"?"
|
||||
msgstr "Ausstattung \"%s\" wirklich löschen?"
|
||||
|
||||
msgid "Parent product"
|
||||
@@ -1429,7 +1421,7 @@ msgstr "Zuweisung"
|
||||
msgid "Consume product on chore execution"
|
||||
msgstr "Ein Produkt bei der Ausführung verbrauchen"
|
||||
|
||||
msgid "Are you sure to delete user field \"%s\"?"
|
||||
msgid "Are you sure you want to delete user field \"%s\"?"
|
||||
msgstr "Benutzerfeld \"%s\" wirklich löschen?"
|
||||
|
||||
msgid "Userentities"
|
||||
@@ -1450,7 +1442,7 @@ msgstr "%s bearbeiten"
|
||||
msgid "Create %s"
|
||||
msgstr "%s erstellen"
|
||||
|
||||
msgid "Are you sure to delete this userobject?"
|
||||
msgid "Are you sure you want to delete this userobject?"
|
||||
msgstr "Dieses Benutzerobjekt wirklich löschen?"
|
||||
|
||||
msgid "Icon CSS class"
|
||||
@@ -1498,7 +1490,7 @@ msgid "Add to shopping list"
|
||||
msgstr "Zum Einkaufszettel hinzufügen"
|
||||
|
||||
msgid "Added %1$s of %2$s to the shopping list \"%3$s\""
|
||||
msgstr "%1$s %2$s dem Einkauszettel \"%3$s\" hinzugefügt"
|
||||
msgstr "%1$s %2$s dem Einkaufszettel \"%3$s\" hinzugefügt"
|
||||
|
||||
msgid "Output"
|
||||
msgstr "Ausgabe"
|
||||
@@ -1540,7 +1532,7 @@ msgstr ""
|
||||
"Wenn aktiviert, werden die Mindestbestände von untergeordneten Produkten "
|
||||
"aufsummiert, heißt das untergeordnete Produkt kann nie fehlen, nur dieses"
|
||||
|
||||
msgid "Are you sure to remove this conversion?"
|
||||
msgid "Are you sure you want to remove this conversion?"
|
||||
msgstr "Diese Umrechnung wirklich löschen?"
|
||||
|
||||
msgid "Unit price"
|
||||
@@ -1558,7 +1550,7 @@ msgstr "Unbegrenzt"
|
||||
msgid "Clear"
|
||||
msgstr "Löschen"
|
||||
|
||||
msgid "Are you sure to remove the included recipe \"%s\"?"
|
||||
msgid "Are you sure you want to remove the included recipe \"%s\"?"
|
||||
msgstr "Das enthaltene Rezept \"%s\" wirklich löschen?"
|
||||
|
||||
msgid "Period interval"
|
||||
@@ -1649,7 +1641,7 @@ msgstr "Die Buchung kann nicht rückgängig gemacht werden"
|
||||
msgid "Booking does not exist or was already undone"
|
||||
msgstr "Buchung existiert nicht oder wurde bereits rückgängig gemacht"
|
||||
|
||||
msgid "Are you sure to delete API key \"%s\"?"
|
||||
msgid "Are you sure you want to delete API key \"%s\"?"
|
||||
msgstr "API-Schlüssel \"%s\" wirklich löschen?"
|
||||
|
||||
msgid "Add note"
|
||||
@@ -1705,7 +1697,7 @@ msgstr "Aufgetaut"
|
||||
msgid "Frozen"
|
||||
msgstr "Eingefroren"
|
||||
|
||||
msgid "Are you sure to delete userentity \"%s\"?"
|
||||
msgid "Are you sure you want to delete userentity \"%s\"?"
|
||||
msgstr "Benutzerentität \"%s\" wirklich löschen?"
|
||||
|
||||
msgid "Shopping list settings"
|
||||
@@ -1717,9 +1709,6 @@ msgstr "Einen Kalender (Monatsansicht) anzeigen"
|
||||
msgid "Desired servings"
|
||||
msgstr "Gewünschte Portionen"
|
||||
|
||||
msgid "Base: %s"
|
||||
msgstr "Basis: %s"
|
||||
|
||||
msgid "Recipes settings"
|
||||
msgstr "Rezepteinstellungen"
|
||||
|
||||
@@ -1804,7 +1793,7 @@ msgstr "Barcode bearbeiten"
|
||||
|
||||
msgid ""
|
||||
"Based on the prices of the default consume rule (Opened first, then first "
|
||||
"due first, then first in first out) for in-stock ingredients and on the last"
|
||||
"due first, then first in first out) for in stock ingredients and on the last"
|
||||
" price for missing ones"
|
||||
msgstr ""
|
||||
"Basierend auf den Preisen der Standardverbrauchsregel (Geöffnete zuerst, "
|
||||
@@ -1978,7 +1967,7 @@ msgstr ""
|
||||
"Eine Warnung anzeigen, wenn das Fälligkeitsdatum des gekauften Produkts vor "
|
||||
"dem nächsten Fälligkeitsdatum von bereits vorrätigen Bestandseinträgen liegt"
|
||||
|
||||
msgid "This is due earlier than already in-stock items"
|
||||
msgid "This is due earlier than already in stock items"
|
||||
msgstr "Dies ist früher fällig als bereits vorhandene Bestandseinträge"
|
||||
|
||||
msgid ""
|
||||
@@ -2011,7 +2000,7 @@ msgstr ""
|
||||
msgid "Copy"
|
||||
msgstr "Kopieren"
|
||||
|
||||
msgid "Are you sure to remove this barcode?"
|
||||
msgid "Are you sure you want to remove this barcode?"
|
||||
msgstr "Diesen Barcode wirklich löschen?"
|
||||
|
||||
msgid "Due date type"
|
||||
@@ -2214,7 +2203,7 @@ msgstr "Zutatengruppe"
|
||||
msgid "Reset"
|
||||
msgstr "Zurücksetzen"
|
||||
|
||||
msgid "Are you sure to reset the table options?"
|
||||
msgid "Are you sure you want to reset the table options?"
|
||||
msgstr "Tabellenoptionen wirklich zurücksetzen?"
|
||||
|
||||
msgid "Hide/view columns"
|
||||
@@ -2282,7 +2271,7 @@ msgid "Link"
|
||||
msgstr "Link"
|
||||
|
||||
msgid ""
|
||||
"The stock overview page lists all products which are currently in-stock or "
|
||||
"The stock overview page lists all products which are currently in stock or "
|
||||
"below their min. stock amount - enable this to hide this product there "
|
||||
"always"
|
||||
msgstr ""
|
||||
@@ -2360,7 +2349,7 @@ msgstr "Drucken nicht möglich"
|
||||
msgid "Only done items"
|
||||
msgstr "Nur erledigte Einträge"
|
||||
|
||||
msgid "Show only in-stock products"
|
||||
msgid "Show only in stock products"
|
||||
msgstr "Nur vorrätige Produkte anzeigen"
|
||||
|
||||
msgid "Product description"
|
||||
@@ -2382,7 +2371,7 @@ msgstr "Erforderliches Benutzerfeld"
|
||||
msgid "When enabled, then this field must be filled on the destination form"
|
||||
msgstr "Wenn aktiviert, dann muss dieses Feld ausgefüllt werden"
|
||||
|
||||
msgid "In-stock products"
|
||||
msgid "In stock products"
|
||||
msgstr "Vorrätige Produkte"
|
||||
|
||||
msgid "Timestamp"
|
||||
@@ -2468,14 +2457,14 @@ msgstr "Die Abschnitte werden nach dieser Nummer auf dem Speiseplan sortiert"
|
||||
msgid "Edit meal plan section"
|
||||
msgstr "Speiseplanabschnitt bearbeiten"
|
||||
|
||||
msgid "Are you sure to delete meal plan section \"%s\"?"
|
||||
msgid "Are you sure you want to delete meal plan section \"%s\"?"
|
||||
msgstr "Speiseplanabschnitt \"%s\" wirklich löschen?"
|
||||
|
||||
msgid "Section"
|
||||
msgstr "Abschnitt"
|
||||
|
||||
msgid "Are you sure to empty the shopping list?"
|
||||
msgstr "Sicher, dass der Einkaufszettel geleert werden soll?"
|
||||
msgid "Are you sure you want to empty the shopping list?"
|
||||
msgstr "Den Einkaufszettel wirklich leeren? "
|
||||
|
||||
msgid "This is the default which will be prefilled on purchase"
|
||||
msgstr "Dies ist die Standardeinstellung, die beim Einkauf vorbelegt wird"
|
||||
@@ -2702,7 +2691,7 @@ msgstr "Aufgelöste ME-Umrechnungen anzeigen"
|
||||
msgid "QU conversions resolved"
|
||||
msgstr "Aufgelöste ME-Umrechnungen"
|
||||
|
||||
msgid "Product specifc QU conversions"
|
||||
msgid "Product specific QU conversions"
|
||||
msgstr "Produktspezifische ME-Umrechnungen"
|
||||
|
||||
msgid "Default quantity unit consume"
|
||||
@@ -2778,7 +2767,7 @@ msgstr "Ausgaben"
|
||||
msgid "Stock report"
|
||||
msgstr "Bestandsbericht"
|
||||
|
||||
msgid "Out-of-stock products"
|
||||
msgid "Out of stock products"
|
||||
msgstr "Nicht vorrätige Produkte"
|
||||
|
||||
msgid "Quantity unit for prices"
|
||||
@@ -2795,3 +2784,70 @@ msgid "This means 1 label will be printed"
|
||||
msgid_plural "This means %1$s labels will be printed"
|
||||
msgstr[0] "Dies bedeutet 1 Bestandseintragsetikett wird gedruckt"
|
||||
msgstr[1] "Dies bedeutet %1$s Bestandseintragsetiketten werden gedruckt"
|
||||
|
||||
msgid "External barcode lookup"
|
||||
msgstr "Externe Barcode-Suche"
|
||||
|
||||
msgid "Error while executing the barcode lookup plugin"
|
||||
msgstr "Fehler beim Ausführen des Barcode-Suche-Plugins"
|
||||
|
||||
msgid "Nothing was found for the given barcode"
|
||||
msgstr "Für den angegebenen Barcode wurde nichts gefunden"
|
||||
|
||||
msgid "Configure colors"
|
||||
msgstr "Farben konfigurieren"
|
||||
|
||||
msgid "Swap track next schedule / track now buttons"
|
||||
msgstr ""
|
||||
"Die Buttons \"Nächste geplante Ausführung erfassen\" / \"Ausführung jetzt "
|
||||
"erfassen\" tauschen"
|
||||
|
||||
msgid "Scheduled tracking time"
|
||||
msgstr "Geplante Ausführungszeit"
|
||||
|
||||
msgid "Time of tracking"
|
||||
msgstr "Erfassungszeit"
|
||||
|
||||
msgid "Show all out of stock products"
|
||||
msgstr "Alle nicht vorrätigen Produkte anzeigen"
|
||||
|
||||
msgid ""
|
||||
"By default the stock overview page lists all products which are currently in"
|
||||
" stock or below their min. stock amount - when this is enabled, all (active)"
|
||||
" products are always shown"
|
||||
msgstr ""
|
||||
"Standardmäßig listet die Bestandsübersicht alle Produkte auf, die derzeit im"
|
||||
" Bestand oder unter ihrem Mindestbestand sind - aktiviere dies, um dort "
|
||||
"immer alle (aktiven) Produkte anzuzeigen"
|
||||
|
||||
msgid "No price information is available for at least one ingredient"
|
||||
msgstr "Für mindestens eine Zutat sind keine Preisinformationen verfügbar"
|
||||
|
||||
msgid ""
|
||||
"For ingredients that are only partially in stock, the in stock amount will "
|
||||
"be consumed."
|
||||
msgstr ""
|
||||
"Für Zutaten, die nur teilweise vorrätig sind, wird die vorrätige Menge "
|
||||
"verbraucht."
|
||||
|
||||
msgid "Can't be opened"
|
||||
msgstr "Kann nicht geöffnet werden"
|
||||
|
||||
msgid "Default purchase price type"
|
||||
msgstr "Standard-Einkaufspreistyp"
|
||||
|
||||
msgid "This will be used as the default price type selection on purchase"
|
||||
msgstr ""
|
||||
"Dies wird als Standard für die Preistyp-Auswahl beim Einkauf verwendet"
|
||||
|
||||
msgid "Unspecified"
|
||||
msgstr "Nicht spezifiziert"
|
||||
|
||||
msgid "Round up quantity amounts to the nearest whole number"
|
||||
msgstr "Mengen auf die nächste ganze Zahl aufrunden"
|
||||
|
||||
msgid "Stock actions"
|
||||
msgstr "Bestandsaktionen"
|
||||
|
||||
msgid "List actions"
|
||||
msgstr "Listenaktionen"
|
||||
|
@@ -1,6 +1,6 @@
|
||||
#
|
||||
# Translators:
|
||||
# Bernd Bestel <bernd@berrnd.de>, 2020
|
||||
# Bernd Bestel <bernd@berrnd.de>, 2023
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01 17:43+0000\n"
|
||||
"Last-Translator: Bernd Bestel <bernd@berrnd.de>, 2020\n"
|
||||
"Last-Translator: Bernd Bestel <bernd@berrnd.de>, 2023\n"
|
||||
"Language-Team: German (https://app.transifex.com/grocy/teams/93189/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -33,6 +33,10 @@ msgstr "Zahl (Ganzzahl)"
|
||||
msgid "number-decimal"
|
||||
msgstr "Zahl (mit Dezimalstellen)"
|
||||
|
||||
# Number (currency)
|
||||
msgid "number-currency"
|
||||
msgstr "Zahl (Währung)"
|
||||
|
||||
# Date (without time)
|
||||
msgid "date"
|
||||
msgstr "Datum (ohne Zeitanteil)"
|
||||
|
@@ -406,3 +406,6 @@ msgstr ""
|
||||
|
||||
msgid "Estonian"
|
||||
msgstr ""
|
||||
|
||||
msgid "Bulgarian"
|
||||
msgstr ""
|
||||
|
@@ -2,6 +2,7 @@
|
||||
# Translators:
|
||||
# datablitz7 <plant7@gmail.com>, 2019
|
||||
# emmker kats, 2022
|
||||
# Vasilis Mourtzis, 2023
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -9,7 +10,7 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01 17:42+0000\n"
|
||||
"Last-Translator: emmker kats, 2022\n"
|
||||
"Last-Translator: Vasilis Mourtzis, 2023\n"
|
||||
"Language-Team: Greek (Greece) (https://app.transifex.com/grocy/teams/93189/el_GR/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -37,4 +38,4 @@ msgid "hourly"
|
||||
msgstr "ωριαίο"
|
||||
|
||||
msgid "adaptive"
|
||||
msgstr ""
|
||||
msgstr "προσαρμοστικό"
|
||||
|
@@ -414,3 +414,6 @@ msgstr ""
|
||||
|
||||
msgid "Estonian"
|
||||
msgstr ""
|
||||
|
||||
msgid "Bulgarian"
|
||||
msgstr ""
|
||||
|
@@ -145,3 +145,7 @@ msgstr ""
|
||||
# Estonian
|
||||
msgid "et_EE"
|
||||
msgstr ""
|
||||
|
||||
# Bulgarian
|
||||
msgid "bg_BG"
|
||||
msgstr ""
|
||||
|
@@ -8,6 +8,7 @@
|
||||
# emmker kats, 2022
|
||||
# Dimitris, 2022
|
||||
# Lefteris Garyfalakis, 2022
|
||||
# Vasilis Mourtzis, 2023
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -15,7 +16,7 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01 17:42+0000\n"
|
||||
"Last-Translator: Lefteris Garyfalakis, 2022\n"
|
||||
"Last-Translator: Vasilis Mourtzis, 2023\n"
|
||||
"Language-Team: Greek (Greece) (https://app.transifex.com/grocy/teams/93189/el_GR/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -287,8 +288,8 @@ msgstr "Κωδικός πρόσβασης"
|
||||
msgid "Invalid credentials, please try again"
|
||||
msgstr "Μη έγκυρα διαπιστευτήρια, δοκιμάστε ξανά"
|
||||
|
||||
msgid "Are you sure to delete battery \"%s\"?"
|
||||
msgstr "Είστε βέβαιοι ότι θα διαγράψετε την μπαταρία \"%s\";"
|
||||
msgid "Are you sure you want to delete battery \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Ναί"
|
||||
@@ -296,8 +297,8 @@ msgstr "Ναί"
|
||||
msgid "No"
|
||||
msgstr "Οχι"
|
||||
|
||||
msgid "Are you sure to delete chore \"%s\"?"
|
||||
msgstr "Είστε βέβαιοι ότι θα διαγράψετε τη δουλειά \"%s\";"
|
||||
msgid "Are you sure you want to delete chore \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "\"%s\" could not be resolved to a product, how do you want to proceed?"
|
||||
msgstr ""
|
||||
@@ -319,23 +320,23 @@ msgstr "Προσθέστε ως γραμμωτό κώδικα στο υπάρχ
|
||||
msgid "Add as new product and prefill barcode"
|
||||
msgstr "Προσθέστε ως νέο προϊόν και γραμμωτού κώδικα προσυμπλήρωσης"
|
||||
|
||||
msgid "Are you sure to delete quantity unit \"%s\"?"
|
||||
msgstr "Είστε βέβαιοι ότι θα διαγράψετε τη μονάδα ποσότητας \"%s\";"
|
||||
msgid "Are you sure you want to delete quantity unit \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure to delete product \"%s\"?"
|
||||
msgstr "Είστε βέβαιοι ότι θα διαγράψετε το προϊόν \"%s\";"
|
||||
msgid "Are you sure you want to delete product \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure to delete location \"%s\"?"
|
||||
msgstr "Είστε βέβαιοι ότι θα διαγράψετε την τοποθεσία \"%s\";"
|
||||
msgid "Are you sure you want to delete location \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure to delete store \"%s\"?"
|
||||
msgstr "Είστε βέβαιοι ότι θα διαγράψετε το κατάστημα \"%s\";"
|
||||
msgid "Are you sure you want to delete store \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manage API keys"
|
||||
msgstr "Διαχείριση κλειδιών API"
|
||||
|
||||
msgid "REST API browser"
|
||||
msgstr ""
|
||||
msgstr "Περιηγητής REST API"
|
||||
|
||||
msgid "API keys"
|
||||
msgstr "Κλειδιά API"
|
||||
@@ -370,9 +371,6 @@ msgstr ""
|
||||
msgid "Close"
|
||||
msgstr "Κλείσε"
|
||||
|
||||
msgid "Released on"
|
||||
msgstr "Κυκλοφόρησε στις"
|
||||
|
||||
msgid "Added %1$s of %2$s to stock"
|
||||
msgstr "Προστέθηκε %1$s από %2$s στο απόθεμα"
|
||||
|
||||
@@ -445,14 +443,14 @@ msgstr "Προσθέστε συστατικό συνταγής"
|
||||
msgid "Edit recipe ingredient"
|
||||
msgstr "Επεξεργασία συστατικού συνταγής"
|
||||
|
||||
msgid "Are you sure to delete recipe \"%s\"?"
|
||||
msgstr "Είστε βέβαιοι ότι θα διαγράψετε τη συνταγή \"%s\";"
|
||||
msgid "Are you sure you want to delete recipe \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure to delete recipe ingredient \"%s\"?"
|
||||
msgstr "Είστε βέβαιοι ότι θα διαγράψετε το συστατικό συνταγής \"%s\";"
|
||||
msgid "Are you sure you want to delete recipe ingredient \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure to empty shopping list \"%s\"?"
|
||||
msgstr "Είστε βέβαιοι ότι αδειάζετε τη λίστα αγορών \"%s\";"
|
||||
msgid "Are you sure you want to empty shopping list \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Clear list"
|
||||
msgstr "Σαφή κατάλογο"
|
||||
@@ -499,14 +497,9 @@ msgid "Put missing amount on shopping list"
|
||||
msgstr "Τοποθετήστε το ποσό που λείπει στη λίστα αγορών"
|
||||
|
||||
msgid ""
|
||||
"Are you sure to put all missing ingredients for recipe \"%s\" on the "
|
||||
"shopping list?"
|
||||
"Are you sure you want to put all missing ingredients for recipe \"%s\" on "
|
||||
"the shopping list?"
|
||||
msgstr ""
|
||||
"ΠοσόΕίστε βέβαιοι ότι θα βάλετε όλα τα συστατικά που λείπουν για τη συνταγή "
|
||||
"\"%s\" στη λίστα αγορών;"
|
||||
|
||||
msgid "Added for recipe %s"
|
||||
msgstr "Προστέθηκε για τη συνταγή %s"
|
||||
|
||||
msgid "Manage users"
|
||||
msgstr "Διαχείριση χρηστών"
|
||||
@@ -517,8 +510,8 @@ msgstr "Χρήστης"
|
||||
msgid "Users"
|
||||
msgstr "Χρήστες"
|
||||
|
||||
msgid "Are you sure to delete user \"%s\"?"
|
||||
msgstr "Είστε βέβαιοι ότι θα διαγράψετε τον χρήστη \"%s\";"
|
||||
msgid "Are you sure you want to delete user \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create user"
|
||||
msgstr "Δημιουργία χρήστη"
|
||||
@@ -614,12 +607,13 @@ msgid "Only check if any amount is in stock"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Are you sure to consume all ingredients needed by recipe \"%s\" (ingredients"
|
||||
" marked with \"only check if any amount is in stock\" will be ignored)?"
|
||||
"Are you sure you want to consume all ingredients needed by recipe \"%s\" "
|
||||
"(ingredients marked with \"only check if any amount is in stock\" will be "
|
||||
"ignored)?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Removed all ingredients of recipe \"%s\" from stock"
|
||||
msgstr "Καταργήθηκαν όλα τα συστατικά της συνταγής \"%s\" από το απόθεμα"
|
||||
msgid "Removed all in stock ingredients needed by recipe \"%s\" from stock"
|
||||
msgstr ""
|
||||
|
||||
msgid "Consume all ingredients needed by this recipe"
|
||||
msgstr "Καταναλώστε όλα τα συστατικά που απαιτούνται από αυτήν τη συνταγή"
|
||||
@@ -669,8 +663,8 @@ msgstr "Κατηγορία"
|
||||
msgid "Edit task"
|
||||
msgstr "Επεξεργασία εργασίας"
|
||||
|
||||
msgid "Are you sure to delete task \"%s\"?"
|
||||
msgstr "Είστε βέβαιοι ότι θα διαγράψετε την εργασία \"%s\";"
|
||||
msgid "Are you sure you want to delete task \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "%s task is due to be done"
|
||||
msgid_plural "%s tasks are due to be done"
|
||||
@@ -703,8 +697,8 @@ msgstr "Επεξεργασία ομάδας προϊόντων"
|
||||
msgid "Product group"
|
||||
msgstr "Ομάδα προϊόντων"
|
||||
|
||||
msgid "Are you sure to delete product group \"%s\"?"
|
||||
msgstr "Είστε βέβαιοι ότι θα διαγράψετε την ομάδα προϊόντων \"%s\";"
|
||||
msgid "Are you sure you want to delete product group \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Stay logged in permanently"
|
||||
msgstr "Μείνετε μόνιμα συνδεδεμένοι"
|
||||
@@ -873,7 +867,9 @@ msgid "Not opened"
|
||||
msgstr "Δεν άνοιξε"
|
||||
|
||||
msgid "Opened"
|
||||
msgstr "Άνοιξε"
|
||||
msgid_plural "Opened"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
msgid "%s opened"
|
||||
msgstr "Το %s άνοιξε"
|
||||
@@ -1046,8 +1042,8 @@ msgstr "Ρυθμίσεις εργασιών"
|
||||
msgid "Create shopping list"
|
||||
msgstr "Δημιουργία λίστας αγορών"
|
||||
|
||||
msgid "Are you sure to delete shopping list \"%s\"?"
|
||||
msgstr "Είστε βέβαιοι ότι θα διαγράψετε τη λίστα αγορών \"%s\";"
|
||||
msgid "Are you sure you want to delete shopping list \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Average shelf life"
|
||||
msgstr "Μέση διάρκεια ζωής"
|
||||
@@ -1218,9 +1214,6 @@ msgstr "Ποτέ"
|
||||
msgid "Today"
|
||||
msgstr "Σήμερα"
|
||||
|
||||
msgid "Not all ingredients of recipe \"%s\" are in stock, nothing removed"
|
||||
msgstr "Δεν υπάρχουν όλα τα συστατικά της συνταγής \"%s\", τίποτα δεν αφαιρείται"
|
||||
|
||||
msgid "Undo task"
|
||||
msgstr ""
|
||||
|
||||
@@ -1258,8 +1251,8 @@ msgstr "Καταναλωμένο ποσό"
|
||||
msgid "Time of printing"
|
||||
msgstr "Ώρα εκτύπωσης"
|
||||
|
||||
msgid "Are you sure to delete equipment \"%s\"?"
|
||||
msgstr "Είστε βέβαιοι ότι θα διαγράψετε τον εξοπλισμό \"%s\";"
|
||||
msgid "Are you sure you want to delete equipment \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Parent product"
|
||||
msgstr "Γονικό προϊόν"
|
||||
@@ -1406,8 +1399,8 @@ msgstr "ΑΝΑΘΕΣΗ ΕΡΓΑΣΙΑΣ"
|
||||
msgid "Consume product on chore execution"
|
||||
msgstr "Καταναλώστε το προϊόν κατά την εκτέλεση της δουλειάς"
|
||||
|
||||
msgid "Are you sure to delete user field \"%s\"?"
|
||||
msgstr "Είστε βέβαιοι ότι θα διαγράψετε το πεδίο χρήστη \"%s\";"
|
||||
msgid "Are you sure you want to delete user field \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Userentities"
|
||||
msgstr "Χρήστες"
|
||||
@@ -1427,8 +1420,8 @@ msgstr "Επεξεργασία %s"
|
||||
msgid "Create %s"
|
||||
msgstr "Δημιουργία %s"
|
||||
|
||||
msgid "Are you sure to delete this userobject?"
|
||||
msgstr "Είστε βέβαιοι ότι διαγράψατε αυτό το αντικείμενο χρήστη;"
|
||||
msgid "Are you sure you want to delete this userobject?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Icon CSS class"
|
||||
msgstr "Εικονίδιο CSS τάξη"
|
||||
@@ -1516,8 +1509,8 @@ msgid ""
|
||||
"this product, means the sub product will never be missing, only this product"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure to remove this conversion?"
|
||||
msgstr "Είστε βέβαιοι ότι θα καταργήσετε αυτήν τη μετατροπή;"
|
||||
msgid "Are you sure you want to remove this conversion?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unit price"
|
||||
msgstr "Τιμή μονάδας"
|
||||
@@ -1534,8 +1527,8 @@ msgstr "Απεριόριστος"
|
||||
msgid "Clear"
|
||||
msgstr "Σαφή"
|
||||
|
||||
msgid "Are you sure to remove the included recipe \"%s\"?"
|
||||
msgstr "Είστε βέβαιοι ότι έχετε καταργήσει τη συνταγή \"%s\";"
|
||||
msgid "Are you sure you want to remove the included recipe \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Period interval"
|
||||
msgstr "Διάστημα περιόδου"
|
||||
@@ -1618,8 +1611,8 @@ msgstr "Δεν είναι δυνατή η αναίρεση αυτής της κ
|
||||
msgid "Booking does not exist or was already undone"
|
||||
msgstr "Η κράτηση δεν υπάρχει ή έχει ήδη αναιρεθεί"
|
||||
|
||||
msgid "Are you sure to delete API key \"%s\"?"
|
||||
msgstr "Είστε βέβαιοι ότι θα διαγράψετε το κλειδί API \"%s\";"
|
||||
msgid "Are you sure you want to delete API key \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add note"
|
||||
msgstr "Προσθήκη σημείωσης"
|
||||
@@ -1674,8 +1667,8 @@ msgstr "Αποψυχθεί"
|
||||
msgid "Frozen"
|
||||
msgstr "Παγωμένος"
|
||||
|
||||
msgid "Are you sure to delete userentity \"%s\"?"
|
||||
msgstr "Είστε βέβαιοι ότι θα διαγράψετε το userentity \"%s\";"
|
||||
msgid "Are you sure you want to delete userentity \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Shopping list settings"
|
||||
msgstr "Ρυθμίσεις λίστας αγορών"
|
||||
@@ -1686,9 +1679,6 @@ msgstr "Εμφάνιση ημερολογίου μηνιαίας προβολή
|
||||
msgid "Desired servings"
|
||||
msgstr "Επιθυμητές μερίδες"
|
||||
|
||||
msgid "Base: %s"
|
||||
msgstr "Βάση: %s"
|
||||
|
||||
msgid "Recipes settings"
|
||||
msgstr "Ρυθμίσεις συνταγών"
|
||||
|
||||
@@ -1772,7 +1762,7 @@ msgstr "Επεξεργασία Barcode"
|
||||
|
||||
msgid ""
|
||||
"Based on the prices of the default consume rule (Opened first, then first "
|
||||
"due first, then first in first out) for in-stock ingredients and on the last"
|
||||
"due first, then first in first out) for in stock ingredients and on the last"
|
||||
" price for missing ones"
|
||||
msgstr ""
|
||||
|
||||
@@ -1935,7 +1925,7 @@ msgid ""
|
||||
"the next due date in stock"
|
||||
msgstr ""
|
||||
|
||||
msgid "This is due earlier than already in-stock items"
|
||||
msgid "This is due earlier than already in stock items"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
@@ -1960,7 +1950,7 @@ msgstr ""
|
||||
msgid "Copy"
|
||||
msgstr "Αντιγραφή"
|
||||
|
||||
msgid "Are you sure to remove this barcode?"
|
||||
msgid "Are you sure you want to remove this barcode?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Due date type"
|
||||
@@ -2129,7 +2119,7 @@ msgstr ""
|
||||
msgid "Reset"
|
||||
msgstr "Επαναφορά"
|
||||
|
||||
msgid "Are you sure to reset the table options?"
|
||||
msgid "Are you sure you want to reset the table options?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hide/view columns"
|
||||
@@ -2191,7 +2181,7 @@ msgid "Link"
|
||||
msgstr "Σύνδεση"
|
||||
|
||||
msgid ""
|
||||
"The stock overview page lists all products which are currently in-stock or "
|
||||
"The stock overview page lists all products which are currently in stock or "
|
||||
"below their min. stock amount - enable this to hide this product there "
|
||||
"always"
|
||||
msgstr ""
|
||||
@@ -2264,7 +2254,7 @@ msgstr "Η εκτύπωση δεν είναι δυνατή"
|
||||
msgid "Only done items"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show only in-stock products"
|
||||
msgid "Show only in stock products"
|
||||
msgstr ""
|
||||
|
||||
msgid "Product description"
|
||||
@@ -2286,7 +2276,7 @@ msgstr ""
|
||||
msgid "When enabled, then this field must be filled on the destination form"
|
||||
msgstr ""
|
||||
|
||||
msgid "In-stock products"
|
||||
msgid "In stock products"
|
||||
msgstr ""
|
||||
|
||||
msgid "Timestamp"
|
||||
@@ -2367,13 +2357,13 @@ msgstr ""
|
||||
msgid "Edit meal plan section"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure to delete meal plan section \"%s\"?"
|
||||
msgid "Are you sure you want to delete meal plan section \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Section"
|
||||
msgstr "Τμήμα"
|
||||
|
||||
msgid "Are you sure to empty the shopping list?"
|
||||
msgid "Are you sure you want to empty the shopping list?"
|
||||
msgstr ""
|
||||
|
||||
msgid "This is the default which will be prefilled on purchase"
|
||||
@@ -2572,7 +2562,7 @@ msgstr ""
|
||||
msgid "QU conversions resolved"
|
||||
msgstr ""
|
||||
|
||||
msgid "Product specifc QU conversions"
|
||||
msgid "Product specific QU conversions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Default quantity unit consume"
|
||||
@@ -2643,7 +2633,7 @@ msgstr ""
|
||||
msgid "Stock report"
|
||||
msgstr ""
|
||||
|
||||
msgid "Out-of-stock products"
|
||||
msgid "Out of stock products"
|
||||
msgstr ""
|
||||
|
||||
msgid "Quantity unit for prices"
|
||||
@@ -2658,3 +2648,62 @@ msgid "This means 1 label will be printed"
|
||||
msgid_plural "This means %1$s labels will be printed"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
msgid "External barcode lookup"
|
||||
msgstr ""
|
||||
|
||||
msgid "Error while executing the barcode lookup plugin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nothing was found for the given barcode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configure colors"
|
||||
msgstr ""
|
||||
|
||||
msgid "Swap track next schedule / track now buttons"
|
||||
msgstr ""
|
||||
|
||||
msgid "Scheduled tracking time"
|
||||
msgstr ""
|
||||
|
||||
msgid "Time of tracking"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show all out of stock products"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"By default the stock overview page lists all products which are currently in"
|
||||
" stock or below their min. stock amount - when this is enabled, all (active)"
|
||||
" products are always shown"
|
||||
msgstr ""
|
||||
|
||||
msgid "No price information is available for at least one ingredient"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"For ingredients that are only partially in stock, the in stock amount will "
|
||||
"be consumed."
|
||||
msgstr ""
|
||||
|
||||
msgid "Can't be opened"
|
||||
msgstr ""
|
||||
|
||||
msgid "Default purchase price type"
|
||||
msgstr ""
|
||||
|
||||
msgid "This will be used as the default price type selection on purchase"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unspecified"
|
||||
msgstr ""
|
||||
|
||||
msgid "Round up quantity amounts to the nearest whole number"
|
||||
msgstr ""
|
||||
|
||||
msgid "Stock actions"
|
||||
msgstr ""
|
||||
|
||||
msgid "List actions"
|
||||
msgstr ""
|
||||
|
@@ -35,6 +35,10 @@ msgstr "αριθμός-ακέραιο"
|
||||
msgid "number-decimal"
|
||||
msgstr "αριθμός-δεκαδικός"
|
||||
|
||||
# Number (currency)
|
||||
msgid "number-currency"
|
||||
msgstr ""
|
||||
|
||||
# Date (without time)
|
||||
msgid "date"
|
||||
msgstr "ημερομηνία"
|
||||
|
@@ -1,292 +0,0 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"Last-Translator: Translation migration from old PHP array files\n"
|
||||
"Language-Team: http://www.transifex.com/grocy/grocy/language/en\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"Language: en\n"
|
||||
"X-Domain: grocy/demo_data\n"
|
||||
|
||||
msgid "Cookies"
|
||||
msgstr "Cookies"
|
||||
|
||||
msgid "Chocolate"
|
||||
msgstr "Chocolate"
|
||||
|
||||
msgid "Pantry"
|
||||
msgstr "Pantry"
|
||||
|
||||
msgid "Candy cupboard"
|
||||
msgstr "Candy cupboard"
|
||||
|
||||
msgid "Tinned food cupboard"
|
||||
msgstr "Tinned food cupboard"
|
||||
|
||||
msgid "Fridge"
|
||||
msgstr "Fridge"
|
||||
|
||||
msgid "Piece"
|
||||
msgstr "Piece"
|
||||
|
||||
msgid "Pieces"
|
||||
msgstr "Pieces"
|
||||
|
||||
msgid "Pack"
|
||||
msgstr "Pack"
|
||||
|
||||
msgid "Packs"
|
||||
msgstr "Packs"
|
||||
|
||||
msgid "Glass"
|
||||
msgstr "Glass"
|
||||
|
||||
msgid "Glasses"
|
||||
msgstr "Glasses"
|
||||
|
||||
msgid "Tin"
|
||||
msgstr "Tin"
|
||||
|
||||
msgid "Tins"
|
||||
msgstr "Tins"
|
||||
|
||||
msgid "Can"
|
||||
msgstr "Can"
|
||||
|
||||
msgid "Cans"
|
||||
msgstr "Cans"
|
||||
|
||||
msgid "Bunch"
|
||||
msgstr "Bunch"
|
||||
|
||||
msgid "Bunches"
|
||||
msgstr "Bunches"
|
||||
|
||||
msgid "Gummy bears"
|
||||
msgstr "Gummy bears"
|
||||
|
||||
msgid "Crisps"
|
||||
msgstr "Crisps"
|
||||
|
||||
msgid "Eggs"
|
||||
msgstr "Eggs"
|
||||
|
||||
msgid "Noodles"
|
||||
msgstr "Noodles"
|
||||
|
||||
msgid "Pickles"
|
||||
msgstr "Pickles"
|
||||
|
||||
msgid "Gulash soup"
|
||||
msgstr "Gulash soup"
|
||||
|
||||
msgid "Yogurt"
|
||||
msgstr "Yogurt"
|
||||
|
||||
msgid "Cheese"
|
||||
msgstr "Cheese"
|
||||
|
||||
msgid "Cold cuts"
|
||||
msgstr "Cold cuts"
|
||||
|
||||
msgid "Paprika"
|
||||
msgstr "Paprika"
|
||||
|
||||
msgid "Cucumber"
|
||||
msgstr "Cucumber"
|
||||
|
||||
msgid "Radish"
|
||||
msgstr "Radish"
|
||||
|
||||
msgid "Tomato"
|
||||
msgstr "Tomato"
|
||||
|
||||
msgid "Changed towels in the bathroom"
|
||||
msgstr "Changed towels in the bathroom"
|
||||
|
||||
msgid "Cleaned the kitchen floor"
|
||||
msgstr "Cleaned the kitchen floor"
|
||||
|
||||
msgid "Warranty ends"
|
||||
msgstr "Warranty ends"
|
||||
|
||||
msgid "TV remote control"
|
||||
msgstr "TV remote control"
|
||||
|
||||
msgid "Alarm clock"
|
||||
msgstr "Alarm clock"
|
||||
|
||||
msgid "Heat remote control"
|
||||
msgstr "Heat remote control"
|
||||
|
||||
msgid "Lawn mowed in the garden"
|
||||
msgstr "Lawn mowed in the garden"
|
||||
|
||||
msgid "Some good snacks"
|
||||
msgstr "Some good snacks"
|
||||
|
||||
msgid "Pizza dough"
|
||||
msgstr "Pizza dough"
|
||||
|
||||
msgid "Sieved tomatoes"
|
||||
msgstr "Sieved tomatoes"
|
||||
|
||||
msgid "Salami"
|
||||
msgstr "Salami"
|
||||
|
||||
msgid "Toast"
|
||||
msgstr "Toast"
|
||||
|
||||
msgid "Minced meat"
|
||||
msgstr "Minced meat"
|
||||
|
||||
msgid "Pizza"
|
||||
msgstr "Pizza"
|
||||
|
||||
msgid "Spaghetti bolognese"
|
||||
msgstr "Spaghetti bolognese"
|
||||
|
||||
msgid "Sandwiches"
|
||||
msgstr "Sandwiches"
|
||||
|
||||
msgid "English"
|
||||
msgstr "English"
|
||||
|
||||
msgid "German"
|
||||
msgstr "German"
|
||||
|
||||
msgid "Italian"
|
||||
msgstr "Italian"
|
||||
|
||||
msgid "Demo in different language"
|
||||
msgstr "Demo in different language"
|
||||
|
||||
msgid "This is the note content of the recipe ingredient"
|
||||
msgstr "This is the note content of the recipe ingredient"
|
||||
|
||||
msgid "Demo User"
|
||||
msgstr "Demo User"
|
||||
|
||||
msgid "Gram"
|
||||
msgstr "Gram"
|
||||
|
||||
msgid "Grams"
|
||||
msgstr "Grams"
|
||||
|
||||
msgid "Flour"
|
||||
msgstr "Flour"
|
||||
|
||||
msgid "Pancakes"
|
||||
msgstr "Pancakes"
|
||||
|
||||
msgid "Sugar"
|
||||
msgstr "Sugar"
|
||||
|
||||
msgid "Home"
|
||||
msgstr "Home"
|
||||
|
||||
msgid "Life"
|
||||
msgstr "Life"
|
||||
|
||||
msgid "Projects"
|
||||
msgstr "Projects"
|
||||
|
||||
msgid "Repair the garage door"
|
||||
msgstr "Repair the garage door"
|
||||
|
||||
msgid "Fork and improve grocy"
|
||||
msgstr "Fork and improve grocy"
|
||||
|
||||
msgid "Find a solution for what to do when I forget the door keys"
|
||||
msgstr "Find a solution for what to do when I forget the door keys"
|
||||
|
||||
msgid "Sweets"
|
||||
msgstr "Sweets"
|
||||
|
||||
msgid "Bakery products"
|
||||
msgstr "Bakery products"
|
||||
|
||||
msgid "Tinned food"
|
||||
msgstr "Tinned food"
|
||||
|
||||
msgid "Butchery products"
|
||||
msgstr "Butchery products"
|
||||
|
||||
msgid "Vegetables/Fruits"
|
||||
msgstr "Vegetables/Fruits"
|
||||
|
||||
msgid "Refrigerated products"
|
||||
msgstr "Refrigerated products"
|
||||
|
||||
msgid "Coffee machine"
|
||||
msgstr "Coffee machine"
|
||||
|
||||
msgid "Dishwasher"
|
||||
msgstr "Dishwasher"
|
||||
|
||||
msgid "Liter"
|
||||
msgstr "Liter"
|
||||
|
||||
msgid "Liters"
|
||||
msgstr "Liters"
|
||||
|
||||
msgid "Bottle"
|
||||
msgstr "Bottle"
|
||||
|
||||
msgid "Bottles"
|
||||
msgstr "Bottles"
|
||||
|
||||
msgid "Milk"
|
||||
msgstr "Milk"
|
||||
|
||||
msgid "Chocolate sauce"
|
||||
msgstr "Chocolate sauce"
|
||||
|
||||
msgid "Milliliters"
|
||||
msgstr "Milliliters"
|
||||
|
||||
msgid "Milliliter"
|
||||
msgstr "Milliliter"
|
||||
|
||||
msgid "Bottom"
|
||||
msgstr "Bottom"
|
||||
|
||||
msgid "Topping"
|
||||
msgstr "Topping"
|
||||
|
||||
msgid "French"
|
||||
msgstr "French"
|
||||
|
||||
msgid "Turkish"
|
||||
msgstr "Turkish"
|
||||
|
||||
msgid "Spanish"
|
||||
msgstr "Spanish"
|
||||
|
||||
msgid "Russian"
|
||||
msgstr "Russian"
|
||||
|
||||
msgid "The thing which happens on the 5th of every month"
|
||||
msgstr "The thing which happens on the 5th of every month"
|
||||
|
||||
msgid "The thing which happens daily"
|
||||
msgstr "The thing which happens daily"
|
||||
|
||||
msgid "The thing which happens on Mondays and Wednesdays"
|
||||
msgstr "The thing which happens on Mondays and Wednesdays"
|
||||
|
||||
msgid "Swedish"
|
||||
msgstr "Swedish"
|
||||
|
||||
msgid "Polish"
|
||||
msgstr "Polish"
|
||||
|
||||
msgid "DemoSupermarket1"
|
||||
msgstr "Walmart"
|
||||
|
||||
msgid "DemoSupermarket2"
|
||||
msgstr "Kroger"
|
@@ -95,3 +95,18 @@ msgstr "Finnish"
|
||||
|
||||
msgid "ca"
|
||||
msgstr "Catalan"
|
||||
|
||||
msgid "lt"
|
||||
msgstr "Lithuanian"
|
||||
|
||||
msgid "uk"
|
||||
msgstr "Ukrainian"
|
||||
|
||||
msgid "ro_RO"
|
||||
msgstr "Romanian"
|
||||
|
||||
msgid "et_EE"
|
||||
msgstr "Estonian"
|
||||
|
||||
msgid "bg_BG"
|
||||
msgstr "Bulgarian"
|
||||
|
@@ -24,6 +24,9 @@ msgstr "Number (integral)"
|
||||
msgid "number-decimal"
|
||||
msgstr "Number (decimal)"
|
||||
|
||||
msgid "number-currency"
|
||||
msgstr "Number (currency)"
|
||||
|
||||
msgid "date"
|
||||
msgstr "Date (without time)"
|
||||
|
||||
|
@@ -6,6 +6,7 @@
|
||||
# Chris H <cjh861@outlook.com>, 2021
|
||||
# David Knapman <dai.knapz@gmail.com>, 2021
|
||||
# Johnnie Blows, 2022
|
||||
# Andi Chandler <andi@gowling.com>, 2023
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -13,7 +14,7 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01 17:42+0000\n"
|
||||
"Last-Translator: Johnnie Blows, 2022\n"
|
||||
"Last-Translator: Andi Chandler <andi@gowling.com>, 2023\n"
|
||||
"Language-Team: English (United Kingdom) (https://app.transifex.com/grocy/teams/93189/en_GB/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -386,33 +387,36 @@ msgid "Slovenian"
|
||||
msgstr "Slovenian"
|
||||
|
||||
msgid "Lithuanian"
|
||||
msgstr ""
|
||||
msgstr "Lithuanian"
|
||||
|
||||
msgid "Ukrainian"
|
||||
msgstr ""
|
||||
msgstr "Ukrainian"
|
||||
|
||||
msgid "Kilogram"
|
||||
msgid_plural "Kilograms"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "Kilogram"
|
||||
msgstr[1] "Kilograms"
|
||||
|
||||
msgid "Romanian"
|
||||
msgstr ""
|
||||
msgstr "Romanian"
|
||||
|
||||
msgid "Pint"
|
||||
msgstr ""
|
||||
msgstr "Pint"
|
||||
|
||||
msgid "Beverages"
|
||||
msgstr ""
|
||||
msgstr "Beverages"
|
||||
|
||||
msgid "Ice Cream"
|
||||
msgstr ""
|
||||
msgstr "Ice Cream"
|
||||
|
||||
msgid "Soda"
|
||||
msgstr ""
|
||||
msgstr "Soda"
|
||||
|
||||
msgid "Beer"
|
||||
msgstr ""
|
||||
msgstr "Beer"
|
||||
|
||||
msgid "Estonian"
|
||||
msgstr "Estonian"
|
||||
|
||||
msgid "Bulgarian"
|
||||
msgstr ""
|
||||
|
@@ -95,3 +95,18 @@ msgstr "Finnish"
|
||||
|
||||
msgid "ca"
|
||||
msgstr "Catalan"
|
||||
|
||||
msgid "lt"
|
||||
msgstr "Lithuanian"
|
||||
|
||||
msgid "uk"
|
||||
msgstr "Ukrainian"
|
||||
|
||||
msgid "ro_RO"
|
||||
msgstr "Romanian"
|
||||
|
||||
msgid "et_EE"
|
||||
msgstr "Estonian"
|
||||
|
||||
msgid "bg_BG"
|
||||
msgstr "Bulgarian"
|
||||
|
@@ -5,7 +5,8 @@
|
||||
# duck. <me@duck.me.uk>, 2020
|
||||
# John Coles <john@johncoles.com>, 2020
|
||||
# w ralb <g.frcy.trnsfx@barlowhome.org>, 2021
|
||||
# David Knapman <dai.knapz@gmail.com>, 2021
|
||||
# George Aston, 2024
|
||||
# Andi Chandler <andi@gowling.com>, 2025
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -13,7 +14,7 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01 17:42+0000\n"
|
||||
"Last-Translator: David Knapman <dai.knapz@gmail.com>, 2021\n"
|
||||
"Last-Translator: Andi Chandler <andi@gowling.com>, 2025\n"
|
||||
"Language-Team: English (United Kingdom) (https://app.transifex.com/grocy/teams/93189/en_GB/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -38,7 +39,7 @@ msgstr[1] "within the next %s days"
|
||||
msgid "%s product is already expired"
|
||||
msgid_plural "%s products are already expired"
|
||||
msgstr[0] "%s product is already expired"
|
||||
msgstr[1] "%s products are already expired"
|
||||
msgstr[1] "%s products have already expired"
|
||||
|
||||
msgid "%s product is overdue"
|
||||
msgid_plural "%s products are overdue"
|
||||
@@ -282,8 +283,8 @@ msgstr "Password"
|
||||
msgid "Invalid credentials, please try again"
|
||||
msgstr "Invalid credentials, please try again"
|
||||
|
||||
msgid "Are you sure to delete battery \"%s\"?"
|
||||
msgstr "Are you sure to delete battery \"%s\"?"
|
||||
msgid "Are you sure you want to delete battery \"%s\"?"
|
||||
msgstr "Are you sure you want to delete battery \"%s\"?"
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Yes"
|
||||
@@ -291,8 +292,8 @@ msgstr "Yes"
|
||||
msgid "No"
|
||||
msgstr "No"
|
||||
|
||||
msgid "Are you sure to delete chore \"%s\"?"
|
||||
msgstr "Are you sure to delete chore \"%s\"?"
|
||||
msgid "Are you sure you want to delete chore \"%s\"?"
|
||||
msgstr "Are you sure you want to delete chore \"%s\"?"
|
||||
|
||||
msgid "\"%s\" could not be resolved to a product, how do you want to proceed?"
|
||||
msgstr "\"%s\" could not be resolved to a product, how do you want to proceed?"
|
||||
@@ -312,17 +313,17 @@ msgstr "Add as barcode to existing product"
|
||||
msgid "Add as new product and prefill barcode"
|
||||
msgstr "Add as new product and prefill barcode"
|
||||
|
||||
msgid "Are you sure to delete quantity unit \"%s\"?"
|
||||
msgstr "Are you sure to delete quantity unit \"%s\"?"
|
||||
msgid "Are you sure you want to delete quantity unit \"%s\"?"
|
||||
msgstr "Are you sure you want to delete quantity unit \"%s\"?"
|
||||
|
||||
msgid "Are you sure to delete product \"%s\"?"
|
||||
msgstr "Are you sure to delete product \"%s\"?"
|
||||
msgid "Are you sure you want to delete product \"%s\"?"
|
||||
msgstr "Are you sure you want to delete product \"%s\"?"
|
||||
|
||||
msgid "Are you sure to delete location \"%s\"?"
|
||||
msgstr "Are you sure to delete location \"%s\"?"
|
||||
msgid "Are you sure you want to delete location \"%s\"?"
|
||||
msgstr "Are you sure you want to delete location \"%s\"?"
|
||||
|
||||
msgid "Are you sure to delete store \"%s\"?"
|
||||
msgstr "Are you sure to delete shop \"%s\"?"
|
||||
msgid "Are you sure you want to delete store \"%s\"?"
|
||||
msgstr "Are you sure you want to delete store \"%s\"?"
|
||||
|
||||
msgid "Manage API keys"
|
||||
msgstr "Manage API keys"
|
||||
@@ -358,14 +359,11 @@ msgid "Removed %1$s of %2$s from stock"
|
||||
msgstr "Removed %1$s of %2$s from stock"
|
||||
|
||||
msgid "About Grocy"
|
||||
msgstr ""
|
||||
msgstr "About Grocy"
|
||||
|
||||
msgid "Close"
|
||||
msgstr "Close"
|
||||
|
||||
msgid "Released on"
|
||||
msgstr "Released on"
|
||||
|
||||
msgid "Added %1$s of %2$s to stock"
|
||||
msgstr "Added %1$s of %2$s to stock"
|
||||
|
||||
@@ -438,14 +436,14 @@ msgstr "Add recipe ingredient"
|
||||
msgid "Edit recipe ingredient"
|
||||
msgstr "Edit recipe ingredient"
|
||||
|
||||
msgid "Are you sure to delete recipe \"%s\"?"
|
||||
msgstr "Are you sure to delete recipe \"%s\"?"
|
||||
msgid "Are you sure you want to delete recipe \"%s\"?"
|
||||
msgstr "Are you sure you want to delete recipe \"%s\"?"
|
||||
|
||||
msgid "Are you sure to delete recipe ingredient \"%s\"?"
|
||||
msgstr "Are you sure to delete recipe ingredient \"%s\"?"
|
||||
msgid "Are you sure you want to delete recipe ingredient \"%s\"?"
|
||||
msgstr "Are you sure you want to delete ingredient \"%s\"?"
|
||||
|
||||
msgid "Are you sure to empty shopping list \"%s\"?"
|
||||
msgstr "Are you sure to empty shopping list \"%s\"?"
|
||||
msgid "Are you sure you want to empty shopping list \"%s\"?"
|
||||
msgstr "Are you sure you want to empty shopping list \"%s\"?"
|
||||
|
||||
msgid "Clear list"
|
||||
msgstr "Clear list"
|
||||
@@ -490,14 +488,11 @@ msgid "Put missing amount on shopping list"
|
||||
msgstr "Put missing amount on shopping list"
|
||||
|
||||
msgid ""
|
||||
"Are you sure to put all missing ingredients for recipe \"%s\" on the "
|
||||
"shopping list?"
|
||||
"Are you sure you want to put all missing ingredients for recipe \"%s\" on "
|
||||
"the shopping list?"
|
||||
msgstr ""
|
||||
"Are you sure to put all missing ingredients for recipe \"%s\" on the "
|
||||
"shopping list?"
|
||||
|
||||
msgid "Added for recipe %s"
|
||||
msgstr "Added for recipe %s"
|
||||
"Are you sure you want to put all missing ingredients for recipe \"%s\" on "
|
||||
"the shopping list?"
|
||||
|
||||
msgid "Manage users"
|
||||
msgstr "Manage users"
|
||||
@@ -508,8 +503,8 @@ msgstr "User"
|
||||
msgid "Users"
|
||||
msgstr "Users"
|
||||
|
||||
msgid "Are you sure to delete user \"%s\"?"
|
||||
msgstr "Are you sure to delete user \"%s\"?"
|
||||
msgid "Are you sure you want to delete user \"%s\"?"
|
||||
msgstr "Are you sure you want to delete user \"%s\"?"
|
||||
|
||||
msgid "Create user"
|
||||
msgstr "Create user"
|
||||
@@ -603,14 +598,16 @@ msgid "Only check if any amount is in stock"
|
||||
msgstr "Only check if any amount is in stock"
|
||||
|
||||
msgid ""
|
||||
"Are you sure to consume all ingredients needed by recipe \"%s\" (ingredients"
|
||||
" marked with \"only check if any amount is in stock\" will be ignored)?"
|
||||
"Are you sure you want to consume all ingredients needed by recipe \"%s\" "
|
||||
"(ingredients marked with \"only check if any amount is in stock\" will be "
|
||||
"ignored)?"
|
||||
msgstr ""
|
||||
"Are you sure to consume all ingredients needed by recipe \"%s\" (ingredients"
|
||||
" marked with \"only check if any amount is in stock\" will be ignored)?"
|
||||
"Are you sure you want to consume all ingredients needed by this recipe "
|
||||
"\"%s\"? (Ingredients marked with \"only check if any amount is in stock\" "
|
||||
"will be ignored)"
|
||||
|
||||
msgid "Removed all ingredients of recipe \"%s\" from stock"
|
||||
msgstr "Removed all ingredients of recipe \"%s\" from stock"
|
||||
msgid "Removed all in stock ingredients needed by recipe \"%s\" from stock"
|
||||
msgstr "Removed all in stock ingredients needed by recipe \"%s\" from stock"
|
||||
|
||||
msgid "Consume all ingredients needed by this recipe"
|
||||
msgstr "Consume all ingredients needed by this recipe"
|
||||
@@ -660,8 +657,8 @@ msgstr "Category"
|
||||
msgid "Edit task"
|
||||
msgstr "Edit task"
|
||||
|
||||
msgid "Are you sure to delete task \"%s\"?"
|
||||
msgstr "Are you sure to delete task \"%s\"?"
|
||||
msgid "Are you sure you want to delete task \"%s\"?"
|
||||
msgstr "Are you sure you want to delete task \"%s\"?"
|
||||
|
||||
msgid "%s task is due to be done"
|
||||
msgid_plural "%s tasks are due to be done"
|
||||
@@ -694,8 +691,8 @@ msgstr "Edit product group"
|
||||
msgid "Product group"
|
||||
msgstr "Product group"
|
||||
|
||||
msgid "Are you sure to delete product group \"%s\"?"
|
||||
msgstr "Are you sure to delete product group \"%s\"?"
|
||||
msgid "Are you sure you want to delete product group \"%s\"?"
|
||||
msgstr "Are you sure you want to delete product group \"%s\"?"
|
||||
|
||||
msgid "Stay logged in permanently"
|
||||
msgstr "Stay logged in permanently"
|
||||
@@ -848,6 +845,8 @@ msgid ""
|
||||
"The first item in this list would be picked by the default rule consume rule"
|
||||
" (Opened first, then first due first, then first in first out)"
|
||||
msgstr ""
|
||||
"The first item in this list would be picked by the default rule consume rule"
|
||||
" (Opened first, then first due first, then first in first out)"
|
||||
|
||||
msgid "Mark %1$s of %2$s as open"
|
||||
msgstr "Mark %1$s of %2$s as open"
|
||||
@@ -862,7 +861,9 @@ msgid "Not opened"
|
||||
msgstr "Not opened"
|
||||
|
||||
msgid "Opened"
|
||||
msgstr "Opened"
|
||||
msgid_plural "Opened"
|
||||
msgstr[0] "Opened"
|
||||
msgstr[1] "Opened"
|
||||
|
||||
msgid "%s opened"
|
||||
msgstr "%s opened"
|
||||
@@ -1031,8 +1032,8 @@ msgstr "Tasks settings"
|
||||
msgid "Create shopping list"
|
||||
msgstr "Create shopping list"
|
||||
|
||||
msgid "Are you sure to delete shopping list \"%s\"?"
|
||||
msgstr "Are you sure to delete shopping list \"%s\"?"
|
||||
msgid "Are you sure you want to delete shopping list \"%s\"?"
|
||||
msgstr "Are you sure you want to delete shopping list \"%s\"?"
|
||||
|
||||
msgid "Average shelf life"
|
||||
msgstr "Average shelf life"
|
||||
@@ -1198,9 +1199,6 @@ msgstr "Never"
|
||||
msgid "Today"
|
||||
msgstr "Today"
|
||||
|
||||
msgid "Not all ingredients of recipe \"%s\" are in stock, nothing removed"
|
||||
msgstr "Not all ingredients of recipe \"%s\" are in stock, nothing removed"
|
||||
|
||||
msgid "Undo task"
|
||||
msgstr "Undo task"
|
||||
|
||||
@@ -1239,8 +1237,8 @@ msgstr "Consumend amount"
|
||||
msgid "Time of printing"
|
||||
msgstr "Time of printing"
|
||||
|
||||
msgid "Are you sure to delete equipment \"%s\"?"
|
||||
msgstr "Are you sure to delete equipment \"%s\"?"
|
||||
msgid "Are you sure you want to delete equipment \"%s\"?"
|
||||
msgstr "Are you sure you want to delete equipment \"%s\"?"
|
||||
|
||||
msgid "Parent product"
|
||||
msgstr "Parent product"
|
||||
@@ -1304,7 +1302,11 @@ msgid_plural ""
|
||||
"This means the next execution of this chore is scheduled at the same time "
|
||||
"(based on the start date) every %s days"
|
||||
msgstr[0] ""
|
||||
"This means the next execution of this chore is scheduled at the same time "
|
||||
"(based on the start date) every day"
|
||||
msgstr[1] ""
|
||||
"This means the next execution of this chore is scheduled at the same time "
|
||||
"(based on the start date) every %s days"
|
||||
|
||||
msgid ""
|
||||
"This means the next execution of this chore is scheduled %s hour after the "
|
||||
@@ -1313,7 +1315,11 @@ msgid_plural ""
|
||||
"This means the next execution of this chore is scheduled %s hours after the "
|
||||
"last execution"
|
||||
msgstr[0] ""
|
||||
"This means the next execution of this chore is scheduled %s hour after the "
|
||||
"last execution"
|
||||
msgstr[1] ""
|
||||
"This means the next execution of this chore is scheduled %s hours after the "
|
||||
"last execution"
|
||||
|
||||
msgid ""
|
||||
"This means the next execution of this chore is scheduled every week on the "
|
||||
@@ -1322,7 +1328,11 @@ msgid_plural ""
|
||||
"This means the next execution of this chore is scheduled every %s weeks on "
|
||||
"the selected weekdays"
|
||||
msgstr[0] ""
|
||||
"This means the next execution of this chore is scheduled every week on the "
|
||||
"selected weekdays"
|
||||
msgstr[1] ""
|
||||
"This means the next execution of this chore is scheduled every %s weeks on "
|
||||
"the selected weekdays"
|
||||
|
||||
msgid ""
|
||||
"This means the next execution of this chore is scheduled on the selected day"
|
||||
@@ -1331,7 +1341,11 @@ msgid_plural ""
|
||||
"This means the next execution of this chore is scheduled on the selected day"
|
||||
" every %s months"
|
||||
msgstr[0] ""
|
||||
"This means the next execution of this chore is scheduled on the selected day"
|
||||
" every month"
|
||||
msgstr[1] ""
|
||||
"This means the next execution of this chore is scheduled on the selected day"
|
||||
" every %s months"
|
||||
|
||||
msgid "This means the next execution of this chore is not scheduled"
|
||||
msgstr "This means the next execution of this chore is not scheduled"
|
||||
@@ -1381,8 +1395,8 @@ msgstr "Assignment"
|
||||
msgid "Consume product on chore execution"
|
||||
msgstr "Consume product on chore execution"
|
||||
|
||||
msgid "Are you sure to delete user field \"%s\"?"
|
||||
msgstr "Are you sure to delete user field \"%s\"?"
|
||||
msgid "Are you sure you want to delete user field \"%s\"?"
|
||||
msgstr "Are you sure you want to delete user field \"%s\"?"
|
||||
|
||||
msgid "Userentities"
|
||||
msgstr "Userentities"
|
||||
@@ -1402,8 +1416,8 @@ msgstr "Edit %s"
|
||||
msgid "Create %s"
|
||||
msgstr "Create %s"
|
||||
|
||||
msgid "Are you sure to delete this userobject?"
|
||||
msgstr "Are you sure to delete this userobject?"
|
||||
msgid "Are you sure you want to delete this userobject?"
|
||||
msgstr "Are you sure you want to delete this userobject?"
|
||||
|
||||
msgid "Icon CSS class"
|
||||
msgstr "Icon CSS class"
|
||||
@@ -1438,7 +1452,7 @@ msgid "Price factor"
|
||||
msgstr "Price factor"
|
||||
|
||||
msgid "Do you find Grocy useful?"
|
||||
msgstr ""
|
||||
msgstr "Do you find Grocy useful?"
|
||||
|
||||
msgid "Say thanks"
|
||||
msgstr "Say thanks"
|
||||
@@ -1456,7 +1470,7 @@ msgid "Output"
|
||||
msgstr "Output"
|
||||
|
||||
msgid "Energy"
|
||||
msgstr ""
|
||||
msgstr "Energy"
|
||||
|
||||
msgid "Per stock quantity unit"
|
||||
msgstr "Per stock quantity unit"
|
||||
@@ -1489,9 +1503,11 @@ msgid ""
|
||||
"If enabled, the min. stock amount of sub products will be accumulated into "
|
||||
"this product, means the sub product will never be missing, only this product"
|
||||
msgstr ""
|
||||
"If enabled, the min. stock amount of sub products will be accumulated into "
|
||||
"this product, means the sub product will never be missing, only this product"
|
||||
|
||||
msgid "Are you sure to remove this conversion?"
|
||||
msgstr "Are you sure to remove this conversion?"
|
||||
msgid "Are you sure you want to remove this conversion?"
|
||||
msgstr "Are you sure you want to remove this conversion?"
|
||||
|
||||
msgid "Unit price"
|
||||
msgstr "Unit price"
|
||||
@@ -1508,8 +1524,8 @@ msgstr "Unlimited"
|
||||
msgid "Clear"
|
||||
msgstr "Clear"
|
||||
|
||||
msgid "Are you sure to remove the included recipe \"%s\"?"
|
||||
msgstr "Are you sure to remove the included recipe \"%s\"?"
|
||||
msgid "Are you sure you want to remove the included recipe \"%s\"?"
|
||||
msgstr "Are you sure you want to remove the included recipe \"%s\"?"
|
||||
|
||||
msgid "Period interval"
|
||||
msgstr "Period interval"
|
||||
@@ -1521,7 +1537,11 @@ msgid_plural ""
|
||||
"This means the next execution of this chore is scheduled every %s years on "
|
||||
"the same day (based on the start date)"
|
||||
msgstr[0] ""
|
||||
"This means the next execution of this chore is scheduled every year on the "
|
||||
"same day (based on the start date)"
|
||||
msgstr[1] ""
|
||||
"This means the next execution of this chore is scheduled every %s years on "
|
||||
"the same day (based on the start date)"
|
||||
|
||||
msgid "Transfer"
|
||||
msgstr "Transfer"
|
||||
@@ -1566,6 +1586,8 @@ msgid ""
|
||||
"Camera access is only possible when supported and allowed by your browser "
|
||||
"and when Grocy is served via a secure (https://) connection"
|
||||
msgstr ""
|
||||
"Camera access is only possible when supported and allowed by your browser "
|
||||
"and when Grocy is served via a secure (https://) connection"
|
||||
|
||||
msgid "Keep screen on"
|
||||
msgstr "Keep screen on"
|
||||
@@ -1592,8 +1614,8 @@ msgstr "This booking cannot be undone"
|
||||
msgid "Booking does not exist or was already undone"
|
||||
msgstr "Booking does not exist or was already undone"
|
||||
|
||||
msgid "Are you sure to delete API key \"%s\"?"
|
||||
msgstr "Are you sure to delete API key \"%s\"?"
|
||||
msgid "Are you sure you want to delete API key \"%s\"?"
|
||||
msgstr "Are you sure you want to delete API key \"%s\"?"
|
||||
|
||||
msgid "Add note"
|
||||
msgstr "Add note"
|
||||
@@ -1645,8 +1667,8 @@ msgstr "Thawed"
|
||||
msgid "Frozen"
|
||||
msgstr "Frozen"
|
||||
|
||||
msgid "Are you sure to delete userentity \"%s\"?"
|
||||
msgstr "Are you sure to delete userentity \"%s\"?"
|
||||
msgid "Are you sure you want to delete userentity \"%s\"?"
|
||||
msgstr "Are you sure you want to delete userentity \"%s\"?"
|
||||
|
||||
msgid "Shopping list settings"
|
||||
msgstr "Shopping list settings"
|
||||
@@ -1657,9 +1679,6 @@ msgstr "Show a month-view calendar"
|
||||
msgid "Desired servings"
|
||||
msgstr "Desired servings"
|
||||
|
||||
msgid "Base: %s"
|
||||
msgstr "Base: %s"
|
||||
|
||||
msgid "Recipes settings"
|
||||
msgstr "Recipes settings"
|
||||
|
||||
@@ -1743,9 +1762,12 @@ msgstr "Edit Barcode"
|
||||
|
||||
msgid ""
|
||||
"Based on the prices of the default consume rule (Opened first, then first "
|
||||
"due first, then first in first out) for in-stock ingredients and on the last"
|
||||
"due first, then first in first out) for in stock ingredients and on the last"
|
||||
" price for missing ones"
|
||||
msgstr ""
|
||||
"Based on the prices of the default consume rule (Opened first, then first "
|
||||
"due first, then first in first out) for in stock ingredients and on the last"
|
||||
" price for missing ones"
|
||||
|
||||
msgid "Clear filter"
|
||||
msgstr "Clear filter"
|
||||
@@ -1875,7 +1897,7 @@ msgid "Chore journal"
|
||||
msgstr "Chore journal"
|
||||
|
||||
msgid "Track next chore schedule"
|
||||
msgstr ""
|
||||
msgstr "Track next chore schedule"
|
||||
|
||||
msgid "Mark task as completed"
|
||||
msgstr "Mark task as completed"
|
||||
@@ -1902,6 +1924,8 @@ msgid ""
|
||||
"This is the default quantity unit used on purchase and when adding this "
|
||||
"product to the shopping list"
|
||||
msgstr ""
|
||||
"This is the default quantity unit used on purchase and when adding this "
|
||||
"product to the shopping list"
|
||||
|
||||
msgid ""
|
||||
"Show a warning when the due date of the purchased product is earlier than "
|
||||
@@ -1910,8 +1934,8 @@ msgstr ""
|
||||
"Show a warning when the due date of the purchased product is earlier than "
|
||||
"the next due date in stock"
|
||||
|
||||
msgid "This is due earlier than already in-stock items"
|
||||
msgstr "This is due earlier than already in-stock items"
|
||||
msgid "This is due earlier than already in stock items"
|
||||
msgstr "This is due earlier than already in stock items"
|
||||
|
||||
msgid ""
|
||||
"When enabled, after changing/scanning a product and if all fields could be "
|
||||
@@ -1929,17 +1953,21 @@ msgid ""
|
||||
"This amount is used for the \"quick consume button\" on the stock overview "
|
||||
"page (related to quantity unit stock)"
|
||||
msgstr ""
|
||||
"This amount is used for the \"quick consume button\" on the stock overview "
|
||||
"page (related to quantity unit stock)"
|
||||
|
||||
msgid ""
|
||||
"This amount is used for the \"quick open button\" on the stock overview page"
|
||||
" (related to quantity unit stock)"
|
||||
msgstr ""
|
||||
"This amount is used for the \"quick open button\" on the stock overview page"
|
||||
" (related to quantity unit stock)"
|
||||
|
||||
msgid "Copy"
|
||||
msgstr "Copy"
|
||||
|
||||
msgid "Are you sure to remove this barcode?"
|
||||
msgstr "Are you sure to remove this barcode?"
|
||||
msgid "Are you sure you want to remove this barcode?"
|
||||
msgstr "Are you sure you want to remove this barcode?"
|
||||
|
||||
msgid "Due date type"
|
||||
msgstr "Due date type"
|
||||
@@ -2136,8 +2164,8 @@ msgstr "Ingredient group"
|
||||
msgid "Reset"
|
||||
msgstr "Reset"
|
||||
|
||||
msgid "Are you sure to reset the table options?"
|
||||
msgstr "Are you sure to reset the table options?"
|
||||
msgid "Are you sure you want to reset the table options?"
|
||||
msgstr "Are you sure you want to reset the table options?"
|
||||
|
||||
msgid "Hide/view columns"
|
||||
msgstr "Hide/view columns"
|
||||
@@ -2180,7 +2208,7 @@ msgid "Product to remove"
|
||||
msgstr "Product to remove"
|
||||
|
||||
msgid "Error while merging"
|
||||
msgstr ""
|
||||
msgstr "Error while merging"
|
||||
|
||||
msgid "After merging, this product will be kept"
|
||||
msgstr "After merging, this product will be kept"
|
||||
@@ -2189,6 +2217,8 @@ msgid ""
|
||||
"After merging, all occurences of this product will be replaced by the kept "
|
||||
"product (means this product will not exist anymore)"
|
||||
msgstr ""
|
||||
"After merging, all occurences of this product will be replaced by the kept "
|
||||
"product (means this product will not exist anymore)"
|
||||
|
||||
msgid "Merge"
|
||||
msgstr "Merge"
|
||||
@@ -2200,11 +2230,11 @@ msgid "Link"
|
||||
msgstr "Link"
|
||||
|
||||
msgid ""
|
||||
"The stock overview page lists all products which are currently in-stock or "
|
||||
"The stock overview page lists all products which are currently in stock or "
|
||||
"below their min. stock amount - enable this to hide this product there "
|
||||
"always"
|
||||
msgstr ""
|
||||
"The stock overview page lists all products which are currently in-stock or "
|
||||
"The stock overview page lists all products which are currently in stock or "
|
||||
"below their min. stock amount - enable this to hide this product there "
|
||||
"always"
|
||||
|
||||
@@ -2215,19 +2245,21 @@ msgid "A product or a note is required"
|
||||
msgstr "A product or a note is required"
|
||||
|
||||
msgid "Grocycode"
|
||||
msgstr ""
|
||||
msgstr "Grocycode"
|
||||
|
||||
msgid "Download"
|
||||
msgstr "Download"
|
||||
|
||||
# Example: Download *Product* Grocycode
|
||||
msgid "Download %s Grocycode"
|
||||
msgstr ""
|
||||
msgstr "Download %s Grocycode"
|
||||
|
||||
msgid ""
|
||||
"Grocycode is a unique referer to this %s in your Grocy instance - print it "
|
||||
"onto a label and scan it like any other barcode"
|
||||
msgstr ""
|
||||
"Grocycode is a unique referer to this %s in your Grocy instance - print it "
|
||||
"onto a label and scan it like any other barcode"
|
||||
|
||||
# Abbreviation for "due date"
|
||||
msgid "DD"
|
||||
@@ -2237,7 +2269,7 @@ msgid "Print on label printer"
|
||||
msgstr "Print on label printer"
|
||||
|
||||
msgid "Default stock entry label"
|
||||
msgstr ""
|
||||
msgstr "Default stock entry label"
|
||||
|
||||
msgid "Stock entry label"
|
||||
msgstr "Stock entry label"
|
||||
@@ -2256,7 +2288,7 @@ msgstr "Error while executing WebHook"
|
||||
|
||||
# Example: Print *Product* Grocycode on label printer
|
||||
msgid "Print %s Grocycode on label printer"
|
||||
msgstr ""
|
||||
msgstr "Print %s Grocycode on label printer"
|
||||
|
||||
msgid "Open stock entry label in new window"
|
||||
msgstr "Open stock entry label in new window"
|
||||
@@ -2276,8 +2308,8 @@ msgstr "Unable to print"
|
||||
msgid "Only done items"
|
||||
msgstr "Only done items"
|
||||
|
||||
msgid "Show only in-stock products"
|
||||
msgstr "Show only in-stock products"
|
||||
msgid "Show only in stock products"
|
||||
msgstr "Show only in stock products"
|
||||
|
||||
msgid "Product description"
|
||||
msgstr "Product description"
|
||||
@@ -2298,8 +2330,8 @@ msgstr "Mandatory Userfield"
|
||||
msgid "When enabled, then this field must be filled on the destination form"
|
||||
msgstr "When enabled, then this field must be filled on the destination form"
|
||||
|
||||
msgid "In-stock products"
|
||||
msgstr "In-stock products"
|
||||
msgid "In stock products"
|
||||
msgstr "In stock products"
|
||||
|
||||
msgid "Timestamp"
|
||||
msgstr "Timestamp"
|
||||
@@ -2384,294 +2416,385 @@ msgstr "Sections will be ordered by that number on the meal plan"
|
||||
msgid "Edit meal plan section"
|
||||
msgstr "Edit meal plan section"
|
||||
|
||||
msgid "Are you sure to delete meal plan section \"%s\"?"
|
||||
msgstr "Are you sure to delete meal plan section \"%s\"?"
|
||||
msgid "Are you sure you want to delete meal plan section \"%s\"?"
|
||||
msgstr "Are you sure you want to delete meal plan section \"%s\"?"
|
||||
|
||||
msgid "Section"
|
||||
msgstr "Section"
|
||||
|
||||
msgid "Are you sure to empty the shopping list?"
|
||||
msgstr "Are you sure to empty the shopping list?"
|
||||
msgid "Are you sure you want to empty the shopping list?"
|
||||
msgstr "Are you sure you want to empty the shopping list?"
|
||||
|
||||
msgid "This is the default which will be prefilled on purchase"
|
||||
msgstr ""
|
||||
msgstr "This is the default which will be prefilled on purchase"
|
||||
|
||||
msgid "Merge chores"
|
||||
msgstr ""
|
||||
msgstr "Merge chores"
|
||||
|
||||
msgid "Chore to keep"
|
||||
msgstr ""
|
||||
msgstr "Chore to keep"
|
||||
|
||||
msgid "After merging, this chore will be kept"
|
||||
msgstr ""
|
||||
msgstr "After merging, this chore will be kept"
|
||||
|
||||
msgid "Chore to remove"
|
||||
msgstr ""
|
||||
msgstr "Chore to remove"
|
||||
|
||||
msgid ""
|
||||
"After merging, all occurences of this chore will be replaced by the kept "
|
||||
"chore (means this chore will not exist anymore)"
|
||||
msgstr ""
|
||||
"After merging, all occurences of this chore will be replaced by the kept "
|
||||
"chore (means this chore will not exist anymore)"
|
||||
|
||||
msgid "Due today"
|
||||
msgstr ""
|
||||
msgstr "Due today"
|
||||
|
||||
msgid "%s task is due to be done today"
|
||||
msgid_plural "%s tasks are due to be done today"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "%s task is due to be done today"
|
||||
msgstr[1] "%s tasks are due to be done today"
|
||||
|
||||
msgid "%s chore is due to be done today"
|
||||
msgid_plural "%s chores are due to be done today"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "%s chore is due to be done today"
|
||||
msgstr[1] "%s chores are due to be done today"
|
||||
|
||||
msgid "%s battery is due to be charged today"
|
||||
msgid_plural "%s batteries are due to be charged today"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "%s battery is due to be charged today"
|
||||
msgstr[1] "%s batteries are due to be charged today"
|
||||
|
||||
msgid "Set to 0 to hide due soon filters/highlighting"
|
||||
msgstr ""
|
||||
msgstr "Set to 0 to hide due soon filters/highlighting"
|
||||
|
||||
msgid "Save & close"
|
||||
msgstr ""
|
||||
msgstr "Save & close"
|
||||
|
||||
msgid "Save & add another task"
|
||||
msgstr ""
|
||||
msgstr "Save & add another task"
|
||||
|
||||
msgid "Treat opened as out of stock"
|
||||
msgstr ""
|
||||
msgstr "Treat opened as out of stock"
|
||||
|
||||
msgid ""
|
||||
"When enabled, opened items will be counted as missing for calculating if "
|
||||
"this product is below its minimum stock amount"
|
||||
msgstr ""
|
||||
"When enabled, opened items will be counted as missing for calculating if "
|
||||
"this product is below its minimum stock amount"
|
||||
|
||||
msgid "Skipped"
|
||||
msgstr ""
|
||||
msgstr "Skipped"
|
||||
|
||||
msgid "Skip next chore schedule"
|
||||
msgstr ""
|
||||
msgstr "Skip next chore schedule"
|
||||
|
||||
msgid "Time"
|
||||
msgstr ""
|
||||
msgstr "Time"
|
||||
|
||||
msgid "A start date is required"
|
||||
msgstr ""
|
||||
msgstr "A start date is required"
|
||||
|
||||
msgid "Start date"
|
||||
msgstr ""
|
||||
msgstr "Start date"
|
||||
|
||||
msgid "The start date cannot be changed when the chore was once tracked"
|
||||
msgstr ""
|
||||
msgstr "The start date cannot be changed when the chore was once tracked"
|
||||
|
||||
msgid "Show the recipe list and the recipe side by side"
|
||||
msgstr ""
|
||||
msgstr "Show the recipe list and the recipe side by side"
|
||||
|
||||
msgid ""
|
||||
"This means the next execution of this chore is scheduled dynamically based "
|
||||
"on the past average execution frequency"
|
||||
msgstr ""
|
||||
"This means the next execution of this chore is scheduled dynamically based "
|
||||
"on the past average execution frequency"
|
||||
|
||||
msgid "Average execution frequency"
|
||||
msgstr ""
|
||||
msgstr "Average execution frequency"
|
||||
|
||||
msgid "Reschedule next execution"
|
||||
msgstr ""
|
||||
msgstr "Reschedule next execution"
|
||||
|
||||
msgid "This can only be in the future"
|
||||
msgstr ""
|
||||
msgstr "This can only be in the future"
|
||||
|
||||
msgid "Rescheduled"
|
||||
msgstr ""
|
||||
msgstr "Rescheduled"
|
||||
|
||||
msgid "Due score"
|
||||
msgstr ""
|
||||
msgstr "Due score"
|
||||
|
||||
msgid ""
|
||||
"The higher this number is, the more ingredients currently in stock are due "
|
||||
"soon, overdue or already expired"
|
||||
msgstr ""
|
||||
"The higher this number is, the more ingredients currently in stock are due "
|
||||
"soon, overdue or already expired"
|
||||
|
||||
msgid "Disable own stock"
|
||||
msgstr ""
|
||||
msgstr "Disable own stock"
|
||||
|
||||
msgid ""
|
||||
"When enabled, this product can't have own stock, means it will not be "
|
||||
"selectable on purchase (useful for parent products which are just used as a "
|
||||
"summary/total view of the child products)"
|
||||
msgstr ""
|
||||
"When enabled, this product can't have own stock, means it will not be "
|
||||
"selectable on purchase (useful for parent products which are just used as a "
|
||||
"summary/total view of the child products)"
|
||||
|
||||
msgid "Out of stock items will be shown at the products default location"
|
||||
msgstr ""
|
||||
msgstr "Out of stock items will be shown at the products default location"
|
||||
|
||||
msgid "Show a little checkbox next to each ingredient to mark it as done"
|
||||
msgstr ""
|
||||
msgstr "Show a little checkbox next to each ingredient to mark it as done"
|
||||
|
||||
msgid ""
|
||||
"The ingredient is crossed out when clicked, the status is not saved, means "
|
||||
"reset when the page is reloaded"
|
||||
msgstr ""
|
||||
"The ingredient is crossed out when clicked, the status is not saved, means "
|
||||
"reset when the page is reloaded"
|
||||
|
||||
msgid ""
|
||||
"The parent product %1$s is currently not in stock, %2$s is the current next "
|
||||
"sub product based on the default consume rule (Opened first, then first due "
|
||||
"first, then first in first out)"
|
||||
msgstr ""
|
||||
"The parent product %1$s is currently not in stock, %2$s is the current next "
|
||||
"sub product based on the default consume rule (Opened first, then first due "
|
||||
"first, then first in first out)"
|
||||
|
||||
msgid "Night mode"
|
||||
msgstr ""
|
||||
msgstr "Night mode"
|
||||
|
||||
msgid "On"
|
||||
msgstr ""
|
||||
msgstr "On"
|
||||
|
||||
msgid "Use system setting"
|
||||
msgstr ""
|
||||
msgstr "Use system setting"
|
||||
|
||||
msgid "Off"
|
||||
msgstr ""
|
||||
msgstr "Off"
|
||||
|
||||
msgid ""
|
||||
"Automatically add products that are below their defined min. stock amount to"
|
||||
" the shopping list"
|
||||
msgstr ""
|
||||
"Automatically add products that are below their defined min. stock amount to"
|
||||
" the shopping list"
|
||||
|
||||
msgid "Reassigned"
|
||||
msgstr ""
|
||||
msgstr "Reassigned"
|
||||
|
||||
msgid "Default value"
|
||||
msgstr ""
|
||||
msgstr "Default value"
|
||||
|
||||
msgid "Now / today"
|
||||
msgstr ""
|
||||
msgstr "Now / today"
|
||||
|
||||
msgid "Add meal plan entry"
|
||||
msgstr ""
|
||||
msgstr "Add meal plan entry"
|
||||
|
||||
msgid "Edit meal plan entry"
|
||||
msgstr ""
|
||||
msgstr "Edit meal plan entry"
|
||||
|
||||
msgid "Default consume location"
|
||||
msgstr ""
|
||||
msgstr "Default consume location"
|
||||
|
||||
msgid "Stock entries at this location will be consumed first"
|
||||
msgstr ""
|
||||
msgstr "Stock entries at this location will be consumed first"
|
||||
|
||||
msgid "Move on open"
|
||||
msgstr ""
|
||||
msgstr "Move on open"
|
||||
|
||||
msgid ""
|
||||
"When enabled, on marking this product as opened, the corresponding amount "
|
||||
"will be moved to the default consume location"
|
||||
msgstr ""
|
||||
"When enabled, on marking this product as opened, the corresponding amount "
|
||||
"will be moved to the default consume location"
|
||||
|
||||
msgid "Moved to %1$s"
|
||||
msgstr ""
|
||||
msgstr "Moved to %1$s"
|
||||
|
||||
msgid "Decimal places allowed for prices (input)"
|
||||
msgstr ""
|
||||
msgstr "Decimal places allowed for prices (input)"
|
||||
|
||||
msgid "Decimal places allowed for prices (display)"
|
||||
msgstr ""
|
||||
msgstr "Decimal places allowed for prices (display)"
|
||||
|
||||
msgid "Clear done items"
|
||||
msgstr ""
|
||||
msgstr "Clear done items"
|
||||
|
||||
msgid ""
|
||||
"This shows all to this product directly or indirectly related quantity units"
|
||||
" and their derived conversion factors"
|
||||
msgstr ""
|
||||
"This shows all to this product directly or indirectly related quantity units"
|
||||
" and their derived conversion factors"
|
||||
|
||||
msgid "Show resolved conversions"
|
||||
msgstr ""
|
||||
msgstr "Show resolved conversions"
|
||||
|
||||
msgid "QU conversions resolved"
|
||||
msgstr ""
|
||||
msgstr "QU conversions resolved"
|
||||
|
||||
msgid "Product specifc QU conversions"
|
||||
msgstr ""
|
||||
msgid "Product specific QU conversions"
|
||||
msgstr "Product specific QU conversions"
|
||||
|
||||
msgid "Default quantity unit consume"
|
||||
msgstr ""
|
||||
msgstr "Default quantity unit consume"
|
||||
|
||||
msgid "This is the default quantity unit used when consuming this product"
|
||||
msgstr ""
|
||||
msgstr "This is the default quantity unit used when consuming this product"
|
||||
|
||||
msgid "Add to meal plan"
|
||||
msgstr ""
|
||||
msgstr "Add to meal plan"
|
||||
|
||||
msgid "Successfully added the recipe to the meal plan"
|
||||
msgstr ""
|
||||
msgstr "Successfully added the recipe to the meal plan"
|
||||
|
||||
msgid "Reprint stock entry label"
|
||||
msgstr ""
|
||||
msgstr "Reprint stock entry label"
|
||||
|
||||
msgid "Auto reprint stock entry label"
|
||||
msgstr ""
|
||||
msgstr "Auto reprint stock entry label"
|
||||
|
||||
msgid ""
|
||||
"When enabled, auto-changing the due date of a stock entry (by "
|
||||
"opening/freezing/thawing and having corresponding default due days set) will"
|
||||
" reprint its label"
|
||||
msgstr ""
|
||||
"When enabled, auto-changing the due date of a stock entry (by "
|
||||
"opening/freezing/thawing and having corresponding default due days set) will"
|
||||
" reprint its label"
|
||||
|
||||
msgid "Quick open amount"
|
||||
msgstr ""
|
||||
msgstr "Quick open amount"
|
||||
|
||||
msgid "Track chore execution now"
|
||||
msgstr ""
|
||||
msgstr "Track chore execution now"
|
||||
|
||||
msgid "Total"
|
||||
msgstr ""
|
||||
msgstr "Total"
|
||||
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
msgstr "Apply"
|
||||
|
||||
msgid "Custom range"
|
||||
msgstr ""
|
||||
msgstr "Custom range"
|
||||
|
||||
msgid "Yesterday"
|
||||
msgstr ""
|
||||
msgstr "Yesterday"
|
||||
|
||||
msgid "Last %1$s day"
|
||||
msgid_plural "Last %1$s days"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "Last %1$s day"
|
||||
msgstr[1] "Last %1$s days"
|
||||
|
||||
msgid "This month"
|
||||
msgstr ""
|
||||
msgstr "This month"
|
||||
|
||||
msgid "Last month"
|
||||
msgstr ""
|
||||
msgstr "Last month"
|
||||
|
||||
msgid "This year"
|
||||
msgstr ""
|
||||
msgstr "This year"
|
||||
|
||||
msgid "Last year"
|
||||
msgstr ""
|
||||
msgstr "Last year"
|
||||
|
||||
msgid "Reports"
|
||||
msgstr ""
|
||||
msgstr "Reports"
|
||||
|
||||
msgid "Spendings"
|
||||
msgstr ""
|
||||
msgstr "Spendings"
|
||||
|
||||
msgid "Stock report"
|
||||
msgstr ""
|
||||
msgstr "Stock report"
|
||||
|
||||
msgid "Out-of-stock products"
|
||||
msgstr ""
|
||||
msgid "Out of stock products"
|
||||
msgstr "Out of stock products"
|
||||
|
||||
msgid "Quantity unit for prices"
|
||||
msgstr ""
|
||||
msgstr "Quantity unit for prices"
|
||||
|
||||
msgid ""
|
||||
"When displaying prices for this product, they will be related to this "
|
||||
"quantity unit"
|
||||
msgstr ""
|
||||
"When displaying prices for this product, they will be related to this "
|
||||
"quantity unit"
|
||||
|
||||
msgid "This means 1 label will be printed"
|
||||
msgid_plural "This means %1$s labels will be printed"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "This means 1 label will be printed"
|
||||
msgstr[1] "This means %1$s labels will be printed"
|
||||
|
||||
msgid "External barcode lookup"
|
||||
msgstr "External barcode lookup"
|
||||
|
||||
msgid "Error while executing the barcode lookup plugin"
|
||||
msgstr "Error while executing the barcode lookup plugin"
|
||||
|
||||
msgid "Nothing was found for the given barcode"
|
||||
msgstr "Nothing was found for the given barcode"
|
||||
|
||||
msgid "Configure colors"
|
||||
msgstr "Configure colours"
|
||||
|
||||
msgid "Swap track next schedule / track now buttons"
|
||||
msgstr "Swap track next schedule / track now buttons"
|
||||
|
||||
msgid "Scheduled tracking time"
|
||||
msgstr "Scheduled tracking time"
|
||||
|
||||
msgid "Time of tracking"
|
||||
msgstr "Time of tracking"
|
||||
|
||||
msgid "Show all out of stock products"
|
||||
msgstr "Show all out of stock products"
|
||||
|
||||
msgid ""
|
||||
"By default the stock overview page lists all products which are currently in"
|
||||
" stock or below their min. stock amount - when this is enabled, all (active)"
|
||||
" products are always shown"
|
||||
msgstr ""
|
||||
"By default the stock overview page lists all products which are currently in"
|
||||
" stock or below their min. stock amount - when this is enabled, all (active)"
|
||||
" products are always shown"
|
||||
|
||||
msgid "No price information is available for at least one ingredient"
|
||||
msgstr "No price information is available for at least one ingredient"
|
||||
|
||||
msgid ""
|
||||
"For ingredients that are only partially in stock, the in stock amount will "
|
||||
"be consumed."
|
||||
msgstr ""
|
||||
"For ingredients that are only partially in stock, the in stock amount will "
|
||||
"be consumed."
|
||||
|
||||
msgid "Can't be opened"
|
||||
msgstr "Can't be opened"
|
||||
|
||||
msgid "Default purchase price type"
|
||||
msgstr "Default purchase price type"
|
||||
|
||||
msgid "This will be used as the default price type selection on purchase"
|
||||
msgstr "This will be used as the default price type selection on purchase"
|
||||
|
||||
msgid "Unspecified"
|
||||
msgstr "Unspecified"
|
||||
|
||||
msgid "Round up quantity amounts to the nearest whole number"
|
||||
msgstr "Round up quantity amounts to the nearest whole number"
|
||||
|
||||
msgid "Stock actions"
|
||||
msgstr "Stock actions"
|
||||
|
||||
msgid "List actions"
|
||||
msgstr "List actions"
|
||||
|
@@ -24,6 +24,9 @@ msgstr "Number (integral)"
|
||||
msgid "number-decimal"
|
||||
msgstr "Number (decimal)"
|
||||
|
||||
msgid "number-currency"
|
||||
msgstr "Number (currency)"
|
||||
|
||||
msgid "date"
|
||||
msgstr "Date (without time)"
|
||||
|
||||
|