mirror of
https://github.com/grocy/grocy.git
synced 2025-10-17 19:06:21 +00:00
Compare commits
96 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
1cb0ba5e68 | ||
|
d4fefa846b | ||
|
7121e814b0 | ||
|
70a1704bc2 | ||
|
629b3c0706 | ||
|
db3021e475 | ||
|
e897570968 | ||
|
2e625f330d | ||
|
a6030798c7 | ||
|
71770540f6 | ||
|
59cd4dbac4 | ||
|
6f4769a7b3 | ||
|
1390c65864 | ||
|
840b35b30d | ||
|
886721e972 | ||
|
1686fcca8e | ||
|
7d9bad58b5 | ||
|
25be604b31 | ||
|
87e68523e5 | ||
|
858315ed3f | ||
|
f36d9c46ed | ||
|
45d96cb60f | ||
|
10f890ef89 | ||
|
c6e06ab07c | ||
|
9a93c32d3c | ||
|
1fc802c30e | ||
|
42e6a8ef94 | ||
|
b971375881 | ||
|
855b24c515 | ||
|
b62d3b02e6 | ||
|
0327188125 | ||
|
73b3ad3b4c | ||
|
152d3b7005 | ||
|
5b314351dd | ||
|
7b39bc995c | ||
|
c562e09073 | ||
|
8cfd3e19ba | ||
|
81e6530ddc | ||
|
86ef36d76a | ||
|
1d4b6a0a24 | ||
|
d907bca3cb | ||
|
3356b07342 | ||
|
615de378ba | ||
|
0f3a3887a2 | ||
|
390af436ab | ||
|
4e5e191b22 | ||
|
6867057b6e | ||
|
9dbd6a68c4 | ||
|
4f8ef2859e | ||
|
a6dd794ce8 | ||
|
6b75decd4a | ||
|
2334b010fd | ||
|
1cb3128042 | ||
|
cc012c7348 | ||
|
bfb46494cf | ||
|
4072dfd26f | ||
|
769a13aa31 | ||
|
2924502878 | ||
|
30908f5ba9 | ||
|
ca9354064d | ||
|
9a9b4d1000 | ||
|
808745dbfa | ||
|
2778d2ad56 | ||
|
11bf89e13a | ||
|
1aa788b6c2 | ||
|
7200f2c17f | ||
|
746203b82d | ||
|
8e82525732 | ||
|
f092c8b10d | ||
|
f66a4c9631 | ||
|
caf7127c13 | ||
|
2fee4b45ff | ||
|
d509f9add0 | ||
|
81d84d93e2 | ||
|
646f638111 | ||
|
9a27b8e3a5 | ||
|
d7738aa1ec | ||
|
4f40b40fe0 | ||
|
7b737590ea | ||
|
f3b504b7de | ||
|
2619d03cc0 | ||
|
305f5b67e4 | ||
|
5214a775ed | ||
|
2d00f6f84a | ||
|
06f65594de | ||
|
c3d4be352d | ||
|
a45317aea1 | ||
|
573b6ece89 | ||
|
22eaeee572 | ||
|
375865d80e | ||
|
3fc14db5d5 | ||
|
dcfd9d848d | ||
|
03eee1329c | ||
|
03566d0644 | ||
|
71b62d5708 | ||
|
eb3c0f9397 |
@@ -1,4 +1,9 @@
|
||||
pushd ..
|
||||
tx pull --all --minimum-perc=80
|
||||
tx pull --language en_GB
|
||||
copy /Y localization\en\userfield_types.po localization\en_GB\userfield_types.po
|
||||
copy /Y localization\en\stock_transaction_types.po localization\en_GB\stock_transaction_types.po
|
||||
copy /Y localization\en\component_translations.po localization\en_GB\component_translations.po
|
||||
copy /Y localization\en\chore_period_types.po localization\en_GB\chore_period_types.po
|
||||
copy /Y localization\en\chore_assignment_types.po localization\en_GB\chore_assignment_types.po
|
||||
popd
|
||||
|
19
README.md
19
README.md
@@ -2,11 +2,13 @@
|
||||
ERP beyond your fridge
|
||||
|
||||
## Give it a try
|
||||
- Public demo of the latest stable version → [https://demo.grocy.info](https://demo.grocy.info)
|
||||
- Public demo of the latest pre-release version (current master branch) → [https://demo-prerelease.grocy.info](https://demo-prerelease.grocy.info)
|
||||
- Public demo of the latest stable version (`release` branch) → [https://demo.grocy.info](https://demo.grocy.info)
|
||||
- Public demo of the latest pre-release version (`master` branch) → [https://demo-prerelease.grocy.info](https://demo-prerelease.grocy.info)
|
||||
|
||||
## Getting in touch
|
||||
There is the [r/grocy subreddit](https://www.reddit.com/r/grocy) to connect with other grocy users. If you've found something that does not work or if you have an idea for an improvement or new things which you would find useful, feel free to open an issue in the [issue tracker](https://github.com/grocy/grocy/issues) here.
|
||||
## Questions / Help / Bug reporting / Feature requests
|
||||
There is the [r/grocy subreddit](https://www.reddit.com/r/grocy) to connect with other grocy users and getting help.
|
||||
|
||||
If you've found something that does not work or if you have an idea for an improvement or new things which you would find useful, feel free to open an issue in the [issue tracker](https://github.com/grocy/grocy/issues) here.
|
||||
|
||||
## Community contributions
|
||||
See the website for a list of community contributed Add-ons / Tools: [https://grocy.info/#addons](https://grocy.info/#addons)
|
||||
@@ -19,9 +21,9 @@ A household needs to be managed. I did this so far (almost 10 years) with my fir
|
||||
>
|
||||
> See https://github.com/grocy/grocy-desktop or directly download the [latest release](https://releases.grocy.info/latest-desktop) - the installation is nothing more than just clicking 2 times "next"...
|
||||
|
||||
Just unpack the [latest release](https://releases.grocy.info/latest) on your PHP (SQLite (3.8.3 or higher) extension required, currently only tested with PHP 7.3) enabled webserver (webservers root should point to the `public` directory), copy `config-dist.php` to `data/config.php`, edit it to your needs, ensure that the `data` directory is writable and you're ready to go, (to make it writable, maybe use `chown -R www-data:www-data data/`). Default login is user `admin` with password `admin`, please change the password immediately (see user menu).
|
||||
Just unpack the [latest release](https://releases.grocy.info/latest) on your PHP (SQLite (3.8.3 or higher) extension required, currently only tested with PHP 7.4) enabled webserver (webservers root should point to the `public` directory), copy `config-dist.php` to `data/config.php`, edit it to your needs, ensure that the `data` directory is writable and you're ready to go, (to make it writable, maybe use `chown -R www-data:www-data data/`). Default login is user `admin` with password `admin`, please change the password immediately (see user menu).
|
||||
|
||||
Alternatively clone this repository and install Composer and Yarn dependencies manually.
|
||||
Alternatively clone this repository (the `release` branch always references the latest released version, or checkout the latest tagged revision) and install Composer and Yarn dependencies manually.
|
||||
|
||||
If you use nginx as your webserver, please include `try_files $uri /index.php$is_args$query_string;` in your location block.
|
||||
|
||||
@@ -57,6 +59,8 @@ Some fields (with a barcode icon above) also allow to select a value by scanning
|
||||
|
||||
Additionally it's also possible to use your device camera to scan a barcode by using the camera button on the right side of the corresponding field (powered by [QuaggaJS](https://github.com/serratus/quaggaJS), totally offline / client-side camera stream processing, please note due to browser security restrictions, this only works when serving grocy via a secure connection (`https://`)). Quick video demo: https://www.youtube.com/watch?v=Y5YH6IJFnfc
|
||||
|
||||
My personal recommendation: Use a USB barcode laser scanner. They are cheap and work 1000 % better, faster, under any lighting condition and from any angle.
|
||||
|
||||
### Input shorthands for date fields
|
||||
For (productivity) reasons all date (and time) input (and display) fields use the ISO-8601 format regardless of localization.
|
||||
The following shorthands are available:
|
||||
@@ -104,6 +108,9 @@ Any help is more than appreciated. Feel free to pick any open unassigned issue a
|
||||
|
||||
See https://grocy.info/#say-thanks for more ideas if you just want to say thanks.
|
||||
|
||||
## Roadmap
|
||||
There is none. grocy is only my hobby, one I like, but not the only one, and because of that, there are no release dates, no schedules for when anything is ready, it's done when it's done, maybe tomorrow, maybe tomorrow next year, everyone is invited to contribute - I appreciate all ideas and contributions. The progress of a specific bug/enhancement is always tracked in the corresponding issue, at least by commit comment references.
|
||||
|
||||
## Screenshots
|
||||
#### Dashboard
|
||||

|
||||
|
@@ -46,4 +46,4 @@ If you run grocy in a subdirectory, you need to set a new `config.php` setting (
|
||||
- Fixed that the "contextual time ago" of date/time pickers was not displayed
|
||||
- New translations: (thanks all the translators)
|
||||
- Czech (demo available at https://cs.demo.grocy.info)
|
||||
- Portuguese (Brazil) (demo available at https://pt-pt.demo.grocy.info)
|
||||
- Portuguese (Portugal) (demo available at https://pt-pt.demo.grocy.info)
|
||||
|
66
changelog/58_2.7.0_2020-04-16.md
Normal file
66
changelog/58_2.7.0_2020-04-16.md
Normal file
@@ -0,0 +1,66 @@
|
||||
### New feature: Price history per store
|
||||
- Define stores under master data
|
||||
- New product option to set the default store
|
||||
- Track on purchase/inventory in which store you bought the product (gets prefilled by the last store you purchased the product, or the default store of the product if you never bought it)
|
||||
- => The price history chart on the product card shows a line per store
|
||||
- (Thanks @immae and @kriddles)
|
||||
|
||||
### Stock improvements/fixes
|
||||
- When creating a new product, the "QU id stock" is now preset by the "QU id purchase" (because most of the time that's most probably the same) (thanks @Mik-)
|
||||
- Clarified the row-button colors and toolips on the stock entries page
|
||||
- Added a camera-barcode-scanning-button to the barcode(s) field on the product edit page to be able to also scan barcodes by the device camera there
|
||||
- Added a new option (stock settings / top right corner settings menu) to show an icon on the stock overview if the product is already on the shopping list (next to the amount) (defaults to enabled)
|
||||
- Fixed that the aggregated parent product amount (displayed on the stock overview page and on the product card) did not respect quantity unit conversions when the parent/sub products had different stock quantity units (the unit conversion needs to be globally defined, or as an override on the sub product)
|
||||
- Fixed the conversion factor hint to display also decimal places on the purchase page (only displayed when the product has a different purchase/stock quantity unit)
|
||||
- Fixed that the stock entries page was broken when there were product userfields defined with enabled "Show as column in tables"
|
||||
- Fixed that best before dates were displayed on the stock overview and stock entries page even with disabled `FEATURE_FLAG_STOCK_BEST_BEFORE_DATE_TRACKING`
|
||||
- Fixed that when editing a stock entry and setting a decimal amount, the decimal part was ignored (only possible when the product option "Allow partial units in stock" is enabled)
|
||||
- Fixed that "Default best before days" and "Default best before days after opened" on the product edit page were always shown regardless of the feature flags `FEATURE_FLAG_STOCK_BEST_BEFORE_DATE_TRACKING` and `FEATURE_FLAG_STOCK_PRODUCT_OPENED_TRACKING`
|
||||
- Fixed that the form validation limits for the amount input and products with enabled tare weight handling were wrong
|
||||
- Fixed that the price was saved wrong for products with a different purchase/stock quantity unit when using "Total price" on purchase (resulted for example in wrong recipe costs)
|
||||
- Fixed that undoing "product-opened"-actions was not possible
|
||||
- Fixed/improved consuming from the stock overview page for products with enabled tare weight handling ("consume 1" button is now disabled for such products, "consume all" works again)
|
||||
|
||||
### Shopping list improvements/fixes
|
||||
- It's now possible to collapse/expand the product group sections (by clicking on the grey group header)
|
||||
- Fixed that the "shopping list to stock workflow"-dialog was not visible in compact view
|
||||
- Fixed that when printing the shopping list, configured userfields were not included
|
||||
|
||||
### Recipe fixes
|
||||
- Fixed that when editing an ingredient with "Only check if a single unit is in stock" set, the quantity unit was always set to the products stock quantity unit regardless if a different one was selected for that ingredient
|
||||
- Fixed a PHP notice on the recipes page when there are no recipes (thanks @mrunkel)
|
||||
|
||||
### Chores fixes
|
||||
- Fixed that weekly chores, where the next execution should be in the same week, were scheduled always for the next week only
|
||||
|
||||
### Calendar fixes
|
||||
- Fixed that the "Share/Integrate calendar (iCal)" button did not work (thanks @tsia)
|
||||
|
||||
### API improvements/fixes
|
||||
- New endpoint `/user/settings` to get all user settings of the currently logged in user (key/value pairs)
|
||||
- New endpoint `/system/config` to get all config settings (`config.php`) (key/value pairs)
|
||||
- The endpoint `/stock/products/{productId}/locations` now also returns the current stock amount of the product in that loctation (new field/property `amount`) (thanks @Forceu)
|
||||
- The endpoints `/objects/{entity}` and `/objects/{entity}/{objectId}` now also include/return userfields of the object(s) (new field/property `userfields` per object, key/value pairs or `null`, when the object has no userfields)
|
||||
- Fixed that CORS was broken (there was no response to preflight OPTIONS requests)
|
||||
|
||||
### General & other improvements/fixes
|
||||
- Optimized that sometimes the corresponding form was not validated when selecting a date from the datetimepicker
|
||||
- New `config.php` setting `FEATURE_FLAG_STOCK_BEST_BEFORE_DATE_FIELD_NUMBER_PAD` which activates the number pad for best-before-date fields on (supported) mobile browsers (useful because of [shorthands](https://github.com/grocy/grocy#input-shorthands-for-date-fields)) (defaults to `true`) (thanks @Mik-)
|
||||
- Enhancements for the camera barcode scanner
|
||||
- Torch / light improvements (thanks @Mik-)
|
||||
- The light button is only displayed when the device has a flash light
|
||||
- New `config.php` setting `FEATURE_FLAG_AUTO_TORCH_ON_WITH_CAMERA` to always enable the flash light automatically
|
||||
- It's now possible to change the camera when the device has more than one (dropdown in the camera scanning dialog, only visible if there is more than one camera available) (thanks @MichaelMadsen)
|
||||
- Replaced [QuaggaJS](https://github.com/serratus/quaggaJS) (seems to be unmaintained) by [Quagga2](https://github.com/ericblade/quagga2)
|
||||
- New user setting `quagga2_numofworkers` (`config.php`) to make the Quagga2 setting "numOfWorkers" adjustable (defaults to `4`)
|
||||
- Various display/CSS improvements (thanks @Mik-)
|
||||
- Prerequisites (PHP extensions, critical files/folders) will now be checked and properly reported if there are problems (thanks @Forceu)
|
||||
- Improved the the overview pages on mobile devices (main column was hidden) (thanks @Mik-)
|
||||
- The general search field now searches accent insensitive
|
||||
- Fixed that all number inputs are always prefilled in the browser locale number format
|
||||
- Optimized the handling of settings provided by `data/settingoverrides` files (thanks @dacto)
|
||||
- Optimized the update script (`update.sh`) to create the backup tar archive before writing to it (was a problem on Btrfs file systems) (thanks @shane-kerr)
|
||||
- Fixed (again) that the `update.sh` file had wrong line endings (DOS instead of Unix)
|
||||
- New translations: (thanks all the translators)
|
||||
- Japanese (demo available at https://ja.demo.grocy.info)
|
||||
- Chinese (Taiwan) (demo available at https://zh-tw.demo.grocy.info)
|
@@ -1,28 +0,0 @@
|
||||
### New feature: Price history per store
|
||||
- Define stores under master data
|
||||
- New product option to set the default store
|
||||
- Track on purchase/inventory in which store you bought the product (gets prefilled by the last store you purchased the product, or the default store of the product if you never bought it)
|
||||
- => The price history chart on the product card shows a line per store
|
||||
- (Thanks @immae and @kriddles)
|
||||
|
||||
### Stock improvements
|
||||
- When creating a new product, the "QU id stock" is now preset by the "QU id purchase" (because most of the time that's most probably the same) (thanks @Mik-)
|
||||
|
||||
### Recipe fixes
|
||||
- Fixed a PHP notice on the recipes page when there are no recipes (thanks @mrunkel)
|
||||
|
||||
### Calendar fixes
|
||||
- Fixed that the "Share/Integrate calendar (iCal)" button did not work (thanks @tsia)
|
||||
|
||||
### API improvements
|
||||
- The endpoint `/stock/products/{productId}/locations` now also returns the current stock amount of the product in that loctation (new field/property `amount`) (thanks @Forceu)
|
||||
|
||||
### General & other improvements
|
||||
- New `config.php` setting `FEATURE_FLAG_STOCK_BEST_BEFORE_DATE_FIELD_NUMBER_PAD` which activates the number pad for best-before-date fields on (supported) mobile browsers (useful because of [shorthands](https://github.com/grocy/grocy#input-shorthands-for-date-fields)) (defaults to `true`) (thanks @Mik-)
|
||||
- Enhancements for the camera barcode scanner (thanks @Mik-)
|
||||
- The light button only displayed when the device has a flash light
|
||||
- New `config.php` setting `FEATURE_FLAG_AUTO_TORCH_ON_WITH_CAMERA` to always enable the flash light automatically
|
||||
- Various display/CSS improvements
|
||||
- Prerequisites (PHP extensions, critical files/folders) will now be checked and properly reported if there are problems (thanks @Forceu)
|
||||
- Improved the the overview pages on mobile devices (main column was hidden) (thanks @Mik-)
|
||||
- Optimized the handling of settings provided by `data/settingoverrides` files (thanks @dacto)
|
@@ -6,7 +6,6 @@
|
||||
"slim/http": "^1.0",
|
||||
"php-di/php-di": "^6.0",
|
||||
"rubellum/slim-blade-view": "^0.1.1",
|
||||
"tuupola/cors-middleware": "^1.1",
|
||||
"morris/lessql": "^0.4.1",
|
||||
"gettext/gettext": "^4.8",
|
||||
"eluceo/ical": "^0.16.0",
|
||||
|
442
composer.lock
generated
442
composer.lock
generated
@@ -4,7 +4,7 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "9c7420e77a3f1afb59e00560d5b9081c",
|
||||
"content-hash": "70c5b65f78f4eb43dac8df8dc144e56c",
|
||||
"packages": [
|
||||
{
|
||||
"name": "doctrine/inflector",
|
||||
@@ -752,6 +752,7 @@
|
||||
"serialize",
|
||||
"tokenizer"
|
||||
],
|
||||
"abandoned": "opis/closure",
|
||||
"time": "2018-03-21T22:21:57+00:00"
|
||||
},
|
||||
{
|
||||
@@ -803,73 +804,18 @@
|
||||
],
|
||||
"time": "2019-05-03T23:46:26+00:00"
|
||||
},
|
||||
{
|
||||
"name": "neomerx/cors-psr7",
|
||||
"version": "v1.0.13",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/neomerx/cors-psr7.git",
|
||||
"reference": "2556e2013f16a55532c95928455257d5b6bbc6e2"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/neomerx/cors-psr7/zipball/2556e2013f16a55532c95928455257d5b6bbc6e2",
|
||||
"reference": "2556e2013f16a55532c95928455257d5b6bbc6e2",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.6.0",
|
||||
"psr/http-message": "^1.0",
|
||||
"psr/log": "^1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"mockery/mockery": "^1.0",
|
||||
"phpunit/phpunit": "^5.7",
|
||||
"scrutinizer/ocular": "^1.1",
|
||||
"squizlabs/php_codesniffer": "^3.0"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Neomerx\\Cors\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"Apache-2.0"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "neomerx",
|
||||
"email": "info@neomerx.com"
|
||||
}
|
||||
],
|
||||
"description": "Framework agnostic (PSR-7) CORS implementation (www.w3.org/TR/cors/)",
|
||||
"homepage": "https://github.com/neomerx/cors-psr7",
|
||||
"keywords": [
|
||||
"Cross Origin Resource Sharing",
|
||||
"Cross-Origin Resource Sharing",
|
||||
"cors",
|
||||
"neomerx",
|
||||
"psr-7",
|
||||
"psr7",
|
||||
"w3.org",
|
||||
"www.w3.org"
|
||||
],
|
||||
"time": "2018-05-23T16:10:11+00:00"
|
||||
},
|
||||
{
|
||||
"name": "nesbot/carbon",
|
||||
"version": "2.31.0",
|
||||
"version": "2.32.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/briannesbitt/Carbon.git",
|
||||
"reference": "bbc0ab53f41a4c6f223c18efcdbd9bc725eb5d2d"
|
||||
"reference": "f10e22cf546704fab1db4ad4b9dedbc5c797a0dc"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/bbc0ab53f41a4c6f223c18efcdbd9bc725eb5d2d",
|
||||
"reference": "bbc0ab53f41a4c6f223c18efcdbd9bc725eb5d2d",
|
||||
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/f10e22cf546704fab1db4ad4b9dedbc5c797a0dc",
|
||||
"reference": "f10e22cf546704fab1db4ad4b9dedbc5c797a0dc",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -878,6 +824,7 @@
|
||||
"symfony/translation": "^3.4 || ^4.0 || ^5.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"doctrine/orm": "^2.7",
|
||||
"friendsofphp/php-cs-fixer": "^2.14 || ^3.0",
|
||||
"kylekatarnls/multi-tester": "^1.1",
|
||||
"phpmd/phpmd": "^2.8",
|
||||
@@ -926,7 +873,7 @@
|
||||
"datetime",
|
||||
"time"
|
||||
],
|
||||
"time": "2020-03-01T11:11:58+00:00"
|
||||
"time": "2020-03-31T13:43:19+00:00"
|
||||
},
|
||||
{
|
||||
"name": "nikic/fast-route",
|
||||
@@ -976,16 +923,16 @@
|
||||
},
|
||||
{
|
||||
"name": "nikic/php-parser",
|
||||
"version": "v4.3.0",
|
||||
"version": "v4.4.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/nikic/PHP-Parser.git",
|
||||
"reference": "9a9981c347c5c49d6dfe5cf826bb882b824080dc"
|
||||
"reference": "bd43ec7152eaaab3bd8c6d0aa95ceeb1df8ee120"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/9a9981c347c5c49d6dfe5cf826bb882b824080dc",
|
||||
"reference": "9a9981c347c5c49d6dfe5cf826bb882b824080dc",
|
||||
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/bd43ec7152eaaab3bd8c6d0aa95ceeb1df8ee120",
|
||||
"reference": "bd43ec7152eaaab3bd8c6d0aa95ceeb1df8ee120",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1024,7 +971,7 @@
|
||||
"parser",
|
||||
"php"
|
||||
],
|
||||
"time": "2019-11-08T13:50:10+00:00"
|
||||
"time": "2020-04-10T16:34:50+00:00"
|
||||
},
|
||||
{
|
||||
"name": "philo/laravel-blade",
|
||||
@@ -1112,22 +1059,22 @@
|
||||
},
|
||||
{
|
||||
"name": "php-di/php-di",
|
||||
"version": "6.0.11",
|
||||
"version": "6.1.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/PHP-DI/PHP-DI.git",
|
||||
"reference": "9bdcc2f41f5fb700ddd01bc4fa8d5bd7b3f94620"
|
||||
"reference": "69238bd49acc0eb6a967029311eeadc3f7c5d538"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/PHP-DI/PHP-DI/zipball/9bdcc2f41f5fb700ddd01bc4fa8d5bd7b3f94620",
|
||||
"reference": "9bdcc2f41f5fb700ddd01bc4fa8d5bd7b3f94620",
|
||||
"url": "https://api.github.com/repos/PHP-DI/PHP-DI/zipball/69238bd49acc0eb6a967029311eeadc3f7c5d538",
|
||||
"reference": "69238bd49acc0eb6a967029311eeadc3f7c5d538",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"jeremeamia/superclosure": "^2.0",
|
||||
"nikic/php-parser": "^2.0|^3.0|^4.0",
|
||||
"php": ">=7.0.0",
|
||||
"php": ">=7.2.0",
|
||||
"php-di/invoker": "^2.0",
|
||||
"php-di/phpdoc-reader": "^2.0.1",
|
||||
"psr/container": "^1.0"
|
||||
@@ -1138,10 +1085,10 @@
|
||||
"require-dev": {
|
||||
"doctrine/annotations": "~1.2",
|
||||
"friendsofphp/php-cs-fixer": "^2.4",
|
||||
"mnapoli/phpunit-easymock": "~1.0",
|
||||
"mnapoli/phpunit-easymock": "^1.2",
|
||||
"ocramius/proxy-manager": "~2.0.2",
|
||||
"phpstan/phpstan": "^0.9.2",
|
||||
"phpunit/phpunit": "~6.4"
|
||||
"phpstan/phpstan": "^0.12",
|
||||
"phpunit/phpunit": "^8.5"
|
||||
},
|
||||
"suggest": {
|
||||
"doctrine/annotations": "Install it if you want to use annotations (version ~1.2)",
|
||||
@@ -1171,7 +1118,17 @@
|
||||
"ioc",
|
||||
"psr11"
|
||||
],
|
||||
"time": "2019-12-12T07:58:02+00:00"
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://github.com/mnapoli",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/php-di/php-di",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2020-04-06T09:54:49+00:00"
|
||||
},
|
||||
{
|
||||
"name": "php-di/phpdoc-reader",
|
||||
@@ -1469,16 +1426,16 @@
|
||||
},
|
||||
{
|
||||
"name": "psr/log",
|
||||
"version": "1.1.2",
|
||||
"version": "1.1.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/php-fig/log.git",
|
||||
"reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801"
|
||||
"reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801",
|
||||
"reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801",
|
||||
"url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
|
||||
"reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1512,7 +1469,7 @@
|
||||
"psr",
|
||||
"psr-3"
|
||||
],
|
||||
"time": "2019-11-01T11:05:21+00:00"
|
||||
"time": "2020-03-23T09:12:05+00:00"
|
||||
},
|
||||
{
|
||||
"name": "psr/simple-cache",
|
||||
@@ -1804,16 +1761,16 @@
|
||||
},
|
||||
{
|
||||
"name": "slim/slim",
|
||||
"version": "4.4.0",
|
||||
"version": "4.5.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/slimphp/Slim.git",
|
||||
"reference": "207acac048652a35d4762a737d59e317aedc02df"
|
||||
"reference": "5613cbb521081ed676d5d7eb3e44f2b80a818c24"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/slimphp/Slim/zipball/207acac048652a35d4762a737d59e317aedc02df",
|
||||
"reference": "207acac048652a35d4762a737d59e317aedc02df",
|
||||
"url": "https://api.github.com/repos/slimphp/Slim/zipball/5613cbb521081ed676d5d7eb3e44f2b80a818c24",
|
||||
"reference": "5613cbb521081ed676d5d7eb3e44f2b80a818c24",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1824,7 +1781,8 @@
|
||||
"psr/http-factory": "^1.0",
|
||||
"psr/http-message": "^1.0",
|
||||
"psr/http-server-handler": "^1.0",
|
||||
"psr/http-server-middleware": "^1.0"
|
||||
"psr/http-server-middleware": "^1.0",
|
||||
"psr/log": "^1.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"adriansuter/php-autoload-override": "^1.0",
|
||||
@@ -1837,8 +1795,8 @@
|
||||
"phpspec/prophecy": "^1.10",
|
||||
"phpstan/phpstan": "^0.11.5",
|
||||
"phpunit/phpunit": "^8.5",
|
||||
"slim/http": "^0.7",
|
||||
"slim/psr7": "^0.3",
|
||||
"slim/http": "^1.0",
|
||||
"slim/psr7": "^1.0",
|
||||
"squizlabs/php_codesniffer": "^3.5"
|
||||
},
|
||||
"suggest": {
|
||||
@@ -1892,20 +1850,20 @@
|
||||
"micro",
|
||||
"router"
|
||||
],
|
||||
"time": "2020-01-05T03:51:47+00:00"
|
||||
"time": "2020-04-14T20:49:48+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/debug",
|
||||
"version": "v4.4.5",
|
||||
"version": "v4.4.7",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/debug.git",
|
||||
"reference": "a980d87a659648980d89193fd8b7a7ca89d97d21"
|
||||
"reference": "346636d2cae417992ecfd761979b2ab98b339a45"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/debug/zipball/a980d87a659648980d89193fd8b7a7ca89d97d21",
|
||||
"reference": "a980d87a659648980d89193fd8b7a7ca89d97d21",
|
||||
"url": "https://api.github.com/repos/symfony/debug/zipball/346636d2cae417992ecfd761979b2ab98b339a45",
|
||||
"reference": "346636d2cae417992ecfd761979b2ab98b339a45",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1948,20 +1906,34 @@
|
||||
],
|
||||
"description": "Symfony Debug Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2020-02-23T14:41:43+00:00"
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://symfony.com/sponsor",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/fabpot",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2020-03-27T16:54:36+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/finder",
|
||||
"version": "v4.4.5",
|
||||
"version": "v4.4.7",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/finder.git",
|
||||
"reference": "ea69c129aed9fdeca781d4b77eb20b62cf5d5357"
|
||||
"reference": "5729f943f9854c5781984ed4907bbb817735776b"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/finder/zipball/ea69c129aed9fdeca781d4b77eb20b62cf5d5357",
|
||||
"reference": "ea69c129aed9fdeca781d4b77eb20b62cf5d5357",
|
||||
"url": "https://api.github.com/repos/symfony/finder/zipball/5729f943f9854c5781984ed4907bbb817735776b",
|
||||
"reference": "5729f943f9854c5781984ed4907bbb817735776b",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1997,20 +1969,34 @@
|
||||
],
|
||||
"description": "Symfony Finder Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2020-02-14T07:42:58+00:00"
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://symfony.com/sponsor",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/fabpot",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2020-03-27T16:54:36+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-mbstring",
|
||||
"version": "v1.14.0",
|
||||
"version": "v1.15.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
||||
"reference": "34094cfa9abe1f0f14f48f490772db7a775559f2"
|
||||
"reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/34094cfa9abe1f0f14f48f490772db7a775559f2",
|
||||
"reference": "34094cfa9abe1f0f14f48f490772db7a775559f2",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/81ffd3a9c6d707be22e3012b827de1c9775fc5ac",
|
||||
"reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -2022,7 +2008,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.14-dev"
|
||||
"dev-master": "1.15-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -2056,20 +2042,34 @@
|
||||
"portable",
|
||||
"shim"
|
||||
],
|
||||
"time": "2020-01-13T11:15:53+00:00"
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://symfony.com/sponsor",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/fabpot",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2020-03-09T19:04:49+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-php56",
|
||||
"version": "v1.14.0",
|
||||
"version": "v1.15.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-php56.git",
|
||||
"reference": "16ec91cb06998b609501b55b7177b7d7c02badb3"
|
||||
"reference": "d51ec491c8ddceae7dca8dd6c7e30428f543f37d"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/16ec91cb06998b609501b55b7177b7d7c02badb3",
|
||||
"reference": "16ec91cb06998b609501b55b7177b7d7c02badb3",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/d51ec491c8ddceae7dca8dd6c7e30428f543f37d",
|
||||
"reference": "d51ec491c8ddceae7dca8dd6c7e30428f543f37d",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -2079,7 +2079,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.14-dev"
|
||||
"dev-master": "1.15-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -2112,20 +2112,34 @@
|
||||
"portable",
|
||||
"shim"
|
||||
],
|
||||
"time": "2020-01-13T11:15:53+00:00"
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://symfony.com/sponsor",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/fabpot",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2020-03-09T19:04:49+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-util",
|
||||
"version": "v1.14.0",
|
||||
"version": "v1.15.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-util.git",
|
||||
"reference": "ba3cfcea6d0192cae46c62041f61cbb704b526d3"
|
||||
"reference": "d8e76c104127675d0ea3df3be0f2ae24a8619027"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-util/zipball/ba3cfcea6d0192cae46c62041f61cbb704b526d3",
|
||||
"reference": "ba3cfcea6d0192cae46c62041f61cbb704b526d3",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-util/zipball/d8e76c104127675d0ea3df3be0f2ae24a8619027",
|
||||
"reference": "d8e76c104127675d0ea3df3be0f2ae24a8619027",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -2134,7 +2148,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.14-dev"
|
||||
"dev-master": "1.15-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -2164,20 +2178,34 @@
|
||||
"polyfill",
|
||||
"shim"
|
||||
],
|
||||
"time": "2020-01-13T11:15:53+00:00"
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://symfony.com/sponsor",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/fabpot",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2020-03-02T11:55:35+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/translation",
|
||||
"version": "v5.0.5",
|
||||
"version": "v5.0.7",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/translation.git",
|
||||
"reference": "e9b93f42a1fd6aec6a0872d59ee5c8219a7d584b"
|
||||
"reference": "99b831770e10807dca0979518e2c89edffef5978"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/translation/zipball/e9b93f42a1fd6aec6a0872d59ee5c8219a7d584b",
|
||||
"reference": "e9b93f42a1fd6aec6a0872d59ee5c8219a7d584b",
|
||||
"url": "https://api.github.com/repos/symfony/translation/zipball/99b831770e10807dca0979518e2c89edffef5978",
|
||||
"reference": "99b831770e10807dca0979518e2c89edffef5978",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -2241,7 +2269,7 @@
|
||||
],
|
||||
"description": "Symfony Translation Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2020-02-04T07:41:34+00:00"
|
||||
"time": "2020-03-27T16:56:45+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/translation-contracts",
|
||||
@@ -2299,175 +2327,6 @@
|
||||
"standards"
|
||||
],
|
||||
"time": "2019-11-18T17:27:11+00:00"
|
||||
},
|
||||
{
|
||||
"name": "tuupola/callable-handler",
|
||||
"version": "1.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/tuupola/callable-handler.git",
|
||||
"reference": "8b9d87f88056d4234af317d65612d7b6307a747a"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/tuupola/callable-handler/zipball/8b9d87f88056d4234af317d65612d7b6307a747a",
|
||||
"reference": "8b9d87f88056d4234af317d65612d7b6307a747a",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.1",
|
||||
"psr/http-server-middleware": "^1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"codedungeon/phpunit-result-printer": "^0.4.4",
|
||||
"overtrue/phplint": "^1.0",
|
||||
"phpunit/phpunit": "^6.5",
|
||||
"squizlabs/php_codesniffer": "^3.2",
|
||||
"tuupola/http-factory": "^0.4.0|^1.0",
|
||||
"zendframework/zend-diactoros": "^1.6.0|^2.0"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Tuupola\\Middleware\\": "src"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Mika Tuupola",
|
||||
"email": "tuupola@appelsiini.net",
|
||||
"homepage": "https://appelsiini.net/",
|
||||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"description": "Compatibility layer for PSR-7 double pass and PSR-15 middlewares.",
|
||||
"homepage": "https://github.com/tuupola/callable-handler",
|
||||
"keywords": [
|
||||
"middleware",
|
||||
"psr-15",
|
||||
"psr-7"
|
||||
],
|
||||
"time": "2018-10-12T09:59:35+00:00"
|
||||
},
|
||||
{
|
||||
"name": "tuupola/cors-middleware",
|
||||
"version": "1.1.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/tuupola/cors-middleware.git",
|
||||
"reference": "a043f4f52b902ee8902f95d28aae05013a7180fc"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/tuupola/cors-middleware/zipball/a043f4f52b902ee8902f95d28aae05013a7180fc",
|
||||
"reference": "a043f4f52b902ee8902f95d28aae05013a7180fc",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"neomerx/cors-psr7": "^1.0.4",
|
||||
"php": "^7.1",
|
||||
"psr/http-message": "^1.0.1",
|
||||
"psr/http-server-middleware": "^1.0",
|
||||
"tuupola/callable-handler": "^1.0",
|
||||
"tuupola/http-factory": "^1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"codedungeon/phpunit-result-printer": "^0.23.2",
|
||||
"equip/dispatch": "^2.0",
|
||||
"overtrue/phplint": "^1.0",
|
||||
"phpstan/phpstan": "^0.11.15",
|
||||
"phpunit/phpunit": "^7.4",
|
||||
"squizlabs/php_codesniffer": "^3.3.1",
|
||||
"zendframework/zend-diactoros": "^1.0|^2.0"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Tuupola\\Middleware\\": "src"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Mika Tuupola",
|
||||
"email": "tuupola@appelsiini.net",
|
||||
"homepage": "https://appelsiini.net/",
|
||||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"description": "PSR-7 and PSR-15 CORS middleware",
|
||||
"homepage": "https://github.com/tuupola/cors-middleware",
|
||||
"keywords": [
|
||||
"cors",
|
||||
"middleware",
|
||||
"psr-15",
|
||||
"psr-7"
|
||||
],
|
||||
"time": "2019-10-30T11:18:16+00:00"
|
||||
},
|
||||
{
|
||||
"name": "tuupola/http-factory",
|
||||
"version": "1.1.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/tuupola/http-factory.git",
|
||||
"reference": "5fbde4c65a10d09a85652684a6e569542265a749"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/tuupola/http-factory/zipball/5fbde4c65a10d09a85652684a6e569542265a749",
|
||||
"reference": "5fbde4c65a10d09a85652684a6e569542265a749",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.1",
|
||||
"psr/http-factory": "^1.0"
|
||||
},
|
||||
"conflict": {
|
||||
"nyholm/psr7": "<1.0"
|
||||
},
|
||||
"provide": {
|
||||
"psr/http-factory-implementation": "^1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"http-interop/http-factory-tests": "^0.5.0",
|
||||
"overtrue/phplint": "^1.0",
|
||||
"phpunit/phpunit": "^6.0|^7.0",
|
||||
"squizlabs/php_codesniffer": "^3.0"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Tuupola\\Http\\Factory\\": "src"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Mika Tuupola",
|
||||
"email": "tuupola@appelsiini.net",
|
||||
"homepage": "https://appelsiini.net/",
|
||||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"description": "Lightweight autodiscovering PSR-17 HTTP factories",
|
||||
"homepage": "https://github.com/tuupola/http-factory",
|
||||
"keywords": [
|
||||
"http",
|
||||
"psr-17",
|
||||
"psr-7"
|
||||
],
|
||||
"time": "2019-08-07T07:10:58+00:00"
|
||||
}
|
||||
],
|
||||
"packages-dev": [],
|
||||
@@ -2479,5 +2338,6 @@
|
||||
"platform": {
|
||||
"php": ">=7.2"
|
||||
},
|
||||
"platform-dev": []
|
||||
"platform-dev": [],
|
||||
"plugin-api-version": "1.1.0"
|
||||
}
|
||||
|
@@ -100,6 +100,7 @@ DefaultUserSetting('stock_default_purchase_amount', 0);
|
||||
DefaultUserSetting('stock_default_consume_amount', 1);
|
||||
DefaultUserSetting('scan_mode_consume_enabled', false);
|
||||
DefaultUserSetting('scan_mode_purchase_enabled', false);
|
||||
DefaultUserSetting('show_icon_on_stock_overview_page_when_product_is_on_shopping_list', true);
|
||||
|
||||
# Shopping list settings
|
||||
DefaultUserSetting('shopping_list_to_stock_workflow_auto_submit_when_prefilled', false); // Automatically do the booking using the last price and the amount of the shopping list item, if the product has "Default best before days" set
|
||||
@@ -125,6 +126,9 @@ DefaultUserSetting('auto_reload_on_db_change', true);
|
||||
# Show a clock in the header next to the logo or not
|
||||
DefaultUserSetting('show_clock_in_header', false);
|
||||
|
||||
# Component configuration
|
||||
DefaultUserSetting('quagga2_numofworkers', 4);
|
||||
|
||||
|
||||
# Feature flags
|
||||
# grocy was initially about "stock management for your household", many other things
|
||||
@@ -147,9 +151,11 @@ Setting('FEATURE_FLAG_STOCK_LOCATION_TRACKING', true);
|
||||
Setting('FEATURE_FLAG_STOCK_BEST_BEFORE_DATE_TRACKING', true);
|
||||
Setting('FEATURE_FLAG_STOCK_PRODUCT_OPENED_TRACKING', true);
|
||||
Setting('FEATURE_FLAG_STOCK_PRODUCT_FREEZING', true);
|
||||
Setting('FEATURE_FLAG_STOCK_BEST_BEFORE_DATE_FIELD_NUMBER_PAD', true); // Activate the number pad in best-before-date fields on (supported) mobile browsers
|
||||
Setting('FEATURE_FLAG_SHOPPINGLIST_MULTIPLE_LISTS', true);
|
||||
Setting('FEATURE_FLAG_CHORES_ASSIGNMENTS', true);
|
||||
|
||||
|
||||
# Feature settings
|
||||
Setting('FEATURE_SETTING_STOCK_COUNT_OPENED_PRODUCTS_AGAINST_MINIMUM_STOCK_AMOUNT', true); // When set to false, opened products will not be considered for minimum stock amounts
|
||||
Setting('FEATURE_FLAG_AUTO_TORCH_ON_WITH_CAMERA', true); // Enables the torch automaticaly in every camera barcode scanner.
|
||||
|
@@ -52,7 +52,7 @@ class CalendarApiController extends BaseApiController
|
||||
try
|
||||
{
|
||||
return $this->ApiResponse($response, array(
|
||||
'url' => $this->AppContainer->get('UrlManager')->ConstructUrl('/api/calendar/ical?secret=' . $this->getApiKeyService()->GetOrCreateApiKey(ApiKeyService::API_KEY_TYPE_SPECIAL_PURPOSE_CALENDAR_ICAL))
|
||||
'url' => $this->AppContainer->get('UrlManager')->ConstructUrl('/api/calendar/ical?secret=' . $this->getApiKeyService()->GetOrCreateApiKey(\Grocy\Services\ApiKeyService::API_KEY_TYPE_SPECIAL_PURPOSE_CALENDAR_ICAL))
|
||||
));
|
||||
}
|
||||
catch (\Exception $ex)
|
||||
|
@@ -11,9 +11,27 @@ class GenericEntityApiController extends BaseApiController
|
||||
|
||||
public function GetObjects(\Psr\Http\Message\ServerRequestInterface $request, \Psr\Http\Message\ResponseInterface $response, array $args)
|
||||
{
|
||||
$objects = $this->getDatabase()->{$args['entity']}();
|
||||
$allUserfields = $this->getUserfieldsService()->GetAllValues($args['entity']);
|
||||
|
||||
foreach ($objects as $object)
|
||||
{
|
||||
$userfields = FindAllObjectsInArrayByPropertyValue($allUserfields, 'object_id', $object->id);
|
||||
$userfieldKeyValuePairs = null;
|
||||
if (count($userfields) > 0)
|
||||
{
|
||||
foreach ($userfields as $userfield)
|
||||
{
|
||||
$userfieldKeyValuePairs[$userfield->name] = $userfield->value;
|
||||
}
|
||||
}
|
||||
|
||||
$object->userfields = $userfieldKeyValuePairs;
|
||||
}
|
||||
|
||||
if ($this->IsValidEntity($args['entity']) && !$this->IsEntityWithPreventedListing($args['entity']))
|
||||
{
|
||||
return $this->ApiResponse($response, $this->getDatabase()->{$args['entity']}());
|
||||
return $this->ApiResponse($response, $objects);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -25,7 +43,16 @@ class GenericEntityApiController extends BaseApiController
|
||||
{
|
||||
if ($this->IsValidEntity($args['entity']) && !$this->IsEntityWithPreventedListing($args['entity']))
|
||||
{
|
||||
return $this->ApiResponse($response, $this->getDatabase()->{$args['entity']}($args['objectId']));
|
||||
$userfields = $this->getUserfieldsService()->GetValues($args['entity'], $args['objectId']);
|
||||
if (count($userfields) === 0)
|
||||
{
|
||||
$userfields = null;
|
||||
}
|
||||
|
||||
$object = $this->getDatabase()->{$args['entity']}($args['objectId']);
|
||||
$object['userfields'] = $userfields;
|
||||
|
||||
return $this->ApiResponse($response, $object);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@@ -33,33 +33,53 @@ class RecipesController extends BaseController
|
||||
}
|
||||
}
|
||||
|
||||
$selectedRecipeSubRecipes = $this->getDatabase()->recipes()->where('id IN (SELECT includes_recipe_id FROM recipes_nestings_resolved WHERE recipe_id = :1 AND includes_recipe_id != :1)', $selectedRecipe->id)->orderBy('name')->fetchAll();
|
||||
$selectedRecipeSubRecipesPositions = $this->getDatabase()->recipes_pos_resolved()->where('recipe_id = :1', $selectedRecipe->id)->orderBy('ingredient_group', 'ASC', 'product_group', 'ASC')->fetchAll();
|
||||
|
||||
$includedRecipeIdsAbsolute = array();
|
||||
$includedRecipeIdsAbsolute[] = $selectedRecipe->id;
|
||||
foreach($selectedRecipeSubRecipes as $subRecipe)
|
||||
if ($selectedRecipe)
|
||||
{
|
||||
$includedRecipeIdsAbsolute[] = $subRecipe->id;
|
||||
$selectedRecipeSubRecipes = $this->getDatabase()->recipes()->where('id IN (SELECT includes_recipe_id FROM recipes_nestings_resolved WHERE recipe_id = :1 AND includes_recipe_id != :1)', $selectedRecipe->id)->orderBy('name')->fetchAll();
|
||||
$selectedRecipeSubRecipesPositions = $this->getDatabase()->recipes_pos_resolved()->where('recipe_id = :1', $selectedRecipe->id)->orderBy('ingredient_group', 'ASC', 'product_group', 'ASC')->fetchAll();
|
||||
|
||||
$includedRecipeIdsAbsolute = array();
|
||||
$includedRecipeIdsAbsolute[] = $selectedRecipe->id;
|
||||
foreach($selectedRecipeSubRecipes as $subRecipe)
|
||||
{
|
||||
$includedRecipeIdsAbsolute[] = $subRecipe->id;
|
||||
}
|
||||
|
||||
$renderArray = [
|
||||
'recipes' => $recipes,
|
||||
'recipesResolved' => $recipesResolved,
|
||||
'recipePositionsResolved' => $this->getDatabase()->recipes_pos_resolved()->where('recipe_type', RecipesService::RECIPE_TYPE_NORMAL),
|
||||
'selectedRecipe' => $selectedRecipe,
|
||||
'selectedRecipePositionsResolved' => $selectedRecipePositionsResolved,
|
||||
'products' => $this->getDatabase()->products(),
|
||||
'quantityUnits' => $this->getDatabase()->quantity_units(),
|
||||
'selectedRecipeSubRecipes' => $selectedRecipeSubRecipes,
|
||||
'selectedRecipeSubRecipesPositions' => $selectedRecipeSubRecipesPositions,
|
||||
'includedRecipeIdsAbsolute' => $includedRecipeIdsAbsolute,
|
||||
'selectedRecipeTotalCosts' => FindObjectInArrayByPropertyValue($recipesResolved, 'recipe_id', $selectedRecipe->id)->costs,
|
||||
'selectedRecipeTotalCalories' => FindObjectInArrayByPropertyValue($recipesResolved, 'recipe_id', $selectedRecipe->id)->calories,
|
||||
'userfields' => $this->getUserfieldsService()->GetFields('recipes'),
|
||||
'userfieldValues' => $this->getUserfieldsService()->GetAllValues('recipes'),
|
||||
'quantityUnitConversionsResolved' => $this->getDatabase()->quantity_unit_conversions_resolved()
|
||||
];
|
||||
}
|
||||
else
|
||||
{
|
||||
$renderArray = [
|
||||
'recipes' => $recipes,
|
||||
'recipesResolved' => $recipesResolved,
|
||||
'recipePositionsResolved' => $this->getDatabase()->recipes_pos_resolved()->where('recipe_type', RecipesService::RECIPE_TYPE_NORMAL),
|
||||
'selectedRecipe' => $selectedRecipe,
|
||||
'selectedRecipePositionsResolved' => $selectedRecipePositionsResolved,
|
||||
'products' => $this->getDatabase()->products(),
|
||||
'quantityUnits' => $this->getDatabase()->quantity_units(),
|
||||
'userfields' => $this->getUserfieldsService()->GetFields('recipes'),
|
||||
'userfieldValues' => $this->getUserfieldsService()->GetAllValues('recipes'),
|
||||
'quantityUnitConversionsResolved' => $this->getDatabase()->quantity_unit_conversions_resolved()
|
||||
];
|
||||
}
|
||||
|
||||
return $this->renderPage($response, 'recipes', [
|
||||
'recipes' => $recipes,
|
||||
'recipesResolved' => $recipesResolved,
|
||||
'recipePositionsResolved' => $this->getDatabase()->recipes_pos_resolved()->where('recipe_type', RecipesService::RECIPE_TYPE_NORMAL),
|
||||
'selectedRecipe' => $selectedRecipe,
|
||||
'selectedRecipePositionsResolved' => $selectedRecipePositionsResolved,
|
||||
'products' => $this->getDatabase()->products(),
|
||||
'quantityUnits' => $this->getDatabase()->quantity_units(),
|
||||
'selectedRecipeSubRecipes' => $selectedRecipeSubRecipes,
|
||||
'selectedRecipeSubRecipesPositions' => $selectedRecipeSubRecipesPositions,
|
||||
'includedRecipeIdsAbsolute' => $includedRecipeIdsAbsolute,
|
||||
'selectedRecipeTotalCosts' => FindObjectInArrayByPropertyValue($recipesResolved, 'recipe_id', $selectedRecipe->id)->costs,
|
||||
'selectedRecipeTotalCalories' => FindObjectInArrayByPropertyValue($recipesResolved, 'recipe_id', $selectedRecipe->id)->calories,
|
||||
'userfields' => $this->getUserfieldsService()->GetFields('recipes'),
|
||||
'userfieldValues' => $this->getUserfieldsService()->GetAllValues('recipes'),
|
||||
'quantityUnitConversionsResolved' => $this->getDatabase()->quantity_unit_conversions_resolved()
|
||||
]);
|
||||
return $this->renderPage($response, 'recipes', $renderArray);
|
||||
}
|
||||
|
||||
public function RecipeEditForm(\Psr\Http\Message\ServerRequestInterface $request, \Psr\Http\Message\ResponseInterface $response, array $args)
|
||||
@@ -124,7 +144,7 @@ class RecipesController extends BaseController
|
||||
public function MealPlan(\Psr\Http\Message\ServerRequestInterface $request, \Psr\Http\Message\ResponseInterface $response, array $args)
|
||||
{
|
||||
$recipes = $this->getDatabase()->recipes()->where('type', RecipesService::RECIPE_TYPE_NORMAL)->fetchAll();
|
||||
|
||||
|
||||
$events = array();
|
||||
foreach($this->getDatabase()->meal_plan() as $mealPlanEntry)
|
||||
{
|
||||
|
@@ -82,13 +82,19 @@ class StockApiController extends BaseApiController
|
||||
$locationId = $requestBody['location_id'];
|
||||
}
|
||||
|
||||
$shoppingLocationId = null;
|
||||
if (array_key_exists('shopping_location_id', $requestBody) && is_numeric($requestBody['shopping_location_id']))
|
||||
{
|
||||
$shoppingLocationId = $requestBody['shopping_location_id'];
|
||||
}
|
||||
|
||||
$transactionType = StockService::TRANSACTION_TYPE_PURCHASE;
|
||||
if (array_key_exists('transaction_type', $requestBody) && !empty($requestBody['transactiontype']))
|
||||
{
|
||||
$transactionType = $requestBody['transactiontype'];
|
||||
}
|
||||
|
||||
$bookingId = $this->getStockService()->AddProduct($args['productId'], $requestBody['amount'], $bestBeforeDate, $transactionType, date('Y-m-d'), $price, $locationId);
|
||||
$bookingId = $this->getStockService()->AddProduct($args['productId'], $requestBody['amount'], $bestBeforeDate, $transactionType, date('Y-m-d'), $price, $locationId, $shoppingLocationId);
|
||||
return $this->ApiResponse($response, $this->getDatabase()->stock_log($bookingId));
|
||||
}
|
||||
catch (\Exception $ex)
|
||||
@@ -144,7 +150,13 @@ class StockApiController extends BaseApiController
|
||||
$locationId = $requestBody['location_id'];
|
||||
}
|
||||
|
||||
$bookingId = $this->getStockService()->EditStockEntry($args['entryId'], $requestBody['amount'], $bestBeforeDate, $locationId, $price, $requestBody['open'], $requestBody['purchased_date']);
|
||||
$shoppingLocationId = null;
|
||||
if (array_key_exists('shopping_location_id', $requestBody) && is_numeric($requestBody['shopping_location_id']))
|
||||
{
|
||||
$shoppingLocationId = $requestBody['shopping_location_id'];
|
||||
}
|
||||
|
||||
$bookingId = $this->getStockService()->EditStockEntry($args['entryId'], $requestBody['amount'], $bestBeforeDate, $locationId, $shoppingLocationId, $price, $requestBody['open'], $requestBody['purchased_date']);
|
||||
return $this->ApiResponse($response, $this->getDatabase()->stock_log($bookingId));
|
||||
}
|
||||
catch (\Exception $ex)
|
||||
@@ -312,7 +324,13 @@ class StockApiController extends BaseApiController
|
||||
$price = $requestBody['price'];
|
||||
}
|
||||
|
||||
$bookingId = $this->getStockService()->InventoryProduct($args['productId'], $requestBody['new_amount'], $bestBeforeDate, $locationId, $price);
|
||||
$shoppingLocationId = null;
|
||||
if (array_key_exists('shopping_location_id', $requestBody) && is_numeric($requestBody['shopping_location_id']))
|
||||
{
|
||||
$shoppingLocationId = $requestBody['shopping_location_id'];
|
||||
}
|
||||
|
||||
$bookingId = $this->getStockService()->InventoryProduct($args['productId'], $requestBody['new_amount'], $bestBeforeDate, $locationId, $price, $shoppingLocationId);
|
||||
return $this->ApiResponse($response, $this->getDatabase()->stock_log($bookingId));
|
||||
}
|
||||
catch (\Exception $ex)
|
||||
|
@@ -25,7 +25,8 @@ class StockController extends BaseController
|
||||
'nextXDays' => $nextXDays,
|
||||
'productGroups' => $this->getDatabase()->product_groups()->orderBy('name'),
|
||||
'userfields' => $this->getUserfieldsService()->GetFields('products'),
|
||||
'userfieldValues' => $this->getUserfieldsService()->GetAllValues('products')
|
||||
'userfieldValues' => $this->getUserfieldsService()->GetAllValues('products'),
|
||||
'shoppingListItems' => $this->getDatabase()->shopping_list(),
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -38,6 +39,7 @@ class StockController extends BaseController
|
||||
'products' => $this->getDatabase()->products()->orderBy('name'),
|
||||
'quantityunits' => $this->getDatabase()->quantity_units()->orderBy('name'),
|
||||
'locations' => $this->getDatabase()->locations()->orderBy('name'),
|
||||
'shoppinglocations' => $this->getDatabase()->shopping_locations()->orderBy('name'),
|
||||
'stockEntries' => $this->getDatabase()->stock()->orderBy('product_id'),
|
||||
'currentStockLocations' => $this->getStockService()->GetCurrentStockLocations(),
|
||||
'nextXDays' => $nextXDays,
|
||||
@@ -50,6 +52,7 @@ class StockController extends BaseController
|
||||
{
|
||||
return $this->renderPage($response, 'purchase', [
|
||||
'products' => $this->getDatabase()->products()->orderBy('name'),
|
||||
'shoppinglocations' => $this->getDatabase()->shopping_locations()->orderBy('name'),
|
||||
'locations' => $this->getDatabase()->locations()->orderBy('name')
|
||||
]);
|
||||
}
|
||||
@@ -76,6 +79,7 @@ class StockController extends BaseController
|
||||
{
|
||||
return $this->renderPage($response, 'inventory', [
|
||||
'products' => $this->getDatabase()->products()->orderBy('name'),
|
||||
'shoppinglocations' => $this->getDatabase()->shopping_locations()->orderBy('name'),
|
||||
'locations' => $this->getDatabase()->locations()->orderBy('name')
|
||||
]);
|
||||
}
|
||||
@@ -85,6 +89,7 @@ class StockController extends BaseController
|
||||
return $this->renderPage($response, 'stockentryform', [
|
||||
'stockEntry' => $this->getDatabase()->stock()->where('id', $args['entryId'])->fetch(),
|
||||
'products' => $this->getDatabase()->products()->orderBy('name'),
|
||||
'shoppinglocations' => $this->getDatabase()->shopping_locations()->orderBy('name'),
|
||||
'locations' => $this->getDatabase()->locations()->orderBy('name')
|
||||
]);
|
||||
}
|
||||
@@ -140,6 +145,15 @@ class StockController extends BaseController
|
||||
]);
|
||||
}
|
||||
|
||||
public function ShoppingLocationsList(\Psr\Http\Message\ServerRequestInterface $request, \Psr\Http\Message\ResponseInterface $response, array $args)
|
||||
{
|
||||
return $this->renderPage($response, 'shoppinglocations', [
|
||||
'shoppinglocations' => $this->getDatabase()->shopping_locations()->orderBy('name'),
|
||||
'userfields' => $this->getUserfieldsService()->GetFields('shopping_locations'),
|
||||
'userfieldValues' => $this->getUserfieldsService()->GetAllValues('shopping_locations')
|
||||
]);
|
||||
}
|
||||
|
||||
public function ProductGroupsList(\Psr\Http\Message\ServerRequestInterface $request, \Psr\Http\Message\ResponseInterface $response, array $args)
|
||||
{
|
||||
return $this->renderPage($response, 'productgroups', [
|
||||
@@ -166,6 +180,7 @@ class StockController extends BaseController
|
||||
return $this->renderPage($response, 'productform', [
|
||||
'locations' => $this->getDatabase()->locations()->orderBy('name'),
|
||||
'quantityunits' => $this->getDatabase()->quantity_units()->orderBy('name'),
|
||||
'shoppinglocations' => $this->getDatabase()->shopping_locations()->orderBy('name'),
|
||||
'productgroups' => $this->getDatabase()->product_groups()->orderBy('name'),
|
||||
'userfields' => $this->getUserfieldsService()->GetFields('products'),
|
||||
'products' => $this->getDatabase()->products()->where('parent_product_id IS NULL')->orderBy('name'),
|
||||
@@ -181,6 +196,7 @@ class StockController extends BaseController
|
||||
'product' => $product,
|
||||
'locations' => $this->getDatabase()->locations()->orderBy('name'),
|
||||
'quantityunits' => $this->getDatabase()->quantity_units()->orderBy('name'),
|
||||
'shoppinglocations' => $this->getDatabase()->shopping_locations()->orderBy('name'),
|
||||
'productgroups' => $this->getDatabase()->product_groups()->orderBy('name'),
|
||||
'userfields' => $this->getUserfieldsService()->GetFields('products'),
|
||||
'products' => $this->getDatabase()->products()->where('id != :1 AND parent_product_id IS NULL', $product->id)->orderBy('name'),
|
||||
@@ -210,6 +226,25 @@ class StockController extends BaseController
|
||||
}
|
||||
}
|
||||
|
||||
public function ShoppingLocationEditForm(\Psr\Http\Message\ServerRequestInterface $request, \Psr\Http\Message\ResponseInterface $response, array $args)
|
||||
{
|
||||
if ($args['shoppingLocationId'] == 'new')
|
||||
{
|
||||
return $this->renderPage($response, 'shoppinglocationform', [
|
||||
'mode' => 'create',
|
||||
'userfields' => $this->getUserfieldsService()->GetFields('shopping_locations')
|
||||
]);
|
||||
}
|
||||
else
|
||||
{
|
||||
return $this->renderPage($response, 'shoppinglocationform', [
|
||||
'shoppinglocation' => $this->getDatabase()->shopping_locations($args['shoppingLocationId']),
|
||||
'mode' => 'edit',
|
||||
'userfields' => $this->getUserfieldsService()->GetFields('shopping_locations')
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
public function ProductGroupEditForm(\Psr\Http\Message\ServerRequestInterface $request, \Psr\Http\Message\ResponseInterface $response, array $args)
|
||||
{
|
||||
if ($args['productGroupId'] == 'new')
|
||||
|
@@ -16,6 +16,35 @@ class SystemApiController extends BaseApiController
|
||||
));
|
||||
}
|
||||
|
||||
public function GetConfig(\Psr\Http\Message\ServerRequestInterface $request, \Psr\Http\Message\ResponseInterface $response, array $args)
|
||||
{
|
||||
try
|
||||
{
|
||||
$constants = get_defined_constants();
|
||||
|
||||
// Some GROCY_* constants are not really config settings and therefore should not be exposed
|
||||
unset($constants['GROCY_AUTHENTICATED']);
|
||||
unset($constants['GROCY_DATAPATH']);
|
||||
unset($constants['GROCY_IS_EMBEDDED_INSTALL']);
|
||||
unset($constants['GROCY_USER_ID']);
|
||||
|
||||
$returnArray = array();
|
||||
foreach ($constants as $constant => $value)
|
||||
{
|
||||
if (substr($constant, 0, 6) === 'GROCY_')
|
||||
{
|
||||
$returnArray[substr($constant, 6)] = $value;
|
||||
}
|
||||
}
|
||||
|
||||
return $this->ApiResponse($response, $returnArray);
|
||||
}
|
||||
catch (\Exception $ex)
|
||||
{
|
||||
return $this->GenericErrorResponse($response, $ex->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public function LogMissingLocalization(\Psr\Http\Message\ServerRequestInterface $request, \Psr\Http\Message\ResponseInterface $response, array $args)
|
||||
{
|
||||
if (GROCY_MODE === 'dev')
|
||||
|
@@ -69,6 +69,18 @@ class UsersApiController extends BaseApiController
|
||||
}
|
||||
}
|
||||
|
||||
public function GetUserSettings(\Psr\Http\Message\ServerRequestInterface $request, \Psr\Http\Message\ResponseInterface $response, array $args)
|
||||
{
|
||||
try
|
||||
{
|
||||
return $this->ApiResponse($response, $this->getUsersService()->GetUserSettings(GROCY_USER_ID));
|
||||
}
|
||||
catch (\Exception $ex)
|
||||
{
|
||||
return $this->GenericErrorResponse($response, $ex->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public function GetUserSetting(\Psr\Http\Message\ServerRequestInterface $request, \Psr\Http\Message\ResponseInterface $response, array $args)
|
||||
{
|
||||
try
|
||||
|
1
data/.htaccess
Normal file
1
data/.htaccess
Normal file
@@ -0,0 +1 @@
|
||||
Deny from all
|
@@ -14,7 +14,7 @@ class DemoBarcodeLookupPlugin extends BaseBarcodeLookupPlugin
|
||||
|
||||
/*
|
||||
To try it:
|
||||
Call the API function at /api/stock/external-barcode-lookup/{barcode}
|
||||
Call the API function at /api/stock/barcodes/external-lookup/{barcode}
|
||||
|
||||
When you also add ?add=true as a query parameter to the API call,
|
||||
on a successful lookup the product is added to the database and in the output
|
||||
|
@@ -115,6 +115,37 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"/system/config": {
|
||||
"get": {
|
||||
"summary": "Returns all config settings",
|
||||
"tags": [
|
||||
"System"
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Key/value pairs of config settings",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"description": "Key/value pairs of config settings"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "The operation was not successful",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/GenericErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/system/log-missing-localization": {
|
||||
"post": {
|
||||
"summary": "Logs a missing localization string",
|
||||
@@ -586,12 +617,12 @@
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "An entity object",
|
||||
"description": "Key/value pairs of userfields",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"description": "Just key/value pairs of userfields"
|
||||
"description": "Key/value pairs of userfields"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -639,7 +670,7 @@
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"description": "Just key/value pairs of userfields"
|
||||
"description": "Key/value pairs of userfields"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -978,9 +1009,40 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"/user/settings": {
|
||||
"get": {
|
||||
"summary": "Returns all settings of the currently logged in user",
|
||||
"tags": [
|
||||
"User settings"
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Key/value pairs of user settings",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"description": "Key/value pairs of user settings"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "The operation was not successful",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/GenericErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/user/settings/{settingKey}": {
|
||||
"get": {
|
||||
"summary": "Gets the given setting of the currently logged in user",
|
||||
"summary": "Returns the given setting of the currently logged in user",
|
||||
"tags": [
|
||||
"User settings"
|
||||
],
|
||||
@@ -1172,6 +1234,11 @@
|
||||
"format": "integer",
|
||||
"description": "If omitted, the default location of the product is used"
|
||||
},
|
||||
"shopping_location_id": {
|
||||
"type": "number",
|
||||
"format": "integer",
|
||||
"description": "If omitted, no store will be affected"
|
||||
},
|
||||
"purchased_date": {
|
||||
"type": "string",
|
||||
"format": "date",
|
||||
@@ -1478,6 +1545,11 @@
|
||||
"type": "number",
|
||||
"format": "integer",
|
||||
"description": "If omitted, the default location of the product is used"
|
||||
},
|
||||
"shopping_location_id": {
|
||||
"type": "number",
|
||||
"format": "integer",
|
||||
"description": "If omitted, no store will be affected"
|
||||
}
|
||||
},
|
||||
"example": {
|
||||
@@ -1706,6 +1778,11 @@
|
||||
"format": "date",
|
||||
"description": "The best before date which applies to added products"
|
||||
},
|
||||
"shopping_location_id": {
|
||||
"type": "number",
|
||||
"format": "integer",
|
||||
"description": "If omitted, no store will be affected"
|
||||
},
|
||||
"location_id": {
|
||||
"type": "number",
|
||||
"format": "integer",
|
||||
@@ -3303,6 +3380,7 @@
|
||||
"quantity_unit_conversions",
|
||||
"shopping_list",
|
||||
"shopping_lists",
|
||||
"shopping_locations",
|
||||
"recipes",
|
||||
"recipes_pos",
|
||||
"recipes_nestings",
|
||||
@@ -3328,6 +3406,7 @@
|
||||
"quantity_unit_conversions",
|
||||
"shopping_list",
|
||||
"shopping_lists",
|
||||
"shopping_locations",
|
||||
"recipes",
|
||||
"recipes_pos",
|
||||
"recipes_nestings",
|
||||
@@ -3418,6 +3497,13 @@
|
||||
"row_created_timestamp": {
|
||||
"type": "string",
|
||||
"format": "date-time"
|
||||
},
|
||||
"shopping_location_id": {
|
||||
"type": "integer"
|
||||
},
|
||||
"userfields": {
|
||||
"type": "object",
|
||||
"description": "Key/value pairs of userfields"
|
||||
}
|
||||
},
|
||||
"example": {
|
||||
@@ -3438,7 +3524,9 @@
|
||||
"allow_partial_units_in_stock": "0",
|
||||
"enable_tare_weight_handling": "0",
|
||||
"tare_weight": "0.0",
|
||||
"not_check_stock_fulfillment_for_recipes": "0"
|
||||
"not_check_stock_fulfillment_for_recipes": "0",
|
||||
"shopping_location_id": null,
|
||||
"userfields": null
|
||||
}
|
||||
},
|
||||
"QuantityUnit": {
|
||||
@@ -3462,6 +3550,10 @@
|
||||
},
|
||||
"plural_forms": {
|
||||
"type": "string"
|
||||
},
|
||||
"userfields": {
|
||||
"type": "object",
|
||||
"description": "Key/value pairs of userfields"
|
||||
}
|
||||
},
|
||||
"example": {
|
||||
@@ -3470,7 +3562,8 @@
|
||||
"description": null,
|
||||
"row_created_timestamp": "2019-05-02 20:12:25",
|
||||
"name_plural": "Pieces",
|
||||
"plural_forms": null
|
||||
"plural_forms": null,
|
||||
"userfields": null
|
||||
}
|
||||
},
|
||||
"Location": {
|
||||
@@ -3488,24 +3581,61 @@
|
||||
"row_created_timestamp": {
|
||||
"type": "string",
|
||||
"format": "date-time"
|
||||
},
|
||||
"userfields": {
|
||||
"type": "object",
|
||||
"description": "Key/value pairs of userfields"
|
||||
}
|
||||
},
|
||||
"example": {
|
||||
"id": "2",
|
||||
"name": "0",
|
||||
"description": null,
|
||||
"row_created_timestamp": "2019-05-02 20:12:25"
|
||||
"row_created_timestamp": "2019-05-02 20:12:25",
|
||||
"userfields": null
|
||||
}
|
||||
},
|
||||
"ShoppingLocation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "integer"
|
||||
},
|
||||
"name": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": {
|
||||
"type": "string"
|
||||
},
|
||||
"row_created_timestamp": {
|
||||
"type": "string",
|
||||
"format": "date-time"
|
||||
},
|
||||
"userfields": {
|
||||
"type": "object",
|
||||
"description": "Key/value pairs of userfields"
|
||||
}
|
||||
},
|
||||
"example": {
|
||||
"id": "2",
|
||||
"name": "0",
|
||||
"description": null,
|
||||
"row_created_timestamp": "2019-05-02 20:12:25",
|
||||
"userfields": null
|
||||
}
|
||||
},
|
||||
"StockLocation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "integer"
|
||||
},
|
||||
"type": "integer"
|
||||
},
|
||||
"product_id": {
|
||||
"type": "integer"
|
||||
},
|
||||
"amount": {
|
||||
"type": "integer"
|
||||
},
|
||||
"location_id": {
|
||||
"type": "integer"
|
||||
},
|
||||
@@ -3519,6 +3649,7 @@
|
||||
"example": {
|
||||
"id": "1",
|
||||
"product_id": "3",
|
||||
"amount": "2",
|
||||
"location_id": "1",
|
||||
"name": "Fridge"
|
||||
}
|
||||
@@ -3535,6 +3666,9 @@
|
||||
"location_id": {
|
||||
"type": "integer"
|
||||
},
|
||||
"shopping_location_id": {
|
||||
"type": "integer"
|
||||
},
|
||||
"amount": {
|
||||
"type": "number"
|
||||
},
|
||||
@@ -3576,7 +3710,8 @@
|
||||
"open": "0",
|
||||
"opened_date": null,
|
||||
"row_created_timestamp": "2019-05-03 18:24:04",
|
||||
"location_id": "4"
|
||||
"location_id": "4",
|
||||
"shopping_location_id": null
|
||||
}
|
||||
},
|
||||
"RecipeFulfillmentResponse": {
|
||||
@@ -3641,6 +3776,9 @@
|
||||
"type": "number",
|
||||
"format": "number"
|
||||
},
|
||||
"last_shopping_location_id": {
|
||||
"type": "integer"
|
||||
},
|
||||
"location": {
|
||||
"$ref": "#/components/schemas/Location"
|
||||
},
|
||||
@@ -3672,7 +3810,8 @@
|
||||
"allow_partial_units_in_stock": "0",
|
||||
"enable_tare_weight_handling": "0",
|
||||
"tare_weight": "0.0",
|
||||
"not_check_stock_fulfillment_for_recipes": "0"
|
||||
"not_check_stock_fulfillment_for_recipes": "0",
|
||||
"last_shopping_location_id": null
|
||||
},
|
||||
"last_purchased": null,
|
||||
"last_used": null,
|
||||
@@ -3695,6 +3834,7 @@
|
||||
"plural_forms": null
|
||||
},
|
||||
"last_price": null,
|
||||
"last_shopping_location_id": null,
|
||||
"next_best_before_date": "2019-07-07",
|
||||
"location": {
|
||||
"id": "4",
|
||||
@@ -3716,6 +3856,9 @@
|
||||
"price": {
|
||||
"type": "number",
|
||||
"format": "number"
|
||||
},
|
||||
"shopping_location": {
|
||||
"$ref": "#/components/schemas/ShoppingLocation"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -3946,6 +4089,10 @@
|
||||
"row_created_timestamp": {
|
||||
"type": "string",
|
||||
"format": "date-time"
|
||||
},
|
||||
"userfields": {
|
||||
"type": "object",
|
||||
"description": "Key/value pairs of userfields"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -3972,6 +4119,10 @@
|
||||
"row_created_timestamp": {
|
||||
"type": "string",
|
||||
"format": "date-time"
|
||||
},
|
||||
"userfields": {
|
||||
"type": "object",
|
||||
"description": "Key/value pairs of userfields"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -4046,6 +4197,10 @@
|
||||
"row_created_timestamp": {
|
||||
"type": "string",
|
||||
"format": "date-time"
|
||||
},
|
||||
"userfields": {
|
||||
"type": "object",
|
||||
"description": "Key/value pairs of userfields"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -4253,6 +4408,10 @@
|
||||
"row_created_timestamp": {
|
||||
"type": "string",
|
||||
"format": "date-time"
|
||||
},
|
||||
"userfields": {
|
||||
"type": "object",
|
||||
"description": "Key/value pairs of userfields"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
62
helpers/PrerequisiteChecker.php
Normal file
62
helpers/PrerequisiteChecker.php
Normal file
@@ -0,0 +1,62 @@
|
||||
<?php
|
||||
|
||||
class ERequirementNotMet extends Exception { }
|
||||
|
||||
const REQUIRED_PHP_EXTENSIONS = array('fileinfo', 'pdo_sqlite', 'gd');
|
||||
|
||||
class PrerequisiteChecker
|
||||
{
|
||||
public function checkRequirements()
|
||||
{
|
||||
self::checkForConfigFile();
|
||||
self::checkForConfigDistFile();
|
||||
self::checkForComposer();
|
||||
self::checkForYarn();
|
||||
self::checkForPhpExtensions();
|
||||
}
|
||||
|
||||
|
||||
private function checkForConfigFile()
|
||||
{
|
||||
if (!file_exists(__DIR__ . '/../data/config.php'))
|
||||
{
|
||||
throw new ERequirementNotMet('/data/config.php not found. Have you copied config-dist.php to the data directory and renamed it to config.php?');
|
||||
}
|
||||
}
|
||||
|
||||
private function checkForConfigDistFile()
|
||||
{
|
||||
if (!file_exists(__DIR__ . '/../config-dist.php'))
|
||||
{
|
||||
throw new ERequirementNotMet('config-dist.php not found. Please do not remove this file.');
|
||||
}
|
||||
}
|
||||
|
||||
private function checkForComposer()
|
||||
{
|
||||
if (!file_exists(__DIR__ . '/../vendor/autoload.php'))
|
||||
{
|
||||
throw new ERequirementNotMet('/vendor/autoload.php not found. Have you run Composer?');
|
||||
}
|
||||
}
|
||||
|
||||
private function checkForYarn()
|
||||
{
|
||||
if (!file_exists(__DIR__ . '/../public/node_modules'))
|
||||
{
|
||||
throw new ERequirementNotMet('/public/node_modules not found. Have you run Yarn?');
|
||||
}
|
||||
}
|
||||
|
||||
private function checkForPhpExtensions()
|
||||
{
|
||||
$loadedExtensions = get_loaded_extensions();
|
||||
foreach (REQUIRED_PHP_EXTENSIONS as $extension)
|
||||
{
|
||||
if (!in_array($extension, $loadedExtensions))
|
||||
{
|
||||
throw new ERequirementNotMet("PHP module '{$extension}' not installed, but required.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -138,6 +138,20 @@ function BoolToString(bool $bool)
|
||||
return $bool ? 'true' : 'false';
|
||||
}
|
||||
|
||||
function ExternalSettingValue(string $value)
|
||||
{
|
||||
$tvalue = rtrim($value, "\r\n");
|
||||
$lvalue = strtolower($tvalue);
|
||||
if ($lvalue === "true"){
|
||||
return true;
|
||||
}
|
||||
elseif ($lvalue === "false")
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return $tvalue;
|
||||
}
|
||||
|
||||
function Setting(string $name, $value)
|
||||
{
|
||||
if (!defined('GROCY_' . $name))
|
||||
@@ -146,22 +160,11 @@ function Setting(string $name, $value)
|
||||
$settingOverrideFile = GROCY_DATAPATH . '/settingoverrides/' . $name . '.txt';
|
||||
if (file_exists($settingOverrideFile))
|
||||
{
|
||||
define('GROCY_' . $name, file_get_contents($settingOverrideFile));
|
||||
define('GROCY_' . $name, ExternalSettingValue(file_get_contents($settingOverrideFile)));
|
||||
}
|
||||
elseif (getenv('GROCY_' . $name) !== false) // An environment variable with the same name and prefix GROCY_ overwrites the given setting
|
||||
{
|
||||
if (strtolower(getenv('GROCY_' . $name)) === "true")
|
||||
{
|
||||
define('GROCY_' . $name, true);
|
||||
}
|
||||
elseif (strtolower(getenv('GROCY_' . $name)) === "false")
|
||||
{
|
||||
define('GROCY_' . $name, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
define('GROCY_' . $name, getenv('GROCY_' . $name));
|
||||
}
|
||||
define('GROCY_' . $name, ExternalSettingValue(getenv('GROCY_'. $name)));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@@ -367,3 +367,17 @@ msgstr ""
|
||||
|
||||
msgid "Portuguese (Portugal)"
|
||||
msgstr ""
|
||||
|
||||
# Use a in your country well known supermarket name
|
||||
msgid "DemoSupermarket1"
|
||||
msgstr ""
|
||||
|
||||
# Use a in your country well known supermarket name
|
||||
msgid "DemoSupermarket2"
|
||||
msgstr ""
|
||||
|
||||
msgid "Japanese"
|
||||
msgstr ""
|
||||
|
||||
msgid "Chinese (Taiwan)"
|
||||
msgstr ""
|
||||
|
@@ -97,6 +97,9 @@ msgstr "Sledování baterií"
|
||||
msgid "Locations"
|
||||
msgstr "Umístění"
|
||||
|
||||
msgid "Stores"
|
||||
msgstr ""
|
||||
|
||||
msgid "Quantity units"
|
||||
msgstr "Měrné jednotky"
|
||||
|
||||
@@ -234,6 +237,9 @@ msgstr "Faktor množství jednotek zásoby při nákupu jednoho kusu produktu"
|
||||
msgid "Create location"
|
||||
msgstr "Vytvořit umístění"
|
||||
|
||||
msgid "Create store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create quantity unit"
|
||||
msgstr "Vytvořit měrnou jednotku"
|
||||
|
||||
@@ -267,6 +273,9 @@ msgstr "Upravit produkt"
|
||||
msgid "Edit location"
|
||||
msgstr "Upravit umístění"
|
||||
|
||||
msgid "Edit store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Record data"
|
||||
msgstr "Zaznamenat data"
|
||||
|
||||
@@ -343,6 +352,9 @@ msgstr "Opravdu chcete smazat produkt \"%s\"?"
|
||||
msgid "Are you sure to delete location \"%s\"?"
|
||||
msgstr "Opravdu chcete smazat umístění \"%s\"?"
|
||||
|
||||
msgid "Are you sure to delete store \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manage API keys"
|
||||
msgstr "Spravovat API klíče"
|
||||
|
||||
@@ -1122,6 +1134,9 @@ msgstr ""
|
||||
msgid "You have to select a location"
|
||||
msgstr "Musí být vybráno umístění"
|
||||
|
||||
msgid "You have to select a store"
|
||||
msgstr ""
|
||||
|
||||
msgid "List"
|
||||
msgstr "Seznam"
|
||||
|
||||
@@ -1155,8 +1170,8 @@ msgstr "Systémové informace"
|
||||
msgid "Changelog"
|
||||
msgstr "Seznam změn"
|
||||
|
||||
msgid "will be multiplied a factor of %1$s to get %2$s"
|
||||
msgstr "bude vynásobené faktorem %1$s aby se získalo%2$s"
|
||||
msgid "will be multiplied by a factor of %1$s to get %2$s"
|
||||
msgstr ""
|
||||
|
||||
msgid "The given date is earlier than today, are you sure?"
|
||||
msgstr "Zadaná datum je v minulosti, jste si jistí?"
|
||||
@@ -1306,7 +1321,7 @@ msgid "The amount cannot be lower than %1$s or equal %2$s"
|
||||
msgstr "Počet nemůže být menší než %1$s nebo rovno %2$s"
|
||||
|
||||
msgid "Not enough in stock, but already on the shopping list"
|
||||
msgstr ""
|
||||
msgstr "Nedostatečná zásoba, ale již na nákupním seznamu"
|
||||
|
||||
msgid "Not enough in stock"
|
||||
msgstr "Nedostatečná zásoba"
|
||||
@@ -1461,7 +1476,7 @@ msgid "Create QU conversion"
|
||||
msgstr "Vytvořit převod měrné jednotky"
|
||||
|
||||
msgid "Default for QU"
|
||||
msgstr ""
|
||||
msgstr "Výchozí pro Měrné Jednotky"
|
||||
|
||||
msgid "Quantity unit from"
|
||||
msgstr "Měrná jednotka z"
|
||||
@@ -1498,10 +1513,10 @@ msgid "Edit QU conversion"
|
||||
msgstr "Upravit převod měrné jednotky"
|
||||
|
||||
msgid "An assignment type is required"
|
||||
msgstr ""
|
||||
msgstr "Typ přiřazení je vyžadován"
|
||||
|
||||
msgid "Assignment type"
|
||||
msgstr ""
|
||||
msgstr "Typ přiřazení"
|
||||
|
||||
msgid ""
|
||||
"This means the next execution of this chore is scheduled 1 day after the "
|
||||
@@ -1550,7 +1565,7 @@ msgid "Assign to"
|
||||
msgstr "Přiřadit k"
|
||||
|
||||
msgid "This assignment type requires that at least one is assigned"
|
||||
msgstr ""
|
||||
msgstr "Typ přiřazení vyžaduje nejméně jednoho přiřazeného"
|
||||
|
||||
msgid "%s chore is assigned to me"
|
||||
msgid_plural "%s chores are assigned to me"
|
||||
@@ -1935,3 +1950,33 @@ msgstr "Karta receptu"
|
||||
|
||||
msgid "Group ingredients by their product group"
|
||||
msgstr "Seskupit suroviny podle skupiny produktů"
|
||||
|
||||
msgid "Unknown store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Transaction successfully undone"
|
||||
msgstr ""
|
||||
|
||||
msgid "Default store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Consume this stock entry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Mark this stock entry as open"
|
||||
msgstr ""
|
||||
|
||||
msgid "Mark this item as done"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit this item"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this item"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show an icon if the product is already on the shopping list"
|
||||
msgstr ""
|
||||
|
@@ -352,3 +352,17 @@ msgstr ""
|
||||
|
||||
msgid "Portuguese (Portugal)"
|
||||
msgstr ""
|
||||
|
||||
# Use a in your country well known supermarket name
|
||||
msgid "DemoSupermarket1"
|
||||
msgstr ""
|
||||
|
||||
# Use a in your country well known supermarket name
|
||||
msgid "DemoSupermarket2"
|
||||
msgstr ""
|
||||
|
||||
msgid "Japanese"
|
||||
msgstr ""
|
||||
|
||||
msgid "Chinese (Taiwan)"
|
||||
msgstr ""
|
||||
|
@@ -86,6 +86,9 @@ msgstr "Batteriregistrering"
|
||||
msgid "Locations"
|
||||
msgstr "Steder"
|
||||
|
||||
msgid "Stores"
|
||||
msgstr ""
|
||||
|
||||
msgid "Quantity units"
|
||||
msgstr "Mængdeenheder"
|
||||
|
||||
@@ -222,6 +225,9 @@ msgstr "Konverteringfaktor ved køb til beholdningstypen"
|
||||
msgid "Create location"
|
||||
msgstr "Opret placering"
|
||||
|
||||
msgid "Create store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create quantity unit"
|
||||
msgstr "Opret mængdeenhed"
|
||||
|
||||
@@ -255,6 +261,9 @@ msgstr "Rediger vare"
|
||||
msgid "Edit location"
|
||||
msgstr "Rediger placering"
|
||||
|
||||
msgid "Edit store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Record data"
|
||||
msgstr "Optag data"
|
||||
|
||||
@@ -331,6 +340,9 @@ msgstr "Er du sikker på du vil slette varen \"%s\"?"
|
||||
msgid "Are you sure to delete location \"%s\"?"
|
||||
msgstr "Er du sikker på du vil slette placeringen \"%s\"?"
|
||||
|
||||
msgid "Are you sure to delete store \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manage API keys"
|
||||
msgstr "Administrer API nøgler"
|
||||
|
||||
@@ -1102,6 +1114,9 @@ msgstr ""
|
||||
msgid "You have to select a location"
|
||||
msgstr "Du skal vælge en placering"
|
||||
|
||||
msgid "You have to select a store"
|
||||
msgstr ""
|
||||
|
||||
msgid "List"
|
||||
msgstr "Liste"
|
||||
|
||||
@@ -1135,8 +1150,8 @@ msgstr "Systeminformation"
|
||||
msgid "Changelog"
|
||||
msgstr "Ændringslog"
|
||||
|
||||
msgid "will be multiplied a factor of %1$s to get %2$s"
|
||||
msgstr "vil blive ganget med en faktor af %1$s for at få %2$s"
|
||||
msgid "will be multiplied by a factor of %1$s to get %2$s"
|
||||
msgstr ""
|
||||
|
||||
msgid "The given date is earlier than today, are you sure?"
|
||||
msgstr "Den angivne dato er før i dag, er du sikker?"
|
||||
@@ -1915,3 +1930,33 @@ msgstr ""
|
||||
|
||||
msgid "Group ingredients by their product group"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unknown store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Transaction successfully undone"
|
||||
msgstr ""
|
||||
|
||||
msgid "Default store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Consume this stock entry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Mark this stock entry as open"
|
||||
msgstr ""
|
||||
|
||||
msgid "Mark this item as done"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit this item"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this item"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show an icon if the product is already on the shopping list"
|
||||
msgstr ""
|
||||
|
@@ -349,3 +349,17 @@ msgstr "Tschechisch"
|
||||
|
||||
msgid "Portuguese (Portugal)"
|
||||
msgstr "Portugiesisch (Portugal)"
|
||||
|
||||
# Use a in your country well known supermarket name
|
||||
msgid "DemoSupermarket1"
|
||||
msgstr "Aldi"
|
||||
|
||||
# Use a in your country well known supermarket name
|
||||
msgid "DemoSupermarket2"
|
||||
msgstr "Rewe"
|
||||
|
||||
msgid "Japanese"
|
||||
msgstr "Japanisch"
|
||||
|
||||
msgid "Chinese (Taiwan)"
|
||||
msgstr "Chinesisch (Taiwan)"
|
||||
|
@@ -1,5 +1,5 @@
|
||||
# Translators:
|
||||
# H T <github@fvbor.de>, 2020
|
||||
# Hagen Tasche <github@fvbor.de>, 2020
|
||||
# Bernd Bestel <bernd@berrnd.de>, 2020
|
||||
#
|
||||
msgid ""
|
||||
@@ -84,6 +84,9 @@ msgstr "Batterie-Ladezyklus"
|
||||
msgid "Locations"
|
||||
msgstr "Standorte"
|
||||
|
||||
msgid "Stores"
|
||||
msgstr "Geschäfte"
|
||||
|
||||
msgid "Quantity units"
|
||||
msgstr "Mengeneinheiten"
|
||||
|
||||
@@ -222,6 +225,9 @@ msgstr "Faktor Mengeneinheit Einkauf zu Mengeneinheit Bestand"
|
||||
msgid "Create location"
|
||||
msgstr "Standort erstellen"
|
||||
|
||||
msgid "Create store"
|
||||
msgstr "Geschäft erstellen"
|
||||
|
||||
msgid "Create quantity unit"
|
||||
msgstr "Mengeneinheit erstellen"
|
||||
|
||||
@@ -255,6 +261,9 @@ msgstr "Produkt bearbeiten"
|
||||
msgid "Edit location"
|
||||
msgstr "Standort bearbeiten"
|
||||
|
||||
msgid "Edit store"
|
||||
msgstr "Geschäft bearbeiten"
|
||||
|
||||
msgid "Record data"
|
||||
msgstr "Daten erfassen"
|
||||
|
||||
@@ -331,6 +340,9 @@ msgstr "Produkt \"%s\" wirklich löschen?"
|
||||
msgid "Are you sure to delete location \"%s\"?"
|
||||
msgstr "Standort \"%s\" wirklich löschen?"
|
||||
|
||||
msgid "Are you sure to delete store \"%s\"?"
|
||||
msgstr "Geschäft \"%s\" wirklich löschen?"
|
||||
|
||||
msgid "Manage API keys"
|
||||
msgstr "API-Keys verwalten"
|
||||
|
||||
@@ -1116,6 +1128,9 @@ msgstr ""
|
||||
msgid "You have to select a location"
|
||||
msgstr "Ein Standort muss ausgewählt werden"
|
||||
|
||||
msgid "You have to select a store"
|
||||
msgstr "Ein Geschäft muss ausgewählt werden"
|
||||
|
||||
msgid "List"
|
||||
msgstr "Liste"
|
||||
|
||||
@@ -1149,7 +1164,7 @@ msgstr "Systeminformationen"
|
||||
msgid "Changelog"
|
||||
msgstr "Änderungsprotokoll"
|
||||
|
||||
msgid "will be multiplied a factor of %1$s to get %2$s"
|
||||
msgid "will be multiplied by a factor of %1$s to get %2$s"
|
||||
msgstr "wird mit dem Faktor %1$s multipliziert um %2$s zu erhalten"
|
||||
|
||||
msgid "The given date is earlier than today, are you sure?"
|
||||
@@ -1957,3 +1972,34 @@ msgstr "Rezept-Karte"
|
||||
|
||||
msgid "Group ingredients by their product group"
|
||||
msgstr "Zutaten nach Produktgruppen gruppieren"
|
||||
|
||||
msgid "Unknown store"
|
||||
msgstr "Unbekanntes Geschäft"
|
||||
|
||||
msgid "Store"
|
||||
msgstr "Geschäft"
|
||||
|
||||
msgid "Transaction successfully undone"
|
||||
msgstr "Transaktion erfolgreich rückgängig gemacht"
|
||||
|
||||
msgid "Default store"
|
||||
msgstr "Standard Geschäft"
|
||||
|
||||
msgid "Consume this stock entry"
|
||||
msgstr "Verbrauche diesen Bestandseintrag"
|
||||
|
||||
msgid "Mark this stock entry as open"
|
||||
msgstr "Diesen Bestandseintrag als geöffnet markieren"
|
||||
|
||||
msgid "Mark this item as done"
|
||||
msgstr "Diesen Eintrag als erledigt markieren"
|
||||
|
||||
msgid "Edit this item"
|
||||
msgstr "Diesen Eintrag löschen"
|
||||
|
||||
msgid "Delete this item"
|
||||
msgstr "Diesen Eintrag bearbeiten"
|
||||
|
||||
msgid "Show an icon if the product is already on the shopping list"
|
||||
msgstr ""
|
||||
"Ein Symbol anzeigen, wenn das Produkt bereits auf dem Einkaufszettel steht"
|
||||
|
@@ -345,3 +345,17 @@ msgstr ""
|
||||
|
||||
msgid "Portuguese (Portugal)"
|
||||
msgstr ""
|
||||
|
||||
# Use a in your country well known supermarket name
|
||||
msgid "DemoSupermarket1"
|
||||
msgstr ""
|
||||
|
||||
# Use a in your country well known supermarket name
|
||||
msgid "DemoSupermarket2"
|
||||
msgstr ""
|
||||
|
||||
msgid "Japanese"
|
||||
msgstr ""
|
||||
|
||||
msgid "Chinese (Taiwan)"
|
||||
msgstr ""
|
||||
|
@@ -284,3 +284,9 @@ msgstr "Swedish"
|
||||
|
||||
msgid "Polish"
|
||||
msgstr "Polish"
|
||||
|
||||
msgid "DemoSupermarket1"
|
||||
msgstr "Walmart"
|
||||
|
||||
msgid "DemoSupermarket2"
|
||||
msgstr "Kroger"
|
||||
|
@@ -66,6 +66,9 @@ msgstr "Products"
|
||||
msgid "Locations"
|
||||
msgstr "Locations"
|
||||
|
||||
msgid "Shopping locations"
|
||||
msgstr "Shopping locations"
|
||||
|
||||
msgid "Quantity units"
|
||||
msgstr "Quantity units"
|
||||
|
||||
@@ -162,6 +165,9 @@ msgstr "Name"
|
||||
msgid "Location"
|
||||
msgstr "Location"
|
||||
|
||||
msgid "Shopping location"
|
||||
msgstr "Shopping location"
|
||||
|
||||
msgid "Min. stock amount"
|
||||
msgstr "Min. stock amount"
|
||||
|
||||
@@ -201,6 +207,9 @@ msgstr "Factor purchase to stock quantity unit"
|
||||
msgid "Create location"
|
||||
msgstr "Create location"
|
||||
|
||||
msgid "Create shopping location"
|
||||
msgstr "Create shopping location"
|
||||
|
||||
msgid "Create quantity unit"
|
||||
msgstr "Create quantity unit"
|
||||
|
||||
@@ -234,6 +243,9 @@ msgstr "Edit product"
|
||||
msgid "Edit location"
|
||||
msgstr "Edit location"
|
||||
|
||||
msgid "Edit shopping location"
|
||||
msgstr "Edit shopping location"
|
||||
|
||||
msgid "Record data"
|
||||
msgstr "Record data"
|
||||
|
||||
@@ -306,6 +318,9 @@ msgstr "Are you sure to delete product \"%s\"?"
|
||||
msgid "Are you sure to delete location \"%s\"?"
|
||||
msgstr "Are you sure to delete location \"%s\"?"
|
||||
|
||||
msgid "Are you sure to delete shopping location \"%s\"?"
|
||||
msgstr "Are you sure to delete shopping location \"%s\"?"
|
||||
|
||||
msgid "Manage API keys"
|
||||
msgstr "Manage API keys"
|
||||
|
||||
@@ -1035,6 +1050,9 @@ msgstr "Tare weight handling enabled - please weigh the whole container, the amo
|
||||
msgid "You have to select a location"
|
||||
msgstr "You have to select a location"
|
||||
|
||||
msgid "You have to select a shopping location"
|
||||
msgstr "You have to select a shopping location"
|
||||
|
||||
msgid "List"
|
||||
msgstr "List"
|
||||
|
||||
|
@@ -1,29 +1,25 @@
|
||||
# Translators:
|
||||
# Jonathan Adams <jonathan@connockadams.uk>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-09-17 10:45+0000\n"
|
||||
"Last-Translator: Jonathan Adams <jonathan@connockadams.uk>, 2020\n"
|
||||
"Language-Team: English (United Kingdom) (https://www.transifex.com/grocy/teams/93189/en_GB/)\n"
|
||||
"Last-Translator: Translation migration from old PHP array files\n"
|
||||
"Language-Team: http://www.transifex.com/grocy/grocy/language/en\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: en_GB\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"Language: en\n"
|
||||
"X-Domain: grocy/chore_assignment_types\n"
|
||||
|
||||
msgid "no-assignment"
|
||||
msgstr "no-assignment"
|
||||
msgstr "No assignment"
|
||||
|
||||
msgid "who-least-did-first"
|
||||
msgstr "who-least-did-first"
|
||||
msgstr "Who least did first"
|
||||
|
||||
msgid "random"
|
||||
msgstr "random"
|
||||
msgstr "Random"
|
||||
|
||||
msgid "in-alphabetical-order"
|
||||
msgstr "in-alphabetical-order"
|
||||
msgstr "In alphabetical order"
|
||||
|
@@ -1,35 +1,32 @@
|
||||
# Translators:
|
||||
# Jonathan Adams <jonathan@connockadams.uk>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01 17:42+0000\n"
|
||||
"Last-Translator: Jonathan Adams <jonathan@connockadams.uk>, 2020\n"
|
||||
"Language-Team: English (United Kingdom) (https://www.transifex.com/grocy/teams/93189/en_GB/)\n"
|
||||
"PO-Revision-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"Last-Translator: Translation migration from old PHP array files\n"
|
||||
"Language-Team: http://www.transifex.com/grocy/grocy/language/en\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: en_GB\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Language: en\n"
|
||||
"X-Domain: grocy/chore_types\n"
|
||||
|
||||
msgid "manually"
|
||||
msgstr "manually"
|
||||
msgstr "Manually"
|
||||
|
||||
msgid "dynamic-regular"
|
||||
msgstr "dynamic-regular"
|
||||
msgstr "Dynamic regular"
|
||||
|
||||
msgid "daily"
|
||||
msgstr "daily"
|
||||
msgstr "Daily"
|
||||
|
||||
msgid "weekly"
|
||||
msgstr "weekly"
|
||||
msgstr "Weekly"
|
||||
|
||||
msgid "monthly"
|
||||
msgstr "monthly"
|
||||
msgstr "Monthly"
|
||||
|
||||
msgid "yearly"
|
||||
msgstr "yearly"
|
||||
msgstr "Yearly"
|
||||
|
@@ -1,19 +1,15 @@
|
||||
# Translators:
|
||||
# Bernd Bestel <bernd@berrnd.de>, 2019
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01 17:42+0000\n"
|
||||
"Last-Translator: Bernd Bestel <bernd@berrnd.de>, 2019\n"
|
||||
"Language-Team: English (United Kingdom) (https://www.transifex.com/grocy/teams/93189/en_GB/)\n"
|
||||
"Last-Translator: Translation migration from old PHP array files\n"
|
||||
"Language-Team: http://www.transifex.com/grocy/grocy/language/en\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: en_GB\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"Language: en\n"
|
||||
"X-Domain: grocy/component_translations\n"
|
||||
|
||||
msgid "timeago_locale"
|
||||
@@ -23,26 +19,16 @@ msgid "timeago_nan"
|
||||
msgstr "NaN years ago"
|
||||
|
||||
msgid "moment_locale"
|
||||
msgstr "en-gb"
|
||||
msgstr "x"
|
||||
|
||||
msgid "datatables_localization"
|
||||
msgstr ""
|
||||
"{\"sEmptyTable\":\"No data available in table\",\"sInfo\":\"Showing _START_ "
|
||||
"to _END_ of _TOTAL_ entries\",\"sInfoEmpty\":\"Showing 0 to 0 of 0 "
|
||||
"entries\",\"sInfoFiltered\":\"(filtered from _MAX_ total "
|
||||
"entries)\",\"sInfoPostFix\":\"\",\"sInfoThousands\":\",\",\"sLengthMenu\":\"Show"
|
||||
" _MENU_ "
|
||||
"entries\",\"sLoadingRecords\":\"Loading...\",\"sProcessing\":\"Processing...\",\"sSearch\":\"Search:\",\"sZeroRecords\":\"No"
|
||||
" matching records "
|
||||
"found\",\"oPaginate\":{\"sFirst\":\"First\",\"sLast\":\"Last\",\"sNext\":\"Next\",\"sPrevious\":\"Previous\"},\"oAria\":{\"sSortAscending\":\":"
|
||||
" activate to sort column ascending\",\"sSortDescending\":\": activate to "
|
||||
"sort column descending\"}}"
|
||||
msgstr "{\"sEmptyTable\":\"No data available in table\",\"sInfo\":\"Showing _START_ to _END_ of _TOTAL_ entries\",\"sInfoEmpty\":\"Showing 0 to 0 of 0 entries\",\"sInfoFiltered\":\"(filtered from _MAX_ total entries)\",\"sInfoPostFix\":\"\",\"sInfoThousands\":\",\",\"sLengthMenu\":\"Show _MENU_ entries\",\"sLoadingRecords\":\"Loading...\",\"sProcessing\":\"Processing...\",\"sSearch\":\"Search:\",\"sZeroRecords\":\"No matching records found\",\"oPaginate\":{\"sFirst\":\"First\",\"sLast\":\"Last\",\"sNext\":\"Next\",\"sPrevious\":\"Previous\"},\"oAria\":{\"sSortAscending\":\": activate to sort column ascending\",\"sSortDescending\":\": activate to sort column descending\"}}"
|
||||
|
||||
msgid "summernote_locale"
|
||||
msgstr "en-gb"
|
||||
msgstr "x"
|
||||
|
||||
msgid "fullcalendar_locale"
|
||||
msgstr "en-gb"
|
||||
msgstr "x"
|
||||
|
||||
msgid "bootstrap-select_locale"
|
||||
msgstr "x"
|
||||
|
@@ -349,3 +349,17 @@ msgstr ""
|
||||
|
||||
msgid "Portuguese (Portugal)"
|
||||
msgstr ""
|
||||
|
||||
# Use a in your country well known supermarket name
|
||||
msgid "DemoSupermarket1"
|
||||
msgstr ""
|
||||
|
||||
# Use a in your country well known supermarket name
|
||||
msgid "DemoSupermarket2"
|
||||
msgstr ""
|
||||
|
||||
msgid "Japanese"
|
||||
msgstr ""
|
||||
|
||||
msgid "Chinese (Taiwan)"
|
||||
msgstr ""
|
||||
|
@@ -1,44 +1,40 @@
|
||||
# Translators:
|
||||
# Jonathan Adams <jonathan@connockadams.uk>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01 17:42+0000\n"
|
||||
"Last-Translator: Jonathan Adams <jonathan@connockadams.uk>, 2020\n"
|
||||
"Language-Team: English (United Kingdom) (https://www.transifex.com/grocy/teams/93189/en_GB/)\n"
|
||||
"Last-Translator: Translation migration from old PHP array files\n"
|
||||
"Language-Team: http://www.transifex.com/grocy/grocy/language/en\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: en_GB\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"Language: en\n"
|
||||
"X-Domain: grocy/stock_transaction_types\n"
|
||||
|
||||
msgid "purchase"
|
||||
msgstr "purchase"
|
||||
|
||||
msgid "transfer_from"
|
||||
msgstr "transfer_from"
|
||||
msgstr "Purchase"
|
||||
|
||||
msgid "transfer_to"
|
||||
msgstr "transfer_to"
|
||||
msgstr "Transfer To"
|
||||
|
||||
msgid "transfer_from"
|
||||
msgstr "Transfer From"
|
||||
|
||||
msgid "consume"
|
||||
msgstr "consume"
|
||||
msgstr "Consume"
|
||||
|
||||
msgid "inventory-correction"
|
||||
msgstr "inventory-correction"
|
||||
msgstr "Inventory correction"
|
||||
|
||||
msgid "product-opened"
|
||||
msgstr "product-opened"
|
||||
msgstr "Product opened"
|
||||
|
||||
msgid "stock-edit-old"
|
||||
msgstr "stock-edit-old"
|
||||
msgstr "Stock entry edited (old values)"
|
||||
|
||||
msgid "stock-edit-new"
|
||||
msgstr "stock-edit-new"
|
||||
msgstr "Stock entry edited (new values)"
|
||||
|
||||
msgid "self-production"
|
||||
msgstr ""
|
||||
msgstr "Self-production"
|
||||
|
@@ -83,6 +83,9 @@ msgstr "Battery tracking"
|
||||
msgid "Locations"
|
||||
msgstr "Locations"
|
||||
|
||||
msgid "Stores"
|
||||
msgstr ""
|
||||
|
||||
msgid "Quantity units"
|
||||
msgstr "Quantity units"
|
||||
|
||||
@@ -220,6 +223,9 @@ msgstr "Factor purchase to stock quantity unit"
|
||||
msgid "Create location"
|
||||
msgstr "Create location"
|
||||
|
||||
msgid "Create store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create quantity unit"
|
||||
msgstr "Create quantity unit"
|
||||
|
||||
@@ -253,6 +259,9 @@ msgstr "Edit product"
|
||||
msgid "Edit location"
|
||||
msgstr "Edit location"
|
||||
|
||||
msgid "Edit store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Record data"
|
||||
msgstr "Record data"
|
||||
|
||||
@@ -329,6 +338,9 @@ msgstr "Are you sure to delete product \"%s\"?"
|
||||
msgid "Are you sure to delete location \"%s\"?"
|
||||
msgstr "Are you sure to delete location \"%s\"?"
|
||||
|
||||
msgid "Are you sure to delete store \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manage API keys"
|
||||
msgstr "Manage API keys"
|
||||
|
||||
@@ -1095,6 +1107,9 @@ msgstr ""
|
||||
msgid "You have to select a location"
|
||||
msgstr "You have to select a location"
|
||||
|
||||
msgid "You have to select a store"
|
||||
msgstr ""
|
||||
|
||||
msgid "List"
|
||||
msgstr "List"
|
||||
|
||||
@@ -1128,8 +1143,8 @@ msgstr "System info"
|
||||
msgid "Changelog"
|
||||
msgstr "Changelog"
|
||||
|
||||
msgid "will be multiplied a factor of %1$s to get %2$s"
|
||||
msgstr "will be multiplied a factor of %1$s to get %2$s"
|
||||
msgid "will be multiplied by a factor of %1$s to get %2$s"
|
||||
msgstr ""
|
||||
|
||||
msgid "The given date is earlier than today, are you sure?"
|
||||
msgstr "The given date is earlier than today, are you sure?"
|
||||
@@ -1902,3 +1917,33 @@ msgstr ""
|
||||
|
||||
msgid "Group ingredients by their product group"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unknown store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Transaction successfully undone"
|
||||
msgstr ""
|
||||
|
||||
msgid "Default store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Consume this stock entry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Mark this stock entry as open"
|
||||
msgstr ""
|
||||
|
||||
msgid "Mark this item as done"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit this item"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this item"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show an icon if the product is already on the shopping list"
|
||||
msgstr ""
|
||||
|
@@ -1,47 +1,43 @@
|
||||
# Translators:
|
||||
# Jonathan Adams <jonathan@connockadams.uk>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01 17:43+0000\n"
|
||||
"Last-Translator: Jonathan Adams <jonathan@connockadams.uk>, 2020\n"
|
||||
"Language-Team: English (United Kingdom) (https://www.transifex.com/grocy/teams/93189/en_GB/)\n"
|
||||
"Last-Translator: Translation migration from old PHP array files\n"
|
||||
"Language-Team: http://www.transifex.com/grocy/grocy/language/en\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: en_GB\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"Language: en\n"
|
||||
"X-Domain: grocy/userfield_types\n"
|
||||
|
||||
msgid "text-single-line"
|
||||
msgstr "text-single-line"
|
||||
msgstr "Text (single line)"
|
||||
|
||||
msgid "text-multi-line"
|
||||
msgstr "text-multi-line"
|
||||
msgstr "Text (multi line)"
|
||||
|
||||
msgid "number-integral"
|
||||
msgstr "number-integral"
|
||||
msgstr "Number (integral)"
|
||||
|
||||
msgid "number-decimal"
|
||||
msgstr "number-decimal"
|
||||
msgstr "Number (decimal)"
|
||||
|
||||
msgid "date"
|
||||
msgstr "date"
|
||||
msgstr "Date (without time)"
|
||||
|
||||
msgid "datetime"
|
||||
msgstr "datetime"
|
||||
msgstr "Date & time"
|
||||
|
||||
msgid "checkbox"
|
||||
msgstr "checkbox"
|
||||
msgstr "Checkbox"
|
||||
|
||||
msgid "preset-list"
|
||||
msgstr "preset-list"
|
||||
msgstr "Select list (a single item can be selected)"
|
||||
|
||||
msgid "preset-checklist"
|
||||
msgstr "preset-checklist"
|
||||
msgstr "Select list (multiple items can be selected)"
|
||||
|
||||
msgid "link"
|
||||
msgstr "link"
|
||||
msgstr "Link"
|
||||
|
@@ -1,6 +1,5 @@
|
||||
# Translators:
|
||||
# Bernd Bestel <bernd@berrnd.de>, 2019
|
||||
# Igor Perez <igordiablo@hotmail.com>, 2020
|
||||
# Jose Rugel <joserugel@gmail.com>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -8,7 +7,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: Igor Perez <igordiablo@hotmail.com>, 2020\n"
|
||||
"Last-Translator: Jose Rugel <joserugel@gmail.com>, 2020\n"
|
||||
"Language-Team: Spanish (https://www.transifex.com/grocy/teams/93189/es/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -18,19 +17,19 @@ msgstr ""
|
||||
"X-Domain: grocy/chore_types\n"
|
||||
|
||||
msgid "manually"
|
||||
msgstr "Manualmente"
|
||||
msgstr "manualmente"
|
||||
|
||||
msgid "dynamic-regular"
|
||||
msgstr "Dinámico regular"
|
||||
msgstr "dinamico-regular"
|
||||
|
||||
msgid "daily"
|
||||
msgstr "Diario"
|
||||
msgstr "diariamente"
|
||||
|
||||
msgid "weekly"
|
||||
msgstr "Semanal"
|
||||
msgstr "semanalmente"
|
||||
|
||||
msgid "monthly"
|
||||
msgstr "Mensual"
|
||||
msgstr "mensualmente"
|
||||
|
||||
msgid "yearly"
|
||||
msgstr "Anual"
|
||||
msgstr "Anualmente"
|
||||
|
@@ -1,5 +1,6 @@
|
||||
# Translators:
|
||||
# Bernd Bestel <bernd@berrnd.de>, 2019
|
||||
# Jose Rugel <joserugel@gmail.com>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -7,7 +8,7 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01 17:42+0000\n"
|
||||
"Last-Translator: Bernd Bestel <bernd@berrnd.de>, 2019\n"
|
||||
"Last-Translator: Jose Rugel <joserugel@gmail.com>, 2020\n"
|
||||
"Language-Team: Spanish (https://www.transifex.com/grocy/teams/93189/es/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -27,16 +28,31 @@ msgstr "es"
|
||||
|
||||
msgid "datatables_localization"
|
||||
msgstr ""
|
||||
"{\"sEmptyTable\":\"Sin datos en la tabla\",\"sInfo\":\"Mostrando de _START_"
|
||||
" a _END_ de _TOTAL_ entradas\",\"sInfoEmpty\":\"Mostrando de 0 a 0 de 0 "
|
||||
"entradas\",\"sInfoFiltered\":\"(filtrando a _MAX_ entradas "
|
||||
"máximas)\",\"sInfoPostFix\":\"\",\"sInfoThousands\":\",\",\"sLengthMenu\":\"Mostrar"
|
||||
" _MENU_ "
|
||||
"entradas\",\"sLoadingRecords\":\"Cargando...\",\"sProcessing\":\"Procesando...\",\"sSearch\":\"Buscar:\",\"sZeroRecords\":\"No"
|
||||
" se han encontrado resultados "
|
||||
"coincidentes\",\"oPaginate\":{\"sFirst\":\"Primero\",\"sLast\":\"Último\",\"sNext\":\"Siguiente\",\"sPrevious\":\"Anterior\"},\"oAria\":{\"sSortAscending\":\":"
|
||||
" activar para ordenar ascendentemente\",\"sSortDescending\":\": activar para"
|
||||
" ordenar descendentemente\"}}"
|
||||
"{\n"
|
||||
"\"sEmptyTable\":\"Sin datos en la tabla\"\n"
|
||||
",\"sInfo\":\"Mostrando de _START_ a _END_ de _TOTAL_ entradas\"\n"
|
||||
",\"sInfoEmpty\":\"Mostrando de 0 a 0 de 0 entradas\"\n"
|
||||
",\"sInfoFiltered\":\"(filtrando a _MAX_ entradas máximas)\"\n"
|
||||
",\"sInfoPostFix\":\"\"\n"
|
||||
",\"sInfoThousands\":\",\"\n"
|
||||
",\"sLengthMenu\":\"Mostrar _MENU_ entradas\"\n"
|
||||
",\"sLoadingRecords\":\"Cargando ...\"\n"
|
||||
",\"sProcessing\":\"Procesando ...\"\n"
|
||||
",\"sSearch\":\"Buscar\"\n"
|
||||
",\"sZeroRecords\":\"No se han encontrado resultados coincidentes\"\n"
|
||||
",\"oPaginate\":\n"
|
||||
"{\n"
|
||||
"\"sFirst\":\"Primero\"\n"
|
||||
",\"sLast\":\"Último\"\n"
|
||||
",\"sNext\":\"Siguiente\"\n"
|
||||
",\"sPrevious\":\"Anterior\"\n"
|
||||
"}\n"
|
||||
",\"oAria\":\n"
|
||||
"{\n"
|
||||
"\"sSortAscending\":\"orden ascendente\"\n"
|
||||
",\"sSortDescending\":\"orden descendente\"\n"
|
||||
"}\n"
|
||||
"}"
|
||||
|
||||
msgid "summernote_locale"
|
||||
msgstr "es-ES"
|
||||
|
@@ -2,6 +2,7 @@
|
||||
# Ankue <ankue.spam@gmail.com>, 2019
|
||||
# Fernando Sánchez <fernando.l.sanchez@gmail.com>, 2019
|
||||
# Igor Perez <igordiablo@hotmail.com>, 2020
|
||||
# Jose Rugel <joserugel@gmail.com>, 2020
|
||||
#
|
||||
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: Igor Perez <igordiablo@hotmail.com>, 2020\n"
|
||||
"Last-Translator: Jose Rugel <joserugel@gmail.com>, 2020\n"
|
||||
"Language-Team: Spanish (https://www.transifex.com/grocy/teams/93189/es/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -34,7 +35,7 @@ msgid "Tinned food cupboard"
|
||||
msgstr "Estante de las latas"
|
||||
|
||||
msgid "Fridge"
|
||||
msgstr "Frigorífico"
|
||||
msgstr "Refrigerador"
|
||||
|
||||
msgid "Piece"
|
||||
msgid_plural "Pieces"
|
||||
@@ -54,12 +55,12 @@ msgstr[1] "Vasos"
|
||||
msgid "Tin"
|
||||
msgid_plural "Tins"
|
||||
msgstr[0] "Envases"
|
||||
msgstr[1] "Envases"
|
||||
msgstr[1] "Latas"
|
||||
|
||||
msgid "Can"
|
||||
msgid_plural "Cans"
|
||||
msgstr[0] "Lata"
|
||||
msgstr[1] "Latas"
|
||||
msgstr[1] "Envases"
|
||||
|
||||
msgid "Bunch"
|
||||
msgid_plural "Bunches"
|
||||
@@ -67,7 +68,7 @@ msgstr[0] "Puñados"
|
||||
msgstr[1] "Puñados"
|
||||
|
||||
msgid "Gummy bears"
|
||||
msgstr "Ositos"
|
||||
msgstr "Ositos de goma"
|
||||
|
||||
msgid "Crisps"
|
||||
msgstr "Patatas fritas"
|
||||
@@ -82,7 +83,7 @@ msgid "Pickles"
|
||||
msgstr "Pepinillos"
|
||||
|
||||
msgid "Gulash soup"
|
||||
msgstr "Sopa"
|
||||
msgstr "Sopa Gulash"
|
||||
|
||||
msgid "Yogurt"
|
||||
msgstr "Yogurt"
|
||||
@@ -115,13 +116,13 @@ msgid "Warranty ends"
|
||||
msgstr "Final de la garantía"
|
||||
|
||||
msgid "TV remote control"
|
||||
msgstr "Mando de la TV"
|
||||
msgstr "Control remoto del televisor"
|
||||
|
||||
msgid "Alarm clock"
|
||||
msgstr "Despertador"
|
||||
|
||||
msgid "Heat remote control"
|
||||
msgstr "Mando de la calefacción"
|
||||
msgstr "Control remoto de la calefacción"
|
||||
|
||||
msgid "Lawn mowed in the garden"
|
||||
msgstr "Cortar el césped del jardín"
|
||||
@@ -133,10 +134,10 @@ msgid "Pizza dough"
|
||||
msgstr "Masa de pizza"
|
||||
|
||||
msgid "Sieved tomatoes"
|
||||
msgstr "Tomate triturado"
|
||||
msgstr "Tomates triturados"
|
||||
|
||||
msgid "Salami"
|
||||
msgstr "Salami"
|
||||
msgstr "Salame"
|
||||
|
||||
msgid "Toast"
|
||||
msgstr "Tostada"
|
||||
@@ -148,10 +149,10 @@ msgid "Pizza"
|
||||
msgstr "Pizza"
|
||||
|
||||
msgid "Spaghetti bolognese"
|
||||
msgstr "Spaghetti boloñesa"
|
||||
msgstr "Spaghetti a la boloñesa"
|
||||
|
||||
msgid "Sandwiches"
|
||||
msgstr "Bocadillos"
|
||||
msgstr "Sándwiches"
|
||||
|
||||
msgid "English"
|
||||
msgstr "Inglés"
|
||||
@@ -177,7 +178,7 @@ msgid "Flour"
|
||||
msgstr "Harina"
|
||||
|
||||
msgid "Pancakes"
|
||||
msgstr "Tortitas"
|
||||
msgstr "Panqueques"
|
||||
|
||||
msgid "Sugar"
|
||||
msgstr "Azúcar"
|
||||
@@ -273,7 +274,7 @@ msgid "The thing which happens daily"
|
||||
msgstr "Lo que ocurre diariamente"
|
||||
|
||||
msgid "The thing which happens on Mondays and Wednesdays"
|
||||
msgstr "Lo que ocurre los lunes y los miércoles"
|
||||
msgstr "Lo que ocurre los Lunes y los Miércoles"
|
||||
|
||||
msgid "Swedish"
|
||||
msgstr "Sueco"
|
||||
@@ -290,19 +291,19 @@ msgstr "Chocolate negro"
|
||||
msgid "Slice"
|
||||
msgid_plural "Slices"
|
||||
msgstr[0] "Lonchas"
|
||||
msgstr[1] "Lonchas"
|
||||
msgstr[1] "Rebanadas"
|
||||
|
||||
msgid "Example userentity"
|
||||
msgstr "Entidad de usuario de ejemplo"
|
||||
|
||||
msgid "This is an example user entity..."
|
||||
msgstr "Esto es un ejemplo de entidad de usuario..."
|
||||
msgstr "Esto es un ejemplo de una entidad personalizada ..."
|
||||
|
||||
msgid "Custom field"
|
||||
msgstr "Campo personalizado"
|
||||
|
||||
msgid "Example field value..."
|
||||
msgstr "Ejemplo de valor de campo..."
|
||||
msgstr "Valor del campo de ejemplo ..."
|
||||
|
||||
msgid "Waffle rolls"
|
||||
msgstr "Canutillos"
|
||||
@@ -326,10 +327,10 @@ msgid "Preview version"
|
||||
msgstr "Versión previa"
|
||||
|
||||
msgid "current release"
|
||||
msgstr "Release actual"
|
||||
msgstr "Elaboración actual"
|
||||
|
||||
msgid "not yet released"
|
||||
msgstr "Todavía no liberado"
|
||||
msgstr "Todavía no elaborado"
|
||||
|
||||
msgid "Portuguese (Brazil)"
|
||||
msgstr "Portugués (Brasil)"
|
||||
@@ -347,7 +348,21 @@ msgid "Slovak"
|
||||
msgstr "Eslovaco"
|
||||
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
msgstr "Checo"
|
||||
|
||||
msgid "Portuguese (Portugal)"
|
||||
msgstr ""
|
||||
msgstr "Portugués (Portugal)"
|
||||
|
||||
# Use a in your country well known supermarket name
|
||||
msgid "DemoSupermarket1"
|
||||
msgstr "DemoSupermercado1"
|
||||
|
||||
# Use a in your country well known supermarket name
|
||||
msgid "DemoSupermarket2"
|
||||
msgstr "DemoSupermercado2"
|
||||
|
||||
msgid "Japanese"
|
||||
msgstr "Japonés"
|
||||
|
||||
msgid "Chinese (Taiwan)"
|
||||
msgstr "Chino (Taiwan)"
|
||||
|
@@ -1,5 +1,5 @@
|
||||
# Translators:
|
||||
# Bernd Bestel <bernd@berrnd.de>, 2019
|
||||
# Jose Rugel <joserugel@gmail.com>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -7,7 +7,7 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01 17:42+0000\n"
|
||||
"Last-Translator: Bernd Bestel <bernd@berrnd.de>, 2019\n"
|
||||
"Last-Translator: Jose Rugel <joserugel@gmail.com>, 2020\n"
|
||||
"Language-Team: Spanish (https://www.transifex.com/grocy/teams/93189/es/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -17,13 +17,28 @@ msgstr ""
|
||||
"X-Domain: grocy/stock_transaction_types\n"
|
||||
|
||||
msgid "purchase"
|
||||
msgstr "Compra"
|
||||
msgstr "compra"
|
||||
|
||||
msgid "transfer_from"
|
||||
msgstr "trasladar_desde"
|
||||
|
||||
msgid "transfer_to"
|
||||
msgstr "trasladar_a"
|
||||
|
||||
msgid "consume"
|
||||
msgstr "Consumo"
|
||||
msgstr "consumo"
|
||||
|
||||
msgid "inventory-correction"
|
||||
msgstr "Corrección de inventario"
|
||||
msgstr "inventario-correccion"
|
||||
|
||||
msgid "product-opened"
|
||||
msgstr "Producto abierto"
|
||||
msgstr "producto-abierto"
|
||||
|
||||
msgid "stock-edit-old"
|
||||
msgstr "existencia-editar-viejo"
|
||||
|
||||
msgid "stock-edit-new"
|
||||
msgstr "existencia-editar-nuevo"
|
||||
|
||||
msgid "self-production"
|
||||
msgstr "produccion-propia"
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,6 @@
|
||||
# Translators:
|
||||
# Bernd Bestel <bernd@berrnd.de>, 2019
|
||||
# Fernando Sánchez <fernando.l.sanchez@gmail.com>, 2019
|
||||
# Igor Perez <igordiablo@hotmail.com>, 2020
|
||||
# Jose Rugel <joserugel@gmail.com>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -9,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: Igor Perez <igordiablo@hotmail.com>, 2020\n"
|
||||
"Last-Translator: Jose Rugel <joserugel@gmail.com>, 2020\n"
|
||||
"Language-Team: Spanish (https://www.transifex.com/grocy/teams/93189/es/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -19,25 +18,25 @@ msgstr ""
|
||||
"X-Domain: grocy/userfield_types\n"
|
||||
|
||||
msgid "text-single-line"
|
||||
msgstr "Texto (una línea)"
|
||||
msgstr "texto-unica-linea"
|
||||
|
||||
msgid "text-multi-line"
|
||||
msgstr "Texto (múltiples líneas)"
|
||||
msgstr "texto-multi-linea"
|
||||
|
||||
msgid "number-integral"
|
||||
msgstr "Número (entero)"
|
||||
msgstr "numero-entero"
|
||||
|
||||
msgid "number-decimal"
|
||||
msgstr "Número (decimal)"
|
||||
msgstr "numero-decimal"
|
||||
|
||||
msgid "date"
|
||||
msgstr "Fecha"
|
||||
msgstr "fecha"
|
||||
|
||||
msgid "datetime"
|
||||
msgstr "Fecha y hora"
|
||||
msgstr "fecha-hora"
|
||||
|
||||
msgid "checkbox"
|
||||
msgstr "Casilla de verificación"
|
||||
msgstr "casilla-verificacion"
|
||||
|
||||
msgid "preset-list"
|
||||
msgstr "lista-predefinida"
|
||||
|
@@ -5,6 +5,8 @@
|
||||
# Antonin DESFONTAINES <antonin.desfontaines@outlook.com>, 2019
|
||||
# Zkryvix <angelo.frangione@gmail.com>, 2020
|
||||
# Laurent Mox <laurent@laurent.sh>, 2020
|
||||
# Nicolas Moisson <nicolas.moisson@protonmail.com>, 2020
|
||||
# Nikola Kotur <nikola.kotur@gmail.com>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -12,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: Laurent Mox <laurent@laurent.sh>, 2020\n"
|
||||
"Last-Translator: Nikola Kotur <nikola.kotur@gmail.com>, 2020\n"
|
||||
"Language-Team: French (https://www.transifex.com/grocy/teams/93189/fr/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -352,7 +354,21 @@ msgid "Slovak"
|
||||
msgstr "Slovaque"
|
||||
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
msgstr "Tchèque"
|
||||
|
||||
msgid "Portuguese (Portugal)"
|
||||
msgstr ""
|
||||
msgstr "Portugais (Portugal)"
|
||||
|
||||
# Use a in your country well known supermarket name
|
||||
msgid "DemoSupermarket1"
|
||||
msgstr "DemoSupermarché1"
|
||||
|
||||
# Use a in your country well known supermarket name
|
||||
msgid "DemoSupermarket2"
|
||||
msgstr "DemoSupermarché2"
|
||||
|
||||
msgid "Japanese"
|
||||
msgstr "Japonais"
|
||||
|
||||
msgid "Chinese (Taiwan)"
|
||||
msgstr "Chinois (Taïwan)"
|
||||
|
@@ -16,6 +16,9 @@
|
||||
# Bastien SOL <agentcobra57@gmail.com>, 2020
|
||||
# Bruno D'agen <iamlionem@gmail.com>, 2020
|
||||
# Laurent Mox <laurent@laurent.sh>, 2020
|
||||
# Nicolas Moisson <nicolas.moisson@protonmail.com>, 2020
|
||||
# Gregory Pelletier <gpelletier@ip512.com>, 2020
|
||||
# nerdinator <florian.dupret@gmail.com>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -23,7 +26,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: Laurent Mox <laurent@laurent.sh>, 2020\n"
|
||||
"Last-Translator: nerdinator <florian.dupret@gmail.com>, 2020\n"
|
||||
"Language-Team: French (https://www.transifex.com/grocy/teams/93189/fr/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -99,6 +102,9 @@ msgstr "Suivi des piles"
|
||||
msgid "Locations"
|
||||
msgstr "Emplacements"
|
||||
|
||||
msgid "Stores"
|
||||
msgstr "Magasins"
|
||||
|
||||
msgid "Quantity units"
|
||||
msgstr "Formats"
|
||||
|
||||
@@ -237,6 +243,9 @@ msgstr "Facteur entre la quantité à l'achat et la quantité en stock"
|
||||
msgid "Create location"
|
||||
msgstr "Créer un emplacement"
|
||||
|
||||
msgid "Create store"
|
||||
msgstr "Créer magasin"
|
||||
|
||||
msgid "Create quantity unit"
|
||||
msgstr "Créer un format"
|
||||
|
||||
@@ -270,6 +279,9 @@ msgstr "Modifier le produit"
|
||||
msgid "Edit location"
|
||||
msgstr "Modifier l'emplacement"
|
||||
|
||||
msgid "Edit store"
|
||||
msgstr "Mettre à jour magasin"
|
||||
|
||||
msgid "Record data"
|
||||
msgstr "Enregistrer les données"
|
||||
|
||||
@@ -347,6 +359,9 @@ msgstr "Voulez-vous vraiment supprimer le produit \"%s\" ?"
|
||||
msgid "Are you sure to delete location \"%s\"?"
|
||||
msgstr "Voulez-vous vraiment supprimer l'emplacement \"%s\" ?"
|
||||
|
||||
msgid "Are you sure to delete store \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manage API keys"
|
||||
msgstr "Gérer les clefs API"
|
||||
|
||||
@@ -673,8 +688,8 @@ msgid ""
|
||||
"Only check if a single unit is in stock (a different quantity can then be "
|
||||
"used above)"
|
||||
msgstr ""
|
||||
"Vérifier uniquement si une unité est en stock (une quantité différente peut "
|
||||
"alors être utilisée au dessus)"
|
||||
"Vérifier uniquement si le stock contient au moins une unité (une quantité "
|
||||
"supérieure pourra alors être utilisée)"
|
||||
|
||||
msgid ""
|
||||
"Are you sure to consume all ingredients needed by recipe \"%s\" (ingredients"
|
||||
@@ -1124,6 +1139,9 @@ msgstr ""
|
||||
msgid "You have to select a location"
|
||||
msgstr "Vous devez sélectionner un endroit"
|
||||
|
||||
msgid "You have to select a store"
|
||||
msgstr "Vous devez sélectionner un magasin"
|
||||
|
||||
msgid "List"
|
||||
msgstr "Liste"
|
||||
|
||||
@@ -1157,8 +1175,8 @@ msgstr "Informations système"
|
||||
msgid "Changelog"
|
||||
msgstr "Journalisation"
|
||||
|
||||
msgid "will be multiplied a factor of %1$s to get %2$s"
|
||||
msgstr "sera multiplié par %1$s pour obtenir %2$s"
|
||||
msgid "will be multiplied by a factor of %1$s to get %2$s"
|
||||
msgstr ""
|
||||
|
||||
msgid "The given date is earlier than today, are you sure?"
|
||||
msgstr "La date saisie est antérieure à aujourd'hui, êtes-vous sûr?"
|
||||
@@ -1209,7 +1227,7 @@ msgid "Average shelf life"
|
||||
msgstr "Durée moyenne de conservation "
|
||||
|
||||
msgid "Spoil rate"
|
||||
msgstr "Taux de gâte"
|
||||
msgstr "Taux de péremption"
|
||||
|
||||
msgid "Show more"
|
||||
msgstr "Afficher plus"
|
||||
@@ -1348,7 +1366,7 @@ msgid "Meal plan"
|
||||
msgstr "Prévisions des menus"
|
||||
|
||||
msgid "Add recipe on %s"
|
||||
msgstr ""
|
||||
msgstr "Ajouter une recette dans %s"
|
||||
|
||||
msgid "%s serving"
|
||||
msgid_plural "%s servings"
|
||||
@@ -1768,10 +1786,10 @@ msgid "Transfered %1$s of %2$s from %3$s to %4$s"
|
||||
msgstr "A transferé%1$sde %2$svenant de %3$s à %4$s"
|
||||
|
||||
msgid "Show stock entries"
|
||||
msgstr ""
|
||||
msgstr "Afficher les entrées du stock"
|
||||
|
||||
msgid "Stock entries"
|
||||
msgstr ""
|
||||
msgstr "Entrées du stock"
|
||||
|
||||
msgid "Best before date"
|
||||
msgstr "A consommer de préférence avant le"
|
||||
@@ -1780,27 +1798,30 @@ msgid "Purchased date"
|
||||
msgstr "Date d'achat"
|
||||
|
||||
msgid "Consume all %s for this stock entry"
|
||||
msgstr ""
|
||||
msgstr "Consommer tous les %s pour cette entrée du stock"
|
||||
|
||||
msgid "The amount cannot be lower than %1$s"
|
||||
msgstr "La quantité ne peut être inférieure à %s"
|
||||
|
||||
msgid "Stock entry successfully updated"
|
||||
msgstr ""
|
||||
msgstr "Entrée du stock mise à jour avec succès"
|
||||
|
||||
msgid "Edit stock entry"
|
||||
msgstr ""
|
||||
msgstr "Modifier l'entrée du stock"
|
||||
|
||||
msgid ""
|
||||
"Camera access is only possible when supported and allowed by your browser "
|
||||
"and when grocy is served via a secure (https://) connection"
|
||||
msgstr ""
|
||||
"L'accès à la caméra n'est possible que s'il est pris en charge et autorisé "
|
||||
"par votre navigateur et lorsque grocy utilise une connexion sécurisée "
|
||||
"(HTTPS)"
|
||||
|
||||
msgid "Keep screen on"
|
||||
msgstr "Garder l'écran allumé"
|
||||
|
||||
msgid "Keep screen on while displaying a \"fullscreen-card\""
|
||||
msgstr ""
|
||||
msgstr "Garder l'écran allumé lorsqu'une fiche est affichée en plein écran"
|
||||
|
||||
msgid "A purchased date is required"
|
||||
msgstr "Date d'achat obligatoire"
|
||||
@@ -1809,24 +1830,27 @@ msgid ""
|
||||
"When a product is selected, one unit (per serving in purchase quantity unit)"
|
||||
" will be added to stock on consuming this recipe"
|
||||
msgstr ""
|
||||
"Lorsqu'un produit est sélectionné, une unité (par portion dans l'unité de "
|
||||
"quantité d'achat) sera ajoutée au stock lors de la consommation de cette "
|
||||
"recette"
|
||||
|
||||
msgid "Produces product"
|
||||
msgstr ""
|
||||
msgstr "Génère un produit"
|
||||
|
||||
msgid "This booking cannot be undone"
|
||||
msgstr ""
|
||||
msgstr "Cette réservation ne peut pas être annulée"
|
||||
|
||||
msgid "Booking does not exist or was already undone"
|
||||
msgstr ""
|
||||
msgstr "La réservation n'existe pas ou a déjà été annulée"
|
||||
|
||||
msgid "Are you sure to delete API key \"%s\"?"
|
||||
msgstr ""
|
||||
msgstr "Voulez-vous vraiment supprimer la clé API \"%s\" ?"
|
||||
|
||||
msgid "Add note"
|
||||
msgstr "Ajouter une remarque"
|
||||
|
||||
msgid "Add note on %s"
|
||||
msgstr ""
|
||||
msgstr "Ajouter une remarque dans %s"
|
||||
|
||||
msgid "per day"
|
||||
msgstr "par jour"
|
||||
@@ -1838,16 +1862,18 @@ msgid "Normal view"
|
||||
msgstr "Vue normale"
|
||||
|
||||
msgid "Only undone items"
|
||||
msgstr ""
|
||||
msgstr "Uniquement les éléments annulés"
|
||||
|
||||
msgid "Add product"
|
||||
msgstr "Ajouter un produit"
|
||||
|
||||
msgid "Add product on %s"
|
||||
msgstr ""
|
||||
msgstr "Ajouter le produit à %s"
|
||||
|
||||
msgid "Consume all ingredients needed by this weeks recipes or products"
|
||||
msgstr ""
|
||||
"Consommer tous les ingrédients requis pour les recettes ou produits de cette"
|
||||
" semaine"
|
||||
|
||||
msgid "Meal plan recipe"
|
||||
msgstr "Recette des prévisions de repas"
|
||||
@@ -1870,72 +1896,112 @@ msgstr "Éteint"
|
||||
msgid ""
|
||||
"Scan mode is on but not all required fields could be populated automatically"
|
||||
msgstr ""
|
||||
"Le mode \"scan\" est activé mais tous les champs obligatoires n'ont pas pu "
|
||||
"être automatiquement remplis"
|
||||
|
||||
msgid "Is freezer"
|
||||
msgstr ""
|
||||
msgstr "Est un congélateur"
|
||||
|
||||
msgid ""
|
||||
"When moving products from/to a freezer location, the products best before "
|
||||
"date is automatically adjusted according to the product settings"
|
||||
msgstr ""
|
||||
"Lorsque les produits entrent/sortent du congélateur, la date de durabilité "
|
||||
"minimale est mise à jour automatiquement en fonction des paramètres des "
|
||||
"produits"
|
||||
|
||||
msgid ""
|
||||
"On moving this product to a freezer location (so when freezing it), the best"
|
||||
" before date will be replaced by today + this amount of days"
|
||||
msgstr ""
|
||||
"Lorsque ce produit est placé dans le congélateur (congélation), la date de "
|
||||
"durabilité minimale sera remplacée par la date du jour + ce nombre de jours"
|
||||
|
||||
msgid "Default best before days after freezing"
|
||||
msgstr ""
|
||||
msgstr "Date de durabilité minimale après congélation par défaut en jours"
|
||||
|
||||
msgid ""
|
||||
"On moving this product from a freezer location (so when thawing it), the "
|
||||
"best before date will be replaced by today + this amount of days"
|
||||
msgstr ""
|
||||
"Lorsque ce produit est sorti du congélateur (décongélation), la date de "
|
||||
"durabilité minimale sera remplacée par la date du jour + ce nombre de jours"
|
||||
|
||||
msgid "Default best before days after thawing"
|
||||
msgstr ""
|
||||
msgstr "Date de durabilité minimale après décongélation par défaut en jours"
|
||||
|
||||
msgid "This cannot be the same as the \"From\" location"
|
||||
msgstr ""
|
||||
msgstr "Ce ne peut pas être le même endroit d'origine"
|
||||
|
||||
msgid "Thawed"
|
||||
msgstr ""
|
||||
msgstr "Décongelé"
|
||||
|
||||
msgid "Frozen"
|
||||
msgstr "Congelé"
|
||||
|
||||
msgid "Are you sure to delete userentity \"%s\"?"
|
||||
msgstr ""
|
||||
msgstr "Voulez-vous vraiment supprimer l'entité utilisateur \"%s\" ?"
|
||||
|
||||
msgid "Shopping list settings"
|
||||
msgstr "Paramètres de la liste de courses"
|
||||
|
||||
msgid "Show a month-view calendar"
|
||||
msgstr ""
|
||||
msgstr "Afficher le calendrier en vue mensuelle"
|
||||
|
||||
msgid "Don't automatically switch to the compact view on mobile devices"
|
||||
msgstr ""
|
||||
"Ne pas basculer automatiquement en vue compacte sur les appareils mobiles"
|
||||
|
||||
msgid "Edit note on %s"
|
||||
msgstr ""
|
||||
msgstr "Modifier la remarque dans %s"
|
||||
|
||||
msgid "Edit product on %s"
|
||||
msgstr ""
|
||||
msgstr "Modifier le produit dans %s"
|
||||
|
||||
msgid "Edit recipe on %s"
|
||||
msgstr ""
|
||||
msgstr "Modifier la recette dans %s"
|
||||
|
||||
msgid "Desired servings"
|
||||
msgstr "portions souhaitées"
|
||||
|
||||
msgid "Base: %s"
|
||||
msgstr ""
|
||||
msgstr "Base: %s"
|
||||
|
||||
msgid "Recipes settings"
|
||||
msgstr ""
|
||||
msgstr "Paramètres des recettes"
|
||||
|
||||
msgid "Recipe card"
|
||||
msgstr ""
|
||||
msgstr "Fiche de recette"
|
||||
|
||||
msgid "Group ingredients by their product group"
|
||||
msgstr "Regrouper les ingrédients par groupe de produits"
|
||||
|
||||
msgid "Unknown store"
|
||||
msgstr "Magasin inconnu"
|
||||
|
||||
msgid "Store"
|
||||
msgstr "Magasin"
|
||||
|
||||
msgid "Transaction successfully undone"
|
||||
msgstr ""
|
||||
|
||||
msgid "Default store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Consume this stock entry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Mark this stock entry as open"
|
||||
msgstr ""
|
||||
|
||||
msgid "Mark this item as done"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit this item"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this item"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show an icon if the product is already on the shopping list"
|
||||
msgstr ""
|
||||
|
@@ -3,6 +3,7 @@
|
||||
# Márk Kökény <oregapamgroup@gmail.com>, 2019
|
||||
# Bernd Bestel <bernd@berrnd.de>, 2020
|
||||
# Gábor Szellő <gabor.szello@gmail.com>, 2020
|
||||
# Gabor Pilsits <gabor.pilsits@gmail.com>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -10,7 +11,7 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01 17:42+0000\n"
|
||||
"Last-Translator: Gábor Szellő <gabor.szello@gmail.com>, 2020\n"
|
||||
"Last-Translator: Gabor Pilsits <gabor.pilsits@gmail.com>, 2020\n"
|
||||
"Language-Team: Hungarian (https://www.transifex.com/grocy/teams/93189/hu/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -348,7 +349,21 @@ msgid "Slovak"
|
||||
msgstr "Szlovák"
|
||||
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
msgstr "Cseh"
|
||||
|
||||
msgid "Portuguese (Portugal)"
|
||||
msgstr "Portugál"
|
||||
|
||||
# Use a in your country well known supermarket name
|
||||
msgid "DemoSupermarket1"
|
||||
msgstr "DemoSupermarket1"
|
||||
|
||||
# Use a in your country well known supermarket name
|
||||
msgid "DemoSupermarket2"
|
||||
msgstr "DemoSupermarket2"
|
||||
|
||||
msgid "Japanese"
|
||||
msgstr ""
|
||||
|
||||
msgid "Chinese (Taiwan)"
|
||||
msgstr ""
|
||||
|
@@ -3,8 +3,8 @@
|
||||
# Ádám Kovács <kovacsadam07@outlook.hu>, 2019
|
||||
# Peter Gyetvai <gyetpet@gmail.com>, 2020
|
||||
# Gábor Szellő <gabor.szello@gmail.com>, 2020
|
||||
# Gabor Pilsits <gabor.pilsits@gmail.com>, 2020
|
||||
# b i <balazs.izso@gesundheitscloud.de>, 2020
|
||||
# Gabor Pilsits <gabor.pilsits@gmail.com>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -12,7 +12,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: b i <balazs.izso@gesundheitscloud.de>, 2020\n"
|
||||
"Last-Translator: Gabor Pilsits <gabor.pilsits@gmail.com>, 2020\n"
|
||||
"Language-Team: Hungarian (https://www.transifex.com/grocy/teams/93189/hu/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -88,6 +88,9 @@ msgstr "Elemek követése"
|
||||
msgid "Locations"
|
||||
msgstr "Helyek"
|
||||
|
||||
msgid "Stores"
|
||||
msgstr "Boltok"
|
||||
|
||||
msgid "Quantity units"
|
||||
msgstr "Mennyiségi egységek"
|
||||
|
||||
@@ -226,6 +229,9 @@ msgstr "Vásárlás beszámítása a készlet mennyiségi egységbe"
|
||||
msgid "Create location"
|
||||
msgstr "Hely létrehozása"
|
||||
|
||||
msgid "Create store"
|
||||
msgstr "Áruház hozzáadása"
|
||||
|
||||
msgid "Create quantity unit"
|
||||
msgstr "Mennyiségi egység létrehozása"
|
||||
|
||||
@@ -259,6 +265,9 @@ msgstr "Termék szerkesztése"
|
||||
msgid "Edit location"
|
||||
msgstr "Hely szerkesztése"
|
||||
|
||||
msgid "Edit store"
|
||||
msgstr "Áruház szerkesztése"
|
||||
|
||||
msgid "Record data"
|
||||
msgstr "Adat rögzítése"
|
||||
|
||||
@@ -335,6 +344,9 @@ msgstr "Biztosan törölni szeretnéd a következő terméket: \"%s\"?"
|
||||
msgid "Are you sure to delete location \"%s\"?"
|
||||
msgstr "Biztosan törölni szeretnéd a következő helyet: \"%s\"?"
|
||||
|
||||
msgid "Are you sure to delete store \"%s\"?"
|
||||
msgstr "Biztos benne, hogy törli a \"%s\" áruházat? "
|
||||
|
||||
msgid "Manage API keys"
|
||||
msgstr "API kulcsok kezelése"
|
||||
|
||||
@@ -625,8 +637,8 @@ msgstr[1] "%s Egység"
|
||||
|
||||
msgid "%s chore is due to be done"
|
||||
msgid_plural "%s chores are due to be done"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "%sházimunkát(kat) kell elvégezni"
|
||||
msgstr[1] "%sházimunkát(kat) kell elvégezni"
|
||||
|
||||
msgid "%s chore is overdue to be done"
|
||||
msgid_plural "%s chores are overdue to be done"
|
||||
@@ -724,8 +736,8 @@ msgstr "Biztosan törölni szeretnéd a következő feladatot: \"%s\"?"
|
||||
|
||||
msgid "%s task is due to be done"
|
||||
msgid_plural "%s tasks are due to be done"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "%s feladatot(okat) kell elvégezni"
|
||||
msgstr[1] "%sfeladatot(okat) kell elvégezni"
|
||||
|
||||
msgid "%s task is overdue to be done"
|
||||
msgid_plural "%s tasks are overdue to be done"
|
||||
@@ -947,6 +959,7 @@ msgstr "Nem lehet negatív, és egész szám megadása szükséges"
|
||||
|
||||
msgid "Disable stock fulfillment checking for this ingredient"
|
||||
msgstr ""
|
||||
"Készlet rendelkezésre állás ellenőrzés kikapcsolása ehhez a hozzávalóhoz"
|
||||
|
||||
msgid "Add all list items to stock"
|
||||
msgstr "Összes listaelem hozzáadása készlethez"
|
||||
@@ -1093,6 +1106,9 @@ msgstr ""
|
||||
msgid "You have to select a location"
|
||||
msgstr "Ki kell választanod egy helyet"
|
||||
|
||||
msgid "You have to select a store"
|
||||
msgstr "Ki kell választanod egy áruházat"
|
||||
|
||||
msgid "List"
|
||||
msgstr "Lista"
|
||||
|
||||
@@ -1126,7 +1142,7 @@ msgstr "Rendszerinformáció"
|
||||
msgid "Changelog"
|
||||
msgstr "Változásnapló"
|
||||
|
||||
msgid "will be multiplied a factor of %1$s to get %2$s"
|
||||
msgid "will be multiplied by a factor of %1$s to get %2$s"
|
||||
msgstr ""
|
||||
|
||||
msgid "The given date is earlier than today, are you sure?"
|
||||
@@ -1188,7 +1204,7 @@ msgid "The amount must be between %1$s and %2$s"
|
||||
msgstr "A mennyiség %1$s és %2$s között kell lennie"
|
||||
|
||||
msgid "Day of month"
|
||||
msgstr ""
|
||||
msgstr "Hónap napja"
|
||||
|
||||
msgid "Monday"
|
||||
msgstr "Hétfő"
|
||||
@@ -1754,7 +1770,7 @@ msgid "Add note"
|
||||
msgstr "Jegyzet hozzáadása"
|
||||
|
||||
msgid "Add note on %s"
|
||||
msgstr ""
|
||||
msgstr "Megjegyzés hozzáadása %s-hoz/hez"
|
||||
|
||||
msgid "per day"
|
||||
msgstr "per nap"
|
||||
@@ -1858,7 +1874,7 @@ msgid "Edit recipe on %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Desired servings"
|
||||
msgstr ""
|
||||
msgstr "Kívánt adagok"
|
||||
|
||||
msgid "Base: %s"
|
||||
msgstr "Alap:%s"
|
||||
@@ -1871,3 +1887,33 @@ msgstr "Receptkártya"
|
||||
|
||||
msgid "Group ingredients by their product group"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unknown store"
|
||||
msgstr "Ismeretlen áruház"
|
||||
|
||||
msgid "Store"
|
||||
msgstr "Áruház"
|
||||
|
||||
msgid "Transaction successfully undone"
|
||||
msgstr ""
|
||||
|
||||
msgid "Default store"
|
||||
msgstr "Alapértelmezett áruház"
|
||||
|
||||
msgid "Consume this stock entry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Mark this stock entry as open"
|
||||
msgstr ""
|
||||
|
||||
msgid "Mark this item as done"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit this item"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this item"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show an icon if the product is already on the shopping list"
|
||||
msgstr ""
|
||||
|
@@ -342,13 +342,27 @@ msgid "Freezer"
|
||||
msgstr "Congelatore"
|
||||
|
||||
msgid "Hungarian"
|
||||
msgstr ""
|
||||
msgstr "Ungherese"
|
||||
|
||||
msgid "Slovak"
|
||||
msgstr ""
|
||||
msgstr "Slovacco"
|
||||
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
msgstr "Ceco"
|
||||
|
||||
msgid "Portuguese (Portugal)"
|
||||
msgstr ""
|
||||
msgstr "Portoghese (Portogallo)"
|
||||
|
||||
# Use a in your country well known supermarket name
|
||||
msgid "DemoSupermarket1"
|
||||
msgstr "DemoSupermercato1"
|
||||
|
||||
# Use a in your country well known supermarket name
|
||||
msgid "DemoSupermarket2"
|
||||
msgstr "DemoSupermercato2"
|
||||
|
||||
msgid "Japanese"
|
||||
msgstr "Giapponese"
|
||||
|
||||
msgid "Chinese (Taiwan)"
|
||||
msgstr "Cinese (Taiwan)"
|
||||
|
@@ -88,6 +88,9 @@ msgstr "Dati batterie"
|
||||
msgid "Locations"
|
||||
msgstr "Posizioni"
|
||||
|
||||
msgid "Stores"
|
||||
msgstr "Negozi"
|
||||
|
||||
msgid "Quantity units"
|
||||
msgstr "Unità di misura"
|
||||
|
||||
@@ -226,6 +229,9 @@ msgstr "Fattore di conversione tra unità di acquisto e di dispensa"
|
||||
msgid "Create location"
|
||||
msgstr "Aggiungi posizione"
|
||||
|
||||
msgid "Create store"
|
||||
msgstr "Crea negozio"
|
||||
|
||||
msgid "Create quantity unit"
|
||||
msgstr "Aggiungi unità di misura"
|
||||
|
||||
@@ -259,6 +265,9 @@ msgstr "Modifica prodotto"
|
||||
msgid "Edit location"
|
||||
msgstr "Modifica posizione"
|
||||
|
||||
msgid "Edit store"
|
||||
msgstr "Modifica negozio"
|
||||
|
||||
msgid "Record data"
|
||||
msgstr "Registra dati"
|
||||
|
||||
@@ -336,6 +345,9 @@ msgstr "Sei sicuro di voler eliminare il prodotto \"%s\"?"
|
||||
msgid "Are you sure to delete location \"%s\"?"
|
||||
msgstr "Sei sicuro di voler eliminare la posizione \"%s\"?"
|
||||
|
||||
msgid "Are you sure to delete store \"%s\"?"
|
||||
msgstr "Sei sicuro di voler eliminare il negozio \"%s\"?"
|
||||
|
||||
msgid "Manage API keys"
|
||||
msgstr "Gestisci le chiavi API"
|
||||
|
||||
@@ -1118,6 +1130,9 @@ msgstr ""
|
||||
msgid "You have to select a location"
|
||||
msgstr "Devi selezionare una posizione"
|
||||
|
||||
msgid "You have to select a store"
|
||||
msgstr "Devi selezionare un negozio"
|
||||
|
||||
msgid "List"
|
||||
msgstr "Elenco"
|
||||
|
||||
@@ -1151,7 +1166,7 @@ msgstr "Informazioni di sistema"
|
||||
msgid "Changelog"
|
||||
msgstr "Registro delle modifiche"
|
||||
|
||||
msgid "will be multiplied a factor of %1$s to get %2$s"
|
||||
msgid "will be multiplied by a factor of %1$s to get %2$s"
|
||||
msgstr "verrà moltiplicato per un fattore di %1$s per ottenere %2$s"
|
||||
|
||||
msgid "The given date is earlier than today, are you sure?"
|
||||
@@ -1344,7 +1359,7 @@ msgid "Meal plan"
|
||||
msgstr "Piano dei pasti"
|
||||
|
||||
msgid "Add recipe on %s"
|
||||
msgstr ""
|
||||
msgstr "Aggiungi ricetta a %s"
|
||||
|
||||
msgid "%s serving"
|
||||
msgid_plural "%s servings"
|
||||
@@ -1799,6 +1814,8 @@ msgid ""
|
||||
"Camera access is only possible when supported and allowed by your browser "
|
||||
"and when grocy is served via a secure (https://) connection"
|
||||
msgstr ""
|
||||
"L'accesso alla videocamera è possibile solo se supportato e consentito dal "
|
||||
"browser e quando grocy è connesso tramite una connessione sicura (https://)"
|
||||
|
||||
msgid "Keep screen on"
|
||||
msgstr "Mantieni lo schermo acceso"
|
||||
@@ -1834,7 +1851,7 @@ msgid "Add note"
|
||||
msgstr "Aggiungi nota"
|
||||
|
||||
msgid "Add note on %s"
|
||||
msgstr ""
|
||||
msgstr "Aggiungi nota a %s"
|
||||
|
||||
msgid "per day"
|
||||
msgstr "al giorno"
|
||||
@@ -1852,7 +1869,7 @@ msgid "Add product"
|
||||
msgstr "Aggiungi prodotto"
|
||||
|
||||
msgid "Add product on %s"
|
||||
msgstr ""
|
||||
msgstr "Aggiungi prodotto a %s"
|
||||
|
||||
msgid "Consume all ingredients needed by this weeks recipes or products"
|
||||
msgstr ""
|
||||
@@ -1926,37 +1943,69 @@ msgid "Frozen"
|
||||
msgstr "Congelato"
|
||||
|
||||
msgid "Are you sure to delete userentity \"%s\"?"
|
||||
msgstr ""
|
||||
msgstr "Sei sicuro di voler eliminare l'entità utente \"%s\"?"
|
||||
|
||||
msgid "Shopping list settings"
|
||||
msgstr ""
|
||||
msgstr "Impostazioni Lista della Spesa"
|
||||
|
||||
msgid "Show a month-view calendar"
|
||||
msgstr ""
|
||||
msgstr "Mostra un calendario con vista mensile"
|
||||
|
||||
msgid "Don't automatically switch to the compact view on mobile devices"
|
||||
msgstr ""
|
||||
"Non passare automaticamente alla visualizzazione compatta sui dispositivi "
|
||||
"mobili"
|
||||
|
||||
msgid "Edit note on %s"
|
||||
msgstr ""
|
||||
msgstr "Modifica nota a %s"
|
||||
|
||||
msgid "Edit product on %s"
|
||||
msgstr ""
|
||||
msgstr "Modifica prodotto a %s"
|
||||
|
||||
msgid "Edit recipe on %s"
|
||||
msgstr ""
|
||||
msgstr "Modifica ricetta a %s"
|
||||
|
||||
msgid "Desired servings"
|
||||
msgstr ""
|
||||
msgstr "Porzioni desiderate"
|
||||
|
||||
msgid "Base: %s"
|
||||
msgstr ""
|
||||
msgstr "Base: %s"
|
||||
|
||||
msgid "Recipes settings"
|
||||
msgstr ""
|
||||
msgstr "Impostazioni Ricette"
|
||||
|
||||
msgid "Recipe card"
|
||||
msgstr ""
|
||||
msgstr "Scheda ricetta"
|
||||
|
||||
msgid "Group ingredients by their product group"
|
||||
msgstr ""
|
||||
msgstr "Raggruppa gli ingredienti per il loro gruppo di prodotti"
|
||||
|
||||
msgid "Unknown store"
|
||||
msgstr "Negozio sconosciuto"
|
||||
|
||||
msgid "Store"
|
||||
msgstr "Negozio"
|
||||
|
||||
msgid "Transaction successfully undone"
|
||||
msgstr "Transazione annullata correttamente"
|
||||
|
||||
msgid "Default store"
|
||||
msgstr "Negozio predefinito"
|
||||
|
||||
msgid "Consume this stock entry"
|
||||
msgstr "Consuma questa voce di dispensa"
|
||||
|
||||
msgid "Mark this stock entry as open"
|
||||
msgstr "Segna questa voce di dispensa come aperta"
|
||||
|
||||
msgid "Mark this item as done"
|
||||
msgstr "Segna questo elemento come fatto"
|
||||
|
||||
msgid "Edit this item"
|
||||
msgstr "Modifica questo elemento"
|
||||
|
||||
msgid "Delete this item"
|
||||
msgstr "Elimina questo elemento"
|
||||
|
||||
msgid "Show an icon if the product is already on the shopping list"
|
||||
msgstr "Mostra un'icona se il prodotto è già nella lista della spesa"
|
||||
|
29
localization/ja/chore_assignment_types.po
Normal file
29
localization/ja/chore_assignment_types.po
Normal file
@@ -0,0 +1,29 @@
|
||||
# Translators:
|
||||
# EbXpJ6bp <ebxpj6bp@outlook.jp>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-09-17 10:45+0000\n"
|
||||
"Last-Translator: EbXpJ6bp <ebxpj6bp@outlook.jp>, 2020\n"
|
||||
"Language-Team: Japanese (https://www.transifex.com/grocy/teams/93189/ja/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: ja\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Domain: grocy/chore_assignment_types\n"
|
||||
|
||||
msgid "no-assignment"
|
||||
msgstr "割り当てなし"
|
||||
|
||||
msgid "who-least-did-first"
|
||||
msgstr "誰が最後にやったか"
|
||||
|
||||
msgid "random"
|
||||
msgstr "ランダム"
|
||||
|
||||
msgid "in-alphabetical-order"
|
||||
msgstr "アルファベット順"
|
35
localization/ja/chore_period_types.po
Normal file
35
localization/ja/chore_period_types.po
Normal file
@@ -0,0 +1,35 @@
|
||||
# Translators:
|
||||
# EbXpJ6bp <ebxpj6bp@outlook.jp>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01 17:42+0000\n"
|
||||
"Last-Translator: EbXpJ6bp <ebxpj6bp@outlook.jp>, 2020\n"
|
||||
"Language-Team: Japanese (https://www.transifex.com/grocy/teams/93189/ja/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: ja\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Domain: grocy/chore_types\n"
|
||||
|
||||
msgid "manually"
|
||||
msgstr "手動"
|
||||
|
||||
msgid "dynamic-regular"
|
||||
msgstr "ダイナミックレギュラー"
|
||||
|
||||
msgid "daily"
|
||||
msgstr "毎日"
|
||||
|
||||
msgid "weekly"
|
||||
msgstr "毎週"
|
||||
|
||||
msgid "monthly"
|
||||
msgstr "毎月"
|
||||
|
||||
msgid "yearly"
|
||||
msgstr "毎年"
|
45
localization/ja/component_translations.po
Normal file
45
localization/ja/component_translations.po
Normal file
@@ -0,0 +1,45 @@
|
||||
# Translators:
|
||||
# EbXpJ6bp <ebxpj6bp@outlook.jp>, 2020
|
||||
# Bernd Bestel <bernd@berrnd.de>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01 17:42+0000\n"
|
||||
"Last-Translator: Bernd Bestel <bernd@berrnd.de>, 2020\n"
|
||||
"Language-Team: Japanese (https://www.transifex.com/grocy/teams/93189/ja/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: ja\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Domain: grocy/component_translations\n"
|
||||
|
||||
msgid "timeago_locale"
|
||||
msgstr "ja"
|
||||
|
||||
msgid "timeago_nan"
|
||||
msgstr "約 NaN 年"
|
||||
|
||||
msgid "moment_locale"
|
||||
msgstr "ja"
|
||||
|
||||
msgid "datatables_localization"
|
||||
msgstr ""
|
||||
"{\"sEmptyTable\":\"テーブルにデータがありません\",\"sInfo\":\" _TOTAL_ 件中 _START_ から _END_"
|
||||
" まで表示\",\"sInfoEmpty\":\" 0 件中 0 から 0 まで表示\",\"sInfoFiltered\":\"(全 _MAX_ "
|
||||
"件より抽出)\",\"sInfoPostFix\":\"\",\"sInfoThousands\":\",\",\"sLengthMenu\":\"_MENU_"
|
||||
" "
|
||||
"件表示\",\"sLoadingRecords\":\"読み込み中...\",\"sProcessing\":\"処理中...\",\"sSearch\":\"検索:\",\"sZeroRecords\":\"一致するレコードがありません\",\"oPaginate\":{\"sFirst\":\"先頭\",\"sLast\":\"最終\",\"sNext\":\"次\",\"sPrevious\":\"前\"},\"oAria\":{\"sSortAscending\":\":"
|
||||
" 列を昇順に並べ替えるにはアクティブにする\",\"sSortDescending\":\": 列を降順に並べ替えるにはアクティブにする\"}}"
|
||||
|
||||
msgid "summernote_locale"
|
||||
msgstr "ja-JP"
|
||||
|
||||
msgid "fullcalendar_locale"
|
||||
msgstr "ja"
|
||||
|
||||
msgid "bootstrap-select_locale"
|
||||
msgstr "ja_JP"
|
352
localization/ja/demo_data.po
Normal file
352
localization/ja/demo_data.po
Normal file
@@ -0,0 +1,352 @@
|
||||
# Translators:
|
||||
# EbXpJ6bp <ebxpj6bp@outlook.jp>, 2020
|
||||
# 鳥山 陽平 <kagemomiji@gmail.com>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01 17:42+0000\n"
|
||||
"Last-Translator: 鳥山 陽平 <kagemomiji@gmail.com>, 2020\n"
|
||||
"Language-Team: Japanese (https://www.transifex.com/grocy/teams/93189/ja/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: ja\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Domain: grocy/demo_data\n"
|
||||
|
||||
msgid "Cookies"
|
||||
msgstr "クッキー"
|
||||
|
||||
msgid "Chocolate"
|
||||
msgstr "チョコレート"
|
||||
|
||||
msgid "Pantry"
|
||||
msgstr "パントリー"
|
||||
|
||||
msgid "Candy cupboard"
|
||||
msgstr "お菓子棚"
|
||||
|
||||
msgid "Tinned food cupboard"
|
||||
msgstr "缶詰の保管棚"
|
||||
|
||||
msgid "Fridge"
|
||||
msgstr "冷蔵庫"
|
||||
|
||||
msgid "Piece"
|
||||
msgid_plural "Pieces"
|
||||
msgstr[0] "ピース"
|
||||
|
||||
msgid "Pack"
|
||||
msgid_plural "Packs"
|
||||
msgstr[0] "パック"
|
||||
|
||||
msgid "Glass"
|
||||
msgid_plural "Glasses"
|
||||
msgstr[0] "眼鏡"
|
||||
|
||||
msgid "Tin"
|
||||
msgid_plural "Tins"
|
||||
msgstr[0] "小缶"
|
||||
|
||||
msgid "Can"
|
||||
msgid_plural "Cans"
|
||||
msgstr[0] "カン"
|
||||
|
||||
msgid "Bunch"
|
||||
msgid_plural "Bunches"
|
||||
msgstr[0] "房"
|
||||
|
||||
msgid "Gummy bears"
|
||||
msgstr "グミベア"
|
||||
|
||||
msgid "Crisps"
|
||||
msgstr "チップス"
|
||||
|
||||
msgid "Eggs"
|
||||
msgstr "卵"
|
||||
|
||||
msgid "Noodles"
|
||||
msgstr "麺類"
|
||||
|
||||
msgid "Pickles"
|
||||
msgstr "ピクルス"
|
||||
|
||||
msgid "Gulash soup"
|
||||
msgstr "グヤーシュ"
|
||||
|
||||
msgid "Yogurt"
|
||||
msgstr "ヨーグルト"
|
||||
|
||||
msgid "Cheese"
|
||||
msgstr "チーズ"
|
||||
|
||||
msgid "Cold cuts"
|
||||
msgstr "コールドカット"
|
||||
|
||||
msgid "Paprika"
|
||||
msgstr "パプリカ"
|
||||
|
||||
msgid "Cucumber"
|
||||
msgstr "きゅうり"
|
||||
|
||||
msgid "Radish"
|
||||
msgstr "だいこん"
|
||||
|
||||
msgid "Tomato"
|
||||
msgstr "トマト"
|
||||
|
||||
msgid "Changed towels in the bathroom"
|
||||
msgstr "浴室のタオルを変更"
|
||||
|
||||
msgid "Cleaned the kitchen floor"
|
||||
msgstr "キッチンの床掃除"
|
||||
|
||||
msgid "Warranty ends"
|
||||
msgstr "保証終了"
|
||||
|
||||
msgid "TV remote control"
|
||||
msgstr "TV リモコン"
|
||||
|
||||
msgid "Alarm clock"
|
||||
msgstr "時計のアラーム"
|
||||
|
||||
msgid "Heat remote control"
|
||||
msgstr "ヒータのリモコン"
|
||||
|
||||
msgid "Lawn mowed in the garden"
|
||||
msgstr "庭の芝刈り"
|
||||
|
||||
msgid "Some good snacks"
|
||||
msgstr "おやつ"
|
||||
|
||||
msgid "Pizza dough"
|
||||
msgstr "ピザ生地"
|
||||
|
||||
msgid "Sieved tomatoes"
|
||||
msgstr "トマトペースト"
|
||||
|
||||
msgid "Salami"
|
||||
msgstr "サラミ"
|
||||
|
||||
msgid "Toast"
|
||||
msgstr "トースト"
|
||||
|
||||
msgid "Minced meat"
|
||||
msgstr "ひき肉"
|
||||
|
||||
msgid "Pizza"
|
||||
msgstr "ピザ"
|
||||
|
||||
msgid "Spaghetti bolognese"
|
||||
msgstr "ボロネーゼスパゲッティ"
|
||||
|
||||
msgid "Sandwiches"
|
||||
msgstr "サンドイッチ"
|
||||
|
||||
msgid "English"
|
||||
msgstr "英語"
|
||||
|
||||
msgid "German"
|
||||
msgstr "ドイツ語"
|
||||
|
||||
msgid "Italian"
|
||||
msgstr "イタリア語"
|
||||
|
||||
msgid "This is the note content of the recipe ingredient"
|
||||
msgstr "レシピの材料のノート"
|
||||
|
||||
msgid "Demo User"
|
||||
msgstr "デモユーザー"
|
||||
|
||||
msgid "Gram"
|
||||
msgid_plural "Grams"
|
||||
msgstr[0] "グラム"
|
||||
|
||||
msgid "Flour"
|
||||
msgstr "小麦粉"
|
||||
|
||||
msgid "Pancakes"
|
||||
msgstr "パンケーキ"
|
||||
|
||||
msgid "Sugar"
|
||||
msgstr "砂糖"
|
||||
|
||||
msgid "Home"
|
||||
msgstr "家"
|
||||
|
||||
msgid "Life"
|
||||
msgstr "生活"
|
||||
|
||||
msgid "Projects"
|
||||
msgstr "プロジェクト"
|
||||
|
||||
msgid "Repair the garage door"
|
||||
msgstr "ガレージのドアを修復"
|
||||
|
||||
msgid "Fork and improve grocy"
|
||||
msgstr "grocy をフォークして改善"
|
||||
|
||||
msgid "Find a solution for what to do when I forget the door keys"
|
||||
msgstr "ドアの鍵を忘れたときの解決策を見つける"
|
||||
|
||||
msgid "Sweets"
|
||||
msgstr "お菓子"
|
||||
|
||||
msgid "Bakery products"
|
||||
msgstr "パン食品"
|
||||
|
||||
msgid "Tinned food"
|
||||
msgstr "缶詰"
|
||||
|
||||
msgid "Butchery products"
|
||||
msgstr "肉食品"
|
||||
|
||||
msgid "Vegetables/Fruits"
|
||||
msgstr "野菜/フルーツ"
|
||||
|
||||
msgid "Refrigerated products"
|
||||
msgstr "冷凍食品"
|
||||
|
||||
msgid "Coffee machine"
|
||||
msgstr "コーヒー マシーン"
|
||||
|
||||
msgid "Dishwasher"
|
||||
msgstr "食器洗い機"
|
||||
|
||||
msgid "Liter"
|
||||
msgstr "リットル"
|
||||
|
||||
msgid "Liters"
|
||||
msgstr "リットル"
|
||||
|
||||
msgid "Bottle"
|
||||
msgstr "本"
|
||||
|
||||
msgid "Bottles"
|
||||
msgstr "本"
|
||||
|
||||
msgid "Milk"
|
||||
msgstr "ミルク"
|
||||
|
||||
msgid "Chocolate sauce"
|
||||
msgstr "チョコレート ソース"
|
||||
|
||||
msgid "Milliliters"
|
||||
msgstr "ミリリットル"
|
||||
|
||||
msgid "Milliliter"
|
||||
msgstr "ミリリットル"
|
||||
|
||||
msgid "Bottom"
|
||||
msgstr "底"
|
||||
|
||||
msgid "Topping"
|
||||
msgstr "トッピング"
|
||||
|
||||
msgid "French"
|
||||
msgstr "フランス語"
|
||||
|
||||
msgid "Turkish"
|
||||
msgstr "トルコ語"
|
||||
|
||||
msgid "Spanish"
|
||||
msgstr "スペイン語"
|
||||
|
||||
msgid "Russian"
|
||||
msgstr "ロシア語"
|
||||
|
||||
msgid "The thing which happens on the 5th of every month"
|
||||
msgstr "毎月5日に起こること"
|
||||
|
||||
msgid "The thing which happens daily"
|
||||
msgstr "毎日起こること"
|
||||
|
||||
msgid "The thing which happens on Mondays and Wednesdays"
|
||||
msgstr "月曜日と水曜日に起こること"
|
||||
|
||||
msgid "Swedish"
|
||||
msgstr "スウェーデン語"
|
||||
|
||||
msgid "Polish"
|
||||
msgstr "ポーランド語"
|
||||
|
||||
msgid "Milk Chocolate"
|
||||
msgstr "ミルク チョコレート"
|
||||
|
||||
msgid "Dark Chocolate"
|
||||
msgstr "ダーク チョコレート"
|
||||
|
||||
msgid "Slice"
|
||||
msgid_plural "Slices"
|
||||
msgstr[0] "枚"
|
||||
|
||||
msgid "Example userentity"
|
||||
msgstr "ユーザーエントリーの例"
|
||||
|
||||
msgid "This is an example user entity..."
|
||||
msgstr "これはユーザー エントリーの例です..."
|
||||
|
||||
msgid "Custom field"
|
||||
msgstr "カスタム フィールド"
|
||||
|
||||
msgid "Example field value..."
|
||||
msgstr "フィールド値の例..."
|
||||
|
||||
msgid "Waffle rolls"
|
||||
msgstr "ワッフル・ロール"
|
||||
|
||||
msgid "Danish"
|
||||
msgstr "デンマーク語"
|
||||
|
||||
msgid "Dutch"
|
||||
msgstr "オランダ語"
|
||||
|
||||
msgid "Norwegian"
|
||||
msgstr "ノルウェー語"
|
||||
|
||||
msgid "Demo"
|
||||
msgstr "デモ"
|
||||
|
||||
msgid "Stable version"
|
||||
msgstr "安定板"
|
||||
|
||||
msgid "Preview version"
|
||||
msgstr "プレビュー版"
|
||||
|
||||
msgid "current release"
|
||||
msgstr "リリース済み"
|
||||
|
||||
msgid "not yet released"
|
||||
msgstr "未リリース"
|
||||
|
||||
msgid "Portuguese (Brazil)"
|
||||
msgstr "ポルトガル語 (ブラジル)"
|
||||
|
||||
msgid "This is a note"
|
||||
msgstr "てすと"
|
||||
|
||||
msgid "Freezer"
|
||||
msgstr "冷凍庫"
|
||||
|
||||
msgid "Hungarian"
|
||||
msgstr "ハンガリー語"
|
||||
|
||||
msgid "Slovak"
|
||||
msgstr "スロバキア語"
|
||||
|
||||
msgid "Czech"
|
||||
msgstr "チェコ語"
|
||||
|
||||
msgid "Portuguese (Portugal)"
|
||||
msgstr "ポルトガル語 (ポルトガル)"
|
||||
|
||||
# Use a in your country well known supermarket name
|
||||
msgid "DemoSupermarket1"
|
||||
msgstr "イオン1"
|
||||
|
||||
# Use a in your country well known supermarket name
|
||||
msgid "DemoSupermarket2"
|
||||
msgstr "イオン2"
|
1863
localization/ja/strings.po
Normal file
1863
localization/ja/strings.po
Normal file
File diff suppressed because it is too large
Load Diff
47
localization/ja/userfield_types.po
Normal file
47
localization/ja/userfield_types.po
Normal file
@@ -0,0 +1,47 @@
|
||||
# Translators:
|
||||
# 鳥山 陽平 <kagemomiji@gmail.com>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01 17:43+0000\n"
|
||||
"Last-Translator: 鳥山 陽平 <kagemomiji@gmail.com>, 2020\n"
|
||||
"Language-Team: Japanese (https://www.transifex.com/grocy/teams/93189/ja/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: ja\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Domain: grocy/userfield_types\n"
|
||||
|
||||
msgid "text-single-line"
|
||||
msgstr "1行のテキスト"
|
||||
|
||||
msgid "text-multi-line"
|
||||
msgstr "複数行のテキスト"
|
||||
|
||||
msgid "number-integral"
|
||||
msgstr "整数"
|
||||
|
||||
msgid "number-decimal"
|
||||
msgstr "小数"
|
||||
|
||||
msgid "date"
|
||||
msgstr "日付"
|
||||
|
||||
msgid "datetime"
|
||||
msgstr "日時"
|
||||
|
||||
msgid "checkbox"
|
||||
msgstr "チェックボックス"
|
||||
|
||||
msgid "preset-list"
|
||||
msgstr "既定のリスト"
|
||||
|
||||
msgid "preset-checklist"
|
||||
msgstr "既定のチェックリスト"
|
||||
|
||||
msgid "link"
|
||||
msgstr "リンク"
|
@@ -354,7 +354,21 @@ msgid "Slovak"
|
||||
msgstr "Slovaaks"
|
||||
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
msgstr "Tsjechisch"
|
||||
|
||||
msgid "Portuguese (Portugal)"
|
||||
msgstr "Portugees (Portugal)"
|
||||
|
||||
# Use a in your country well known supermarket name
|
||||
msgid "DemoSupermarket1"
|
||||
msgstr ""
|
||||
|
||||
# Use a in your country well known supermarket name
|
||||
msgid "DemoSupermarket2"
|
||||
msgstr ""
|
||||
|
||||
msgid "Japanese"
|
||||
msgstr ""
|
||||
|
||||
msgid "Chinese (Taiwan)"
|
||||
msgstr ""
|
||||
|
@@ -11,9 +11,9 @@
|
||||
# Frank Klaassen <frank@frankklaassen.nl>, 2019
|
||||
# Kees van Nieuwenhuijzen <kees@vannieuwenhuijzen.com>, 2019
|
||||
# Boding Clockchain <joost_nl@live.nl>, 2020
|
||||
# Daniel Polders <zigurana@gmail.com>, 2020
|
||||
# Bastien Van Houdt <bastienvanhoudt@gmail.com>, 2020
|
||||
# gggg <bashankamp@gmail.com>, 2020
|
||||
# Bastien Van Houdt <bastienvanhoudt@gmail.com>, 2020
|
||||
# D. Polders <zigurana@gmail.com>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -21,7 +21,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: gggg <bashankamp@gmail.com>, 2020\n"
|
||||
"Last-Translator: D. Polders <zigurana@gmail.com>, 2020\n"
|
||||
"Language-Team: Dutch (https://www.transifex.com/grocy/teams/93189/nl/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -41,7 +41,7 @@ msgstr[1] "%s producten verlopen"
|
||||
msgid "within the next day"
|
||||
msgid_plural "within the next %s days"
|
||||
msgstr[0] "tussen nu en morgen"
|
||||
msgstr[1] "in de komende %s dagen"
|
||||
msgstr[1] "binnen %s dagen"
|
||||
|
||||
msgid "%s product is already expired"
|
||||
msgid_plural "%s products are already expired"
|
||||
@@ -97,6 +97,9 @@ msgstr "Batterij volgen"
|
||||
msgid "Locations"
|
||||
msgstr "Locaties"
|
||||
|
||||
msgid "Stores"
|
||||
msgstr ""
|
||||
|
||||
msgid "Quantity units"
|
||||
msgstr "Hoeveelheidseenheden"
|
||||
|
||||
@@ -235,6 +238,9 @@ msgstr "Factor van aankoop- naar voorraadeenheid"
|
||||
msgid "Create location"
|
||||
msgstr "Maak een locatie"
|
||||
|
||||
msgid "Create store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create quantity unit"
|
||||
msgstr "Maak hoeveelheidseenheid"
|
||||
|
||||
@@ -268,6 +274,9 @@ msgstr "Bewerk product"
|
||||
msgid "Edit location"
|
||||
msgstr "Wijzig locatie"
|
||||
|
||||
msgid "Edit store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Record data"
|
||||
msgstr "Gegevens opslaan"
|
||||
|
||||
@@ -346,6 +355,9 @@ msgstr "Weet u zeker dat u product \"%s\" wilt verwijderen?"
|
||||
msgid "Are you sure to delete location \"%s\"?"
|
||||
msgstr "Weet u zeker dat u locatie \"%s\" wilt verwijderen?"
|
||||
|
||||
msgid "Are you sure to delete store \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manage API keys"
|
||||
msgstr "Beheer API sleutels"
|
||||
|
||||
@@ -634,12 +646,12 @@ msgstr[1] "%seenheden"
|
||||
msgid "%s chore is due to be done"
|
||||
msgid_plural "%s chores are due to be done"
|
||||
msgstr[0] "%sklusje is om uitgevoerd te worden"
|
||||
msgstr[1] "%sklussen moeten worden gedaan"
|
||||
msgstr[1] "%s klussen om te doen"
|
||||
|
||||
msgid "%s chore is overdue to be done"
|
||||
msgid_plural "%s chores are overdue to be done"
|
||||
msgstr[0] "%sklus moet nog gedaan worden"
|
||||
msgstr[1] "%sklussen moeten nog steeds gedaan worden"
|
||||
msgstr[1] "%s achterstallige klussen te doen"
|
||||
|
||||
msgid "%s battery is due to be charged"
|
||||
msgid_plural "%s batteries are due to be charged"
|
||||
@@ -712,7 +724,7 @@ msgid "Assigned to"
|
||||
msgstr "Toegewezen aan"
|
||||
|
||||
msgid "Mark task \"%s\" as completed"
|
||||
msgstr "Klusje \"%s\" als afgewerkt aanduiden"
|
||||
msgstr "Taak \"%s\" als voltooid aanduiden"
|
||||
|
||||
msgid "Uncategorized"
|
||||
msgstr "Ongecategoriseerd"
|
||||
@@ -738,12 +750,12 @@ msgstr "Weet u zeker dat u taak \"%s\" wilt verwijderen?"
|
||||
msgid "%s task is due to be done"
|
||||
msgid_plural "%s tasks are due to be done"
|
||||
msgstr[0] "%staak moet uitgevoerd worden"
|
||||
msgstr[1] "%staken moeten uitgevoerd worden"
|
||||
msgstr[1] "%s taken te doen"
|
||||
|
||||
msgid "%s task is overdue to be done"
|
||||
msgid_plural "%s tasks are overdue to be done"
|
||||
msgstr[0] "%staak moet nog uitgevoerd worden"
|
||||
msgstr[1] "%staken moeten nog uitgevoerd worden"
|
||||
msgstr[1] "%s achterstallige taken te doen"
|
||||
|
||||
msgid "Edit task category"
|
||||
msgstr "Bewerk taakcategorie"
|
||||
@@ -782,16 +794,16 @@ msgid "Below min. stock amount"
|
||||
msgstr "Onder min. voorraadhoeveelheid"
|
||||
|
||||
msgid "Expiring soon"
|
||||
msgstr "Vervalt binnenkort"
|
||||
msgstr "Verloopt binnenkort"
|
||||
|
||||
msgid "Already expired"
|
||||
msgstr "Al verlopen"
|
||||
|
||||
msgid "Due soon"
|
||||
msgstr "Bij over tijd"
|
||||
msgstr "Bijna gepland"
|
||||
|
||||
msgid "Overdue"
|
||||
msgstr "Over tijd"
|
||||
msgstr "Achterstallig"
|
||||
|
||||
msgid "View settings"
|
||||
msgstr "Beeld instellingen"
|
||||
@@ -1013,7 +1025,7 @@ msgid "Product expires"
|
||||
msgstr "Product vervalt"
|
||||
|
||||
msgid "Task due"
|
||||
msgstr "Klusje open"
|
||||
msgstr "Taak te doen"
|
||||
|
||||
msgid "Chore due"
|
||||
msgstr "Klus tegen"
|
||||
@@ -1125,6 +1137,9 @@ msgstr ""
|
||||
msgid "You have to select a location"
|
||||
msgstr "Je moet een locatie selecteren"
|
||||
|
||||
msgid "You have to select a store"
|
||||
msgstr ""
|
||||
|
||||
msgid "List"
|
||||
msgstr "Lijst"
|
||||
|
||||
@@ -1159,8 +1174,8 @@ msgstr "Systeeminfo"
|
||||
msgid "Changelog"
|
||||
msgstr "Changelog"
|
||||
|
||||
msgid "will be multiplied a factor of %1$s to get %2$s"
|
||||
msgstr "wordt vermenigvuldigd met een factor %1$s om er %2$s van te krijgen"
|
||||
msgid "will be multiplied by a factor of %1$s to get %2$s"
|
||||
msgstr ""
|
||||
|
||||
msgid "The given date is earlier than today, are you sure?"
|
||||
msgstr "De opgegeven datum is eerder dan vandaag; weet je het zeker?"
|
||||
@@ -1570,7 +1585,7 @@ msgstr "Voor dit toewijzingstype moet er minstens één worden toegewezen"
|
||||
msgid "%s chore is assigned to me"
|
||||
msgid_plural "%s chores are assigned to me"
|
||||
msgstr[0] "%s klusje is toegewezen aan mij"
|
||||
msgstr[1] "%sklussen zijn toegewezen aan mij"
|
||||
msgstr[1] "%s klussen toegewezen aan mij"
|
||||
|
||||
msgid "Assigned to me"
|
||||
msgstr "Toegewezen aan mij"
|
||||
@@ -1803,6 +1818,8 @@ msgid ""
|
||||
"Camera access is only possible when supported and allowed by your browser "
|
||||
"and when grocy is served via a secure (https://) connection"
|
||||
msgstr ""
|
||||
"Cameratoegang is alleen mogelijk als uw browser dit ondersteunt en toelaat "
|
||||
"en wanneer u verbindt met grocy via een beveiligde verbinding (https://)."
|
||||
|
||||
msgid "Keep screen on"
|
||||
msgstr "Houd scherm aan"
|
||||
@@ -1963,3 +1980,33 @@ msgstr "Receptfiche"
|
||||
|
||||
msgid "Group ingredients by their product group"
|
||||
msgstr "Groepeer ingrediënten per productcategorie"
|
||||
|
||||
msgid "Unknown store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Transaction successfully undone"
|
||||
msgstr ""
|
||||
|
||||
msgid "Default store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Consume this stock entry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Mark this stock entry as open"
|
||||
msgstr ""
|
||||
|
||||
msgid "Mark this item as done"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit this item"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this item"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show an icon if the product is already on the shopping list"
|
||||
msgstr ""
|
||||
|
@@ -346,7 +346,21 @@ msgid "Slovak"
|
||||
msgstr "Slovakisk"
|
||||
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
msgstr "Tjekkisk"
|
||||
|
||||
msgid "Portuguese (Portugal)"
|
||||
msgstr "Portugisisk (Portugal)"
|
||||
|
||||
# Use a in your country well known supermarket name
|
||||
msgid "DemoSupermarket1"
|
||||
msgstr ""
|
||||
|
||||
# Use a in your country well known supermarket name
|
||||
msgid "DemoSupermarket2"
|
||||
msgstr ""
|
||||
|
||||
msgid "Japanese"
|
||||
msgstr ""
|
||||
|
||||
msgid "Chinese (Taiwan)"
|
||||
msgstr ""
|
||||
|
@@ -29,10 +29,10 @@ msgid "consume"
|
||||
msgstr "forbruk"
|
||||
|
||||
msgid "inventory-correction"
|
||||
msgstr "beholdningsantall korreksjon"
|
||||
msgstr "beholdningsantall_korreksjon"
|
||||
|
||||
msgid "product-opened"
|
||||
msgstr "produkt åpnet"
|
||||
msgstr "produkt_åpnet"
|
||||
|
||||
msgid "stock-edit-old"
|
||||
msgstr "beholdning_endre_gammel"
|
||||
|
@@ -85,6 +85,9 @@ msgstr "Batteriregistrering"
|
||||
msgid "Locations"
|
||||
msgstr "Lokasjoner"
|
||||
|
||||
msgid "Stores"
|
||||
msgstr ""
|
||||
|
||||
msgid "Quantity units"
|
||||
msgstr "Forpakning"
|
||||
|
||||
@@ -207,7 +210,7 @@ msgid "Minimum stock amount"
|
||||
msgstr "Minimumsbeholdning"
|
||||
|
||||
msgid "Default best before days"
|
||||
msgstr "Standard for antall dager best før"
|
||||
msgstr "Forhåndsatt antall dager best før"
|
||||
|
||||
msgid "Quantity unit purchase"
|
||||
msgstr "Forpakning kjøpt"
|
||||
@@ -221,6 +224,9 @@ msgstr "Innkjøpsfaktor for forpakning"
|
||||
msgid "Create location"
|
||||
msgstr "Opprett lokasjon"
|
||||
|
||||
msgid "Create store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create quantity unit"
|
||||
msgstr "Opprett forpakning"
|
||||
|
||||
@@ -254,6 +260,9 @@ msgstr "Endre produkt"
|
||||
msgid "Edit location"
|
||||
msgstr "Endre lokasjon"
|
||||
|
||||
msgid "Edit store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Record data"
|
||||
msgstr "Logg handlinger"
|
||||
|
||||
@@ -329,6 +338,9 @@ msgstr "Er du sikker du ønsker å slette produkt \"%s\"?"
|
||||
msgid "Are you sure to delete location \"%s\"?"
|
||||
msgstr "Er du sikker du ønsker å slette lokasjon \"%s\"?"
|
||||
|
||||
msgid "Are you sure to delete store \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manage API keys"
|
||||
msgstr "Administrer API-Keys"
|
||||
|
||||
@@ -867,7 +879,7 @@ msgid "Filter by product group"
|
||||
msgstr "Filtrér etter produktgruppe"
|
||||
|
||||
msgid "Presets for new products"
|
||||
msgstr "Standard for nye produkter"
|
||||
msgstr "Forhåndsatt for nye produkter"
|
||||
|
||||
msgid "Included recipes"
|
||||
msgstr "Inkludert oppskrift"
|
||||
@@ -968,7 +980,7 @@ msgstr ""
|
||||
"dato + antall dager under"
|
||||
|
||||
msgid "Default best before days after opened"
|
||||
msgstr "Standard best før dager etter åpnet"
|
||||
msgstr "Forhåndsatt best før dager etter åpnet"
|
||||
|
||||
msgid "Marked %1$s of %2$s as opened"
|
||||
msgstr "Merket %1$s av %2$s som åpnet"
|
||||
@@ -1011,7 +1023,7 @@ msgid ""
|
||||
"shopping list item, if the product has \"Default best before days\" set"
|
||||
msgstr ""
|
||||
"Legg produkter automatisk til fra handlelisten. Dette vil bruke siste brukte"
|
||||
" innkjøpspris og forutsetter at \"Standard for antall dager best før\" er "
|
||||
" innkjøpspris og forutsetter at \"Forhåndsatt antall dager best før\" er "
|
||||
"satt"
|
||||
|
||||
msgid "Skip"
|
||||
@@ -1098,6 +1110,9 @@ msgstr ""
|
||||
msgid "You have to select a location"
|
||||
msgstr "Du må velge en lokasjon"
|
||||
|
||||
msgid "You have to select a store"
|
||||
msgstr ""
|
||||
|
||||
msgid "List"
|
||||
msgstr "Liste"
|
||||
|
||||
@@ -1131,8 +1146,8 @@ msgstr "System info"
|
||||
msgid "Changelog"
|
||||
msgstr "Change Log"
|
||||
|
||||
msgid "will be multiplied a factor of %1$s to get %2$s"
|
||||
msgstr "Vil bli ganget med %1$s for å få %2$s"
|
||||
msgid "will be multiplied by a factor of %1$s to get %2$s"
|
||||
msgstr ""
|
||||
|
||||
msgid "The given date is earlier than today, are you sure?"
|
||||
msgstr ""
|
||||
@@ -1151,7 +1166,7 @@ msgid ""
|
||||
"This will be used as the default setting when adding this product as a "
|
||||
"recipe ingredient"
|
||||
msgstr ""
|
||||
"Dette vil bli brukt som standard innstilling når dette produktet blir brukt "
|
||||
"Dette vil bli brukt som forhåndsinnstilling når dette produktet blir brukt "
|
||||
"som ingrediens i en oppskrift"
|
||||
|
||||
msgid "Add item"
|
||||
@@ -1323,7 +1338,7 @@ msgid "Meal plan"
|
||||
msgstr "Middagsplanlegger"
|
||||
|
||||
msgid "Add recipe on %s"
|
||||
msgstr ""
|
||||
msgstr "Legg oppskrift til %s"
|
||||
|
||||
msgid "%s serving"
|
||||
msgid_plural "%s servings"
|
||||
@@ -1653,7 +1668,7 @@ msgid "Display recipe"
|
||||
msgstr "Vis oppskrift"
|
||||
|
||||
msgid "Accumulate sub products min. stock amount"
|
||||
msgstr "Akkumulert underprodukter minimum beholdningsnivå"
|
||||
msgstr "Akkumuler underordnede produkter i minimum beholdningsnivå"
|
||||
|
||||
msgid ""
|
||||
"If enabled, the min. stock amount of sub products will be accumulated into "
|
||||
@@ -1661,8 +1676,8 @@ msgid ""
|
||||
"product"
|
||||
msgstr ""
|
||||
"Hvis aktivert vil minimum beholdningsnivå av under produkter bli akkumulert "
|
||||
"inn i dette produktet. Dette betyr at under produktet aldri vil \"mangle\", "
|
||||
"kunne dette produktet."
|
||||
"inn i dette produktet. Dette betyr at underordnede produktet aldri vil "
|
||||
"\"mangle\", kunne dette produktet."
|
||||
|
||||
msgid "Are you sure to remove this conversion?"
|
||||
msgstr "Er du sikker på at du ønsker å fjerne denne konverteringen?"
|
||||
@@ -1680,7 +1695,7 @@ msgid "Unlimited"
|
||||
msgstr "Evig"
|
||||
|
||||
msgid "Clear"
|
||||
msgstr "Tøm"
|
||||
msgstr "Slett"
|
||||
|
||||
msgid "Are you sure to remove the included recipe \"%s\"?"
|
||||
msgstr "Er du sikker du ønsker å slette den inkluderte oppskriften \"%s\"?"
|
||||
@@ -1769,6 +1784,8 @@ msgid ""
|
||||
"Camera access is only possible when supported and allowed by your browser "
|
||||
"and when grocy is served via a secure (https://) connection"
|
||||
msgstr ""
|
||||
"Tilgang til kamera er kun mulig når det er støttet og når nettleseren din "
|
||||
"tillater det og når grocy kjøres gjennom en sikker tilkobling (https://)"
|
||||
|
||||
msgid "Keep screen on"
|
||||
msgstr "Skjerm alltid på"
|
||||
@@ -1802,7 +1819,7 @@ msgid "Add note"
|
||||
msgstr "Legg til notat"
|
||||
|
||||
msgid "Add note on %s"
|
||||
msgstr ""
|
||||
msgstr "Legg notat til %s"
|
||||
|
||||
msgid "per day"
|
||||
msgstr "per dag"
|
||||
@@ -1820,7 +1837,7 @@ msgid "Add product"
|
||||
msgstr "Legg til produkt"
|
||||
|
||||
msgid "Add product on %s"
|
||||
msgstr ""
|
||||
msgstr "Legg produkt til %s"
|
||||
|
||||
msgid "Consume all ingredients needed by this weeks recipes or products"
|
||||
msgstr ""
|
||||
@@ -1867,7 +1884,7 @@ msgstr ""
|
||||
"fryses), endres best før datoen fra i dag + antall dager under"
|
||||
|
||||
msgid "Default best before days after freezing"
|
||||
msgstr "Standard best før dager etter frysing"
|
||||
msgstr "Forhåndssatt best før dager etter frysing"
|
||||
|
||||
msgid ""
|
||||
"On moving this product from a freezer location (so when thawing it), the "
|
||||
@@ -1877,7 +1894,7 @@ msgstr ""
|
||||
"tines), endres best før datoen fra i dag + antall dager under"
|
||||
|
||||
msgid "Default best before days after thawing"
|
||||
msgstr "Standard best før dager etter tining"
|
||||
msgstr "Forhåndsatt best før dager etter tining"
|
||||
|
||||
msgid "This cannot be the same as the \"From\" location"
|
||||
msgstr "Dette kan ikke være det som \"Fra\" lokasjonen"
|
||||
@@ -1892,34 +1909,64 @@ msgid "Are you sure to delete userentity \"%s\"?"
|
||||
msgstr "Er du sikker på at du ønsker slette userentity \"%s\"?"
|
||||
|
||||
msgid "Shopping list settings"
|
||||
msgstr ""
|
||||
msgstr "Handleliste - innstillinger"
|
||||
|
||||
msgid "Show a month-view calendar"
|
||||
msgstr ""
|
||||
msgstr "Vis månedsoverblikk for kalenderen "
|
||||
|
||||
msgid "Don't automatically switch to the compact view on mobile devices"
|
||||
msgstr ""
|
||||
msgstr "Ikke bytt til kompakt visning automatisk når du er på en mobil enhet"
|
||||
|
||||
msgid "Edit note on %s"
|
||||
msgstr ""
|
||||
msgstr "Endre notat for den %s"
|
||||
|
||||
msgid "Edit product on %s"
|
||||
msgstr ""
|
||||
msgstr "Endre produkt for den %s"
|
||||
|
||||
msgid "Edit recipe on %s"
|
||||
msgstr ""
|
||||
msgstr "Endre produkt for den %s"
|
||||
|
||||
msgid "Desired servings"
|
||||
msgstr ""
|
||||
msgstr "Ønskede porsjoner"
|
||||
|
||||
msgid "Base: %s"
|
||||
msgstr ""
|
||||
msgstr "Base: %s"
|
||||
|
||||
msgid "Recipes settings"
|
||||
msgstr ""
|
||||
msgstr "Opprkifter - innstillinger"
|
||||
|
||||
msgid "Recipe card"
|
||||
msgstr ""
|
||||
msgstr "Oppskrift kort"
|
||||
|
||||
msgid "Group ingredients by their product group"
|
||||
msgstr "Gruppér ingredienser ut fra deres produktgruppe"
|
||||
|
||||
msgid "Unknown store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Transaction successfully undone"
|
||||
msgstr ""
|
||||
|
||||
msgid "Default store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Consume this stock entry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Mark this stock entry as open"
|
||||
msgstr ""
|
||||
|
||||
msgid "Mark this item as done"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit this item"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this item"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show an icon if the product is already on the shopping list"
|
||||
msgstr ""
|
||||
|
@@ -350,3 +350,17 @@ msgstr ""
|
||||
|
||||
msgid "Portuguese (Portugal)"
|
||||
msgstr ""
|
||||
|
||||
# Use a in your country well known supermarket name
|
||||
msgid "DemoSupermarket1"
|
||||
msgstr ""
|
||||
|
||||
# Use a in your country well known supermarket name
|
||||
msgid "DemoSupermarket2"
|
||||
msgstr ""
|
||||
|
||||
msgid "Japanese"
|
||||
msgstr ""
|
||||
|
||||
msgid "Chinese (Taiwan)"
|
||||
msgstr ""
|
||||
|
@@ -87,6 +87,9 @@ msgstr "Monitoramento de Bateria"
|
||||
msgid "Locations"
|
||||
msgstr "Localizações"
|
||||
|
||||
msgid "Stores"
|
||||
msgstr ""
|
||||
|
||||
msgid "Quantity units"
|
||||
msgstr "Unidades de medida"
|
||||
|
||||
@@ -224,6 +227,9 @@ msgstr "Fator de unidade de compra e estoque"
|
||||
msgid "Create location"
|
||||
msgstr "Criar Localização"
|
||||
|
||||
msgid "Create store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create quantity unit"
|
||||
msgstr "Criar unidade de medida"
|
||||
|
||||
@@ -257,6 +263,9 @@ msgstr "Editar produto"
|
||||
msgid "Edit location"
|
||||
msgstr "Editar localização"
|
||||
|
||||
msgid "Edit store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Record data"
|
||||
msgstr "Gravar dados"
|
||||
|
||||
@@ -335,6 +344,9 @@ msgstr "Tem certeza que quer apagar este produto \"%s\"?"
|
||||
msgid "Are you sure to delete location \"%s\"?"
|
||||
msgstr "Tem certeza que quer apagar este local \"%s\"?"
|
||||
|
||||
msgid "Are you sure to delete store \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manage API keys"
|
||||
msgstr "Organizar Chaves do API"
|
||||
|
||||
@@ -1107,6 +1119,9 @@ msgstr ""
|
||||
msgid "You have to select a location"
|
||||
msgstr "Você precisa selecionar uma localização"
|
||||
|
||||
msgid "You have to select a store"
|
||||
msgstr ""
|
||||
|
||||
msgid "List"
|
||||
msgstr "Lista"
|
||||
|
||||
@@ -1140,8 +1155,8 @@ msgstr "Informações do sistema"
|
||||
msgid "Changelog"
|
||||
msgstr "Log de alterações"
|
||||
|
||||
msgid "will be multiplied a factor of %1$s to get %2$s"
|
||||
msgstr "será multiplicado um fator de %1$s para obter %2$s"
|
||||
msgid "will be multiplied by a factor of %1$s to get %2$s"
|
||||
msgstr ""
|
||||
|
||||
msgid "The given date is earlier than today, are you sure?"
|
||||
msgstr "Você tem certeza que a data especificada é anterior a data de hoje?"
|
||||
@@ -1927,3 +1942,33 @@ msgstr ""
|
||||
|
||||
msgid "Group ingredients by their product group"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unknown store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Transaction successfully undone"
|
||||
msgstr ""
|
||||
|
||||
msgid "Default store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Consume this stock entry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Mark this stock entry as open"
|
||||
msgstr ""
|
||||
|
||||
msgid "Mark this item as done"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit this item"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this item"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show an icon if the product is already on the shopping list"
|
||||
msgstr ""
|
||||
|
@@ -1,6 +1,7 @@
|
||||
# Translators:
|
||||
# Joao Santos <joaocpdsantos@gmail.com>, 2019
|
||||
# Ricardo Rodrigues <fenix999@gmail.com>, 2020
|
||||
# Miguel Pereira <miguelpereira.pro@gmail.com>, 2020
|
||||
#
|
||||
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: Ricardo Rodrigues <fenix999@gmail.com>, 2020\n"
|
||||
"Last-Translator: Miguel Pereira <miguelpereira.pro@gmail.com>, 2020\n"
|
||||
"Language-Team: Portuguese (Portugal) (https://www.transifex.com/grocy/teams/93189/pt_PT/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -347,7 +348,21 @@ msgid "Slovak"
|
||||
msgstr "Eslovaco"
|
||||
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
msgstr "Checo"
|
||||
|
||||
msgid "Portuguese (Portugal)"
|
||||
msgstr "Português (Portugal)"
|
||||
|
||||
# Use a in your country well known supermarket name
|
||||
msgid "DemoSupermarket1"
|
||||
msgstr ""
|
||||
|
||||
# Use a in your country well known supermarket name
|
||||
msgid "DemoSupermarket2"
|
||||
msgstr ""
|
||||
|
||||
msgid "Japanese"
|
||||
msgstr ""
|
||||
|
||||
msgid "Chinese (Taiwan)"
|
||||
msgstr ""
|
||||
|
@@ -85,6 +85,9 @@ msgstr "Tracking de Pilhas"
|
||||
msgid "Locations"
|
||||
msgstr "Localizações"
|
||||
|
||||
msgid "Stores"
|
||||
msgstr ""
|
||||
|
||||
msgid "Quantity units"
|
||||
msgstr "Unidades de medida"
|
||||
|
||||
@@ -223,6 +226,9 @@ msgstr "Unidade de medida do stock por compra"
|
||||
msgid "Create location"
|
||||
msgstr "Criar localização"
|
||||
|
||||
msgid "Create store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create quantity unit"
|
||||
msgstr "Criar unidade de medida"
|
||||
|
||||
@@ -256,6 +262,9 @@ msgstr "Editar Produto"
|
||||
msgid "Edit location"
|
||||
msgstr "Editar Localização"
|
||||
|
||||
msgid "Edit store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Record data"
|
||||
msgstr "Gravar dados"
|
||||
|
||||
@@ -336,6 +345,9 @@ msgstr "Tem a certeza que pretende eliminar o produto \"%s\"?"
|
||||
msgid "Are you sure to delete location \"%s\"?"
|
||||
msgstr "Tem a certeza que pretende eliminar o local \"%s\"?"
|
||||
|
||||
msgid "Are you sure to delete store \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manage API keys"
|
||||
msgstr "Gerir chaves da API"
|
||||
|
||||
@@ -1099,6 +1111,9 @@ msgstr ""
|
||||
msgid "You have to select a location"
|
||||
msgstr "Precisa de seleccionar uma localização"
|
||||
|
||||
msgid "You have to select a store"
|
||||
msgstr ""
|
||||
|
||||
msgid "List"
|
||||
msgstr "Lista"
|
||||
|
||||
@@ -1132,8 +1147,8 @@ msgstr "Informação do sistema"
|
||||
msgid "Changelog"
|
||||
msgstr "histórico de modificações"
|
||||
|
||||
msgid "will be multiplied a factor of %1$s to get %2$s"
|
||||
msgstr "será multiplicado pelo factor de %1$s para ter%2$s"
|
||||
msgid "will be multiplied by a factor of %1$s to get %2$s"
|
||||
msgstr ""
|
||||
|
||||
msgid "The given date is earlier than today, are you sure?"
|
||||
msgstr "A data é anterior a hoje, tem a certeza?"
|
||||
@@ -1886,3 +1901,33 @@ msgstr "Cartão da receita"
|
||||
|
||||
msgid "Group ingredients by their product group"
|
||||
msgstr "Agrupar ingredientes pelo respectivo grupo de produto"
|
||||
|
||||
msgid "Unknown store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Transaction successfully undone"
|
||||
msgstr ""
|
||||
|
||||
msgid "Default store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Consume this stock entry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Mark this stock entry as open"
|
||||
msgstr ""
|
||||
|
||||
msgid "Mark this item as done"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit this item"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this item"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show an icon if the product is already on the shopping list"
|
||||
msgstr ""
|
||||
|
@@ -1,6 +1,7 @@
|
||||
# Translators:
|
||||
# Pavel Pletenev <cpp.create@gmail.com>, 2019
|
||||
# First Name Second Name <greentail@protonmail.ch>, 2019
|
||||
# Maksim Moiseikin <m.moiseikin@gmail.com>, 2020
|
||||
#
|
||||
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: First Name Second Name <greentail@protonmail.ch>, 2019\n"
|
||||
"Last-Translator: Maksim Moiseikin <m.moiseikin@gmail.com>, 2020\n"
|
||||
"Language-Team: Russian (https://www.transifex.com/grocy/teams/93189/ru/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -33,4 +34,4 @@ msgid "monthly"
|
||||
msgstr "ежемесячно"
|
||||
|
||||
msgid "yearly"
|
||||
msgstr ""
|
||||
msgstr "ежегодно"
|
||||
|
@@ -1,6 +1,7 @@
|
||||
# Translators:
|
||||
# Pavel Pletenev <cpp.create@gmail.com>, 2019
|
||||
# cool guy <eut53770@bcaoo.com>, 2019
|
||||
# Maksim Moiseikin <m.moiseikin@gmail.com>, 2020
|
||||
# Pavel Pletenev <cpp.create@gmail.com>, 2020
|
||||
#
|
||||
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: cool guy <eut53770@bcaoo.com>, 2019\n"
|
||||
"Last-Translator: Pavel Pletenev <cpp.create@gmail.com>, 2020\n"
|
||||
"Language-Team: Russian (https://www.transifex.com/grocy/teams/93189/ru/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -165,7 +166,7 @@ msgid "Sandwiches"
|
||||
msgstr "Сэндвичи"
|
||||
|
||||
msgid "English"
|
||||
msgstr "Английски"
|
||||
msgstr "Английский"
|
||||
|
||||
msgid "German"
|
||||
msgstr "Немецкий"
|
||||
@@ -347,22 +348,36 @@ msgid "not yet released"
|
||||
msgstr "Пока не выпущено"
|
||||
|
||||
msgid "Portuguese (Brazil)"
|
||||
msgstr ""
|
||||
msgstr "Португальский (Бразилия)"
|
||||
|
||||
msgid "This is a note"
|
||||
msgstr ""
|
||||
msgstr "Это заметка"
|
||||
|
||||
msgid "Freezer"
|
||||
msgstr ""
|
||||
msgstr "Морозилка"
|
||||
|
||||
msgid "Hungarian"
|
||||
msgstr ""
|
||||
msgstr "Венгерский"
|
||||
|
||||
msgid "Slovak"
|
||||
msgstr ""
|
||||
msgstr "Словацкий"
|
||||
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
msgstr "Чешский"
|
||||
|
||||
msgid "Portuguese (Portugal)"
|
||||
msgstr ""
|
||||
msgstr "Португальский (Португалия)"
|
||||
|
||||
# Use a in your country well known supermarket name
|
||||
msgid "DemoSupermarket1"
|
||||
msgstr "ДемоСупермаркет1"
|
||||
|
||||
# Use a in your country well known supermarket name
|
||||
msgid "DemoSupermarket2"
|
||||
msgstr "ДемоСупермаркет2"
|
||||
|
||||
msgid "Japanese"
|
||||
msgstr "Японский"
|
||||
|
||||
msgid "Chinese (Taiwan)"
|
||||
msgstr "Китайский (Тайвань)"
|
||||
|
@@ -3,6 +3,7 @@
|
||||
# Pavel Pletenev <cpp.create@gmail.com>, 2019
|
||||
# cool guy <eut53770@bcaoo.com>, 2019
|
||||
# First Name Second Name <greentail@protonmail.ch>, 2019
|
||||
# Maksim Moiseikin <m.moiseikin@gmail.com>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -10,7 +11,7 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01 17:42+0000\n"
|
||||
"Last-Translator: First Name Second Name <greentail@protonmail.ch>, 2019\n"
|
||||
"Last-Translator: Maksim Moiseikin <m.moiseikin@gmail.com>, 2020\n"
|
||||
"Language-Team: Russian (https://www.transifex.com/grocy/teams/93189/ru/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -96,6 +97,9 @@ msgstr "Отслеживание батареек"
|
||||
msgid "Locations"
|
||||
msgstr "Места"
|
||||
|
||||
msgid "Stores"
|
||||
msgstr "Магазины"
|
||||
|
||||
msgid "Quantity units"
|
||||
msgstr "Единицы измерения"
|
||||
|
||||
@@ -233,6 +237,9 @@ msgstr "Коэффициент пересчёта единиц измерени
|
||||
msgid "Create location"
|
||||
msgstr "Создать место хранения"
|
||||
|
||||
msgid "Create store"
|
||||
msgstr "Добавить магазин"
|
||||
|
||||
msgid "Create quantity unit"
|
||||
msgstr "Создать единицу измерения"
|
||||
|
||||
@@ -266,6 +273,9 @@ msgstr "Изменить продукт"
|
||||
msgid "Edit location"
|
||||
msgstr "Изменить место хранения"
|
||||
|
||||
msgid "Edit store"
|
||||
msgstr "Редактировать магазин"
|
||||
|
||||
msgid "Record data"
|
||||
msgstr "Записать данные"
|
||||
|
||||
@@ -345,6 +355,9 @@ msgstr "Вы уверены, что хотите удалить продукт %
|
||||
msgid "Are you sure to delete location \"%s\"?"
|
||||
msgstr "Вы уверены, что нужно удалить место хранения \"%s\"?"
|
||||
|
||||
msgid "Are you sure to delete store \"%s\"?"
|
||||
msgstr "Вы уверены, что хотите удалить магазин \"%s\"?"
|
||||
|
||||
msgid "Manage API keys"
|
||||
msgstr "Управление ключами доступа к API"
|
||||
|
||||
@@ -1003,6 +1016,8 @@ msgid ""
|
||||
"When this product was marked as opened, the best before date will be "
|
||||
"replaced by today + this amount of days (a value of 0 disables this)"
|
||||
msgstr ""
|
||||
"Когда продукт помечается как открытый, срок годности заменится по формуле: "
|
||||
"сегодня + это количество дней (значение 0 отключает этот функционал)"
|
||||
|
||||
msgid "Default best before days after opened"
|
||||
msgstr "Срок годности в днях по умолчанию после открытия"
|
||||
@@ -1138,6 +1153,9 @@ msgstr ""
|
||||
msgid "You have to select a location"
|
||||
msgstr "Вам нужно выбрать место хранения"
|
||||
|
||||
msgid "You have to select a store"
|
||||
msgstr "Вам нужно выбрать магазин"
|
||||
|
||||
msgid "List"
|
||||
msgstr "Список"
|
||||
|
||||
@@ -1171,8 +1189,8 @@ msgstr "Системная информация"
|
||||
msgid "Changelog"
|
||||
msgstr "Список изменений"
|
||||
|
||||
msgid "will be multiplied a factor of %1$s to get %2$s"
|
||||
msgstr "будет умножено на коэфф. %1$s, т.е. %2$s"
|
||||
msgid "will be multiplied by a factor of %1$s to get %2$s"
|
||||
msgstr ""
|
||||
|
||||
msgid "The given date is earlier than today, are you sure?"
|
||||
msgstr "Введённая дата в прошлом, вы уверены?"
|
||||
@@ -1330,7 +1348,7 @@ msgid "Expiring soon days"
|
||||
msgstr "Дней до окончания срока годности"
|
||||
|
||||
msgid "Default location"
|
||||
msgstr ""
|
||||
msgstr "Место хранения по умолчанию"
|
||||
|
||||
msgid "Default amount for purchase"
|
||||
msgstr "Количество покупки по умолчанию"
|
||||
@@ -1362,7 +1380,7 @@ msgid "Meal plan"
|
||||
msgstr "План питания"
|
||||
|
||||
msgid "Add recipe on %s"
|
||||
msgstr ""
|
||||
msgstr "Добавить рецепт в %s"
|
||||
|
||||
msgid "%s serving"
|
||||
msgid_plural "%s servings"
|
||||
@@ -1708,106 +1726,115 @@ msgid "Are you sure to remove this conversion?"
|
||||
msgstr "Вы уверены, что нужно удалить это преобразование?"
|
||||
|
||||
msgid "Unit price"
|
||||
msgstr ""
|
||||
msgstr "Цена за единицу"
|
||||
|
||||
msgid "Total price"
|
||||
msgstr ""
|
||||
msgstr "Общая цена"
|
||||
|
||||
msgid "in %s and based on the purchase quantity unit"
|
||||
msgstr ""
|
||||
msgstr "в %s исходя из количества купленных единиц"
|
||||
|
||||
msgid "Unlimited"
|
||||
msgstr ""
|
||||
msgstr "Неограниченно"
|
||||
|
||||
msgid "Clear"
|
||||
msgstr ""
|
||||
msgstr "Очистить"
|
||||
|
||||
msgid "Are you sure to remove the included recipe \"%s\"?"
|
||||
msgstr ""
|
||||
msgstr "Вы уверены, что хотите удалить включённый рецепт \"%s\"?"
|
||||
|
||||
msgid "Period interval"
|
||||
msgstr ""
|
||||
msgstr "Временной интервал"
|
||||
|
||||
msgid ""
|
||||
"This means the next execution of this chore should only be scheduled every "
|
||||
"%s days"
|
||||
msgstr ""
|
||||
"Это означает, что выполнение этой работы будет назначаться каждые %s дней"
|
||||
|
||||
msgid ""
|
||||
"This means the next execution of this chore should only be scheduled every "
|
||||
"%s weeks"
|
||||
msgstr ""
|
||||
"Это означает, что выполнение этой работы будет назначаться каждые %s недель"
|
||||
|
||||
msgid ""
|
||||
"This means the next execution of this chore should only be scheduled every "
|
||||
"%s months"
|
||||
msgstr ""
|
||||
"Это означает, что выполнение этой работы будет назначаться каждые %s месяцев"
|
||||
|
||||
msgid ""
|
||||
"This means the next execution of this chore is scheduled 1 year after the "
|
||||
"last execution"
|
||||
msgstr ""
|
||||
"Это означает, что выполнение этой работы будет назначено через год после "
|
||||
"последнего выполнения"
|
||||
|
||||
msgid ""
|
||||
"This means the next execution of this chore should only be scheduled every "
|
||||
"%s years"
|
||||
msgstr ""
|
||||
"Это означает, что выполнение этой работы будет назначаться каждые %s лет"
|
||||
|
||||
msgid "Transfer"
|
||||
msgstr ""
|
||||
msgstr "Переместить"
|
||||
|
||||
msgid "From location"
|
||||
msgstr ""
|
||||
msgstr "Из места хранения"
|
||||
|
||||
msgid "To location"
|
||||
msgstr ""
|
||||
msgstr "В место хранения"
|
||||
|
||||
msgid "There are no units available at this location"
|
||||
msgstr ""
|
||||
msgstr "Нет объектов доступных в этом месте хранения"
|
||||
|
||||
msgid "Amount: %1$s; Expires on %2$s; Bought on %3$s"
|
||||
msgstr ""
|
||||
msgstr "Количество: %1$s; Срок годности: %2$s; Куплено: %3$s"
|
||||
|
||||
msgid "Transfered %1$s of %2$s from %3$s to %4$s"
|
||||
msgstr ""
|
||||
msgstr "Перемещено %1$s из %2$s из %3$s в %4$s"
|
||||
|
||||
msgid "Show stock entries"
|
||||
msgstr ""
|
||||
msgstr "Показать запасы"
|
||||
|
||||
msgid "Stock entries"
|
||||
msgstr ""
|
||||
msgstr "Запасы"
|
||||
|
||||
msgid "Best before date"
|
||||
msgstr ""
|
||||
msgstr "Годен до"
|
||||
|
||||
msgid "Purchased date"
|
||||
msgstr ""
|
||||
msgstr "Дата покупки"
|
||||
|
||||
msgid "Consume all %s for this stock entry"
|
||||
msgstr ""
|
||||
msgstr "Употребить все %s этого запаса"
|
||||
|
||||
msgid "The amount cannot be lower than %1$s"
|
||||
msgstr ""
|
||||
msgstr "Количество не может быть меньше %s"
|
||||
|
||||
msgid "Stock entry successfully updated"
|
||||
msgstr ""
|
||||
msgstr "Данные по запасу успешно обновлены"
|
||||
|
||||
msgid "Edit stock entry"
|
||||
msgstr ""
|
||||
msgstr "Редактировать запас"
|
||||
|
||||
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 ""
|
||||
msgstr "Держать экран включенным"
|
||||
|
||||
msgid "Keep screen on while displaying a \"fullscreen-card\""
|
||||
msgstr ""
|
||||
msgstr "Держать экран включенным при отображении \"полноэкранной карточки\""
|
||||
|
||||
msgid "A purchased date is required"
|
||||
msgstr ""
|
||||
msgstr "Укажите дату покупки"
|
||||
|
||||
msgid ""
|
||||
"When a product is selected, one unit (per serving in purchase quantity unit)"
|
||||
@@ -1824,101 +1851,115 @@ msgid "Booking does not exist or was already undone"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure to delete API key \"%s\"?"
|
||||
msgstr ""
|
||||
msgstr "Вы уверены, что хотите удалить ключ API \"%s\"?"
|
||||
|
||||
msgid "Add note"
|
||||
msgstr ""
|
||||
msgstr "Добавить заметку"
|
||||
|
||||
msgid "Add note on %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "per day"
|
||||
msgstr ""
|
||||
msgstr "в день"
|
||||
|
||||
msgid "Compact view"
|
||||
msgstr ""
|
||||
msgstr "Компактный режим"
|
||||
|
||||
msgid "Normal view"
|
||||
msgstr ""
|
||||
msgstr "Нормальный режим"
|
||||
|
||||
msgid "Only undone items"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add product"
|
||||
msgstr ""
|
||||
msgstr "Добавить продукт"
|
||||
|
||||
msgid "Add product on %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Consume all ingredients needed by this weeks recipes or products"
|
||||
msgstr ""
|
||||
"Употребить все ингредиенты, необходимые для рецептов или продуктов этой "
|
||||
"недели"
|
||||
|
||||
msgid "Meal plan recipe"
|
||||
msgstr ""
|
||||
msgstr "Рецепт плана питания"
|
||||
|
||||
msgid "Meal plan note"
|
||||
msgstr ""
|
||||
msgstr "Заметка плана питания"
|
||||
|
||||
msgid "Meal plan product"
|
||||
msgstr ""
|
||||
msgstr "Продукт плана питания"
|
||||
|
||||
msgid "Scan mode"
|
||||
msgstr ""
|
||||
msgstr "Режим сканирования"
|
||||
|
||||
msgid "on"
|
||||
msgstr ""
|
||||
msgstr "вкл"
|
||||
|
||||
msgid "off"
|
||||
msgstr ""
|
||||
msgstr "выкл"
|
||||
|
||||
msgid ""
|
||||
"Scan mode is on but not all required fields could be populated automatically"
|
||||
msgstr ""
|
||||
"Режим сканирования включен, но не все обязательные поля могут быть заполнены"
|
||||
" автоматически"
|
||||
|
||||
msgid "Is freezer"
|
||||
msgstr ""
|
||||
msgstr "В морозилке"
|
||||
|
||||
msgid ""
|
||||
"When moving products from/to a freezer location, the products best before "
|
||||
"date is automatically adjusted according to the product settings"
|
||||
msgstr ""
|
||||
"При перемещении продуктов в морозильную камеру или из неё, срок годности "
|
||||
"продукта будет автоматически обновлен в соответствии с настройками этого "
|
||||
"продукта"
|
||||
|
||||
msgid ""
|
||||
"On moving this product to a freezer location (so when freezing it), the best"
|
||||
" before date will be replaced by today + this amount of days"
|
||||
msgstr ""
|
||||
"При перемещении данного продукта в морозильную камеру (т. е. при его "
|
||||
"заморозке), срок годности заменится по формуле: сегодня + это количество "
|
||||
"дней"
|
||||
|
||||
msgid "Default best before days after freezing"
|
||||
msgstr ""
|
||||
msgstr "Срок годности по умолчанию после заморозки"
|
||||
|
||||
msgid ""
|
||||
"On moving this product from a freezer location (so when thawing it), the "
|
||||
"best before date will be replaced by today + this amount of days"
|
||||
msgstr ""
|
||||
"При перемещении данного продукта из морозильной камеры (т. е. при его "
|
||||
"разморозке), срок годности заменится по формуле: сегодня + это количество "
|
||||
"дней"
|
||||
|
||||
msgid "Default best before days after thawing"
|
||||
msgstr ""
|
||||
msgstr "Срок годности по умолчанию после разморозки"
|
||||
|
||||
msgid "This cannot be the same as the \"From\" location"
|
||||
msgstr ""
|
||||
msgstr "Это не может быть тем же местом хранения, что и \"из\""
|
||||
|
||||
msgid "Thawed"
|
||||
msgstr ""
|
||||
msgstr "Разморожен"
|
||||
|
||||
msgid "Frozen"
|
||||
msgstr ""
|
||||
msgstr "Заморожен"
|
||||
|
||||
msgid "Are you sure to delete userentity \"%s\"?"
|
||||
msgstr ""
|
||||
msgstr "Вы уверены, что нужно удалить пользовательскую запись \"%s\"?"
|
||||
|
||||
msgid "Shopping list settings"
|
||||
msgstr ""
|
||||
msgstr "Настройки списка покупок"
|
||||
|
||||
msgid "Show a month-view calendar"
|
||||
msgstr ""
|
||||
msgstr "Показать календарь на месяц"
|
||||
|
||||
msgid "Don't automatically switch to the compact view on mobile devices"
|
||||
msgstr ""
|
||||
"Не переключаться автоматически на компактный режим на мобильных устройствах"
|
||||
|
||||
msgid "Edit note on %s"
|
||||
msgstr ""
|
||||
@@ -1930,16 +1971,46 @@ msgid "Edit recipe on %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Desired servings"
|
||||
msgstr ""
|
||||
msgstr "Количество порций"
|
||||
|
||||
msgid "Base: %s"
|
||||
msgstr ""
|
||||
msgstr "База: %s"
|
||||
|
||||
msgid "Recipes settings"
|
||||
msgstr ""
|
||||
msgstr "Настройки рецептов"
|
||||
|
||||
msgid "Recipe card"
|
||||
msgstr ""
|
||||
msgstr "Карточка рецепта"
|
||||
|
||||
msgid "Group ingredients by their product group"
|
||||
msgstr "Сгруппировать ингредиенты по группам продуктов"
|
||||
|
||||
msgid "Unknown store"
|
||||
msgstr "Неизвестный магазин"
|
||||
|
||||
msgid "Store"
|
||||
msgstr "Магазин"
|
||||
|
||||
msgid "Transaction successfully undone"
|
||||
msgstr "Транзакция успешно отменена"
|
||||
|
||||
msgid "Default store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Consume this stock entry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Mark this stock entry as open"
|
||||
msgstr ""
|
||||
|
||||
msgid "Mark this item as done"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit this item"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this item"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show an icon if the product is already on the shopping list"
|
||||
msgstr ""
|
||||
|
@@ -365,3 +365,17 @@ msgstr ""
|
||||
|
||||
msgid "Portuguese (Portugal)"
|
||||
msgstr ""
|
||||
|
||||
# Use a in your country well known supermarket name
|
||||
msgid "DemoSupermarket1"
|
||||
msgstr ""
|
||||
|
||||
# Use a in your country well known supermarket name
|
||||
msgid "DemoSupermarket2"
|
||||
msgstr ""
|
||||
|
||||
msgid "Japanese"
|
||||
msgstr ""
|
||||
|
||||
msgid "Chinese (Taiwan)"
|
||||
msgstr ""
|
||||
|
@@ -94,6 +94,9 @@ msgstr "Záznam stavu batérií"
|
||||
msgid "Locations"
|
||||
msgstr "Umiestnenia"
|
||||
|
||||
msgid "Stores"
|
||||
msgstr ""
|
||||
|
||||
msgid "Quantity units"
|
||||
msgstr "Merné jednotky"
|
||||
|
||||
@@ -230,6 +233,9 @@ msgstr "Faktor množstva jednotiek zásoby pri nákupe jedného kusu výrobku"
|
||||
msgid "Create location"
|
||||
msgstr "Vytvoriť umiestnenie"
|
||||
|
||||
msgid "Create store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create quantity unit"
|
||||
msgstr "Vytvoriť mernú jednotku"
|
||||
|
||||
@@ -263,6 +269,9 @@ msgstr "Upraviť výrobok"
|
||||
msgid "Edit location"
|
||||
msgstr "Upraviť umiestnenie"
|
||||
|
||||
msgid "Edit store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Record data"
|
||||
msgstr "Zaznamenať údaje"
|
||||
|
||||
@@ -339,6 +348,9 @@ msgstr "Naozaj si prajete odstrániť výrobok \"%s\"?"
|
||||
msgid "Are you sure to delete location \"%s\"?"
|
||||
msgstr "Naozaj si prajete odstrániť umiestnenie \"%s\"?"
|
||||
|
||||
msgid "Are you sure to delete store \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manage API keys"
|
||||
msgstr "Spravovať API kľúče"
|
||||
|
||||
@@ -1127,6 +1139,9 @@ msgstr ""
|
||||
msgid "You have to select a location"
|
||||
msgstr "Musíte vybrať umiestnenie"
|
||||
|
||||
msgid "You have to select a store"
|
||||
msgstr ""
|
||||
|
||||
msgid "List"
|
||||
msgstr "Zoznam"
|
||||
|
||||
@@ -1160,8 +1175,8 @@ msgstr "Systémové informácie"
|
||||
msgid "Changelog"
|
||||
msgstr "Zoznam zmien"
|
||||
|
||||
msgid "will be multiplied a factor of %1$s to get %2$s"
|
||||
msgstr "bude vynásobený faktorom %1$s, aby bolo dosiahnuté %2$s"
|
||||
msgid "will be multiplied by a factor of %1$s to get %2$s"
|
||||
msgstr ""
|
||||
|
||||
msgid "The given date is earlier than today, are you sure?"
|
||||
msgstr "Zadaný dátum je v minulosti, ste si istý?"
|
||||
@@ -1962,3 +1977,33 @@ msgstr "Karta s receptom"
|
||||
|
||||
msgid "Group ingredients by their product group"
|
||||
msgstr "Zoskupiť ingrediencie podľa skupiny výrobkov"
|
||||
|
||||
msgid "Unknown store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Transaction successfully undone"
|
||||
msgstr ""
|
||||
|
||||
msgid "Default store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Consume this stock entry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Mark this stock entry as open"
|
||||
msgstr ""
|
||||
|
||||
msgid "Mark this item as done"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit this item"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this item"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show an icon if the product is already on the shopping list"
|
||||
msgstr ""
|
||||
|
@@ -79,6 +79,9 @@ msgstr ""
|
||||
msgid "Locations"
|
||||
msgstr ""
|
||||
|
||||
msgid "Stores"
|
||||
msgstr ""
|
||||
|
||||
msgid "Quantity units"
|
||||
msgstr ""
|
||||
|
||||
@@ -214,6 +217,9 @@ msgstr ""
|
||||
msgid "Create location"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create quantity unit"
|
||||
msgstr ""
|
||||
|
||||
@@ -247,6 +253,9 @@ msgstr ""
|
||||
msgid "Edit location"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Record data"
|
||||
msgstr ""
|
||||
|
||||
@@ -319,6 +328,9 @@ msgstr ""
|
||||
msgid "Are you sure to delete location \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure to delete store \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manage API keys"
|
||||
msgstr ""
|
||||
|
||||
@@ -1022,6 +1034,9 @@ msgstr ""
|
||||
msgid "You have to select a location"
|
||||
msgstr ""
|
||||
|
||||
msgid "You have to select a store"
|
||||
msgstr ""
|
||||
|
||||
msgid "List"
|
||||
msgstr ""
|
||||
|
||||
@@ -1055,7 +1070,7 @@ msgstr ""
|
||||
msgid "Changelog"
|
||||
msgstr ""
|
||||
|
||||
msgid "will be multiplied a factor of %1$s to get %2$s"
|
||||
msgid "will be multiplied by a factor of %1$s to get %2$s"
|
||||
msgstr ""
|
||||
|
||||
msgid "The given date is earlier than today, are you sure?"
|
||||
@@ -1744,3 +1759,33 @@ msgstr ""
|
||||
|
||||
msgid "Group ingredients by their product group"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unknown store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Transaction successfully undone"
|
||||
msgstr ""
|
||||
|
||||
msgid "Default store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Consume this stock entry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Mark this stock entry as open"
|
||||
msgstr ""
|
||||
|
||||
msgid "Mark this item as done"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit this item"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this item"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show an icon if the product is already on the shopping list"
|
||||
msgstr ""
|
||||
|
@@ -1,6 +1,5 @@
|
||||
# Translators:
|
||||
# Benjamin Tayehanpour <transifex@benjamin.tayehanpour.se>, 2019
|
||||
# Peter Wickenberg <peter@wickenberg.nu>, 2019
|
||||
# Peter Wickenberg <peter@wickenberg.nu>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -8,7 +7,7 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-09-17 10:45+0000\n"
|
||||
"Last-Translator: Peter Wickenberg <peter@wickenberg.nu>, 2019\n"
|
||||
"Last-Translator: Peter Wickenberg <peter@wickenberg.nu>, 2020\n"
|
||||
"Language-Team: Swedish (Sweden) (https://www.transifex.com/grocy/teams/93189/sv_SE/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -18,13 +17,13 @@ msgstr ""
|
||||
"X-Domain: grocy/chore_assignment_types\n"
|
||||
|
||||
msgid "no-assignment"
|
||||
msgstr "Ingen uppgift"
|
||||
msgstr "ingen-tilldelning"
|
||||
|
||||
msgid "who-least-did-first"
|
||||
msgstr "Den som gjorde minst går först"
|
||||
msgstr "den-som-gjorde-minst-går-först"
|
||||
|
||||
msgid "random"
|
||||
msgstr "Slumpmässig"
|
||||
msgstr "slumpmässig"
|
||||
|
||||
msgid "in-alphabetical-order"
|
||||
msgstr "I alfabetisk ordning"
|
||||
msgstr "i-alfabetisk-ordning"
|
||||
|
@@ -1,8 +1,9 @@
|
||||
# Translators:
|
||||
# Mathias Fröjd <info@mcfrojd.com>, 2019
|
||||
# Bernd Bestel <bernd@berrnd.de>, 2019
|
||||
# Fredrik Hendeberg <fredrik@hendeberg.com>, 2019
|
||||
# Peter Wickenberg <peter@wickenberg.nu>, 2019
|
||||
# Sebastian Backman <valtkor@hotmail.com>, 2020
|
||||
# Per Bäckman <fotodille@gmail.com>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -10,7 +11,7 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01 17:42+0000\n"
|
||||
"Last-Translator: Peter Wickenberg <peter@wickenberg.nu>, 2019\n"
|
||||
"Last-Translator: Per Bäckman <fotodille@gmail.com>, 2020\n"
|
||||
"Language-Team: Swedish (Sweden) (https://www.transifex.com/grocy/teams/93189/sv_SE/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -29,10 +30,10 @@ msgid "Pantry"
|
||||
msgstr "Skafferi"
|
||||
|
||||
msgid "Candy cupboard"
|
||||
msgstr "Godis skåp"
|
||||
msgstr "Godisskåp"
|
||||
|
||||
msgid "Tinned food cupboard"
|
||||
msgstr "Konservburk för konserverad mat"
|
||||
msgstr "Konservskafferi"
|
||||
|
||||
msgid "Fridge"
|
||||
msgstr "Kylskåp"
|
||||
@@ -40,32 +41,32 @@ msgstr "Kylskåp"
|
||||
msgid "Piece"
|
||||
msgid_plural "Pieces"
|
||||
msgstr[0] "Bit"
|
||||
msgstr[1] "Bitar"
|
||||
msgstr[1] "bitar"
|
||||
|
||||
msgid "Pack"
|
||||
msgid_plural "Packs"
|
||||
msgstr[0] "Förpackning"
|
||||
msgstr[1] "Förpackningar"
|
||||
msgstr[1] "förpackningar"
|
||||
|
||||
msgid "Glass"
|
||||
msgid_plural "Glasses"
|
||||
msgstr[0] "Glas"
|
||||
msgstr[1] "Glas"
|
||||
msgstr[1] "glas"
|
||||
|
||||
msgid "Tin"
|
||||
msgid_plural "Tins"
|
||||
msgstr[0] "Burk"
|
||||
msgstr[1] "Burkar"
|
||||
msgstr[1] "konservburk"
|
||||
|
||||
msgid "Can"
|
||||
msgid_plural "Cans"
|
||||
msgstr[0] "Burk"
|
||||
msgstr[1] "Burkar"
|
||||
msgstr[1] "burkar"
|
||||
|
||||
msgid "Bunch"
|
||||
msgid_plural "Bunches"
|
||||
msgstr[0] "Knippa"
|
||||
msgstr[1] "Knippor"
|
||||
msgstr[1] "knippor"
|
||||
|
||||
msgid "Gummy bears"
|
||||
msgstr "Gummibjörnar"
|
||||
@@ -80,10 +81,10 @@ msgid "Noodles"
|
||||
msgstr "Spaghetti"
|
||||
|
||||
msgid "Pickles"
|
||||
msgstr "Ättiksgurka"
|
||||
msgstr "Inlagda grönsaker"
|
||||
|
||||
msgid "Gulash soup"
|
||||
msgstr "Gulashoppa"
|
||||
msgstr "Gulashsoppa"
|
||||
|
||||
msgid "Yogurt"
|
||||
msgstr "Yoghurt"
|
||||
@@ -134,7 +135,7 @@ msgid "Pizza dough"
|
||||
msgstr "Pizzadeg"
|
||||
|
||||
msgid "Sieved tomatoes"
|
||||
msgstr "Siktade tomater"
|
||||
msgstr "Passerade tomater"
|
||||
|
||||
msgid "Salami"
|
||||
msgstr "Salami"
|
||||
@@ -155,16 +156,16 @@ msgid "Sandwiches"
|
||||
msgstr "Smörgåsar"
|
||||
|
||||
msgid "English"
|
||||
msgstr "Engelsk"
|
||||
msgstr "Engelska"
|
||||
|
||||
msgid "German"
|
||||
msgstr "Tysk"
|
||||
msgstr "Tyska"
|
||||
|
||||
msgid "Italian"
|
||||
msgstr "Italienska"
|
||||
|
||||
msgid "This is the note content of the recipe ingredient"
|
||||
msgstr "Detta är anteckningsinnehållet i receptens ingrediens"
|
||||
msgstr "Detta är anteckningen för receptets ingrediens"
|
||||
|
||||
msgid "Demo User"
|
||||
msgstr "Demo-användare"
|
||||
@@ -172,13 +173,13 @@ msgstr "Demo-användare"
|
||||
msgid "Gram"
|
||||
msgid_plural "Grams"
|
||||
msgstr[0] "Gram"
|
||||
msgstr[1] "Gram"
|
||||
msgstr[1] "gram"
|
||||
|
||||
msgid "Flour"
|
||||
msgstr "Mjöl"
|
||||
|
||||
msgid "Pancakes"
|
||||
msgstr "pannkakor"
|
||||
msgstr "Pannkakor"
|
||||
|
||||
msgid "Sugar"
|
||||
msgstr "Socker"
|
||||
@@ -196,7 +197,7 @@ msgid "Repair the garage door"
|
||||
msgstr "Reparera garagedörren"
|
||||
|
||||
msgid "Fork and improve grocy"
|
||||
msgstr "Gaffel och förbättra grocy"
|
||||
msgstr "Starta ny gren och förbättra grocy"
|
||||
|
||||
msgid "Find a solution for what to do when I forget the door keys"
|
||||
msgstr "Hitta en lösning för vad man ska göra när jag glömmer dörrnycklarna"
|
||||
@@ -214,7 +215,7 @@ msgid "Butchery products"
|
||||
msgstr "Slaktprodukter"
|
||||
|
||||
msgid "Vegetables/Fruits"
|
||||
msgstr "Grönsaker / frukt"
|
||||
msgstr "Grönsaker/frukt"
|
||||
|
||||
msgid "Refrigerated products"
|
||||
msgstr "Kylda produkter"
|
||||
@@ -226,16 +227,16 @@ msgid "Dishwasher"
|
||||
msgstr "Diskmaskin"
|
||||
|
||||
msgid "Liter"
|
||||
msgstr "Liter"
|
||||
msgstr "liter"
|
||||
|
||||
msgid "Liters"
|
||||
msgstr "Liter"
|
||||
msgstr "liter"
|
||||
|
||||
msgid "Bottle"
|
||||
msgstr "Flaska"
|
||||
msgstr "flaska"
|
||||
|
||||
msgid "Bottles"
|
||||
msgstr "Flaskor"
|
||||
msgstr "flaskor"
|
||||
|
||||
msgid "Milk"
|
||||
msgstr "Mjölk"
|
||||
@@ -244,10 +245,10 @@ msgid "Chocolate sauce"
|
||||
msgstr "Chokladsås"
|
||||
|
||||
msgid "Milliliters"
|
||||
msgstr "Milliliter"
|
||||
msgstr "ml"
|
||||
|
||||
msgid "Milliliter"
|
||||
msgstr "Milliliter"
|
||||
msgstr "ml"
|
||||
|
||||
msgid "Bottom"
|
||||
msgstr "Botten"
|
||||
@@ -291,7 +292,7 @@ msgstr "Mörk chocklad"
|
||||
msgid "Slice"
|
||||
msgid_plural "Slices"
|
||||
msgstr[0] "Skiva"
|
||||
msgstr[1] "Skivor"
|
||||
msgstr[1] "skivor"
|
||||
|
||||
msgid "Example userentity"
|
||||
msgstr "Exempel användarenhet"
|
||||
@@ -336,19 +337,33 @@ msgid "Portuguese (Brazil)"
|
||||
msgstr "Portugisiska (Brasilien)"
|
||||
|
||||
msgid "This is a note"
|
||||
msgstr ""
|
||||
msgstr "Detta är en anteckning"
|
||||
|
||||
msgid "Freezer"
|
||||
msgstr ""
|
||||
msgstr "Frys"
|
||||
|
||||
msgid "Hungarian"
|
||||
msgstr ""
|
||||
msgstr "Ungerska"
|
||||
|
||||
msgid "Slovak"
|
||||
msgstr ""
|
||||
msgstr "Slovakiska"
|
||||
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
msgstr "Tjeckiska"
|
||||
|
||||
msgid "Portuguese (Portugal)"
|
||||
msgstr "Portugisiska (Portugal)"
|
||||
|
||||
# Use a in your country well known supermarket name
|
||||
msgid "DemoSupermarket1"
|
||||
msgstr ""
|
||||
|
||||
# Use a in your country well known supermarket name
|
||||
msgid "DemoSupermarket2"
|
||||
msgstr ""
|
||||
|
||||
msgid "Japanese"
|
||||
msgstr ""
|
||||
|
||||
msgid "Chinese (Taiwan)"
|
||||
msgstr ""
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -3,6 +3,7 @@
|
||||
# Fredrik Hendeberg <fredrik@hendeberg.com>, 2019
|
||||
# Jesper Sandström <jesper@languageconsulting.se>, 2019
|
||||
# Peter Wickenberg <peter@wickenberg.nu>, 2019
|
||||
# Per Bäckman <fotodille@gmail.com>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -10,7 +11,7 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01 17:43+0000\n"
|
||||
"Last-Translator: Peter Wickenberg <peter@wickenberg.nu>, 2019\n"
|
||||
"Last-Translator: Per Bäckman <fotodille@gmail.com>, 2020\n"
|
||||
"Language-Team: Swedish (Sweden) (https://www.transifex.com/grocy/teams/93189/sv_SE/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -44,7 +45,7 @@ msgid "preset-list"
|
||||
msgstr "mall-lista"
|
||||
|
||||
msgid "preset-checklist"
|
||||
msgstr "förchecklista"
|
||||
msgstr "mallchecklista"
|
||||
|
||||
msgid "link"
|
||||
msgstr "länk"
|
||||
|
29
localization/zh_TW/chore_assignment_types.po
Normal file
29
localization/zh_TW/chore_assignment_types.po
Normal file
@@ -0,0 +1,29 @@
|
||||
# Translators:
|
||||
# jd615645 <jd615645@gmail.com>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-09-17 10:45+0000\n"
|
||||
"Last-Translator: jd615645 <jd615645@gmail.com>, 2020\n"
|
||||
"Language-Team: Chinese (Taiwan) (https://www.transifex.com/grocy/teams/93189/zh_TW/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: zh_TW\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Domain: grocy/chore_assignment_types\n"
|
||||
|
||||
msgid "no-assignment"
|
||||
msgstr "未分配過的優先"
|
||||
|
||||
msgid "who-least-did-first"
|
||||
msgstr "最少分配優先"
|
||||
|
||||
msgid "random"
|
||||
msgstr "隨機"
|
||||
|
||||
msgid "in-alphabetical-order"
|
||||
msgstr "按字母排序"
|
35
localization/zh_TW/chore_period_types.po
Normal file
35
localization/zh_TW/chore_period_types.po
Normal file
@@ -0,0 +1,35 @@
|
||||
# Translators:
|
||||
# jd615645 <jd615645@gmail.com>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01 17:42+0000\n"
|
||||
"Last-Translator: jd615645 <jd615645@gmail.com>, 2020\n"
|
||||
"Language-Team: Chinese (Taiwan) (https://www.transifex.com/grocy/teams/93189/zh_TW/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: zh_TW\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Domain: grocy/chore_types\n"
|
||||
|
||||
msgid "manually"
|
||||
msgstr "手動"
|
||||
|
||||
msgid "dynamic-regular"
|
||||
msgstr "動態有序"
|
||||
|
||||
msgid "daily"
|
||||
msgstr "每日"
|
||||
|
||||
msgid "weekly"
|
||||
msgstr "每周"
|
||||
|
||||
msgid "monthly"
|
||||
msgstr "每日"
|
||||
|
||||
msgid "yearly"
|
||||
msgstr "每天"
|
44
localization/zh_TW/component_translations.po
Normal file
44
localization/zh_TW/component_translations.po
Normal file
@@ -0,0 +1,44 @@
|
||||
# Translators:
|
||||
# Bernd Bestel <bernd@berrnd.de>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01 17:42+0000\n"
|
||||
"Last-Translator: Bernd Bestel <bernd@berrnd.de>, 2020\n"
|
||||
"Language-Team: Chinese (Taiwan) (https://www.transifex.com/grocy/teams/93189/zh_TW/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: zh_TW\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Domain: grocy/component_translations\n"
|
||||
|
||||
msgid "timeago_locale"
|
||||
msgstr "zh-TW"
|
||||
|
||||
msgid "timeago_nan"
|
||||
msgstr "NaN年"
|
||||
|
||||
msgid "moment_locale"
|
||||
msgstr "zh-tw"
|
||||
|
||||
msgid "datatables_localization"
|
||||
msgstr ""
|
||||
"{\"sProcessing\":\"处理中...\",\"sLengthMenu\":\"显示 _MENU_ "
|
||||
"项结果\",\"sZeroRecords\":\"没有匹配结果\",\"sInfo\":\"显示第 _START_ 至 _END_ 项结果,共 "
|
||||
"_TOTAL_ 项\",\"sInfoEmpty\":\"显示第 0 至 0 项结果,共 0 项\",\"sInfoFiltered\":\"(由 "
|
||||
"_MAX_ "
|
||||
"项结果过滤)\",\"sInfoPostFix\":\"\",\"sSearch\":\"搜索:\",\"sUrl\":\"\",\"sEmptyTable\":\"表中数据为空\",\"sLoadingRecords\":\"载入中...\",\"sInfoThousands\":\",\",\"oPaginate\":{\"sFirst\":\"首页\",\"sPrevious\":\"上页\",\"sNext\":\"下页\",\"sLast\":\"末页\"},\"oAria\":{\"sSortAscending\":\":"
|
||||
" 以升序排列此列\",\"sSortDescending\":\": 以降序排列此列\"}}"
|
||||
|
||||
msgid "summernote_locale"
|
||||
msgstr "zh-TW"
|
||||
|
||||
msgid "fullcalendar_locale"
|
||||
msgstr "zh-tw"
|
||||
|
||||
msgid "bootstrap-select_locale"
|
||||
msgstr "zh_TW"
|
358
localization/zh_TW/demo_data.po
Normal file
358
localization/zh_TW/demo_data.po
Normal file
@@ -0,0 +1,358 @@
|
||||
# Translators:
|
||||
# jd615645 <jd615645@gmail.com>, 2020
|
||||
# Bernd Bestel <bernd@berrnd.de>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01 17:42+0000\n"
|
||||
"Last-Translator: Bernd Bestel <bernd@berrnd.de>, 2020\n"
|
||||
"Language-Team: Chinese (Taiwan) (https://www.transifex.com/grocy/teams/93189/zh_TW/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: zh_TW\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Domain: grocy/demo_data\n"
|
||||
|
||||
msgid "Cookies"
|
||||
msgstr "餅乾"
|
||||
|
||||
msgid "Chocolate"
|
||||
msgstr "巧克力"
|
||||
|
||||
msgid "Pantry"
|
||||
msgstr "食物儲藏室"
|
||||
|
||||
msgid "Candy cupboard"
|
||||
msgstr "糖果櫃"
|
||||
|
||||
msgid "Tinned food cupboard"
|
||||
msgstr "罐頭儲藏櫃"
|
||||
|
||||
msgid "Fridge"
|
||||
msgstr "冰箱"
|
||||
|
||||
msgid "Piece"
|
||||
msgid_plural "Pieces"
|
||||
msgstr[0] "件"
|
||||
|
||||
msgid "Pack"
|
||||
msgid_plural "Packs"
|
||||
msgstr[0] "包"
|
||||
|
||||
msgid "Glass"
|
||||
msgid_plural "Glasses"
|
||||
msgstr[0] "杯"
|
||||
|
||||
msgid "Tin"
|
||||
msgid_plural "Tins"
|
||||
msgstr[0] "罐"
|
||||
|
||||
msgid "Can"
|
||||
msgid_plural "Cans"
|
||||
msgstr[0] "罐"
|
||||
|
||||
msgid "Bunch"
|
||||
msgid_plural "Bunches"
|
||||
msgstr[0] "綑"
|
||||
|
||||
msgid "Gummy bears"
|
||||
msgstr "小熊軟糖"
|
||||
|
||||
msgid "Crisps"
|
||||
msgstr "洋芋片"
|
||||
|
||||
msgid "Eggs"
|
||||
msgstr "雞蛋"
|
||||
|
||||
msgid "Noodles"
|
||||
msgstr "麵條"
|
||||
|
||||
msgid "Pickles"
|
||||
msgstr "醃黃瓜"
|
||||
|
||||
msgid "Gulash soup"
|
||||
msgstr "匈牙利湯"
|
||||
|
||||
msgid "Yogurt"
|
||||
msgstr "優格"
|
||||
|
||||
msgid "Cheese"
|
||||
msgstr "起司"
|
||||
|
||||
msgid "Cold cuts"
|
||||
msgstr "午餐肉"
|
||||
|
||||
msgid "Paprika"
|
||||
msgstr "辣椒"
|
||||
|
||||
msgid "Cucumber"
|
||||
msgstr "黃瓜"
|
||||
|
||||
msgid "Radish"
|
||||
msgstr "蘿蔔"
|
||||
|
||||
msgid "Tomato"
|
||||
msgstr "番茄"
|
||||
|
||||
msgid "Changed towels in the bathroom"
|
||||
msgstr "浴室毛巾"
|
||||
|
||||
msgid "Cleaned the kitchen floor"
|
||||
msgstr "清理廚房地板"
|
||||
|
||||
msgid "Warranty ends"
|
||||
msgstr "保存期限結束"
|
||||
|
||||
msgid "TV remote control"
|
||||
msgstr "電視遙控器"
|
||||
|
||||
msgid "Alarm clock"
|
||||
msgstr "鬧鐘"
|
||||
|
||||
msgid "Heat remote control"
|
||||
msgstr "加熱器遙控器"
|
||||
|
||||
msgid "Lawn mowed in the garden"
|
||||
msgstr "清理花園草坪"
|
||||
|
||||
msgid "Some good snacks"
|
||||
msgstr "美味零食"
|
||||
|
||||
msgid "Pizza dough"
|
||||
msgstr "披薩麵團"
|
||||
|
||||
msgid "Sieved tomatoes"
|
||||
msgstr "精選番茄"
|
||||
|
||||
msgid "Salami"
|
||||
msgstr "義大利香腸"
|
||||
|
||||
msgid "Toast"
|
||||
msgstr "吐司"
|
||||
|
||||
msgid "Minced meat"
|
||||
msgstr "絞肉"
|
||||
|
||||
msgid "Pizza"
|
||||
msgstr "披薩"
|
||||
|
||||
msgid "Spaghetti bolognese"
|
||||
msgstr "番茄肉醬意大利麵"
|
||||
|
||||
msgid "Sandwiches"
|
||||
msgstr "三明治"
|
||||
|
||||
msgid "English"
|
||||
msgstr "英文"
|
||||
|
||||
msgid "German"
|
||||
msgstr "德文"
|
||||
|
||||
msgid "Italian"
|
||||
msgstr "義大利文"
|
||||
|
||||
msgid "This is the note content of the recipe ingredient"
|
||||
msgstr "這是配方表中的標示內容"
|
||||
|
||||
msgid "Demo User"
|
||||
msgstr "測試用戶"
|
||||
|
||||
msgid "Gram"
|
||||
msgid_plural "Grams"
|
||||
msgstr[0] "克"
|
||||
|
||||
msgid "Flour"
|
||||
msgstr "麵粉"
|
||||
|
||||
msgid "Pancakes"
|
||||
msgstr "烤餅"
|
||||
|
||||
msgid "Sugar"
|
||||
msgstr "糖"
|
||||
|
||||
msgid "Home"
|
||||
msgstr "首頁"
|
||||
|
||||
msgid "Life"
|
||||
msgstr "生命"
|
||||
|
||||
msgid "Projects"
|
||||
msgstr "專案"
|
||||
|
||||
msgid "Repair the garage door"
|
||||
msgstr "修理車庫門"
|
||||
|
||||
msgid "Fork and improve grocy"
|
||||
msgstr "建立 Fork 並且改善 grocy"
|
||||
|
||||
msgid "Find a solution for what to do when I forget the door keys"
|
||||
msgstr "當我忘記鑰匙時去想辦法解決"
|
||||
|
||||
msgid "Sweets"
|
||||
msgstr "甜食"
|
||||
|
||||
msgid "Bakery products"
|
||||
msgstr "烘焙用品"
|
||||
|
||||
msgid "Tinned food"
|
||||
msgstr "罐裝食品"
|
||||
|
||||
msgid "Butchery products"
|
||||
msgstr "肉類食品"
|
||||
|
||||
msgid "Vegetables/Fruits"
|
||||
msgstr "蔬果"
|
||||
|
||||
msgid "Refrigerated products"
|
||||
msgstr "冷藏食品"
|
||||
|
||||
msgid "Coffee machine"
|
||||
msgstr "咖啡機"
|
||||
|
||||
msgid "Dishwasher"
|
||||
msgstr "洗碗機"
|
||||
|
||||
msgid "Liter"
|
||||
msgstr "公升"
|
||||
|
||||
msgid "Liters"
|
||||
msgstr "公升"
|
||||
|
||||
msgid "Bottle"
|
||||
msgstr "瓶"
|
||||
|
||||
msgid "Bottles"
|
||||
msgstr "瓶"
|
||||
|
||||
msgid "Milk"
|
||||
msgstr "牛奶"
|
||||
|
||||
msgid "Chocolate sauce"
|
||||
msgstr "巧克力醬"
|
||||
|
||||
msgid "Milliliters"
|
||||
msgstr "毫升"
|
||||
|
||||
msgid "Milliliter"
|
||||
msgstr "毫升"
|
||||
|
||||
msgid "Bottom"
|
||||
msgstr "底部"
|
||||
|
||||
msgid "Topping"
|
||||
msgstr "配料"
|
||||
|
||||
msgid "French"
|
||||
msgstr "法文"
|
||||
|
||||
msgid "Turkish"
|
||||
msgstr "土耳其文"
|
||||
|
||||
msgid "Spanish"
|
||||
msgstr "西班牙文"
|
||||
|
||||
msgid "Russian"
|
||||
msgstr "俄語"
|
||||
|
||||
msgid "The thing which happens on the 5th of every month"
|
||||
msgstr "每月5號發生的事情"
|
||||
|
||||
msgid "The thing which happens daily"
|
||||
msgstr "每天發生的事情"
|
||||
|
||||
msgid "The thing which happens on Mondays and Wednesdays"
|
||||
msgstr "每周一與每周三會發生的事情"
|
||||
|
||||
msgid "Swedish"
|
||||
msgstr "瑞典文"
|
||||
|
||||
msgid "Polish"
|
||||
msgstr "波蘭文"
|
||||
|
||||
msgid "Milk Chocolate"
|
||||
msgstr "牛奶巧克力"
|
||||
|
||||
msgid "Dark Chocolate"
|
||||
msgstr "黑巧克力"
|
||||
|
||||
msgid "Slice"
|
||||
msgid_plural "Slices"
|
||||
msgstr[0] "切片"
|
||||
|
||||
msgid "Example userentity"
|
||||
msgstr "Example userentity"
|
||||
|
||||
msgid "This is an example user entity..."
|
||||
msgstr "這是一個 user entity..."
|
||||
|
||||
msgid "Custom field"
|
||||
msgstr "自訂義區域"
|
||||
|
||||
msgid "Example field value..."
|
||||
msgstr "範例值"
|
||||
|
||||
msgid "Waffle rolls"
|
||||
msgstr "蛋捲"
|
||||
|
||||
msgid "Danish"
|
||||
msgstr "丹麥文"
|
||||
|
||||
msgid "Dutch"
|
||||
msgstr "荷蘭文"
|
||||
|
||||
msgid "Norwegian"
|
||||
msgstr "挪威文"
|
||||
|
||||
msgid "Demo"
|
||||
msgstr "範例"
|
||||
|
||||
msgid "Stable version"
|
||||
msgstr "穩定版本"
|
||||
|
||||
msgid "Preview version"
|
||||
msgstr "預覽版本"
|
||||
|
||||
msgid "current release"
|
||||
msgstr "當前版本"
|
||||
|
||||
msgid "not yet released"
|
||||
msgstr "尚未發布"
|
||||
|
||||
msgid "Portuguese (Brazil)"
|
||||
msgstr "葡萄牙文(巴西)"
|
||||
|
||||
msgid "This is a note"
|
||||
msgstr "這是一個標註"
|
||||
|
||||
msgid "Freezer"
|
||||
msgstr "电冰箱"
|
||||
|
||||
msgid "Hungarian"
|
||||
msgstr "匈牙利文"
|
||||
|
||||
msgid "Slovak"
|
||||
msgstr "斯洛伐克文"
|
||||
|
||||
msgid "Czech"
|
||||
msgstr "捷克文"
|
||||
|
||||
msgid "Portuguese (Portugal)"
|
||||
msgstr "葡萄牙文(葡萄牙)"
|
||||
|
||||
# Use a in your country well known supermarket name
|
||||
msgid "DemoSupermarket1"
|
||||
msgstr "範例超市1"
|
||||
|
||||
# Use a in your country well known supermarket name
|
||||
msgid "DemoSupermarket2"
|
||||
msgstr "範例超市2"
|
||||
|
||||
msgid "Japanese"
|
||||
msgstr ""
|
||||
|
||||
msgid "Chinese (Taiwan)"
|
||||
msgstr ""
|
44
localization/zh_TW/stock_transaction_types.po
Normal file
44
localization/zh_TW/stock_transaction_types.po
Normal file
@@ -0,0 +1,44 @@
|
||||
# Translators:
|
||||
# jd615645 <jd615645@gmail.com>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01 17:42+0000\n"
|
||||
"Last-Translator: jd615645 <jd615645@gmail.com>, 2020\n"
|
||||
"Language-Team: Chinese (Taiwan) (https://www.transifex.com/grocy/teams/93189/zh_TW/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: zh_TW\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Domain: grocy/stock_transaction_types\n"
|
||||
|
||||
msgid "purchase"
|
||||
msgstr "購買"
|
||||
|
||||
msgid "transfer_from"
|
||||
msgstr "轉自"
|
||||
|
||||
msgid "transfer_to"
|
||||
msgstr "轉給"
|
||||
|
||||
msgid "consume"
|
||||
msgstr "消耗"
|
||||
|
||||
msgid "inventory-correction"
|
||||
msgstr "庫存更變"
|
||||
|
||||
msgid "product-opened"
|
||||
msgstr "已開封產品"
|
||||
|
||||
msgid "stock-edit-old"
|
||||
msgstr "就庫存修改"
|
||||
|
||||
msgid "stock-edit-new"
|
||||
msgstr "新庫存修改"
|
||||
|
||||
msgid "self-production"
|
||||
msgstr "自我生產產品"
|
1865
localization/zh_TW/strings.po
Normal file
1865
localization/zh_TW/strings.po
Normal file
File diff suppressed because it is too large
Load Diff
47
localization/zh_TW/userfield_types.po
Normal file
47
localization/zh_TW/userfield_types.po
Normal file
@@ -0,0 +1,47 @@
|
||||
# Translators:
|
||||
# jd615645 <jd615645@gmail.com>, 2020
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-01 17:43+0000\n"
|
||||
"Last-Translator: jd615645 <jd615645@gmail.com>, 2020\n"
|
||||
"Language-Team: Chinese (Taiwan) (https://www.transifex.com/grocy/teams/93189/zh_TW/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: zh_TW\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Domain: grocy/userfield_types\n"
|
||||
|
||||
msgid "text-single-line"
|
||||
msgstr "單行"
|
||||
|
||||
msgid "text-multi-line"
|
||||
msgstr "多行"
|
||||
|
||||
msgid "number-integral"
|
||||
msgstr "數量(整數)"
|
||||
|
||||
msgid "number-decimal"
|
||||
msgstr "數量(有小數)"
|
||||
|
||||
msgid "date"
|
||||
msgstr "日期"
|
||||
|
||||
msgid "datetime"
|
||||
msgstr "日期與時間"
|
||||
|
||||
msgid "checkbox"
|
||||
msgstr "多選"
|
||||
|
||||
msgid "preset-list"
|
||||
msgstr "巢狀列表"
|
||||
|
||||
msgid "preset-checklist"
|
||||
msgstr "巢狀勾選"
|
||||
|
||||
msgid "link"
|
||||
msgstr "連結"
|
30
middleware/CorsMiddleware.php
Normal file
30
middleware/CorsMiddleware.php
Normal file
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace Grocy\Middleware;
|
||||
|
||||
use Psr\Http\Message\ServerRequestInterface as Request;
|
||||
use Psr\Http\Server\RequestHandlerInterface as RequestHandler;
|
||||
use Psr\Http\Message\ResponseInterface as Response;
|
||||
use Slim\Routing\RouteContext;
|
||||
|
||||
class CorsMiddleware extends BaseMiddleware
|
||||
{
|
||||
public function __invoke(Request $request, RequestHandler $handler): Response
|
||||
{
|
||||
$response = $handler->handle($request);
|
||||
|
||||
$routeContext = RouteContext::fromRequest($request);
|
||||
$routingResults = $routeContext->getRoutingResults();
|
||||
$methods = $routingResults->getAllowedMethods();
|
||||
//$requestHeaders = $request->getHeaderLine('Access-Control-Request-Headers');
|
||||
$origin = $request->getHeaderLine('Origin');
|
||||
|
||||
$response = $handler->handle($request);
|
||||
|
||||
$response = $response->withHeader('Access-Control-Allow-Origin', $origin);
|
||||
$response = $response->withHeader('Access-Control-Allow-Methods', implode(',', $methods));
|
||||
$response = $response->withHeader('Access-Control-Allow-Headers', 'Content-Type,GROCY-API-KEY');
|
||||
|
||||
return $response;
|
||||
}
|
||||
}
|
30
migrations/0099.sql
Normal file
30
migrations/0099.sql
Normal file
@@ -0,0 +1,30 @@
|
||||
CREATE TABLE shopping_locations (
|
||||
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
|
||||
name TEXT NOT NULL UNIQUE,
|
||||
description TEXT,
|
||||
row_created_timestamp DATETIME DEFAULT (datetime('now', 'localtime'))
|
||||
);
|
||||
|
||||
ALTER TABLE stock_log
|
||||
ADD shopping_location_id INTEGER;
|
||||
|
||||
ALTER TABLE stock
|
||||
ADD shopping_location_id INTEGER;
|
||||
|
||||
ALTER TABLE products
|
||||
ADD shopping_location_id INTEGER;
|
||||
|
||||
DROP VIEW stock_current_locations;
|
||||
CREATE VIEW stock_current_locations
|
||||
AS
|
||||
SELECT
|
||||
1 AS id, -- Dummy, LessQL needs an id column
|
||||
s.product_id,
|
||||
SUM(s.amount) as amount,
|
||||
s.location_id AS location_id,
|
||||
l.name AS location_name,
|
||||
l.is_freezer AS location_is_freezer
|
||||
FROM stock s
|
||||
JOIN locations l
|
||||
ON s.location_id = l.id
|
||||
GROUP BY s.product_id, s.location_id, l.name;
|
42
migrations/0100.sql
Normal file
42
migrations/0100.sql
Normal file
@@ -0,0 +1,42 @@
|
||||
DROP VIEW stock_current;
|
||||
CREATE VIEW stock_current
|
||||
AS
|
||||
SELECT
|
||||
pr.parent_product_id AS product_id,
|
||||
IFNULL((SELECT SUM(amount) FROM stock WHERE product_id = pr.parent_product_id), 0) AS amount,
|
||||
SUM(s.amount) * IFNULL(qucr.factor, 1) AS amount_aggregated,
|
||||
MIN(s.best_before_date) AS best_before_date,
|
||||
IFNULL((SELECT SUM(amount) FROM stock WHERE product_id = pr.parent_product_id AND open = 1), 0) AS amount_opened,
|
||||
IFNULL((SELECT SUM(amount) FROM stock WHERE product_id IN (SELECT sub_product_id FROM products_resolved WHERE parent_product_id = pr.parent_product_id) AND open = 1), 0) * IFNULL(qucr.factor, 1) AS amount_opened_aggregated,
|
||||
CASE WHEN p_sub.parent_product_id IS NOT NULL THEN 1 ELSE 0 END AS is_aggregated_amount
|
||||
FROM products_resolved pr
|
||||
JOIN stock s
|
||||
ON pr.sub_product_id = s.product_id
|
||||
JOIN products p_parent
|
||||
ON pr.parent_product_id = p_parent.id
|
||||
JOIN products p_sub
|
||||
ON pr.sub_product_id = p_sub.id
|
||||
LEFT JOIN quantity_unit_conversions_resolved qucr
|
||||
ON pr.sub_product_id = qucr.product_id
|
||||
AND p_sub.qu_id_stock = qucr.from_qu_id
|
||||
AND p_parent.qu_id_stock = qucr.to_qu_id
|
||||
GROUP BY pr.parent_product_id
|
||||
HAVING SUM(s.amount) > 0
|
||||
|
||||
UNION
|
||||
|
||||
-- This is the same as above but sub products not rolled up (no QU conversion and column is_aggregated_amount = 0 here)
|
||||
SELECT
|
||||
pr.sub_product_id AS product_id,
|
||||
SUM(s.amount) AS amount,
|
||||
SUM(s.amount) AS amount_aggregated,
|
||||
MIN(s.best_before_date) AS best_before_date,
|
||||
IFNULL((SELECT SUM(amount) FROM stock WHERE product_id = s.product_id AND open = 1), 0) AS amount_opened,
|
||||
IFNULL((SELECT SUM(amount) FROM stock WHERE product_id = s.product_id AND open = 1), 0) AS amount_opened_aggregated,
|
||||
0 AS is_aggregated_amount
|
||||
FROM products_resolved pr
|
||||
JOIN stock s
|
||||
ON pr.sub_product_id = s.product_id
|
||||
WHERE pr.parent_product_id != pr.sub_product_id
|
||||
GROUP BY pr.sub_product_id
|
||||
HAVING SUM(s.amount) > 0;
|
45
migrations/0101.sql
Normal file
45
migrations/0101.sql
Normal file
@@ -0,0 +1,45 @@
|
||||
DROP VIEW chores_current;
|
||||
CREATE VIEW chores_current
|
||||
AS
|
||||
SELECT
|
||||
x.chore_id,
|
||||
x.last_tracked_time,
|
||||
CASE WHEN x.rollover = 1 AND DATETIME('now', 'localtime') > x.next_estimated_execution_time THEN
|
||||
DATETIME(STRFTIME('%Y-%m-%d', DATETIME('now', 'localtime')) || ' ' || STRFTIME('%H:%M:%S', x.next_estimated_execution_time))
|
||||
ELSE
|
||||
x.next_estimated_execution_time
|
||||
END AS next_estimated_execution_time,
|
||||
x.track_date_only,
|
||||
x.next_execution_assigned_to_user_id
|
||||
FROM (
|
||||
|
||||
SELECT
|
||||
h.id AS chore_id,
|
||||
MAX(l.tracked_time) AS last_tracked_time,
|
||||
CASE h.period_type
|
||||
WHEN 'manually' THEN '2999-12-31 23:59:59'
|
||||
WHEN 'dynamic-regular' THEN DATETIME(MAX(l.tracked_time), '+' || CAST(h.period_days AS TEXT) || ' day')
|
||||
WHEN 'daily' THEN DATETIME(IFNULL(MAX(l.tracked_time), DATETIME('now', 'localtime')), '+' || CAST(h.period_interval AS TEXT) || ' day')
|
||||
WHEN 'weekly' THEN
|
||||
CASE
|
||||
WHEN period_config LIKE '%saturday%' THEN DATETIME(IFNULL(MAX(l.tracked_time), DATETIME('now', 'localtime')), '1 days', '+' || CAST((h.period_interval - 1) * 7 AS TEXT) || ' days', 'weekday 6')
|
||||
WHEN period_config LIKE '%friday%' THEN DATETIME(IFNULL(MAX(l.tracked_time), DATETIME('now', 'localtime')), '1 days', '+' || CAST((h.period_interval - 1) * 7 AS TEXT) || ' days', 'weekday 5')
|
||||
WHEN period_config LIKE '%thursday%' THEN DATETIME(IFNULL(MAX(l.tracked_time), DATETIME('now', 'localtime')), '1 days', '+' || CAST((h.period_interval - 1) * 7 AS TEXT) || ' days', 'weekday 4')
|
||||
WHEN period_config LIKE '%wednesday%' THEN DATETIME(IFNULL(MAX(l.tracked_time), DATETIME('now', 'localtime')), '1 days', '+' || CAST((h.period_interval - 1) * 7 AS TEXT) || ' days', 'weekday 3')
|
||||
WHEN period_config LIKE '%tuesday%' THEN DATETIME(IFNULL(MAX(l.tracked_time), DATETIME('now', 'localtime')), '1 days', '+' || CAST((h.period_interval - 1) * 7 AS TEXT) || ' days', 'weekday 2')
|
||||
WHEN period_config LIKE '%monday%' THEN DATETIME(IFNULL(MAX(l.tracked_time), DATETIME('now', 'localtime')), '1 days', '+' || CAST((h.period_interval - 1) * 7 AS TEXT) || ' days', 'weekday 1')
|
||||
WHEN period_config LIKE '%sunday%' THEN DATETIME(IFNULL(MAX(l.tracked_time), DATETIME('now', 'localtime')), '1 days', '+' || CAST((h.period_interval - 1) * 7 AS TEXT) || ' days', 'weekday 0')
|
||||
END
|
||||
WHEN 'monthly' THEN DATETIME(IFNULL(MAX(l.tracked_time), DATETIME('now', 'localtime')), '+' || CAST(h.period_interval AS TEXT) || ' month', 'start of month', '+' || CAST(h.period_days - 1 AS TEXT) || ' day')
|
||||
WHEN 'yearly' THEN DATETIME(IFNULL(MAX(l.tracked_time), DATETIME('now', 'localtime')), '+' || CAST(h.period_interval AS TEXT) || ' years')
|
||||
END AS next_estimated_execution_time,
|
||||
h.track_date_only,
|
||||
h.rollover,
|
||||
h.next_execution_assigned_to_user_id
|
||||
FROM chores h
|
||||
LEFT JOIN chores_log l
|
||||
ON h.id = l.chore_id
|
||||
AND l.undone = 0
|
||||
GROUP BY h.id, h.period_days
|
||||
|
||||
) x;
|
@@ -3,7 +3,8 @@
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@danielfarrell/bootstrap-combobox": "https://github.com/berrnd/bootstrap-combobox.git#master",
|
||||
"@fortawesome/fontawesome-free": "^5.12.1",
|
||||
"@ericblade/quagga2": "^0.0.20",
|
||||
"@fortawesome/fontawesome-free": "^5.13.0",
|
||||
"TagManager": "https://github.com/max-favilli/tagmanager.git#master",
|
||||
"animate.css": "^3.7.2",
|
||||
"bootbox": "^5.3.2",
|
||||
@@ -14,6 +15,7 @@
|
||||
"datatables.net-bs4": "^1.10.19",
|
||||
"datatables.net-colreorder": "^1.5.1",
|
||||
"datatables.net-colreorder-bs4": "^1.5.1",
|
||||
"datatables.net-plugins": "^1.10.20",
|
||||
"datatables.net-responsive": "^2.2.3",
|
||||
"datatables.net-responsive-bs4": "^2.2.3",
|
||||
"datatables.net-rowgroup": "^1.1.0",
|
||||
@@ -22,15 +24,14 @@
|
||||
"datatables.net-select-bs4": "^1.3.0",
|
||||
"fullcalendar": "^3.10.1",
|
||||
"gettext-translator": "2.1.0",
|
||||
"jquery": "^3.4.1",
|
||||
"jquery": "3.4.1",
|
||||
"jquery-lazy": "^1.7.10",
|
||||
"jquery-serializejson": "^2.9.0",
|
||||
"moment": "^2.24.0",
|
||||
"nosleep.js": "^0.9.0",
|
||||
"quagga": "^0.12.1",
|
||||
"sprintf-js": "^1.1.2",
|
||||
"startbootstrap-sb-admin": "4.0.0",
|
||||
"summernote": "^0.8.12",
|
||||
"summernote": "^0.8.16",
|
||||
"swagger-ui-dist": "^3.23.10",
|
||||
"tempusdominus-bootstrap-4": "https://github.com/berrnd/tempusdominus-bootstrap-4.git#master",
|
||||
"timeago": "^1.6.7",
|
||||
|
@@ -225,6 +225,55 @@ input::-webkit-inner-spin-button {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.table-inline-menu.dropdown-menu {
|
||||
padding-left: 12px;
|
||||
padding-right: 12px;
|
||||
width: 96vw; /* Set width of popup menu to screen size */
|
||||
}
|
||||
|
||||
|
||||
/* Set width of popup menu to fixed value on larger devices */
|
||||
@media (min-width: 400px) {
|
||||
.table-inline-menu.dropdown-menu {
|
||||
width: 400px;
|
||||
}
|
||||
}
|
||||
|
||||
.table-inline-menu .dropdown-item {
|
||||
width: auto;
|
||||
text-indent: -24px;
|
||||
}
|
||||
|
||||
.table-inline-menu .dropdown-item .dropdown-item-icon {
|
||||
min-width: 24px;
|
||||
padding-left:20px;
|
||||
text-align: center;
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.table-inline-menu .dropdown-item .dropdown-item-text {
|
||||
display: inline;
|
||||
padding: 0;
|
||||
word-wrap: break-word;
|
||||
white-space: pre-wrap;
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
/* Barcodescanner Quagga */
|
||||
#barcodescanner-container {
|
||||
max-height: 90vw;
|
||||
}
|
||||
#livestream-container {
|
||||
max-height: 100%;
|
||||
}
|
||||
#barcodescanner-livestream video {
|
||||
width: 100%;
|
||||
|
||||
}
|
||||
#barcodescanner-livestream canvas {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/* Third party component customizations - Bootstrap */
|
||||
|
||||
/* Hide the form validation feedback icons introduced in Bootstrap 4.2.0 - a colored border is enough */
|
||||
@@ -259,6 +308,11 @@ input::-webkit-inner-spin-button {
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
/* Always show modals over everything else */
|
||||
.modal {
|
||||
z-index: 99999;
|
||||
}
|
||||
|
||||
/* Third party component customizations - DataTables */
|
||||
.dataTable td {
|
||||
vertical-align: middle !important;
|
||||
|
@@ -1,3 +1,14 @@
|
||||
<?php
|
||||
|
||||
require_once __DIR__ . '/../helpers/PrerequisiteChecker.php';
|
||||
|
||||
try
|
||||
{
|
||||
(new PrerequisiteChecker)->checkRequirements();
|
||||
}
|
||||
catch (ERequirementNotMet $ex)
|
||||
{
|
||||
die('Unable to run grocy: ' . $ex->getMessage());
|
||||
}
|
||||
|
||||
require_once __DIR__ . '/../app.php';
|
||||
|
@@ -85,7 +85,12 @@ function OnBarcodeScanned(barcode)
|
||||
}, 200);
|
||||
}
|
||||
|
||||
$(document).on("Grocy.BarcodeScanned", function(e, barcode)
|
||||
$(document).on("Grocy.BarcodeScanned", function(e, barcode, target)
|
||||
{
|
||||
if (target !== "#scanned_barcod")
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
OnBarcodeScanned(barcode);
|
||||
});
|
||||
|
@@ -1,5 +1,58 @@
|
||||
Grocy.Components.BarcodeScanner = { };
|
||||
|
||||
Grocy.Components.BarcodeScanner.LiveVideoSizeAdjusted = false;
|
||||
Grocy.Components.BarcodeScanner.CheckCapabilities = async function()
|
||||
{
|
||||
var track = Quagga.CameraAccess.getActiveTrack();
|
||||
var capabilities = {};
|
||||
if (typeof track.getCapabilities === 'function') {
|
||||
capabilities = track.getCapabilities();
|
||||
}
|
||||
|
||||
// If there is more than 1 camera, show the camera selection
|
||||
var cameras = await Quagga.CameraAccess.enumerateVideoDevices();
|
||||
var cameraSelect = document.querySelector('.cameraSelect-wrapper');
|
||||
if (cameraSelect) {
|
||||
cameraSelect.style.display = cameras.length > 1 ? 'inline-block' : 'none';
|
||||
}
|
||||
|
||||
// Check if the camera is capable to turn on a torch.
|
||||
var canTorch = typeof capabilities.torch === 'boolean' && capabilities.torch
|
||||
// Remove the torch button, if either the device can not torch or AutoTorchOn is set.
|
||||
var node = document.querySelector('.torch');
|
||||
if (node) {
|
||||
node.style.display = canTorch && !Grocy.FeatureFlags.GROCY_FEATURE_FLAG_AUTO_TORCH_ON_WITH_CAMERA ? 'inline-block' : 'none';
|
||||
}
|
||||
// If AutoTorchOn is set, turn on the torch.
|
||||
if (canTorch && Grocy.FeatureFlags.GROCY_FEATURE_FLAG_AUTO_TORCH_ON_WITH_CAMERA) {
|
||||
Grocy.Components.BarcodeScanner.TorchOn(track);
|
||||
}
|
||||
|
||||
// Reduce the height of the video, if it's heigher than then the viewport
|
||||
if (!Grocy.Components.BarcodeScanner.LiveVideoSizeAdjusted)
|
||||
{
|
||||
var bc = document.getElementById('barcodescanner-container');
|
||||
if (bc)
|
||||
{
|
||||
var bcAspectRatio = bc.offsetWidth / bc.offsetHeight;
|
||||
var settings = track.getSettings();
|
||||
if (bcAspectRatio > settings.aspectRatio)
|
||||
{
|
||||
var v = document.querySelector('#barcodescanner-livestream video')
|
||||
if (v)
|
||||
{
|
||||
var c = document.querySelector('#barcodescanner-livestream canvas')
|
||||
var newWidth = v.clientWidth / bcAspectRatio * settings.aspectRatio + 'px';
|
||||
v.style.width = newWidth;
|
||||
c.style.width = newWidth;
|
||||
}
|
||||
}
|
||||
|
||||
Grocy.Components.BarcodeScanner.LiveVideoSizeAdjusted = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Grocy.Components.BarcodeScanner.StartScanning = function()
|
||||
{
|
||||
Grocy.Components.BarcodeScanner.DecodedCodesCount = 0;
|
||||
@@ -11,9 +64,8 @@ Grocy.Components.BarcodeScanner.StartScanning = function()
|
||||
type: "LiveStream",
|
||||
target: document.querySelector("#barcodescanner-livestream"),
|
||||
constraints: {
|
||||
width: 436,
|
||||
height: 327,
|
||||
facingMode: "environment"
|
||||
facingMode: "environment",
|
||||
...(window.localStorage.getItem('cameraId') && {deviceId : window.localStorage.getItem('cameraId')}) // If preferred cameraId is set, request to use that specific camera
|
||||
}
|
||||
},
|
||||
locator: {
|
||||
@@ -34,7 +86,7 @@ Grocy.Components.BarcodeScanner.StartScanning = function()
|
||||
}
|
||||
}
|
||||
},
|
||||
numOfWorkers: 2,
|
||||
numOfWorkers: Grocy.UserSettings.quagga2_numofworkers,
|
||||
frequency: 10,
|
||||
decoder: {
|
||||
readers: [
|
||||
@@ -64,12 +116,16 @@ Grocy.Components.BarcodeScanner.StartScanning = function()
|
||||
{
|
||||
Grocy.FrontendHelpers.ShowGenericError("Error while initializing the barcode scanning library", error.message);
|
||||
toastr.info(__t("Camera access is only possible when supported and allowed by your browser and when grocy is served via a secure (https://) connection"));
|
||||
window.localStorage.removeItem("cameraId");
|
||||
setTimeout(function()
|
||||
{
|
||||
bootbox.hideAll();
|
||||
}, 500);
|
||||
return;
|
||||
}
|
||||
|
||||
Grocy.Components.BarcodeScanner.CheckCapabilities();
|
||||
|
||||
Quagga.start();
|
||||
});
|
||||
}
|
||||
@@ -84,6 +140,19 @@ Grocy.Components.BarcodeScanner.StopScanning = function()
|
||||
bootbox.hideAll();
|
||||
}
|
||||
|
||||
Grocy.Components.BarcodeScanner.TorchOn = function(track)
|
||||
{
|
||||
if (track) {
|
||||
track.applyConstraints({
|
||||
advanced: [
|
||||
{
|
||||
torch: true
|
||||
}
|
||||
]
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Quagga.onDetected(function(result)
|
||||
{
|
||||
$.each(result.codeResult.decodedCodes, function(id, error)
|
||||
@@ -98,7 +167,7 @@ Quagga.onDetected(function(result)
|
||||
if (Grocy.Components.BarcodeScanner.DecodedCodesErrorCount / Grocy.Components.BarcodeScanner.DecodedCodesCount < 0.15)
|
||||
{
|
||||
Grocy.Components.BarcodeScanner.StopScanning();
|
||||
$(document).trigger("Grocy.BarcodeScanned", [result.codeResult.code]);
|
||||
$(document).trigger("Grocy.BarcodeScanned", [result.codeResult.code, Grocy.Components.BarcodeScanner.CurrentTarget]);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -133,7 +202,7 @@ Quagga.onProcessed(function(result)
|
||||
}
|
||||
});
|
||||
|
||||
$(document).on("click", "#barcodescanner-start-button", function(e)
|
||||
$(document).on("click", "#barcodescanner-start-button", async function(e)
|
||||
{
|
||||
e.preventDefault();
|
||||
var inputElement = $(e.currentTarget).prev();
|
||||
@@ -144,7 +213,9 @@ $(document).on("click", "#barcodescanner-start-button", function(e)
|
||||
return;
|
||||
}
|
||||
|
||||
bootbox.dialog({
|
||||
Grocy.Components.BarcodeScanner.CurrentTarget = inputElement.attr("data-target");
|
||||
|
||||
var dialog = bootbox.dialog({
|
||||
message: '<div id="barcodescanner-container" class="col"><div id="barcodescanner-livestream"></div></div>',
|
||||
title: __t('Scan a barcode'),
|
||||
onEscape: function()
|
||||
@@ -157,10 +228,10 @@ $(document).on("click", "#barcodescanner-start-button", function(e)
|
||||
buttons: {
|
||||
torch: {
|
||||
label: '<i class="far fa-lightbulb"></i>',
|
||||
className: 'btn-warning responsive-button',
|
||||
className: 'btn-warning responsive-button torch',
|
||||
callback: function()
|
||||
{
|
||||
Quagga.CameraAccess.getActiveTrack().applyConstraints({ advanced: [{ torch: true }] });
|
||||
Grocy.Components.BarcodeScanner.TorchOn(Quagga.CameraAccess.getActiveTrack());
|
||||
return false;
|
||||
}
|
||||
},
|
||||
@@ -174,6 +245,28 @@ $(document).on("click", "#barcodescanner-start-button", function(e)
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Add camera select to existing dialog
|
||||
dialog.find('.bootbox-body').append('<div class="form-group py-0 my-1 cameraSelect-wrapper"><select class="form-control cameraSelect"><select class="form-control cameraSelect" style="display: none"></select></div>');
|
||||
var cameraSelect = document.querySelector('.cameraSelect');
|
||||
|
||||
var cameras = await Quagga.CameraAccess.enumerateVideoDevices();
|
||||
cameras.forEach(camera => {
|
||||
var option = document.createElement("option");
|
||||
option.text = camera.label ? camera.label : camera.deviceId; // Use camera label if it exists, else show device id
|
||||
option.value = camera.deviceId;
|
||||
cameraSelect.appendChild(option);
|
||||
});
|
||||
|
||||
// Set initial value to preferred camera if one exists - and if not, start out empty
|
||||
cameraSelect.value = window.localStorage.getItem('cameraId');
|
||||
|
||||
cameraSelect.onchange = function(){
|
||||
window.localStorage.setItem('cameraId', cameraSelect.value);
|
||||
Quagga.stop();
|
||||
Grocy.Components.BarcodeScanner.StartScanning();
|
||||
};
|
||||
|
||||
Grocy.Components.BarcodeScanner.StartScanning();
|
||||
});
|
||||
|
||||
@@ -183,11 +276,11 @@ setTimeout(function()
|
||||
{
|
||||
if ($(this).hasAttr("disabled"))
|
||||
{
|
||||
$(this).after('<a id="barcodescanner-start-button" class="btn btn-sm btn-primary text-white disabled"><i class="fas fa-camera"></i></a>');
|
||||
$(this).after('<a id="barcodescanner-start-button" class="btn btn-sm btn-primary text-white disabled" data-target="' + $(this).attr("data-target") + '"><i class="fas fa-camera"></i></a>');
|
||||
}
|
||||
else
|
||||
{
|
||||
$(this).after('<a id="barcodescanner-start-button" class="btn btn-sm btn-primary text-white"><i class="fas fa-camera"></i></a>');
|
||||
$(this).after('<a id="barcodescanner-start-button" class="btn btn-sm btn-primary text-white" data-target="' + $(this).attr("data-target") + '"><i class="fas fa-camera"></i></a>');
|
||||
}
|
||||
});
|
||||
}, 50);
|
||||
|
@@ -276,6 +276,7 @@ $('.datetimepicker').on('update.datetimepicker', function(e)
|
||||
Grocy.Components.DateTimePicker.GetInputElement().trigger('input');
|
||||
Grocy.Components.DateTimePicker.GetInputElement().trigger('change');
|
||||
Grocy.Components.DateTimePicker.GetInputElement().trigger('keypress');
|
||||
Grocy.Components.DateTimePicker.GetInputElement().trigger('keyup');
|
||||
});
|
||||
|
||||
$('.datetimepicker').on('hide.datetimepicker', function(e)
|
||||
@@ -283,6 +284,7 @@ $('.datetimepicker').on('hide.datetimepicker', function(e)
|
||||
Grocy.Components.DateTimePicker.GetInputElement().trigger('input');
|
||||
Grocy.Components.DateTimePicker.GetInputElement().trigger('change');
|
||||
Grocy.Components.DateTimePicker.GetInputElement().trigger('keypress');
|
||||
Grocy.Components.DateTimePicker.GetInputElement().trigger('keyup');
|
||||
});
|
||||
|
||||
$("#datetimepicker-shortcut").on("click", function()
|
||||
|
@@ -276,6 +276,7 @@ $('.datetimepicker2').on('update.datetimepicker', function(e)
|
||||
Grocy.Components.DateTimePicker2.GetInputElement().trigger('input');
|
||||
Grocy.Components.DateTimePicker2.GetInputElement().trigger('change');
|
||||
Grocy.Components.DateTimePicker2.GetInputElement().trigger('keypress');
|
||||
Grocy.Components.DateTimePicker2.GetInputElement().trigger('keyup');
|
||||
});
|
||||
|
||||
$('.datetimepicker2').on('hide.datetimepicker', function(e)
|
||||
@@ -283,6 +284,7 @@ $('.datetimepicker2').on('hide.datetimepicker', function(e)
|
||||
Grocy.Components.DateTimePicker2.GetInputElement().trigger('input');
|
||||
Grocy.Components.DateTimePicker2.GetInputElement().trigger('change');
|
||||
Grocy.Components.DateTimePicker2.GetInputElement().trigger('keypress');
|
||||
Grocy.Components.DateTimePicker2.GetInputElement().trigger('keyup');
|
||||
});
|
||||
|
||||
$("#datetimepicker2-shortcut").on("click", function()
|
||||
|
@@ -83,7 +83,7 @@ $(".input-group-productamountpicker").on("change", function()
|
||||
$("#qu-conversion-info").text(__t("This equals %1$s %2$s in stock", destinationAmount.toLocaleString(), destinationQuName));
|
||||
}
|
||||
|
||||
$("#amount").val(destinationAmount);
|
||||
$("#amount").val(destinationAmount.toLocaleString({ minimumFractionDigits: 0, maximumFractionDigits: 4 }));
|
||||
});
|
||||
|
||||
$("#display_amount").on("keyup", function()
|
||||
|
@@ -118,12 +118,30 @@ Grocy.Components.ProductCard.Refresh = function(productId)
|
||||
$("#productcard-no-price-data-hint").addClass("d-none");
|
||||
|
||||
Grocy.Components.ProductCard.ReInitPriceHistoryChart();
|
||||
var datasets = {};
|
||||
var chart = Grocy.Components.ProductCard.PriceHistoryChart.data;
|
||||
priceHistoryDataPoints.forEach((dataPoint) =>
|
||||
{
|
||||
Grocy.Components.ProductCard.PriceHistoryChart.data.labels.push(moment(dataPoint.date).toDate());
|
||||
var key = __t("Unknown store");
|
||||
if (dataPoint.shopping_location)
|
||||
{
|
||||
key = dataPoint.shopping_location.name
|
||||
}
|
||||
|
||||
if (!datasets[key]) {
|
||||
datasets[key] = []
|
||||
}
|
||||
chart.labels.push(moment(dataPoint.date).toDate());
|
||||
datasets[key].push(dataPoint.price);
|
||||
|
||||
var dataset = Grocy.Components.ProductCard.PriceHistoryChart.data.datasets[0];
|
||||
dataset.data.push(dataPoint.price);
|
||||
});
|
||||
Object.keys(datasets).forEach((key) => {
|
||||
chart.datasets.push({
|
||||
data: datasets[key],
|
||||
fill: false,
|
||||
borderColor: "HSL(" + (129 * chart.datasets.length) + ",100%,50%)",
|
||||
label: key,
|
||||
});
|
||||
});
|
||||
Grocy.Components.ProductCard.PriceHistoryChart.update();
|
||||
}
|
||||
@@ -155,13 +173,9 @@ Grocy.Components.ProductCard.ReInitPriceHistoryChart = function()
|
||||
labels: [ //Date objects
|
||||
// Will be populated in Grocy.Components.ProductCard.Refresh
|
||||
],
|
||||
datasets: [{
|
||||
data: [
|
||||
// Will be populated in Grocy.Components.ProductCard.Refresh
|
||||
],
|
||||
fill: false,
|
||||
borderColor: '%s7a2b8'
|
||||
}]
|
||||
datasets: [ //Datasets
|
||||
// Will be populated in Grocy.Components.ProductCard.Refresh
|
||||
]
|
||||
},
|
||||
options: {
|
||||
scales: {
|
||||
@@ -189,7 +203,7 @@ Grocy.Components.ProductCard.ReInitPriceHistoryChart = function()
|
||||
}]
|
||||
},
|
||||
legend: {
|
||||
display: false
|
||||
display: true
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@@ -227,8 +227,13 @@ $('#product_id_text_input').on('blur', function(e)
|
||||
}
|
||||
});
|
||||
|
||||
$(document).on("Grocy.BarcodeScanned", function(e, barcode)
|
||||
$(document).on("Grocy.BarcodeScanned", function(e, barcode, target)
|
||||
{
|
||||
if (!(target == "@productpicker" || target == "undefined" || target == undefined)) // Default target
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Don't know why the blur event does not fire immediately ... this works...
|
||||
|
||||
Grocy.Components.ProductPicker.GetInputElement().focusout();
|
||||
|
68
public/viewjs/components/shoppinglocationpicker.js
Normal file
68
public/viewjs/components/shoppinglocationpicker.js
Normal file
@@ -0,0 +1,68 @@
|
||||
Grocy.Components.ShoppingLocationPicker = { };
|
||||
|
||||
Grocy.Components.ShoppingLocationPicker.GetPicker = function()
|
||||
{
|
||||
return $('#shopping_location_id');
|
||||
}
|
||||
|
||||
Grocy.Components.ShoppingLocationPicker.GetInputElement = function()
|
||||
{
|
||||
return $('#shopping_location_id_text_input');
|
||||
}
|
||||
|
||||
Grocy.Components.ShoppingLocationPicker.GetValue = function()
|
||||
{
|
||||
return $('#shopping_location_id').val();
|
||||
}
|
||||
|
||||
Grocy.Components.ShoppingLocationPicker.SetValue = function(value)
|
||||
{
|
||||
Grocy.Components.ShoppingLocationPicker.GetInputElement().val(value);
|
||||
Grocy.Components.ShoppingLocationPicker.GetInputElement().trigger('change');
|
||||
}
|
||||
|
||||
Grocy.Components.ShoppingLocationPicker.SetId = function(value)
|
||||
{
|
||||
Grocy.Components.ShoppingLocationPicker.GetPicker().val(value);
|
||||
Grocy.Components.ShoppingLocationPicker.GetPicker().data('combobox').refresh();
|
||||
Grocy.Components.ShoppingLocationPicker.GetInputElement().trigger('change');
|
||||
}
|
||||
|
||||
Grocy.Components.ShoppingLocationPicker.Clear = function()
|
||||
{
|
||||
Grocy.Components.ShoppingLocationPicker.SetValue('');
|
||||
Grocy.Components.ShoppingLocationPicker.SetId(null);
|
||||
}
|
||||
|
||||
$('.shopping-location-combobox').combobox({
|
||||
appendId: '_text_input',
|
||||
bsVersion: '4',
|
||||
clearIfNoMatch: false
|
||||
});
|
||||
|
||||
var prefillByName = Grocy.Components.ShoppingLocationPicker.GetPicker().parent().data('prefill-by-name').toString();
|
||||
if (typeof prefillByName !== "undefined")
|
||||
{
|
||||
possibleOptionElement = $("#shopping_location_id option:contains(\"" + prefillByName + "\")").first();
|
||||
|
||||
if (possibleOptionElement.length > 0)
|
||||
{
|
||||
$('#shopping_location_id').val(possibleOptionElement.val());
|
||||
$('#shopping_location_id').data('combobox').refresh();
|
||||
$('#shopping_location_id').trigger('change');
|
||||
|
||||
var nextInputElement = $(Grocy.Components.ShoppingLocationPicker.GetPicker().parent().data('next-input-selector').toString());
|
||||
nextInputElement.focus();
|
||||
}
|
||||
}
|
||||
|
||||
var prefillById = Grocy.Components.ShoppingLocationPicker.GetPicker().parent().data('prefill-by-id').toString();
|
||||
if (typeof prefillById !== "undefined")
|
||||
{
|
||||
$('#shopping_location_id').val(prefillById);
|
||||
$('#shopping_location_id').data('combobox').refresh();
|
||||
$('#shopping_location_id').trigger('change');
|
||||
|
||||
var nextInputElement = $(Grocy.Components.ShoppingLocationPicker.GetPicker().parent().data('next-input-selector').toString());
|
||||
nextInputElement.focus();
|
||||
}
|
@@ -98,7 +98,7 @@
|
||||
$("#amount").attr("max", "999999");
|
||||
$("#amount").attr("step", "1");
|
||||
$("#amount").parent().find(".invalid-feedback").text(__t('The amount cannot be lower than %s', '1'));
|
||||
$('#amount').val(Grocy.UserSettings.stock_default_consume_amount);
|
||||
$('#amount').val(parseFloat(Grocy.UserSettings.stock_default_consume_amount).toLocaleString({ minimumFractionDigits: 0, maximumFractionDigits: 4 }));
|
||||
$('#amount_qu_unit').text("");
|
||||
$("#tare-weight-handling-info").addClass("d-none");
|
||||
Grocy.Components.ProductPicker.Clear();
|
||||
@@ -162,7 +162,7 @@ $('#save-mark-as-open-button').on('click', function(e)
|
||||
Grocy.FrontendHelpers.EndUiBusy("consume-form");
|
||||
toastr.success(__t('Marked %1$s of %2$s as opened', jsonForm.amount + " " + __n(jsonForm.amount, productDetails.quantity_unit_stock.name, productDetails.quantity_unit_stock.name_plural), productDetails.product.name) + '<br><a class="btn btn-secondary btn-sm mt-2" href="#" onclick="UndoStockTransaction(\'' + result.transaction_id + '\')"><i class="fas fa-undo"></i> ' + __t("Undo") + '</a>');
|
||||
|
||||
$('#amount').val(Grocy.UserSettings.stock_default_consume_amount);
|
||||
$('#amount').val(parseFloat(Grocy.UserSettings.stock_default_consume_amount).toLocaleString({ minimumFractionDigits: 0, maximumFractionDigits: 4 }));
|
||||
Grocy.Components.ProductPicker.Clear();
|
||||
Grocy.Components.ProductPicker.GetInputElement().focus();
|
||||
Grocy.FrontendHelpers.ValidateForm('consume-form');
|
||||
@@ -200,49 +200,82 @@ $("#location_id").on('change', function(e)
|
||||
}
|
||||
|
||||
if (locationId)
|
||||
{
|
||||
Grocy.Api.Get("stock/products/" + Grocy.Components.ProductPicker.GetValue() + '/entries',
|
||||
function(stockEntries)
|
||||
{
|
||||
Grocy.Api.Get("stock/products/" + Grocy.Components.ProductPicker.GetValue() + '/entries',
|
||||
function(stockEntries)
|
||||
{
|
||||
stockEntries.forEach(stockEntry =>
|
||||
{
|
||||
stockEntries.forEach(stockEntry =>
|
||||
var openTxt = __t("Not opened");
|
||||
if (stockEntry.open == 1)
|
||||
{
|
||||
var openTxt = __t("Not opened");
|
||||
if (stockEntry.open == 1)
|
||||
openTxt = __t("Opened");
|
||||
}
|
||||
|
||||
if (stockEntry.location_id == locationId)
|
||||
{
|
||||
$("#specific_stock_entry").append($("<option>", {
|
||||
value: stockEntry.stock_id,
|
||||
amount: stockEntry.amount,
|
||||
text: __t("Amount: %1$s; Expires on %2$s; Bought on %3$s", stockEntry.amount, moment(stockEntry.best_before_date).format("YYYY-MM-DD"), moment(stockEntry.purchased_date).format("YYYY-MM-DD")) + "; " + openTxt
|
||||
}));
|
||||
|
||||
sumValue = sumValue + parseFloat(stockEntry.amount);
|
||||
|
||||
if (stockEntry.stock_id == stockId)
|
||||
{
|
||||
openTxt = __t("Opened");
|
||||
$("#specific_stock_entry").val(stockId);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
if (stockEntry.location_id == locationId)
|
||||
Grocy.Api.Get('stock/products/' + Grocy.Components.ProductPicker.GetValue(),
|
||||
function(productDetails)
|
||||
{
|
||||
if (productDetails.product.enable_tare_weight_handling == 1)
|
||||
{
|
||||
$("#specific_stock_entry").append($("<option>", {
|
||||
value: stockEntry.stock_id,
|
||||
amount: stockEntry.amount,
|
||||
text: __t("Amount: %1$s; Expires on %2$s; Bought on %3$s", stockEntry.amount, moment(stockEntry.best_before_date).format("YYYY-MM-DD"), moment(stockEntry.purchased_date).format("YYYY-MM-DD")) + "; " + openTxt
|
||||
}));
|
||||
sumValue = sumValue + parseFloat(stockEntry.amount);
|
||||
$("#amount").attr("min", productDetails.product.tare_weight);
|
||||
$('#amount').attr('max', sumValue + parseFloat(productDetails.product.tare_weight));
|
||||
$("#amount").parent().find(".invalid-feedback").text(__t('The amount must be between %1$s and %2$s', parseFloat(productDetails.product.tare_weight).toLocaleString(), (parseFloat(productDetails.stock_amount) + parseFloat(productDetails.product.tare_weight)).toLocaleString()));
|
||||
$("#tare-weight-handling-info").removeClass("d-none");
|
||||
}
|
||||
else
|
||||
{
|
||||
$("#tare-weight-handling-info").addClass("d-none");
|
||||
|
||||
if (stockEntry.stock_id == stockId)
|
||||
if (productDetails.product.allow_partial_units_in_stock == 1)
|
||||
{
|
||||
$("#specific_stock_entry").val(stockId);
|
||||
$("#amount").attr("min", "0.01");
|
||||
$("#amount").attr("step", "0.01");
|
||||
$("#amount").parent().find(".invalid-feedback").text(__t('The amount must be between %1$s and %2$s', 0.01.toLocaleString(), parseFloat(productDetails.stock_amount).toLocaleString()));
|
||||
}
|
||||
else
|
||||
{
|
||||
$("#amount").attr("min", "1");
|
||||
$("#amount").attr("step", "1");
|
||||
$("#amount").parent().find(".invalid-feedback").text(__t('The amount must be between %1$s and %2$s', "1", parseFloat(productDetails.stock_amount).toLocaleString()));
|
||||
}
|
||||
|
||||
$('#amount').attr('max', sumValue);
|
||||
|
||||
if (sumValue == 0)
|
||||
{
|
||||
$("#amount").parent().find(".invalid-feedback").text(__t('There are no units available at this location'));
|
||||
}
|
||||
}
|
||||
});
|
||||
$("#amount").attr("max", sumValue);
|
||||
if (sumValue == 0)
|
||||
},
|
||||
function (xhr)
|
||||
{
|
||||
$("#amount").parent().find(".invalid-feedback").text(__t('There are no units available at this location'));
|
||||
}
|
||||
else
|
||||
{
|
||||
$("#amount").parent().find(".invalid-feedback").text(__t('The amount must be between %1$s and %2$s', "1", sumValue));
|
||||
}
|
||||
},
|
||||
function(xhr)
|
||||
{
|
||||
console.error(xhr);
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
);
|
||||
},
|
||||
function(xhr)
|
||||
{
|
||||
console.error(xhr);
|
||||
}
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
Grocy.Components.ProductPicker.GetPicker().on('change', function(e)
|
||||
@@ -379,7 +412,7 @@ Grocy.Components.ProductPicker.GetPicker().on('change', function(e)
|
||||
}
|
||||
});
|
||||
|
||||
$('#amount').val(Grocy.UserSettings.stock_default_consume_amount);
|
||||
$('#amount').val(parseFloat(Grocy.UserSettings.stock_default_consume_amount).toLocaleString({ minimumFractionDigits: 0, maximumFractionDigits: 4 }));
|
||||
Grocy.FrontendHelpers.ValidateForm('consume-form');
|
||||
|
||||
$('#amount').on('focus', function(e)
|
||||
|
@@ -17,6 +17,9 @@
|
||||
var jsonData = { };
|
||||
jsonData.new_amount = jsonForm.new_amount;
|
||||
jsonData.best_before_date = Grocy.Components.DateTimePicker.GetValue();
|
||||
if (Grocy.FeatureFlags.GROCY_FEATURE_FLAG_STOCK_PRICE_TRACKING) {
|
||||
jsonData.shopping_location_id = Grocy.Components.ShoppingLocationPicker.GetValue();
|
||||
}
|
||||
if (Grocy.FeatureFlags.GROCY_FEATURE_FLAG_STOCK_LOCATION_TRACKING)
|
||||
{
|
||||
jsonData.location_id = Grocy.Components.LocationPicker.GetValue();
|
||||
@@ -84,6 +87,9 @@
|
||||
$('#price').val('');
|
||||
Grocy.Components.DateTimePicker.Clear();
|
||||
Grocy.Components.ProductPicker.SetValue('');
|
||||
if (Grocy.FeatureFlags.GROCY_FEATURE_FLAG_STOCK_PRICE_TRACKING) {
|
||||
Grocy.Components.ShoppingLocationPicker.SetValue('');
|
||||
}
|
||||
Grocy.Components.ProductPicker.GetInputElement().focus();
|
||||
Grocy.Components.ProductCard.Refresh(jsonForm.product_id);
|
||||
Grocy.FrontendHelpers.ValidateForm('inventory-form');
|
||||
@@ -149,7 +155,10 @@ Grocy.Components.ProductPicker.GetPicker().on('change', function(e)
|
||||
$("#tare-weight-handling-info").addClass("d-none");
|
||||
}
|
||||
|
||||
$('#price').val(productDetails.last_price);
|
||||
$('#price').val(parseFloat(productDetails.last_price).toLocaleString({ minimumFractionDigits: 2, maximumFractionDigits: 2 }));
|
||||
if (Grocy.FeatureFlags.GROCY_FEATURE_FLAG_STOCK_PRICE_TRACKING) {
|
||||
Grocy.Components.ShoppingLocationPicker.SetId(productDetails.last_shopping_location_id);
|
||||
}
|
||||
if (Grocy.FeatureFlags.GROCY_FEATURE_FLAG_STOCK_LOCATION_TRACKING)
|
||||
{
|
||||
Grocy.Components.LocationPicker.SetId(productDetails.location.id);
|
||||
|
@@ -423,3 +423,24 @@ $("#qu-conversion-add-button").on("click", function(e)
|
||||
Grocy.ProductEditFormRedirectUri = U("/quantityunitconversion/new?product=editobjectid");
|
||||
$('#save-product-button').click();
|
||||
});
|
||||
|
||||
$('#qu_id_purchase').blur(function(e)
|
||||
{
|
||||
// Preset the stock quantity unit with the purchase quantity unit, if the stock quantity unit is unset.
|
||||
var QuIdStock = $('#qu_id_stock');
|
||||
var QuIdPurchase = $('#qu_id_purchase');
|
||||
if (QuIdStock[0].selectedIndex === 0 && QuIdPurchase[0].selectedIndex !== 0) {
|
||||
QuIdStock[0].selectedIndex = QuIdPurchase[0].selectedIndex;
|
||||
Grocy.FrontendHelpers.ValidateForm('product-form');
|
||||
}
|
||||
});
|
||||
|
||||
$(document).on("Grocy.BarcodeScanned", function(e, barcode, target)
|
||||
{
|
||||
if (target != "#barcode-taginput")
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
$("#barcode-taginput").tagsManager("pushTag", barcode);
|
||||
});
|
||||
|
@@ -17,7 +17,7 @@
|
||||
|
||||
if ($("input[name='price-type']:checked").val() == "total-price")
|
||||
{
|
||||
price = price / amount;
|
||||
price = price / jsonForm.amount;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,6 +29,9 @@
|
||||
var jsonData = {};
|
||||
jsonData.amount = amount;
|
||||
jsonData.best_before_date = Grocy.Components.DateTimePicker.GetValue();
|
||||
if (Grocy.FeatureFlags.GROCY_FEATURE_FLAG_STOCK_PRICE_TRACKING) {
|
||||
jsonData.shopping_location_id = Grocy.Components.ShoppingLocationPicker.GetValue();
|
||||
}
|
||||
jsonData.price = price;
|
||||
if (Grocy.FeatureFlags.GROCY_FEATURE_FLAG_STOCK_LOCATION_TRACKING)
|
||||
{
|
||||
@@ -89,7 +92,7 @@
|
||||
$("#amount").attr("min", "1");
|
||||
$("#amount").attr("step", "1");
|
||||
$("#amount").parent().find(".invalid-feedback").text(__t('The amount cannot be lower than %s', '1'));
|
||||
$('#amount').val(Grocy.UserSettings.stock_default_purchase_amount);
|
||||
$('#amount').val(parseFloat(Grocy.UserSettings.stock_default_purchase_amount).toLocaleString({ minimumFractionDigits: 0, maximumFractionDigits: 4 }));
|
||||
$('#price').val('');
|
||||
$('#amount_qu_unit').text("");
|
||||
$("#tare-weight-handling-info").addClass("d-none");
|
||||
@@ -99,6 +102,9 @@
|
||||
}
|
||||
Grocy.Components.DateTimePicker.Clear();
|
||||
Grocy.Components.ProductPicker.SetValue('');
|
||||
if (Grocy.FeatureFlags.GROCY_FEATURE_FLAG_STOCK_PRICE_TRACKING) {
|
||||
Grocy.Components.ShoppingLocationPicker.SetValue('');
|
||||
}
|
||||
Grocy.Components.ProductPicker.GetInputElement().focus();
|
||||
Grocy.Components.ProductCard.Refresh(jsonForm.product_id);
|
||||
Grocy.FrontendHelpers.ValidateForm('purchase-form');
|
||||
@@ -137,7 +143,19 @@ if (Grocy.Components.ProductPicker !== undefined)
|
||||
Grocy.Api.Get('stock/products/' + productId,
|
||||
function(productDetails)
|
||||
{
|
||||
$('#price').val(productDetails.last_price);
|
||||
$('#price').val(parseFloat(productDetails.last_price).toLocaleString({ minimumFractionDigits: 2, maximumFractionDigits: 2 }));
|
||||
|
||||
if (Grocy.FeatureFlags.GROCY_FEATURE_FLAG_STOCK_PRICE_TRACKING) {
|
||||
if (productDetails.last_shopping_location_id != null)
|
||||
{
|
||||
Grocy.Components.ShoppingLocationPicker.SetId(productDetails.last_shopping_location_id);
|
||||
}
|
||||
else
|
||||
{
|
||||
Grocy.Components.ShoppingLocationPicker.SetId(productDetails.default_shopping_location_id);
|
||||
}
|
||||
}
|
||||
|
||||
if (Grocy.FeatureFlags.GROCY_FEATURE_FLAG_STOCK_LOCATION_TRACKING)
|
||||
{
|
||||
Grocy.Components.LocationPicker.SetId(productDetails.location.id);
|
||||
@@ -149,7 +167,7 @@ if (Grocy.Components.ProductPicker !== undefined)
|
||||
}
|
||||
else
|
||||
{
|
||||
$('#amount_qu_unit').text(productDetails.quantity_unit_purchase.name + " (" + __t("will be multiplied a factor of %1$s to get %2$s", parseInt(productDetails.product.qu_factor_purchase_to_stock).toString(), __n(2, productDetails.quantity_unit_stock.name, productDetails.quantity_unit_stock.name_plural)) + ")");
|
||||
$('#amount_qu_unit').text(productDetails.quantity_unit_purchase.name + " (" + __t("will be multiplied by a factor of %1$s to get %2$s", parseFloat(productDetails.product.qu_factor_purchase_to_stock).toLocaleString({ minimumFractionDigits: 0, maximumFractionDigits: 2 }), __n(2, productDetails.quantity_unit_stock.name, productDetails.quantity_unit_stock.name_plural)) + ")");
|
||||
}
|
||||
|
||||
if (productDetails.product.allow_partial_units_in_stock == 1)
|
||||
@@ -240,7 +258,7 @@ if (Grocy.Components.ProductPicker !== undefined)
|
||||
});
|
||||
}
|
||||
|
||||
$('#amount').val(Grocy.UserSettings.stock_default_purchase_amount);
|
||||
$('#amount').val(parseFloat(Grocy.UserSettings.stock_default_purchase_amount).toLocaleString({ minimumFractionDigits: 0, maximumFractionDigits: 4 }));
|
||||
Grocy.FrontendHelpers.ValidateForm('purchase-form');
|
||||
|
||||
if (Grocy.Components.ProductPicker)
|
||||
@@ -309,7 +327,7 @@ $('#amount').on('change', function(e)
|
||||
|
||||
if (GetUriParam("flow") === "shoppinglistitemtostock")
|
||||
{
|
||||
$('#amount').val(GetUriParam("amount"));
|
||||
$('#amount').val(parseFloat(GetUriParam("amount")).toLocaleString({ minimumFractionDigits: 0, maximumFractionDigits: 4 }));
|
||||
}
|
||||
|
||||
function UndoStockBooking(bookingId)
|
||||
|
@@ -79,7 +79,10 @@ Grocy.Components.ProductPicker.GetPicker().on('change', function(e)
|
||||
|
||||
$("#not_check_stock_fulfillment").prop("checked", productDetails.product.not_check_stock_fulfillment_for_recipes == 1);
|
||||
|
||||
Grocy.Components.ProductAmountPicker.SetQuantityUnit(productDetails.quantity_unit_stock.id);
|
||||
if (!$("#only_check_single_unit_in_stock").prop("checked"))
|
||||
{
|
||||
Grocy.Components.ProductAmountPicker.SetQuantityUnit(productDetails.quantity_unit_stock.id);
|
||||
}
|
||||
|
||||
$('#display_amount').focus();
|
||||
Grocy.FrontendHelpers.ValidateForm('recipe-pos-form');
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user