diff --git a/localization/strings.pot b/localization/strings.pot
index d4e3d725..fcd9172d 100644
--- a/localization/strings.pot
+++ b/localization/strings.pot
@@ -265,7 +265,7 @@ 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"
+msgid "This means 1 %1$s purchased will be converted into %2$s %3$s in stock"
msgstr ""
msgid "Login"
@@ -352,7 +352,7 @@ msgstr ""
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"
+msgid "Removed %1$s %2$s of %3$s from stock"
msgstr ""
msgid "About grocy"
@@ -364,19 +364,16 @@ msgstr ""
msgid "Released on"
msgstr ""
-msgid "Consume %s %s of %s"
+msgid "Added %1$s %2$s of %3$s to stock"
msgstr ""
-msgid "Added %s %s of %s to stock"
+msgid "Stock amount of %1$s is now %2$s %3$s"
msgstr ""
-msgid "Stock amount of %s is now %s %s"
+msgid "Tracked execution of chore %1$s on %2$s"
msgstr ""
-msgid "Tracked execution of chore %s on %s"
-msgstr ""
-
-msgid "Tracked charge cycle of battery %s on %s"
+msgid "Tracked charge cycle of battery %1$s on %2$s"
msgstr ""
msgid "Consume all %s which are currently in stock"
@@ -495,7 +492,7 @@ msgstr ""
msgid "Recipe"
msgstr ""
-msgid "Not enough in stock, %s missing, %s already on shopping list"
+msgid "Not enough in stock, %1$s missing, %2$s already on shopping list"
msgstr ""
msgid "Show notes"
@@ -905,10 +902,10 @@ msgstr ""
msgid "Add all list items to stock"
msgstr ""
-msgid "Add %s %s of %s to stock"
+msgid "Add %1$s of %2$s to stock"
msgstr ""
-msgid "Adding shopping list item %s of %s"
+msgid "Adding shopping list item %1$s of %2$s"
msgstr ""
msgid "Use a specific stock item"
@@ -917,7 +914,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 of %s as open"
+msgid "Mark %1$s of %2$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)"
@@ -926,13 +923,13 @@ msgstr ""
msgid "Default best before days after opened"
msgstr ""
-msgid "Marked %s %s of %s as opened"
+msgid "Marked %1$s of %2$s as opened"
msgstr ""
msgid "Mark as opened"
msgstr ""
-msgid "Expires on %s; Bought on %s"
+msgid "Expires on %1$s; Bought on %2$s"
msgstr ""
msgid "Not opened"
@@ -1061,7 +1058,7 @@ msgstr ""
msgid "Changelog"
msgstr ""
-msgid "will be multiplied a factor of %s to get %s"
+msgid "will be multiplied a factor of %1$s to get %2$s"
msgstr ""
msgid "The given date is earlier than today, are you sure?"
@@ -1115,7 +1112,7 @@ msgstr ""
msgid "Show less"
msgstr ""
-msgid "The amount must be between %s and %s"
+msgid "The amount must be between %1$s and %2$s"
msgstr ""
msgid "Day of month"
@@ -1201,10 +1198,7 @@ msgid_plural "Not enough in stock, %s ingredients missing"
msgstr[0] ""
msgstr[1] ""
-msgid "Consume %s of %s"
-msgstr ""
-
-msgid "The amount cannot be lower than %s or equal %s"
+msgid "The amount cannot be lower than %1$s or equal %2$s"
msgstr ""
msgid "Not enough in stock, but already on the shopping list"
@@ -1233,3 +1227,6 @@ msgstr ""
msgid "When enabled only the day of an execution is tracked, not the time"
msgstr ""
+
+msgid "Consume %1$s of %2$s"
+msgstr ""
diff --git a/public/viewjs/batteriesoverview.js b/public/viewjs/batteriesoverview.js
index fd3175ce..6c9f0dc5 100644
--- a/public/viewjs/batteriesoverview.js
+++ b/public/viewjs/batteriesoverview.js
@@ -107,7 +107,7 @@ $(document).on('click', '.track-charge-cycle-button', function(e)
}
Grocy.FrontendHelpers.EndUiBusy();
- toastr.success(__t('Tracked charge cycle of battery %s on %s', batteryName, trackedTime));
+ toastr.success(__t('Tracked charge cycle of battery %1$s on %2$s', batteryName, trackedTime));
RefreshContextualTimeago();
RefreshStatistics();
},
diff --git a/public/viewjs/batterytracking.js b/public/viewjs/batterytracking.js
index 22901bf3..67add80d 100644
--- a/public/viewjs/batterytracking.js
+++ b/public/viewjs/batterytracking.js
@@ -12,7 +12,7 @@
function(result)
{
Grocy.FrontendHelpers.EndUiBusy("batterytracking-form");
- toastr.success(__t('Tracked charge cycle of battery %s on %s', batteryDetails.battery.name, $('#tracked_time').find('input').val()) + ' ' + __t("Undo") + '');
+ toastr.success(__t('Tracked charge cycle of battery %1$s on %2$s', batteryDetails.battery.name, $('#tracked_time').find('input').val()) + ' ' + __t("Undo") + '');
$('#battery_id').val('');
$('#battery_id_text_input').focus();
diff --git a/public/viewjs/choreform.js b/public/viewjs/choreform.js
index 917c7c26..ebe74574 100644
--- a/public/viewjs/choreform.js
+++ b/public/viewjs/choreform.js
@@ -117,6 +117,6 @@ $('.input-group-chore-period-type').on('change', function(e)
$("label[for='period_days']").text(__t("Day of month"));
$("#period_days").attr("min", "1");
$("#period_days").attr("max", "31");
- $("#period_days").parent().find(".invalid-feedback").text(__t('The amount must be between %s and %s', "1", "31"));
+ $("#period_days").parent().find(".invalid-feedback").text(__t('The amount must be between %1$s and %2$s', "1", "31"));
}
});
diff --git a/public/viewjs/choresoverview.js b/public/viewjs/choresoverview.js
index dfd55701..eabcdcb5 100644
--- a/public/viewjs/choresoverview.js
+++ b/public/viewjs/choresoverview.js
@@ -115,7 +115,7 @@ $(document).on('click', '.track-chore-button', function(e)
}
Grocy.FrontendHelpers.EndUiBusy();
- toastr.success(__t('Tracked execution of chore %s on %s', choreName, trackedTime));
+ toastr.success(__t('Tracked execution of chore %1$s on %2$s', choreName, trackedTime));
RefreshContextualTimeago();
RefreshStatistics();
},
diff --git a/public/viewjs/choretracking.js b/public/viewjs/choretracking.js
index 2adefaa8..6218008b 100644
--- a/public/viewjs/choretracking.js
+++ b/public/viewjs/choretracking.js
@@ -12,7 +12,7 @@
function(result)
{
Grocy.FrontendHelpers.EndUiBusy("choretracking-form");
- toastr.success(__t('Tracked execution of chore %s on %s', choreDetails.chore.name, Grocy.Components.DateTimePicker.GetValue()) + ' ' + __t("Undo") + '');
+ toastr.success(__t('Tracked execution of chore %1$s on %2$s', choreDetails.chore.name, Grocy.Components.DateTimePicker.GetValue()) + ' ' + __t("Undo") + '');
$('#chore_id').val('');
$('#chore_id_text_input').focus();
diff --git a/public/viewjs/consume.js b/public/viewjs/consume.js
index 3649a80e..febda997 100644
--- a/public/viewjs/consume.js
+++ b/public/viewjs/consume.js
@@ -66,7 +66,7 @@
}
Grocy.FrontendHelpers.EndUiBusy("consume-form");
- toastr.success(__t('Removed %s %s of %s from stock', Math.abs(result.amount), __n(Math.abs(result.amount), productDetails.quantity_unit_stock.name, productDetails.quantity_unit_stock.name_plural), productDetails.product.name) + ' ' + __t("Undo") + '');
+ toastr.success(__t('Removed %1$s %2$s of %3$s from stock', Math.abs(result.amount), __n(Math.abs(result.amount), productDetails.quantity_unit_stock.name, productDetails.quantity_unit_stock.name_plural), productDetails.product.name) + ' ' + __t("Undo") + '');
$("#amount").attr("min", "1");
$("#amount").attr("max", "999999");
@@ -133,7 +133,7 @@ $('#save-mark-as-open-button').on('click', function(e)
}
Grocy.FrontendHelpers.EndUiBusy("consume-form");
- toastr.success(__t('Marked %s %s of %s as opened', jsonForm.amount, __n(jsonForm.amount, productDetails.quantity_unit_stock.name, productDetails.quantity_unit_stock.name_plural), productDetails.product.name) + ' ' + __t("Undo") + '');
+ toastr.success(__t('Marked %1$s of %2$s as opened', jsonForm.amount + " " + __n(jsonForm.amount, productDetails.quantity_unit_stock.name, productDetails.quantity_unit_stock.name_plural), productDetails.product.name) + ' ' + __t("Undo") + '');
$('#amount').val(Grocy.UserSettings.stock_default_consume_amount);
Grocy.Components.ProductPicker.Clear();
@@ -179,20 +179,20 @@ Grocy.Components.ProductPicker.GetPicker().on('change', function(e)
{
$("#amount").attr("min", "0.01");
$("#amount").attr("step", "0.01");
- $("#amount").parent().find(".invalid-feedback").text(__t('The amount must be between %s and %s', 0.01.toLocaleString(), parseFloat(productDetails.stock_amount).toLocaleString()));
+ $("#amount").parent().find(".invalid-feedback").text(__t('The amount must be between %1$s and %2$s', 0.01.toLocaleString(), parseFloat(productDetails.stock_amount).toLocaleString()));
}
else
{
$("#amount").attr("min", "1");
$("#amount").attr("step", "1");
- $("#amount").parent().find(".invalid-feedback").text(__t('The amount must be between %s and %s', "1", parseFloat(productDetails.stock_amount).toLocaleString()));
+ $("#amount").parent().find(".invalid-feedback").text(__t('The amount must be between %1$s and %2$s', "1", parseFloat(productDetails.stock_amount).toLocaleString()));
}
if (productDetails.product.enable_tare_weight_handling == 1)
{
$("#amount").attr("min", productDetails.product.tare_weight);
$('#amount').attr('max', parseFloat(productDetails.stock_amount) + parseFloat(productDetails.product.tare_weight));
- $("#amount").parent().find(".invalid-feedback").text(__t('The amount must be between %s and %s', parseFloat(productDetails.product.tare_weight).toLocaleString(), (parseFloat(productDetails.stock_amount) + parseFloat(productDetails.product.tare_weight)).toLocaleString()));
+ $("#amount").parent().find(".invalid-feedback").text(__t('The amount must be between %1$s and %2$s', parseFloat(productDetails.product.tare_weight).toLocaleString(), (parseFloat(productDetails.stock_amount) + parseFloat(productDetails.product.tare_weight)).toLocaleString()));
$("#tare-weight-handling-info").removeClass("d-none");
}
else
@@ -244,7 +244,7 @@ Grocy.Components.ProductPicker.GetPicker().on('change', function(e)
{
$("#specific_stock_entry").append($("