Compare commits
63 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
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 | ||
|
e2ebc037f2 | ||
|
550aa5565b | ||
|
c105ebc979 | ||
|
7ef744a995 | ||
|
ee4a082c74 | ||
|
1d7f7b2992 | ||
|
7689356a57 | ||
|
1401ed5c00 | ||
|
bae4a7f04c | ||
|
a44d746176 | ||
|
3afb9643c4 | ||
|
61a3a4329b | ||
|
491ad8c791 | ||
|
339a1ebffc | ||
|
1c35fecc85 | ||
|
d006436d49 | ||
|
6c4cc00fd5 | ||
|
847337443d | ||
|
b74fbddd94 | ||
|
8b444a03e5 | ||
|
e946ec79d5 | ||
|
ca740e8cee | ||
|
5d48b02b37 | ||
|
73ad9d39ab | ||
|
fd7e24b7d1 | ||
|
57ccb8645e | ||
|
e8d6d455f4 |
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
|
||||
|
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: 85 KiB After Width: | Height: | Size: 87 KiB |
BIN
.github/publication_assets/mealplan.png
vendored
Before Width: | Height: | Size: 499 KiB After Width: | Height: | Size: 476 KiB |
BIN
.github/publication_assets/shoppinglist.png
vendored
Before Width: | Height: | Size: 121 KiB After Width: | Height: | Size: 50 KiB |
BIN
.github/publication_assets/stock.png
vendored
Before Width: | Height: | Size: 174 KiB After Width: | Height: | Size: 170 KiB |
@@ -4,8 +4,7 @@ $finder = PhpCsFixer\Finder::create()
|
||||
->exclude(['packages'])
|
||||
->ignoreVCSIgnored(true)
|
||||
->files()->name('*.php')
|
||||
->in(__DIR__)
|
||||
;
|
||||
->in(__DIR__);
|
||||
|
||||
$cfg = new PhpCsFixer\Config();
|
||||
return $cfg
|
||||
@@ -15,81 +14,41 @@ return $cfg
|
||||
'array_syntax' => ['syntax' => 'short'],
|
||||
'combine_consecutive_unsets' => true,
|
||||
'class_attributes_separation' => true,
|
||||
'class_attributes_separation' => ['elements' => ['const' => 'none', 'property' => 'none']],
|
||||
'multiline_whitespace_before_semicolons' => false,
|
||||
'single_quote' => true,
|
||||
// 'blank_line_after_opening_tag' => true,
|
||||
// 'blank_line_before_return' => true,
|
||||
'braces' => [
|
||||
'allow_single_line_closure' => true,
|
||||
'position_after_anonymous_constructs' => 'same',
|
||||
'position_after_control_structures' => 'next',
|
||||
'position_after_functions_and_oop_constructs' => 'next',
|
||||
'blank_line_after_opening_tag' => true,
|
||||
'curly_braces_position' => [
|
||||
'control_structures_opening_brace' => 'next_line_unless_newline_at_signature_end',
|
||||
'anonymous_functions_opening_brace' => 'next_line_unless_newline_at_signature_end'
|
||||
],
|
||||
'control_structure_continuation_position' => [
|
||||
'position' => 'next_line'
|
||||
],
|
||||
'cast_spaces' => [
|
||||
'space' => 'none'
|
||||
],
|
||||
// 'cast_spaces' => true,
|
||||
// 'class_definition' => array('singleLine' => true),
|
||||
'concat_space' => ['spacing' => 'one'],
|
||||
'declare_equal_normalize' => true,
|
||||
'function_typehint_space' => true,
|
||||
'type_declaration_spaces' => true,
|
||||
'single_line_comment_style' => ['comment_types' => ['hash']],
|
||||
'include' => true,
|
||||
'lowercase_cast' => true,
|
||||
// 'native_function_casing' => true,
|
||||
// 'new_with_braces' => true,
|
||||
// 'no_blank_lines_after_class_opening' => true,
|
||||
// 'no_blank_lines_after_phpdoc' => true,
|
||||
// 'no_empty_comment' => true,
|
||||
// 'no_empty_phpdoc' => true,
|
||||
// 'no_empty_statement' => true,
|
||||
'no_leading_import_slash' => true,
|
||||
'no_leading_namespace_whitespace' => true,
|
||||
// 'no_mixed_echo_print' => array('use' => 'echo'),
|
||||
'no_multiline_whitespace_around_double_arrow' => true,
|
||||
// 'no_short_bool_cast' => true,
|
||||
// 'no_singleline_whitespace_before_semicolons' => true,
|
||||
'no_spaces_around_offset' => true,
|
||||
// 'no_trailing_comma_in_list_call' => true,
|
||||
// 'no_trailing_comma_in_singleline_array' => true,
|
||||
// 'no_unneeded_control_parentheses' => true,
|
||||
// 'no_unused_imports' => true,
|
||||
'no_whitespace_before_comma_in_array' => true,
|
||||
'no_whitespace_in_blank_line' => true,
|
||||
// 'normalize_index_brace' => true,
|
||||
'object_operator_without_whitespace' => true,
|
||||
// 'php_unit_fqcn_annotation' => true,
|
||||
// 'phpdoc_align' => true,
|
||||
// 'phpdoc_annotation_without_dot' => true,
|
||||
// 'phpdoc_indent' => true,
|
||||
// 'phpdoc_inline_tag' => true,
|
||||
// 'phpdoc_no_access' => true,
|
||||
// 'phpdoc_no_alias_tag' => true,
|
||||
// 'phpdoc_no_empty_return' => true,
|
||||
// 'phpdoc_no_package' => true,
|
||||
// 'phpdoc_no_useless_inheritdoc' => true,
|
||||
// 'phpdoc_return_self_reference' => true,
|
||||
// 'phpdoc_scalar' => true,
|
||||
// 'phpdoc_separation' => true,
|
||||
// 'phpdoc_single_line_var_spacing' => true,
|
||||
// 'phpdoc_summary' => true,
|
||||
// 'phpdoc_to_comment' => true,
|
||||
// 'phpdoc_trim' => true,
|
||||
// 'phpdoc_types' => true,
|
||||
// 'phpdoc_var_without_name' => true,
|
||||
// 'pre_increment' => true,
|
||||
// 'return_type_declaration' => true,
|
||||
// 'self_accessor' => true,
|
||||
// 'short_scalar_cast' => true,
|
||||
'single_blank_line_before_namespace' => true,
|
||||
// 'single_class_element_per_statement' => true,
|
||||
// 'space_after_semicolon' => true,
|
||||
// 'standardize_not_equals' => true,
|
||||
'blank_lines_before_namespace' => true,
|
||||
'ternary_operator_spaces' => true,
|
||||
// 'trailing_comma_in_multiline_array' => true,
|
||||
'trim_array_spaces' => true,
|
||||
'unary_operator_spaces' => true,
|
||||
'whitespace_after_comma_in_array' => true,
|
||||
'no_trailing_comma_in_singleline' => true
|
||||
])
|
||||
->setIndent("\t")
|
||||
->setLineEnding("\n")
|
||||
->setUsingCache(false)
|
||||
->setFinder($finder)
|
||||
;
|
||||
->setFinder($finder);
|
||||
|
27
README.md
@@ -20,7 +20,7 @@ See the website → <https://grocy.info>
|
||||
- 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
|
||||
|
||||
@@ -28,12 +28,10 @@ See the website for a list of community contributed Add-ons / Tools. → [htt
|
||||
|
||||
## How to install
|
||||
|
||||
> 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.
|
||||
> 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) - 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,11 +43,14 @@ 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 (with SQLite 3.34.0+)
|
||||
- Required PHP extensions: `fileinfo`, `pdo_sqlite`, `gd`, `ctype`, `json`, `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._
|
||||
- PHP 8.1 or 8.2 (with SQLite 3.34.0+)
|
||||
- Required PHP extensions: `fileinfo`, `pdo_sqlite`, `gd`, `ctype`, `json`, `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
|
||||
|
||||
@@ -101,11 +102,11 @@ _My personal recommendation: Use a USB barcode laser scanner. They are cheap and
|
||||
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 `2023-05-17`
|
||||
- `YYYYMMDD` gets expanded to the proper ISO-8601 notation
|
||||
- Example: `20210417` will be converted to `2021-04-17`
|
||||
- Example: `20230417` will be converted to `2023-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`
|
||||
- Example: `202307e` will be converted to `2023-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")
|
||||
@@ -142,11 +143,11 @@ If you don't use certain feature sets of Grocy (for example if you don't need "C
|
||||
|
||||
### Demo mode
|
||||
|
||||
When the `MODE` setting is set to `dev`, `demo` or `prerelease`, the application will work in a demo mode which means authentication is disabled and some demo data will be generated during the database schema migration.
|
||||
When the `MODE` setting is set to `dev`, `demo` or `prerelease`, the application will work in a demo mode which means authentication is disabled and some demo data will be generated during the database schema migration (pass the query parameter `nodemodata`, e.g. `https://grocy.example.com/?nodemodata` to skip that).
|
||||
|
||||
### Embedded mode
|
||||
|
||||
When the file `embedded.txt` exists, it must contain a valid and writable path which will be used as the data directory instead of `data` and authentication will be disabled (used in [grocy-desktop](https://github.com/grocy/grocy-desktop)).
|
||||
When the file `embedded.txt` exists, it must contain a valid and writable path which will be used as the data directory instead of `data` and authentication will be disabled (used in [Grocy Desktop](https://github.com/grocy/grocy-desktop)).
|
||||
|
||||
In embedded mode, settings can be overridden by text files in `data/settingoverrides`, the file name must be `<SettingName>.txt` (e. g. `BASE_URL.txt`) and the content must be the setting value (normally one single line).
|
||||
|
||||
@@ -156,7 +157,7 @@ Any help is welcome, feel free to contribute anything which comes to your mind o
|
||||
|
||||
## Roadmap
|
||||
|
||||
There is none. The progress of a specific bug/enhancement is always tracked in the corresponding issue, at least by commit comment references.
|
||||
There is none, this is a hobby project. 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).
|
||||
|
||||
|
9
app.php
@@ -62,15 +62,18 @@ AppFactory::setContainer(new DI\Container());
|
||||
$app = AppFactory::create();
|
||||
|
||||
$container = $app->getContainer();
|
||||
$container->set('view', function (Container $container) {
|
||||
$container->set('view', function (Container $container)
|
||||
{
|
||||
return new Blade(__DIR__ . '/views', GROCY_DATAPATH . '/viewcache');
|
||||
});
|
||||
|
||||
$container->set('UrlManager', function (Container $container) {
|
||||
$container->set('UrlManager', function (Container $container)
|
||||
{
|
||||
return new UrlManager(GROCY_BASE_URL);
|
||||
});
|
||||
|
||||
$container->set('ApiKeyHeaderName', function (Container $container) {
|
||||
$container->set('ApiKeyHeaderName', function (Container $container)
|
||||
{
|
||||
return 'GROCY-API-KEY';
|
||||
});
|
||||
|
||||
|
@@ -4,9 +4,11 @@
|
||||
|
||||
> _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
|
||||
|
19
changelog/71_4.0.1_2023-08-06.md
Normal file
@@ -0,0 +1,19 @@
|
||||
> 💡 PHP 8.2 is from now on (additionally to PHP 8.1) supported.
|
||||
|
||||
### Stock
|
||||
|
||||
- Fixed performance issues affecting all places where quantity unit conversions / prices are involved
|
||||
- Fixed that the upgrade failed when having improperly defined product specific quantity unit conversions
|
||||
- Fixed that edited stock entries were not considered in some cases (affecting the product's last price, average price, the price history and the stock reports)
|
||||
|
||||
### Shopping list
|
||||
|
||||
- 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
|
||||
|
||||
- Fixed that the meal plan did initially not display the current week when the settings `MEAL_PLAN_FIRST_DAY_OF_WEEK` and `CALENDAR_FIRST_DAY_OF_WEEK` were set to different values
|
||||
|
||||
### API
|
||||
|
||||
- Fixed performance issues on the endpoint `/stock/products/{productId}`
|
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
|
@@ -2,6 +2,8 @@
|
||||
|
||||
> ❗ xxxImportant upgrade informationXXX
|
||||
|
||||
> 💡 xxxMinor upgrade informationXXX
|
||||
|
||||
### New feature: xxxx
|
||||
|
||||
- xxx
|
||||
|
@@ -6,8 +6,8 @@
|
||||
"slim/http": "^1.0",
|
||||
"php-di/php-di": "^7.0.3",
|
||||
"berrnd/slim-blade-view": "^1.0.0",
|
||||
"morris/lessql": "dev-php81",
|
||||
"gettext/gettext": "dev-php81",
|
||||
"morris/lessql": "dev-php82",
|
||||
"gettext/gettext": "^4.8.10",
|
||||
"eluceo/ical": "^2.2.0",
|
||||
"erusev/parsedown": "^1.7",
|
||||
"gumlet/php-image-resize": "^2.0",
|
||||
@@ -20,10 +20,6 @@
|
||||
{
|
||||
"type": "vcs",
|
||||
"url": "https://github.com/berrnd/lessql"
|
||||
},
|
||||
{
|
||||
"type": "vcs",
|
||||
"url": "https://github.com/berrnd/Gettext"
|
||||
}
|
||||
],
|
||||
"autoload": {
|
||||
@@ -39,6 +35,7 @@
|
||||
},
|
||||
"config": {
|
||||
"vendor-dir": "packages",
|
||||
"platform-check": false
|
||||
"platform-check": false,
|
||||
"optimize-autoloader": true
|
||||
}
|
||||
}
|
||||
|
725
composer.lock
generated
@@ -14,8 +14,9 @@
|
||||
// The settings defined here below
|
||||
|
||||
// Either "production", "dev", "demo" or "prerelease"
|
||||
// When not "production", authentication will be disabled and
|
||||
// demo data will be populated during database migrations
|
||||
// When not "production", the application will work in a demo mode which means
|
||||
// authentication is disabled and some demo data will be generated during the database schema migration
|
||||
// (pass the query parameter "nodemodata", e.g. https://grocy.example.com/?nodemodata to skip that)
|
||||
Setting('MODE', 'production');
|
||||
|
||||
// The directory name of one of the available localization folders
|
||||
|
@@ -4,13 +4,12 @@ namespace Grocy\Controllers;
|
||||
|
||||
use LessQL\Result;
|
||||
use Psr\Http\Message\ResponseInterface as Response;
|
||||
use Slim\Exception\HttpException;
|
||||
|
||||
class BaseApiController extends BaseController
|
||||
{
|
||||
const PATTERN_FIELD = '[A-Za-z_][A-Za-z0-9_]+';
|
||||
|
||||
const PATTERN_OPERATOR = '!?((>=)|(<=)|=|~|<|>|(§))';
|
||||
|
||||
const PATTERN_VALUE = '[A-Za-z\p{L}\p{M}0-9*_.$#^| -\\\]+';
|
||||
|
||||
protected $OpenApiSpec = null;
|
||||
@@ -151,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,6 +29,7 @@ class BaseController
|
||||
}
|
||||
|
||||
protected $AppContainer;
|
||||
private $View;
|
||||
|
||||
protected function getApiKeyService()
|
||||
{
|
||||
@@ -123,10 +124,12 @@ class BaseController
|
||||
$this->View->set('version', $versionInfo->Version);
|
||||
|
||||
$localizationService = $this->getLocalizationService();
|
||||
$this->View->set('__t', function (string $text, ...$placeholderValues) use ($localizationService) {
|
||||
$this->View->set('__t', function (string $text, ...$placeholderValues) use ($localizationService)
|
||||
{
|
||||
return $localizationService->__t($text, $placeholderValues);
|
||||
});
|
||||
$this->View->set('__n', function ($number, $singularForm, $pluralForm, $isQu = false) use ($localizationService) {
|
||||
$this->View->set('__n', function ($number, $singularForm, $pluralForm, $isQu = false) use ($localizationService)
|
||||
{
|
||||
return $localizationService->__n($number, $singularForm, $pluralForm, $isQu);
|
||||
});
|
||||
$this->View->set('LocalizationStrings', $localizationService->GetPoAsJsonString());
|
||||
@@ -140,7 +143,8 @@ class BaseController
|
||||
}
|
||||
$this->View->set('dir', $dir);
|
||||
|
||||
$this->View->set('U', function ($relativePath, $isResource = false) use ($container) {
|
||||
$this->View->set('U', function ($relativePath, $isResource = false) use ($container)
|
||||
{
|
||||
return $container->get('UrlManager')->ConstructUrl($relativePath, $isResource);
|
||||
});
|
||||
|
||||
@@ -204,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;
|
||||
}
|
||||
}
|
||||
|
@@ -16,11 +16,11 @@ trait GrocycodeTrait
|
||||
|
||||
if (GROCY_GROCYCODE_TYPE == '2D')
|
||||
{
|
||||
$png = (new DatamatrixFactory())->setCode((string) $grocycode)->setSize($size)->getDatamatrixPngData();
|
||||
$png = (new DatamatrixFactory())->setCode((string)$grocycode)->setSize($size)->getDatamatrixPngData();
|
||||
}
|
||||
else
|
||||
{
|
||||
$png = (new BarcodeFactory())->setType('C128')->setCode((string) $grocycode)->setHeight($size)->getBarcodePngData();
|
||||
$png = (new BarcodeFactory())->setType('C128')->setCode((string)$grocycode)->setHeight($size)->getBarcodePngData();
|
||||
}
|
||||
|
||||
$isDownload = $request->getQueryParam('download', false);
|
||||
|
@@ -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('/'));
|
||||
}
|
||||
|
@@ -64,7 +64,7 @@ class RecipesController extends BaseController
|
||||
'recipesResolved' => $this->getRecipesService()->GetRecipesResolved("recipe_id IN (SELECT recipe_id FROM meal_plan_internal_recipe_relation WHERE $mealPlanWhereTimespan)"),
|
||||
'products' => $this->getDatabase()->products()->orderBy('name', 'COLLATE NOCASE'),
|
||||
'quantityUnits' => $this->getDatabase()->quantity_units()->orderBy('name', 'COLLATE NOCASE'),
|
||||
'quantityUnitConversionsResolved' => $this->getDatabase()->quantity_unit_conversions_resolved(),
|
||||
'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()
|
||||
@@ -107,7 +107,7 @@ class RecipesController extends BaseController
|
||||
'quantityUnits' => $this->getDatabase()->quantity_units(),
|
||||
'userfields' => $this->getUserfieldsService()->GetFields('recipes'),
|
||||
'userfieldValues' => $this->getUserfieldsService()->GetAllValues('recipes'),
|
||||
'quantityUnitConversionsResolved' => $this->getDatabase()->quantity_unit_conversions_resolved(),
|
||||
'quantityUnitConversionsResolved' => $this->getDatabase()->cache__quantity_unit_conversions_resolved(),
|
||||
'selectedRecipeTotalCosts' => $totalCosts,
|
||||
'selectedRecipeTotalCalories' => $totalCalories,
|
||||
'mealplanSections' => $this->getDatabase()->meal_plan_sections()->orderBy('sort_number')
|
||||
@@ -162,7 +162,7 @@ class RecipesController extends BaseController
|
||||
'recipes' => $this->getDatabase()->recipes()->where('type', RecipesService::RECIPE_TYPE_NORMAL)->orderBy('name', 'COLLATE NOCASE'),
|
||||
'recipeNestings' => $this->getDatabase()->recipes_nestings()->where('recipe_id', $recipeId),
|
||||
'userfields' => $this->getUserfieldsService()->GetFields('recipes'),
|
||||
'quantityUnitConversionsResolved' => $this->getDatabase()->quantity_unit_conversions_resolved()
|
||||
'quantityUnitConversionsResolved' => $this->getDatabase()->cache__quantity_unit_conversions_resolved()
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -176,7 +176,7 @@ class RecipesController extends BaseController
|
||||
'recipePos' => new \stdClass(),
|
||||
'products' => $this->getDatabase()->products()->where('active = 1')->orderBy('name', 'COLLATE NOCASE'),
|
||||
'quantityUnits' => $this->getDatabase()->quantity_units()->orderBy('name', 'COLLATE NOCASE'),
|
||||
'quantityUnitConversionsResolved' => $this->getDatabase()->quantity_unit_conversions_resolved()
|
||||
'quantityUnitConversionsResolved' => $this->getDatabase()->cache__quantity_unit_conversions_resolved()
|
||||
]);
|
||||
}
|
||||
else
|
||||
@@ -187,7 +187,7 @@ class RecipesController extends BaseController
|
||||
'recipePos' => $this->getDatabase()->recipes_pos($args['recipePosId']),
|
||||
'products' => $this->getDatabase()->products()->orderBy('name', 'COLLATE NOCASE'),
|
||||
'quantityUnits' => $this->getDatabase()->quantity_units()->orderBy('name', 'COLLATE NOCASE'),
|
||||
'quantityUnitConversionsResolved' => $this->getDatabase()->quantity_unit_conversions_resolved()
|
||||
'quantityUnitConversionsResolved' => $this->getDatabase()->cache__quantity_unit_conversions_resolved()
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
@@ -19,7 +19,7 @@ class StockController extends BaseController
|
||||
'recipes' => $this->getDatabase()->recipes()->where('type', RecipesService::RECIPE_TYPE_NORMAL)->orderBy('name', 'COLLATE NOCASE'),
|
||||
'locations' => $this->getDatabase()->locations()->orderBy('name', 'COLLATE NOCASE'),
|
||||
'quantityUnits' => $this->getDatabase()->quantity_units()->orderBy('name', 'COLLATE NOCASE'),
|
||||
'quantityUnitConversionsResolved' => $this->getDatabase()->quantity_unit_conversions_resolved()
|
||||
'quantityUnitConversionsResolved' => $this->getDatabase()->cache__quantity_unit_conversions_resolved()
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ class StockController extends BaseController
|
||||
'shoppinglocations' => $this->getDatabase()->shopping_locations()->where('active = 1')->orderBy('name', 'COLLATE NOCASE'),
|
||||
'locations' => $this->getDatabase()->locations()->where('active = 1')->orderBy('name', 'COLLATE NOCASE'),
|
||||
'quantityUnits' => $this->getDatabase()->quantity_units()->orderBy('name', 'COLLATE NOCASE'),
|
||||
'quantityUnitConversionsResolved' => $this->getDatabase()->quantity_unit_conversions_resolved(),
|
||||
'quantityUnitConversionsResolved' => $this->getDatabase()->cache__quantity_unit_conversions_resolved(),
|
||||
'userfields' => $this->getUserfieldsService()->GetFields('stock')
|
||||
]);
|
||||
}
|
||||
@@ -147,7 +147,7 @@ class StockController extends BaseController
|
||||
'product' => $product,
|
||||
'shoppinglocations' => $this->getDatabase()->shopping_locations()->where('active = 1')->orderBy('name', 'COLLATE NOCASE'),
|
||||
'quantityUnits' => $this->getDatabase()->quantity_units()->orderBy('name', 'COLLATE NOCASE'),
|
||||
'quantityUnitConversionsResolved' => $this->getDatabase()->quantity_unit_conversions_resolved(),
|
||||
'quantityUnitConversionsResolved' => $this->getDatabase()->cache__quantity_unit_conversions_resolved(),
|
||||
'userfields' => $this->getUserfieldsService()->GetFields('product_barcodes')
|
||||
]);
|
||||
}
|
||||
@@ -159,7 +159,7 @@ class StockController extends BaseController
|
||||
'product' => $product,
|
||||
'shoppinglocations' => $this->getDatabase()->shopping_locations()->where('active = 1')->orderBy('name', 'COLLATE NOCASE'),
|
||||
'quantityUnits' => $this->getDatabase()->quantity_units()->orderBy('name', 'COLLATE NOCASE'),
|
||||
'quantityUnitConversionsResolved' => $this->getDatabase()->quantity_unit_conversions_resolved(),
|
||||
'quantityUnitConversionsResolved' => $this->getDatabase()->cache__quantity_unit_conversions_resolved(),
|
||||
'userfields' => $this->getUserfieldsService()->GetFields('product_barcodes')
|
||||
]);
|
||||
}
|
||||
@@ -192,8 +192,8 @@ class StockController extends BaseController
|
||||
'locations' => $this->getDatabase()->locations()->where('active = 1')->orderBy('name', 'COLLATE NOCASE'),
|
||||
'barcodes' => $this->getDatabase()->product_barcodes()->orderBy('barcode'),
|
||||
'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 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 quantity_unit_conversions_resolved WHERE product_id = :1)', $product->id)->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'),
|
||||
@@ -289,7 +289,7 @@ class StockController extends BaseController
|
||||
'shoppinglocations' => $this->getDatabase()->shopping_locations()->where('active = 1')->orderBy('name', 'COLLATE NOCASE'),
|
||||
'locations' => $this->getDatabase()->locations()->where('active = 1')->orderBy('name', 'COLLATE NOCASE'),
|
||||
'quantityUnits' => $this->getDatabase()->quantity_units()->where('active = 1')->orderBy('name', 'COLLATE NOCASE'),
|
||||
'quantityUnitConversionsResolved' => $this->getDatabase()->quantity_unit_conversions_resolved(),
|
||||
'quantityUnitConversionsResolved' => $this->getDatabase()->cache__quantity_unit_conversions_resolved(),
|
||||
'userfields' => $this->getUserfieldsService()->GetFields('stock')
|
||||
]);
|
||||
}
|
||||
@@ -399,7 +399,7 @@ class StockController extends BaseController
|
||||
'missingProducts' => $this->getStockService()->GetMissingProducts(),
|
||||
'shoppingLists' => $this->getDatabase()->shopping_lists()->orderBy('name', 'COLLATE NOCASE'),
|
||||
'selectedShoppingListId' => $listId,
|
||||
'quantityUnitConversionsResolved' => $this->getDatabase()->quantity_unit_conversions_resolved(),
|
||||
'quantityUnitConversionsResolved' => $this->getDatabase()->cache__quantity_unit_conversions_resolved(),
|
||||
'productUserfields' => $this->getUserfieldsService()->GetFields('products'),
|
||||
'productUserfieldValues' => $this->getUserfieldsService()->GetAllValues('products'),
|
||||
'productGroupUserfields' => $this->getUserfieldsService()->GetFields('product_groups'),
|
||||
@@ -438,7 +438,7 @@ class StockController extends BaseController
|
||||
'shoppingLists' => $this->getDatabase()->shopping_lists()->orderBy('name', 'COLLATE NOCASE'),
|
||||
'mode' => 'create',
|
||||
'quantityUnits' => $this->getDatabase()->quantity_units()->where('active = 1')->orderBy('name', 'COLLATE NOCASE'),
|
||||
'quantityUnitConversionsResolved' => $this->getDatabase()->quantity_unit_conversions_resolved(),
|
||||
'quantityUnitConversionsResolved' => $this->getDatabase()->cache__quantity_unit_conversions_resolved(),
|
||||
'userfields' => $this->getUserfieldsService()->GetFields('shopping_list')
|
||||
]);
|
||||
}
|
||||
@@ -451,7 +451,7 @@ class StockController extends BaseController
|
||||
'shoppingLists' => $this->getDatabase()->shopping_lists()->orderBy('name', 'COLLATE NOCASE'),
|
||||
'mode' => 'edit',
|
||||
'quantityUnits' => $this->getDatabase()->quantity_units()->where('active = 1')->orderBy('name', 'COLLATE NOCASE'),
|
||||
'quantityUnitConversionsResolved' => $this->getDatabase()->quantity_unit_conversions_resolved(),
|
||||
'quantityUnitConversionsResolved' => $this->getDatabase()->cache__quantity_unit_conversions_resolved(),
|
||||
'userfields' => $this->getUserfieldsService()->GetFields('shopping_list')
|
||||
]);
|
||||
}
|
||||
@@ -564,7 +564,7 @@ class StockController extends BaseController
|
||||
'barcodes' => $this->getDatabase()->product_barcodes_comma_separated(),
|
||||
'locations' => $this->getDatabase()->locations()->where('active = 1')->orderBy('name', 'COLLATE NOCASE'),
|
||||
'quantityUnits' => $this->getDatabase()->quantity_units()->where('active = 1')->orderBy('name', 'COLLATE NOCASE'),
|
||||
'quantityUnitConversionsResolved' => $this->getDatabase()->quantity_unit_conversions_resolved()
|
||||
'quantityUnitConversionsResolved' => $this->getDatabase()->cache__quantity_unit_conversions_resolved()
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -599,11 +599,11 @@ class StockController extends BaseController
|
||||
if (isset($request->getQueryParams()['product']))
|
||||
{
|
||||
$product = $this->getDatabase()->products($request->getQueryParams()['product']);
|
||||
$quantityUnitConversionsResolved = $this->getDatabase()->quantity_unit_conversions_resolved()->where('product_id', $product->id);
|
||||
$quantityUnitConversionsResolved = $this->getDatabase()->cache__quantity_unit_conversions_resolved()->where('product_id', $product->id);
|
||||
}
|
||||
else
|
||||
{
|
||||
$quantityUnitConversionsResolved = $this->getDatabase()->quantity_unit_conversions_resolved()->where('product_id IS NULL');
|
||||
$quantityUnitConversionsResolved = $this->getDatabase()->cache__quantity_unit_conversions_resolved()->where('product_id IS NULL');
|
||||
}
|
||||
|
||||
return $this->renderPage($response, 'quantityunitconversionsresolved', [
|
||||
|
@@ -21,29 +21,17 @@ class StockReportsController extends BaseController
|
||||
$where = "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 product_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']) and $request->getQueryParams()['product-group'] != 'all')
|
||||
{
|
||||
$where .= ' AND pg.id = ' . $request->getQueryParams()['product_group'];
|
||||
$where .= ' AND pg.id = ' . $request->getQueryParams()['product-group'];
|
||||
}
|
||||
|
||||
$sql = "
|
||||
@@ -53,22 +41,56 @@ class StockReportsController extends BaseController
|
||||
pg.id AS group_id,
|
||||
pg.name AS group_name,
|
||||
SUM(pph.amount * pph.price) AS total
|
||||
FROM product_price_history pph
|
||||
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 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
|
||||
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
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
@@ -32,12 +32,34 @@ class SystemController extends BaseController
|
||||
if (GROCY_MODE === 'dev' || GROCY_MODE === 'demo' || GROCY_MODE === 'prerelease')
|
||||
{
|
||||
$demoDataGeneratorService = DemoDataGeneratorService::getInstance();
|
||||
$demoDataGeneratorService->PopulateDemoData();
|
||||
$demoDataGeneratorService->PopulateDemoData(isset($request->getQueryParams()['nodemodata']));
|
||||
}
|
||||
|
||||
return $response->withRedirect($this->AppContainer->get('UrlManager')->ConstructUrl($this->GetEntryPageRelative()));
|
||||
}
|
||||
|
||||
public function Manifest(Request $request, Response $response, array $args)
|
||||
{
|
||||
$data = explode('#', base64_decode($request->getQueryParams()['data']));
|
||||
|
||||
$manifest = [
|
||||
'name' => 'Grocy ' . $data[0],
|
||||
'short_name' => 'Grocy ' . $data[0],
|
||||
'icons' => [[
|
||||
'src' => './img/icon-1024.png',
|
||||
'sizes'=> '1024x1024',
|
||||
'type' => 'image/png'
|
||||
]],
|
||||
'start_url' => $data[1],
|
||||
'background_color' => '#333131',
|
||||
'theme_color' => '#333131',
|
||||
'display' => 'standalone'
|
||||
];
|
||||
|
||||
$response->getBody()->write(json_encode($manifest));
|
||||
return $response->withHeader('Content-Type', 'application/json');
|
||||
}
|
||||
|
||||
private function GetEntryPageRelative()
|
||||
{
|
||||
if (defined('GROCY_ENTRY_PAGE'))
|
||||
|
@@ -8,63 +8,34 @@ use LessQL\Result;
|
||||
class User
|
||||
{
|
||||
const PERMISSION_ADMIN = 'ADMIN';
|
||||
|
||||
const PERMISSION_BATTERIES = 'BATTERIES';
|
||||
|
||||
const PERMISSION_BATTERIES_TRACK_CHARGE_CYCLE = 'BATTERIES_TRACK_CHARGE_CYCLE';
|
||||
|
||||
const PERMISSION_BATTERIES_UNDO_CHARGE_CYCLE = 'BATTERIES_UNDO_CHARGE_CYCLE';
|
||||
|
||||
const PERMISSION_CALENDAR = 'CALENDAR';
|
||||
|
||||
const PERMISSION_CHORES = 'CHORES';
|
||||
|
||||
const PERMISSION_CHORE_TRACK_EXECUTION = 'CHORE_TRACK_EXECUTION';
|
||||
|
||||
const PERMISSION_CHORE_UNDO_EXECUTION = 'CHORE_UNDO_EXECUTION';
|
||||
|
||||
const PERMISSION_EQUIPMENT = 'EQUIPMENT';
|
||||
|
||||
const PERMISSION_MASTER_DATA_EDIT = 'MASTER_DATA_EDIT';
|
||||
|
||||
const PERMISSION_RECIPES = 'RECIPES';
|
||||
|
||||
const PERMISSION_RECIPES_MEALPLAN = 'RECIPES_MEALPLAN';
|
||||
|
||||
const PERMISSION_SHOPPINGLIST = 'SHOPPINGLIST';
|
||||
|
||||
const PERMISSION_SHOPPINGLIST_ITEMS_ADD = 'SHOPPINGLIST_ITEMS_ADD';
|
||||
|
||||
const PERMISSION_SHOPPINGLIST_ITEMS_DELETE = 'SHOPPINGLIST_ITEMS_DELETE';
|
||||
|
||||
const PERMISSION_STOCK = 'STOCK';
|
||||
|
||||
const PERMISSION_STOCK_CONSUME = 'STOCK_CONSUME';
|
||||
|
||||
const PERMISSION_STOCK_EDIT = 'STOCK_EDIT';
|
||||
|
||||
const PERMISSION_STOCK_INVENTORY = 'STOCK_INVENTORY';
|
||||
|
||||
const PERMISSION_STOCK_OPEN = 'STOCK_OPEN';
|
||||
|
||||
const PERMISSION_STOCK_PURCHASE = 'STOCK_PURCHASE';
|
||||
|
||||
const PERMISSION_STOCK_TRANSFER = 'STOCK_TRANSFER';
|
||||
|
||||
const PERMISSION_TASKS = 'TASKS';
|
||||
|
||||
const PERMISSION_TASKS_MARK_COMPLETED = 'TASKS_MARK_COMPLETED';
|
||||
|
||||
const PERMISSION_TASKS_UNDO_EXECUTION = 'TASKS_UNDO_EXECUTION';
|
||||
|
||||
const PERMISSION_USERS = 'USERS';
|
||||
|
||||
const PERMISSION_USERS_CREATE = 'USERS_CREATE';
|
||||
|
||||
const PERMISSION_USERS_EDIT = 'USERS_EDIT';
|
||||
|
||||
const PERMISSION_USERS_EDIT_SELF = 'USERS_EDIT_SELF';
|
||||
|
||||
const PERMISSION_USERS_READ = 'USERS_READ';
|
||||
|
||||
public function __construct()
|
||||
|
@@ -51,7 +51,8 @@ class UsersController extends BaseController
|
||||
public function UserSettings(Request $request, Response $response, array $args)
|
||||
{
|
||||
return $this->renderPage($response, 'usersettings', [
|
||||
'languages' => array_filter(scandir(__DIR__ . '/../localization'), function ($item) {
|
||||
'languages' => array_filter(scandir(__DIR__ . '/../localization'), function ($item)
|
||||
{
|
||||
if ($item == '.' || $item == '..')
|
||||
{
|
||||
return false;
|
||||
|
@@ -11,7 +11,6 @@ abstract class BaseBarcodeLookupPlugin
|
||||
}
|
||||
|
||||
protected $Locations;
|
||||
|
||||
protected $QuantityUnits;
|
||||
|
||||
final public function Lookup($barcode)
|
||||
|
@@ -18,13 +18,9 @@ namespace Grocy\Helpers;
|
||||
class Grocycode
|
||||
{
|
||||
public const PRODUCT = 'p';
|
||||
|
||||
public const BATTERY = 'b';
|
||||
|
||||
public const CHORE = 'c';
|
||||
|
||||
public const RECIPE = 'r';
|
||||
|
||||
public const MAGIC = 'grcy';
|
||||
|
||||
public function __construct(...$args)
|
||||
@@ -49,11 +45,8 @@ class Grocycode
|
||||
}
|
||||
|
||||
public static $Items = [self::PRODUCT, self::BATTERY, self::CHORE, self::RECIPE];
|
||||
|
||||
private $type;
|
||||
|
||||
private $id;
|
||||
|
||||
private $extra_data = [];
|
||||
|
||||
public static function Validate(string $code)
|
||||
|
@@ -1204,11 +1204,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"
|
||||
|
||||
|
@@ -33,6 +33,10 @@ msgstr "nombre-integral"
|
||||
msgid "number-decimal"
|
||||
msgstr "nombre-decimal"
|
||||
|
||||
# Number (currency)
|
||||
msgid "number-currency"
|
||||
msgstr ""
|
||||
|
||||
# Date (without time)
|
||||
msgid "date"
|
||||
msgstr "data"
|
||||
|
@@ -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"
|
||||
@@ -1236,10 +1234,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"
|
||||
|
||||
@@ -2728,7 +2722,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"
|
||||
@@ -2780,7 +2774,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"
|
||||
@@ -2823,12 +2817,12 @@ 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"
|
||||
|
@@ -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"
|
||||
|
@@ -1209,10 +1209,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"
|
||||
|
||||
|
@@ -35,6 +35,10 @@ msgstr "tal-heltal"
|
||||
msgid "number-decimal"
|
||||
msgstr "tal-decimal"
|
||||
|
||||
# Number (currency)
|
||||
msgid "number-currency"
|
||||
msgstr ""
|
||||
|
||||
# Date (without time)
|
||||
msgid "date"
|
||||
msgstr "dato"
|
||||
|
@@ -1222,11 +1222,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"
|
||||
|
||||
|
@@ -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)"
|
||||
|
@@ -1218,9 +1218,6 @@ msgstr "Ποτέ"
|
||||
msgid "Today"
|
||||
msgstr "Σήμερα"
|
||||
|
||||
msgid "Not all ingredients of recipe \"%s\" are in stock, nothing removed"
|
||||
msgstr "Δεν υπάρχουν όλα τα συστατικά της συνταγής \"%s\", τίποτα δεν αφαιρείται"
|
||||
|
||||
msgid "Undo task"
|
||||
msgstr ""
|
||||
|
||||
|
@@ -35,6 +35,10 @@ msgstr "αριθμός-ακέραιο"
|
||||
msgid "number-decimal"
|
||||
msgstr "αριθμός-δεκαδικός"
|
||||
|
||||
# Number (currency)
|
||||
msgid "number-currency"
|
||||
msgstr ""
|
||||
|
||||
# Date (without time)
|
||||
msgid "date"
|
||||
msgstr "ημερομηνία"
|
||||
|
@@ -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)"
|
||||
|
||||
|
@@ -1198,9 +1198,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"
|
||||
|
||||
|
@@ -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)"
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
#
|
||||
# Translators:
|
||||
# GRBaset, 2022
|
||||
# GRBaset, 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:42+0000\n"
|
||||
"Last-Translator: GRBaset, 2022\n"
|
||||
"Last-Translator: GRBaset, 2023\n"
|
||||
"Language-Team: Spanish (https://app.transifex.com/grocy/teams/93189/es/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -36,4 +36,4 @@ msgid "hourly"
|
||||
msgstr "cada hora"
|
||||
|
||||
msgid "adaptive"
|
||||
msgstr "adaptivo"
|
||||
msgstr "adaptativo"
|
||||
|
@@ -7,9 +7,9 @@
|
||||
# Alan Pucheta <apucheta@protonmail.com>, 2020
|
||||
# Alberto Martin <ami232@gmail.com>, 2021
|
||||
# victormce <victormce@gmail.com>, 2021
|
||||
# GRBaset, 2022
|
||||
# Matt Sawyers, 2022
|
||||
# Ricardo Verduguez, 2023
|
||||
# GRBaset, 2023
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -17,7 +17,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: Ricardo Verduguez, 2023\n"
|
||||
"Last-Translator: GRBaset, 2023\n"
|
||||
"Language-Team: Spanish (https://app.transifex.com/grocy/teams/93189/es/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -120,13 +120,13 @@ msgid "Tomato"
|
||||
msgstr "Tomate"
|
||||
|
||||
msgid "Change towels in the bathroom"
|
||||
msgstr "Cambiar toallas en el baño"
|
||||
msgstr "Cambiar las toallas del baño"
|
||||
|
||||
msgid "Mop the kitchen floor"
|
||||
msgstr "Trapear el piso de la cocina."
|
||||
|
||||
msgid "Warranty ends"
|
||||
msgstr "Final de la garantía"
|
||||
msgstr "La garantía se acaba en"
|
||||
|
||||
msgid "TV remote control"
|
||||
msgstr "Mando a distancia de la televisión"
|
||||
@@ -138,7 +138,7 @@ msgid "Heat remote control"
|
||||
msgstr "Mando a distancia de la calefacción"
|
||||
|
||||
msgid "Take out the trash"
|
||||
msgstr "Sacar la basura."
|
||||
msgstr "Sacar la basura"
|
||||
|
||||
msgid "Some good snacks"
|
||||
msgstr "Cosas de picar"
|
||||
@@ -405,27 +405,27 @@ msgstr "Ukrainian"
|
||||
|
||||
msgid "Kilogram"
|
||||
msgid_plural "Kilograms"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
msgstr[0] "Kilogramo"
|
||||
msgstr[1] "Kilogramos"
|
||||
msgstr[2] "Kilogramos"
|
||||
|
||||
msgid "Romanian"
|
||||
msgstr ""
|
||||
msgstr "Rumano"
|
||||
|
||||
msgid "Pint"
|
||||
msgstr ""
|
||||
msgstr "Pinta"
|
||||
|
||||
msgid "Beverages"
|
||||
msgstr ""
|
||||
msgstr "Bebidas"
|
||||
|
||||
msgid "Ice Cream"
|
||||
msgstr ""
|
||||
msgstr "Helado"
|
||||
|
||||
msgid "Soda"
|
||||
msgstr ""
|
||||
msgstr "Refresco"
|
||||
|
||||
msgid "Beer"
|
||||
msgstr ""
|
||||
msgstr "Cerveza"
|
||||
|
||||
msgid "Estonian"
|
||||
msgstr ""
|
||||
msgstr "Estonio"
|
||||
|
@@ -2,6 +2,7 @@
|
||||
# Translators:
|
||||
# Alberto Martin <ami232@gmail.com>, 2021
|
||||
# Jose Manuel Ruiz, 2023
|
||||
# GRBaset, 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: 2020-08-31 19:11+0000\n"
|
||||
"Last-Translator: Jose Manuel Ruiz, 2023\n"
|
||||
"Last-Translator: GRBaset, 2023\n"
|
||||
"Language-Team: Spanish (https://app.transifex.com/grocy/teams/93189/es/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -144,4 +145,4 @@ msgstr "Rumano (Rumanía)"
|
||||
|
||||
# Estonian
|
||||
msgid "et_EE"
|
||||
msgstr ""
|
||||
msgstr "Estonio"
|
||||
|
@@ -2,6 +2,7 @@
|
||||
# Translators:
|
||||
# Enrique Lapenta <enriquelap20@gmail.com>, 2020
|
||||
# Alberto Martin <ami232@gmail.com>, 2021
|
||||
# GRBaset, 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: 2020-08-29 16:33+0000\n"
|
||||
"Last-Translator: Alberto Martin <ami232@gmail.com>, 2021\n"
|
||||
"Last-Translator: GRBaset, 2023\n"
|
||||
"Language-Team: Spanish (https://app.transifex.com/grocy/teams/93189/es/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -68,7 +69,7 @@ msgstr "Marcar completadas"
|
||||
|
||||
# Edit stock entries
|
||||
msgid "STOCK_EDIT"
|
||||
msgstr "STOCK_EDIT"
|
||||
msgstr "Editar entradas de inventario"
|
||||
|
||||
# Transfer
|
||||
msgid "STOCK_TRANSFER"
|
||||
|
@@ -13,9 +13,9 @@
|
||||
# victormce <victormce@gmail.com>, 2021
|
||||
# Fernando Sánchez <fernando.l.sanchez@gmail.com>, 2021
|
||||
# Juan José González-Abril, 2021
|
||||
# GRBaset, 2022
|
||||
# Ricardo Verduguez, 2023
|
||||
# Jose Manuel Ruiz, 2023
|
||||
# GRBaset, 2023
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -23,7 +23,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: Jose Manuel Ruiz, 2023\n"
|
||||
"Last-Translator: GRBaset, 2023\n"
|
||||
"Language-Team: Spanish (https://app.transifex.com/grocy/teams/93189/es/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -907,7 +907,7 @@ msgid "%s opened"
|
||||
msgstr "%s abierto"
|
||||
|
||||
msgid "Product due"
|
||||
msgstr "Producto fecha límite"
|
||||
msgstr "Producto con fecha límite"
|
||||
|
||||
msgid "Task due"
|
||||
msgstr "Tarea pendiente"
|
||||
@@ -1035,7 +1035,7 @@ msgid "The given date is earlier than today, are you sure?"
|
||||
msgstr "La fecha introducida es anterior a hoy, ¿está seguro?"
|
||||
|
||||
msgid "Product count"
|
||||
msgstr "Cuenta de producto"
|
||||
msgstr "Número de productos"
|
||||
|
||||
msgid ""
|
||||
"Type a new product name or barcode and hit TAB or ENTER to start a workflow"
|
||||
@@ -1078,7 +1078,7 @@ msgid "Are you sure to delete shopping list \"%s\"?"
|
||||
msgstr "¿Está seguro de querer eliminar la lista de la compra \"%s\"?"
|
||||
|
||||
msgid "Average shelf life"
|
||||
msgstr "Promedio de tiempo de almacenamiento"
|
||||
msgstr "Tiempo de conservación promedio"
|
||||
|
||||
msgid "Spoil rate"
|
||||
msgstr "Ratio de desperdicio"
|
||||
@@ -1247,11 +1247,6 @@ msgstr "Nunca"
|
||||
msgid "Today"
|
||||
msgstr "Hoy"
|
||||
|
||||
msgid "Not all ingredients of recipe \"%s\" are in stock, nothing removed"
|
||||
msgstr ""
|
||||
"No todos los ingredientes de la receta \"%s\" están en el inventario, nada "
|
||||
"fue eliminado"
|
||||
|
||||
msgid "Undo task"
|
||||
msgstr "Deshacer tarea"
|
||||
|
||||
@@ -1983,7 +1978,7 @@ msgid "Chore journal"
|
||||
msgstr "Diario de tareas del hogar"
|
||||
|
||||
msgid "Track next chore schedule"
|
||||
msgstr ""
|
||||
msgstr "Registrar la siguiente ejecución programada de la tarea"
|
||||
|
||||
msgid "Mark task as completed"
|
||||
msgstr "Marcar tarea como completada"
|
||||
@@ -2010,6 +2005,8 @@ msgid ""
|
||||
"This is the default quantity unit used on purchase and when adding this "
|
||||
"product to the shopping list"
|
||||
msgstr ""
|
||||
"Esta es la unidad de cantidad predeterminada al comprar y al añadir este "
|
||||
"producto a la lista de la compra"
|
||||
|
||||
msgid ""
|
||||
"Show a warning when the due date of the purchased product is earlier than "
|
||||
@@ -2039,11 +2036,15 @@ msgid ""
|
||||
"This amount is used for the \"quick consume button\" on the stock overview "
|
||||
"page (related to quantity unit stock)"
|
||||
msgstr ""
|
||||
"Esta cantidad se usa para el botón de \"consumo rápido\" en la página de "
|
||||
"resumen de inventario (medido en unidades de inventario)"
|
||||
|
||||
msgid ""
|
||||
"This amount is used for the \"quick open button\" on the stock overview page"
|
||||
" (related to quantity unit stock)"
|
||||
msgstr ""
|
||||
"Esta cantidad se usa para el botón de \"apertura rápida\" en la página de "
|
||||
"resumen de inventario (medido en unidades de inventario)"
|
||||
|
||||
msgid "Copy"
|
||||
msgstr "Copiar"
|
||||
@@ -2338,7 +2339,7 @@ msgid "A product or a note is required"
|
||||
msgstr "Hace falta un producto o una nota"
|
||||
|
||||
msgid "Grocycode"
|
||||
msgstr ""
|
||||
msgstr "Grocycode"
|
||||
|
||||
msgid "Download"
|
||||
msgstr "Descargar"
|
||||
@@ -2351,6 +2352,8 @@ 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 ""
|
||||
"El Grocycode es una referencia única a este %s en tu instancia de Grocy - "
|
||||
"imprímalo en una etiqueta y escanéelo como cualquier otro código de barras"
|
||||
|
||||
# Abbreviation for "due date"
|
||||
msgid "DD"
|
||||
@@ -2379,7 +2382,7 @@ msgstr "Error al ejecutar WebHook"
|
||||
|
||||
# Example: Print *Product* Grocycode on label printer
|
||||
msgid "Print %s Grocycode on label printer"
|
||||
msgstr ""
|
||||
msgstr "Imprimir Grocycode de %s en una impresora de etiquetas"
|
||||
|
||||
msgid "Open stock entry label in new window"
|
||||
msgstr "Abrir etiqueta de entrada de inventario en una ventana nueva"
|
||||
@@ -2587,7 +2590,7 @@ msgid "Skipped"
|
||||
msgstr "Omitido"
|
||||
|
||||
msgid "Skip next chore schedule"
|
||||
msgstr "Omitir el siguiente programa de tareas"
|
||||
msgstr "Omitir la siguiente ejecución programada de la tarea"
|
||||
|
||||
msgid "Time"
|
||||
msgstr "Tiempo"
|
||||
@@ -2784,10 +2787,10 @@ msgstr ""
|
||||
"etiqueta."
|
||||
|
||||
msgid "Quick open amount"
|
||||
msgstr ""
|
||||
msgstr "Cantidad de apertura rápida"
|
||||
|
||||
msgid "Track chore execution now"
|
||||
msgstr ""
|
||||
msgstr "Registrar ejecución de la tarea del hogar ahora"
|
||||
|
||||
msgid "Total"
|
||||
msgstr "Total"
|
||||
@@ -2803,9 +2806,9 @@ msgstr "Ayer"
|
||||
|
||||
msgid "Last %1$s day"
|
||||
msgid_plural "Last %1$s days"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
msgstr[0] "Último %1$s día"
|
||||
msgstr[1] "Últimos %1$s días"
|
||||
msgstr[2] "Últimos %1$s días"
|
||||
|
||||
msgid "This month"
|
||||
msgstr "Este mes"
|
||||
@@ -2823,7 +2826,7 @@ msgid "Reports"
|
||||
msgstr "Informes"
|
||||
|
||||
msgid "Spendings"
|
||||
msgstr ""
|
||||
msgstr "Gastos"
|
||||
|
||||
msgid "Stock report"
|
||||
msgstr "Inventario"
|
||||
@@ -2832,12 +2835,14 @@ msgid "Out-of-stock products"
|
||||
msgstr "Productos sin existencias"
|
||||
|
||||
msgid "Quantity unit for prices"
|
||||
msgstr ""
|
||||
msgstr "Unidad para los precios"
|
||||
|
||||
msgid ""
|
||||
"When displaying prices for this product, they will be related to this "
|
||||
"quantity unit"
|
||||
msgstr ""
|
||||
"Cuando se muestren los precios para este producto, se mostrarán en términos "
|
||||
"de esta unidad de cantidad"
|
||||
|
||||
msgid "This means 1 label will be printed"
|
||||
msgid_plural "This means %1$s labels will be printed"
|
||||
|
@@ -33,6 +33,10 @@ msgstr "Número (entero)"
|
||||
msgid "number-decimal"
|
||||
msgstr "Número (decimal)"
|
||||
|
||||
# Number (currency)
|
||||
msgid "number-currency"
|
||||
msgstr ""
|
||||
|
||||
# Date (without time)
|
||||
msgid "date"
|
||||
msgstr "Fecha"
|
||||
|
@@ -2,6 +2,7 @@
|
||||
# Translators:
|
||||
# Mario Loik <mariomobla@gmail.com>, 2020
|
||||
# Lauri Lepik, 2023
|
||||
# aylamz, 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: Lauri Lepik, 2023\n"
|
||||
"Last-Translator: aylamz, 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"
|
||||
@@ -31,7 +32,7 @@ msgid "Candy cupboard"
|
||||
msgstr "Kommisahtel"
|
||||
|
||||
msgid "Tinned food cupboard"
|
||||
msgstr "Metallpurgitoidu sahtel"
|
||||
msgstr "Konservisahtel"
|
||||
|
||||
msgid "Fridge"
|
||||
msgstr "Külmkapp"
|
||||
@@ -106,16 +107,16 @@ msgid "Tomato"
|
||||
msgstr "Tomat"
|
||||
|
||||
msgid "Change towels in the bathroom"
|
||||
msgstr "Vaheta vannitoas rätikud"
|
||||
msgstr "Vaheta vetsu rätikud"
|
||||
|
||||
msgid "Mop the kitchen floor"
|
||||
msgstr "Pühi köögi põrand"
|
||||
|
||||
msgid "Warranty ends"
|
||||
msgstr "Garantii lõpeb"
|
||||
msgstr "Garantii lõppeb"
|
||||
|
||||
msgid "TV remote control"
|
||||
msgstr "TV pult"
|
||||
msgstr "Teleri pult"
|
||||
|
||||
msgid "Alarm clock"
|
||||
msgstr "Äratuskell"
|
||||
@@ -148,7 +149,7 @@ msgid "Pizza"
|
||||
msgstr "Pitsa"
|
||||
|
||||
msgid "Spaghetti bolognese"
|
||||
msgstr "Bolognese spagetid"
|
||||
msgstr "Pasta bolognese"
|
||||
|
||||
msgid "Sandwiches"
|
||||
msgstr "Võileivad"
|
||||
@@ -166,7 +167,7 @@ msgid "This is the note content of the recipe ingredient"
|
||||
msgstr "See on retsepti koostisosade sisu märge"
|
||||
|
||||
msgid "Demo User"
|
||||
msgstr "Demo Kasutaja"
|
||||
msgstr "Demo kasutaja"
|
||||
|
||||
msgid "Gram"
|
||||
msgid_plural "Grams"
|
||||
@@ -186,7 +187,7 @@ msgid "Sweets"
|
||||
msgstr "Maiustused"
|
||||
|
||||
msgid "Bakery products"
|
||||
msgstr "Ahjutooted"
|
||||
msgstr "Pagaritooted"
|
||||
|
||||
msgid "Tinned food"
|
||||
msgstr "Konserv"
|
||||
@@ -198,7 +199,7 @@ msgid "Vegetables/Fruits"
|
||||
msgstr "Köögiviljad/Puuviljad"
|
||||
|
||||
msgid "Refrigerated products"
|
||||
msgstr "Külmutatud Tooted"
|
||||
msgstr "Külmutatud tooted"
|
||||
|
||||
msgid "Coffee machine"
|
||||
msgstr "Kohvimasin"
|
||||
@@ -222,7 +223,7 @@ msgid "Milk"
|
||||
msgstr "Piim"
|
||||
|
||||
msgid "Chocolate sauce"
|
||||
msgstr "Šokolaadi kaste"
|
||||
msgstr "Šokolaadikaste"
|
||||
|
||||
msgid "Milliliters"
|
||||
msgstr "Millimeetrit"
|
||||
@@ -249,7 +250,7 @@ msgid "Russian"
|
||||
msgstr "Vene"
|
||||
|
||||
msgid "Vacuum the living room floor"
|
||||
msgstr "Korista tolmuimejaga elutuba"
|
||||
msgstr "Korista elutuba tolmuimejaga"
|
||||
|
||||
msgid "Clean the litter box"
|
||||
msgstr "Korista liivakast"
|
||||
@@ -267,7 +268,7 @@ msgid "Milk Chocolate"
|
||||
msgstr "Piimašokolaad"
|
||||
|
||||
msgid "Dark Chocolate"
|
||||
msgstr "Must Šokolaad"
|
||||
msgstr "Must šokolaad"
|
||||
|
||||
msgid "Slice"
|
||||
msgid_plural "Slices"
|
||||
@@ -275,16 +276,16 @@ msgstr[0] "Viil"
|
||||
msgstr[1] "Viilu"
|
||||
|
||||
msgid "Example userentity"
|
||||
msgstr "Näidis kasutajasisend"
|
||||
msgstr "Näidis kasutajaolem"
|
||||
|
||||
msgid "This is an example user entity..."
|
||||
msgstr "See on kasutaja sisendi näide..."
|
||||
msgstr "See on kasutajaolemi näide..."
|
||||
|
||||
msgid "Custom field"
|
||||
msgstr "Kohandatud väli"
|
||||
msgstr "Kohandatav väli"
|
||||
|
||||
msgid "Example field value..."
|
||||
msgstr "Näidisvälja väärtus..."
|
||||
msgstr "Välja näidisväärtus..."
|
||||
|
||||
msgid "Waffle rolls"
|
||||
msgstr "Vahvlirullid"
|
||||
@@ -320,7 +321,7 @@ msgid "This is a note"
|
||||
msgstr "See on märge"
|
||||
|
||||
msgid "Freezer"
|
||||
msgstr "Külmik"
|
||||
msgstr "Sügavkülmik"
|
||||
|
||||
msgid "Hungarian"
|
||||
msgstr "Ungari"
|
||||
@@ -411,4 +412,4 @@ msgid "Beer"
|
||||
msgstr "Õlu"
|
||||
|
||||
msgid "Estonian"
|
||||
msgstr ""
|
||||
msgstr "eesti"
|
||||
|
@@ -1,6 +1,7 @@
|
||||
#
|
||||
# Translators:
|
||||
# Lauri Lepik, 2023
|
||||
# aylamz, 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: 2020-08-31 19:11+0000\n"
|
||||
"Last-Translator: Lauri Lepik, 2023\n"
|
||||
"Last-Translator: aylamz, 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"
|
||||
@@ -143,4 +144,4 @@ msgstr "Rumeenia keel"
|
||||
|
||||
# Estonian
|
||||
msgid "et_EE"
|
||||
msgstr ""
|
||||
msgstr "eesti keel"
|
||||
|
@@ -1,6 +1,7 @@
|
||||
#
|
||||
# Translators:
|
||||
# Lauri Lepik, 2023
|
||||
# aylamz, 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-05-01 17:42+0000\n"
|
||||
"Last-Translator: Lauri Lepik, 2023\n"
|
||||
"Last-Translator: aylamz, 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"
|
||||
@@ -27,10 +28,10 @@ msgid "transfer_to"
|
||||
msgstr "kategooriasse üleviimine"
|
||||
|
||||
msgid "consume"
|
||||
msgstr "tarbimine"
|
||||
msgstr "tarbi"
|
||||
|
||||
msgid "inventory-correction"
|
||||
msgstr "invetuuri-parandus"
|
||||
msgstr "inventuuri-parandus"
|
||||
|
||||
msgid "product-opened"
|
||||
msgstr "toode-avatud"
|
||||
|
@@ -33,6 +33,10 @@ msgstr "number-terviklik"
|
||||
msgid "number-decimal"
|
||||
msgstr "number-kümnend"
|
||||
|
||||
# Number (currency)
|
||||
msgid "number-currency"
|
||||
msgstr ""
|
||||
|
||||
# Date (without time)
|
||||
msgid "date"
|
||||
msgstr "kuupäev"
|
||||
|
@@ -1204,9 +1204,6 @@ msgstr "Ei koskaan"
|
||||
msgid "Today"
|
||||
msgstr "Tänään"
|
||||
|
||||
msgid "Not all ingredients of recipe \"%s\" are in stock, nothing removed"
|
||||
msgstr "Reseptin \"%s\" kaikkia ainesosia ei ole varastossa, ei poistettu mitään"
|
||||
|
||||
msgid "Undo task"
|
||||
msgstr "Kumoa tehtävä"
|
||||
|
||||
|
@@ -36,6 +36,10 @@ msgstr "numero-kokonaisluku"
|
||||
msgid "number-decimal"
|
||||
msgstr "numero-desimaali"
|
||||
|
||||
# Number (currency)
|
||||
msgid "number-currency"
|
||||
msgstr ""
|
||||
|
||||
# Date (without time)
|
||||
msgid "date"
|
||||
msgstr "päivämäärä"
|
||||
|
@@ -1265,11 +1265,6 @@ msgstr "Jamais"
|
||||
msgid "Today"
|
||||
msgstr "Aujourd'hui"
|
||||
|
||||
msgid "Not all ingredients of recipe \"%s\" are in stock, nothing removed"
|
||||
msgstr ""
|
||||
"Des ingrédients de la recette \"%s\" sont manquants,\n"
|
||||
"rien n'est retiré"
|
||||
|
||||
msgid "Undo task"
|
||||
msgstr "Annuler"
|
||||
|
||||
|
@@ -37,6 +37,10 @@ msgstr "nombre entier"
|
||||
msgid "number-decimal"
|
||||
msgstr "nombre décimal"
|
||||
|
||||
# Number (currency)
|
||||
msgid "number-currency"
|
||||
msgstr ""
|
||||
|
||||
# Date (without time)
|
||||
msgid "date"
|
||||
msgstr "date"
|
||||
|
@@ -1218,9 +1218,6 @@ msgstr "אף פעם"
|
||||
msgid "Today"
|
||||
msgstr "היום"
|
||||
|
||||
msgid "Not all ingredients of recipe \"%s\" are in stock, nothing removed"
|
||||
msgstr "לא כל הרכיבים של המתכון „%s” נמצאים במלאי, לא הוסר דבר"
|
||||
|
||||
msgid "Undo task"
|
||||
msgstr "ביטול ביצוע משימה"
|
||||
|
||||
|
@@ -34,6 +34,10 @@ msgstr "מספר שלם"
|
||||
msgid "number-decimal"
|
||||
msgstr "מספר עשרוני"
|
||||
|
||||
# Number (currency)
|
||||
msgid "number-currency"
|
||||
msgstr ""
|
||||
|
||||
# Date (without time)
|
||||
msgid "date"
|
||||
msgstr "תאריך (בלי שעה)"
|
||||
|
@@ -1216,11 +1216,6 @@ msgstr "Soha"
|
||||
msgid "Today"
|
||||
msgstr "Ma"
|
||||
|
||||
msgid "Not all ingredients of recipe \"%s\" are in stock, nothing removed"
|
||||
msgstr ""
|
||||
"Nincs a \"%s\" recept összes hozzávalója készleten, így nem használtunk fel "
|
||||
"semmit se"
|
||||
|
||||
msgid "Undo task"
|
||||
msgstr "Feladat visszavonása"
|
||||
|
||||
|
@@ -35,6 +35,10 @@ msgstr "egész szám"
|
||||
msgid "number-decimal"
|
||||
msgstr "decimális szám"
|
||||
|
||||
# Number (currency)
|
||||
msgid "number-currency"
|
||||
msgstr ""
|
||||
|
||||
# Date (without time)
|
||||
msgid "date"
|
||||
msgstr "dátum"
|
||||
|
@@ -6,6 +6,7 @@
|
||||
# Andrea Raineri, 2022
|
||||
# Moltivie Denied <major2015usa@gmail.com>, 2022
|
||||
# Davide Casella, 2023
|
||||
# Claudio Arseni <claudio.arseni@gmail.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: Davide Casella, 2023\n"
|
||||
"Last-Translator: Claudio Arseni <claudio.arseni@gmail.com>, 2023\n"
|
||||
"Language-Team: Italian (https://app.transifex.com/grocy/teams/93189/it/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -424,4 +425,4 @@ msgid "Beer"
|
||||
msgstr "Birra"
|
||||
|
||||
msgid "Estonian"
|
||||
msgstr ""
|
||||
msgstr "Estone"
|
||||
|
@@ -5,6 +5,7 @@
|
||||
# Moltivie Denied <major2015usa@gmail.com>, 2022
|
||||
# Martino Falorni, 2023
|
||||
# Davide Casella, 2023
|
||||
# Claudio Arseni <claudio.arseni@gmail.com>, 2023
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -12,7 +13,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: Davide Casella, 2023\n"
|
||||
"Last-Translator: Claudio Arseni <claudio.arseni@gmail.com>, 2023\n"
|
||||
"Language-Team: Italian (https://app.transifex.com/grocy/teams/93189/it/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -147,4 +148,4 @@ msgstr "Rumeno"
|
||||
|
||||
# Estonian
|
||||
msgid "et_EE"
|
||||
msgstr ""
|
||||
msgstr "et_EE"
|
||||
|
@@ -9,7 +9,10 @@
|
||||
# Walter Palagi, 2022
|
||||
# Moltivie Denied <major2015usa@gmail.com>, 2022
|
||||
# Martino Falorni, 2023
|
||||
# Saul il, 2023
|
||||
# Davide G., 2023
|
||||
# Davide Casella, 2023
|
||||
# Claudio Arseni <claudio.arseni@gmail.com>, 2023
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -17,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: Davide Casella, 2023\n"
|
||||
"Last-Translator: Claudio Arseni <claudio.arseni@gmail.com>, 2023\n"
|
||||
"Language-Team: Italian (https://app.transifex.com/grocy/teams/93189/it/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -95,10 +98,10 @@ msgid "Shopping list"
|
||||
msgstr "Lista della spesa"
|
||||
|
||||
msgid "Chore tracking"
|
||||
msgstr "Tracciamento delle faccende domestiche"
|
||||
msgstr "Tracciamento delle faccende"
|
||||
|
||||
msgid "Battery tracking"
|
||||
msgstr "Dati batterie"
|
||||
msgstr "Dati sulle batterie"
|
||||
|
||||
msgid "Locations"
|
||||
msgstr "Posizioni"
|
||||
@@ -125,7 +128,7 @@ msgid "Last tracked"
|
||||
msgstr "Ultima esecuzione"
|
||||
|
||||
msgid "Battery"
|
||||
msgstr "Batterie"
|
||||
msgstr "Batteria"
|
||||
|
||||
msgid "Last charged"
|
||||
msgstr "Ultima ricarica"
|
||||
@@ -215,7 +218,7 @@ msgid "Create product"
|
||||
msgstr "Aggiungi prodotto"
|
||||
|
||||
msgid "Barcode(s)"
|
||||
msgstr "Codice(i) a barre"
|
||||
msgstr "Codice a barre"
|
||||
|
||||
msgid "Minimum stock amount"
|
||||
msgstr "Quantità minima in dispensa"
|
||||
@@ -287,19 +290,19 @@ msgid "Login"
|
||||
msgstr "Accesso"
|
||||
|
||||
msgid "Username"
|
||||
msgstr "Nome Utente"
|
||||
msgstr "Nome utente"
|
||||
|
||||
msgid "Password"
|
||||
msgstr "Password"
|
||||
|
||||
msgid "Invalid credentials, please try again"
|
||||
msgstr "Credenziali non valide, per favore riprova"
|
||||
msgstr "Credenziali non valide, riprovare"
|
||||
|
||||
msgid "Are you sure to delete battery \"%s\"?"
|
||||
msgstr "Sei sicuro di voler eliminare la batteria \"%s\"?"
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Si"
|
||||
msgstr "Sì"
|
||||
|
||||
msgid "No"
|
||||
msgstr "No"
|
||||
@@ -1243,11 +1246,6 @@ msgstr "Mai"
|
||||
msgid "Today"
|
||||
msgstr "Oggi"
|
||||
|
||||
msgid "Not all ingredients of recipe \"%s\" are in stock, nothing removed"
|
||||
msgstr ""
|
||||
"Non tutti gli ingredienti della ricetta \"%s\" sono disponibili in dispensa,"
|
||||
" nulla è stato rimosso"
|
||||
|
||||
msgid "Undo task"
|
||||
msgstr "Annulla attività"
|
||||
|
||||
@@ -2359,6 +2357,8 @@ 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 è un riferimento univoco a questo %s nell'istanza di Grocy. "
|
||||
"Stampalo su un'etichetta e scansionalo come qualsiasi altro codice a barre."
|
||||
|
||||
# Abbreviation for "due date"
|
||||
msgid "DD"
|
||||
@@ -2387,7 +2387,7 @@ msgstr "Errore durante l'esecuzione di WebHook"
|
||||
|
||||
# Example: Print *Product* Grocycode on label printer
|
||||
msgid "Print %s Grocycode on label printer"
|
||||
msgstr ""
|
||||
msgstr "Stampa il Grocycode di %s su una stampante per etichette"
|
||||
|
||||
msgid "Open stock entry label in new window"
|
||||
msgstr "Apri l'etichetta della dispensa in una nuova finestra"
|
||||
@@ -2726,14 +2726,14 @@ msgstr ""
|
||||
"consumate"
|
||||
|
||||
msgid "Move on open"
|
||||
msgstr "Avanti apri"
|
||||
msgstr "Muovi all'apertura"
|
||||
|
||||
msgid ""
|
||||
"When enabled, on marking this product as opened, the corresponding amount "
|
||||
"will be moved to the default consume location"
|
||||
msgstr ""
|
||||
"Quando abilitato, selezionando questo prodotto come aperto, l'attuale "
|
||||
"quantita' verra' spostata nella location di consumo predefinita"
|
||||
"Quando abilitato, selezionando questo prodotto come aperto, la rispettiva "
|
||||
"quantità verrà spostata nella location di consumo predefinita"
|
||||
|
||||
msgid "Moved to %1$s"
|
||||
msgstr "Spostato a %1$s"
|
||||
@@ -2751,27 +2751,31 @@ msgid ""
|
||||
"This shows all to this product directly or indirectly related quantity units"
|
||||
" and their derived conversion factors"
|
||||
msgstr ""
|
||||
"Mostra tutte le unità di quantità direttamente o indirettamente correlate a "
|
||||
"questo prodotto e i relativi fattori di conversione derivati"
|
||||
|
||||
msgid "Show resolved conversions"
|
||||
msgstr ""
|
||||
msgstr "Mostra le conversioni risolte"
|
||||
|
||||
msgid "QU conversions resolved"
|
||||
msgstr ""
|
||||
msgstr "UQ di conversioni risolte"
|
||||
|
||||
msgid "Product specifc QU conversions"
|
||||
msgstr ""
|
||||
msgstr "UQ di conversioni specifiche per il prodotto"
|
||||
|
||||
msgid "Default quantity unit consume"
|
||||
msgstr ""
|
||||
msgstr "Quantità di unità di acquisto predefinita"
|
||||
|
||||
msgid "This is the default quantity unit used when consuming this product"
|
||||
msgstr ""
|
||||
"È l'unità di quantità predefinita utilizzata per il consumo di questo "
|
||||
"prodotto"
|
||||
|
||||
msgid "Add to meal plan"
|
||||
msgstr ""
|
||||
msgstr "Aggiungi al piano alimentare"
|
||||
|
||||
msgid "Successfully added the recipe to the meal plan"
|
||||
msgstr ""
|
||||
msgstr "La ricetta è stata aggiunta con successo al piano pasti"
|
||||
|
||||
msgid "Reprint stock entry label"
|
||||
msgstr ""
|
||||
@@ -2786,7 +2790,7 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgid "Quick open amount"
|
||||
msgstr ""
|
||||
msgstr "Quantità per consumo rapido"
|
||||
|
||||
msgid "Track chore execution now"
|
||||
msgstr "Traccia l'esecuzione delle faccende ora"
|
||||
|
@@ -33,6 +33,10 @@ msgstr "numero intero"
|
||||
msgid "number-decimal"
|
||||
msgstr "numero decimale"
|
||||
|
||||
# Number (currency)
|
||||
msgid "number-currency"
|
||||
msgstr ""
|
||||
|
||||
# Date (without time)
|
||||
msgid "date"
|
||||
msgstr "data"
|
||||
|
@@ -1157,9 +1157,6 @@ msgstr "期限なし"
|
||||
msgid "Today"
|
||||
msgstr "今日"
|
||||
|
||||
msgid "Not all ingredients of recipe \"%s\" are in stock, nothing removed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Undo task"
|
||||
msgstr ""
|
||||
|
||||
|
@@ -34,6 +34,10 @@ msgstr "整数"
|
||||
msgid "number-decimal"
|
||||
msgstr "小数"
|
||||
|
||||
# Number (currency)
|
||||
msgid "number-currency"
|
||||
msgstr ""
|
||||
|
||||
# Date (without time)
|
||||
msgid "date"
|
||||
msgstr "日付"
|
||||
|
@@ -1169,9 +1169,6 @@ msgstr "Never"
|
||||
msgid "Today"
|
||||
msgstr "오늘"
|
||||
|
||||
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 "작업 되돌리기"
|
||||
|
||||
|
@@ -33,6 +33,10 @@ msgstr "number-integral"
|
||||
msgid "number-decimal"
|
||||
msgstr "number-decimal"
|
||||
|
||||
# Number (currency)
|
||||
msgid "number-currency"
|
||||
msgstr ""
|
||||
|
||||
# Date (without time)
|
||||
msgid "date"
|
||||
msgstr "date"
|
||||
|
@@ -1238,9 +1238,6 @@ msgstr "Niekada"
|
||||
msgid "Today"
|
||||
msgstr "Šiandien"
|
||||
|
||||
msgid "Not all ingredients of recipe \"%s\" are in stock, nothing removed"
|
||||
msgstr "Ne visi recepto „%s“ ingredientai yra sandėlyje, nieko nėra pašalinta"
|
||||
|
||||
msgid "Undo task"
|
||||
msgstr "Anuliuoti užduotį"
|
||||
|
||||
|
@@ -33,6 +33,10 @@ msgstr "skaičių integralas"
|
||||
msgid "number-decimal"
|
||||
msgstr "skaičius po kablelio"
|
||||
|
||||
# Number (currency)
|
||||
msgid "number-currency"
|
||||
msgstr ""
|
||||
|
||||
# Date (without time)
|
||||
msgid "date"
|
||||
msgstr "data"
|
||||
|
@@ -15,6 +15,7 @@
|
||||
# Daan Breur <daanbreur@gmail.com>, 2021
|
||||
# Luc Donderwinkel, 2022
|
||||
# 36d163aedfa797f6b2721cfc9bae9c42_308433e, 2023
|
||||
# Matthijs <matthijs@spamkip.com>, 2023
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -22,7 +23,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: 36d163aedfa797f6b2721cfc9bae9c42_308433e, 2023\n"
|
||||
"Last-Translator: Matthijs <matthijs@spamkip.com>, 2023\n"
|
||||
"Language-Team: Dutch (https://app.transifex.com/grocy/teams/93189/nl/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -402,26 +403,26 @@ msgstr "Oekraïens"
|
||||
|
||||
msgid "Kilogram"
|
||||
msgid_plural "Kilograms"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "Kilogram"
|
||||
msgstr[1] "Kilogrammen"
|
||||
|
||||
msgid "Romanian"
|
||||
msgstr "Roemeense"
|
||||
|
||||
msgid "Pint"
|
||||
msgstr ""
|
||||
msgstr "Pint"
|
||||
|
||||
msgid "Beverages"
|
||||
msgstr ""
|
||||
msgstr "Dranken"
|
||||
|
||||
msgid "Ice Cream"
|
||||
msgstr ""
|
||||
msgstr "IJs"
|
||||
|
||||
msgid "Soda"
|
||||
msgstr ""
|
||||
msgstr "Frisdrank"
|
||||
|
||||
msgid "Beer"
|
||||
msgstr ""
|
||||
msgstr "Bier"
|
||||
|
||||
msgid "Estonian"
|
||||
msgstr ""
|
||||
msgstr "Estisch"
|
||||
|
@@ -2,7 +2,7 @@
|
||||
# Translators:
|
||||
# Stan Overgauw <stan.overgauw@gmail.com>, 2020
|
||||
# Luc Donderwinkel, 2022
|
||||
# 36d163aedfa797f6b2721cfc9bae9c42_308433e, 2023
|
||||
# Matthijs <transifex.com@brievenbus.6689.nl>, 2023
|
||||
#
|
||||
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-31 19:11+0000\n"
|
||||
"Last-Translator: 36d163aedfa797f6b2721cfc9bae9c42_308433e, 2023\n"
|
||||
"Last-Translator: Matthijs <transifex.com@brievenbus.6689.nl>, 2023\n"
|
||||
"Language-Team: Dutch (https://app.transifex.com/grocy/teams/93189/nl/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -121,7 +121,7 @@ msgstr "Hebreeuws"
|
||||
|
||||
# Tamil
|
||||
msgid "ta"
|
||||
msgstr "Tamils"
|
||||
msgstr "Tamil"
|
||||
|
||||
# Finnish
|
||||
msgid "fi"
|
||||
@@ -141,8 +141,8 @@ msgstr "Oekraïens"
|
||||
|
||||
# Romanian
|
||||
msgid "ro_RO"
|
||||
msgstr "ro_RO"
|
||||
msgstr "Roemeens"
|
||||
|
||||
# Estonian
|
||||
msgid "et_EE"
|
||||
msgstr ""
|
||||
msgstr "Estisch"
|
||||
|
@@ -32,6 +32,7 @@
|
||||
# Pieter Vantorre, 2022
|
||||
# Luc Donderwinkel, 2022
|
||||
# vanhoof.tech, 2023
|
||||
# Matthijs <matthijs@spamkip.com>, 2023
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -39,7 +40,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: vanhoof.tech, 2023\n"
|
||||
"Last-Translator: Matthijs <matthijs@spamkip.com>, 2023\n"
|
||||
"Language-Team: Dutch (https://app.transifex.com/grocy/teams/93189/nl/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -385,7 +386,7 @@ msgid "Removed %1$s of %2$s from stock"
|
||||
msgstr "%1$s %2$s verwijderd uit de voorraad"
|
||||
|
||||
msgid "About Grocy"
|
||||
msgstr ""
|
||||
msgstr "Over Grocy"
|
||||
|
||||
msgid "Close"
|
||||
msgstr "Sluit"
|
||||
@@ -1243,11 +1244,6 @@ msgstr "Nooit"
|
||||
msgid "Today"
|
||||
msgstr "Vandaag"
|
||||
|
||||
msgid "Not all ingredients of recipe \"%s\" are in stock, nothing removed"
|
||||
msgstr ""
|
||||
"Niet alle ingrediënten van het recept \"%s\" zijn op voorraad, er is niets "
|
||||
"verwijderd"
|
||||
|
||||
msgid "Undo task"
|
||||
msgstr "Taak ongedaan maken"
|
||||
|
||||
@@ -1353,7 +1349,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] ""
|
||||
"Dit betekent dat de volgende uitvoering van dit klusje iedere dag op "
|
||||
"hetzelfde tijdstip (gebaseerd op de startdatum) gepland wordt"
|
||||
msgstr[1] ""
|
||||
"Dit betekent dat de volgende uitvoering van dit klusje iedere %s dagen op "
|
||||
"hetzelfde tijdstip (gebaseerd op de startdatum) gepland wordt"
|
||||
|
||||
msgid ""
|
||||
"This means the next execution of this chore is scheduled %s hour after the "
|
||||
@@ -1362,7 +1362,11 @@ msgid_plural ""
|
||||
"This means the next execution of this chore is scheduled %s hours after the "
|
||||
"last execution"
|
||||
msgstr[0] ""
|
||||
"Dit betekent dat de uitvoering van dit klusje %s uur na de laatste "
|
||||
"uitvoering gepland wordt"
|
||||
msgstr[1] ""
|
||||
"Dit betekent dat de uitvoering van dit klusje %s uur na de laatste "
|
||||
"uitvoering gepland wordt"
|
||||
|
||||
msgid ""
|
||||
"This means the next execution of this chore is scheduled every week on the "
|
||||
@@ -1371,7 +1375,11 @@ msgid_plural ""
|
||||
"This means the next execution of this chore is scheduled every %s weeks on "
|
||||
"the selected weekdays"
|
||||
msgstr[0] ""
|
||||
"Dit betekent dat de volgende uitvoering van dit klusje elke week gepland "
|
||||
"staat voor de geselecteerde weekdagen"
|
||||
msgstr[1] ""
|
||||
"Dit betekent dat de volgende uitvoering van dit klusje elke %s weken gepland"
|
||||
" staat voor de geselecteerde weekdagen"
|
||||
|
||||
msgid ""
|
||||
"This means the next execution of this chore is scheduled on the selected day"
|
||||
@@ -1380,7 +1388,11 @@ msgid_plural ""
|
||||
"This means the next execution of this chore is scheduled on the selected day"
|
||||
" every %s months"
|
||||
msgstr[0] ""
|
||||
"Dit betekent dat de volgende uitvoering van dit klusje iedere maand op de "
|
||||
"geselecteerde dag gepland staat"
|
||||
msgstr[1] ""
|
||||
"Dit betekent dat de volgende uitvoering van dit klusje iedere %s maanden op "
|
||||
"de geselecteerde dag gepland staat"
|
||||
|
||||
msgid "This means the next execution of this chore is not scheduled"
|
||||
msgstr ""
|
||||
@@ -1492,7 +1504,7 @@ msgid "Price factor"
|
||||
msgstr "Prijsfactor"
|
||||
|
||||
msgid "Do you find Grocy useful?"
|
||||
msgstr ""
|
||||
msgstr "Vind je Grocy nuttig?"
|
||||
|
||||
msgid "Say thanks"
|
||||
msgstr "Zeg bedankt"
|
||||
@@ -1510,7 +1522,7 @@ msgid "Output"
|
||||
msgstr "Uitvoer"
|
||||
|
||||
msgid "Energy"
|
||||
msgstr ""
|
||||
msgstr "Energie"
|
||||
|
||||
msgid "Per stock quantity unit"
|
||||
msgstr "Voorraadhoeveelheidseenheid"
|
||||
@@ -1578,7 +1590,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] ""
|
||||
"Dit betekent dat de volgende uitvoering van dit klusje ieder jaar op "
|
||||
"dezelfde dag (op basis van de startdatum) gepland staat"
|
||||
msgstr[1] ""
|
||||
"Dit betekent dat de volgende uitvoering van dit klusje iedere %s jaar op "
|
||||
"dezelfde dag (op basis van de startdatum) gepland staat"
|
||||
|
||||
msgid "Transfer"
|
||||
msgstr "Overdragen"
|
||||
@@ -1623,6 +1639,9 @@ 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-toegang is alleen mogelijk als dit ondersteund en toegestaan is door "
|
||||
"je browser, en als Grocy via een beveiligde (https://) verbinding wordt "
|
||||
"geopend"
|
||||
|
||||
msgid "Keep screen on"
|
||||
msgstr "Houd scherm aan"
|
||||
@@ -1944,7 +1963,7 @@ msgid "Chore journal"
|
||||
msgstr "Klusjesdagboek"
|
||||
|
||||
msgid "Track next chore schedule"
|
||||
msgstr ""
|
||||
msgstr "Voer volgend klusje uit"
|
||||
|
||||
msgid "Mark task as completed"
|
||||
msgstr "Markeer taak als gedaan"
|
||||
@@ -1971,6 +1990,8 @@ msgid ""
|
||||
"This is the default quantity unit used on purchase and when adding this "
|
||||
"product to the shopping list"
|
||||
msgstr ""
|
||||
"Dit is de standaardhoeveelheid die wordt gebruikt bij aankoop en bij het "
|
||||
"toevoegen van dit product aan de boodschappenlijst"
|
||||
|
||||
msgid ""
|
||||
"Show a warning when the due date of the purchased product is earlier than "
|
||||
@@ -1998,11 +2019,15 @@ msgid ""
|
||||
"This amount is used for the \"quick consume button\" on the stock overview "
|
||||
"page (related to quantity unit stock)"
|
||||
msgstr ""
|
||||
"Deze hoeveelheid wordt gebruikt voor de \"snel verbruiken knop\" op de "
|
||||
"voorraadoverzichtspagina (gerelateerd aan hoeveelheidsvoorraad)"
|
||||
|
||||
msgid ""
|
||||
"This amount is used for the \"quick open button\" on the stock overview page"
|
||||
" (related to quantity unit stock)"
|
||||
msgstr ""
|
||||
"Deze hoeveelheid wordt gebruikt voor de \"snel openen knop\" op de "
|
||||
"voorraadoverzichtspagina (gerelateerd aan hoeveelheidsvoorraad)"
|
||||
|
||||
msgid "Copy"
|
||||
msgstr "Kopieer"
|
||||
@@ -2293,19 +2318,21 @@ msgid "A product or a note is required"
|
||||
msgstr "Een product of notitie is nodig"
|
||||
|
||||
msgid "Grocycode"
|
||||
msgstr ""
|
||||
msgstr "Grocycode"
|
||||
|
||||
msgid "Download"
|
||||
msgstr "Download"
|
||||
|
||||
# Example: Download *Product* Grocycode
|
||||
msgid "Download %s Grocycode"
|
||||
msgstr ""
|
||||
msgstr "%s Grocycode downloaden"
|
||||
|
||||
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 een unieke verwijzing naar dit %s in je Grocy omgeving - print "
|
||||
"het op een label en scan het net als iedere andere barcode"
|
||||
|
||||
# Abbreviation for "due date"
|
||||
msgid "DD"
|
||||
@@ -2334,7 +2361,7 @@ msgstr "Fout tijdens het uitvoeren van WebHook"
|
||||
|
||||
# Example: Print *Product* Grocycode on label printer
|
||||
msgid "Print %s Grocycode on label printer"
|
||||
msgstr ""
|
||||
msgstr "Print %s Grocycode op labelprinter"
|
||||
|
||||
msgid "Open stock entry label in new window"
|
||||
msgstr "Open voorraad invoer label in een nieuw venster"
|
||||
@@ -2559,6 +2586,8 @@ msgid ""
|
||||
"This means the next execution of this chore is scheduled dynamically based "
|
||||
"on the past average execution frequency"
|
||||
msgstr ""
|
||||
"Dit betekent dat de volgende uitvoering van dit klusje dynamisch wordt "
|
||||
"gepland op basis van de gemiddelde voorgaande uitvoeringen"
|
||||
|
||||
msgid "Average execution frequency"
|
||||
msgstr "Gemiddelde uitvoeringsfrequentie"
|
||||
@@ -2690,13 +2719,13 @@ msgstr ""
|
||||
"hoeveelheidseenheden en hun afgeleide conversiefactoren"
|
||||
|
||||
msgid "Show resolved conversions"
|
||||
msgstr ""
|
||||
msgstr "Toon opgeloste conversies"
|
||||
|
||||
msgid "QU conversions resolved"
|
||||
msgstr ""
|
||||
msgstr "Hoeveelheidseenheid conversies opgelost"
|
||||
|
||||
msgid "Product specifc QU conversions"
|
||||
msgstr ""
|
||||
msgstr "Product-specifieke hoeveelheidseenheid conversies"
|
||||
|
||||
msgid "Default quantity unit consume"
|
||||
msgstr "Standaard verbruikte hoeveelheidseenheid"
|
||||
@@ -2728,61 +2757,63 @@ msgstr ""
|
||||
"bijbehorende standaard vervaldagen) het label opnieuw afdrukken"
|
||||
|
||||
msgid "Quick open amount"
|
||||
msgstr ""
|
||||
msgstr "Snel deze hoeveelheid openen"
|
||||
|
||||
msgid "Track chore execution now"
|
||||
msgstr ""
|
||||
msgstr "Voer klusje nu uit"
|
||||
|
||||
msgid "Total"
|
||||
msgstr ""
|
||||
msgstr "Totaal"
|
||||
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
msgstr "Toepassen"
|
||||
|
||||
msgid "Custom range"
|
||||
msgstr ""
|
||||
msgstr "Aangepast bereik"
|
||||
|
||||
msgid "Yesterday"
|
||||
msgstr ""
|
||||
msgstr "Gisteren"
|
||||
|
||||
msgid "Last %1$s day"
|
||||
msgid_plural "Last %1$s days"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "Laatste %1$s dag"
|
||||
msgstr[1] "Laatste %1$s dagen"
|
||||
|
||||
msgid "This month"
|
||||
msgstr ""
|
||||
msgstr "Deze maand"
|
||||
|
||||
msgid "Last month"
|
||||
msgstr ""
|
||||
msgstr "Vorige maand"
|
||||
|
||||
msgid "This year"
|
||||
msgstr ""
|
||||
msgstr "Dit jaar"
|
||||
|
||||
msgid "Last year"
|
||||
msgstr ""
|
||||
msgstr "Vorig jaar"
|
||||
|
||||
msgid "Reports"
|
||||
msgstr ""
|
||||
msgstr "Rapporten"
|
||||
|
||||
msgid "Spendings"
|
||||
msgstr ""
|
||||
msgstr "Uitgaven"
|
||||
|
||||
msgid "Stock report"
|
||||
msgstr ""
|
||||
msgstr "Voorraadrapport"
|
||||
|
||||
msgid "Out-of-stock products"
|
||||
msgstr ""
|
||||
msgstr "Producten niet op voorraad"
|
||||
|
||||
msgid "Quantity unit for prices"
|
||||
msgstr ""
|
||||
msgstr "Hoeveelheidseenheid voor prijzen"
|
||||
|
||||
msgid ""
|
||||
"When displaying prices for this product, they will be related to this "
|
||||
"quantity unit"
|
||||
msgstr ""
|
||||
"Bij het tonen van prijzen voor dit product, worden deze gerelateerd aan deze"
|
||||
" hoeveelheidseenheid"
|
||||
|
||||
msgid "This means 1 label will be printed"
|
||||
msgid_plural "This means %1$s labels will be printed"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "Dit betekend dat 1 label wordt geprint"
|
||||
msgstr[1] "Dit betekend dat %1$s labels worden geprint"
|
||||
|
@@ -33,6 +33,10 @@ msgstr "Nummer (geheel getal)"
|
||||
msgid "number-decimal"
|
||||
msgstr "Nummer (decimaal)"
|
||||
|
||||
# Number (currency)
|
||||
msgid "number-currency"
|
||||
msgstr ""
|
||||
|
||||
# Date (without time)
|
||||
msgid "date"
|
||||
msgstr "Datum (zonder tijd)"
|
||||
|
@@ -1206,11 +1206,6 @@ msgstr "Aldri"
|
||||
msgid "Today"
|
||||
msgstr "I dag"
|
||||
|
||||
msgid "Not all ingredients of recipe \"%s\" are in stock, nothing removed"
|
||||
msgstr ""
|
||||
"Ikke alle ingrediensene i oppskriften \"%s\" er på lager, så ingenting er "
|
||||
"fjernet!"
|
||||
|
||||
msgid "Undo task"
|
||||
msgstr "Angre oppgave"
|
||||
|
||||
|
@@ -33,6 +33,10 @@ msgstr "number-integral"
|
||||
msgid "number-decimal"
|
||||
msgstr "number-decimal"
|
||||
|
||||
# Number (currency)
|
||||
msgid "number-currency"
|
||||
msgstr ""
|
||||
|
||||
# Date (without time)
|
||||
msgid "date"
|
||||
msgstr "date"
|
||||
|
@@ -10,6 +10,7 @@
|
||||
# Kamila Frej, 2022
|
||||
# Michał G, 2022
|
||||
# Oskar Sawaryn, 2023
|
||||
# orl0pl, 2023
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -17,7 +18,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: Oskar Sawaryn, 2023\n"
|
||||
"Last-Translator: orl0pl, 2023\n"
|
||||
"Language-Team: Polish (https://app.transifex.com/grocy/teams/93189/pl/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -422,7 +423,7 @@ msgid "Romanian"
|
||||
msgstr "Rumuński"
|
||||
|
||||
msgid "Pint"
|
||||
msgstr ""
|
||||
msgstr "Pół kwarty"
|
||||
|
||||
msgid "Beverages"
|
||||
msgstr "Napoje"
|
||||
@@ -431,10 +432,10 @@ msgid "Ice Cream"
|
||||
msgstr "Lody"
|
||||
|
||||
msgid "Soda"
|
||||
msgstr ""
|
||||
msgstr "Soda"
|
||||
|
||||
msgid "Beer"
|
||||
msgstr "Piwo"
|
||||
|
||||
msgid "Estonian"
|
||||
msgstr ""
|
||||
msgstr "Estoński"
|
||||
|
@@ -19,6 +19,7 @@
|
||||
# Kamila Frej, 2022
|
||||
# Michał G, 2022
|
||||
# Oskar Sawaryn, 2023
|
||||
# orl0pl, 2023
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -26,7 +27,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: Oskar Sawaryn, 2023\n"
|
||||
"Last-Translator: orl0pl, 2023\n"
|
||||
"Language-Team: Polish (https://app.transifex.com/grocy/teams/93189/pl/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -384,7 +385,7 @@ msgid "Removed %1$s of %2$s from stock"
|
||||
msgstr "%2$s - %1$s - usunięto z zapasów"
|
||||
|
||||
msgid "About Grocy"
|
||||
msgstr ""
|
||||
msgstr "O Grocy"
|
||||
|
||||
msgid "Close"
|
||||
msgstr "Zamknij"
|
||||
@@ -895,6 +896,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 ""
|
||||
"Pierwszy element na tej liście zostanie wybrany domyślną regułą, którą jest "
|
||||
"\"Otwarte najpierw, następnie najszybciej przeterminowane, następnie "
|
||||
"pierwsze weszło-pierwsze wyszło\""
|
||||
|
||||
msgid "Mark %1$s of %2$s as open"
|
||||
msgstr "%2$s - %1$s - oznacz jako otwarte"
|
||||
@@ -1249,11 +1253,6 @@ msgstr "Nigdy"
|
||||
msgid "Today"
|
||||
msgstr "Dzisiaj"
|
||||
|
||||
msgid "Not all ingredients of recipe \"%s\" are in stock, nothing removed"
|
||||
msgstr ""
|
||||
"Nie wszystkie składniki przepisu \"%s\" są dostępne, nic nie zostało "
|
||||
"usunięte"
|
||||
|
||||
msgid "Undo task"
|
||||
msgstr "Cofnij zadanie"
|
||||
|
||||
|
@@ -36,6 +36,10 @@ msgstr "Liczba (całkowita)"
|
||||
msgid "number-decimal"
|
||||
msgstr "Liczba (dziesiętna)"
|
||||
|
||||
# Number (currency)
|
||||
msgid "number-currency"
|
||||
msgstr ""
|
||||
|
||||
# Date (without time)
|
||||
msgid "date"
|
||||
msgstr "Data (bez czasu)"
|
||||
|
@@ -3,7 +3,7 @@
|
||||
# Danilo Vieira <cebikyn@gmail.com>, 2019
|
||||
# Jefferson Brito Passos dos Santos <jeffersantoss@gmail.com>, 2019
|
||||
# Ryan Monteiro, 2022
|
||||
# Arthur Rodrigues <araruna@gmail.com>, 2022
|
||||
# Arthur Rodrigues <transifex@araruna.me>, 2022
|
||||
# Aurelio Barreto <aurelio@aureliobarreto.com>, 2023
|
||||
#
|
||||
msgid ""
|
||||
|
@@ -133,10 +133,10 @@ msgid "Battery"
|
||||
msgstr "Bateria"
|
||||
|
||||
msgid "Last charged"
|
||||
msgstr "Última Carga"
|
||||
msgstr "Último Carregamento"
|
||||
|
||||
msgid "Next planned charge cycle"
|
||||
msgstr "Próximo ciclo de carga prevista"
|
||||
msgstr "Próxima recarga"
|
||||
|
||||
msgid "Best before"
|
||||
msgstr "Melhor consumido antes de "
|
||||
@@ -572,7 +572,7 @@ msgstr "Diários"
|
||||
|
||||
msgid "0 means suggestions for the next charge cycle are disabled"
|
||||
msgstr ""
|
||||
"0 significa que as sugestões para o próximo ciclo de carga estão "
|
||||
"0 (zero) significa que as sugestões para o próximo ciclo de carga estão "
|
||||
"desabilitados"
|
||||
|
||||
msgid "Charge cycle interval (days)"
|
||||
@@ -913,7 +913,7 @@ msgid "Chore due"
|
||||
msgstr "Ativ."
|
||||
|
||||
msgid "Battery charge cycle due"
|
||||
msgstr "Vence carga"
|
||||
msgstr "Carregar"
|
||||
|
||||
msgid "Show clock in header"
|
||||
msgstr "Exibir relógio no cabeçalho"
|
||||
@@ -1240,11 +1240,6 @@ msgstr "Nunca"
|
||||
msgid "Today"
|
||||
msgstr "Hoje"
|
||||
|
||||
msgid "Not all ingredients of recipe \"%s\" are in stock, nothing removed"
|
||||
msgstr ""
|
||||
"Nem todos os ingredientes da receita \"%s\" estão no estoque, nada foi "
|
||||
"removido"
|
||||
|
||||
msgid "Undo task"
|
||||
msgstr "Desfazer tarefa"
|
||||
|
||||
@@ -1976,7 +1971,7 @@ msgid "Mark task as completed"
|
||||
msgstr "Marcar a tarefa como concluída"
|
||||
|
||||
msgid "Track charge cycle"
|
||||
msgstr "Rastrear ciclo de recarga"
|
||||
msgstr "Atualizar ciclo de recarga"
|
||||
|
||||
msgid "Battery journal"
|
||||
msgstr "Diário"
|
||||
|
@@ -1,7 +1,7 @@
|
||||
#
|
||||
# Translators:
|
||||
# Bernd Bestel <bernd@berrnd.de>, 2019
|
||||
# Arthur Rodrigues <araruna@gmail.com>, 2022
|
||||
# Arthur Rodrigues <transifex@araruna.me>, 2022
|
||||
# Fernando Luiz Bonifácio de Oliveira, 2022
|
||||
#
|
||||
msgid ""
|
||||
@@ -35,6 +35,10 @@ msgstr "Número (inteiro)"
|
||||
msgid "number-decimal"
|
||||
msgstr "Número (decimal)"
|
||||
|
||||
# Number (currency)
|
||||
msgid "number-currency"
|
||||
msgstr ""
|
||||
|
||||
# Date (without time)
|
||||
msgid "date"
|
||||
msgstr "Data (sem horário)"
|
||||
|
@@ -1226,11 +1226,6 @@ msgstr "Nunca"
|
||||
msgid "Today"
|
||||
msgstr "Hoje"
|
||||
|
||||
msgid "Not all ingredients of recipe \"%s\" are in stock, nothing removed"
|
||||
msgstr ""
|
||||
"Nem todos os ingredientes da receita \"%s\" estão em stock, nada foi "
|
||||
"removido"
|
||||
|
||||
msgid "Undo task"
|
||||
msgstr "Desfazer tarefa"
|
||||
|
||||
|
@@ -35,6 +35,10 @@ msgstr "Número (inteiro)"
|
||||
msgid "number-decimal"
|
||||
msgstr "Número (décimal)"
|
||||
|
||||
# Number (currency)
|
||||
msgid "number-currency"
|
||||
msgstr ""
|
||||
|
||||
# Date (without time)
|
||||
msgid "date"
|
||||
msgstr "Data (sem horas)"
|
||||
|
@@ -1224,9 +1224,6 @@ msgstr "Niciodată"
|
||||
msgid "Today"
|
||||
msgstr "Astăzi"
|
||||
|
||||
msgid "Not all ingredients of recipe \"%s\" are in stock, nothing removed"
|
||||
msgstr "Nu toate ingredientele rețetei \"%s\" sunt în stoc, nimic eliminat"
|
||||
|
||||
msgid "Undo task"
|
||||
msgstr "Anulați sarcina"
|
||||
|
||||
|
@@ -33,6 +33,10 @@ msgstr "Număr (integral)"
|
||||
msgid "number-decimal"
|
||||
msgstr "Număr (decimal)"
|
||||
|
||||
# Number (currency)
|
||||
msgid "number-currency"
|
||||
msgstr ""
|
||||
|
||||
# Date (without time)
|
||||
msgid "date"
|
||||
msgstr "Dată (fără timp)"
|
||||
|
@@ -7,9 +7,9 @@
|
||||
# unwarkz <git@unwar.kz>, 2021
|
||||
# J K <su1ka.box@gmail.com>, 2021
|
||||
# Pavel Pletenev <cpp.create@gmail.com>, 2021
|
||||
# Sergey Kodolov, 2022
|
||||
# Dmitry Galyshev, 2022
|
||||
# Юрий Куклин, 2022
|
||||
# Sergey Kodolov, 2023
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -17,7 +17,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: Юрий Куклин, 2022\n"
|
||||
"Last-Translator: Sergey Kodolov, 2023\n"
|
||||
"Language-Team: Russian (https://app.transifex.com/grocy/teams/93189/ru/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -376,7 +376,7 @@ msgid "Removed %1$s of %2$s from stock"
|
||||
msgstr "Убрано %1$s из %2$s из запаса"
|
||||
|
||||
msgid "About Grocy"
|
||||
msgstr ""
|
||||
msgstr "О Grocy"
|
||||
|
||||
msgid "Close"
|
||||
msgstr "Закрыть"
|
||||
@@ -1253,9 +1253,6 @@ msgstr "Никогда"
|
||||
msgid "Today"
|
||||
msgstr "Сегодня"
|
||||
|
||||
msgid "Not all ingredients of recipe \"%s\" are in stock, nothing removed"
|
||||
msgstr "Не все ингредиенты рецепта \"%s\" есть в запасе, ничего не изъято"
|
||||
|
||||
msgid "Undo task"
|
||||
msgstr "Отменить задание"
|
||||
|
||||
@@ -1535,7 +1532,7 @@ msgid "Price factor"
|
||||
msgstr "Коэффициент цены"
|
||||
|
||||
msgid "Do you find Grocy useful?"
|
||||
msgstr ""
|
||||
msgstr "Вы находите Grocy полезным?"
|
||||
|
||||
msgid "Say thanks"
|
||||
msgstr "Сказать спасибо"
|
||||
@@ -1553,7 +1550,7 @@ msgid "Output"
|
||||
msgstr "Вывод"
|
||||
|
||||
msgid "Energy"
|
||||
msgstr ""
|
||||
msgstr "Энергетическая ценность"
|
||||
|
||||
msgid "Per stock quantity unit"
|
||||
msgstr "На единицу измерения в запасе"
|
||||
@@ -1668,6 +1665,9 @@ msgid ""
|
||||
"Camera access is only possible when supported and allowed by your browser "
|
||||
"and when Grocy is served via a secure (https://) connection"
|
||||
msgstr ""
|
||||
"Доступ к камере возможен только тогда, когда это поддерживается и разрешено "
|
||||
"вашим браузером и когда Grocy обслуживается через безопасное (https://) "
|
||||
"соединение."
|
||||
|
||||
msgid "Keep screen on"
|
||||
msgstr "Держать экран включенным"
|
||||
@@ -1874,16 +1874,16 @@ msgid "Unauthorized"
|
||||
msgstr "Не авторизированы"
|
||||
|
||||
msgid "Error source"
|
||||
msgstr ""
|
||||
msgstr "Источник ошибок"
|
||||
|
||||
msgid "Error message"
|
||||
msgstr "Сообщение об ошибке"
|
||||
|
||||
msgid "Stack trace"
|
||||
msgstr ""
|
||||
msgstr "Трассировки стека"
|
||||
|
||||
msgid "Easy error info copy & paste (for reporting)"
|
||||
msgstr ""
|
||||
msgstr "Простое копирование и вставка информации об ошибках (для отчетности)"
|
||||
|
||||
msgid "This page does not exist"
|
||||
msgstr "Эта страница не существует"
|
||||
@@ -2738,10 +2738,10 @@ msgid "Track chore execution now"
|
||||
msgstr ""
|
||||
|
||||
msgid "Total"
|
||||
msgstr ""
|
||||
msgstr "Всего"
|
||||
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
msgstr "Применить"
|
||||
|
||||
msgid "Custom range"
|
||||
msgstr ""
|
||||
@@ -2766,13 +2766,13 @@ msgid "This year"
|
||||
msgstr ""
|
||||
|
||||
msgid "Last year"
|
||||
msgstr ""
|
||||
msgstr "Прошлый год"
|
||||
|
||||
msgid "Reports"
|
||||
msgstr ""
|
||||
msgstr "Отчеты"
|
||||
|
||||
msgid "Spendings"
|
||||
msgstr ""
|
||||
msgstr "Расходы"
|
||||
|
||||
msgid "Stock report"
|
||||
msgstr ""
|
||||
|
@@ -35,6 +35,10 @@ msgstr "Число (целочисленное)"
|
||||
msgid "number-decimal"
|
||||
msgstr "Число (дробное)"
|
||||
|
||||
# Number (currency)
|
||||
msgid "number-currency"
|
||||
msgstr ""
|
||||
|
||||
# Date (without time)
|
||||
msgid "date"
|
||||
msgstr "Дата (без времени)"
|
||||
|
@@ -1228,9 +1228,6 @@ msgstr "Nikdy"
|
||||
msgid "Today"
|
||||
msgstr "Dnes"
|
||||
|
||||
msgid "Not all ingredients of recipe \"%s\" are in stock, nothing removed"
|
||||
msgstr "Nie všetky suroviny v recepte \"%s\" sú v zásobe, nič nebude odstránené"
|
||||
|
||||
msgid "Undo task"
|
||||
msgstr "Zrušiť úlohu"
|
||||
|
||||
|
@@ -34,6 +34,10 @@ msgstr "číslo-celé"
|
||||
msgid "number-decimal"
|
||||
msgstr "číslo-desatinné"
|
||||
|
||||
# Number (currency)
|
||||
msgid "number-currency"
|
||||
msgstr ""
|
||||
|
||||
# Date (without time)
|
||||
msgid "date"
|
||||
msgstr "dátum"
|
||||
|
@@ -1,10 +1,14 @@
|
||||
#
|
||||
# Translators:
|
||||
# Anže Pintar <anze.pintar2@gmail.com>, 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-09-17 10:45+0000\n"
|
||||
"Last-Translator: Anže Pintar <anze.pintar2@gmail.com>, 2023\n"
|
||||
"Language-Team: Slovenian (https://app.transifex.com/grocy/teams/93189/sl/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -14,13 +18,13 @@ msgstr ""
|
||||
"X-Domain: grocy/chore_assignment_types\n"
|
||||
|
||||
msgid "no-assignment"
|
||||
msgstr ""
|
||||
msgstr "Brez zadolžitve"
|
||||
|
||||
msgid "who-least-did-first"
|
||||
msgstr ""
|
||||
|
||||
msgid "random"
|
||||
msgstr ""
|
||||
msgstr "naključno"
|
||||
|
||||
msgid "in-alphabetical-order"
|
||||
msgstr ""
|
||||
msgstr "po-abecednem-vrstnem-redu"
|
||||
|
@@ -1,10 +1,14 @@
|
||||
#
|
||||
# Translators:
|
||||
# Anže Pintar <anze.pintar2@gmail.com>, 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: Anže Pintar <anze.pintar2@gmail.com>, 2023\n"
|
||||
"Language-Team: Slovenian (https://app.transifex.com/grocy/teams/93189/sl/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -14,10 +18,10 @@ msgstr ""
|
||||
"X-Domain: grocy/demo_data\n"
|
||||
|
||||
msgid "Cookies"
|
||||
msgstr ""
|
||||
msgstr "Piškoti"
|
||||
|
||||
msgid "Chocolate"
|
||||
msgstr ""
|
||||
msgstr "Čokolada"
|
||||
|
||||
msgid "Pantry"
|
||||
msgstr ""
|
||||
@@ -29,14 +33,14 @@ msgid "Tinned food cupboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Fridge"
|
||||
msgstr ""
|
||||
msgstr "Hladilnik"
|
||||
|
||||
msgid "Piece"
|
||||
msgid_plural "Pieces"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
msgstr[3] ""
|
||||
msgstr[0] "Kos"
|
||||
msgstr[1] "Kosa"
|
||||
msgstr[2] "Kosi"
|
||||
msgstr[3] "Kosov"
|
||||
|
||||
msgid "Pack"
|
||||
msgid_plural "Packs"
|
||||
@@ -80,37 +84,37 @@ msgid "Crisps"
|
||||
msgstr ""
|
||||
|
||||
msgid "Eggs"
|
||||
msgstr ""
|
||||
msgstr "Jajca"
|
||||
|
||||
msgid "Noodles"
|
||||
msgstr ""
|
||||
msgstr "Rezanci"
|
||||
|
||||
msgid "Pickles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Gulash soup"
|
||||
msgstr ""
|
||||
msgstr "Golaž"
|
||||
|
||||
msgid "Yogurt"
|
||||
msgstr ""
|
||||
msgstr "Jogurt"
|
||||
|
||||
msgid "Cheese"
|
||||
msgstr ""
|
||||
msgstr "Sir"
|
||||
|
||||
msgid "Cold cuts"
|
||||
msgstr ""
|
||||
|
||||
msgid "Paprika"
|
||||
msgstr ""
|
||||
msgstr "Paprika"
|
||||
|
||||
msgid "Cucumber"
|
||||
msgstr ""
|
||||
msgstr "Kumara"
|
||||
|
||||
msgid "Radish"
|
||||
msgstr ""
|
||||
msgstr "Redkev"
|
||||
|
||||
msgid "Tomato"
|
||||
msgstr ""
|
||||
msgstr "Paradižnik"
|
||||
|
||||
msgid "Change towels in the bathroom"
|
||||
msgstr ""
|
||||
@@ -137,28 +141,28 @@ msgid "Some good snacks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Pizza dough"
|
||||
msgstr ""
|
||||
msgstr "Testo za pico"
|
||||
|
||||
msgid "Sieved tomatoes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Salami"
|
||||
msgstr ""
|
||||
msgstr "Salama"
|
||||
|
||||
msgid "Toast"
|
||||
msgstr ""
|
||||
msgstr "Toast"
|
||||
|
||||
msgid "Minced meat"
|
||||
msgstr ""
|
||||
|
||||
msgid "Pizza"
|
||||
msgstr ""
|
||||
msgstr "Pica"
|
||||
|
||||
msgid "Spaghetti bolognese"
|
||||
msgstr ""
|
||||
msgstr "Špageti Bolognese"
|
||||
|
||||
msgid "Sandwiches"
|
||||
msgstr ""
|
||||
msgstr "Sendviči"
|
||||
|
||||
msgid "English"
|
||||
msgstr ""
|
||||
@@ -177,22 +181,22 @@ msgstr ""
|
||||
|
||||
msgid "Gram"
|
||||
msgid_plural "Grams"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
msgstr[3] ""
|
||||
msgstr[0] "Gram"
|
||||
msgstr[1] "Grama"
|
||||
msgstr[2] "Grami"
|
||||
msgstr[3] "Gramov"
|
||||
|
||||
msgid "Flour"
|
||||
msgstr ""
|
||||
msgstr "Moka"
|
||||
|
||||
msgid "Pancakes"
|
||||
msgstr ""
|
||||
msgstr "Palačinke"
|
||||
|
||||
msgid "Sugar"
|
||||
msgstr ""
|
||||
msgstr "Sladkor"
|
||||
|
||||
msgid "Sweets"
|
||||
msgstr ""
|
||||
msgstr "Sladkarije"
|
||||
|
||||
msgid "Bakery products"
|
||||
msgstr ""
|
||||
@@ -213,31 +217,31 @@ msgid "Coffee machine"
|
||||
msgstr ""
|
||||
|
||||
msgid "Dishwasher"
|
||||
msgstr ""
|
||||
msgstr "Pomivalni stroj"
|
||||
|
||||
msgid "Liter"
|
||||
msgstr ""
|
||||
msgstr "Liter"
|
||||
|
||||
msgid "Liters"
|
||||
msgstr ""
|
||||
msgstr "Litrov"
|
||||
|
||||
msgid "Bottle"
|
||||
msgstr ""
|
||||
msgstr "Steklenica"
|
||||
|
||||
msgid "Bottles"
|
||||
msgstr ""
|
||||
msgstr "Steklenic"
|
||||
|
||||
msgid "Milk"
|
||||
msgstr ""
|
||||
msgstr "Mleko"
|
||||
|
||||
msgid "Chocolate sauce"
|
||||
msgstr ""
|
||||
|
||||
msgid "Milliliters"
|
||||
msgstr ""
|
||||
msgstr "Mililitrov"
|
||||
|
||||
msgid "Milliliter"
|
||||
msgstr ""
|
||||
msgstr "Mililiter"
|
||||
|
||||
msgid "Bottom"
|
||||
msgstr ""
|
||||
@@ -273,17 +277,17 @@ msgid "Polish"
|
||||
msgstr ""
|
||||
|
||||
msgid "Milk Chocolate"
|
||||
msgstr ""
|
||||
msgstr "Mlečna čokolada"
|
||||
|
||||
msgid "Dark Chocolate"
|
||||
msgstr ""
|
||||
msgstr "Temna čokolada"
|
||||
|
||||
msgid "Slice"
|
||||
msgid_plural "Slices"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
msgstr[3] ""
|
||||
msgstr[0] "Rezina"
|
||||
msgstr[1] "Rezini"
|
||||
msgstr[2] "Rezine"
|
||||
msgstr[3] "Rezin"
|
||||
|
||||
msgid "Example userentity"
|
||||
msgstr ""
|
||||
@@ -328,10 +332,10 @@ msgid "Portuguese (Brazil)"
|
||||
msgstr ""
|
||||
|
||||
msgid "This is a note"
|
||||
msgstr ""
|
||||
msgstr "To je opomba"
|
||||
|
||||
msgid "Freezer"
|
||||
msgstr ""
|
||||
msgstr "Zamrzovalnik"
|
||||
|
||||
msgid "Hungarian"
|
||||
msgstr ""
|
||||
@@ -347,11 +351,11 @@ msgstr ""
|
||||
|
||||
# Use a in your country well known supermarket name
|
||||
msgid "DemoSupermarket1"
|
||||
msgstr ""
|
||||
msgstr "DemoTrgovina1"
|
||||
|
||||
# Use a in your country well known supermarket name
|
||||
msgid "DemoSupermarket2"
|
||||
msgstr ""
|
||||
msgstr "DemoTrgovina2"
|
||||
|
||||
msgid "Japanese"
|
||||
msgstr ""
|
||||
@@ -378,13 +382,13 @@ msgid "Finnish"
|
||||
msgstr ""
|
||||
|
||||
msgid "Breakfast"
|
||||
msgstr ""
|
||||
msgstr "Zajtrk"
|
||||
|
||||
msgid "Lunch"
|
||||
msgstr ""
|
||||
msgstr "Kosilo"
|
||||
|
||||
msgid "Dinner"
|
||||
msgstr ""
|
||||
msgstr "Večerja"
|
||||
|
||||
msgid "Catalan"
|
||||
msgstr ""
|
||||
@@ -400,10 +404,10 @@ msgstr ""
|
||||
|
||||
msgid "Kilogram"
|
||||
msgid_plural "Kilograms"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
msgstr[3] ""
|
||||
msgstr[0] "Kilogram"
|
||||
msgstr[1] "Kilograma"
|
||||
msgstr[2] "Kilogrami"
|
||||
msgstr[3] "Kilogramov"
|
||||
|
||||
msgid "Romanian"
|
||||
msgstr ""
|
||||
@@ -415,13 +419,13 @@ msgid "Beverages"
|
||||
msgstr ""
|
||||
|
||||
msgid "Ice Cream"
|
||||
msgstr ""
|
||||
msgstr "Sladoled"
|
||||
|
||||
msgid "Soda"
|
||||
msgstr ""
|
||||
|
||||
msgid "Beer"
|
||||
msgstr ""
|
||||
msgstr "Pivo"
|
||||
|
||||
msgid "Estonian"
|
||||
msgstr ""
|
||||
|
@@ -1,6 +1,7 @@
|
||||
#
|
||||
# Translators:
|
||||
# bostjo g, 2022
|
||||
# Anže Pintar <anze.pintar2@gmail.com>, 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-05-01 17:42+0000\n"
|
||||
"Last-Translator: bostjo g, 2022\n"
|
||||
"Last-Translator: Anže Pintar <anze.pintar2@gmail.com>, 2023\n"
|
||||
"Language-Team: Slovenian (https://app.transifex.com/grocy/teams/93189/sl/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -364,7 +365,7 @@ msgid "Removed %1$s of %2$s from stock"
|
||||
msgstr "Izbrisan %1$s količine %2$s iz zaloge"
|
||||
|
||||
msgid "About Grocy"
|
||||
msgstr ""
|
||||
msgstr "O Grocy"
|
||||
|
||||
msgid "Close"
|
||||
msgstr "Zapri"
|
||||
@@ -1218,9 +1219,6 @@ msgstr "Nikoli"
|
||||
msgid "Today"
|
||||
msgstr "Danes"
|
||||
|
||||
msgid "Not all ingredients of recipe \"%s\" are in stock, nothing removed"
|
||||
msgstr "Nekatere sestavine recepta \"%s\" so na zalogi, ničesar ne bo odstranjeno"
|
||||
|
||||
msgid "Undo task"
|
||||
msgstr "Razveljavi opravilo"
|
||||
|
||||
|
@@ -29,6 +29,10 @@ msgstr ""
|
||||
msgid "number-decimal"
|
||||
msgstr ""
|
||||
|
||||
# Number (currency)
|
||||
msgid "number-currency"
|
||||
msgstr ""
|
||||
|
||||
# Date (without time)
|
||||
msgid "date"
|
||||
msgstr ""
|
||||
|
@@ -1139,9 +1139,6 @@ msgstr ""
|
||||
msgid "Today"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not all ingredients of recipe \"%s\" are in stock, nothing removed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Undo task"
|
||||
msgstr ""
|
||||
|
||||
|
@@ -1216,9 +1216,6 @@ msgstr "Aldrig"
|
||||
msgid "Today"
|
||||
msgstr "Idag"
|
||||
|
||||
msgid "Not all ingredients of recipe \"%s\" are in stock, nothing removed"
|
||||
msgstr "Inte alla ingredienser i recept \"%s\" finns i lager, inget togs bort"
|
||||
|
||||
msgid "Undo task"
|
||||
msgstr "Ångra uppgift"
|
||||
|
||||
|
@@ -38,6 +38,10 @@ msgstr "Antal (heltal)"
|
||||
msgid "number-decimal"
|
||||
msgstr "Antal (decimal)"
|
||||
|
||||
# Number (currency)
|
||||
msgid "number-currency"
|
||||
msgstr ""
|
||||
|
||||
# Date (without time)
|
||||
msgid "date"
|
||||
msgstr "Datum (utan tid)"
|
||||
|
@@ -1175,9 +1175,6 @@ msgstr "ஒருபோதும் இல்லை"
|
||||
msgid "Today"
|
||||
msgstr "இன்று"
|
||||
|
||||
msgid "Not all ingredients of recipe \"%s\" are in stock, nothing removed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Undo task"
|
||||
msgstr ""
|
||||
|
||||
|
@@ -33,6 +33,10 @@ msgstr "எண்-முழு"
|
||||
msgid "number-decimal"
|
||||
msgstr "எண்-decimal"
|
||||
|
||||
# Number (currency)
|
||||
msgid "number-currency"
|
||||
msgstr ""
|
||||
|
||||
# Date (without time)
|
||||
msgid "date"
|
||||
msgstr "தேதி"
|
||||
|