diff --git a/deltachat-ffi/deltachat.h b/deltachat-ffi/deltachat.h
index 65a2a3d1d..de4842eb7 100644
--- a/deltachat-ffi/deltachat.h
+++ b/deltachat-ffi/deltachat.h
@@ -6020,6 +6020,11 @@ void dc_event_unref(dc_event_t* event);
/// Used as the default name for broadcast lists; a number may be added.
#define DC_STR_BROADCAST_LIST 115
+/// "%1$s of %2$s used"
+///
+/// Used for describing resource usage, resulting string will be eg. "1.2 GiB of 3 GiB used".
+#define DC_STR_PART_OF_TOTAL_USED 116
+
/**
* @}
*/
diff --git a/src/scheduler/connectivity.rs b/src/scheduler/connectivity.rs
index be96bbf3e..8b534215d 100644
--- a/src/scheduler/connectivity.rs
+++ b/src/scheduler/connectivity.rs
@@ -460,18 +460,26 @@ impl Context {
ret += &match &resource.name {
Atom(resource_name) => {
format!(
- "{}: {} of {} used",
+ "{}: {}",
&*escaper::encode_minimal(resource_name),
- resource.usage.to_string(),
- resource.limit.to_string(),
+ stock_str::part_of_total_used(
+ self,
+ resource.usage.to_string(),
+ resource.limit.to_string()
+ )
+ .await,
)
}
Message => {
format!(
- "{}: {} of {} used",
+ "{}: {}",
stock_str::messages(self).await,
- resource.usage.to_string(),
- resource.limit.to_string(),
+ stock_str::part_of_total_used(
+ self,
+ resource.usage.to_string(),
+ resource.limit.to_string()
+ )
+ .await,
)
}
Storage => {
@@ -487,7 +495,7 @@ impl Context {
let limit = (resource.limit * 1024)
.file_size(file_size_opts::BINARY)
.unwrap_or_default();
- format!("{} of {} used", usage, limit)
+ stock_str::part_of_total_used(self, usage, limit).await
}
};
diff --git a/src/stock_str.rs b/src/stock_str.rs
index e9fd1e621..4d554613b 100644
--- a/src/stock_str.rs
+++ b/src/stock_str.rs
@@ -314,6 +314,9 @@ pub enum StockMessage {
#[strum(props(fallback = "Broadcast List"))]
BroadcastList = 115,
+
+ #[strum(props(fallback = "%1$s of %2$s used"))]
+ PartOfTotallUsed = 116,
}
impl StockMessage {
@@ -988,6 +991,18 @@ pub(crate) async fn messages(context: &Context) -> String {
translated(context, StockMessage::Messages).await
}
+/// Stock string: `%1$s of %2$s used`.
+pub(crate) async fn part_of_total_used(
+ context: &Context,
+ part: impl AsRef,
+ total: impl AsRef,
+) -> String {
+ translated(context, StockMessage::PartOfTotallUsed)
+ .await
+ .replace1(part)
+ .replace2(total)
+}
+
/// Stock string: `Broadcast List`.
/// Used as the default name for broadcast lists; a number may be added.
pub(crate) async fn broadcast_list(context: &Context) -> String {