diff --git a/changelog/47_UNRELEASED_xxxx-xx-xx.md b/changelog/47_UNRELEASED_xxxx-xx-xx.md index e64f2861..55129e4e 100644 --- a/changelog/47_UNRELEASED_xxxx-xx-xx.md +++ b/changelog/47_UNRELEASED_xxxx-xx-xx.md @@ -15,3 +15,8 @@ - New translations: (thanks all the translators) - Swedish (demo available at https://demo-sv.grocy.info) - Polish (demo available at https://demo-pl.grocy.info) +- Internal improvement: Localizations are now handled via gettext, both on server and client side + - Mainly to properly handle languages with more than 2 plural forms + - This involved some string changes which results in a needed (re)translation of about 20 strings (excluding demo data) + - Also applies to quantity units, n-plural forms can be entered on the quantity unit edit page + - It's not required to install the PHP gettext extension, on both, server and client, managed implementations of gettext are used ([oscarotero/Gettext](https://github.com/oscarotero/Gettext) & [oscarotero/gettext-translator](https://github.com/oscarotero/gettext-translator)) diff --git a/controllers/BaseController.php b/controllers/BaseController.php index 776d9853..3a677ce3 100644 --- a/controllers/BaseController.php +++ b/controllers/BaseController.php @@ -40,7 +40,7 @@ class BaseController { return $localizationService->__n($number, $singularForm, $pluralForm); }); - $container->view->set('jsGettextTranslatorStrings', $localizationService->GetTranslationsForJavaScriptTranslator()); + $container->view->set('GettextPo', $localizationService->GetPoAsJsonString()); $container->view->set('U', function($relativePath, $isResource = false) use($container) { diff --git a/controllers/RecipesController.php b/controllers/RecipesController.php index eea38c6c..b04ad208 100644 --- a/controllers/RecipesController.php +++ b/controllers/RecipesController.php @@ -72,7 +72,7 @@ class RecipesController extends BaseController if ($recipeId == 'new') { $newRecipe = $this->Database->recipes()->createRow(array( - 'name' => $this->LocalizationService-Translator->__t('New recipe') + 'name' => $this->LocalizationService->__t('New recipe') )); $newRecipe->save(); diff --git a/controllers/StockController.php b/controllers/StockController.php index f292c629..a322b0ea 100644 --- a/controllers/StockController.php +++ b/controllers/StockController.php @@ -199,7 +199,9 @@ class StockController extends BaseController { return $this->AppContainer->view->render($response, 'quantityunitform', [ 'mode' => 'create', - 'userfields' => $this->UserfieldsService->GetFields('quantity_units') + 'userfields' => $this->UserfieldsService->GetFields('quantity_units'), + 'pluralCount' => $this->LocalizationService->GetPluralCount(), + 'pluralRule' => $this->LocalizationService->GetPluralDefinition() ]); } else @@ -207,7 +209,9 @@ class StockController extends BaseController return $this->AppContainer->view->render($response, 'quantityunitform', [ 'quantityunit' => $this->Database->quantity_units($args['quantityunitId']), 'mode' => 'edit', - 'userfields' => $this->UserfieldsService->GetFields('quantity_units') + 'userfields' => $this->UserfieldsService->GetFields('quantity_units'), + 'pluralCount' => $this->LocalizationService->GetPluralCount(), + 'pluralRule' => $this->LocalizationService->GetPluralDefinition() ]); } } diff --git a/controllers/SystemApiController.php b/controllers/SystemApiController.php index 420c2215..af04f125 100644 --- a/controllers/SystemApiController.php +++ b/controllers/SystemApiController.php @@ -32,7 +32,7 @@ class SystemApiController extends BaseApiController { $requestBody = $request->getParsedBody(); - $this->LocalizationService->LogMissingLocalization(GROCY_CULTURE, $requestBody['text']); + $this->LocalizationService->CheckAndAddMissingTranslationToPot($requestBody['text']); return $this->EmptyApiResponse($response); } catch (\Exception $ex) diff --git a/helpers/extensions.php b/helpers/extensions.php index 109740f6..8bf97e23 100644 --- a/helpers/extensions.php +++ b/helpers/extensions.php @@ -184,16 +184,6 @@ function GetUserDisplayName($user) return $displayName; } -function Pluralize($number, $singularForm, $pluralForm) -{ - $text = $singularForm; - if ($number != 1 && $pluralForm !== null && !empty($pluralForm)) - { - $text = $pluralForm; - } - return $text; -} - function IsValidFileName($fileName) { if(preg_match('=^[^/?*;:{}\\\\]+\.[^/?*;:{}\\\\]+$=', $fileName)) diff --git a/localization/da/chore_types.po b/localization/da/chore_types.po index dc6110e2..c47253ad 100644 --- a/localization/da/chore_types.po +++ b/localization/da/chore_types.po @@ -1,15 +1,19 @@ +# Translators: +# Bernd Bestel , 2019 +# msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Translation migration from old PHP array files\n" -"Language-Team: http://www.transifex.com/grocy/grocy/language/da\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 , 2019\n" +"Language-Team: Danish (https://www.transifex.com/grocy/teams/93189/da/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2019-05-01T17:59:16+00:00\n" -"PO-Revision-Date: 2019-05-01T17:59:16+00:00\n" "Language: da\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Domain: grocy/chore_types\n" msgid "manually" diff --git a/localization/da/component_translations.po b/localization/da/component_translations.po index 4fe39f8e..1de9e2c5 100644 --- a/localization/da/component_translations.po +++ b/localization/da/component_translations.po @@ -1,15 +1,16 @@ +# msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Translation migration from old PHP array files\n" -"Language-Team: http://www.transifex.com/grocy/grocy/language/da\n" +"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n" +"PO-Revision-Date: 2019-05-01 17:42+0000\n" +"Language-Team: Danish (https://www.transifex.com/grocy/teams/93189/da/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2019-05-01T17:59:16+00:00\n" -"PO-Revision-Date: 2019-05-01T17:59:16+00:00\n" "Language: da\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Domain: grocy/component_translations\n" msgid "timeago_locale" diff --git a/localization/da/demo_data.po b/localization/da/demo_data.po index d663d471..8917845b 100644 --- a/localization/da/demo_data.po +++ b/localization/da/demo_data.po @@ -35,40 +35,34 @@ msgid "Fridge" msgstr "Køleskab" msgid "Piece" -msgstr "Styk" - -msgid "Pieces" -msgstr "Stykker" +msgid_plural "Pieces" +msgstr[0] "" +msgstr[1] "" msgid "Pack" -msgstr "Pakke" - -msgid "Packs" -msgstr "Pakker" +msgid_plural "Packs" +msgstr[0] "" +msgstr[1] "" msgid "Glass" -msgstr "Glas" - -msgid "Glasses" -msgstr "Glas" +msgid_plural "Glasses" +msgstr[0] "" +msgstr[1] "" msgid "Tin" -msgstr "Beholder" - -msgid "Tins" -msgstr "Beholdere" +msgid_plural "Tins" +msgstr[0] "" +msgstr[1] "" msgid "Can" -msgstr "Dåse" - -msgid "Cans" -msgstr "Dåser" +msgid_plural "Cans" +msgstr[0] "" +msgstr[1] "" msgid "Bunch" -msgstr "Bundt" - -msgid "Bunches" -msgstr "Bundt" +msgid_plural "Bunches" +msgstr[0] "" +msgstr[1] "" msgid "Gummy bears" msgstr "Vingummi bamser" @@ -176,10 +170,9 @@ msgid "Demo User" msgstr "Demo Bruger" msgid "Gram" -msgstr "Gram" - -msgid "Grams" -msgstr "Gram" +msgid_plural "Grams" +msgstr[0] "" +msgstr[1] "" msgid "Flour" msgstr "Mel" diff --git a/localization/da/strings.po b/localization/da/strings.po index c4c3d401..9f16bff3 100644 --- a/localization/da/strings.po +++ b/localization/da/strings.po @@ -1,32 +1,53 @@ +# Translators: +# dark159123 , 2019 +# Bernd Bestel , 2019 +# msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Translation migration from old PHP array files\n" -"Language-Team: http://www.transifex.com/grocy/grocy/language/da\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 , 2019\n" +"Language-Team: Danish (https://www.transifex.com/grocy/teams/93189/da/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2019-05-01T17:59:16+00:00\n" -"PO-Revision-Date: 2019-05-01T17:59:16+00:00\n" "Language: da\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Domain: grocy/strings\n" msgid "Stock overview" msgstr "Beholdnings oversigt" -msgid "%s products expiring within the next %s days" -msgstr "%s produkter der udløber inden for de næste %s dage" +msgid "%s product expires" +msgid_plural "%s products expiring" +msgstr[0] "" +msgstr[1] "" -msgid "%s products are already expired" -msgstr "%s produkter er allerede udløbede" +msgid "within the next day" +msgid_plural "within the next %s days" +msgstr[0] "" +msgstr[1] "" -msgid "%s products are below defined min. stock amount" -msgstr "Beholdningen af %s produkter er under minimums antallet" +msgid "%s product is already expired" +msgid_plural "%s products are already expired" +msgstr[0] "" +msgstr[1] "" + +msgid "%s product is below defined min. stock amount" +msgid_plural "%s products are below defined min. stock amount" +msgstr[0] "" +msgstr[1] "" msgid "Product" msgstr "Produkt" +msgid "%s Product" +msgid_plural "%s Products" +msgstr[0] "" +msgstr[1] "" + msgid "Amount" msgstr "Mængde" @@ -60,9 +81,6 @@ msgstr "Pligt overvågning" msgid "Battery tracking" msgstr "Batteri overvågning" -msgid "Products" -msgstr "Produkter" - msgid "Locations" msgstr "Steder" @@ -120,8 +138,10 @@ msgstr "Udløbet" msgid "Barcode lookup is disabled" msgstr "Stregkode opslag er slået fra" -msgid "will be added to the list of barcodes for the selected product on submit" -msgstr "Bliver tilføjet til stregkodelisten for det valgte produkt når du sender" +msgid "" +"will be added to the list of barcodes for the selected product on submit" +msgstr "" +"Bliver tilføjet til stregkodelisten for det valgte produkt når du sender" msgid "New amount" msgstr "Ny mængde" @@ -249,7 +269,9 @@ msgstr "aldrig" msgid "Add products that are below defined min. stock amount" msgstr "Tilføj produkter der er under minimumsantallet" -msgid "For purchases this amount of days will be added to today for the best before date suggestion" +msgid "" +"For purchases this amount of days will be added to today for the best before" +" date suggestion" msgstr "" msgid "This means 1 %s purchased will be converted into %s %s in stock" @@ -336,7 +358,9 @@ msgstr "Dette betyder %s bliver tilføjet til beholdningen" msgid "This means %s will be removed from stock" msgstr "Dette betyder at %s bliver fjernet fra beholdningen" -msgid "This means it is estimated that a new execution of this chore is tracked %s days after the last was tracked" +msgid "" +"This means it is estimated that a new execution of this chore is tracked %s " +"days after the last was tracked" msgstr "" msgid "Removed %s %s of %s from stock" @@ -348,18 +372,6 @@ msgstr "Omkring Grocy" msgid "Close" msgstr "Luk" -msgid "%s batteries are due to be charged within the next %s days" -msgstr "%s batterier skal oplades indenfor de næste %s dage" - -msgid "%s batteries are overdue to be charged" -msgstr "%s batterier trænger til at blive opladt" - -msgid "%s chores are due to be done within the next %s days" -msgstr "%s pligter skal udfyldes indenfor de næste %s dage" - -msgid "%s chores are overdue to be done" -msgstr "%s pligter skulle have været gjort" - msgid "Released on" msgstr "" @@ -474,14 +486,15 @@ msgstr "Skal udfyldes" msgid "Put missing products on shopping list" msgstr "Sæt manglende produkter på en indkøbsliste" -msgid "Not enough in stock, %s ingredients missing" -msgstr "Der er ikke nok i beholdningen. Der mangler %s ingredienser. " - msgid "Enough in stock" msgstr "Der er nok i beholdningen" -msgid "Not enough in stock, %s ingredients missing but already on the shopping list" -msgstr "Der er ikke nok i beholdningen. Der mangler %s ingredienser som allerede er på indkøbslisten" +msgid "" +"Not enough in stock, %s ingredient missing but already on the shopping list" +msgid_plural "" +"Not enough in stock, %s ingredients missing but already on the shopping list" +msgstr[0] "" +msgstr[1] "" msgid "Expand to fullscreen" msgstr "Udvid til fuldskærm" @@ -496,7 +509,9 @@ msgid "Recipe" msgstr "Opskrift" msgid "Not enough in stock, %s missing, %s already on shopping list" -msgstr "Der er ikke nok i beholdningen. Der mangler %s, %s er allerede i beholdningen" +msgstr "" +"Der er ikke nok i beholdningen. Der mangler %s, %s er allerede i " +"beholdningen" msgid "Show notes" msgstr "Vis noter" @@ -504,8 +519,12 @@ msgstr "Vis noter" msgid "Put missing amount on shopping list" msgstr "Put manglende mængde på indkøbsliste" -msgid "Are you sure to put all missing ingredients for recipe \"%s\" on the shopping list?" -msgstr "Er du sikker på du vil sætte alle manglende ingredienser til \"%s\" på indkøbslisten?" +msgid "" +"Are you sure to put all missing ingredients for recipe \"%s\" on the " +"shopping list?" +msgstr "" +"Er du sikker på du vil sætte alle manglende ingredienser til \"%s\" på " +"indkøbslisten?" msgid "Added for recipe %s" msgstr "Tilføjet til opskriften %s" @@ -585,42 +604,37 @@ msgstr "" msgid "The price cannot be lower than %s" msgstr "" -msgid "%s product expires within the next %s days" -msgstr "" - -msgid "%s product is already expired" -msgstr "" - -msgid "%s product is below defined min. stock amount" -msgstr "" - msgid "Unit" msgstr "" -msgid "Units" -msgstr "" +msgid "%s Unit" +msgid_plural "%s Units" +msgstr[0] "" +msgstr[1] "" -msgid "%s chore is due to be done within the next %s days" -msgstr "" +msgid "%s chore is due to be done" +msgid_plural "%s chores are due to be done" +msgstr[0] "" +msgstr[1] "" msgid "%s chore is overdue to be done" -msgstr "" +msgid_plural "%s chores are overdue to be done" +msgstr[0] "" +msgstr[1] "" -msgid "%s battery is due to be charged within the next %s days" -msgstr "" +msgid "%s battery is due to be charged" +msgid_plural "%s batteries are due to be charged" +msgstr[0] "" +msgstr[1] "" msgid "%s battery is overdue to be charged" -msgstr "" - -msgid "%s unit was automatically added and will apply in addition to the amount entered here" -msgstr "" +msgid_plural "%s batteries are overdue to be charged" +msgstr[0] "" +msgstr[1] "" msgid "in singular form" msgstr "" -msgid "in plural form" -msgstr "" - msgid "Never expires" msgstr "" @@ -633,10 +647,14 @@ msgstr "" msgid "Quantity unit" msgstr "" -msgid "Only check if a single unit is in stock (a different quantity can then be used above)" +msgid "" +"Only check if a single unit is in stock (a different quantity can then be " +"used above)" msgstr "" -msgid "Are you sure to consume all ingredients needed by recipe \"%s\" (ingredients marked with \"check only if a single unit is in stock\" will be ignored)?" +msgid "" +"Are you sure to consume all ingredients needed by recipe \"%s\" (ingredients" +" marked with \"check only if a single unit is in stock\" will be ignored)?" msgstr "" msgid "Removed all ingredients of recipe \"%s\" from stock" @@ -693,17 +711,15 @@ msgstr "" msgid "Are you sure to delete task \"%s\"?" msgstr "" -msgid "%s task is due to be done within the next %s days" -msgstr "" - -msgid "%s tasks are due to be done within the next %s days" -msgstr "" +msgid "%s task is due to be done" +msgid_plural "%s tasks are due to be done" +msgstr[0] "" +msgstr[1] "" msgid "%s task is overdue to be done" -msgstr "" - -msgid "%s tasks are overdue to be done" -msgstr "" +msgid_plural "%s tasks are overdue to be done" +msgstr[0] "" +msgstr[1] "" msgid "Edit task category" msgstr "" @@ -798,7 +814,9 @@ msgstr "" msgid "Image of product %s" msgstr "" -msgid "This product cannot be deleted because it is in stock, please remove the stock amount first." +msgid "" +"This product cannot be deleted because it is in stock, please remove the " +"stock amount first." msgstr "" msgid "Delete not possible" @@ -822,13 +840,16 @@ msgstr "" msgid "Create equipment" msgstr "" -msgid "If you don't select a file, the current instruction manual will not be altered" +msgid "" +"If you don't select a file, the current instruction manual will not be " +"altered" msgstr "" msgid "No instruction manual available" msgstr "" -msgid "The current instruction manual will be deleted when you save the equipment" +msgid "" +"The current instruction manual will be deleted when you save the equipment" msgstr "" msgid "No picture available" @@ -921,13 +942,17 @@ msgstr "" msgid "Use a specific stock item" msgstr "" -msgid "The first item in this list would be picked by the default rule which is \"First expiring first, then first in first out\"" +msgid "" +"The first item in this list would be picked by the default rule which is " +"\"First expiring first, then first in first out\"" msgstr "" -msgid "Mark %s %s of %s as open" +msgid "Mark %s of %s as open" msgstr "" -msgid "When a product was marked as opened, the best before date will be replaced by today + this amount of days (a value of 0 disables this)" +msgid "" +"When a product was marked as opened, the best before date will be replaced " +"by today + this amount of days (a value of 0 disables this)" msgstr "" msgid "Default best before days after opened" @@ -972,7 +997,9 @@ msgstr "" msgid "Shopping list to stock workflow" msgstr "" -msgid "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" +msgid "" +"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" msgstr "" msgid "Skip" @@ -993,7 +1020,11 @@ msgstr "" msgid "Do not check against the shopping list when adding missing items to it" msgstr "" -msgid "By default the amount to be added to the shopping list is \"needed amount - stock amount - shopping list amount\" - when this is enabled, it is only checked against the stock amount, not against what is already on the shopping list" +msgid "" +"By default the amount to be added to the shopping list is \"needed amount - " +"stock amount - shopping list amount\" - when this is enabled, it is only " +"checked against the stock amount, not against what is already on the " +"shopping list" msgstr "" msgid "Picture" @@ -1014,7 +1045,9 @@ msgstr "" msgid "Share/Integrate calendar (iCal)" msgstr "" -msgid "Use the following (public) URL to share or integrate the calendar in iCal format" +msgid "" +"Use the following (public) URL to share or integrate the calendar in iCal " +"format" msgstr "" msgid "Allow partial units in stock" @@ -1023,13 +1056,18 @@ msgstr "" msgid "Enable tare weight handling" msgstr "" -msgid "This is useful e.g. for flour in jars - on purchase/consume/inventory you always weigh the whole jar, the amount to be posted is then automatically calculated based on what is in stock and the tare weight defined below" +msgid "" +"This is useful e.g. for flour in jars - on purchase/consume/inventory you " +"always weigh the whole jar, the amount to be posted is then automatically " +"calculated based on what is in stock and the tare weight defined below" msgstr "" msgid "Tare weight" msgstr "" -msgid "Tare weight handling enabled - please weigh the whole container, the amount to be posted will be automatically calculcated" +msgid "" +"Tare weight handling enabled - please weigh the whole container, the amount " +"to be posted will be automatically calculcated" msgstr "" msgid "You have to select a location" @@ -1080,7 +1118,9 @@ msgstr "" msgid "Type a new product name or barcode and hit TAB to start a workflow" msgstr "" -msgid "This will be used as the default setting when adding this product as a recipe ingredient" +msgid "" +"This will be used as the default setting when adding this product as a " +"recipe ingredient" msgstr "" msgid "Add item" @@ -1187,3 +1227,26 @@ msgstr "" msgid "Edit userfield" msgstr "" + +msgid "Plural forms" +msgstr "" + +msgid "One plural form per line, the current language requires" +msgstr "" + +msgid "Plural count" +msgstr "" + +msgid "Plural rule" +msgstr "" + +msgid "in plural form" +msgstr "" + +msgid "Not enough in stock, %s ingredient missing" +msgid_plural "Not enough in stock, %s ingredients missing" +msgstr[0] "" +msgstr[1] "" + +msgid "Consume %s of %s" +msgstr "" diff --git a/localization/da/userfield_types.po b/localization/da/userfield_types.po index 5c82c285..e3984ffd 100644 --- a/localization/da/userfield_types.po +++ b/localization/da/userfield_types.po @@ -1,15 +1,16 @@ +# msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Translation migration from old PHP array files\n" -"Language-Team: http://www.transifex.com/grocy/grocy/language/da\n" +"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n" +"PO-Revision-Date: 2019-05-01 17:43+0000\n" +"Language-Team: Danish (https://www.transifex.com/grocy/teams/93189/da/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2019-05-01T17:59:16+00:00\n" -"PO-Revision-Date: 2019-05-01T17:59:16+00:00\n" "Language: da\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Domain: grocy/userfield_types\n" msgid "text-single-line" diff --git a/localization/de/demo_data.po b/localization/de/demo_data.po index 1ea3361f..07e29e29 100644 --- a/localization/de/demo_data.po +++ b/localization/de/demo_data.po @@ -35,40 +35,34 @@ msgid "Fridge" msgstr "Kühlschrank" msgid "Piece" -msgstr "Stück" - -msgid "Pieces" -msgstr "Stücke" +msgid_plural "Pieces" +msgstr[0] "Stück" +msgstr[1] "Stücke" msgid "Pack" -msgstr "Packung" - -msgid "Packs" -msgstr "Packungen" +msgid_plural "Packs" +msgstr[0] "Packung" +msgstr[1] "Packungen" msgid "Glass" -msgstr "Glas" - -msgid "Glasses" -msgstr "Gläser" +msgid_plural "Glasses" +msgstr[0] "Glas" +msgstr[1] "Gläser" msgid "Tin" -msgstr "Dose" - -msgid "Tins" -msgstr "Dosen" +msgid_plural "Tins" +msgstr[0] "Dose" +msgstr[1] "Dosen" msgid "Can" -msgstr "Becher" - -msgid "Cans" -msgstr "Becher" +msgid_plural "Cans" +msgstr[0] "Becher" +msgstr[1] "Becher" msgid "Bunch" -msgstr "Bund" - -msgid "Bunches" -msgstr "Bunde" +msgid_plural "Bunches" +msgstr[0] "Bund" +msgstr[1] "Bunde" msgid "Gummy bears" msgstr "Gummibärchen" @@ -176,10 +170,9 @@ msgid "Demo User" msgstr "Demo Benutzer" msgid "Gram" -msgstr "Gramm" - -msgid "Grams" -msgstr "Gramm" +msgid_plural "Grams" +msgstr[0] "Gramm" +msgstr[1] "Gramm" msgid "Flour" msgstr "Mehl" @@ -287,4 +280,4 @@ msgid "Swedish" msgstr "Schwedisch" msgid "Polish" -msgstr "" +msgstr "Polnisch" diff --git a/localization/de/strings.po b/localization/de/strings.po index 840517fd..0b6b674e 100644 --- a/localization/de/strings.po +++ b/localization/de/strings.po @@ -19,18 +19,34 @@ msgstr "" msgid "Stock overview" msgstr "Bestand" -msgid "%s products expiring within the next %s days" -msgstr "%s Produkte laufen innerhalb der nächsten %s Tage ab" +msgid "%s product expires" +msgid_plural "%s products expiring" +msgstr[0] "%s läuft ab" +msgstr[1] "%s Produkte laufen ab" -msgid "%s products are already expired" -msgstr "%s Produkte sind bereits abgelaufen" +msgid "within the next day" +msgid_plural "within the next %s days" +msgstr[0] "innerhalb des nächsten Tages" +msgstr[1] "innerhalb der nächsten %s Tage" -msgid "%s products are below defined min. stock amount" -msgstr "%s Produkte sind unter Mindestbestand" +msgid "%s product is already expired" +msgid_plural "%s products are already expired" +msgstr[0] "%s Produkt ist bereits abgelaufen" +msgstr[1] "%s Produkte sind bereits abgelaufen" + +msgid "%s product is below defined min. stock amount" +msgid_plural "%s products are below defined min. stock amount" +msgstr[0] "%s Produkt ist unter Mindestbestand" +msgstr[1] "%s Produkte sind unter Mindestbestand" msgid "Product" msgstr "Produkt" +msgid "%s Product" +msgid_plural "%s Products" +msgstr[0] "%s Produkt" +msgstr[1] "%s Produkte" + msgid "Amount" msgstr "Menge" @@ -64,9 +80,6 @@ msgstr "Hausarbeiten-Ausführung" msgid "Battery tracking" msgstr "Batterie-Ladezyklus" -msgid "Products" -msgstr "Produkte" - msgid "Locations" msgstr "Standorte" @@ -363,18 +376,6 @@ msgstr "Über grocy" msgid "Close" msgstr "Schließen" -msgid "%s batteries are due to be charged within the next %s days" -msgstr "%s Batterien müssen in den nächsten %s Tagen geladen werden" - -msgid "%s batteries are overdue to be charged" -msgstr "%s Batterien sind überfällig" - -msgid "%s chores are due to be done within the next %s days" -msgstr "%s Hausarbeiten stehen in den nächsten %s Tagen an" - -msgid "%s chores are overdue to be done" -msgstr "%s Hausarbeiten sind überfällig" - msgid "Released on" msgstr "Veröffentlicht am" @@ -489,15 +490,17 @@ msgstr "Bedarf im Bestand" msgid "Put missing products on shopping list" msgstr "Fehlende Produkte auf den Einkaufszettel setzen" -msgid "Not enough in stock, %s ingredients missing" -msgstr "Nicht ausreichend im Bestand, %s Zutaten fehlen" - msgid "Enough in stock" msgstr "Bestand reicht aus" msgid "" +"Not enough in stock, %s ingredient missing but already on the shopping list" +msgid_plural "" "Not enough in stock, %s ingredients missing but already on the shopping list" -msgstr "" +msgstr[0] "" +"Bestand nicht ausreichend, %s Zutat fehlt, steht aber bereits auf dem " +"Einkaufszettel" +msgstr[1] "" "Bestand nicht ausreichend, %s Zutaten fehlen, stehen aber bereits auf dem " "Einkaufszettel" @@ -610,46 +613,37 @@ msgstr "in %s pro Einkaufsmengeneinheit" msgid "The price cannot be lower than %s" msgstr "Der Preis darf nicht niedriger als %s sein" -msgid "%s product expires within the next %s days" -msgstr "%s Produkt läuft innerhalb der nächsten %s Tage ab" - -msgid "%s product is already expired" -msgstr "%s Produkt ist bereits abgelaufen" - -msgid "%s product is below defined min. stock amount" -msgstr "%s Produkt ist unter Mindestbestand" - msgid "Unit" msgstr "Einheit" -msgid "Units" -msgstr "Einheiten" +msgid "%s Unit" +msgid_plural "%s Units" +msgstr[0] "%s Einheit" +msgstr[1] "%s Einheiten" -msgid "%s chore is due to be done within the next %s days" -msgstr "%s Hausarbeit steht in den nächsten %s Tagen an" +msgid "%s chore is due to be done" +msgid_plural "%s chores are due to be done" +msgstr[0] "%s Hausarbeit steht an" +msgstr[1] "%s Hausarbeiten stehen an" msgid "%s chore is overdue to be done" -msgstr "%s Hausarbeit ist überfällig" +msgid_plural "%s chores are overdue to be done" +msgstr[0] "%s Hausarbeit ist überfällig" +msgstr[1] "%s Hausarbeiten sind überfällig" -msgid "%s battery is due to be charged within the next %s days" -msgstr "%s Batterie muss in den nächsten %s Tagen geladen werden" +msgid "%s battery is due to be charged" +msgid_plural "%s batteries are due to be charged" +msgstr[0] "%s Batterie muss geladen werden" +msgstr[1] "%s Batterien müssen geladen werden" msgid "%s battery is overdue to be charged" -msgstr "%s Batterie ist überfällig" - -msgid "" -"%s unit was automatically added and will apply in addition to the amount " -"entered here" -msgstr "" -"%s Einheit wurde automatisch hinzugefügt und gilt zusätzlich der hier " -"eingegebenen Menge" +msgid_plural "%s batteries are overdue to be charged" +msgstr[0] "%s Batterie ist überfällig" +msgstr[1] "%s Batterien sind überfällig" msgid "in singular form" msgstr "in der Einzahl" -msgid "in plural form" -msgstr "in der Mehrzahl" - msgid "Never expires" msgstr "Läuft nie ab" @@ -735,17 +729,15 @@ msgstr "Aufgabe bearbeiten" msgid "Are you sure to delete task \"%s\"?" msgstr "Aufgabe \"%s\" wirklich löschen?" -msgid "%s task is due to be done within the next %s days" -msgstr "%s Aufgabe steht in den nächsten %s Tagen an" - -msgid "%s tasks are due to be done within the next %s days" -msgstr "%s Aufgaben stehen in den nächsten %s Tagen an" +msgid "%s task is due to be done" +msgid_plural "%s tasks are due to be done" +msgstr[0] "%s Aufgabe steht an" +msgstr[1] "%s Aufgaben stehen an" msgid "%s task is overdue to be done" -msgstr "%s Aufgabe ist überfällig" - -msgid "%s tasks are overdue to be done" -msgstr "%s Aufgaben sind überfällig" +msgid_plural "%s tasks are overdue to be done" +msgstr[0] "%s Aufgabe ist überfällig" +msgstr[1] "%s Aufgaben sind überfällig" msgid "Edit task category" msgstr "Aufgabenkategorie bearbeiten" @@ -981,8 +973,8 @@ msgstr "" "Der erste Eintrag in dieser Liste würde von der Standardregel \"Zuerst " "ablaufende zuerst, dann First In - First Out\" ausgewählt werden" -msgid "Mark %s %s of %s as open" -msgstr "%s %s von %s als geöffnet markieren" +msgid "Mark %s of %s as open" +msgstr "%s %s als geöffnet markieren" msgid "" "When a product was marked as opened, the best before date will be replaced " @@ -1286,3 +1278,26 @@ msgstr "Dies ist erforderlich und darf nur Buchstaben und Zahlen enthalten" msgid "Edit userfield" msgstr "Benutzerfeld bearbeiten" + +msgid "Plural forms" +msgstr "Pluralformen" + +msgid "One plural form per line, the current language requires" +msgstr "Ein Pluralform pro Zeile, die aktuelle Sprache erfordert" + +msgid "Plural count" +msgstr "Plural Anzahl" + +msgid "Plural rule" +msgstr "Plural Regel" + +msgid "in plural form" +msgstr "in der Mehrzahl" + +msgid "Not enough in stock, %s ingredient missing" +msgid_plural "Not enough in stock, %s ingredients missing" +msgstr[0] "Nicht ausreichend im Bestand, %s Zutat fehlt" +msgstr[1] "Nicht ausreichend im Bestand, %s Zutaten fehlen" + +msgid "Consume %s of %s" +msgstr "Verbrauche %s %s" diff --git a/localization/demo_data.pot b/localization/demo_data.pot index 6eeaca39..772c430a 100644 --- a/localization/demo_data.pot +++ b/localization/demo_data.pot @@ -31,40 +31,34 @@ msgid "Fridge" msgstr "" msgid "Piece" -msgstr "" - -msgid "Pieces" -msgstr "" +msgid_plural "Pieces" +msgstr[0] "" +msgstr[1] "" msgid "Pack" -msgstr "" - -msgid "Packs" -msgstr "" +msgid_plural "Packs" +msgstr[0] "" +msgstr[1] "" msgid "Glass" -msgstr "" - -msgid "Glasses" -msgstr "" +msgid_plural "Glasses" +msgstr[0] "" +msgstr[1] "" msgid "Tin" -msgstr "" - -msgid "Tins" -msgstr "" +msgid_plural "Tins" +msgstr[0] "" +msgstr[1] "" msgid "Can" -msgstr "" - -msgid "Cans" -msgstr "" +msgid_plural "Cans" +msgstr[0] "" +msgstr[1] "" msgid "Bunch" -msgstr "" - -msgid "Bunches" -msgstr "" +msgid_plural "Bunches" +msgstr[0] "" +msgstr[1] "" msgid "Gummy bears" msgstr "" @@ -172,10 +166,9 @@ msgid "Demo User" msgstr "" msgid "Gram" -msgstr "" - -msgid "Grams" -msgstr "" +msgid_plural "Grams" +msgstr[0] "" +msgstr[1] "" msgid "Flour" msgstr "" diff --git a/localization/es/demo_data.po b/localization/es/demo_data.po index e0372239..1a2c784b 100644 --- a/localization/es/demo_data.po +++ b/localization/es/demo_data.po @@ -36,40 +36,34 @@ msgid "Fridge" msgstr "Nevera" msgid "Piece" -msgstr "Pieza" - -msgid "Pieces" -msgstr "Piezas" +msgid_plural "Pieces" +msgstr[0] "" +msgstr[1] "" msgid "Pack" -msgstr "Pack" - -msgid "Packs" -msgstr "Packs" +msgid_plural "Packs" +msgstr[0] "" +msgstr[1] "" msgid "Glass" -msgstr "Vaso" - -msgid "Glasses" -msgstr "Vasos" +msgid_plural "Glasses" +msgstr[0] "" +msgstr[1] "" msgid "Tin" -msgstr "Envase" - -msgid "Tins" -msgstr "Envases" +msgid_plural "Tins" +msgstr[0] "" +msgstr[1] "" msgid "Can" -msgstr "Lata" - -msgid "Cans" -msgstr "Latas" +msgid_plural "Cans" +msgstr[0] "" +msgstr[1] "" msgid "Bunch" -msgstr "Puñado" - -msgid "Bunches" -msgstr "Puñados" +msgid_plural "Bunches" +msgstr[0] "" +msgstr[1] "" msgid "Gummy bears" msgstr "Ositos" @@ -177,10 +171,9 @@ msgid "Demo User" msgstr "Usuario de demostración" msgid "Gram" -msgstr "Gramo" - -msgid "Grams" -msgstr "Gramos" +msgid_plural "Grams" +msgstr[0] "" +msgstr[1] "" msgid "Flour" msgstr "Harina" diff --git a/localization/es/strings.po b/localization/es/strings.po index 83f155ea..c4c69839 100644 --- a/localization/es/strings.po +++ b/localization/es/strings.po @@ -20,18 +20,34 @@ msgstr "" msgid "Stock overview" msgstr "Resumen de stock" -msgid "%s products expiring within the next %s days" -msgstr "%s productos caducan en los próximos %s días" +msgid "%s product expires" +msgid_plural "%s products expiring" +msgstr[0] "" +msgstr[1] "" -msgid "%s products are already expired" -msgstr "%s productos ya han caducado" +msgid "within the next day" +msgid_plural "within the next %s days" +msgstr[0] "" +msgstr[1] "" -msgid "%s products are below defined min. stock amount" -msgstr "%s productos están por debajo del mínimo de stock definido" +msgid "%s product is already expired" +msgid_plural "%s products are already expired" +msgstr[0] "" +msgstr[1] "" + +msgid "%s product is below defined min. stock amount" +msgid_plural "%s products are below defined min. stock amount" +msgstr[0] "" +msgstr[1] "" msgid "Product" msgstr "Producto" +msgid "%s Product" +msgid_plural "%s Products" +msgstr[0] "" +msgstr[1] "" + msgid "Amount" msgstr "Cantidad" @@ -65,9 +81,6 @@ msgstr "Seguimiento de tareas del hogar" msgid "Battery tracking" msgstr "Seguimiento de pilas" -msgid "Products" -msgstr "Productos" - msgid "Locations" msgstr "Lugares" @@ -364,19 +377,6 @@ msgstr "Sobre grocy" msgid "Close" msgstr "Cerrar" -msgid "%s batteries are due to be charged within the next %s days" -msgstr "%s pilas están pendientes de carga en los siguientes %s días" - -msgid "%s batteries are overdue to be charged" -msgstr "%s pilas han pasado su fecha de carga prevista" - -msgid "%s chores are due to be done within the next %s days" -msgstr "" -"%s tareas del hogar están pendientes de suceder en los siguientes %s días" - -msgid "%s chores are overdue to be done" -msgstr "%s tareas del hogar están vencidas" - msgid "Released on" msgstr "Publicado el" @@ -491,17 +491,15 @@ msgstr "Requerimientos completos" msgid "Put missing products on shopping list" msgstr "Añadir productos faltantes a la lista de la compra" -msgid "Not enough in stock, %s ingredients missing" -msgstr "No hay suficiente stock, faltan %s ingredientes" - msgid "Enough in stock" msgstr "Suficiente stock" msgid "" +"Not enough in stock, %s ingredient missing but already on the shopping list" +msgid_plural "" "Not enough in stock, %s ingredients missing but already on the shopping list" -msgstr "" -"No hay suficiente stock, faltan %s ingredientes, pero están en la lista de " -"la compra" +msgstr[0] "" +msgstr[1] "" msgid "Expand to fullscreen" msgstr "Pantalla completa" @@ -612,46 +610,37 @@ msgstr "en %s por unidad de compra" msgid "The price cannot be lower than %s" msgstr "El precio no puede ser menor que %s" -msgid "%s product expires within the next %s days" -msgstr "%s producto caduca en los próximos %s días" - -msgid "%s product is already expired" -msgstr "%s producto está ya caducado" - -msgid "%s product is below defined min. stock amount" -msgstr "%s producto está por debajo de la min. cantidad de stock" - msgid "Unit" msgstr "Unidad" -msgid "Units" -msgstr "Unidades" +msgid "%s Unit" +msgid_plural "%s Units" +msgstr[0] "" +msgstr[1] "" -msgid "%s chore is due to be done within the next %s days" -msgstr "%s tarea del hogar vence en los próximos %s días" +msgid "%s chore is due to be done" +msgid_plural "%s chores are due to be done" +msgstr[0] "" +msgstr[1] "" msgid "%s chore is overdue to be done" -msgstr "%s tarea del hogar está vencida" +msgid_plural "%s chores are overdue to be done" +msgstr[0] "" +msgstr[1] "" -msgid "%s battery is due to be charged within the next %s days" -msgstr "%s pila debe ser cargada en los próximos %s días" +msgid "%s battery is due to be charged" +msgid_plural "%s batteries are due to be charged" +msgstr[0] "" +msgstr[1] "" msgid "%s battery is overdue to be charged" -msgstr "%s pila ha vencido para ser cargada" - -msgid "" -"%s unit was automatically added and will apply in addition to the amount " -"entered here" -msgstr "" -"%s unidad se ha añadido automáticamente y se aplicará además de la cantidad " -"indicada aquí" +msgid_plural "%s batteries are overdue to be charged" +msgstr[0] "" +msgstr[1] "" msgid "in singular form" msgstr "en singular" -msgid "in plural form" -msgstr "en plural" - msgid "Never expires" msgstr "Nunca caduca" @@ -733,17 +722,15 @@ msgstr "Editar tarea" msgid "Are you sure to delete task \"%s\"?" msgstr "¿Estás seguro de borrar la tarea \"%s\"?" -msgid "%s task is due to be done within the next %s days" -msgstr "%s tarea vence en los próximos %s días" - -msgid "%s tasks are due to be done within the next %s days" -msgstr "%s tareas vencen en los próximos %s días" +msgid "%s task is due to be done" +msgid_plural "%s tasks are due to be done" +msgstr[0] "" +msgstr[1] "" msgid "%s task is overdue to be done" -msgstr "%s tarea está vencida" - -msgid "%s tasks are overdue to be done" -msgstr "%s tareas están vencidas" +msgid_plural "%s tasks are overdue to be done" +msgstr[0] "" +msgstr[1] "" msgid "Edit task category" msgstr "Editar categoría de tarea" @@ -976,8 +963,8 @@ msgstr "" "El primer elemento de esta lista sería elegido por la regla \"primero lo " "primero a caducar, luego primero en llegar, primero en salir\"" -msgid "Mark %s %s of %s as open" -msgstr "Marcar %s %s de %s como abierto" +msgid "Mark %s of %s as open" +msgstr "" msgid "" "When a product was marked as opened, the best before date will be replaced " @@ -1277,3 +1264,26 @@ msgstr "Es necesario y sólo puede contener letras y números" msgid "Edit userfield" msgstr "Editar campo de usuario" + +msgid "Plural forms" +msgstr "" + +msgid "One plural form per line, the current language requires" +msgstr "" + +msgid "Plural count" +msgstr "" + +msgid "Plural rule" +msgstr "" + +msgid "in plural form" +msgstr "en plural" + +msgid "Not enough in stock, %s ingredient missing" +msgid_plural "Not enough in stock, %s ingredients missing" +msgstr[0] "" +msgstr[1] "" + +msgid "Consume %s of %s" +msgstr "" diff --git a/localization/fr/chore_types.po b/localization/fr/chore_types.po index be5b71d6..fe4d24e8 100644 --- a/localization/fr/chore_types.po +++ b/localization/fr/chore_types.po @@ -1,15 +1,19 @@ +# Translators: +# Bernd Bestel , 2019 +# msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Translation migration from old PHP array files\n" -"Language-Team: http://www.transifex.com/grocy/grocy/language/fr\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 , 2019\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" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n" -"PO-Revision-Date: 2019-05-01T17:59:17+00:00\n" "Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Domain: grocy/chore_types\n" msgid "manually" diff --git a/localization/fr/demo_data.po b/localization/fr/demo_data.po index 0b573b84..1d021258 100644 --- a/localization/fr/demo_data.po +++ b/localization/fr/demo_data.po @@ -36,40 +36,34 @@ msgid "Fridge" msgstr "Réfrigérateur" msgid "Piece" -msgstr "Pièce" - -msgid "Pieces" -msgstr "Pièces" +msgid_plural "Pieces" +msgstr[0] "" +msgstr[1] "" msgid "Pack" -msgstr "Pack" - -msgid "Packs" -msgstr "Packs" +msgid_plural "Packs" +msgstr[0] "" +msgstr[1] "" msgid "Glass" -msgstr "Verre" - -msgid "Glasses" -msgstr "Verres" +msgid_plural "Glasses" +msgstr[0] "" +msgstr[1] "" msgid "Tin" -msgstr "Pot" - -msgid "Tins" -msgstr "Pots" +msgid_plural "Tins" +msgstr[0] "" +msgstr[1] "" msgid "Can" -msgstr "Canette" - -msgid "Cans" -msgstr "Canettes" +msgid_plural "Cans" +msgstr[0] "" +msgstr[1] "" msgid "Bunch" -msgstr "Brunch" - -msgid "Bunches" -msgstr "Brunchs" +msgid_plural "Bunches" +msgstr[0] "" +msgstr[1] "" msgid "Gummy bears" msgstr "Oursons en gélatine" @@ -177,10 +171,9 @@ msgid "Demo User" msgstr "Utilisateur de démonstration" msgid "Gram" -msgstr "Gramme" - -msgid "Grams" -msgstr "Grammes" +msgid_plural "Grams" +msgstr[0] "" +msgstr[1] "" msgid "Flour" msgstr "Farine" diff --git a/localization/fr/strings.po b/localization/fr/strings.po index 162401bf..c52c6e1d 100644 --- a/localization/fr/strings.po +++ b/localization/fr/strings.po @@ -1,32 +1,54 @@ +# Translators: +# Cedric Octave , 2019 +# bigoudo, 2019 +# Bernd Bestel , 2019 +# msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Translation migration from old PHP array files\n" -"Language-Team: http://www.transifex.com/grocy/grocy/language/fr\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 , 2019\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" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n" -"PO-Revision-Date: 2019-05-01T17:59:17+00:00\n" "Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Domain: grocy/strings\n" msgid "Stock overview" msgstr "Aperçu du stock" -msgid "%s products expiring within the next %s days" -msgstr "%s produits se périment dans les %s jours" +msgid "%s product expires" +msgid_plural "%s products expiring" +msgstr[0] "" +msgstr[1] "" -msgid "%s products are already expired" -msgstr "%s produits sont périmés" +msgid "within the next day" +msgid_plural "within the next %s days" +msgstr[0] "" +msgstr[1] "" -msgid "%s products are below defined min. stock amount" -msgstr "%s produits sont sous le seuil de stock minimum" +msgid "%s product is already expired" +msgid_plural "%s products are already expired" +msgstr[0] "" +msgstr[1] "" + +msgid "%s product is below defined min. stock amount" +msgid_plural "%s products are below defined min. stock amount" +msgstr[0] "" +msgstr[1] "" msgid "Product" msgstr "Produit" +msgid "%s Product" +msgid_plural "%s Products" +msgstr[0] "" +msgstr[1] "" + msgid "Amount" msgstr "Quantité" @@ -60,9 +82,6 @@ msgstr "Suivi des corvées" msgid "Battery tracking" msgstr "Suivi des batteries" -msgid "Products" -msgstr "Produits" - msgid "Locations" msgstr "Emplacements" @@ -120,8 +139,10 @@ msgstr "Périmé" msgid "Barcode lookup is disabled" msgstr "La recherche par code barres est désactivée" -msgid "will be added to the list of barcodes for the selected product on submit" -msgstr "sera ajouté à la liste des codes barres du produit sélectionné à l'envoi" +msgid "" +"will be added to the list of barcodes for the selected product on submit" +msgstr "" +"sera ajouté à la liste des codes barres du produit sélectionné à l'envoi" msgid "New amount" msgstr "Nouvelle quantité" @@ -249,8 +270,11 @@ msgstr "jamais" msgid "Add products that are below defined min. stock amount" msgstr "Ajouter les produits qui sont en dessous du seuil de stock minimum" -msgid "For purchases this amount of days will be added to today for the best before date suggestion" -msgstr "A l'achat, ce nombre de jours sera ajouté à la date de péremption suggérée" +msgid "" +"For purchases this amount of days will be added to today for the best before" +" date suggestion" +msgstr "" +"A l'achat, ce nombre de jours sera ajouté à la date de péremption suggérée" msgid "This means 1 %s purchased will be converted into %s %s in stock" msgstr "1 %s acheté sera converti en %s %s dans le stock" @@ -280,7 +304,9 @@ msgid "Are you sure to delete chore \"%s\"?" msgstr "Voulez-vous vraiment supprimer la corvée \"%s\" ?" msgid "\"%s\" could not be resolved to a product, how do you want to proceed?" -msgstr "\"%s\" n'a pas été retrouvé en tant que produit, comment voulez-vous procéder ?" +msgstr "" +"\"%s\" n'a pas été retrouvé en tant que produit, comment voulez-vous " +"procéder ?" msgid "Create or assign product" msgstr "Créer ou assigner à un produit" @@ -336,8 +362,12 @@ msgstr "%s sera ajouté au stock" msgid "This means %s will be removed from stock" msgstr "%s sera supprimé du stock" -msgid "This means it is estimated that a new execution of this chore is tracked %s days after the last was tracked" -msgstr "La prochaine exécution de cette corvée sera programmée %s jours après sa dernière exécution" +msgid "" +"This means it is estimated that a new execution of this chore is tracked %s " +"days after the last was tracked" +msgstr "" +"La prochaine exécution de cette corvée sera programmée %s jours après sa " +"dernière exécution" msgid "Removed %s %s of %s from stock" msgstr "%s %s de %s supprimés du stock" @@ -348,18 +378,6 @@ msgstr "À propos de grocy" msgid "Close" msgstr "Fermer" -msgid "%s batteries are due to be charged within the next %s days" -msgstr "%s batteries doivent être rechargées dans les %s prochains jours" - -msgid "%s batteries are overdue to be charged" -msgstr "%s batteries n'ont pas été rechargées à temps" - -msgid "%s chores are due to be done within the next %s days" -msgstr "%s corvées doivent être réalisées dans les %s prochains jours" - -msgid "%s chores are overdue to be done" -msgstr "%s corvées n'ont pas été réalisées à temps" - msgid "Released on" msgstr "Date de sortie" @@ -474,14 +492,15 @@ msgstr "Prérequis remplis" msgid "Put missing products on shopping list" msgstr "Ajouter les produits manquants dans la liste de courses" -msgid "Not enough in stock, %s ingredients missing" -msgstr "Pas assez en stock, %s ingrédients manquants" - msgid "Enough in stock" msgstr "Il y en a assez en stock" -msgid "Not enough in stock, %s ingredients missing but already on the shopping list" -msgstr "Pas assez en stock, %s ingrédients manquants mais déjà dans la liste de courses" +msgid "" +"Not enough in stock, %s ingredient missing but already on the shopping list" +msgid_plural "" +"Not enough in stock, %s ingredients missing but already on the shopping list" +msgstr[0] "" +msgstr[1] "" msgid "Expand to fullscreen" msgstr "Mettre en plein écran" @@ -504,8 +523,12 @@ msgstr "Afficher les notes" msgid "Put missing amount on shopping list" msgstr "Ajouter la quantité manquante dans la liste de courses" -msgid "Are you sure to put all missing ingredients for recipe \"%s\" on the shopping list?" -msgstr "Voulez-vous vraiment ajouter tous les ingrédients manquants de la recette \"%s\" dans la liste de courses ?" +msgid "" +"Are you sure to put all missing ingredients for recipe \"%s\" on the " +"shopping list?" +msgstr "" +"Voulez-vous vraiment ajouter tous les ingrédients manquants de la recette " +"\"%s\" dans la liste de courses ?" msgid "Added for recipe %s" msgstr "Ajoutés pour la recette %s" @@ -562,7 +585,9 @@ msgid "Chores journal" msgstr "Journal des corvées" msgid "0 means suggestions for the next charge cycle are disabled" -msgstr "0 implique que les suggestions du prochain cycle de charge seront désactivées" +msgstr "" +"0 implique que les suggestions du prochain cycle de charge seront " +"désactivées" msgid "Charge cycle interval (days)" msgstr "Intervalle du cycle de charge (jours)" @@ -585,42 +610,37 @@ msgstr "en %s par quantité achetée (au format d'achat)" msgid "The price cannot be lower than %s" msgstr "Le prix ne peut être inférieur à %s" -msgid "%s product expires within the next %s days" -msgstr "%s produit se périme dans les %s prochains jours" - -msgid "%s product is already expired" -msgstr "%s produit est périmé" - -msgid "%s product is below defined min. stock amount" -msgstr "%s produit est sous le seuil de stock minimum" - msgid "Unit" msgstr "Unité" -msgid "Units" -msgstr "Unités" +msgid "%s Unit" +msgid_plural "%s Units" +msgstr[0] "" +msgstr[1] "" -msgid "%s chore is due to be done within the next %s days" -msgstr "%s corvée doit être réalisée dans les %s prochains jours" +msgid "%s chore is due to be done" +msgid_plural "%s chores are due to be done" +msgstr[0] "" +msgstr[1] "" msgid "%s chore is overdue to be done" -msgstr "%s corvée n'a pas été réalisée à temps" +msgid_plural "%s chores are overdue to be done" +msgstr[0] "" +msgstr[1] "" -msgid "%s battery is due to be charged within the next %s days" -msgstr "%s batterie doit être rechargée dans les %s prochains jours" +msgid "%s battery is due to be charged" +msgid_plural "%s batteries are due to be charged" +msgstr[0] "" +msgstr[1] "" msgid "%s battery is overdue to be charged" -msgstr "%s batterie n'a pas été rechargée à temps" - -msgid "%s unit was automatically added and will apply in addition to the amount entered here" -msgstr "%s unité a automatiquement été ajoutée et sera appliquée en plus à la quantité entrée ici" +msgid_plural "%s batteries are overdue to be charged" +msgstr[0] "" +msgstr[1] "" msgid "in singular form" msgstr "Au singulier" -msgid "in plural form" -msgstr "Au pluriel" - msgid "Never expires" msgstr "Ne périme jamais" @@ -633,11 +653,20 @@ msgstr "-1 implique que ce produit ne périme jamais" msgid "Quantity unit" msgstr "Format" -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)" +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)" -msgid "Are you sure to consume all ingredients needed by recipe \"%s\" (ingredients marked with \"check only if a single unit is in stock\" will be ignored)?" -msgstr "Voulez-vous vraiment consommer tous les ingrédients requis par la recette \"%s\" (les ingrédients avec l'option \"Vérifier uniquement si une unité est en stock\" seront ignorés) ?" +msgid "" +"Are you sure to consume all ingredients needed by recipe \"%s\" (ingredients" +" marked with \"check only if a single unit is in stock\" will be ignored)?" +msgstr "" +"Voulez-vous vraiment consommer tous les ingrédients requis par la recette " +"\"%s\" (les ingrédients avec l'option \"Vérifier uniquement si une unité est" +" en stock\" seront ignorés) ?" msgid "Removed all ingredients of recipe \"%s\" from stock" msgstr "Enlever tous les ingrédients de la recette \"%s\" du stock" @@ -693,17 +722,15 @@ msgstr "Modifier la tâche" msgid "Are you sure to delete task \"%s\"?" msgstr "Voulez-vous vraiment supprimer la tâche \"%s\" ?" -msgid "%s task is due to be done within the next %s days" -msgstr "%s tâche doit être réalisée dans les %s prochains jours" - -msgid "%s tasks are due to be done within the next %s days" -msgstr "%s tâches doivent être réalisées dans les %s prochains jours" +msgid "%s task is due to be done" +msgid_plural "%s tasks are due to be done" +msgstr[0] "" +msgstr[1] "" msgid "%s task is overdue to be done" -msgstr "%s tâche n'a pas été réalisée à temps" - -msgid "%s tasks are overdue to be done" -msgstr "%s tâches n'ont pas été réalisées à temps" +msgid_plural "%s tasks are overdue to be done" +msgstr[0] "" +msgstr[1] "" msgid "Edit task category" msgstr "Modifier la catégorie de tâche" @@ -798,8 +825,12 @@ msgstr "Sélectionner un fichier" msgid "Image of product %s" msgstr "Photo du produit %s" -msgid "This product cannot be deleted because it is in stock, please remove the stock amount first." -msgstr "Ce produit ne peut être supprimé puisqu'il est en stock. Merci d'enlever la quantité en stock avant." +msgid "" +"This product cannot be deleted because it is in stock, please remove the " +"stock amount first." +msgstr "" +"Ce produit ne peut être supprimé puisqu'il est en stock. Merci d'enlever la " +"quantité en stock avant." msgid "Delete not possible" msgstr "Impossible de supprimer" @@ -822,14 +853,20 @@ msgstr "Modifier un équipement" msgid "Create equipment" msgstr "Créer un équipement" -msgid "If you don't select a file, the current instruction manual will not be altered" -msgstr "Si vous ne sélectionnez pas de fichier, le manuel actuel ne sera pas modifié" +msgid "" +"If you don't select a file, the current instruction manual will not be " +"altered" +msgstr "" +"Si vous ne sélectionnez pas de fichier, le manuel actuel ne sera pas modifié" msgid "No instruction manual available" msgstr "Aucun manuel d'utilisation disponible" -msgid "The current instruction manual will be deleted when you save the equipment" -msgstr "Le manuel d'utilisation actuel sera supprimé lors de la sauvegarde de cet équipement" +msgid "" +"The current instruction manual will be deleted when you save the equipment" +msgstr "" +"Le manuel d'utilisation actuel sera supprimé lors de la sauvegarde de cet " +"équipement" msgid "No picture available" msgstr "Aucune photo disponible" @@ -921,14 +958,24 @@ msgstr "Ajout du produit %s sur %s de la liste de courses" msgid "Use a specific stock item" msgstr "Utiliser un objet spécifique du stock" -msgid "The first item in this list would be picked by the default rule which is \"First expiring first, then first in first out\"" -msgstr "Le premier élément de cette liste sera sélectionné par la règle par défaut qui est \"Le premier arrivant à péremption en premier, puis premier entré premier sorti\"" +msgid "" +"The first item in this list would be picked by the default rule which is " +"\"First expiring first, then first in first out\"" +msgstr "" +"Le premier élément de cette liste sera sélectionné par la règle par défaut " +"qui est \"Le premier arrivant à péremption en premier, puis premier entré " +"premier sorti\"" -msgid "Mark %s %s of %s as open" -msgstr "Indiquer %s %s de %s comme ouvert" +msgid "Mark %s of %s as open" +msgstr "" -msgid "When a product was marked as opened, the best before date will be replaced by today + this amount of days (a value of 0 disables this)" -msgstr "Quand un produit est marqué comme ouvert, la date de péremption sera remplacée par la date du jour + ce nombre de jours (une valeur de 0 désactive ce changement)" +msgid "" +"When a product was marked as opened, the best before date will be replaced " +"by today + this amount of days (a value of 0 disables this)" +msgstr "" +"Quand un produit est marqué comme ouvert, la date de péremption sera " +"remplacée par la date du jour + ce nombre de jours (une valeur de 0 " +"désactive ce changement)" msgid "Default best before days after opened" msgstr "Date de péremption en jours par défaut après ouverture" @@ -972,8 +1019,13 @@ msgstr "Paramètres du stock" msgid "Shopping list to stock workflow" msgstr "Transition de la liste de courses vers le stock" -msgid "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" -msgstr "Réaliser automatiquement les achats en utilisant le dernier prix connu et la quantité indiquée dans la liste, si le premier a une date de péremption par défaut renseignée" +msgid "" +"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" +msgstr "" +"Réaliser automatiquement les achats en utilisant le dernier prix connu et la" +" quantité indiquée dans la liste, si le premier a une date de péremption par" +" défaut renseignée" msgid "Skip" msgstr "Passer" @@ -993,7 +1045,11 @@ msgstr "" msgid "Do not check against the shopping list when adding missing items to it" msgstr "" -msgid "By default the amount to be added to the shopping list is \"needed amount - stock amount - shopping list amount\" - when this is enabled, it is only checked against the stock amount, not against what is already on the shopping list" +msgid "" +"By default the amount to be added to the shopping list is \"needed amount - " +"stock amount - shopping list amount\" - when this is enabled, it is only " +"checked against the stock amount, not against what is already on the " +"shopping list" msgstr "" msgid "Picture" @@ -1014,7 +1070,9 @@ msgstr "" msgid "Share/Integrate calendar (iCal)" msgstr "" -msgid "Use the following (public) URL to share or integrate the calendar in iCal format" +msgid "" +"Use the following (public) URL to share or integrate the calendar in iCal " +"format" msgstr "" msgid "Allow partial units in stock" @@ -1023,13 +1081,18 @@ msgstr "" msgid "Enable tare weight handling" msgstr "" -msgid "This is useful e.g. for flour in jars - on purchase/consume/inventory you always weigh the whole jar, the amount to be posted is then automatically calculated based on what is in stock and the tare weight defined below" +msgid "" +"This is useful e.g. for flour in jars - on purchase/consume/inventory you " +"always weigh the whole jar, the amount to be posted is then automatically " +"calculated based on what is in stock and the tare weight defined below" msgstr "" msgid "Tare weight" msgstr "" -msgid "Tare weight handling enabled - please weigh the whole container, the amount to be posted will be automatically calculcated" +msgid "" +"Tare weight handling enabled - please weigh the whole container, the amount " +"to be posted will be automatically calculcated" msgstr "" msgid "You have to select a location" @@ -1080,7 +1143,9 @@ msgstr "" msgid "Type a new product name or barcode and hit TAB to start a workflow" msgstr "" -msgid "This will be used as the default setting when adding this product as a recipe ingredient" +msgid "" +"This will be used as the default setting when adding this product as a " +"recipe ingredient" msgstr "" msgid "Add item" @@ -1187,3 +1252,26 @@ msgstr "" msgid "Edit userfield" msgstr "" + +msgid "Plural forms" +msgstr "" + +msgid "One plural form per line, the current language requires" +msgstr "" + +msgid "Plural count" +msgstr "" + +msgid "Plural rule" +msgstr "" + +msgid "in plural form" +msgstr "Au pluriel" + +msgid "Not enough in stock, %s ingredient missing" +msgid_plural "Not enough in stock, %s ingredients missing" +msgstr[0] "" +msgstr[1] "" + +msgid "Consume %s of %s" +msgstr "" diff --git a/localization/fr/userfield_types.po b/localization/fr/userfield_types.po index 5e61e6c3..04095559 100644 --- a/localization/fr/userfield_types.po +++ b/localization/fr/userfield_types.po @@ -1,15 +1,16 @@ +# msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Translation migration from old PHP array files\n" -"Language-Team: http://www.transifex.com/grocy/grocy/language/fr\n" +"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n" +"PO-Revision-Date: 2019-05-01 17:43+0000\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" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n" -"PO-Revision-Date: 2019-05-01T17:59:17+00:00\n" "Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Domain: grocy/userfield_types\n" msgid "text-single-line" diff --git a/localization/it/chore_types.po b/localization/it/chore_types.po index 543b86a1..ddae56c3 100644 --- a/localization/it/chore_types.po +++ b/localization/it/chore_types.po @@ -1,15 +1,19 @@ +# Translators: +# Bernd Bestel , 2019 +# msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Translation migration from old PHP array files\n" -"Language-Team: http://www.transifex.com/grocy/grocy/language/it\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 , 2019\n" +"Language-Team: Italian (https://www.transifex.com/grocy/teams/93189/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n" -"PO-Revision-Date: 2019-05-01T17:59:17+00:00\n" "Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Domain: grocy/chore_types\n" msgid "manually" diff --git a/localization/it/demo_data.po b/localization/it/demo_data.po index 04aef5e0..114370aa 100644 --- a/localization/it/demo_data.po +++ b/localization/it/demo_data.po @@ -36,40 +36,34 @@ msgid "Fridge" msgstr "Kühlschrank" msgid "Piece" -msgstr "Pezzo" - -msgid "Pieces" -msgstr "Pezzi" +msgid_plural "Pieces" +msgstr[0] "" +msgstr[1] "" msgid "Pack" -msgstr "Pacco" - -msgid "Packs" -msgstr "Pacchi" +msgid_plural "Packs" +msgstr[0] "" +msgstr[1] "" msgid "Glass" -msgstr "Bicchiere" - -msgid "Glasses" -msgstr "Bicchieri" +msgid_plural "Glasses" +msgstr[0] "" +msgstr[1] "" msgid "Tin" -msgstr "Scatola" - -msgid "Tins" -msgstr "Scatole" +msgid_plural "Tins" +msgstr[0] "" +msgstr[1] "" msgid "Can" -msgstr "Lattina" - -msgid "Cans" -msgstr "Lattine" +msgid_plural "Cans" +msgstr[0] "" +msgstr[1] "" msgid "Bunch" -msgstr "Cespo" - -msgid "Bunches" -msgstr "Cespi" +msgid_plural "Bunches" +msgstr[0] "" +msgstr[1] "" msgid "Gummy bears" msgstr "Caramelle" @@ -177,10 +171,9 @@ msgid "Demo User" msgstr "Utente Demo" msgid "Gram" -msgstr "Grammo" - -msgid "Grams" -msgstr "Grammi" +msgid_plural "Grams" +msgstr[0] "" +msgstr[1] "" msgid "Flour" msgstr "Farina" diff --git a/localization/it/strings.po b/localization/it/strings.po index f2d5a25c..7e132d3d 100644 --- a/localization/it/strings.po +++ b/localization/it/strings.po @@ -1,32 +1,53 @@ +# Translators: +# Sergio Zampello , 2019 +# Bernd Bestel , 2019 +# msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Translation migration from old PHP array files\n" -"Language-Team: http://www.transifex.com/grocy/grocy/language/it\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 , 2019\n" +"Language-Team: Italian (https://www.transifex.com/grocy/teams/93189/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n" -"PO-Revision-Date: 2019-05-01T17:59:17+00:00\n" "Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Domain: grocy/strings\n" msgid "Stock overview" msgstr "Dispensa" -msgid "%s products expiring within the next %s days" -msgstr "%s prodotti scadranno tra %s giorni" +msgid "%s product expires" +msgid_plural "%s products expiring" +msgstr[0] "" +msgstr[1] "" -msgid "%s products are already expired" -msgstr "%s prodotti scaduti" +msgid "within the next day" +msgid_plural "within the next %s days" +msgstr[0] "" +msgstr[1] "" -msgid "%s products are below defined min. stock amount" -msgstr "%s prodotti sotto il limite minimo" +msgid "%s product is already expired" +msgid_plural "%s products are already expired" +msgstr[0] "" +msgstr[1] "" + +msgid "%s product is below defined min. stock amount" +msgid_plural "%s products are below defined min. stock amount" +msgstr[0] "" +msgstr[1] "" msgid "Product" msgstr "prodotto" +msgid "%s Product" +msgid_plural "%s Products" +msgstr[0] "" +msgstr[1] "" + msgid "Amount" msgstr "quantità" @@ -60,9 +81,6 @@ msgstr "Dati abitudini" msgid "Battery tracking" msgstr "Dati batterie" -msgid "Products" -msgstr "Prodotti" - msgid "Locations" msgstr "Posizioni" @@ -120,7 +138,8 @@ msgstr "Scaduto" msgid "Barcode lookup is disabled" msgstr "I codici a barre sono disabilitati" -msgid "will be added to the list of barcodes for the selected product on submit" +msgid "" +"will be added to the list of barcodes for the selected product on submit" msgstr "sarà aggiunto alla lista dei codici a barre per questo prodotto" msgid "New amount" @@ -249,8 +268,12 @@ msgstr "mai" msgid "Add products that are below defined min. stock amount" msgstr "Aggiungi prodotti sotti il limite minimo" -msgid "For purchases this amount of days will be added to today for the best before date suggestion" -msgstr "Questo numero di giorni verrà aggiunto alla data di acquisto per la data di scadenza" +msgid "" +"For purchases this amount of days will be added to today for the best before" +" date suggestion" +msgstr "" +"Questo numero di giorni verrà aggiunto alla data di acquisto per la data di " +"scadenza" msgid "This means 1 %s purchased will be converted into %s %s in stock" msgstr "Questo significa che 1 %s acquistato diventerà %s %s in dispensa" @@ -336,7 +359,9 @@ msgstr "%s sarà aggiunto alla dispensa" msgid "This means %s will be removed from stock" msgstr "%s sarà rimosso dalla dispensa" -msgid "This means it is estimated that a new execution of this chore is tracked %s days after the last was tracked" +msgid "" +"This means it is estimated that a new execution of this chore is tracked %s " +"days after the last was tracked" msgstr "L'esecuzione dell'abitudine è %s giorni dopo la precedente" msgid "Removed %s %s of %s from stock" @@ -348,18 +373,6 @@ msgstr "Riguardo grocy" msgid "Close" msgstr "Chiudi" -msgid "%s batteries are due to be charged within the next %s days" -msgstr "%s batterie da ricaricare entro %s giorni" - -msgid "%s batteries are overdue to be charged" -msgstr "%s batterie devono essere ricaricate" - -msgid "%s chores are due to be done within the next %s days" -msgstr "%s abitudini da eseguire entro %s giorni" - -msgid "%s chores are overdue to be done" -msgstr "%s abitudini da eseguire" - msgid "Released on" msgstr "Rilasciato il" @@ -474,14 +487,15 @@ msgstr "Requisiti soddisfatti" msgid "Put missing products on shopping list" msgstr "Metti i prodotti mancanti nella lista della spesa" -msgid "Not enough in stock, %s ingredients missing" -msgstr "Non abbastanza in magazzino, mancano gli ingredienti # 1" - msgid "Enough in stock" msgstr "Abbastanza in magazzino" -msgid "Not enough in stock, %s ingredients missing but already on the shopping list" -msgstr "Non abbastanza in magazzino, mancano gli ingredienti # 1 ma sono già nella lista della spesa" +msgid "" +"Not enough in stock, %s ingredient missing but already on the shopping list" +msgid_plural "" +"Not enough in stock, %s ingredients missing but already on the shopping list" +msgstr[0] "" +msgstr[1] "" msgid "Expand to fullscreen" msgstr "Espandi a schermo intero" @@ -504,7 +518,9 @@ msgstr "x" msgid "Put missing amount on shopping list" msgstr "x" -msgid "Are you sure to put all missing ingredients for recipe \"%s\" on the shopping list?" +msgid "" +"Are you sure to put all missing ingredients for recipe \"%s\" on the " +"shopping list?" msgstr "x" msgid "Added for recipe %s" @@ -585,42 +601,37 @@ msgstr "x" msgid "The price cannot be lower than %s" msgstr "x" -msgid "%s product expires within the next %s days" -msgstr "x" - -msgid "%s product is already expired" -msgstr "x" - -msgid "%s product is below defined min. stock amount" -msgstr "x" - msgid "Unit" msgstr "x" -msgid "Units" -msgstr "x" +msgid "%s Unit" +msgid_plural "%s Units" +msgstr[0] "" +msgstr[1] "" -msgid "%s chore is due to be done within the next %s days" -msgstr "x" +msgid "%s chore is due to be done" +msgid_plural "%s chores are due to be done" +msgstr[0] "" +msgstr[1] "" msgid "%s chore is overdue to be done" -msgstr "x" +msgid_plural "%s chores are overdue to be done" +msgstr[0] "" +msgstr[1] "" -msgid "%s battery is due to be charged within the next %s days" -msgstr "x" +msgid "%s battery is due to be charged" +msgid_plural "%s batteries are due to be charged" +msgstr[0] "" +msgstr[1] "" msgid "%s battery is overdue to be charged" -msgstr "x" - -msgid "%s unit was automatically added and will apply in addition to the amount entered here" -msgstr "x" +msgid_plural "%s batteries are overdue to be charged" +msgstr[0] "" +msgstr[1] "" msgid "in singular form" msgstr "x" -msgid "in plural form" -msgstr "x" - msgid "Never expires" msgstr "x" @@ -633,10 +644,14 @@ msgstr "x" msgid "Quantity unit" msgstr "x" -msgid "Only check if a single unit is in stock (a different quantity can then be used above)" +msgid "" +"Only check if a single unit is in stock (a different quantity can then be " +"used above)" msgstr "x" -msgid "Are you sure to consume all ingredients needed by recipe \"%s\" (ingredients marked with \"check only if a single unit is in stock\" will be ignored)?" +msgid "" +"Are you sure to consume all ingredients needed by recipe \"%s\" (ingredients" +" marked with \"check only if a single unit is in stock\" will be ignored)?" msgstr "x" msgid "Removed all ingredients of recipe \"%s\" from stock" @@ -693,17 +708,15 @@ msgstr "x" msgid "Are you sure to delete task \"%s\"?" msgstr "x" -msgid "%s task is due to be done within the next %s days" -msgstr "x" - -msgid "%s tasks are due to be done within the next %s days" -msgstr "x" +msgid "%s task is due to be done" +msgid_plural "%s tasks are due to be done" +msgstr[0] "" +msgstr[1] "" msgid "%s task is overdue to be done" -msgstr "x" - -msgid "%s tasks are overdue to be done" -msgstr "x" +msgid_plural "%s tasks are overdue to be done" +msgstr[0] "" +msgstr[1] "" msgid "Edit task category" msgstr "x" @@ -798,7 +811,9 @@ msgstr "x" msgid "Image of product %s" msgstr "x" -msgid "This product cannot be deleted because it is in stock, please remove the stock amount first." +msgid "" +"This product cannot be deleted because it is in stock, please remove the " +"stock amount first." msgstr "x" msgid "Delete not possible" @@ -822,13 +837,16 @@ msgstr "x" msgid "Create equipment" msgstr "x" -msgid "If you don't select a file, the current instruction manual will not be altered" +msgid "" +"If you don't select a file, the current instruction manual will not be " +"altered" msgstr "x" msgid "No instruction manual available" msgstr "x" -msgid "The current instruction manual will be deleted when you save the equipment" +msgid "" +"The current instruction manual will be deleted when you save the equipment" msgstr "x" msgid "No picture available" @@ -921,13 +939,17 @@ msgstr "" msgid "Use a specific stock item" msgstr "" -msgid "The first item in this list would be picked by the default rule which is \"First expiring first, then first in first out\"" +msgid "" +"The first item in this list would be picked by the default rule which is " +"\"First expiring first, then first in first out\"" msgstr "" -msgid "Mark %s %s of %s as open" +msgid "Mark %s of %s as open" msgstr "" -msgid "When a product was marked as opened, the best before date will be replaced by today + this amount of days (a value of 0 disables this)" +msgid "" +"When a product was marked as opened, the best before date will be replaced " +"by today + this amount of days (a value of 0 disables this)" msgstr "" msgid "Default best before days after opened" @@ -972,7 +994,9 @@ msgstr "" msgid "Shopping list to stock workflow" msgstr "" -msgid "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" +msgid "" +"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" msgstr "" msgid "Skip" @@ -993,7 +1017,11 @@ msgstr "" msgid "Do not check against the shopping list when adding missing items to it" msgstr "" -msgid "By default the amount to be added to the shopping list is \"needed amount - stock amount - shopping list amount\" - when this is enabled, it is only checked against the stock amount, not against what is already on the shopping list" +msgid "" +"By default the amount to be added to the shopping list is \"needed amount - " +"stock amount - shopping list amount\" - when this is enabled, it is only " +"checked against the stock amount, not against what is already on the " +"shopping list" msgstr "" msgid "Picture" @@ -1014,7 +1042,9 @@ msgstr "" msgid "Share/Integrate calendar (iCal)" msgstr "" -msgid "Use the following (public) URL to share or integrate the calendar in iCal format" +msgid "" +"Use the following (public) URL to share or integrate the calendar in iCal " +"format" msgstr "" msgid "Allow partial units in stock" @@ -1023,13 +1053,18 @@ msgstr "" msgid "Enable tare weight handling" msgstr "" -msgid "This is useful e.g. for flour in jars - on purchase/consume/inventory you always weigh the whole jar, the amount to be posted is then automatically calculated based on what is in stock and the tare weight defined below" +msgid "" +"This is useful e.g. for flour in jars - on purchase/consume/inventory you " +"always weigh the whole jar, the amount to be posted is then automatically " +"calculated based on what is in stock and the tare weight defined below" msgstr "" msgid "Tare weight" msgstr "" -msgid "Tare weight handling enabled - please weigh the whole container, the amount to be posted will be automatically calculcated" +msgid "" +"Tare weight handling enabled - please weigh the whole container, the amount " +"to be posted will be automatically calculcated" msgstr "" msgid "You have to select a location" @@ -1080,7 +1115,9 @@ msgstr "" msgid "Type a new product name or barcode and hit TAB to start a workflow" msgstr "" -msgid "This will be used as the default setting when adding this product as a recipe ingredient" +msgid "" +"This will be used as the default setting when adding this product as a " +"recipe ingredient" msgstr "" msgid "Add item" @@ -1187,3 +1224,26 @@ msgstr "" msgid "Edit userfield" msgstr "" + +msgid "Plural forms" +msgstr "" + +msgid "One plural form per line, the current language requires" +msgstr "" + +msgid "Plural count" +msgstr "" + +msgid "Plural rule" +msgstr "" + +msgid "in plural form" +msgstr "x" + +msgid "Not enough in stock, %s ingredient missing" +msgid_plural "Not enough in stock, %s ingredients missing" +msgstr[0] "" +msgstr[1] "" + +msgid "Consume %s of %s" +msgstr "" diff --git a/localization/it/userfield_types.po b/localization/it/userfield_types.po index df96caf8..ace5a198 100644 --- a/localization/it/userfield_types.po +++ b/localization/it/userfield_types.po @@ -1,15 +1,16 @@ +# msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Translation migration from old PHP array files\n" -"Language-Team: http://www.transifex.com/grocy/grocy/language/it\n" +"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n" +"PO-Revision-Date: 2019-05-01 17:43+0000\n" +"Language-Team: Italian (https://www.transifex.com/grocy/teams/93189/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n" -"PO-Revision-Date: 2019-05-01T17:59:17+00:00\n" "Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Domain: grocy/userfield_types\n" msgid "text-single-line" diff --git a/localization/nl/component_translations.po b/localization/nl/component_translations.po index 284a6319..880c06b8 100644 --- a/localization/nl/component_translations.po +++ b/localization/nl/component_translations.po @@ -1,15 +1,19 @@ +# Translators: +# Bernd Bestel , 2019 +# msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Translation migration from old PHP array files\n" -"Language-Team: http://www.transifex.com/grocy/grocy/language/nl\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 , 2019\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" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n" -"PO-Revision-Date: 2019-05-01T17:59:17+00:00\n" "Language: nl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Domain: grocy/component_translations\n" msgid "timeago_locale" diff --git a/localization/nl/demo_data.po b/localization/nl/demo_data.po index 99b3e5f6..7fdc8008 100644 --- a/localization/nl/demo_data.po +++ b/localization/nl/demo_data.po @@ -1,15 +1,22 @@ +# Translators: +# Llewy , 2019 +# Adriaan Peeters , 2019 +# Grocy NL, 2019 +# Seppe , 2019 +# msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Translation migration from old PHP array files\n" -"Language-Team: http://www.transifex.com/grocy/grocy/language/nl\n" +"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n" +"PO-Revision-Date: 2019-05-01 17:42+0000\n" +"Last-Translator: Seppe , 2019\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" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n" -"PO-Revision-Date: 2019-05-01T17:59:17+00:00\n" "Language: nl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Domain: grocy/demo_data\n" msgid "Cookies" @@ -31,40 +38,34 @@ msgid "Fridge" msgstr "Koelkast" msgid "Piece" -msgstr "Stuk" - -msgid "Pieces" -msgstr "Stukken" +msgid_plural "Pieces" +msgstr[0] "" +msgstr[1] "" msgid "Pack" -msgstr "Pak" - -msgid "Packs" -msgstr "Pakken" +msgid_plural "Packs" +msgstr[0] "" +msgstr[1] "" msgid "Glass" -msgstr "Glas" - -msgid "Glasses" -msgstr "Glazen" +msgid_plural "Glasses" +msgstr[0] "" +msgstr[1] "" msgid "Tin" -msgstr "Blik" - -msgid "Tins" -msgstr "Blikken" +msgid_plural "Tins" +msgstr[0] "" +msgstr[1] "" msgid "Can" -msgstr "Blik" - -msgid "Cans" -msgstr "Blikken" +msgid_plural "Cans" +msgstr[0] "" +msgstr[1] "" msgid "Bunch" -msgstr "Bundel" - -msgid "Bunches" -msgstr "Bundels" +msgid_plural "Bunches" +msgstr[0] "" +msgstr[1] "" msgid "Gummy bears" msgstr "Gombeertjes" @@ -172,10 +173,9 @@ msgid "Demo User" msgstr "Demo Gebruiker" msgid "Gram" -msgstr "Gram" - -msgid "Grams" -msgstr "Gram" +msgid_plural "Grams" +msgstr[0] "" +msgstr[1] "" msgid "Flour" msgstr "Bloem" diff --git a/localization/nl/strings.po b/localization/nl/strings.po index 9ea3bc3b..10c9dcd3 100644 --- a/localization/nl/strings.po +++ b/localization/nl/strings.po @@ -1,32 +1,57 @@ +# Translators: +# Llewy , 2019 +# Tarik Faik , 2019 +# Adriaan Peeters , 2019 +# Grocy NL, 2019 +# Seppe , 2019 +# Bernd Bestel , 2019 +# msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Translation migration from old PHP array files\n" -"Language-Team: http://www.transifex.com/grocy/grocy/language/nl\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 , 2019\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" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n" -"PO-Revision-Date: 2019-05-01T17:59:17+00:00\n" "Language: nl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Domain: grocy/strings\n" msgid "Stock overview" msgstr "Voorraadoverzicht" -msgid "%s products expiring within the next %s days" -msgstr "%s producten vervallen binnen de volgende %s dagen" +msgid "%s product expires" +msgid_plural "%s products expiring" +msgstr[0] "" +msgstr[1] "" -msgid "%s products are already expired" -msgstr "%s producten zijn al verlopen" +msgid "within the next day" +msgid_plural "within the next %s days" +msgstr[0] "" +msgstr[1] "" -msgid "%s products are below defined min. stock amount" -msgstr "%s producten zijn onder gedefinieerde min. voorraad aantal" +msgid "%s product is already expired" +msgid_plural "%s products are already expired" +msgstr[0] "" +msgstr[1] "" + +msgid "%s product is below defined min. stock amount" +msgid_plural "%s products are below defined min. stock amount" +msgstr[0] "" +msgstr[1] "" msgid "Product" msgstr "Product" +msgid "%s Product" +msgid_plural "%s Products" +msgstr[0] "" +msgstr[1] "" + msgid "Amount" msgstr "Aantal" @@ -60,9 +85,6 @@ msgstr "Klusjes volgen" msgid "Battery tracking" msgstr "Batterij volgen" -msgid "Products" -msgstr "Producten" - msgid "Locations" msgstr "Locaties" @@ -120,8 +142,11 @@ msgstr "Verspild" msgid "Barcode lookup is disabled" msgstr "Opzoeken op streepjescode is uitgeschakeld" -msgid "will be added to the list of barcodes for the selected product on submit" -msgstr "wordt toegevoegd aan de lijst van streepjescodes voor het geselecteerde product" +msgid "" +"will be added to the list of barcodes for the selected product on submit" +msgstr "" +"wordt toegevoegd aan de lijst van streepjescodes voor het geselecteerde " +"product" msgid "New amount" msgstr "Nieuwe aantal" @@ -249,11 +274,16 @@ msgstr "nooit" msgid "Add products that are below defined min. stock amount" msgstr "Voeg producten toe die onder het gedefinieerde min. voorraad zijn" -msgid "For purchases this amount of days will be added to today for the best before date suggestion" -msgstr "Voor aankopen wordt dit aantal dagen toegevoegd aan vandaag voor de houdbaarheidsdatum suggestie" +msgid "" +"For purchases this amount of days will be added to today for the best before" +" date suggestion" +msgstr "" +"Voor aankopen wordt dit aantal dagen toegevoegd aan vandaag voor de " +"houdbaarheidsdatum suggestie" msgid "This means 1 %s purchased will be converted into %s %s in stock" -msgstr "Dit betekent dat 1 %s aankoop geconverteerd zal worden in %s en %s voorraad" +msgstr "" +"Dit betekent dat 1 %s aankoop geconverteerd zal worden in %s en %s voorraad" msgid "Login" msgstr "Login" @@ -336,7 +366,9 @@ msgstr "%s zal worden toegevoegd aan de voorraad" msgid "This means %s will be removed from stock" msgstr "%s zal worden verwijderd uit de voorraad" -msgid "This means it is estimated that a new execution of this chore is tracked %s days after the last was tracked" +msgid "" +"This means it is estimated that a new execution of this chore is tracked %s " +"days after the last was tracked" msgstr "" msgid "Removed %s %s of %s from stock" @@ -348,18 +380,6 @@ msgstr "Over grocy" msgid "Close" msgstr "Sluit" -msgid "%s batteries are due to be charged within the next %s days" -msgstr "" - -msgid "%s batteries are overdue to be charged" -msgstr "" - -msgid "%s chores are due to be done within the next %s days" -msgstr "" - -msgid "%s chores are overdue to be done" -msgstr "" - msgid "Released on" msgstr "Vrijgegeven op" @@ -474,14 +494,15 @@ msgstr "Vereisten volbracht" msgid "Put missing products on shopping list" msgstr "Voeg ontbrekende producten toe aan boodschappenlijst" -msgid "Not enough in stock, %s ingredients missing" -msgstr "Niet genoeg in voorraad, %s ingrediënten ontbreken" - msgid "Enough in stock" msgstr "Genoeg in voorraad" -msgid "Not enough in stock, %s ingredients missing but already on the shopping list" -msgstr "Niet genoeg in voorraad, %s ingrediënten ontbreken maar staan al op de boodschappenlijst" +msgid "" +"Not enough in stock, %s ingredient missing but already on the shopping list" +msgid_plural "" +"Not enough in stock, %s ingredients missing but already on the shopping list" +msgstr[0] "" +msgstr[1] "" msgid "Expand to fullscreen" msgstr "Fullscreen" @@ -504,8 +525,12 @@ msgstr "Toon notities" msgid "Put missing amount on shopping list" msgstr "Zet ontbrekende hoeveelheid op boodschappenlijst" -msgid "Are you sure to put all missing ingredients for recipe \"%s\" on the shopping list?" -msgstr "Ben je zeker dat je alle ontbrekende ingrediënten voor recept \"%s\" op de boodschappenlijst wilt zetten?" +msgid "" +"Are you sure to put all missing ingredients for recipe \"%s\" on the " +"shopping list?" +msgstr "" +"Ben je zeker dat je alle ontbrekende ingrediënten voor recept \"%s\" op de " +"boodschappenlijst wilt zetten?" msgid "Added for recipe %s" msgstr "Toegevoegd voor recept %s" @@ -562,7 +587,8 @@ msgid "Chores journal" msgstr "Klusjesdagboek" msgid "0 means suggestions for the next charge cycle are disabled" -msgstr "0 betekent dat suggesties voor de volgende laadcyclus zijn uitgeschakeld" +msgstr "" +"0 betekent dat suggesties voor de volgende laadcyclus zijn uitgeschakeld" msgid "Charge cycle interval (days)" msgstr "Laadcyclusinterval (dagen)" @@ -585,42 +611,37 @@ msgstr "in %s per aankoophoeveelheid" msgid "The price cannot be lower than %s" msgstr "Prijs kan niet lager zijn dan %s" -msgid "%s product expires within the next %s days" -msgstr "%s product vervalt in de komende %s dagen" - -msgid "%s product is already expired" -msgstr "%s product is al vervallen" - -msgid "%s product is below defined min. stock amount" -msgstr "%s product is onder min. voorraadhoeveelheid" - msgid "Unit" msgstr "Eenheid" -msgid "Units" -msgstr "enheden" +msgid "%s Unit" +msgid_plural "%s Units" +msgstr[0] "" +msgstr[1] "" -msgid "%s chore is due to be done within the next %s days" -msgstr "" +msgid "%s chore is due to be done" +msgid_plural "%s chores are due to be done" +msgstr[0] "" +msgstr[1] "" msgid "%s chore is overdue to be done" -msgstr "" +msgid_plural "%s chores are overdue to be done" +msgstr[0] "" +msgstr[1] "" -msgid "%s battery is due to be charged within the next %s days" -msgstr "" +msgid "%s battery is due to be charged" +msgid_plural "%s batteries are due to be charged" +msgstr[0] "" +msgstr[1] "" msgid "%s battery is overdue to be charged" -msgstr "" - -msgid "%s unit was automatically added and will apply in addition to the amount entered here" -msgstr "" +msgid_plural "%s batteries are overdue to be charged" +msgstr[0] "" +msgstr[1] "" msgid "in singular form" msgstr "In enkelvoud" -msgid "in plural form" -msgstr "In meervoud" - msgid "Never expires" msgstr "Vervalt nooit" @@ -633,10 +654,14 @@ msgstr "-1 wilt zeggen dat het product noot vervalt" msgid "Quantity unit" msgstr "Hoeveelheidseenheid" -msgid "Only check if a single unit is in stock (a different quantity can then be used above)" +msgid "" +"Only check if a single unit is in stock (a different quantity can then be " +"used above)" msgstr "" -msgid "Are you sure to consume all ingredients needed by recipe \"%s\" (ingredients marked with \"check only if a single unit is in stock\" will be ignored)?" +msgid "" +"Are you sure to consume all ingredients needed by recipe \"%s\" (ingredients" +" marked with \"check only if a single unit is in stock\" will be ignored)?" msgstr "" msgid "Removed all ingredients of recipe \"%s\" from stock" @@ -693,17 +718,15 @@ msgstr "Bewerk taak" msgid "Are you sure to delete task \"%s\"?" msgstr "" -msgid "%s task is due to be done within the next %s days" -msgstr "" - -msgid "%s tasks are due to be done within the next %s days" -msgstr "" +msgid "%s task is due to be done" +msgid_plural "%s tasks are due to be done" +msgstr[0] "" +msgstr[1] "" msgid "%s task is overdue to be done" -msgstr "" - -msgid "%s tasks are overdue to be done" -msgstr "" +msgid_plural "%s tasks are overdue to be done" +msgstr[0] "" +msgstr[1] "" msgid "Edit task category" msgstr "Bewerk kluscategorie" @@ -784,7 +807,8 @@ msgid "No file selected" msgstr "Geen bestand geslecteerd" msgid "If you don't select a file, the current picture will not be altered" -msgstr "De huidige afbeelding wordt niet gewijzigd als je geen bestand selecteerd" +msgstr "" +"De huidige afbeelding wordt niet gewijzigd als je geen bestand selecteerd" msgid "Delete" msgstr "Verwijder" @@ -798,8 +822,12 @@ msgstr "Selecteer bestand" msgid "Image of product %s" msgstr "Afbeelding van product %s" -msgid "This product cannot be deleted because it is in stock, please remove the stock amount first." -msgstr "Dit product kan niet worden verwijdert want het is in voorraad, verwijder dit eerst uit je voorraad." +msgid "" +"This product cannot be deleted because it is in stock, please remove the " +"stock amount first." +msgstr "" +"Dit product kan niet worden verwijdert want het is in voorraad, verwijder " +"dit eerst uit je voorraad." msgid "Delete not possible" msgstr "Verwijderen niet mogelijk" @@ -822,14 +850,21 @@ msgstr "Bewerk toestel" msgid "Create equipment" msgstr "Maak toestel" -msgid "If you don't select a file, the current instruction manual will not be altered" -msgstr "Wanneer je geen bestand kiest zal de huidige gebruikshandleiding niet gewijzigd worden" +msgid "" +"If you don't select a file, the current instruction manual will not be " +"altered" +msgstr "" +"Wanneer je geen bestand kiest zal de huidige gebruikshandleiding niet " +"gewijzigd worden" msgid "No instruction manual available" msgstr "Geen gebruikshandleiding beschikbaar" -msgid "The current instruction manual will be deleted when you save the equipment" -msgstr "De huidige gebruikshandleiding zal verwijderd worden wanneer je het toestel opslaat" +msgid "" +"The current instruction manual will be deleted when you save the equipment" +msgstr "" +"De huidige gebruikshandleiding zal verwijderd worden wanneer je het toestel " +"opslaat" msgid "No picture available" msgstr "Geen afbeelding beschikbaar" @@ -921,13 +956,17 @@ msgstr "" msgid "Use a specific stock item" msgstr "Gebruik een specifiek voorraad item" -msgid "The first item in this list would be picked by the default rule which is \"First expiring first, then first in first out\"" +msgid "" +"The first item in this list would be picked by the default rule which is " +"\"First expiring first, then first in first out\"" msgstr "" -msgid "Mark %s %s of %s as open" -msgstr "Markeer %s %s van %s als open" +msgid "Mark %s of %s as open" +msgstr "" -msgid "When a product was marked as opened, the best before date will be replaced by today + this amount of days (a value of 0 disables this)" +msgid "" +"When a product was marked as opened, the best before date will be replaced " +"by today + this amount of days (a value of 0 disables this)" msgstr "" msgid "Default best before days after opened" @@ -972,7 +1011,9 @@ msgstr "Voorraadinstellingen" msgid "Shopping list to stock workflow" msgstr "" -msgid "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" +msgid "" +"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" msgstr "" msgid "Skip" @@ -993,14 +1034,19 @@ msgstr "" msgid "Do not check against the shopping list when adding missing items to it" msgstr "" -msgid "By default the amount to be added to the shopping list is \"needed amount - stock amount - shopping list amount\" - when this is enabled, it is only checked against the stock amount, not against what is already on the shopping list" +msgid "" +"By default the amount to be added to the shopping list is \"needed amount - " +"stock amount - shopping list amount\" - when this is enabled, it is only " +"checked against the stock amount, not against what is already on the " +"shopping list" msgstr "" msgid "Picture" msgstr "Afbeelding" msgid "Uncheck ingredients to not put them on the shopping list" -msgstr "Zet het vinkje uit om ingrediënten niet op de boodschappenlijst te zetten" +msgstr "" +"Zet het vinkje uit om ingrediënten niet op de boodschappenlijst te zetten" msgid "This is for statistical purposes only" msgstr "Dit dient enkel voor statistische doeleinden" @@ -1014,8 +1060,12 @@ msgstr "Sleutel type" msgid "Share/Integrate calendar (iCal)" msgstr "Deel/Integreer agenda (iCal)" -msgid "Use the following (public) URL to share or integrate the calendar in iCal format" -msgstr "Gebruik de volgende (publieke) URL om de agenda te delen of integreren in iCal formaat" +msgid "" +"Use the following (public) URL to share or integrate the calendar in iCal " +"format" +msgstr "" +"Gebruik de volgende (publieke) URL om de agenda te delen of integreren in " +"iCal formaat" msgid "Allow partial units in stock" msgstr "Sta gedeeltelijke eenheden in voorraad toe" @@ -1023,13 +1073,18 @@ msgstr "Sta gedeeltelijke eenheden in voorraad toe" msgid "Enable tare weight handling" msgstr "" -msgid "This is useful e.g. for flour in jars - on purchase/consume/inventory you always weigh the whole jar, the amount to be posted is then automatically calculated based on what is in stock and the tare weight defined below" +msgid "" +"This is useful e.g. for flour in jars - on purchase/consume/inventory you " +"always weigh the whole jar, the amount to be posted is then automatically " +"calculated based on what is in stock and the tare weight defined below" msgstr "" msgid "Tare weight" msgstr "Tarra gewicht" -msgid "Tare weight handling enabled - please weigh the whole container, the amount to be posted will be automatically calculcated" +msgid "" +"Tare weight handling enabled - please weigh the whole container, the amount " +"to be posted will be automatically calculcated" msgstr "" msgid "You have to select a location" @@ -1042,7 +1097,8 @@ msgid "Gallery" msgstr "Gallerij" msgid "The current picture will be deleted when you save the recipe" -msgstr "De huidige afbeelding zal worden verwijderd wanneer je het recept opslaat." +msgstr "" +"De huidige afbeelding zal worden verwijderd wanneer je het recept opslaat." msgid "Show product details" msgstr "Toon product details" @@ -1080,7 +1136,9 @@ msgstr "Productenteller" msgid "Type a new product name or barcode and hit TAB to start a workflow" msgstr "" -msgid "This will be used as the default setting when adding this product as a recipe ingredient" +msgid "" +"This will be used as the default setting when adding this product as a " +"recipe ingredient" msgstr "" msgid "Add item" @@ -1187,3 +1245,26 @@ msgstr "Dit is verplicht en kan alleen cijfers en letters bevatten" msgid "Edit userfield" msgstr "Wijzig gebruikersveld" + +msgid "Plural forms" +msgstr "" + +msgid "One plural form per line, the current language requires" +msgstr "" + +msgid "Plural count" +msgstr "" + +msgid "Plural rule" +msgstr "" + +msgid "in plural form" +msgstr "In meervoud" + +msgid "Not enough in stock, %s ingredient missing" +msgid_plural "Not enough in stock, %s ingredients missing" +msgstr[0] "" +msgstr[1] "" + +msgid "Consume %s of %s" +msgstr "" diff --git a/localization/no/demo_data.po b/localization/no/demo_data.po index 8ee0edf9..13549ae8 100644 --- a/localization/no/demo_data.po +++ b/localization/no/demo_data.po @@ -36,40 +36,34 @@ msgid "Fridge" msgstr "Kjøleskapet" msgid "Piece" -msgstr "Ett" - -msgid "Pieces" -msgstr "Flere" +msgid_plural "Pieces" +msgstr[0] "" +msgstr[1] "" msgid "Pack" -msgstr "Pakke" - -msgid "Packs" -msgstr "Pakker" +msgid_plural "Packs" +msgstr[0] "" +msgstr[1] "" msgid "Glass" -msgstr "Glass" - -msgid "Glasses" -msgstr "Glass" +msgid_plural "Glasses" +msgstr[0] "" +msgstr[1] "" msgid "Tin" -msgstr "Hermetikkboks" - -msgid "Tins" -msgstr "Hermetikkbokser" +msgid_plural "Tins" +msgstr[0] "" +msgstr[1] "" msgid "Can" -msgstr "Boks" - -msgid "Cans" -msgstr "Bokser" +msgid_plural "Cans" +msgstr[0] "" +msgstr[1] "" msgid "Bunch" -msgstr "Klase" - -msgid "Bunches" -msgstr "Klaser" +msgid_plural "Bunches" +msgstr[0] "" +msgstr[1] "" msgid "Gummy bears" msgstr "Vingummibjørner" @@ -177,10 +171,9 @@ msgid "Demo User" msgstr "Demo Bruker" msgid "Gram" -msgstr "Gram" - -msgid "Grams" -msgstr "Gram" +msgid_plural "Grams" +msgstr[0] "" +msgstr[1] "" msgid "Flour" msgstr "Mel" diff --git a/localization/no/strings.po b/localization/no/strings.po index b5b6fc4a..6ca3a02f 100644 --- a/localization/no/strings.po +++ b/localization/no/strings.po @@ -20,18 +20,34 @@ msgstr "" msgid "Stock overview" msgstr "Husholdning" -msgid "%s products expiring within the next %s days" -msgstr "%s produkt går ut på dato innen de neste %s dagene" +msgid "%s product expires" +msgid_plural "%s products expiring" +msgstr[0] "" +msgstr[1] "" -msgid "%s products are already expired" -msgstr "%s produkt har gått ut på dato" +msgid "within the next day" +msgid_plural "within the next %s days" +msgstr[0] "" +msgstr[1] "" -msgid "%s products are below defined min. stock amount" -msgstr "%s produkt under minimum husholdningsnivå" +msgid "%s product is already expired" +msgid_plural "%s products are already expired" +msgstr[0] "" +msgstr[1] "" + +msgid "%s product is below defined min. stock amount" +msgid_plural "%s products are below defined min. stock amount" +msgstr[0] "" +msgstr[1] "" msgid "Product" msgstr "Produkt" +msgid "%s Product" +msgid_plural "%s Products" +msgstr[0] "" +msgstr[1] "" + msgid "Amount" msgstr "Antall" @@ -65,9 +81,6 @@ msgstr "Logge husarbeid" msgid "Battery tracking" msgstr "Batteri ladesyklus" -msgid "Products" -msgstr "Produkter" - msgid "Locations" msgstr "Lokasjoner" @@ -360,18 +373,6 @@ msgstr "Om Grocy" msgid "Close" msgstr "Lukk" -msgid "%s batteries are due to be charged within the next %s days" -msgstr "%s batteri må lades innen de %s neste dagene" - -msgid "%s batteries are overdue to be charged" -msgstr "%s batteri har gått over fristen for å bli ladet opp" - -msgid "%s chores are due to be done within the next %s days" -msgstr "%s husarbeids oppgaver skal gjøres inne de %s neste dagene" - -msgid "%s chores are overdue to be done" -msgstr "%s husarbeids oppgaver har gått over fristen for utførelse" - msgid "Released on" msgstr "Utgitt" @@ -486,17 +487,15 @@ msgstr "Har jeg alt jeg trenger for denne oppskriften?" msgid "Put missing products on shopping list" msgstr "Legg manglende produkter til handlelisten" -msgid "Not enough in stock, %s ingredients missing" -msgstr "Ikke nok i husholdningen, %s ingrediens(er) mangler" - msgid "Enough in stock" msgstr "Nok i husholdningen" msgid "" +"Not enough in stock, %s ingredient missing but already on the shopping list" +msgid_plural "" "Not enough in stock, %s ingredients missing but already on the shopping list" -msgstr "" -"Ikke nok i husholdningen, %s ingrediens(er) mangler, men denne/disse er på " -"handlelisten" +msgstr[0] "" +msgstr[1] "" msgid "Expand to fullscreen" msgstr "Full skjerm" @@ -604,45 +603,37 @@ msgstr "I %s per kjøpt forpakning " msgid "The price cannot be lower than %s" msgstr "Prisen kan ikke være lavere enn %s" -msgid "%s product expires within the next %s days" -msgstr "%s produkt går ut på dato innen de %s neste dagene" - -msgid "%s product is already expired" -msgstr "%s produkt er allerede gått ut på dato" - -msgid "%s product is below defined min. stock amount" -msgstr "%s produkt er under minimums husholdningsnivå" - msgid "Unit" msgstr "Enhet" -msgid "Units" -msgstr "Enheter" +msgid "%s Unit" +msgid_plural "%s Units" +msgstr[0] "" +msgstr[1] "" -msgid "%s chore is due to be done within the next %s days" -msgstr "%s husarbeid oppgave skal gjøres inne de %s neste dagene" +msgid "%s chore is due to be done" +msgid_plural "%s chores are due to be done" +msgstr[0] "" +msgstr[1] "" msgid "%s chore is overdue to be done" -msgstr "%s husarbeid oppgave har gått over fristen for utførelse" +msgid_plural "%s chores are overdue to be done" +msgstr[0] "" +msgstr[1] "" -msgid "%s battery is due to be charged within the next %s days" -msgstr "%s Batteri må lades innen %s dager" +msgid "%s battery is due to be charged" +msgid_plural "%s batteries are due to be charged" +msgstr[0] "" +msgstr[1] "" msgid "%s battery is overdue to be charged" -msgstr "%s Batteri har gått over fristen for å lades" - -msgid "" -"%s unit was automatically added and will apply in addition to the amount " -"entered here" -msgstr "" -"%s enhet ble automatisk lagt til i tillegg til hva som blir skrevet inn her" +msgid_plural "%s batteries are overdue to be charged" +msgstr[0] "" +msgstr[1] "" msgid "in singular form" msgstr "I entall" -msgid "in plural form" -msgstr "I flertall" - msgid "Never expires" msgstr "Går ikke ut på dato" @@ -722,17 +713,15 @@ msgstr "Endre oppgave" msgid "Are you sure to delete task \"%s\"?" msgstr "Er du sikker du ønsker slette oppgave \"%s\"?" -msgid "%s task is due to be done within the next %s days" -msgstr "%s oppgave har utførelse forfall innen de neste %s dagene" - -msgid "%s tasks are due to be done within the next %s days" -msgstr "%s oppgaver har utførelse forfall innen de neste %s dagene" +msgid "%s task is due to be done" +msgid_plural "%s tasks are due to be done" +msgstr[0] "" +msgstr[1] "" msgid "%s task is overdue to be done" -msgstr "%s oppgave har forfalt utførelse dato" - -msgid "%s tasks are overdue to be done" -msgstr "%s oppgaver har forfalt utførelse dato" +msgid_plural "%s tasks are overdue to be done" +msgstr[0] "" +msgstr[1] "" msgid "Edit task category" msgstr "Endre oppgave kategori" @@ -968,8 +957,8 @@ msgstr "" "Første produkt på listen vil bli konsumert først i henhold til standard " "regelen. \"Går ut på dato først. Deretter først inn, først ut\"." -msgid "Mark %s %s of %s as open" -msgstr "Merk %s %s av %s som åpnet" +msgid "Mark %s of %s as open" +msgstr "" msgid "" "When a product was marked as opened, the best before date will be replaced " @@ -1268,3 +1257,26 @@ msgstr "" msgid "Edit userfield" msgstr "" + +msgid "Plural forms" +msgstr "" + +msgid "One plural form per line, the current language requires" +msgstr "" + +msgid "Plural count" +msgstr "" + +msgid "Plural rule" +msgstr "" + +msgid "in plural form" +msgstr "I flertall" + +msgid "Not enough in stock, %s ingredient missing" +msgid_plural "Not enough in stock, %s ingredients missing" +msgstr[0] "" +msgstr[1] "" + +msgid "Consume %s of %s" +msgstr "" diff --git a/localization/no/userfield_types.po b/localization/no/userfield_types.po index bc6a139e..1541937a 100644 --- a/localization/no/userfield_types.po +++ b/localization/no/userfield_types.po @@ -1,15 +1,16 @@ +# msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Translation migration from old PHP array files\n" -"Language-Team: http://www.transifex.com/grocy/grocy/language/no\n" +"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n" +"PO-Revision-Date: 2019-05-01 17:43+0000\n" +"Language-Team: Norwegian (https://www.transifex.com/grocy/teams/93189/no/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n" -"PO-Revision-Date: 2019-05-01T17:59:17+00:00\n" "Language: no\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Domain: grocy/userfield_types\n" msgid "text-single-line" diff --git a/localization/pl/demo_data.po b/localization/pl/demo_data.po index 22eb94d1..71bf5bf8 100644 --- a/localization/pl/demo_data.po +++ b/localization/pl/demo_data.po @@ -1,6 +1,6 @@ # Translators: -# Maczuga , 2019 # Marcin Redlica , 2019 +# Maczuga , 2019 # msgid "" msgstr "" @@ -8,7 +8,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-05-01T17:59:17+00:00\n" "PO-Revision-Date: 2019-05-01 17:42+0000\n" -"Last-Translator: Marcin Redlica , 2019\n" +"Last-Translator: Maczuga , 2019\n" "Language-Team: Polish (https://www.transifex.com/grocy/teams/93189/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -36,40 +36,46 @@ msgid "Fridge" msgstr "Lodówka" msgid "Piece" -msgstr "Kawałek" - -msgid "Pieces" -msgstr "Kawałki/ów" +msgid_plural "Pieces" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" msgid "Pack" -msgstr "Paczka" - -msgid "Packs" -msgstr "Paczek/ki" +msgid_plural "Packs" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" msgid "Glass" -msgstr "Szklanka" - -msgid "Glasses" -msgstr "Szklanki/ek" +msgid_plural "Glasses" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" msgid "Tin" -msgstr "Puszka" - -msgid "Tins" -msgstr "Puszek/ki" +msgid_plural "Tins" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" msgid "Can" -msgstr "Opakowanie" - -msgid "Cans" -msgstr "Opakowań/nia" +msgid_plural "Cans" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" msgid "Bunch" -msgstr "Pęczek" - -msgid "Bunches" -msgstr "Pęczki/ów" +msgid_plural "Bunches" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" msgid "Gummy bears" msgstr "Żelki" @@ -177,10 +183,11 @@ msgid "Demo User" msgstr "Użytkownik demonstracyjny" msgid "Gram" -msgstr "Gram" - -msgid "Grams" -msgstr "Gramy/ów" +msgid_plural "Grams" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" msgid "Flour" msgstr "Mąka" @@ -288,4 +295,4 @@ msgid "Swedish" msgstr "Szwedzki" msgid "Polish" -msgstr "" +msgstr "Polski" diff --git a/localization/pl/strings.po b/localization/pl/strings.po index eef3d891..cf09cea2 100644 --- a/localization/pl/strings.po +++ b/localization/pl/strings.po @@ -23,18 +23,44 @@ msgstr "" msgid "Stock overview" msgstr "Przegląd zapasów" -msgid "%s products expiring within the next %s days" -msgstr "Ilość produktów, które będą przeterminowane w ciągu %s dni: %s" +msgid "%s product expires" +msgid_plural "%s products expiring" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -msgid "%s products are already expired" -msgstr "Przeterminowane produkty: %s" +msgid "within the next day" +msgid_plural "within the next %s days" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -msgid "%s products are below defined min. stock amount" -msgstr "%s produktów są poniżej zdefiniowanej minimalnej ilości" +msgid "%s product is already expired" +msgid_plural "%s products are already expired" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +msgid "%s product is below defined min. stock amount" +msgid_plural "%s products are below defined min. stock amount" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" msgid "Product" msgstr "Produkt" +msgid "%s Product" +msgid_plural "%s Products" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + msgid "Amount" msgstr "Ilość" @@ -68,9 +94,6 @@ msgstr "Wykonanie obowiązku" msgid "Battery tracking" msgstr "Sprawdzenie stanu baterii" -msgid "Products" -msgstr "Produkty" - msgid "Locations" msgstr "Miejsca" @@ -365,18 +388,6 @@ msgstr "O grocy" msgid "Close" msgstr "Zamknij" -msgid "%s batteries are due to be charged within the next %s days" -msgstr "Ilość baterii do naładowania w ciągu %s dni: %s" - -msgid "%s batteries are overdue to be charged" -msgstr "Baterie po terminie ładowania: %s" - -msgid "%s chores are due to be done within the next %s days" -msgstr "Ilość obowiązków do wykonania w ciągu %s dni: %s" - -msgid "%s chores are overdue to be done" -msgstr "Obowiązki niewykonane w terminie: %s" - msgid "Released on" msgstr "Wydano dnia" @@ -491,17 +502,17 @@ msgstr "Wymagania spełnione" msgid "Put missing products on shopping list" msgstr "Dodaj brakujące produkty do listy zakupów" -msgid "Not enough in stock, %s ingredients missing" -msgstr "Za mało zapasów, brakuje %s składników" - msgid "Enough in stock" msgstr "Dość na stanie" msgid "" +"Not enough in stock, %s ingredient missing but already on the shopping list" +msgid_plural "" "Not enough in stock, %s ingredients missing but already on the shopping list" -msgstr "" -"Za mało zapasów. Brakujące składniki, które znajdują się już na liście " -"zakupów: %s" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" msgid "Expand to fullscreen" msgstr "Pokaż w pełnym ekranie" @@ -609,44 +620,47 @@ msgstr "w %s za zakup jednostki ilości" msgid "The price cannot be lower than %s" msgstr "Cena nie może być mniejsza niż %s" -msgid "%s product expires within the next %s days" -msgstr "Ilość produktów, które będą przeterminowane w ciągu %s dni: %s" - -msgid "%s product is already expired" -msgstr "Przeterminowane produkty: %s" - -msgid "%s product is below defined min. stock amount" -msgstr "" - msgid "Unit" msgstr "Jednostka" -msgid "Units" -msgstr "Jednostki" +msgid "%s Unit" +msgid_plural "%s Units" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -msgid "%s chore is due to be done within the next %s days" -msgstr "Ilość obowiązków do wykonania w ciągu %s dni: %s" +msgid "%s chore is due to be done" +msgid_plural "%s chores are due to be done" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" msgid "%s chore is overdue to be done" -msgstr "Obowiązki niewykonane w terminie: %s" +msgid_plural "%s chores are overdue to be done" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -msgid "%s battery is due to be charged within the next %s days" -msgstr "Ilość baterii do naładowania za %s dni: %s" +msgid "%s battery is due to be charged" +msgid_plural "%s batteries are due to be charged" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" msgid "%s battery is overdue to be charged" -msgstr "Baterie po terminie ładowania: %s" - -msgid "" -"%s unit was automatically added and will apply in addition to the amount " -"entered here" -msgstr "" +msgid_plural "%s batteries are overdue to be charged" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" msgid "in singular form" msgstr "w liczbie pojedynczej" -msgid "in plural form" -msgstr "w liczbie mnogiej" - msgid "Never expires" msgstr "Brak terminu ważności" @@ -728,17 +742,19 @@ msgstr "Edytuj zadanie" msgid "Are you sure to delete task \"%s\"?" msgstr "Czy jesteś pewien, że chcesz usunąć zadanie \"%s\"?" -msgid "%s task is due to be done within the next %s days" -msgstr "Ilość zadań do wykonania w ciągu %s dni: %s" - -msgid "%s tasks are due to be done within the next %s days" -msgstr "Ilość zadań do wykonania w ciągu %s dni: %s" +msgid "%s task is due to be done" +msgid_plural "%s tasks are due to be done" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" msgid "%s task is overdue to be done" -msgstr "Zadania niewykonane w terminie: %s" - -msgid "%s tasks are overdue to be done" -msgstr "Zadania niewykonane w terminie: %s" +msgid_plural "%s tasks are overdue to be done" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" msgid "Edit task category" msgstr "Edytuj kategorię zadania" @@ -968,8 +984,8 @@ msgid "" "\"First expiring first, then first in first out\"" msgstr "" -msgid "Mark %s %s of %s as open" -msgstr "%s - oznacz %s %s jako otwarte" +msgid "Mark %s of %s as open" +msgstr "" msgid "" "When a product was marked as opened, the best before date will be replaced " @@ -1263,3 +1279,28 @@ msgstr "Pole jest wymagane i może zawierać jedynie litery i cyfry" msgid "Edit userfield" msgstr "Edytuj pole użytkownika" + +msgid "Plural forms" +msgstr "" + +msgid "One plural form per line, the current language requires" +msgstr "" + +msgid "Plural count" +msgstr "" + +msgid "Plural rule" +msgstr "" + +msgid "in plural form" +msgstr "w liczbie mnogiej" + +msgid "Not enough in stock, %s ingredient missing" +msgid_plural "Not enough in stock, %s ingredients missing" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +msgid "Consume %s of %s" +msgstr "" diff --git a/localization/ru/chore_types.po b/localization/ru/chore_types.po index 5f8c0445..c083c2b7 100644 --- a/localization/ru/chore_types.po +++ b/localization/ru/chore_types.po @@ -1,15 +1,19 @@ +# Translators: +# Bernd Bestel , 2019 +# msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Translation migration from old PHP array files\n" -"Language-Team: http://www.transifex.com/grocy/grocy/language/ru\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 , 2019\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" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n" -"PO-Revision-Date: 2019-05-01T17:59:17+00:00\n" "Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" "X-Domain: grocy/chore_types\n" msgid "manually" diff --git a/localization/ru/demo_data.po b/localization/ru/demo_data.po index 44ee015a..0a3c4b12 100644 --- a/localization/ru/demo_data.po +++ b/localization/ru/demo_data.po @@ -1,15 +1,19 @@ +# Translators: +# Pavel Pletenev , 2019 +# msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Translation migration from old PHP array files\n" -"Language-Team: http://www.transifex.com/grocy/grocy/language/ru\n" +"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n" +"PO-Revision-Date: 2019-05-01 17:42+0000\n" +"Last-Translator: Pavel Pletenev , 2019\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" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n" -"PO-Revision-Date: 2019-05-01T17:59:17+00:00\n" "Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" "X-Domain: grocy/demo_data\n" msgid "Cookies" @@ -31,40 +35,46 @@ msgid "Fridge" msgstr "Холодильник" msgid "Piece" -msgstr "Штука" - -msgid "Pieces" -msgstr "Штук(и)" +msgid_plural "Pieces" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" msgid "Pack" -msgstr "Упаковка" - -msgid "Packs" -msgstr "Упаков(ки/ок)" +msgid_plural "Packs" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" msgid "Glass" -msgstr "Стакан" - -msgid "Glasses" -msgstr "Стакан(а/ов)" +msgid_plural "Glasses" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" msgid "Tin" -msgstr "" - -msgid "Tins" -msgstr "" +msgid_plural "Tins" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" msgid "Can" -msgstr "" - -msgid "Cans" -msgstr "" +msgid_plural "Cans" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" msgid "Bunch" -msgstr "" - -msgid "Bunches" -msgstr "" +msgid_plural "Bunches" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" msgid "Gummy bears" msgstr "" @@ -172,10 +182,11 @@ msgid "Demo User" msgstr "" msgid "Gram" -msgstr "" - -msgid "Grams" -msgstr "" +msgid_plural "Grams" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" msgid "Flour" msgstr "" diff --git a/localization/ru/strings.po b/localization/ru/strings.po index dc35b2a6..ee53b980 100644 --- a/localization/ru/strings.po +++ b/localization/ru/strings.po @@ -1,32 +1,63 @@ +# Translators: +# Pavel Pletenev , 2019 +# Bernd Bestel , 2019 +# msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Translation migration from old PHP array files\n" -"Language-Team: http://www.transifex.com/grocy/grocy/language/ru\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 , 2019\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" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n" -"PO-Revision-Date: 2019-05-01T17:59:17+00:00\n" "Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" "X-Domain: grocy/strings\n" msgid "Stock overview" msgstr "Обзор склада" -msgid "%s products expiring within the next %s days" -msgstr "У %s продуктов заканчивается срок годности через %s дня (дней)" +msgid "%s product expires" +msgid_plural "%s products expiring" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -msgid "%s products are already expired" -msgstr "У %s продуктов закончился срок годности" +msgid "within the next day" +msgid_plural "within the next %s days" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -msgid "%s products are below defined min. stock amount" -msgstr "%s продуктов имеются меньше мин. заданного кол-ва" +msgid "%s product is already expired" +msgid_plural "%s products are already expired" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +msgid "%s product is below defined min. stock amount" +msgid_plural "%s products are below defined min. stock amount" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" msgid "Product" msgstr "Продукт" +msgid "%s Product" +msgid_plural "%s Products" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + msgid "Amount" msgstr "Количество" @@ -60,9 +91,6 @@ msgstr "Выполнить работу по дому" msgid "Battery tracking" msgstr "Отслеживание батарей" -msgid "Products" -msgstr "Продукты" - msgid "Locations" msgstr "Места хранения" @@ -120,8 +148,10 @@ msgstr "Испорчено" msgid "Barcode lookup is disabled" msgstr "Поиск по штрихкоду отключён" -msgid "will be added to the list of barcodes for the selected product on submit" -msgstr "будет добавлен к списку штрихкодов для выбранного продукта при сохранении" +msgid "" +"will be added to the list of barcodes for the selected product on submit" +msgstr "" +"будет добавлен к списку штрихкодов для выбранного продукта при сохранении" msgid "New amount" msgstr "Новое количество" @@ -249,8 +279,12 @@ msgstr "никогда" msgid "Add products that are below defined min. stock amount" msgstr "Добавить продукты, которых меньше мин. заданного кол-ва" -msgid "For purchases this amount of days will be added to today for the best before date suggestion" -msgstr "Данное количество дней будет добавлено к предлагаемому сроку годности при покупке" +msgid "" +"For purchases this amount of days will be added to today for the best before" +" date suggestion" +msgstr "" +"Данное количество дней будет добавлено к предлагаемому сроку годности при " +"покупке" msgid "This means 1 %s purchased will be converted into %s %s in stock" msgstr "Означает, что 1 купленный %s будет пересчитан в %s %s в запасе" @@ -280,7 +314,9 @@ msgid "Are you sure to delete chore \"%s\"?" msgstr "Вы уверены, что нужно удалить работу по дому \"%s\"?" msgid "\"%s\" could not be resolved to a product, how do you want to proceed?" -msgstr "\"%s\" не может быть преобразован к существующему продукту. Как вы хотите продолжить?" +msgstr "" +"\"%s\" не может быть преобразован к существующему продукту. Как вы хотите " +"продолжить?" msgid "Create or assign product" msgstr "Создать или назначить продукт" @@ -336,8 +372,12 @@ msgstr "Означает, что %s будет добавлен в запас" msgid "This means %s will be removed from stock" msgstr "Означает, что %s будет убран из запаса" -msgid "This means it is estimated that a new execution of this chore is tracked %s days after the last was tracked" -msgstr "Это означает, что следующее выполнение данной работы по дому будет назначено спустя %s дней после самого недавнего выполнения" +msgid "" +"This means it is estimated that a new execution of this chore is tracked %s " +"days after the last was tracked" +msgstr "" +"Это означает, что следующее выполнение данной работы по дому будет назначено" +" спустя %s дней после самого недавнего выполнения" msgid "Removed %s %s of %s from stock" msgstr "Убрано %s %s из %s из запаса" @@ -348,18 +388,6 @@ msgstr "О grocy" msgid "Close" msgstr "Закрыть" -msgid "%s batteries are due to be charged within the next %s days" -msgstr "%s батарей нужно будет зарядить в ближайшие %s дня" - -msgid "%s batteries are overdue to be charged" -msgstr "%s батарей нужно зарядить" - -msgid "%s chores are due to be done within the next %s days" -msgstr "Срок исполнения %s работ по дому наступает в ближайшие %s дня (дней)" - -msgid "%s chores are overdue to be done" -msgstr "У %s работ по дому уже подошёл срок выполнения" - msgid "Released on" msgstr "Выпуск от" @@ -474,14 +502,17 @@ msgstr "Требования выполнены" msgid "Put missing products on shopping list" msgstr "Добавить отсутствующие продукты в список покупок" -msgid "Not enough in stock, %s ingredients missing" -msgstr "Запаса недостаточно, %s ингредиентов нет" - msgid "Enough in stock" msgstr "Достаточно в запасе" -msgid "Not enough in stock, %s ingredients missing but already on the shopping list" -msgstr "Запаса недостаточно, %s ингредиентов нет, но уже добавлены в список покупок" +msgid "" +"Not enough in stock, %s ingredient missing but already on the shopping list" +msgid_plural "" +"Not enough in stock, %s ingredients missing but already on the shopping list" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" msgid "Expand to fullscreen" msgstr "Раскрыть на весь экран" @@ -496,7 +527,8 @@ msgid "Recipe" msgstr "Рецепт" msgid "Not enough in stock, %s missing, %s already on shopping list" -msgstr "Запаса недостаточно, %s ингредиентов нет, %s уже добавлены в список покупок" +msgstr "" +"Запаса недостаточно, %s ингредиентов нет, %s уже добавлены в список покупок" msgid "Show notes" msgstr "Показать заметки" @@ -504,8 +536,12 @@ msgstr "Показать заметки" msgid "Put missing amount on shopping list" msgstr "Добавить отсутствующее количество в список покупок" -msgid "Are you sure to put all missing ingredients for recipe \"%s\" on the shopping list?" -msgstr "Вы уверены, что нужно добавить все отсутствующие ингредиенты для рецепта \"%s\" в список покупок?" +msgid "" +"Are you sure to put all missing ingredients for recipe \"%s\" on the " +"shopping list?" +msgstr "" +"Вы уверены, что нужно добавить все отсутствующие ингредиенты для рецепта " +"\"%s\" в список покупок?" msgid "Added for recipe %s" msgstr "Добавлен рецепт %s" @@ -585,42 +621,47 @@ msgstr "в %s на покупку единицы измерения" msgid "The price cannot be lower than %s" msgstr "Цена не может быть ниже %s" -msgid "%s product expires within the next %s days" -msgstr "У %s продукта закончится срок годности через %s дня(дней)" - -msgid "%s product is already expired" -msgstr "У %s продукта уже закончился срок годности" - -msgid "%s product is below defined min. stock amount" -msgstr "%s продукт имеется меньше мин. заданного кол-ва" - msgid "Unit" msgstr "Ед.изм." -msgid "Units" -msgstr "Ед.изм." +msgid "%s Unit" +msgid_plural "%s Units" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -msgid "%s chore is due to be done within the next %s days" -msgstr "Срок исполнения %s работы по дому наступает в ближайшие %s дня (дней) " +msgid "%s chore is due to be done" +msgid_plural "%s chores are due to be done" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" msgid "%s chore is overdue to be done" -msgstr "У %s работы по дому уже подошёл срок исполнения " +msgid_plural "%s chores are overdue to be done" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -msgid "%s battery is due to be charged within the next %s days" -msgstr "%s батарею нужно будет зарядить в ближайшие %s дня " +msgid "%s battery is due to be charged" +msgid_plural "%s batteries are due to be charged" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" msgid "%s battery is overdue to be charged" -msgstr "%s батарею нужно зарядить" - -msgid "%s unit was automatically added and will apply in addition to the amount entered here" -msgstr "" +msgid_plural "%s batteries are overdue to be charged" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" msgid "in singular form" msgstr "в единственном числе" -msgid "in plural form" -msgstr "в множественном числе" - msgid "Never expires" msgstr "Бесконечный срок годности" @@ -633,10 +674,14 @@ msgstr "-1 означает, что у данного продукта беск msgid "Quantity unit" msgstr "Единица измерения" -msgid "Only check if a single unit is in stock (a different quantity can then be used above)" +msgid "" +"Only check if a single unit is in stock (a different quantity can then be " +"used above)" msgstr "" -msgid "Are you sure to consume all ingredients needed by recipe \"%s\" (ingredients marked with \"check only if a single unit is in stock\" will be ignored)?" +msgid "" +"Are you sure to consume all ingredients needed by recipe \"%s\" (ingredients" +" marked with \"check only if a single unit is in stock\" will be ignored)?" msgstr "" msgid "Removed all ingredients of recipe \"%s\" from stock" @@ -693,17 +738,19 @@ msgstr "Изменить задачу" msgid "Are you sure to delete task \"%s\"?" msgstr "Вы уверены, что нужно удалить задачу \"%s\"?" -msgid "%s task is due to be done within the next %s days" -msgstr "У %s задачи заканчивается срок выполнения в ближайшие %s дня(дней)" - -msgid "%s tasks are due to be done within the next %s days" -msgstr "У %s задач заканчивается срок выполнения в ближайшие %s дня (дней)" +msgid "%s task is due to be done" +msgid_plural "%s tasks are due to be done" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" msgid "%s task is overdue to be done" -msgstr "У %s задачи вышел срок выполнения" - -msgid "%s tasks are overdue to be done" -msgstr "У %s задач вышел срок выполнения" +msgid_plural "%s tasks are overdue to be done" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" msgid "Edit task category" msgstr "Изменить категорию задач" @@ -798,8 +845,12 @@ msgstr "Выбрать файл" msgid "Image of product %s" msgstr "Изображение продукта %s" -msgid "This product cannot be deleted because it is in stock, please remove the stock amount first." -msgstr "Данный продукт не может быть удалён, так как он ещё есть в запасе. Пожалуйста, сначала опустошите запас." +msgid "" +"This product cannot be deleted because it is in stock, please remove the " +"stock amount first." +msgstr "" +"Данный продукт не может быть удалён, так как он ещё есть в запасе. " +"Пожалуйста, сначала опустошите запас." msgid "Delete not possible" msgstr "Удаление невозможно" @@ -822,15 +873,16 @@ msgstr "Изменить технику" msgid "Create equipment" msgstr "Создать технику" -msgid "If you don't select a file, the current instruction manual will not be altered" +msgid "" +"If you don't select a file, the current instruction manual will not be " +"altered" msgstr "Если файл не выбран, то текущая инструкция не будет изменена" msgid "No instruction manual available" -msgstr "" -"Нет доступной инструкции\n" -"" +msgstr "Нет доступной инструкции\n" -msgid "The current instruction manual will be deleted when you save the equipment" +msgid "" +"The current instruction manual will be deleted when you save the equipment" msgstr "Текущая инструкция будет удалена при сохранении техники" msgid "No picture available" @@ -923,13 +975,19 @@ msgstr "Добавляется элемент списка покупок %s и msgid "Use a specific stock item" msgstr "Использовать конкретный элемент из запаса" -msgid "The first item in this list would be picked by the default rule which is \"First expiring first, then first in first out\"" -msgstr "Первый элемент этого списка будет выбран по правилу \"Сначала с меньшим сроком годности, затем по дате поступления\"" +msgid "" +"The first item in this list would be picked by the default rule which is " +"\"First expiring first, then first in first out\"" +msgstr "" +"Первый элемент этого списка будет выбран по правилу \"Сначала с меньшим " +"сроком годности, затем по дате поступления\"" -msgid "Mark %s %s of %s as open" -msgstr "Пометить %s %s %s как открытую" +msgid "Mark %s of %s as open" +msgstr "" -msgid "When a product was marked as opened, the best before date will be replaced by today + this amount of days (a value of 0 disables this)" +msgid "" +"When a product was marked as opened, the best before date will be replaced " +"by today + this amount of days (a value of 0 disables this)" msgstr "" msgid "Default best before days after opened" @@ -974,7 +1032,9 @@ msgstr "Настройки запаса" msgid "Shopping list to stock workflow" msgstr "" -msgid "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" +msgid "" +"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" msgstr "" msgid "Skip" @@ -995,7 +1055,11 @@ msgstr "" msgid "Do not check against the shopping list when adding missing items to it" msgstr "" -msgid "By default the amount to be added to the shopping list is \"needed amount - stock amount - shopping list amount\" - when this is enabled, it is only checked against the stock amount, not against what is already on the shopping list" +msgid "" +"By default the amount to be added to the shopping list is \"needed amount - " +"stock amount - shopping list amount\" - when this is enabled, it is only " +"checked against the stock amount, not against what is already on the " +"shopping list" msgstr "" msgid "Picture" @@ -1016,7 +1080,9 @@ msgstr "" msgid "Share/Integrate calendar (iCal)" msgstr "" -msgid "Use the following (public) URL to share or integrate the calendar in iCal format" +msgid "" +"Use the following (public) URL to share or integrate the calendar in iCal " +"format" msgstr "" msgid "Allow partial units in stock" @@ -1025,14 +1091,25 @@ msgstr "Разрешить дробные количества в запасе" msgid "Enable tare weight handling" msgstr "Включить расчёт с учётом тары" -msgid "This is useful e.g. for flour in jars - on purchase/consume/inventory you always weigh the whole jar, the amount to be posted is then automatically calculated based on what is in stock and the tare weight defined below" -msgstr "Это удобно, например, для хранения муки в контейнере - при покупке/потреблении/инветаризации взвесьте весь контейнер, а настоящее количество будет автоматически рассчитано на основе объёма в запасе и веса тары ниже" +msgid "" +"This is useful e.g. for flour in jars - on purchase/consume/inventory you " +"always weigh the whole jar, the amount to be posted is then automatically " +"calculated based on what is in stock and the tare weight defined below" +msgstr "" +"Это удобно, например, для хранения муки в контейнере - при " +"покупке/потреблении/инветаризации взвесьте весь контейнер, а настоящее " +"количество будет автоматически рассчитано на основе объёма в запасе и веса " +"тары ниже" msgid "Tare weight" msgstr "Вес тары" -msgid "Tare weight handling enabled - please weigh the whole container, the amount to be posted will be automatically calculcated" -msgstr "Включён расчёт с учётом тары - пожалуйста, взвесьте весь контейнер, изменения в количестве будут автоматически рассчитаны" +msgid "" +"Tare weight handling enabled - please weigh the whole container, the amount " +"to be posted will be automatically calculcated" +msgstr "" +"Включён расчёт с учётом тары - пожалуйста, взвесьте весь контейнер, " +"изменения в количестве будут автоматически рассчитаны" msgid "You have to select a location" msgstr "Вам нужно выбрать место хранения" @@ -1082,7 +1159,9 @@ msgstr "" msgid "Type a new product name or barcode and hit TAB to start a workflow" msgstr "" -msgid "This will be used as the default setting when adding this product as a recipe ingredient" +msgid "" +"This will be used as the default setting when adding this product as a " +"recipe ingredient" msgstr "" msgid "Add item" @@ -1189,3 +1268,28 @@ msgstr "" msgid "Edit userfield" msgstr "" + +msgid "Plural forms" +msgstr "" + +msgid "One plural form per line, the current language requires" +msgstr "" + +msgid "Plural count" +msgstr "" + +msgid "Plural rule" +msgstr "" + +msgid "in plural form" +msgstr "в множественном числе" + +msgid "Not enough in stock, %s ingredient missing" +msgid_plural "Not enough in stock, %s ingredients missing" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +msgid "Consume %s of %s" +msgstr "" diff --git a/localization/strings.pot b/localization/strings.pot index 13875de5..be2711eb 100644 --- a/localization/strings.pot +++ b/localization/strings.pot @@ -15,18 +15,34 @@ msgstr "" msgid "Stock overview" msgstr "" -msgid "%s products expiring within the next %s days" -msgstr "" +msgid "%s product expires" +msgid_plural "%s products expiring" +msgstr[0] "" +msgstr[1] "" -msgid "%s products are already expired" -msgstr "" +msgid "within the next day" +msgid_plural "within the next %s days" +msgstr[0] "" +msgstr[1] "" -msgid "%s products are below defined min. stock amount" -msgstr "" +msgid "%s product is already expired" +msgid_plural "%s products are already expired" +msgstr[0] "" +msgstr[1] "" + +msgid "%s product is below defined min. stock amount" +msgid_plural "%s products are below defined min. stock amount" +msgstr[0] "" +msgstr[1] "" msgid "Product" msgstr "" +msgid "%s Product" +msgid_plural "%s Products" +msgstr[0] "" +msgstr[1] "" + msgid "Amount" msgstr "" @@ -60,9 +76,6 @@ msgstr "" msgid "Battery tracking" msgstr "" -msgid "Products" -msgstr "" - msgid "Locations" msgstr "" @@ -348,18 +361,6 @@ msgstr "" msgid "Close" msgstr "" -msgid "%s batteries are due to be charged within the next %s days" -msgstr "" - -msgid "%s batteries are overdue to be charged" -msgstr "" - -msgid "%s chores are due to be done within the next %s days" -msgstr "" - -msgid "%s chores are overdue to be done" -msgstr "" - msgid "Released on" msgstr "" @@ -474,14 +475,13 @@ msgstr "" msgid "Put missing products on shopping list" msgstr "" -msgid "Not enough in stock, %s ingredients missing" -msgstr "" - msgid "Enough in stock" msgstr "" -msgid "Not enough in stock, %s ingredients missing but already on the shopping list" -msgstr "" +msgid "Not enough in stock, %s ingredient missing but already on the shopping list" +msgid_plural "Not enough in stock, %s ingredients missing but already on the shopping list" +msgstr[0] "" +msgstr[1] "" msgid "Expand to fullscreen" msgstr "" @@ -585,42 +585,37 @@ msgstr "" msgid "The price cannot be lower than %s" msgstr "" -msgid "%s product expires within the next %s days" -msgstr "" - -msgid "%s product is already expired" -msgstr "" - -msgid "%s product is below defined min. stock amount" -msgstr "" - msgid "Unit" msgstr "" -msgid "Units" -msgstr "" +msgid "%s Unit" +msgid_plural "%s Units" +msgstr[0] "" +msgstr[1] "" -msgid "%s chore is due to be done within the next %s days" -msgstr "" +msgid "%s chore is due to be done" +msgid_plural "%s chores are due to be done" +msgstr[0] "" +msgstr[1] "" msgid "%s chore is overdue to be done" -msgstr "" +msgid_plural "%s chores are overdue to be done" +msgstr[0] "" +msgstr[1] "" -msgid "%s battery is due to be charged within the next %s days" -msgstr "" +msgid "%s battery is due to be charged" +msgid_plural "%s batteries are due to be charged" +msgstr[0] "" +msgstr[1] "" msgid "%s battery is overdue to be charged" -msgstr "" - -msgid "%s unit was automatically added and will apply in addition to the amount entered here" -msgstr "" +msgid_plural "%s batteries are overdue to be charged" +msgstr[0] "" +msgstr[1] "" msgid "in singular form" msgstr "" -msgid "in plural form" -msgstr "" - msgid "Never expires" msgstr "" @@ -693,17 +688,15 @@ msgstr "" msgid "Are you sure to delete task \"%s\"?" msgstr "" -msgid "%s task is due to be done within the next %s days" -msgstr "" - -msgid "%s tasks are due to be done within the next %s days" -msgstr "" +msgid "%s task is due to be done" +msgid_plural "%s tasks are due to be done" +msgstr[0] "" +msgstr[1] "" msgid "%s task is overdue to be done" -msgstr "" - -msgid "%s tasks are overdue to be done" -msgstr "" +msgid_plural "%s tasks are overdue to be done" +msgstr[0] "" +msgstr[1] "" msgid "Edit task category" msgstr "" @@ -924,7 +917,7 @@ msgstr "" msgid "The first item in this list would be picked by the default rule which is \"First expiring first, then first in first out\"" msgstr "" -msgid "Mark %s %s of %s as open" +msgid "Mark %s of %s as open" msgstr "" msgid "When a product was marked as opened, the best before date will be replaced by today + this amount of days (a value of 0 disables this)" @@ -1187,3 +1180,35 @@ msgstr "" msgid "Edit userfield" msgstr "" + +msgid "Plural forms" +msgstr "" + +msgid "One plural form per line, the current language requires" +msgstr "" + +msgid "Plural count" +msgstr "" + +msgid "Plural rule" +msgstr "" + +msgid "in plural form" +msgstr "" + +msgid "Not enough in stock, %s ingredient missing" +msgid_plural "Not enough in stock, %s ingredients missing" +msgstr[0] "" +msgstr[1] "" + +msgid "Consume %s of %s" +msgstr "" + +msgid "Pieces" +msgstr "" + +msgid "Packs" +msgstr "" + +msgid "Products" +msgstr "" diff --git a/localization/sv_SE/demo_data.po b/localization/sv_SE/demo_data.po index 1eb06276..3a562482 100644 --- a/localization/sv_SE/demo_data.po +++ b/localization/sv_SE/demo_data.po @@ -1,6 +1,6 @@ # Translators: -# Mathias Fröjd , 2019 # Bernd Bestel , 2019 +# Mathias Fröjd , 2019 # msgid "" msgstr "" @@ -8,7 +8,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-05-01T17:59:17+00:00\n" "PO-Revision-Date: 2019-05-01 17:42+0000\n" -"Last-Translator: Bernd Bestel , 2019\n" +"Last-Translator: Mathias Fröjd , 2019\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" @@ -36,40 +36,34 @@ msgid "Fridge" msgstr "Kylskåp" msgid "Piece" -msgstr "Bit" - -msgid "Pieces" -msgstr "Bitar" +msgid_plural "Pieces" +msgstr[0] "" +msgstr[1] "" msgid "Pack" -msgstr "Förpackning" - -msgid "Packs" -msgstr "Förpackningar" +msgid_plural "Packs" +msgstr[0] "" +msgstr[1] "" msgid "Glass" -msgstr "Glas" - -msgid "Glasses" -msgstr "Glasögon" +msgid_plural "Glasses" +msgstr[0] "" +msgstr[1] "" msgid "Tin" -msgstr "Burk" - -msgid "Tins" -msgstr "Burkar" +msgid_plural "Tins" +msgstr[0] "" +msgstr[1] "" msgid "Can" -msgstr "Dos" - -msgid "Cans" -msgstr "Dos" +msgid_plural "Cans" +msgstr[0] "" +msgstr[1] "" msgid "Bunch" -msgstr "Knippa" - -msgid "Bunches" -msgstr "Klasar" +msgid_plural "Bunches" +msgstr[0] "" +msgstr[1] "" msgid "Gummy bears" msgstr "Gummibjörnar" @@ -177,10 +171,9 @@ msgid "Demo User" msgstr "Demo-användare" msgid "Gram" -msgstr "Gram" - -msgid "Grams" -msgstr "Gram" +msgid_plural "Grams" +msgstr[0] "" +msgstr[1] "" msgid "Flour" msgstr "Mjöl" @@ -288,4 +281,4 @@ msgid "Swedish" msgstr "Swedish" msgid "Polish" -msgstr "" +msgstr "Polermedel" diff --git a/localization/sv_SE/strings.po b/localization/sv_SE/strings.po index 9caaa9cb..ada3b0eb 100644 --- a/localization/sv_SE/strings.po +++ b/localization/sv_SE/strings.po @@ -20,18 +20,34 @@ msgstr "" msgid "Stock overview" msgstr "Lageröversikt" -msgid "%s products expiring within the next %s days" -msgstr "%s produkter som löper ut inom %s dagar" +msgid "%s product expires" +msgid_plural "%s products expiring" +msgstr[0] "" +msgstr[1] "" -msgid "%s products are already expired" -msgstr "%s produkter är redan utgått" +msgid "within the next day" +msgid_plural "within the next %s days" +msgstr[0] "" +msgstr[1] "" -msgid "%s products are below defined min. stock amount" -msgstr "%s produkter är under definierade min. lagerbelopp" +msgid "%s product is already expired" +msgid_plural "%s products are already expired" +msgstr[0] "" +msgstr[1] "" + +msgid "%s product is below defined min. stock amount" +msgid_plural "%s products are below defined min. stock amount" +msgstr[0] "" +msgstr[1] "" msgid "Product" msgstr "Produkt" +msgid "%s Product" +msgid_plural "%s Products" +msgstr[0] "" +msgstr[1] "" + msgid "Amount" msgstr "Belopp" @@ -65,9 +81,6 @@ msgstr "Sysslor spårning" msgid "Battery tracking" msgstr "Batterispårning" -msgid "Products" -msgstr "Produkter" - msgid "Locations" msgstr "Platser" @@ -364,18 +377,6 @@ msgstr "Om grocy" msgid "Close" msgstr "Stänga" -msgid "%s batteries are due to be charged within the next %s days" -msgstr "%s batteri/er behöver laddas inom de närmaste 2 dagarna" - -msgid "%s batteries are overdue to be charged" -msgstr "%s batteri/er behöver laddas nu" - -msgid "%s chores are due to be done within the next %s days" -msgstr "%s syssla/or bör göras inom de närmaste 2 dagarna" - -msgid "%s chores are overdue to be done" -msgstr "%s syssla/or borde ha utförts" - msgid "Released on" msgstr "Släppt på" @@ -490,16 +491,15 @@ msgstr "Krav uppfyllda" msgid "Put missing products on shopping list" msgstr "Sätt saknade produkter på inköpslista" -msgid "Not enough in stock, %s ingredients missing" -msgstr "Inte tillräckligt i lager, saknas %s ingredienser" - msgid "Enough in stock" msgstr "Tillräckligt i lager" msgid "" +"Not enough in stock, %s ingredient missing but already on the shopping list" +msgid_plural "" "Not enough in stock, %s ingredients missing but already on the shopping list" -msgstr "" -"Inte tillräckligt i lager, saknas %s ingredienser men redan på köpslistan" +msgstr[0] "" +msgstr[1] "" msgid "Expand to fullscreen" msgstr "Expandera till fullskärm" @@ -607,46 +607,37 @@ msgstr "i %s per inköpskvantitetsenhet" msgid "The price cannot be lower than %s" msgstr "Priset kan inte vara lägre än %s" -msgid "%s product expires within the next %s days" -msgstr "%s produkt löper ut inom 2 dagar" - -msgid "%s product is already expired" -msgstr "%s-produkten har redan gått ut" - -msgid "%s product is below defined min. stock amount" -msgstr "%s produkten är under definierad min. lagerbelopp" - msgid "Unit" msgstr "Enhet" -msgid "Units" -msgstr "Enheter" +msgid "%s Unit" +msgid_plural "%s Units" +msgstr[0] "" +msgstr[1] "" -msgid "%s chore is due to be done within the next %s days" -msgstr "%s syssla/or bör göras inom de närmaste 2 dagarna" +msgid "%s chore is due to be done" +msgid_plural "%s chores are due to be done" +msgstr[0] "" +msgstr[1] "" msgid "%s chore is overdue to be done" -msgstr "%s syssla/or borde ha utförts" +msgid_plural "%s chores are overdue to be done" +msgstr[0] "" +msgstr[1] "" -msgid "%s battery is due to be charged within the next %s days" -msgstr "Batteri %s beror på att debiteras inom de närmaste 2 dagarna" +msgid "%s battery is due to be charged" +msgid_plural "%s batteries are due to be charged" +msgstr[0] "" +msgstr[1] "" msgid "%s battery is overdue to be charged" -msgstr "%s batteriet är för sent för att laddas" - -msgid "" -"%s unit was automatically added and will apply in addition to the amount " -"entered here" -msgstr "" -"%s-enhet läggs automatiskt till och kommer att gälla utöver det belopp som " -"anges här" +msgid_plural "%s batteries are overdue to be charged" +msgstr[0] "" +msgstr[1] "" msgid "in singular form" msgstr "i singular form" -msgid "in plural form" -msgstr "i plural form" - msgid "Never expires" msgstr "Går aldrig ut" @@ -728,17 +719,15 @@ msgstr "Redigera uppgiften" msgid "Are you sure to delete task \"%s\"?" msgstr "Är du säker på att ta bort uppgift \"%s\"?" -msgid "%s task is due to be done within the next %s days" -msgstr "%s uppgift beror på att ske inom de närmaste 2 dagarna" - -msgid "%s tasks are due to be done within the next %s days" -msgstr "%s uppgifter beror på att ske inom de närmaste 2 dagarna" +msgid "%s task is due to be done" +msgid_plural "%s tasks are due to be done" +msgstr[0] "" +msgstr[1] "" msgid "%s task is overdue to be done" -msgstr "%s uppgift är försenad att göra" - -msgid "%s tasks are overdue to be done" -msgstr "%s uppgifter är försenade att göra" +msgid_plural "%s tasks are overdue to be done" +msgstr[0] "" +msgstr[1] "" msgid "Edit task category" msgstr "Redigera uppgiftskategori" @@ -973,8 +962,8 @@ msgstr "" "Det första objektet i den här listan skulle plockas av standardregeln som är" " \"Första utgången först, sedan först i första utgåvan\"" -msgid "Mark %s %s of %s as open" -msgstr "Markera %s %s av %s såm öppnad" +msgid "Mark %s of %s as open" +msgstr "" msgid "" "When a product was marked as opened, the best before date will be replaced " @@ -1273,3 +1262,26 @@ msgstr "This is required and can only contain letters and numbers" msgid "Edit userfield" msgstr "Edit userfield" + +msgid "Plural forms" +msgstr "" + +msgid "One plural form per line, the current language requires" +msgstr "" + +msgid "Plural count" +msgstr "" + +msgid "Plural rule" +msgstr "" + +msgid "in plural form" +msgstr "i plural form" + +msgid "Not enough in stock, %s ingredient missing" +msgid_plural "Not enough in stock, %s ingredients missing" +msgstr[0] "" +msgstr[1] "" + +msgid "Consume %s of %s" +msgstr "" diff --git a/localization/ta/chore_types.po b/localization/ta/chore_types.po index 10f7ecf1..1fa096d9 100644 --- a/localization/ta/chore_types.po +++ b/localization/ta/chore_types.po @@ -1,15 +1,16 @@ +# msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Translation migration from old PHP array files\n" -"Language-Team: http://www.transifex.com/grocy/grocy/language/ta\n" +"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n" +"PO-Revision-Date: 2019-05-01 17:42+0000\n" +"Language-Team: Tamil (https://www.transifex.com/grocy/teams/93189/ta/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n" -"PO-Revision-Date: 2019-05-01T17:59:17+00:00\n" "Language: ta\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Domain: grocy/chore_types\n" msgid "manually" diff --git a/localization/ta/component_translations.po b/localization/ta/component_translations.po index 3170309d..3838faa2 100644 --- a/localization/ta/component_translations.po +++ b/localization/ta/component_translations.po @@ -1,15 +1,16 @@ +# msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Translation migration from old PHP array files\n" -"Language-Team: http://www.transifex.com/grocy/grocy/language/ta\n" +"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n" +"PO-Revision-Date: 2019-05-01 17:42+0000\n" +"Language-Team: Tamil (https://www.transifex.com/grocy/teams/93189/ta/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n" -"PO-Revision-Date: 2019-05-01T17:59:17+00:00\n" "Language: ta\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Domain: grocy/component_translations\n" msgid "timeago_locale" diff --git a/localization/ta/demo_data.po b/localization/ta/demo_data.po index 13b678be..63b5b48e 100644 --- a/localization/ta/demo_data.po +++ b/localization/ta/demo_data.po @@ -1,15 +1,16 @@ +# msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Translation migration from old PHP array files\n" -"Language-Team: http://www.transifex.com/grocy/grocy/language/ta\n" +"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n" +"PO-Revision-Date: 2019-05-01 17:42+0000\n" +"Language-Team: Tamil (https://www.transifex.com/grocy/teams/93189/ta/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n" -"PO-Revision-Date: 2019-05-01T17:59:17+00:00\n" "Language: ta\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Domain: grocy/demo_data\n" msgid "Cookies" @@ -31,40 +32,34 @@ msgid "Fridge" msgstr "" msgid "Piece" -msgstr "" - -msgid "Pieces" -msgstr "" +msgid_plural "Pieces" +msgstr[0] "" +msgstr[1] "" msgid "Pack" -msgstr "" - -msgid "Packs" -msgstr "" +msgid_plural "Packs" +msgstr[0] "" +msgstr[1] "" msgid "Glass" -msgstr "" - -msgid "Glasses" -msgstr "" +msgid_plural "Glasses" +msgstr[0] "" +msgstr[1] "" msgid "Tin" -msgstr "" - -msgid "Tins" -msgstr "" +msgid_plural "Tins" +msgstr[0] "" +msgstr[1] "" msgid "Can" -msgstr "" - -msgid "Cans" -msgstr "" +msgid_plural "Cans" +msgstr[0] "" +msgstr[1] "" msgid "Bunch" -msgstr "" - -msgid "Bunches" -msgstr "" +msgid_plural "Bunches" +msgstr[0] "" +msgstr[1] "" msgid "Gummy bears" msgstr "" @@ -172,10 +167,9 @@ msgid "Demo User" msgstr "" msgid "Gram" -msgstr "" - -msgid "Grams" -msgstr "" +msgid_plural "Grams" +msgstr[0] "" +msgstr[1] "" msgid "Flour" msgstr "" diff --git a/localization/ta/stock_transaction_types.po b/localization/ta/stock_transaction_types.po index 38fb3635..33647a56 100644 --- a/localization/ta/stock_transaction_types.po +++ b/localization/ta/stock_transaction_types.po @@ -1,15 +1,16 @@ +# msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Translation migration from old PHP array files\n" -"Language-Team: http://www.transifex.com/grocy/grocy/language/ta\n" +"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n" +"PO-Revision-Date: 2019-05-01 17:42+0000\n" +"Language-Team: Tamil (https://www.transifex.com/grocy/teams/93189/ta/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n" -"PO-Revision-Date: 2019-05-01T17:59:17+00:00\n" "Language: ta\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Domain: grocy/stock_transaction_types\n" msgid "purchase" diff --git a/localization/ta/strings.po b/localization/ta/strings.po index a45e4ed8..fa26497c 100644 --- a/localization/ta/strings.po +++ b/localization/ta/strings.po @@ -1,32 +1,49 @@ +# msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Translation migration from old PHP array files\n" -"Language-Team: http://www.transifex.com/grocy/grocy/language/ta\n" +"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n" +"PO-Revision-Date: 2019-05-01 17:42+0000\n" +"Language-Team: Tamil (https://www.transifex.com/grocy/teams/93189/ta/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2019-05-01T17:59:18+00:00\n" -"PO-Revision-Date: 2019-05-01T17:59:18+00:00\n" "Language: ta\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Domain: grocy/strings\n" msgid "Stock overview" msgstr "" -msgid "%s products expiring within the next %s days" -msgstr "" +msgid "%s product expires" +msgid_plural "%s products expiring" +msgstr[0] "" +msgstr[1] "" -msgid "%s products are already expired" -msgstr "" +msgid "within the next day" +msgid_plural "within the next %s days" +msgstr[0] "" +msgstr[1] "" -msgid "%s products are below defined min. stock amount" -msgstr "" +msgid "%s product is already expired" +msgid_plural "%s products are already expired" +msgstr[0] "" +msgstr[1] "" + +msgid "%s product is below defined min. stock amount" +msgid_plural "%s products are below defined min. stock amount" +msgstr[0] "" +msgstr[1] "" msgid "Product" msgstr "" +msgid "%s Product" +msgid_plural "%s Products" +msgstr[0] "" +msgstr[1] "" + msgid "Amount" msgstr "" @@ -60,9 +77,6 @@ msgstr "" msgid "Battery tracking" msgstr "" -msgid "Products" -msgstr "" - msgid "Locations" msgstr "" @@ -120,7 +134,8 @@ msgstr "" msgid "Barcode lookup is disabled" msgstr "" -msgid "will be added to the list of barcodes for the selected product on submit" +msgid "" +"will be added to the list of barcodes for the selected product on submit" msgstr "" msgid "New amount" @@ -249,7 +264,9 @@ msgstr "" msgid "Add products that are below defined min. stock amount" msgstr "" -msgid "For purchases this amount of days will be added to today for the best before date suggestion" +msgid "" +"For purchases this amount of days will be added to today for the best before" +" date suggestion" msgstr "" msgid "This means 1 %s purchased will be converted into %s %s in stock" @@ -336,7 +353,9 @@ msgstr "" msgid "This means %s will be removed from stock" msgstr "" -msgid "This means it is estimated that a new execution of this chore is tracked %s days after the last was tracked" +msgid "" +"This means it is estimated that a new execution of this chore is tracked %s " +"days after the last was tracked" msgstr "" msgid "Removed %s %s of %s from stock" @@ -348,18 +367,6 @@ msgstr "" msgid "Close" msgstr "" -msgid "%s batteries are due to be charged within the next %s days" -msgstr "" - -msgid "%s batteries are overdue to be charged" -msgstr "" - -msgid "%s chores are due to be done within the next %s days" -msgstr "" - -msgid "%s chores are overdue to be done" -msgstr "" - msgid "Released on" msgstr "" @@ -474,14 +481,15 @@ msgstr "" msgid "Put missing products on shopping list" msgstr "" -msgid "Not enough in stock, %s ingredients missing" -msgstr "" - msgid "Enough in stock" msgstr "" -msgid "Not enough in stock, %s ingredients missing but already on the shopping list" -msgstr "" +msgid "" +"Not enough in stock, %s ingredient missing but already on the shopping list" +msgid_plural "" +"Not enough in stock, %s ingredients missing but already on the shopping list" +msgstr[0] "" +msgstr[1] "" msgid "Expand to fullscreen" msgstr "" @@ -504,7 +512,9 @@ msgstr "" msgid "Put missing amount on shopping list" msgstr "" -msgid "Are you sure to put all missing ingredients for recipe \"%s\" on the shopping list?" +msgid "" +"Are you sure to put all missing ingredients for recipe \"%s\" on the " +"shopping list?" msgstr "" msgid "Added for recipe %s" @@ -585,42 +595,37 @@ msgstr "" msgid "The price cannot be lower than %s" msgstr "" -msgid "%s product expires within the next %s days" -msgstr "" - -msgid "%s product is already expired" -msgstr "" - -msgid "%s product is below defined min. stock amount" -msgstr "" - msgid "Unit" msgstr "" -msgid "Units" -msgstr "" +msgid "%s Unit" +msgid_plural "%s Units" +msgstr[0] "" +msgstr[1] "" -msgid "%s chore is due to be done within the next %s days" -msgstr "" +msgid "%s chore is due to be done" +msgid_plural "%s chores are due to be done" +msgstr[0] "" +msgstr[1] "" msgid "%s chore is overdue to be done" -msgstr "" +msgid_plural "%s chores are overdue to be done" +msgstr[0] "" +msgstr[1] "" -msgid "%s battery is due to be charged within the next %s days" -msgstr "" +msgid "%s battery is due to be charged" +msgid_plural "%s batteries are due to be charged" +msgstr[0] "" +msgstr[1] "" msgid "%s battery is overdue to be charged" -msgstr "" - -msgid "%s unit was automatically added and will apply in addition to the amount entered here" -msgstr "" +msgid_plural "%s batteries are overdue to be charged" +msgstr[0] "" +msgstr[1] "" msgid "in singular form" msgstr "" -msgid "in plural form" -msgstr "" - msgid "Never expires" msgstr "" @@ -633,10 +638,14 @@ msgstr "" msgid "Quantity unit" msgstr "" -msgid "Only check if a single unit is in stock (a different quantity can then be used above)" +msgid "" +"Only check if a single unit is in stock (a different quantity can then be " +"used above)" msgstr "" -msgid "Are you sure to consume all ingredients needed by recipe \"%s\" (ingredients marked with \"check only if a single unit is in stock\" will be ignored)?" +msgid "" +"Are you sure to consume all ingredients needed by recipe \"%s\" (ingredients" +" marked with \"check only if a single unit is in stock\" will be ignored)?" msgstr "" msgid "Removed all ingredients of recipe \"%s\" from stock" @@ -693,17 +702,15 @@ msgstr "" msgid "Are you sure to delete task \"%s\"?" msgstr "" -msgid "%s task is due to be done within the next %s days" -msgstr "" - -msgid "%s tasks are due to be done within the next %s days" -msgstr "" +msgid "%s task is due to be done" +msgid_plural "%s tasks are due to be done" +msgstr[0] "" +msgstr[1] "" msgid "%s task is overdue to be done" -msgstr "" - -msgid "%s tasks are overdue to be done" -msgstr "" +msgid_plural "%s tasks are overdue to be done" +msgstr[0] "" +msgstr[1] "" msgid "Edit task category" msgstr "" @@ -798,7 +805,9 @@ msgstr "" msgid "Image of product %s" msgstr "" -msgid "This product cannot be deleted because it is in stock, please remove the stock amount first." +msgid "" +"This product cannot be deleted because it is in stock, please remove the " +"stock amount first." msgstr "" msgid "Delete not possible" @@ -822,13 +831,16 @@ msgstr "" msgid "Create equipment" msgstr "" -msgid "If you don't select a file, the current instruction manual will not be altered" +msgid "" +"If you don't select a file, the current instruction manual will not be " +"altered" msgstr "" msgid "No instruction manual available" msgstr "" -msgid "The current instruction manual will be deleted when you save the equipment" +msgid "" +"The current instruction manual will be deleted when you save the equipment" msgstr "" msgid "No picture available" @@ -921,13 +933,17 @@ msgstr "" msgid "Use a specific stock item" msgstr "" -msgid "The first item in this list would be picked by the default rule which is \"First expiring first, then first in first out\"" +msgid "" +"The first item in this list would be picked by the default rule which is " +"\"First expiring first, then first in first out\"" msgstr "" -msgid "Mark %s %s of %s as open" +msgid "Mark %s of %s as open" msgstr "" -msgid "When a product was marked as opened, the best before date will be replaced by today + this amount of days (a value of 0 disables this)" +msgid "" +"When a product was marked as opened, the best before date will be replaced " +"by today + this amount of days (a value of 0 disables this)" msgstr "" msgid "Default best before days after opened" @@ -972,7 +988,9 @@ msgstr "" msgid "Shopping list to stock workflow" msgstr "" -msgid "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" +msgid "" +"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" msgstr "" msgid "Skip" @@ -993,7 +1011,11 @@ msgstr "" msgid "Do not check against the shopping list when adding missing items to it" msgstr "" -msgid "By default the amount to be added to the shopping list is \"needed amount - stock amount - shopping list amount\" - when this is enabled, it is only checked against the stock amount, not against what is already on the shopping list" +msgid "" +"By default the amount to be added to the shopping list is \"needed amount - " +"stock amount - shopping list amount\" - when this is enabled, it is only " +"checked against the stock amount, not against what is already on the " +"shopping list" msgstr "" msgid "Picture" @@ -1014,7 +1036,9 @@ msgstr "" msgid "Share/Integrate calendar (iCal)" msgstr "" -msgid "Use the following (public) URL to share or integrate the calendar in iCal format" +msgid "" +"Use the following (public) URL to share or integrate the calendar in iCal " +"format" msgstr "" msgid "Allow partial units in stock" @@ -1023,13 +1047,18 @@ msgstr "" msgid "Enable tare weight handling" msgstr "" -msgid "This is useful e.g. for flour in jars - on purchase/consume/inventory you always weigh the whole jar, the amount to be posted is then automatically calculated based on what is in stock and the tare weight defined below" +msgid "" +"This is useful e.g. for flour in jars - on purchase/consume/inventory you " +"always weigh the whole jar, the amount to be posted is then automatically " +"calculated based on what is in stock and the tare weight defined below" msgstr "" msgid "Tare weight" msgstr "" -msgid "Tare weight handling enabled - please weigh the whole container, the amount to be posted will be automatically calculcated" +msgid "" +"Tare weight handling enabled - please weigh the whole container, the amount " +"to be posted will be automatically calculcated" msgstr "" msgid "You have to select a location" @@ -1080,7 +1109,9 @@ msgstr "" msgid "Type a new product name or barcode and hit TAB to start a workflow" msgstr "" -msgid "This will be used as the default setting when adding this product as a recipe ingredient" +msgid "" +"This will be used as the default setting when adding this product as a " +"recipe ingredient" msgstr "" msgid "Add item" @@ -1187,3 +1218,26 @@ msgstr "" msgid "Edit userfield" msgstr "" + +msgid "Plural forms" +msgstr "" + +msgid "One plural form per line, the current language requires" +msgstr "" + +msgid "Plural count" +msgstr "" + +msgid "Plural rule" +msgstr "" + +msgid "in plural form" +msgstr "" + +msgid "Not enough in stock, %s ingredient missing" +msgid_plural "Not enough in stock, %s ingredients missing" +msgstr[0] "" +msgstr[1] "" + +msgid "Consume %s of %s" +msgstr "" diff --git a/localization/ta/userfield_types.po b/localization/ta/userfield_types.po index 9b5c6e94..3bfe292f 100644 --- a/localization/ta/userfield_types.po +++ b/localization/ta/userfield_types.po @@ -1,15 +1,16 @@ +# msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Translation migration from old PHP array files\n" -"Language-Team: http://www.transifex.com/grocy/grocy/language/ta\n" +"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n" +"PO-Revision-Date: 2019-05-01 17:43+0000\n" +"Language-Team: Tamil (https://www.transifex.com/grocy/teams/93189/ta/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2019-05-01T17:59:18+00:00\n" -"PO-Revision-Date: 2019-05-01T17:59:18+00:00\n" "Language: ta\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Domain: grocy/userfield_types\n" msgid "text-single-line" diff --git a/localization/tr/chore_types.po b/localization/tr/chore_types.po index 08d7d362..60d94f10 100644 --- a/localization/tr/chore_types.po +++ b/localization/tr/chore_types.po @@ -1,15 +1,19 @@ +# Translators: +# Bernd Bestel , 2019 +# msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Translation migration from old PHP array files\n" -"Language-Team: http://www.transifex.com/grocy/grocy/language/tr\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 , 2019\n" +"Language-Team: Turkish (https://www.transifex.com/grocy/teams/93189/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2019-05-01T17:59:18+00:00\n" -"PO-Revision-Date: 2019-05-01T17:59:18+00:00\n" "Language: tr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Domain: grocy/chore_types\n" msgid "manually" diff --git a/localization/tr/demo_data.po b/localization/tr/demo_data.po index 0e713b7a..a340bcb7 100644 --- a/localization/tr/demo_data.po +++ b/localization/tr/demo_data.po @@ -35,40 +35,34 @@ msgid "Fridge" msgstr "Buzdolabı" msgid "Piece" -msgstr "Tane" - -msgid "Pieces" -msgstr "Tane" +msgid_plural "Pieces" +msgstr[0] "" +msgstr[1] "" msgid "Pack" -msgstr "Paket" - -msgid "Packs" -msgstr "Paket" +msgid_plural "Packs" +msgstr[0] "" +msgstr[1] "" msgid "Glass" -msgstr "Bardak" - -msgid "Glasses" -msgstr "Bardak" +msgid_plural "Glasses" +msgstr[0] "" +msgstr[1] "" msgid "Tin" -msgstr "Teneke" - -msgid "Tins" -msgstr "Teneke" +msgid_plural "Tins" +msgstr[0] "" +msgstr[1] "" msgid "Can" -msgstr "Konserve" - -msgid "Cans" -msgstr "Konserve" +msgid_plural "Cans" +msgstr[0] "" +msgstr[1] "" msgid "Bunch" -msgstr "Demet" - -msgid "Bunches" -msgstr "Demet" +msgid_plural "Bunches" +msgstr[0] "" +msgstr[1] "" msgid "Gummy bears" msgstr "Jelibon ayı" @@ -176,10 +170,9 @@ msgid "Demo User" msgstr "Demo Kullanıcısı" msgid "Gram" -msgstr "Gram" - -msgid "Grams" -msgstr "Gram" +msgid_plural "Grams" +msgstr[0] "" +msgstr[1] "" msgid "Flour" msgstr "Un" diff --git a/localization/tr/strings.po b/localization/tr/strings.po index df1b1adc..14be1af7 100644 --- a/localization/tr/strings.po +++ b/localization/tr/strings.po @@ -20,18 +20,34 @@ msgstr "" msgid "Stock overview" msgstr "Stoklara genel bakış" -msgid "%s products expiring within the next %s days" -msgstr "%s ürünün son kullanma tarihi %s gün içerisinde dolacak" +msgid "%s product expires" +msgid_plural "%s products expiring" +msgstr[0] "" +msgstr[1] "" -msgid "%s products are already expired" -msgstr "%s ürünün son kullanma tarihi geçti" +msgid "within the next day" +msgid_plural "within the next %s days" +msgstr[0] "" +msgstr[1] "" -msgid "%s products are below defined min. stock amount" -msgstr "%s ürün belirlenen minimum stok miktarının altında" +msgid "%s product is already expired" +msgid_plural "%s products are already expired" +msgstr[0] "" +msgstr[1] "" + +msgid "%s product is below defined min. stock amount" +msgid_plural "%s products are below defined min. stock amount" +msgstr[0] "" +msgstr[1] "" msgid "Product" msgstr "Ürün" +msgid "%s Product" +msgid_plural "%s Products" +msgstr[0] "" +msgstr[1] "" + msgid "Amount" msgstr "Miktar" @@ -65,9 +81,6 @@ msgstr "Ev işleri takibi" msgid "Battery tracking" msgstr "Pil takibi" -msgid "Products" -msgstr "Ürünler" - msgid "Locations" msgstr "Lokasyonlar" @@ -363,18 +376,6 @@ msgstr "grocy hakkında" msgid "Close" msgstr "Kapat" -msgid "%s batteries are due to be charged within the next %s days" -msgstr "%s pilin önümüzdeki %s gün içerisinde şarj olması bekleniyor" - -msgid "%s batteries are overdue to be charged" -msgstr "%s pilin şarj etme zamanı geçti" - -msgid "%s chores are due to be done within the next %s days" -msgstr "%s ev işi önümüzdeki %s gün içerisinde yapılacak" - -msgid "%s chores are overdue to be done" -msgstr "%s ev işinin yapılma zamanı geçti" - msgid "Released on" msgstr "Yayınlanma tarihi" @@ -489,15 +490,15 @@ msgstr "Gereklilikler sağlandı" msgid "Put missing products on shopping list" msgstr "Eksik malzemeleri alışveriş listesine ekle" -msgid "Not enough in stock, %s ingredients missing" -msgstr "Stokta yeterince %s malzemesi yok" - msgid "Enough in stock" msgstr "Stokta yeteri kadar var" msgid "" +"Not enough in stock, %s ingredient missing but already on the shopping list" +msgid_plural "" "Not enough in stock, %s ingredients missing but already on the shopping list" -msgstr "Stokta %s yok ancak alışveriş listesine eklenmiş" +msgstr[0] "" +msgstr[1] "" msgid "Expand to fullscreen" msgstr "Tam ekran yap" @@ -605,46 +606,37 @@ msgstr "%s için her miktar birimini satın al" msgid "The price cannot be lower than %s" msgstr "Fiyat %s'den az olamaz" -msgid "%s product expires within the next %s days" -msgstr "%s ürünün son kullanma tarihi %s gün içerisinde dolacak" - -msgid "%s product is already expired" -msgstr "%s ürünün son kullanma tarihi geçti" - -msgid "%s product is below defined min. stock amount" -msgstr "%s ürün belirlenen min. stok miktarının altında" - msgid "Unit" msgstr "Birim" -msgid "Units" -msgstr "Birimler" +msgid "%s Unit" +msgid_plural "%s Units" +msgstr[0] "" +msgstr[1] "" -msgid "%s chore is due to be done within the next %s days" -msgstr "%s ev işi önümüzdeki %s gün içerisinde yapılacak" +msgid "%s chore is due to be done" +msgid_plural "%s chores are due to be done" +msgstr[0] "" +msgstr[1] "" msgid "%s chore is overdue to be done" -msgstr "%s ev işinin yapılma zamanı geçti" +msgid_plural "%s chores are overdue to be done" +msgstr[0] "" +msgstr[1] "" -msgid "%s battery is due to be charged within the next %s days" -msgstr "%s pilin önümüzdeki %s gün içerisinde şarj olması bekleniyor" +msgid "%s battery is due to be charged" +msgid_plural "%s batteries are due to be charged" +msgstr[0] "" +msgstr[1] "" msgid "%s battery is overdue to be charged" -msgstr "%s pilin şarj etme zamanı geçti" - -msgid "" -"%s unit was automatically added and will apply in addition to the amount " -"entered here" -msgstr "" -"%s birim otomatik olarak eklendi ve buraya girilen miktar haricinde " -"uygulanacak" +msgid_plural "%s batteries are overdue to be charged" +msgstr[0] "" +msgstr[1] "" msgid "in singular form" msgstr "tekil formda" -msgid "in plural form" -msgstr "çoğul formda" - msgid "Never expires" msgstr "Son kullanma tarihi asla dolmuyor" @@ -725,17 +717,15 @@ msgstr "Görevi düzenle" msgid "Are you sure to delete task \"%s\"?" msgstr "Görev \"%s\"'i silmek istediğine emin misin?" -msgid "%s task is due to be done within the next %s days" -msgstr "%s görev önümüzdeki %s gün içerisinde yapılacak" - -msgid "%s tasks are due to be done within the next %s days" -msgstr "%s görev önümüzdeki %s gün içerisinde yapılacak" +msgid "%s task is due to be done" +msgid_plural "%s tasks are due to be done" +msgstr[0] "" +msgstr[1] "" msgid "%s task is overdue to be done" -msgstr "%s görevin yapılma zamanı geçti" - -msgid "%s tasks are overdue to be done" -msgstr "%s görevin yapılma zamanı geçti" +msgid_plural "%s tasks are overdue to be done" +msgstr[0] "" +msgstr[1] "" msgid "Edit task category" msgstr "Görev kategorisini düzenle" @@ -969,8 +959,8 @@ msgstr "" "Bu listedeki ilk madde ön tanımlı olarak \"Süresi ilk dolan ilk, ondan sonra" " ilk giren ilk çıkar\" mantığıyla seçilecektir" -msgid "Mark %s %s of %s as open" -msgstr "%s'ün %s/%s'sini açık olarak işaretle" +msgid "Mark %s of %s as open" +msgstr "" msgid "" "When a product was marked as opened, the best before date will be replaced " @@ -1270,3 +1260,26 @@ msgstr "" msgid "Edit userfield" msgstr "" + +msgid "Plural forms" +msgstr "" + +msgid "One plural form per line, the current language requires" +msgstr "" + +msgid "Plural count" +msgstr "" + +msgid "Plural rule" +msgstr "" + +msgid "in plural form" +msgstr "çoğul formda" + +msgid "Not enough in stock, %s ingredient missing" +msgid_plural "Not enough in stock, %s ingredients missing" +msgstr[0] "" +msgstr[1] "" + +msgid "Consume %s of %s" +msgstr "" diff --git a/localization/tr/userfield_types.po b/localization/tr/userfield_types.po index d8ac52b1..56cddaae 100644 --- a/localization/tr/userfield_types.po +++ b/localization/tr/userfield_types.po @@ -1,15 +1,16 @@ +# msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Translation migration from old PHP array files\n" -"Language-Team: http://www.transifex.com/grocy/grocy/language/tr\n" +"POT-Creation-Date: 2019-05-01T17:59:17+00:00\n" +"PO-Revision-Date: 2019-05-01 17:43+0000\n" +"Language-Team: Turkish (https://www.transifex.com/grocy/teams/93189/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2019-05-01T17:59:18+00:00\n" -"PO-Revision-Date: 2019-05-01T17:59:18+00:00\n" "Language: tr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Domain: grocy/userfield_types\n" msgid "text-single-line" diff --git a/migrations/0031.php b/migrations/0031.php index 5920e2e9..043c0002 100644 --- a/migrations/0031.php +++ b/migrations/0031.php @@ -11,13 +11,13 @@ if ($db->quantity_units()->count() === 0) { // Create 2 default quantity units $newRow = $db->quantity_units()->createRow(array( - 'name' => $localizationService->Localize('Piece'), - 'name_plural' => $localizationService->Localize('Pieces') + 'name' => $localizationService->__n(1, 'Piece', 'Pieces'), + 'name_plural' => $localizationService->__n(2, 'Piece', 'Pieces') )); $newRow->save(); $newRow = $db->quantity_units()->createRow(array( - 'name' => $localizationService->Localize('Pack'), - 'name_plural' => $localizationService->Localize('Packs') + 'name' => $localizationService->__n(1, 'Pack', 'Packs'), + 'name_plural' => $localizationService->__n(2, 'Pack', 'Packs') )); $newRow->save(); } @@ -26,7 +26,7 @@ if ($db->locations()->count() === 0) { // Create a default location $newRow = $db->locations()->createRow(array( - 'name' => $localizationService->Localize('Fridge') + 'name' => $localizationService->__t('Fridge') )); $newRow->save(); } diff --git a/migrations/0063.php b/migrations/0063.php index e0796524..1a9bb94b 100644 --- a/migrations/0063.php +++ b/migrations/0063.php @@ -9,5 +9,5 @@ $db = $this->DatabaseService->GetDbConnection(); $defaultShoppingList = $this->Database->shopping_lists()->where('id = 1')->fetch(); $defaultShoppingList->update(array( - 'name' => $localizationService->Localize('Shopping list') + 'name' => $localizationService->__t('Shopping list') )); diff --git a/migrations/0067.sql b/migrations/0067.sql new file mode 100644 index 00000000..a2c9d87b --- /dev/null +++ b/migrations/0067.sql @@ -0,0 +1,2 @@ +ALTER TABLE quantity_units +ADD plural_forms TEXT; diff --git a/public/js/grocy.js b/public/js/grocy.js index 572b42e4..6edad294 100644 --- a/public/js/grocy.js +++ b/public/js/grocy.js @@ -1,12 +1,23 @@ -//TODO: Missing translations should be automatically added to the source POT file -Grocy.Translator = new Translator(Grocy.JsGettextTranslatorStrings); +Grocy.Translator = new Translator(Grocy.GettextPo); __t = function(text, ...placeholderValues) { + if (Grocy.Mode === "dev") + { + var text2 = text; + Grocy.Api.Post('system/log-missing-localization', { "text": text2 }); + } + return Grocy.Translator.__(text, ...placeholderValues) } __n = function(number, singularForm, pluralForm) { - return Grocy.Translator.n__(singularForm, pluralForm, number) + if (Grocy.Mode === "dev") + { + var singularForm2 = singularForm; + Grocy.Api.Post('system/log-missing-localization', { "text": singularForm2 }); + } + + return Grocy.Translator.n__(singularForm, pluralForm, number, number) } U = function(relativePath) diff --git a/public/viewjs/batteriesoverview.js b/public/viewjs/batteriesoverview.js index fd799c5f..fd3175ce 100644 --- a/public/viewjs/batteriesoverview.js +++ b/public/viewjs/batteriesoverview.js @@ -154,8 +154,8 @@ function RefreshStatistics() } }); - $("#info-due-batteries").text(__n(dueCount, __t('%s battery is due to be charged within the next %s days', dueCount, nextXDays), __t('%s batteries are due to be charged within the next %s days', dueCount, nextXDays))); - $("#info-overdue-batteries").text(__n(overdueCount, __t('%s battery is overdue to be charged', overdueCount), __t('%s batteries are overdue to be charged', overdueCount))); + $("#info-due-batteries").text(__n(dueCount, '%s battery is due to be charged', '%s batteries are due to be charged') + ' ' + __n(nextXDays, 'within the next day', 'within the next %s days')); + $("#info-overdue-batteries").text(__n(overdueCount, '%s battery is overdue to be charged', '%s batteries are overdue to be charged')); }, function(xhr) { diff --git a/public/viewjs/choresoverview.js b/public/viewjs/choresoverview.js index 2bf344fa..931adade 100644 --- a/public/viewjs/choresoverview.js +++ b/public/viewjs/choresoverview.js @@ -154,8 +154,8 @@ function RefreshStatistics() } }); - $("#info-due-chores").text(__n(dueCount, __t('%s chore is due to be done within the next %s days', dueCount, nextXDays), __t('%s chores are due to be done within the next %s days', dueCount, nextXDays))); - $("#info-overdue-chores").text(__n(overdueCount, __t('%s chore is overdue to be done', overdueCount), __t('%s chores are overdue to be done', overdueCount))); + $("#info-due-chores").text(__n(dueCount, '%s chore is due to be done', '%s chores are due to be done') + ' ' + __n(nextXDays, 'within the next day', 'within the next %s days')); + $("#info-overdue-chores").text(__n(overdueCount, '%s chore is overdue to be done', '%s chores are overdue to be done')); }, function(xhr) { diff --git a/public/viewjs/stockoverview.js b/public/viewjs/stockoverview.js index 99e66bb5..1c2e58d2 100644 --- a/public/viewjs/stockoverview.js +++ b/public/viewjs/stockoverview.js @@ -265,7 +265,7 @@ function RefreshStatistics() result.forEach(element => { amountSum += parseInt(element.amount); }); - $("#info-current-stock").text(result.length + " " + __n(result.length, __t('Product'), __t('Products')) + ", " + amountSum.toString() + " " + __n(amountSum, __t('Unit'), __t('Units'))); + $("#info-current-stock").text(__n(result.length, '%s Product', '%s Products') + ", " + __n(amountSum, '%s Unit', '%s Units')); }, function(xhr) { @@ -277,9 +277,9 @@ function RefreshStatistics() Grocy.Api.Get('stock/volatile?expiring_days=' + nextXDays, function(result) { - $("#info-expiring-products").text(__n(result.expiring_products.length, __t('%s product expires within the next %s days', result.expiring_products.length, nextXDays), __t('%s products expiring within the next %s days', result.expiring_products.length, nextXDays))); - $("#info-expired-products").text(__n(result.expired_products.length, __t('%s product is already expired', result.expired_products.length), __t('%s products are already expired', result.expired_products.length))); - $("#info-missing-products").text(__n(result.missing_products.length, __t('%s product is below defined min. stock amount', result.missing_products.length), __t('%s products are below defined min. stock amount', result.missing_products.length))); + $("#info-expiring-products").text(__n(result.expiring_products.length, '%s product expires', '%s products expiring') + ' ' + __n(nextXDays, 'within the next day', 'within the next %s days')); + $("#info-expired-products").text(__n(result.expired_products.length, '%s product is already expired', '%s products are already expired')); + $("#info-missing-products").text(__n(result.missing_products.length, '%s product is below defined min. stock amount', '%s products are below defined min. stock amount')); }, function(xhr) { diff --git a/public/viewjs/tasks.js b/public/viewjs/tasks.js index bf7b019a..5306fd8e 100644 --- a/public/viewjs/tasks.js +++ b/public/viewjs/tasks.js @@ -181,8 +181,8 @@ function RefreshStatistics() } }); - $("#info-due-tasks").text(__n(dueCount, __t('%s task is due to be done within the next %s days', dueCount, nextXDays), __t('%s tasks are due to be done within the next %s days', dueCount, nextXDays))); - $("#info-overdue-tasks").text(__n(overdueCount, __t('%s task is overdue to be done', overdueCount), __t('%s tasks are overdue to be done', overdueCount))); + $("#info-due-tasks").text(__n(dueCount, '%s task is due to be done', '%s tasks are due to be done') + ' ' + __n(nextXDays, 'within the next day', 'within the next %s days')); + $("#info-overdue-tasks").text(__n(overdueCount, '%s task is overdue to be done', '%s tasks are overdue to be done')); }, function(xhr) { diff --git a/services/CalendarService.php b/services/CalendarService.php index 9b3deed3..1ffd47fd 100644 --- a/services/CalendarService.php +++ b/services/CalendarService.php @@ -26,7 +26,7 @@ class CalendarService extends BaseService public function GetEvents() { $products = $this->Database->products(); - $titlePrefix = $this->LocalizationService-Translator->__t('Product expires') . ': '; + $titlePrefix = $this->LocalizationService->__t('Product expires') . ': '; $stockEvents = array(); foreach($this->StockService->GetCurrentStock() as $currentStockEntry) { @@ -40,7 +40,7 @@ class CalendarService extends BaseService } } - $titlePrefix = $this->LocalizationService-Translator->__t('Task due') . ': '; + $titlePrefix = $this->LocalizationService->__t('Task due') . ': '; $taskEvents = array(); foreach($this->TasksService->GetCurrent() as $currentTaskEntry) { @@ -52,7 +52,7 @@ class CalendarService extends BaseService } $chores = $this->Database->chores(); - $titlePrefix = $this->LocalizationService-Translator->__t('Chore due') . ': '; + $titlePrefix = $this->LocalizationService->__t('Chore due') . ': '; $choreEvents = array(); foreach($this->ChoresService->GetCurrent() as $currentChoreEntry) { @@ -64,7 +64,7 @@ class CalendarService extends BaseService } $batteries = $this->Database->batteries(); - $titlePrefix = $this->LocalizationService-Translator->__t('Battery charge cycle due') . ': '; + $titlePrefix = $this->LocalizationService->__t('Battery charge cycle due') . ': '; $batteryEvents = array(); foreach($this->BatteriesService->GetCurrent() as $currentBatteryEntry) { diff --git a/services/DemoDataGeneratorService.php b/services/DemoDataGeneratorService.php index 9a885f81..9e76b15a 100644 --- a/services/DemoDataGeneratorService.php +++ b/services/DemoDataGeneratorService.php @@ -6,10 +6,16 @@ use \Grocy\Services\LocalizationService; class DemoDataGeneratorService extends BaseService { + public function __construct() + { + parent::__construct(); + $this->LocalizationService = new LocalizationService(GROCY_CULTURE); + } + + protected $LocalizationService; + public function PopulateDemoData() { - $localizationService = new LocalizationService(GROCY_CULTURE); - $rowCount = $this->DatabaseService->ExecuteDbQuery('SELECT COUNT(*) FROM migrations WHERE migration = -1')->fetchColumn(); if (intval($rowCount) === 0) { @@ -17,74 +23,74 @@ class DemoDataGeneratorService extends BaseService $loremIpsumWithHtmlFormattings = "

Lorem ipsum

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.

  • At vero eos et accusam et justo duo dolores et ea rebum.
  • Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.

Lorem ipsum

Lorem ipsum dolor sit amet, consetetur \r\nsadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et \r\ndolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et\r\n justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea \r\ntakimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit \r\namet, consetetur sadipscing elitr,\r\n sed diam nonumy eirmod tempor invidunt ut labore et dolore magna \r\naliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo \r\ndolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus \r\nest Lorem ipsum dolor sit amet.

"; $sql = " - UPDATE users SET username = '{$localizationService->LocalizeForSqlString('Demo User')}' WHERE id = 1; - INSERT INTO users (username, password) VALUES ('{$localizationService->LocalizeForSqlString('Demo User')} 2', 'x'); - INSERT INTO users (username, password) VALUES ('{$localizationService->LocalizeForSqlString('Demo User')} 3', 'x'); - INSERT INTO users (username, password) VALUES ('{$localizationService->LocalizeForSqlString('Demo User')} 4', 'x'); + UPDATE users SET username = '{$this->__t_sql('Demo User')}' WHERE id = 1; + INSERT INTO users (username, password) VALUES ('{$this->__t_sql('Demo User')} 2', 'x'); + INSERT INTO users (username, password) VALUES ('{$this->__t_sql('Demo User')} 3', 'x'); + INSERT INTO users (username, password) VALUES ('{$this->__t_sql('Demo User')} 4', 'x'); - INSERT INTO locations (name) VALUES ('{$localizationService->LocalizeForSqlString('Pantry')}'); --3 - INSERT INTO locations (name) VALUES ('{$localizationService->LocalizeForSqlString('Candy cupboard')}'); --4 - INSERT INTO locations (name) VALUES ('{$localizationService->LocalizeForSqlString('Tinned food cupboard')}'); --5 + INSERT INTO locations (name) VALUES ('{$this->__t_sql('Pantry')}'); --3 + INSERT INTO locations (name) VALUES ('{$this->__t_sql('Candy cupboard')}'); --4 + INSERT INTO locations (name) VALUES ('{$this->__t_sql('Tinned food cupboard')}'); --5 - INSERT INTO quantity_units (name, name_plural) VALUES ('{$localizationService->LocalizeForSqlString('Glass')}', '{$localizationService->LocalizeForSqlString('Glasses')}'); --4 - INSERT INTO quantity_units (name, name_plural) VALUES ('{$localizationService->LocalizeForSqlString('Tin')}', '{$localizationService->LocalizeForSqlString('Tins')}'); --5 - INSERT INTO quantity_units (name, name_plural) VALUES ('{$localizationService->LocalizeForSqlString('Can')}', '{$localizationService->LocalizeForSqlString('Cans')}'); --6 - INSERT INTO quantity_units (name, name_plural) VALUES ('{$localizationService->LocalizeForSqlString('Bunch')}', '{$localizationService->LocalizeForSqlString('Bunches')}'); --7 - INSERT INTO quantity_units (name, name_plural) VALUES ('{$localizationService->LocalizeForSqlString('Gram')}', '{$localizationService->LocalizeForSqlString('Grams')}'); --8 - INSERT INTO quantity_units (name, name_plural) VALUES ('{$localizationService->LocalizeForSqlString('Liter')}', '{$localizationService->LocalizeForSqlString('Liters')}'); --9 - INSERT INTO quantity_units (name, name_plural) VALUES ('{$localizationService->LocalizeForSqlString('Bottle')}', '{$localizationService->LocalizeForSqlString('Bottles')}'); --10 - INSERT INTO quantity_units (name, name_plural) VALUES ('{$localizationService->LocalizeForSqlString('Milliliter')}', '{$localizationService->LocalizeForSqlString('Milliliters')}'); --11 + INSERT INTO quantity_units (name, name_plural) VALUES ('{$this->__n_sql(1, 'Glass', 'Glasses')}', '{$this->__n_sql(2, 'Glass', 'Glasses')}'); --4 + INSERT INTO quantity_units (name, name_plural) VALUES ('{$this->__n_sql(1, 'Tin', 'Tins')}', '{$this->__n_sql(2, 'Tin', 'Tins')}'); --5 + INSERT INTO quantity_units (name, name_plural) VALUES ('{$this->__n_sql(1, 'Can', 'Cans')}', '{$this->__n_sql(2, 'Can', 'Cans')}'); --6 + INSERT INTO quantity_units (name, name_plural) VALUES ('{$this->__n_sql(1, 'Bunch', 'Bunches')}', '{$this->__n_sql(2, 'Bunch', 'Bunches')}'); --7 + INSERT INTO quantity_units (name, name_plural) VALUES ('{$this->__n_sql(1, 'Gram', 'Grams')}', '{$this->__n_sql(2, 'Gram', 'Grams')}'); --8 + INSERT INTO quantity_units (name, name_plural) VALUES ('{$this->__n_sql(1, 'Liter', 'Liters')}', '{$this->__n_sql(2, 'Liter', 'Liters')}'); --9 + INSERT INTO quantity_units (name, name_plural) VALUES ('{$this->__n_sql(1, 'Bottle', 'Bottles')}', '{$this->__n_sql(2, 'Bottle', 'Bottles')}'); --10 + INSERT INTO quantity_units (name, name_plural) VALUES ('{$this->__n_sql(1, 'Milliliter', 'Milliliters')}', '{$this->__n_sql(2, 'Milliliter', 'Milliliters')}'); --11 - INSERT INTO product_groups(name) VALUES ('01 {$localizationService->LocalizeForSqlString('Sweets')}'); --1 - INSERT INTO product_groups(name) VALUES ('02 {$localizationService->LocalizeForSqlString('Bakery products')}'); --2 - INSERT INTO product_groups(name) VALUES ('03 {$localizationService->LocalizeForSqlString('Tinned food')}'); --3 - INSERT INTO product_groups(name) VALUES ('04 {$localizationService->LocalizeForSqlString('Butchery products')}'); --4 - INSERT INTO product_groups(name) VALUES ('05 {$localizationService->LocalizeForSqlString('Vegetables/Fruits')}'); --5 - INSERT INTO product_groups(name) VALUES ('06 {$localizationService->LocalizeForSqlString('Refrigerated products')}'); --6 + INSERT INTO product_groups(name) VALUES ('01 {$this->__t_sql('Sweets')}'); --1 + INSERT INTO product_groups(name) VALUES ('02 {$this->__t_sql('Bakery products')}'); --2 + INSERT INTO product_groups(name) VALUES ('03 {$this->__t_sql('Tinned food')}'); --3 + INSERT INTO product_groups(name) VALUES ('04 {$this->__t_sql('Butchery products')}'); --4 + INSERT INTO product_groups(name) VALUES ('05 {$this->__t_sql('Vegetables/Fruits')}'); --5 + INSERT INTO product_groups(name) VALUES ('06 {$this->__t_sql('Refrigerated products')}'); --6 DELETE FROM sqlite_sequence WHERE name = 'products'; --Just to keep IDs in order as mentioned here... - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, min_stock_amount, product_group_id, picture_file_name) VALUES ('{$localizationService->LocalizeForSqlString('Cookies')}', 4, 3, 3, 1, 8, 1, 'cookies.jpg'); --1 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, min_stock_amount, product_group_id) VALUES ('{$localizationService->LocalizeForSqlString('Chocolate')}', 4, 3, 3, 1, 8, 1); --2 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, min_stock_amount, product_group_id, picture_file_name) VALUES ('{$localizationService->LocalizeForSqlString('Gummy bears')}', 4, 3, 3, 1, 8, 1, 'gummybears.jpg'); --3 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, min_stock_amount, product_group_id) VALUES ('{$localizationService->LocalizeForSqlString('Crisps')}', 4, 3, 3, 1, 10, 1); --4 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$localizationService->LocalizeForSqlString('Eggs')}', 2, 3, 2, 10, 5); --5 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$localizationService->LocalizeForSqlString('Noodles')}', 3, 3, 3, 1, 6); --6 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$localizationService->LocalizeForSqlString('Pickles')}', 5, 4, 4, 1, 3); --7 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$localizationService->LocalizeForSqlString('Gulash soup')}', 5, 5, 5, 1, 3); --8 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$localizationService->LocalizeForSqlString('Yogurt')}', 2, 6, 6, 1, 6); --9 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$localizationService->LocalizeForSqlString('Cheese')}', 2, 3, 3, 1, 6); --10 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id, description) VALUES ('{$localizationService->LocalizeForSqlString('Cold cuts')}', 2, 3, 3, 1, 6, '{$loremIpsum}'); --11 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id, picture_file_name, default_best_before_days) VALUES ('{$localizationService->LocalizeForSqlString('Paprika')}', 2, 2, 2, 1, 5, 'paprika.jpg', 7); --12 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id, picture_file_name, default_best_before_days) VALUES ('{$localizationService->LocalizeForSqlString('Cucumber')}', 2, 2, 2, 1, 5, 'cucumber.jpg', 7); --13 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id, default_best_before_days) VALUES ('{$localizationService->LocalizeForSqlString('Radish')}', 2, 7, 7, 1, 5, 7); --14 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id, picture_file_name, default_best_before_days) VALUES ('{$localizationService->LocalizeForSqlString('Tomato')}', 2, 2, 2, 1, 5, 'tomato.jpg', 7); --15 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$localizationService->LocalizeForSqlString('Pizza dough')}', 2, 3, 3, 1, 6); --16 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$localizationService->LocalizeForSqlString('Sieved tomatoes')}', 5, 5, 5, 1, 3); --17 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$localizationService->LocalizeForSqlString('Salami')}', 2, 3, 3, 1, 6); --18 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$localizationService->LocalizeForSqlString('Toast')}', 3, 5, 5, 1, 2); --19 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$localizationService->LocalizeForSqlString('Minced meat')}', 2, 3, 3, 1, 4); --20 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id, enable_tare_weight_handling, tare_weight) VALUES ('{$localizationService->LocalizeForSqlString('Flour')}', 3, 8, 8, 1, 3, 1, 500); --21 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$localizationService->LocalizeForSqlString('Sugar')}', 3, 3, 3, 1, 3); --22 - INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$localizationService->LocalizeForSqlString('Milk')}', 2, 10, 10, 1, 6); --23 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, min_stock_amount, product_group_id, picture_file_name) VALUES ('{$this->__t_sql('Cookies')}', 4, 3, 3, 1, 8, 1, 'cookies.jpg'); --1 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, min_stock_amount, product_group_id) VALUES ('{$this->__t_sql('Chocolate')}', 4, 3, 3, 1, 8, 1); --2 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, min_stock_amount, product_group_id, picture_file_name) VALUES ('{$this->__t_sql('Gummy bears')}', 4, 3, 3, 1, 8, 1, 'gummybears.jpg'); --3 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, min_stock_amount, product_group_id) VALUES ('{$this->__t_sql('Crisps')}', 4, 3, 3, 1, 10, 1); --4 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$this->__t_sql('Eggs')}', 2, 3, 2, 10, 5); --5 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$this->__t_sql('Noodles')}', 3, 3, 3, 1, 6); --6 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$this->__t_sql('Pickles')}', 5, 4, 4, 1, 3); --7 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$this->__t_sql('Gulash soup')}', 5, 5, 5, 1, 3); --8 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$this->__t_sql('Yogurt')}', 2, 6, 6, 1, 6); --9 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$this->__t_sql('Cheese')}', 2, 3, 3, 1, 6); --10 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id, description) VALUES ('{$this->__t_sql('Cold cuts')}', 2, 3, 3, 1, 6, '{$loremIpsum}'); --11 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id, picture_file_name, default_best_before_days) VALUES ('{$this->__t_sql('Paprika')}', 2, 2, 2, 1, 5, 'paprika.jpg', 7); --12 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id, picture_file_name, default_best_before_days) VALUES ('{$this->__t_sql('Cucumber')}', 2, 2, 2, 1, 5, 'cucumber.jpg', 7); --13 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id, default_best_before_days) VALUES ('{$this->__t_sql('Radish')}', 2, 7, 7, 1, 5, 7); --14 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id, picture_file_name, default_best_before_days) VALUES ('{$this->__t_sql('Tomato')}', 2, 2, 2, 1, 5, 'tomato.jpg', 7); --15 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$this->__t_sql('Pizza dough')}', 2, 3, 3, 1, 6); --16 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$this->__t_sql('Sieved tomatoes')}', 5, 5, 5, 1, 3); --17 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$this->__t_sql('Salami')}', 2, 3, 3, 1, 6); --18 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$this->__t_sql('Toast')}', 3, 5, 5, 1, 2); --19 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$this->__t_sql('Minced meat')}', 2, 3, 3, 1, 4); --20 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id, enable_tare_weight_handling, tare_weight) VALUES ('{$this->__t_sql('Flour')}', 3, 8, 8, 1, 3, 1, 500); --21 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$this->__t_sql('Sugar')}', 3, 3, 3, 1, 3); --22 + INSERT INTO products (name, location_id, qu_id_purchase, qu_id_stock, qu_factor_purchase_to_stock, product_group_id) VALUES ('{$this->__t_sql('Milk')}', 2, 10, 10, 1, 6); --23 - INSERT INTO shopping_list (note, amount) VALUES ('{$localizationService->LocalizeForSqlString('Some good snacks')}', 1); + INSERT INTO shopping_list (note, amount) VALUES ('{$this->__t_sql('Some good snacks')}', 1); INSERT INTO shopping_list (product_id, amount) VALUES (20, 1); INSERT INTO shopping_list (product_id, amount) VALUES (17, 1); - INSERT INTO recipes (name, description, picture_file_name) VALUES ('{$localizationService->LocalizeForSqlString('Pizza')}', '{$loremIpsumWithHtmlFormattings}', 'pizza.jpg'); --1 - INSERT INTO recipes (name, description, picture_file_name) VALUES ('{$localizationService->LocalizeForSqlString('Spaghetti bolognese')}', '{$loremIpsumWithHtmlFormattings}', 'spaghetti.jpg'); --2 - INSERT INTO recipes (name, description, picture_file_name) VALUES ('{$localizationService->LocalizeForSqlString('Sandwiches')}', '{$loremIpsumWithHtmlFormattings}', 'sandwiches.jpg'); --3 - INSERT INTO recipes (name, description, picture_file_name) VALUES ('{$localizationService->LocalizeForSqlString('Pancakes')}', '{$loremIpsumWithHtmlFormattings}', 'pancakes.jpg'); --4 - INSERT INTO recipes (name, description, picture_file_name) VALUES ('{$localizationService->LocalizeForSqlString('Chocolate sauce')}', '{$loremIpsumWithHtmlFormattings}', 'chocolate_sauce.jpg'); --5 - INSERT INTO recipes (name, description, picture_file_name) VALUES ('{$localizationService->LocalizeForSqlString('Pancakes')} / {$localizationService->LocalizeForSqlString('Chocolate sauce')}', '{$loremIpsumWithHtmlFormattings}', 'pancakes_chocolate_sauce.jpg'); --6 + INSERT INTO recipes (name, description, picture_file_name) VALUES ('{$this->__t_sql('Pizza')}', '{$loremIpsumWithHtmlFormattings}', 'pizza.jpg'); --1 + INSERT INTO recipes (name, description, picture_file_name) VALUES ('{$this->__t_sql('Spaghetti bolognese')}', '{$loremIpsumWithHtmlFormattings}', 'spaghetti.jpg'); --2 + INSERT INTO recipes (name, description, picture_file_name) VALUES ('{$this->__t_sql('Sandwiches')}', '{$loremIpsumWithHtmlFormattings}', 'sandwiches.jpg'); --3 + INSERT INTO recipes (name, description, picture_file_name) VALUES ('{$this->__t_sql('Pancakes')}', '{$loremIpsumWithHtmlFormattings}', 'pancakes.jpg'); --4 + INSERT INTO recipes (name, description, picture_file_name) VALUES ('{$this->__t_sql('Chocolate sauce')}', '{$loremIpsumWithHtmlFormattings}', 'chocolate_sauce.jpg'); --5 + INSERT INTO recipes (name, description, picture_file_name) VALUES ('{$this->__t_sql('Pancakes')} / {$this->__t_sql('Chocolate sauce')}', '{$loremIpsumWithHtmlFormattings}', 'pancakes_chocolate_sauce.jpg'); --6 - INSERT INTO recipes_pos (recipe_id, product_id, amount, ingredient_group) VALUES (1, 16, 1, '{$localizationService->LocalizeForSqlString('Bottom')}'); - INSERT INTO recipes_pos (recipe_id, product_id, amount, ingredient_group) VALUES (1, 17, 1, '{$localizationService->LocalizeForSqlString('Topping')}'); - INSERT INTO recipes_pos (recipe_id, product_id, amount, note, ingredient_group) VALUES (1, 18, 1, '{$localizationService->LocalizeForSqlString('This is the note content of the recipe ingredient')}', '{$localizationService->LocalizeForSqlString('Topping')}'); - INSERT INTO recipes_pos (recipe_id, product_id, amount, ingredient_group) VALUES (1, 10, 1, '{$localizationService->LocalizeForSqlString('Bottom')}'); + INSERT INTO recipes_pos (recipe_id, product_id, amount, ingredient_group) VALUES (1, 16, 1, '{$this->__t_sql('Bottom')}'); + INSERT INTO recipes_pos (recipe_id, product_id, amount, ingredient_group) VALUES (1, 17, 1, '{$this->__t_sql('Topping')}'); + INSERT INTO recipes_pos (recipe_id, product_id, amount, note, ingredient_group) VALUES (1, 18, 1, '{$this->__t_sql('This is the note content of the recipe ingredient')}', '{$this->__t_sql('Topping')}'); + INSERT INTO recipes_pos (recipe_id, product_id, amount, ingredient_group) VALUES (1, 10, 1, '{$this->__t_sql('Bottom')}'); INSERT INTO recipes_pos (recipe_id, product_id, amount) VALUES (2, 6, 1); INSERT INTO recipes_pos (recipe_id, product_id, amount) VALUES (2, 10, 1); - INSERT INTO recipes_pos (recipe_id, product_id, amount, note) VALUES (2, 17, 1, '{$localizationService->LocalizeForSqlString('This is the note content of the recipe ingredient')}'); + INSERT INTO recipes_pos (recipe_id, product_id, amount, note) VALUES (2, 17, 1, '{$this->__t_sql('This is the note content of the recipe ingredient')}'); INSERT INTO recipes_pos (recipe_id, product_id, amount) VALUES (2, 20, 1); INSERT INTO recipes_pos (recipe_id, product_id, amount) VALUES (3, 10, 1); INSERT INTO recipes_pos (recipe_id, product_id, amount) VALUES (3, 11, 1); @@ -97,31 +103,31 @@ class DemoDataGeneratorService extends BaseService INSERt INTO recipes_nestings(recipe_id, includes_recipe_id) VALUES (6, 4); INSERt INTO recipes_nestings(recipe_id, includes_recipe_id) VALUES (6, 5); - INSERT INTO chores (name, period_type, period_days) VALUES ('{$localizationService->LocalizeForSqlString('Changed towels in the bathroom')}', 'manually', 5); --1 - INSERT INTO chores (name, period_type, period_days) VALUES ('{$localizationService->LocalizeForSqlString('Cleaned the kitchen floor')}', 'dynamic-regular', 7); --2 - INSERT INTO chores (name, period_type, period_days) VALUES ('{$localizationService->LocalizeForSqlString('Lawn mowed in the garden')}', 'dynamic-regular', 21); --3 - INSERT INTO chores (name, period_type, period_days) VALUES ('{$localizationService->LocalizeForSqlString('The thing which happens on the 5th of every month')}', 'monthly', 5); --4 - INSERT INTO chores (name, period_type) VALUES ('{$localizationService->LocalizeForSqlString('The thing which happens daily')}', 'daily'); --5 - INSERT INTO chores (name, period_type, period_config) VALUES ('{$localizationService->LocalizeForSqlString('The thing which happens on Mondays and Wednesdays')}', 'weekly', 'monday,wednesday'); --6 + INSERT INTO chores (name, period_type, period_days) VALUES ('{$this->__t_sql('Changed towels in the bathroom')}', 'manually', 5); --1 + INSERT INTO chores (name, period_type, period_days) VALUES ('{$this->__t_sql('Cleaned the kitchen floor')}', 'dynamic-regular', 7); --2 + INSERT INTO chores (name, period_type, period_days) VALUES ('{$this->__t_sql('Lawn mowed in the garden')}', 'dynamic-regular', 21); --3 + INSERT INTO chores (name, period_type, period_days) VALUES ('{$this->__t_sql('The thing which happens on the 5th of every month')}', 'monthly', 5); --4 + INSERT INTO chores (name, period_type) VALUES ('{$this->__t_sql('The thing which happens daily')}', 'daily'); --5 + INSERT INTO chores (name, period_type, period_config) VALUES ('{$this->__t_sql('The thing which happens on Mondays and Wednesdays')}', 'weekly', 'monday,wednesday'); --6 - INSERT INTO batteries (name, description, used_in) VALUES ('{$localizationService->LocalizeForSqlString('Battery')}1', '{$localizationService->LocalizeForSqlString('Warranty ends')} 2023', '{$localizationService->LocalizeForSqlString('TV remote control')}'); --1 - INSERT INTO batteries (name, description, used_in) VALUES ('{$localizationService->LocalizeForSqlString('Battery')}2', '{$localizationService->LocalizeForSqlString('Warranty ends')} 2022', '{$localizationService->LocalizeForSqlString('Alarm clock')}'); --2 - INSERT INTO batteries (name, description, used_in, charge_interval_days) VALUES ('{$localizationService->LocalizeForSqlString('Battery')}3', '{$localizationService->LocalizeForSqlString('Warranty ends')} 2022', '{$localizationService->LocalizeForSqlString('Heat remote control')}', 60); --3 - INSERT INTO batteries (name, description, used_in, charge_interval_days) VALUES ('{$localizationService->LocalizeForSqlString('Battery')}4', '{$localizationService->LocalizeForSqlString('Warranty ends')} 2028', '{$localizationService->LocalizeForSqlString('Heat remote control')}', 60); --4 + INSERT INTO batteries (name, description, used_in) VALUES ('{$this->__t_sql('Battery')}1', '{$this->__t_sql('Warranty ends')} 2023', '{$this->__t_sql('TV remote control')}'); --1 + INSERT INTO batteries (name, description, used_in) VALUES ('{$this->__t_sql('Battery')}2', '{$this->__t_sql('Warranty ends')} 2022', '{$this->__t_sql('Alarm clock')}'); --2 + INSERT INTO batteries (name, description, used_in, charge_interval_days) VALUES ('{$this->__t_sql('Battery')}3', '{$this->__t_sql('Warranty ends')} 2022', '{$this->__t_sql('Heat remote control')}', 60); --3 + INSERT INTO batteries (name, description, used_in, charge_interval_days) VALUES ('{$this->__t_sql('Battery')}4', '{$this->__t_sql('Warranty ends')} 2028', '{$this->__t_sql('Heat remote control')}', 60); --4 - INSERT INTO task_categories (name) VALUES ('{$localizationService->LocalizeForSqlString('Home')}'); --1 - INSERT INTO task_categories (name) VALUES ('{$localizationService->LocalizeForSqlString('Life')}'); --2 - INSERT INTO task_categories (name) VALUES ('{$localizationService->LocalizeForSqlString('Projects')}'); --3 + INSERT INTO task_categories (name) VALUES ('{$this->__t_sql('Home')}'); --1 + INSERT INTO task_categories (name) VALUES ('{$this->__t_sql('Life')}'); --2 + INSERT INTO task_categories (name) VALUES ('{$this->__t_sql('Projects')}'); --3 - INSERT INTO tasks (name, category_id, due_date, assigned_to_user_id) VALUES ('{$localizationService->LocalizeForSqlString('Repair the garage door')}', 1, date(datetime('now', 'localtime'), '+14 day'), 1); - INSERT INTO tasks (name, category_id, due_date, assigned_to_user_id) VALUES ('{$localizationService->LocalizeForSqlString('Fork and improve grocy')}', 3, date(datetime('now', 'localtime'), '+30 day'), 1); - INSERT INTO tasks (name, category_id, due_date, assigned_to_user_id) VALUES ('{$localizationService->LocalizeForSqlString('Task')}1', 2, date(datetime('now', 'localtime'), '-1 day'), 1); - INSERT INTO tasks (name, category_id, due_date, assigned_to_user_id) VALUES ('{$localizationService->LocalizeForSqlString('Task')}2', 2, date(datetime('now', 'localtime'), '-1 day'), 1); - INSERT INTO tasks (name, due_date, assigned_to_user_id) VALUES ('{$localizationService->LocalizeForSqlString('Find a solution for what to do when I forget the door keys')}', date(datetime('now', 'localtime'), '+3 day'), 1); - INSERT INTO tasks (name, due_date, assigned_to_user_id) VALUES ('{$localizationService->LocalizeForSqlString('Task')}3', date(datetime('now', 'localtime'), '+4 day'), 1); + INSERT INTO tasks (name, category_id, due_date, assigned_to_user_id) VALUES ('{$this->__t_sql('Repair the garage door')}', 1, date(datetime('now', 'localtime'), '+14 day'), 1); + INSERT INTO tasks (name, category_id, due_date, assigned_to_user_id) VALUES ('{$this->__t_sql('Fork and improve grocy')}', 3, date(datetime('now', 'localtime'), '+30 day'), 1); + INSERT INTO tasks (name, category_id, due_date, assigned_to_user_id) VALUES ('{$this->__t_sql('Task')}1', 2, date(datetime('now', 'localtime'), '-1 day'), 1); + INSERT INTO tasks (name, category_id, due_date, assigned_to_user_id) VALUES ('{$this->__t_sql('Task')}2', 2, date(datetime('now', 'localtime'), '-1 day'), 1); + INSERT INTO tasks (name, due_date, assigned_to_user_id) VALUES ('{$this->__t_sql('Find a solution for what to do when I forget the door keys')}', date(datetime('now', 'localtime'), '+3 day'), 1); + INSERT INTO tasks (name, due_date, assigned_to_user_id) VALUES ('{$this->__t_sql('Task')}3', date(datetime('now', 'localtime'), '+4 day'), 1); - INSERT INTO equipment (name, description, instruction_manual_file_name) VALUES ('{$localizationService->LocalizeForSqlString('Coffee machine')}', '{$loremIpsumWithHtmlFormattings}', 'loremipsum.pdf'); --1 - INSERT INTO equipment (name, description) VALUES ('{$localizationService->LocalizeForSqlString('Dishwasher')}', '{$loremIpsumWithHtmlFormattings}'); --2 + INSERT INTO equipment (name, description, instruction_manual_file_name) VALUES ('{$this->__t_sql('Coffee machine')}', '{$loremIpsumWithHtmlFormattings}', 'loremipsum.pdf'); --1 + INSERT INTO equipment (name, description) VALUES ('{$this->__t_sql('Dishwasher')}', '{$loremIpsumWithHtmlFormattings}'); --2 INSERT INTO migrations (migration) VALUES (-1); "; @@ -262,4 +268,16 @@ class DemoDataGeneratorService extends BaseService { return mt_rand(2 * 100, 25 * 100) / 100; } + + private function __t_sql(string $text) + { + $localizedText = $this->LocalizationService->__t($text, null); + return str_replace("'", "''", $localizedText); + } + + private function __n_sql($number, string $singularForm, string $pluralForm) + { + $localizedText = $this->LocalizationService->__n($number, $singularForm, $pluralForm); + return str_replace("'", "''", $localizedText); + } } diff --git a/services/LocalizationService.php b/services/LocalizationService.php index 236e549f..945ef803 100644 --- a/services/LocalizationService.php +++ b/services/LocalizationService.php @@ -2,58 +2,137 @@ namespace Grocy\Services; -use Gettext\Translations; -use Gettext\Translator; +use \Grocy\Services\DatabaseService; +use \Gettext\Translation; +use \Gettext\Translations; +use \Gettext\Translator; class LocalizationService { public function __construct(string $culture) { $this->Culture = $culture; + $this->DatabaseService = new DatabaseService(); + $this->Database = $this->DatabaseService->GetDbConnection(); + $this->LoadLocalizations($culture); } - protected $PotTranslation; - protected $PoTranslation; - public $Translator; + protected $DatabaseService; + protected $Database; + protected $Pot; + protected $PotMain; + protected $Po; + protected $PoUserStrings; + protected $Translator; private function LoadLocalizations() { $culture = $this->Culture; - $this->PotTranslation = Translations::fromPoFile(__DIR__ . '/../localization/chore_types.pot'); - $this->PotTranslation = $this->PotTranslation->mergeWith(Translations::fromPoFile(__DIR__ . '/../localization/component_translations.pot')); - $this->PotTranslation = $this->PotTranslation->mergeWith(Translations::fromPoFile(__DIR__ . '/../localization/demo_data.pot')); - $this->PotTranslation = $this->PotTranslation->mergeWith(Translations::fromPoFile(__DIR__ . '/../localization/stock_transaction_types.pot')); - $this->PotTranslation = $this->PotTranslation->mergeWith(Translations::fromPoFile(__DIR__ . '/../localization/strings.pot')); - $this->PotTranslation = $this->PotTranslation->mergeWith(Translations::fromPoFile(__DIR__ . '/../localization/userfield_types.pot')); + if (GROCY_MODE === 'dev') + { + $this->PotMain = Translations::fromPoFile(__DIR__ . '/../localization/strings.pot'); - $this->PoTranslation = Translations::fromPoFile(__DIR__ . "/../localization/$culture/chore_types.po"); - $this->PoTranslation = $this->PoTranslation->mergeWith(Translations::fromPoFile(__DIR__ . "/../localization/$culture/component_translations.po")); - $this->PoTranslation = $this->PoTranslation->mergeWith(Translations::fromPoFile(__DIR__ . "/../localization/$culture/demo_data.po")); - $this->PoTranslation = $this->PoTranslation->mergeWith(Translations::fromPoFile(__DIR__ . "/../localization/$culture/stock_transaction_types.po")); - $this->PoTranslation = $this->PoTranslation->mergeWith(Translations::fromPoFile(__DIR__ . "/../localization/$culture/strings.po")); - $this->PoTranslation = $this->PoTranslation->mergeWith(Translations::fromPoFile(__DIR__ . "/../localization/$culture/userfield_types.po")); + $this->Pot = Translations::fromPoFile(__DIR__ . '/../localization/chore_types.pot'); + $this->Pot = $this->Pot->mergeWith(Translations::fromPoFile(__DIR__ . '/../localization/component_translations.pot')); + $this->Pot = $this->Pot->mergeWith(Translations::fromPoFile(__DIR__ . '/../localization/demo_data.pot')); + $this->Pot = $this->Pot->mergeWith(Translations::fromPoFile(__DIR__ . '/../localization/stock_transaction_types.pot')); + $this->Pot = $this->Pot->mergeWith(Translations::fromPoFile(__DIR__ . '/../localization/strings.pot')); + $this->Pot = $this->Pot->mergeWith(Translations::fromPoFile(__DIR__ . '/../localization/userfield_types.pot')); + } + + $this->PoUserStrings = new Translations(); + $this->PoUserStrings->setDomain('grocy/userstrings'); + + $this->Po = Translations::fromPoFile(__DIR__ . "/../localization/$culture/chore_types.po"); + $this->Po = $this->Po->mergeWith(Translations::fromPoFile(__DIR__ . "/../localization/$culture/component_translations.po")); + $this->Po = $this->Po->mergeWith(Translations::fromPoFile(__DIR__ . "/../localization/$culture/demo_data.po")); + $this->Po = $this->Po->mergeWith(Translations::fromPoFile(__DIR__ . "/../localization/$culture/stock_transaction_types.po")); + $this->Po = $this->Po->mergeWith(Translations::fromPoFile(__DIR__ . "/../localization/$culture/strings.po")); + $this->Po = $this->Po->mergeWith(Translations::fromPoFile(__DIR__ . "/../localization/$culture/userfield_types.po")); + + $quantityUnits = null; + try + { + $quantityUnits = $this->Database->quantity_units()->fetchAll(); + } + catch (\Exception $ex) + { + // Happens when database is not initialised or migrated... + } + + if ($quantityUnits !== null) + { + foreach ($quantityUnits as $quantityUnit) + { + $translation = new Translation('', $quantityUnit['name']); + $translation->setTranslation($quantityUnit['name']); + $translation->setPlural($quantityUnit['name_plural']); + $translation->setPluralTranslations(preg_split('/\r\n|\r|\n/', $quantityUnit['plural_forms'])); + + $this->PoUserStrings[] = $translation; + } + $this->Po = $this->Po->mergeWith($this->PoUserStrings); + } $this->Translator = new Translator(); - $this->Translator->loadTranslations($this->PoTranslation); - $this->Translator->register(); + $this->Translator->loadTranslations($this->Po); } - public function GetTranslationsForJavaScriptTranslator() + public function GetPoAsJsonString() { - return $this->PoTranslation->toJsonString(); + return $this->Po->toJsonString(); } - //TODO: Missing translations should be automatically added to the source POT file + public function GetPluralCount() + { + if ($this->Po->getHeader(Translations::HEADER_PLURAL) !== null) + { + return $this->Po->getPluralForms()[0]; + } + else + { + return 2; + } + } + + public function GetPluralDefinition() + { + if ($this->Po->getHeader(Translations::HEADER_PLURAL) !== null) + { + return $this->Po->getPluralForms()[1]; + } + else + { + return '(n != 1)'; + } + } public function __t(string $text, ...$placeholderValues) { - return __($text, ...$placeholderValues); + $this->CheckAndAddMissingTranslationToPot($text); + + return vsprintf($this->Translator->gettext($text), ...$placeholderValues); } - public function __n($number, $singularForm, $pluralForm) + public function __n($number, string $singularForm, string $pluralForm) { + $this->CheckAndAddMissingTranslationToPot($singularForm); + return $this->Translator->ngettext($singularForm, $pluralForm, $number); } + + public function CheckAndAddMissingTranslationToPot(string $text) + { + if (GROCY_MODE === 'dev') + { + if ($this->Pot->find('', $text) === false && $this->PoUserStrings->find('', $text) === false) + { + $translation = new Translation('', $text); + $this->PotMain[] = $translation; + $this->PotMain->toPoFile(__DIR__ . '/../localization/strings.pot'); + } + } + } } diff --git a/services/RecipesService.php b/services/RecipesService.php index 65245d2f..3fb0531e 100644 --- a/services/RecipesService.php +++ b/services/RecipesService.php @@ -48,7 +48,7 @@ class RecipesService extends BaseService $shoppinglistRow = $this->Database->shopping_list()->createRow(array( 'product_id' => $recipePosition->product_id, 'amount' => $toOrderAmount, - 'note' => $this->LocalizationService-Translator->__t('Added for recipe %s', $recipe->name) + 'note' => $this->LocalizationService->__t('Added for recipe %s', $recipe->name) )); $shoppinglistRow->save(); } diff --git a/views/choreform.blade.php b/views/choreform.blade.php index 6525b881..d5219351 100644 --- a/views/choreform.blade.php +++ b/views/choreform.blade.php @@ -36,7 +36,7 @@
{{ $__t('A period type is required') }}
diff --git a/views/chores.blade.php b/views/chores.blade.php index 4d60104b..b21d3b53 100644 --- a/views/chores.blade.php +++ b/views/chores.blade.php @@ -57,7 +57,7 @@ {{ $chore->name }} - {{ $__t$chore->period_type) }} + {{ $__t($chore->period_type) }} {{ $chore->description }} diff --git a/views/components/datetimepicker.blade.php b/views/components/datetimepicker.blade.php index 31768168..b1506464 100644 --- a/views/components/datetimepicker.blade.php +++ b/views/components/datetimepicker.blade.php @@ -15,9 +15,9 @@ @php if(empty($additionalAttributes)) { $additionalAttributes = ''; } @endphp
-
diff --git a/views/components/numberpicker.blade.php b/views/components/numberpicker.blade.php index 995c260d..d74e80af 100644 --- a/views/components/numberpicker.blade.php +++ b/views/components/numberpicker.blade.php @@ -17,7 +17,7 @@ @php if(!isset($noNameAttribute)) { $noNameAttribute = false; } @endphp
- +
diff --git a/views/components/userpicker.blade.php b/views/components/userpicker.blade.php index f768eb70..7241412a 100644 --- a/views/components/userpicker.blade.php +++ b/views/components/userpicker.blade.php @@ -7,7 +7,7 @@ @php if(!isset($nextInputSelector)) { $nextInputSelector = ''; } @endphp
- +
+
+ + +
+
diff --git a/views/recipeform.blade.php b/views/recipeform.blade.php index c4a1bb86..67ca29fb 100644 --- a/views/recipeform.blade.php +++ b/views/recipeform.blade.php @@ -128,7 +128,7 @@ {{ FindObjectInArrayByPropertyValue($products, 'id', $recipePosition->product_id)->name }} - @if($recipePosition->amount == round($recipePosition->amount)){{ round($recipePosition->amount) }}@else{{ $recipePosition->amount }}@endif {{ Pluralize($recipePosition->amount, FindObjectInArrayByPropertyValue($quantityunits, 'id', $recipePosition->qu_id)->name, FindObjectInArrayByPropertyValue($quantityunits, 'id', $recipePosition->qu_id)->name_plural) }} + @if($recipePosition->amount == round($recipePosition->amount)){{ round($recipePosition->amount) }}@else{{ $recipePosition->amount }}@endif {{ $__n($recipePosition->amount, FindObjectInArrayByPropertyValue($quantityunits, 'id', $recipePosition->qu_id)->name, FindObjectInArrayByPropertyValue($quantityunits, 'id', $recipePosition->qu_id)->name_plural) }} diff --git a/views/recipes.blade.php b/views/recipes.blade.php index f413b113..6914a6f5 100644 --- a/views/recipes.blade.php +++ b/views/recipes.blade.php @@ -55,7 +55,7 @@ @if(FindObjectInArrayByPropertyValue($recipesResolved, 'recipe_id', $recipe->id)->need_fulfilled == 1)@elseif(FindObjectInArrayByPropertyValue($recipesResolved, 'recipe_id', $recipe->id)->need_fulfilled_with_shopping_list == 1)@else@endif - @if(FindObjectInArrayByPropertyValue($recipesResolved, 'recipe_id', $recipe->id)->need_fulfilled == 1){{ $__t('Enough in stock') }}@elseif(FindObjectInArrayByPropertyValue($recipesResolved, 'recipe_id', $recipe->id)->need_fulfilled_with_shopping_list == 1){{ $__t('Not enough in stock, %s ingredients missing but already on the shopping list', FindObjectInArrayByPropertyValue($recipesResolved, 'recipe_id', $recipe->id)->missing_products_count) }}@else{{ $__t('Not enough in stock, %s ingredients missing', FindObjectInArrayByPropertyValue($recipesResolved, 'recipe_id', $recipe->id)->missing_products_count) }}@endif + @if(FindObjectInArrayByPropertyValue($recipesResolved, 'recipe_id', $recipe->id)->need_fulfilled == 1){{ $__t('Enough in stock') }}@elseif(FindObjectInArrayByPropertyValue($recipesResolved, 'recipe_id', $recipe->id)->need_fulfilled_with_shopping_list == 1){{ $__n(FindObjectInArrayByPropertyValue($recipesResolved, 'recipe_id', $recipe->id)->missing_products_count, 'Not enough in stock, %s ingredient missing but already on the shopping list', 'Not enough in stock, %s ingredients missing but already on the shopping list') }}@else{{ $__n(FindObjectInArrayByPropertyValue($recipesResolved, 'recipe_id', $recipe->id)->missing_products_count, 'Not enough in stock, %s ingredient missing', 'Not enough in stock, %s ingredients missing') }}@endif {{ FindObjectInArrayByPropertyValue($recipesResolved, 'recipe_id', $recipe->id)->missing_products_count }} @@ -165,7 +165,7 @@
{{ $selectedRecipePosition->ingredient_group }}
@endif
  • - @if($selectedRecipePosition->recipe_amount == round($selectedRecipePosition->recipe_amount, 2)){{ round($selectedRecipePosition->recipe_amount, 2) }}@else{{ $selectedRecipePosition->recipe_amount }}@endif {{ Pluralize($selectedRecipePosition->recipe_amount, FindObjectInArrayByPropertyValue($quantityunits, 'id', $selectedRecipePosition->qu_id)->name, FindObjectInArrayByPropertyValue($quantityunits, 'id', $selectedRecipePosition->qu_id)->name_plural) }} {{ FindObjectInArrayByPropertyValue($products, 'id', $selectedRecipePosition->product_id)->name }} + @if($selectedRecipePosition->recipe_amount == round($selectedRecipePosition->recipe_amount, 2)){{ round($selectedRecipePosition->recipe_amount, 2) }}@else{{ $selectedRecipePosition->recipe_amount }}@endif {{ $__n($selectedRecipePosition->recipe_amount, FindObjectInArrayByPropertyValue($quantityunits, 'id', $selectedRecipePosition->qu_id)->name, FindObjectInArrayByPropertyValue($quantityunits, 'id', $selectedRecipePosition->qu_id)->name_plural) }} {{ FindObjectInArrayByPropertyValue($products, 'id', $selectedRecipePosition->product_id)->name }} @if($selectedRecipePosition->need_fulfilled == 1)@elseif($selectedRecipePosition->need_fulfilled_with_shopping_list == 1)@else@endif @if(FindObjectInArrayByPropertyValue($selectedRecipeSubRecipesPositions, 'recipe_pos_id', $selectedRecipePosition->id)->need_fulfilled == 1) {{ $__t('Enough in stock') }} @else {{ $__t('Not enough in stock, %s missing, %s already on shopping list', round(FindObjectInArrayByPropertyValue($selectedRecipeSubRecipesPositions, 'recipe_pos_id', $selectedRecipePosition->id)->missing_amount, 2), round(FindObjectInArrayByPropertyValue($selectedRecipeSubRecipesPositions, 'recipe_pos_id', $selectedRecipePosition->id)->amount_on_shopping_list, 2)) }} @endif @@ -201,7 +201,7 @@
    {{ $selectedRecipePosition->ingredient_group }}
    @endif
  • - @if($selectedRecipePosition->recipe_amount == round($selectedRecipePosition->recipe_amount, 2)){{ round($selectedRecipePosition->recipe_amount, 2) }}@else{{ $selectedRecipePosition->recipe_amount }}@endif {{ Pluralize($selectedRecipePosition->recipe_amount, FindObjectInArrayByPropertyValue($quantityunits, 'id', $selectedRecipePosition->qu_id)->name, FindObjectInArrayByPropertyValue($quantityunits, 'id', $selectedRecipePosition->qu_id)->name_plural) }} {{ FindObjectInArrayByPropertyValue($products, 'id', $selectedRecipePosition->product_id)->name }} + @if($selectedRecipePosition->recipe_amount == round($selectedRecipePosition->recipe_amount, 2)){{ round($selectedRecipePosition->recipe_amount, 2) }}@else{{ $selectedRecipePosition->recipe_amount }}@endif {{ $__n($selectedRecipePosition->recipe_amount, FindObjectInArrayByPropertyValue($quantityunits, 'id', $selectedRecipePosition->qu_id)->name, FindObjectInArrayByPropertyValue($quantityunits, 'id', $selectedRecipePosition->qu_id)->name_plural) }} {{ FindObjectInArrayByPropertyValue($products, 'id', $selectedRecipePosition->product_id)->name }} @if($selectedRecipePosition->need_fulfilled == 1)@elseif($selectedRecipePosition->need_fulfilled_with_shopping_list == 1)@else@endif @if(FindObjectInArrayByPropertyValue($recipePositionsResolved, 'recipe_pos_id', $selectedRecipePosition->id)->need_fulfilled == 1) {{ $__t('Enough in stock') }} @else {{ $__t('Not enough in stock, %s missing, %s already on shopping list', round(FindObjectInArrayByPropertyValue($recipePositionsResolved, 'recipe_pos_id', $selectedRecipePosition->id)->missing_amount, 2), round(FindObjectInArrayByPropertyValue($recipePositionsResolved, 'recipe_pos_id', $selectedRecipePosition->id)->amount_on_shopping_list, 2)) }} @endif diff --git a/views/shoppinglist.blade.php b/views/shoppinglist.blade.php index 3bd4ecf0..746c5443 100644 --- a/views/shoppinglist.blade.php +++ b/views/shoppinglist.blade.php @@ -33,7 +33,7 @@ {{ $__t('Add all list items to stock') }} -

    {{ Pluralize(count($missingProducts), $__t('%s product is below defined min. stock amount', count($missingProducts)), $__t('%s products are below defined min. stock amount', count($missingProducts))) }}

    +

    {{ $__n(count($missingProducts), $__t('%s product is below defined min. stock amount', count($missingProducts)), $__t('%s products are below defined min. stock amount', count($missingProducts))) }}

  • @@ -93,7 +93,7 @@ - product_id)) data-toggle="tooltip" title="{{ $__t('Add %s %s of %s to stock', Pluralize($listItem->amount, FindObjectInArrayByPropertyValue($quantityunits, 'id', FindObjectInArrayByPropertyValue($products, 'id', $listItem->product_id)->qu_id_purchase)->name, FindObjectInArrayByPropertyValue($quantityunits, 'id', FindObjectInArrayByPropertyValue($products, 'id', $listItem->product_id)->qu_id_purchase)->name_plural), FindObjectInArrayByPropertyValue($products, 'id', $listItem->product_id)->name, $listItem->amount) }}" @endif> + product_id)) data-toggle="tooltip" title="{{ $__t('Add %s %s of %s to stock', $__n($listItem->amount, FindObjectInArrayByPropertyValue($quantityunits, 'id', FindObjectInArrayByPropertyValue($products, 'id', $listItem->product_id)->qu_id_purchase)->name, FindObjectInArrayByPropertyValue($quantityunits, 'id', FindObjectInArrayByPropertyValue($products, 'id', $listItem->product_id)->qu_id_purchase)->name_plural), FindObjectInArrayByPropertyValue($products, 'id', $listItem->product_id)->name, $listItem->amount) }}" @endif> @@ -101,7 +101,7 @@ @if(!empty($listItem->product_id)) {{ FindObjectInArrayByPropertyValue($products, 'id', $listItem->product_id)->name }}
    @endif{!! nl2br($listItem->note) !!} - {{ $listItem->amount }} @if(!empty($listItem->product_id)){{ Pluralize($listItem->amount, FindObjectInArrayByPropertyValue($quantityunits, 'id', FindObjectInArrayByPropertyValue($products, 'id', $listItem->product_id)->qu_id_purchase)->name, FindObjectInArrayByPropertyValue($quantityunits, 'id', FindObjectInArrayByPropertyValue($products, 'id', $listItem->product_id)->qu_id_purchase)->name_plural) }}@endif + {{ $listItem->amount }} @if(!empty($listItem->product_id)){{ $__n($listItem->amount, FindObjectInArrayByPropertyValue($quantityunits, 'id', FindObjectInArrayByPropertyValue($products, 'id', $listItem->product_id)->qu_id_purchase)->name, FindObjectInArrayByPropertyValue($quantityunits, 'id', FindObjectInArrayByPropertyValue($products, 'id', $listItem->product_id)->qu_id_purchase)->name_plural) }}@endif @if(!empty(FindObjectInArrayByPropertyValue($products, 'id', $listItem->product_id)->product_group_id)) {{ FindObjectInArrayByPropertyValue($productGroups, 'id', FindObjectInArrayByPropertyValue($products, 'id', $listItem->product_id)->product_group_id)->name }} @else {{ $__t('Ungrouped') }} @endif diff --git a/views/stockjournal.blade.php b/views/stockjournal.blade.php index f1bb99b2..a95acf75 100644 --- a/views/stockjournal.blade.php +++ b/views/stockjournal.blade.php @@ -56,14 +56,14 @@ @endif - {{ $stockLogEntry->amount }} {{ Pluralize($stockLogEntry->amount, FindObjectInArrayByPropertyValue($quantityunits, 'id', FindObjectInArrayByPropertyValue($products, 'id', $stockLogEntry->product_id)->qu_id_stock)->name, FindObjectInArrayByPropertyValue($quantityunits, 'id', FindObjectInArrayByPropertyValue($products, 'id', $stockLogEntry->product_id)->qu_id_stock)->name_plural) }} + {{ $stockLogEntry->amount }} {{ $__n($stockLogEntry->amount, FindObjectInArrayByPropertyValue($quantityunits, 'id', FindObjectInArrayByPropertyValue($products, 'id', $stockLogEntry->product_id)->qu_id_stock)->name, FindObjectInArrayByPropertyValue($quantityunits, 'id', FindObjectInArrayByPropertyValue($products, 'id', $stockLogEntry->product_id)->qu_id_stock)->name_plural) }} {{ $stockLogEntry->row_created_timestamp }} - {{ $__t$stockLogEntry->transaction_type) }} + {{ $__t($stockLogEntry->transaction_type) }} @endforeach diff --git a/views/stockoverview.blade.php b/views/stockoverview.blade.php index a5055715..178c9b9a 100644 --- a/views/stockoverview.blade.php +++ b/views/stockoverview.blade.php @@ -88,7 +88,7 @@ @foreach($currentStock as $currentStockEntry) amount > 0) table-warning @elseif (FindObjectInArrayByPropertyValue($missingProducts, 'id', $currentStockEntry->product_id) !== null) table-info @endif"> - {{ $__t('All') }} - @@ -129,7 +129,7 @@ {{ FindObjectInArrayByPropertyValue($products, 'id', $currentStockEntry->product_id)->name }} - {{ $currentStockEntry->amount }} {{ Pluralize($currentStockEntry->amount, FindObjectInArrayByPropertyValue($quantityunits, 'id', FindObjectInArrayByPropertyValue($products, 'id', $currentStockEntry->product_id)->qu_id_stock)->name, FindObjectInArrayByPropertyValue($quantityunits, 'id', FindObjectInArrayByPropertyValue($products, 'id', $currentStockEntry->product_id)->qu_id_stock)->name_plural) }} + {{ $currentStockEntry->amount }} {{ $__n($currentStockEntry->amount, FindObjectInArrayByPropertyValue($quantityunits, 'id', FindObjectInArrayByPropertyValue($products, 'id', $currentStockEntry->product_id)->qu_id_stock)->name, FindObjectInArrayByPropertyValue($quantityunits, 'id', FindObjectInArrayByPropertyValue($products, 'id', $currentStockEntry->product_id)->qu_id_stock)->name_plural) }} @if($currentStockEntry->amount_opened > 0){{ $__t('%s opened', $currentStockEntry->amount_opened) }}@endif diff --git a/views/userfieldform.blade.php b/views/userfieldform.blade.php index 4df0172a..9054109e 100644 --- a/views/userfieldform.blade.php +++ b/views/userfieldform.blade.php @@ -49,7 +49,7 @@
    {{ $__t('A type is required') }}
    diff --git a/views/userfields.blade.php b/views/userfields.blade.php index 35cb91f6..884eda60 100644 --- a/views/userfields.blade.php +++ b/views/userfields.blade.php @@ -65,7 +65,7 @@ {{ $userfield->caption }} - {{ $__t$userfield->type) }} + {{ $__t($userfield->type) }} @endforeach diff --git a/yarn.lock b/yarn.lock index ecf4f9c5..aefebbd4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11,9 +11,9 @@ resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.8.1.tgz#cbafbfe8894c4e3e3c3a9da6774e249ac1f2da8b" integrity sha512-GJtx6e55qLEOy2gPOsok2lohjpdWNGrYGtQx0FFT/++K4SYx+Z8LlPHdQBaFzKEwH5IbBB4fNgb//uyZjgYXoA== -"TagManager@https://github.com/max-favilli/tagmanager.git#3.0.2": +"TagManager@https://github.com/max-favilli/tagmanager.git#master": version "3.0.1" - resolved "https://github.com/max-favilli/tagmanager.git#df9eb9935c8585a392dfc00602f890caf233fa94" + resolved "https://github.com/max-favilli/tagmanager.git#b43646ef2f2373facaf21c7acc5e3eea61188d76" dependencies: jquery "1" @@ -195,6 +195,13 @@ fullcalendar@^3.10.0: resolved "https://registry.yarnpkg.com/fullcalendar/-/fullcalendar-3.10.0.tgz#cc5e87d518fd6550e142816a31dd191664847919" integrity sha512-0OtsHhmdYhtFmQwXzyo8VqHzYgamg+zVOoytv5N13gI+iF6CGjevpCi/yBaQs0O4wY3OAp8I688IxdNYe0iAvw== +gettext-translator@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/gettext-translator/-/gettext-translator-2.1.0.tgz#946047649b7df4ef00522787bb78792667e4de2f" + integrity sha512-RD9HifZKtlRtFScA0VWESzLKQxxRmaRU0IFg6cFZgMP0MMgzfHpWO7MipUyRbMxDFm8adbQqCcFLBV47tjT6Ug== + dependencies: + sprintf-js "^1.0.3" + jquery-serializejson@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/jquery-serializejson/-/jquery-serializejson-2.9.0.tgz#03e3764e3a4b42c1c5aae9f93d7f19320c5f35a6" @@ -242,6 +249,11 @@ popper.js@^1.14.3: resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.15.0.tgz#5560b99bbad7647e9faa475c6b8056621f5a4ff2" integrity sha512-w010cY1oCUmI+9KwwlWki+r5jxKfTFDVoadl7MSrIujHU5MJ5OR6HTDj6Xo8aoR/QsA56x8jKjA59qGH4ELtrA== +sprintf-js@^1.0.3, sprintf-js@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" + integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== + startbootstrap-sb-admin@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/startbootstrap-sb-admin/-/startbootstrap-sb-admin-4.0.0.tgz#cf141a260d031b36bdc013c68200a1c1ea6c9881"