Compare commits

..

No commits in common. "master" and "v4.5.0" have entirely different histories.

348 changed files with 1793 additions and 2289 deletions

View File

@ -15,5 +15,5 @@ if ($adminUserRow == null)
}
$adminUserRow->update([
'password' => password_hash('admin', PASSWORD_ARGON2ID)
'password' => password_hash('admin', PASSWORD_DEFAULT)
]);

View File

@ -1,5 +1,4 @@
pushd ..
set COMPOSER_FUND=0
call composer install
call yarn install
popd

View File

@ -1,5 +1,4 @@
pushd ..
set COMPOSER_FUND=0
call composer update
call yarn upgrade
popd

8
.editorconfig Normal file
View File

@ -0,0 +1,8 @@
root = true
[*]
indent_style = tab
indent_size = 4
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

View File

@ -1,14 +0,0 @@
## Help & Usage Questions
→ [r/grocy on Reddit](https://www.reddit.com/r/grocy)
## Bug Reports & Feature Requests
→ [Issue Tracker](https://github.com/grocy/grocy/issues/new/choose)
## Say thanks
&rarr; <https://grocy.info/#say-thanks>
## Translations
&rarr; [Transifex](https://explore.transifex.com/grocy/grocy/)
## Pull Requests
This project does not accept code contributions.

View File

@ -1,6 +1,7 @@
---
name: Bug Report
about: If you've found something that does not work, please report it to help improve Grocy
about: If you've found something that does not work, please report it to help improve
Grocy
title: 'Bug: '
labels: bug
assignees: ''
@ -12,8 +13,8 @@ Please make sure to:
- Describe the bug as detailed as possible by providing the exact steps how to reproduce it
- Attach screenshots where useful
- Check if the problem was maybe already reported or fixed by searching open and also already closed requests here
- Keep it to one topic per request
- Check if the problem was maybe already reported or fixed by searching open and closed issues here
- Keep it to one topic per issue
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

View File

@ -1,5 +1,5 @@
blank_issues_enabled: false
contact_links:
- name: Help & Usage Questions
- name: Questions / Help
url: https://www.reddit.com/r/grocy
about: Please use the r/grocy subreddit for general help and usage questions

View File

@ -1,6 +1,7 @@
---
name: Feature Request
about: Ideas for improvements or new things which you would find useful are always welcome
about: Ideas for improvements or new things which you would find useful are always
welcome
title: 'Feature Request: '
labels: enhancement
assignees: ''
@ -11,6 +12,6 @@ assignees: ''
Please make sure to:
- Describe what you would find useful as detailed as possible
- Check if your idea was maybe already requested by searching open and also already closed requests here
- Check if your idea was maybe already requested by searching open requests here
- Keep it to one topic per request
-->

View File

@ -1 +0,0 @@
This project does not accept code contributions.

1
.gitignore vendored
View File

@ -1,4 +1,5 @@
embedded.txt
.DS_Store
/.release
/packages
/public/packages

15
.vscode/settings.json vendored
View File

@ -1,3 +1,16 @@
{
"phpserver.relativePath": "public"
"phpserver.relativePath": "public",
"editor.formatOnType": true,
"editor.formatOnPaste": true,
"editor.formatOnSave": true,
"editor.insertSpaces": false,
"javascript.format.placeOpenBraceOnNewLineForControlBlocks": true,
"javascript.format.placeOpenBraceOnNewLineForFunctions": true,
"javascript.format.insertSpaceAfterFunctionKeywordForAnonymousFunctions": false,
"javascript.preferences.quoteStyle": "double",
"blade.format.enable": true,
"html.format.wrapAttributes": "force",
"html.format.wrapLineLength": 0,
"php-cs-fixer.formatHtml": true,
"php-cs-fixer.autoFixBySemicolon": true
}

View File

@ -1,6 +1,6 @@
MIT License
Copyright (c) 2017-2026 Bernd Bestel (<https://berrnd.de>)
Copyright (c) 2017 Bernd Bestel
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@ -20,7 +20,7 @@ See the website. &rarr; <https://grocy.info>
## Questions / Help / Bug Reports / Feature Requests
- General help and usage questions &rarr; [r/grocy on Reddit](https://www.reddit.com/r/grocy)
- General help and usage questions &rarr; [r/grocy subreddit](https://www.reddit.com/r/grocy)
- Bug Reports and Feature Requests &rarr; [Issue Tracker](https://github.com/grocy/grocy/issues/new/choose)
_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._
@ -33,7 +33,7 @@ See the website for a list of community contributed Add-ons / Tools. &rarr; [htt
> Checkout [Grocy Desktop](https://github.com/grocy/grocy-desktop), if you want to run Grocy without having to manage a webserver just like a normal (Windows) desktop application.
>
> Directly download the [latest release](https://releases.grocy.info/latest-desktop) (also [available via the Microsoft Store](https://apps.microsoft.com/detail/9NWB1TRNNKSF)) - the installation is nothing more than just clicking 2 times "next".
> Directly download the [latest release](https://releases.grocy.info/latest-desktop) - the installation is nothing more than just clicking 2 times "next".
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)
@ -50,8 +50,9 @@ See the website for more installation guides and troubleshooting help. &rarr; [h
### Platform support
- PHP 8.5 (with SQLite 3.40+)
- 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
@ -63,7 +64,7 @@ See the website for more installation guides and troubleshooting help. &rarr; [h
- 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)
If you run Grocy on Linux, there is also `update.sh` (remember to make the script executable via `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).
If you run Grocy on Linux, there is also `update.sh` (remember to make the script executable (`chmod +x update.sh`) and ensure that you have `unzip` installed) which does exactly this and additionally creates a backup (`.tgz` archive) of the current installation in `data/backups` (backups older than 60 days will be deleted during the update).
## Localization
@ -77,7 +78,7 @@ The [pre-release demo](https://demo-prerelease.grocy.info) is available for any
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 not yet supported._
_RTL languages are unfortunately not yet supported._
## Motivation
@ -93,11 +94,11 @@ The web frontend uses exactly this API for pretty much everything. So everything
### Barcode readers & camera scanning
Some fields (with a barcode icon) 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.
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 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.
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._
_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
@ -114,11 +115,11 @@ See that plugin or `plugins/DemoBarcodeLookupPlugin.php` for a commented example
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 `2026-05-17`
- Example: `0517` will be converted to `2025-05-17`
- `YYYYMMDD` gets expanded to the proper ISO-8601 notation
- Example: `20260417` will be converted to `2026-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: `202607e` will be converted to `2026-07-31`
- 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")
@ -166,11 +167,11 @@ In embedded mode, settings can be overridden by text files in `data/settingoverr
## Contributing / Say Thanks
See <https://grocy.info/#say-thanks> if you just want to say thanks or [Contributing](https://github.com/grocy/grocy?tab=contributing-ov-file#contributing-ov-file) for anything else.
Any help is welcome, feel free to contribute anything which comes to your mind or see <https://grocy.info/#say-thanks> if you just want to say thanks.
## Roadmap
There is none. The progress of a specific bug/enhancement is always tracked in the corresponding request, at least by commit comment references.
There is none. The progress of a specific bug/enhancement is always tracked in the corresponding issue, at least by commit comment references.
[Milestones](https://github.com/grocy/grocy/milestones) are used to indicate in which version the corresponding request was done (`vNEXT` means it's currently planned to do that for the next release).

View File

@ -2,11 +2,11 @@
use Grocy\Controllers\ExceptionController;
use Grocy\Helpers\UrlManager;
use Grocy\Helpers\SlimBladeView;
use Grocy\Middleware\LocaleMiddleware;
use Grocy\Middleware\CorsMiddleware;
use Psr\Container\ContainerInterface as Container;
use Slim\Factory\AppFactory;
use Slim\Views\Blade;
// Load composer dependencies
require_once __DIR__ . '/packages/autoload.php';
@ -14,6 +14,7 @@ require_once __DIR__ . '/packages/autoload.php';
// Load config files
require_once GROCY_DATAPATH . '/config.php';
require_once __DIR__ . '/config-dist.php'; // For not in own config defined values we use the default ones
require_once __DIR__ . '/helpers/ConfigurationValidator.php';
// Error reporting definitions
if (GROCY_MODE === 'dev')
@ -43,9 +44,9 @@ if (GROCY_DISABLE_AUTH === true)
// Check if any invalid entries in config.php have been made
try
{
(new Grocy\Helpers\ConfigurationValidator())->validateConfig();
(new ConfigurationValidator())->validateConfig();
}
catch (\Grocy\Helpers\EInvalidConfig $ex)
catch (EInvalidConfig $ex)
{
exit('Invalid setting in config.php: ' . $ex->getMessage());
}
@ -84,7 +85,7 @@ $app = AppFactory::create();
$container = $app->getContainer();
$container->set('view', function (Container $container)
{
return new SlimBladeView(__DIR__ . '/views', GROCY_DATAPATH . '/viewcache');
return new Blade(__DIR__ . '/views', GROCY_DATAPATH . '/viewcache');
});
$container->set('UrlManager', function (Container $container)

View File

@ -33,7 +33,7 @@
- New product option "Auto reprint stock entry label"
- 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 (only server side label printer WebHooks are supported)
- Defaults to disabled, so no changed behavior when not configured
- Added a new option "Reprint stock entry label" on the stock entry edit page (will print the corresponding stock entry label on save)
- Added a new option "Reprint stock entry label" on the stock entry edit page (will print the correspondind stock entry label on save)
- 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

View File

@ -1,36 +0,0 @@
> ⚠️ PHP 8.5 (with SQLite 3.40+) is from now on the only supported runtime version.
### Stock
- Optimized product definition quantity unit handling:
- As long as a product was not once in stock, the product options "Default quantity unit purchase", "Default quantity unit consume" and "Quantity unit for prices" can now be changed to any other unit
- When necessary (means when no default quantity unit conversions apply), "1:1" product specific quantity unit conversion between the product's QU stock and the corresponding other unit will now be created automatically after editing a product (like already done when initially creating a product with different unit definitions)
- For convenience, when changing a product's QU stock and when all other unit properties ("Default quantity unit purchase" etc.) are the same, they will now be changed in tandem (like already done when creating a new product and initially setting the product's QU stock)
- (This should drastically improve the workflow of completing a product setup looked up via an external barcode lookup plugin)
- Optimized the line plot markers color of the price history chart (product card) (thanks @DeepCoreSystem)
- External barcode lookup plugin optimizations:
- When an image URL without a file extension is returned, the file extension is now determined by the Content-Type header (if any) (thanks @jordy-u for the idea)
- Data URLs for images are now supported (`data:image/png;base64,xxxx`) (thanks @GammaC0de)
- Fixed that German Umlauts and other special characters 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)
- Fixed that changing the stock setting "Due soon days" wasn't saved/applied
- Fixed that "Reprint stock entry label" on the stock entry edit page didn't actually print the corresponding label
### 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
### Chores
- Fixed that changing the chore setting "Due soon days" wasn't saved/applied
### Userfields
- Fixed that the corresponding form was broken when using a `%` in an Userfield caption (only affected numeric and date-time Userfields)
### General
- Added a workaround for different SQL errors when running Grocy on FreeBSD and SQLite 3.41+
- Fixed that the date input shorthand `[+/-]n[d/m/y]` didn't work when the value length was >= 4 (e.g. `+10d`)

View File

@ -1,30 +1,25 @@
{
"require": {
"php": "8.5.*",
"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": "^4.8.10",
"eluceo/ical": "^2.2.0",
"erusev/parsedown": "^1.7",
"ezyang/htmlpurifier": "^4.13",
"gettext/gettext": "dev-4.x-fork",
"gumlet/php-image-resize": "^2.0",
"guzzlehttp/guzzle": "^7.0",
"ezyang/htmlpurifier": "^4.13",
"interficieis/php-barcode": "^2.0.2",
"mike42/escpos-php": "^4.0",
"morris/lessql": "dev-master-fork",
"php-di/php-di": "^7.0.3",
"slim/http": "^1.0",
"slim/psr7": "^1.0",
"slim/slim": "^4.0",
"webman/blade": "^1.5",
"ramsey/uuid": "^4.9"
"guzzlehttp/guzzle": "^7.0",
"mike42/escpos-php": "^4.0"
},
"repositories": [
{
"type": "vcs",
"url": "https://github.com/berrnd/lessql"
},
{
"type": "vcs",
"url": "https://github.com/berrnd/php-gettext"
}
],
"autoload": {

1095
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -195,13 +195,12 @@ class StockController extends BaseController
{
if ($args['productId'] == 'new')
{
$quantityunits = $this->getDatabase()->quantity_units()->where('active = 1')->orderBy('name', 'COLLATE NOCASE');
return $this->renderPage($response, 'productform', [
'locations' => $this->getDatabase()->locations()->where('active = 1')->orderBy('name'),
'barcodes' => $this->getDatabase()->product_barcodes()->orderBy('barcode'),
'quantityunitsAll' => $quantityunits,
'quantityunitsReferenced' => $quantityunits,
'quantityunits' => $this->getDatabase()->quantity_units()->where('active = 1')->orderBy('name', 'COLLATE NOCASE'),
'quantityunitsStock' => $this->getDatabase()->quantity_units()->orderBy('name', 'COLLATE NOCASE'),
'referencedQuantityunits' => $this->getDatabase()->quantity_units()->where('active = 1')->orderBy('name', 'COLLATE NOCASE'),
'shoppinglocations' => $this->getDatabase()->shopping_locations()->where('active = 1')->orderBy('name', 'COLLATE NOCASE'),
'productgroups' => $this->getDatabase()->product_groups()->where('active = 1')->orderBy('name', 'COLLATE NOCASE'),
'userfields' => $this->getUserfieldsService()->GetFields('products'),
@ -218,8 +217,9 @@ class StockController extends BaseController
'product' => $product,
'locations' => $this->getDatabase()->locations()->where('active = 1')->orderBy('name', 'COLLATE NOCASE'),
'barcodes' => $this->getDatabase()->product_barcodes()->orderBy('barcode'),
'quantityunitsAll' => $this->getDatabase()->quantity_units()->where('active = 1')->orderBy('name', 'COLLATE NOCASE'),
'quantityunitsReferenced' => $this->getDatabase()->quantity_units()->where('id IN (SELECT to_qu_id FROM cache__quantity_unit_conversions_resolved WHERE product_id = :1) OR NOT EXISTS(SELECT 1 FROM stock_log WHERE product_id = :1)', $product->id)->orderBy('name', 'COLLATE NOCASE'),
'quantityunits' => $this->getDatabase()->quantity_units()->where('active = 1')->orderBy('name', 'COLLATE NOCASE'),
'quantityunitsStock' => $this->getDatabase()->quantity_units()->where('id IN (SELECT to_qu_id FROM cache__quantity_unit_conversions_resolved WHERE product_id = :1) OR NOT EXISTS(SELECT 1 FROM stock_log WHERE product_id = :1)', $product->id)->orderBy('name', 'COLLATE NOCASE'),
'referencedQuantityunits' => $this->getDatabase()->quantity_units()->where('active = 1')->where('id IN (SELECT to_qu_id FROM cache__quantity_unit_conversions_resolved WHERE product_id = :1)', $product->id)->orderBy('name', 'COLLATE NOCASE'),
'shoppinglocations' => $this->getDatabase()->shopping_locations()->where('active = 1')->orderBy('name', 'COLLATE NOCASE'),
'productgroups' => $this->getDatabase()->product_groups()->where('active = 1')->orderBy('name', 'COLLATE NOCASE'),
'userfields' => $this->getUserfieldsService()->GetFields('products'),

View File

@ -1,8 +1,6 @@
<?php
namespace Grocy\Helpers;
class EInvalidConfig extends \Exception
class EInvalidConfig extends Exception
{
}

View File

@ -1,8 +1,6 @@
<?php
namespace Grocy\Helpers;
class ERequirementNotMet extends \Exception
class ERequirementNotMet extends Exception
{
}
@ -12,8 +10,8 @@ const REQUIRED_PHP_EXTENSIONS = ['fileinfo', 'pdo_sqlite', 'gd', 'ctype', 'intl'
'filter', 'iconv', 'tokenizer', 'json'
];
const REQUIRED_PHP_VERSION = '8.5.0';
const REQUIRED_SQLITE_VERSION = '3.40.0';
const REQUIRED_PHP_VERSION = '8.2.0';
const REQUIRED_SQLITE_VERSION = '3.34.0';
class PrerequisiteChecker
{
@ -83,7 +81,7 @@ class PrerequisiteChecker
private function getSqlVersionAsString()
{
$dbh = new \PDO('sqlite::memory:');
$dbh = new PDO('sqlite::memory:');
return $dbh->query('select sqlite_version()')->fetch()[0];
}
}

View File

@ -1,34 +0,0 @@
<?php
namespace Grocy\Helpers;
use Jenssegers\Blade\Blade;
use Psr\Http\Message\ResponseInterface;
class SlimBladeView
{
public function __construct(string $viewPaths, string $cachePath)
{
$this->ViewPaths = $viewPaths;
$this->CachePath = $cachePath;
}
protected $ViewPaths;
protected $CachePath;
protected $ViewData = [];
public function render(ResponseInterface $response, string $template, array $data = [])
{
$data = array_merge($this->ViewData, $data);
$renderer = new Blade($this->ViewPaths, $this->CachePath, null);
$output = $renderer->make($template, $data)->render();
$response->getBody()->write($output);
return $response;
}
public function set(string $key, mixed $value)
{
$this->ViewData[$key] = $value;
}
}

View File

@ -265,9 +265,9 @@ function require_frontend_packages(array $packages)
function EmptyFolder($folderPath)
{
foreach (glob("{$folderPath}/*") as $item)
foreach(glob("{$folderPath}/*") as $item)
{
if (is_dir($item))
if(is_dir($item))
{
EmptyFolder($item);
rmdir($item);

View File

@ -1,3 +1,4 @@
#
# Translators:
# Plamen Stoyanov <fireto@gmail.com>, 2020
# Dwight Schrute <rvelitchkov@gmail.com>, 2020

View File

@ -1,3 +1,4 @@
#
# Translators:
# Plamen Stoyanov <fireto@gmail.com>, 2020
# Svetoslav Slavkov <contact@sslavkov.eu>, 2023

View File

@ -1,3 +1,4 @@
#
# Translators:
# Bernd Bestel <bernd@berrnd.de>, 2025
#

View File

@ -1,3 +1,4 @@
#
# Translators:
# Plamen Stoyanov <fireto@gmail.com>, 2020
# Mihail Andreev, 2020

View File

@ -1,3 +1,4 @@
#
# Translators:
# Mihail Andreev, 2020
# N T, 2025

View File

@ -1,3 +1,4 @@
#
# Translators:
# Mihail Andreev, 2020
#

View File

@ -1,3 +1,4 @@
#
# Translators:
# Plamen Stoyanov <fireto@gmail.com>, 2020
# Mihail Andreev, 2020

View File

@ -1,3 +1,4 @@
#
# Translators:
# Plamen Stoyanov <fireto@gmail.com>, 2020
# Mihail Andreev, 2020
@ -2832,8 +2833,3 @@ msgstr "Наличност действия"
msgid "List actions"
msgstr "Списък с действия"
msgid ""
"After this product was once in stock and when the desired quantity unit "
"cannot be selected here, first create a corresponding unit conversion"
msgstr ""

View File

@ -1,3 +1,4 @@
#
# Translators:
# Plamen Stoyanov <fireto@gmail.com>, 2020
# Mihail Andreev, 2020

View File

@ -1,3 +1,4 @@
#
# Translators:
# gimy16 <gimy16@hotmail.com>, 2021
# Carles Riera <blauigris@gmail.com>, 2022

View File

@ -1,3 +1,4 @@
#
# Translators:
# Joan Rodas <joanrc93@gmail.com>, 2020
# Martí Gombau, 2023

View File

@ -1,3 +1,4 @@
#
# Translators:
# Bernd Bestel <bernd@berrnd.de>, 2022
#

View File

@ -1,3 +1,4 @@
#
# Translators:
# Joan Rodas <joanrc93@gmail.com>, 2020
# gimy16 <gimy16@hotmail.com>, 2021

View File

@ -1,3 +1,4 @@
#
# Translators:
# Martí Gombau, 2023
# Auri, 2024

View File

@ -1,3 +1,4 @@
#
# Translators:
# gimy16 <gimy16@hotmail.com>, 2021
# Martí Gombau, 2023

View File

@ -1,3 +1,4 @@
#
# Translators:
# gimy16 <gimy16@hotmail.com>, 2021
# Auri, 2024

View File

@ -1,3 +1,4 @@
#
# Translators:
# Joan Rodas <joanrc93@gmail.com>, 2020
# Carles Riera <blauigris@gmail.com>, 2021
@ -2767,8 +2768,3 @@ msgstr ""
msgid "List actions"
msgstr ""
msgid ""
"After this product was once in stock and when the desired quantity unit "
"cannot be selected here, first create a corresponding unit conversion"
msgstr ""

View File

@ -1,3 +1,4 @@
#
# Translators:
# gimy16 <gimy16@hotmail.com>, 2021
# Roger Solé Vilajuliu, 2024

View File

@ -1,3 +1,4 @@
#
# Translators:
# Radim Kabeláč <radim.ekk@gmail.com>, 2020
# Pavel Paseka, 2022

View File

@ -1,3 +1,4 @@
#
# Translators:
# Tomas Reznicek <tomas.reznicek@gmail.com>, 2019
# Michal Petříček <michal@petricek.org>, 2019

View File

@ -1,3 +1,4 @@
#
# Translators:
# Tomas Reznicek <tomas.reznicek@gmail.com>, 2019
# Bernd Bestel <bernd@berrnd.de>, 2020

View File

@ -1,3 +1,4 @@
#
# Translators:
# Michal Petříček <michal@petricek.org>, 2019
# Ondřej Suk <ondra.suk.55@gmail.com>, 2020

View File

@ -1,3 +1,4 @@
#
# Translators:
# Radim Kabeláč <radim.ekk@gmail.com>, 2020
# Jarda Tesar <intossh@gmail.com>, 2021

View File

@ -1,3 +1,4 @@
#
# Translators:
# Pavel Paseka, 2022
#

View File

@ -1,3 +1,4 @@
#
# Translators:
# Pavel Paseka, 2022
#

View File

@ -1,3 +1,4 @@
#
# Translators:
# Tomas Reznicek <tomas.reznicek@gmail.com>, 2019
# Michal Petříček <michal@petricek.org>, 2019
@ -7,7 +8,7 @@
# Radim Kabeláč <radim.ekk@gmail.com>, 2020
# Jaroslav Lichtblau <l10n@lichtblau.cz>, 2020
# Jarda Tesar <intossh@gmail.com>, 2021
# Pavel Paseka, 2026
# Pavel Paseka, 2025
#
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: Pavel Paseka, 2026\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"
@ -1508,7 +1509,7 @@ msgid "Price factor"
msgstr "Násobek ceny ingredience"
msgid "Do you find Grocy useful?"
msgstr "Je pro vás Grocy užitečné?"
msgstr "Je pro vás Grocy užitečný?"
msgid "Say thanks"
msgstr "Poděkujte za aplikaci"
@ -2891,11 +2892,3 @@ msgstr "Operace se zásobami"
msgid "List actions"
msgstr "Operace se seznamem"
msgid ""
"After this product was once in stock and when the desired quantity unit "
"cannot be selected here, first create a corresponding unit conversion"
msgstr ""
"Pokud byl tento produkt alespoň jednou v zásobě a není na výběr jednotka "
"množství, kterou byste potřebovali, vytvořte si vhodnou konverzi stávající "
"množstevní jednotky."

View File

@ -1,3 +1,4 @@
#
# Translators:
# Tomas Reznicek <tomas.reznicek@gmail.com>, 2019
# Michal Franc, 2020

View File

@ -1,3 +1,4 @@
#
# Translators:
# Troels Siggaard <troels@siggaard.com>, 2019
# klavslund <klavslund@gmail.com>, 2021

View File

@ -1,3 +1,4 @@
#
# Translators:
# Troels Siggaard <troels@siggaard.com>, 2019
# Rasmus Bojsen <rasmus@bojsen.cn>, 2019

View File

@ -1,3 +1,4 @@
#
# Translators:
# Bernd Bestel <bernd@berrnd.de>, 2019
#

View File

@ -1,3 +1,4 @@
#
# Translators:
# dark159123 <r.j.hansen@protonmail.com>, 2019
# Troels Siggaard <troels@siggaard.com>, 2019

View File

@ -1,3 +1,4 @@
#
# Translators:
# klavslund <klavslund@gmail.com>, 2021
# Brian Moos Lindberg <brian@blueeel.dk>, 2022

View File

@ -1,3 +1,4 @@
#
# Translators:
# Mihai Marinescu <mihai@marinescu.dk>, 2020
# klavslund <klavslund@gmail.com>, 2021

View File

@ -1,3 +1,4 @@
#
# Translators:
# Troels Siggaard <troels@siggaard.com>, 2019
# Brian Moos Lindberg <brian@blueeel.dk>, 2019

View File

@ -1,3 +1,4 @@
#
# Translators:
# dark159123 <r.j.hansen@protonmail.com>, 2019
# Bernd Bestel <bernd@berrnd.de>, 2019
@ -11,7 +12,6 @@
# hskdk <henrik@skjaerbaek.net>, 2023
# G Momsen, 2024
# Brian Moos Lindberg <brian@blueeel.dk>, 2024
# eurosite, 2025
#
msgid ""
msgstr ""
@ -19,7 +19,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: eurosite, 2025\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"
@ -288,7 +288,7 @@ msgid "Invalid credentials, please try again"
msgstr "Ugyldig brugernavn og/eller adgangskode, prøv igen"
msgid "Are you sure you want to delete battery \"%s\"?"
msgstr "Er du sikker på du vil slette batteri \"%s\"?"
msgstr ""
msgid "Yes"
msgstr "Ja"
@ -321,13 +321,13 @@ msgid "Are you sure you want to delete quantity unit \"%s\"?"
msgstr ""
msgid "Are you sure you want to delete product \"%s\"?"
msgstr "Er du sikker på du vil slette varen \"%s\"?"
msgstr ""
msgid "Are you sure you want to delete location \"%s\"?"
msgstr "Er du sikker på du vil slette placeringen \"%s\"?"
msgstr ""
msgid "Are you sure you want to delete store \"%s\"?"
msgstr "Er du sikker på du vil slette butikken \"%s\"?"
msgstr ""
msgid "Manage API keys"
msgstr "Administrer API nøgler"
@ -441,13 +441,13 @@ msgid "Edit recipe ingredient"
msgstr "Rediger ingrediens til opskrift"
msgid "Are you sure you want to delete recipe \"%s\"?"
msgstr "Er du sikker på du vil slette opskriften \"%s\"?"
msgstr ""
msgid "Are you sure you want to delete recipe ingredient \"%s\"?"
msgstr "Er du sikker på du vil slette ingrediensen \"%s\" fra opskriften?"
msgstr ""
msgid "Are you sure you want to empty shopping list \"%s\"?"
msgstr "Er du sikker på at du vil tømme indkøbslisten \"%s\"?"
msgstr ""
msgid "Clear list"
msgstr "Ryd indkøbslisten"
@ -497,8 +497,6 @@ msgid ""
"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 "Manage users"
msgstr "Administrer brugere"
@ -510,7 +508,7 @@ msgid "Users"
msgstr "Brugere"
msgid "Are you sure you want to delete user \"%s\"?"
msgstr "Er du sikker på du vil slette brugeren \"%s\"?"
msgstr ""
msgid "Create user"
msgstr "Opret bruger"
@ -610,7 +608,7 @@ msgid ""
msgstr ""
msgid "Removed all in stock ingredients needed by recipe \"%s\" from stock"
msgstr "Fjernede alle ingredienser til opskrift \"%s\" fra beholdningen"
msgstr ""
msgid "Consume all ingredients needed by this recipe"
msgstr "Forbrug alle nødvendige ingredienser til denne opskrift"
@ -2769,8 +2767,3 @@ msgstr ""
msgid "List actions"
msgstr ""
msgid ""
"After this product was once in stock and when the desired quantity unit "
"cannot be selected here, first create a corresponding unit conversion"
msgstr ""

View File

@ -1,3 +1,4 @@
#
# Translators:
# Brian Moos Lindberg <brian@blueeel.dk>, 2019
# Mihai Marinescu <mihai@marinescu.dk>, 2020

View File

@ -1,3 +1,4 @@
#
# Translators:
# Bernd Bestel <bernd@berrnd.de>, 2021
#

View File

@ -1,3 +1,4 @@
#
# Translators:
# Bernd Bestel <bernd@berrnd.de>, 2022
#

View File

@ -1,3 +1,4 @@
#
# Translators:
# Bernd Bestel <bernd@berrnd.de>, 2019
#

View File

@ -1,3 +1,4 @@
#
# Translators:
# Bernd Bestel <bernd@berrnd.de>, 2025
#

View File

@ -1,3 +1,4 @@
#
# Translators:
# Bernd Bestel <bernd@berrnd.de>, 2025
#

View File

@ -1,3 +1,4 @@
#
# Translators:
# @RubenKelevra <ruben@freifunk-nrw.de>, 2021
# Bernd Bestel <bernd@berrnd.de>, 2021

View File

@ -1,3 +1,4 @@
#
# Translators:
# Bernd Bestel <bernd@berrnd.de>, 2020
#

View File

@ -1,8 +1,9 @@
#
# Translators:
# Luca RHK <luca@rhk-in.de>, 2020
# Tobias Wolter <mumpfpuffel@gmail.com>, 2020
# @RubenKelevra <ruben@freifunk-nrw.de>, 2021
# Bernd Bestel <bernd@berrnd.de>, 2026
# Bernd Bestel <bernd@berrnd.de>, 2025
#
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: Bernd Bestel <bernd@berrnd.de>, 2026\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"
@ -2850,11 +2851,3 @@ msgstr "Bestandsaktionen"
msgid "List actions"
msgstr "Listenaktionen"
msgid ""
"After this product was once in stock and when the desired quantity unit "
"cannot be selected here, first create a corresponding unit conversion"
msgstr ""
"Wenn dieses Produkt schon einmal im Bestand war und die gewünschte "
"Mengeneinheit hier nicht ausgewählt werden kann, erstelle zunächst eine "
"entsprechende ME-Umrechnung"

View File

@ -1,3 +1,4 @@
#
# Translators:
# Bernd Bestel <bernd@berrnd.de>, 2023
#

View File

@ -1,3 +1,4 @@
#
# Translators:
# Dionysios Gkotsis <bloodsak4@yahoo.gr>, 2020
#

View File

@ -1,3 +1,4 @@
#
# Translators:
# datablitz7 <plant7@gmail.com>, 2019
# emmker kats, 2022

View File

@ -1,3 +1,4 @@
#
# Translators:
# Bernd Bestel <bernd@berrnd.de>, 2020
#

View File

@ -1,3 +1,4 @@
#
# Translators:
# datablitz7 <plant7@gmail.com>, 2019
# ByteGet, 2020

View File

@ -1,3 +1,4 @@
#
# Translators:
# ByteGet, 2020
# Thodoris Kalatzis <teo.kal@hotmail.com>, 2021

View File

@ -1,3 +1,4 @@
#
# Translators:
# datablitz7 <plant7@gmail.com>, 2020
# ByteGet, 2020

View File

@ -1,3 +1,4 @@
#
# Translators:
# Dionysios Gkotsis <bloodsak4@yahoo.gr>, 2020
# ByteGet, 2020

View File

@ -1,3 +1,4 @@
#
# Translators:
# Stathis Stamoulis <sstamoulis2010@gmail.com>, 2020
# Dionysios Gkotsis <bloodsak4@yahoo.gr>, 2020
@ -2706,8 +2707,3 @@ msgstr ""
msgid "List actions"
msgstr ""
msgid ""
"After this product was once in stock and when the desired quantity unit "
"cannot be selected here, first create a corresponding unit conversion"
msgstr ""

View File

@ -1,3 +1,4 @@
#
# Translators:
# Dionysios Gkotsis <bloodsak4@yahoo.gr>, 2020
# ByteGet, 2020

View File

@ -1,3 +1,4 @@
#
# Translators:
# Jonathan Adams <jonathan@connockadams.uk>, 2020
# duck. <me@duck.me.uk>, 2020
@ -5,7 +6,7 @@
# Chris H <cjh861@outlook.com>, 2021
# David Knapman <dai.knapz@gmail.com>, 2021
# Johnnie Blows, 2022
# Andi Chandler <andi@gowling.com>, 2025
# 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: Andi Chandler <andi@gowling.com>, 2025\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"
@ -418,4 +419,4 @@ msgid "Estonian"
msgstr "Estonian"
msgid "Bulgarian"
msgstr "Bulgarian"
msgstr ""

View File

@ -1,3 +1,4 @@
#
# Translators:
# Jonathan Adams <jonathan@connockadams.uk>, 2020
# Ben Fayers <ben.fayers@gmail.com>, 2020
@ -5,7 +6,7 @@
# John Coles <john@johncoles.com>, 2020
# w ralb <g.frcy.trnsfx@barlowhome.org>, 2021
# George Aston, 2024
# Andi Chandler <andi@gowling.com>, 2026
# 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: Andi Chandler <andi@gowling.com>, 2026\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"
@ -2797,10 +2798,3 @@ msgstr "Stock actions"
msgid "List actions"
msgstr "List actions"
msgid ""
"After this product was once in stock and when the desired quantity unit "
"cannot be selected here, first create a corresponding unit conversion"
msgstr ""
"After this product was once in stock, and when the desired quantity unit "
"cannot be selected here, first create a corresponding unit conversion"

View File

@ -1,3 +1,4 @@
#
# Translators:
# Alberto Martin <ami232@gmail.com>, 2021
# GRBaset, 2022

View File

@ -1,3 +1,4 @@
#
# Translators:
# GRBaset, 2023
#

View File

@ -1,3 +1,4 @@
#
# Translators:
# Bernd Bestel <bernd@berrnd.de>, 2019
# José Rugel <joserugel@gmail.com>, 2020

View File

@ -1,3 +1,4 @@
#
# Translators:
# Ankue <ankue.spam@gmail.com>, 2019
# Fernando Sánchez <fernando.l.sanchez@gmail.com>, 2019

View File

@ -1,3 +1,4 @@
#
# Translators:
# Alberto Martin <ami232@gmail.com>, 2021
# Jose Manuel Ruiz, 2023

View File

@ -1,3 +1,4 @@
#
# Translators:
# Enrique Lapenta <enriquelap20@gmail.com>, 2020
# Alberto Martin <ami232@gmail.com>, 2021

View File

@ -1,3 +1,4 @@
#
# Translators:
# Alberto Martin <ami232@gmail.com>, 2021
#

View File

@ -1,3 +1,4 @@
#
# Translators:
# Bernd Bestel <bernd@berrnd.de>, 2019
# Ankue <ankue.spam@gmail.com>, 2019
@ -2890,8 +2891,3 @@ msgstr ""
msgid "List actions"
msgstr ""
msgid ""
"After this product was once in stock and when the desired quantity unit "
"cannot be selected here, first create a corresponding unit conversion"
msgstr ""

View File

@ -1,3 +1,4 @@
#
# Translators:
# Alberto Martin <ami232@gmail.com>, 2021
#

View File

@ -1,6 +1,7 @@
#
# Translators:
# Mario Loik <mariomobla@gmail.com>, 2020
# 27c44a6313ba1383accb315c80acc885_50e4575, 2023
# Lauri Lepik, 2023
#
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-09-17 10:45+0000\n"
"Last-Translator: 27c44a6313ba1383accb315c80acc885_50e4575, 2023\n"
"Last-Translator: Lauri Lepik, 2023\n"
"Language-Team: Estonian (Estonia) (https://app.transifex.com/grocy/teams/93189/et_EE/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"

View File

@ -1,5 +1,6 @@
#
# Translators:
# 27c44a6313ba1383accb315c80acc885_50e4575, 2023
# Lauri Lepik, 2023
#
msgid ""
msgstr ""
@ -7,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: 27c44a6313ba1383accb315c80acc885_50e4575, 2023\n"
"Last-Translator: Lauri Lepik, 2023\n"
"Language-Team: Estonian (Estonia) (https://app.transifex.com/grocy/teams/93189/et_EE/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"

View File

@ -1,3 +1,4 @@
#
# Translators:
# Bernd Bestel <bernd@berrnd.de>, 2023
#

View File

@ -1,6 +1,7 @@
#
# Translators:
# Mario Loik <mariomobla@gmail.com>, 2020
# 27c44a6313ba1383accb315c80acc885_50e4575, 2023
# Lauri Lepik, 2023
# aylamz, 2023
#
msgid ""

View File

@ -1,5 +1,6 @@
#
# Translators:
# 27c44a6313ba1383accb315c80acc885_50e4575, 2023
# Lauri Lepik, 2023
# aylamz, 2023
#
msgid ""

View File

@ -1,5 +1,6 @@
#
# Translators:
# 27c44a6313ba1383accb315c80acc885_50e4575, 2023
# Lauri Lepik, 2023
#
msgid ""
msgstr ""
@ -7,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-29 16:33+0000\n"
"Last-Translator: 27c44a6313ba1383accb315c80acc885_50e4575, 2023\n"
"Last-Translator: Lauri Lepik, 2023\n"
"Language-Team: Estonian (Estonia) (https://app.transifex.com/grocy/teams/93189/et_EE/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"

View File

@ -1,5 +1,6 @@
#
# Translators:
# 27c44a6313ba1383accb315c80acc885_50e4575, 2023
# Lauri Lepik, 2023
# aylamz, 2023
#
msgid ""

View File

@ -1,6 +1,7 @@
#
# Translators:
# Mario Loik <mariomobla@gmail.com>, 2020
# 27c44a6313ba1383accb315c80acc885_50e4575, 2023
# Lauri Lepik, 2023
# aylamz, 2023
#
msgid ""
@ -2783,8 +2784,3 @@ msgstr ""
msgid "List actions"
msgstr ""
msgid ""
"After this product was once in stock and when the desired quantity unit "
"cannot be selected here, first create a corresponding unit conversion"
msgstr ""

View File

@ -1,5 +1,6 @@
#
# Translators:
# 27c44a6313ba1383accb315c80acc885_50e4575, 2023
# Lauri Lepik, 2023
#
msgid ""
msgstr ""
@ -7,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: 27c44a6313ba1383accb315c80acc885_50e4575, 2023\n"
"Last-Translator: Lauri Lepik, 2023\n"
"Language-Team: Estonian (Estonia) (https://app.transifex.com/grocy/teams/93189/et_EE/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"

View File

@ -1,3 +1,4 @@
#
# Translators:
# Sami Kiviniemi, 2024
#

View File

@ -1,3 +1,4 @@
#
# Translators:
# Sami Kiviniemi, 2024
#

View File

@ -1,3 +1,4 @@
#
# Translators:
# Bernd Bestel <bernd@berrnd.de>, 2020
#

Some files were not shown because too many files have changed in this diff Show More