Translate English built from template literals in attributes

i18n-literals now flags a template literal in a UI attribute or prop when
there are words between its values: `Remove ${email}`, `${name} — shared by
${owner}`. It cannot be a catalogue key as written, so neither the key
exemption nor the sentence-shape test applies. A template that is only
punctuation around values, like `${name} (${size})`, is left alone.

The twelve it found are now keys with placeholders: the quota bar title,
the address menu's label, a folder's subfolder unread count, a recipient
chip's remove button, the contact editor's title, shared and available
calendars and address books, the date and time fields' labels, the
attachment title's fallback name, and the free/busy bar. The bar showed
the raw JMAP busyStatus ("confirmed") and now says Busy, Tentative or
Unavailable.

11 new keys in all nine catalogues. Remove {address}, Date, Time, Busy and
Tentative already existed.
This commit is contained in:
2026-09-14 08:26:34 -07:00
parent aa57c59703
commit fecae2acd3
21 changed files with 144 additions and 17 deletions
+11
View File
@@ -1223,6 +1223,17 @@ export const catalog: Catalog = {
"Send now instead": "Stattdessen jetzt senden",
"Switch to plain text": "Zu Nur-Text wechseln",
"Switch to rich text": "Zu formatiertem Text wechseln",
"{used} of {total} used": "{used} von {total} belegt",
"Actions for {address}": "Aktionen für {address}",
"{here} here, {inSubfolders} in subfolders": "{here} hier, {inSubfolders} in Unterordnern",
"Edit {name}": "{name} bearbeiten",
"{name} — shared by {owner}": "{name} — freigegeben von {owner}",
"{name} — from {owner}": "{name} — von {owner}",
"{label} (date)": "{label} (Datum)",
"{label} (time)": "{label} (Uhrzeit)",
"{status}: {start} {end}": "{status}: {start} {end}",
"Unavailable": "Nicht verfügbar",
"Attachment": "Anhang",
"QR code": "QR-Code",
"Draft discarded": "Entwurf verworfen",
"Draft saved": "Entwurf gespeichert",
+11
View File
@@ -1196,6 +1196,17 @@ export const catalog: Catalog = {
"Send now instead": "Enviar ahora, sin programar",
"Switch to plain text": "Cambiar a texto sin formato",
"Switch to rich text": "Cambiar a texto enriquecido",
"{used} of {total} used": "{used} de {total} usados",
"Actions for {address}": "Acciones para {address}",
"{here} here, {inSubfolders} in subfolders": "{here} aquí, {inSubfolders} en subcarpetas",
"Edit {name}": "Editar {name}",
"{name} — shared by {owner}": "{name} — compartido por {owner}",
"{name} — from {owner}": "{name} — de {owner}",
"{label} (date)": "{label} (fecha)",
"{label} (time)": "{label} (hora)",
"{status}: {start} {end}": "{status}: {start} {end}",
"Unavailable": "No disponible",
"Attachment": "Archivo adjunto",
"QR code": "Código QR",
"Draft discarded": "Borrador descartado",
"Draft saved": "Borrador guardado",
+11
View File
@@ -1201,6 +1201,17 @@ export const catalog: Catalog = {
"Send now instead": "Envoyer tout de suite",
"Switch to plain text": "Passer en texte brut",
"Switch to rich text": "Passer en texte enrichi",
"{used} of {total} used": "{used} sur {total} utilisés",
"Actions for {address}": "Actions pour {address}",
"{here} here, {inSubfolders} in subfolders": "{here} ici, {inSubfolders} dans les sous-dossiers",
"Edit {name}": "Modifier {name}",
"{name} — shared by {owner}": "{name} — partagé par {owner}",
"{name} — from {owner}": "{name} — de {owner}",
"{label} (date)": "{label} (date)",
"{label} (time)": "{label} (heure)",
"{status}: {start} {end}": "{status} : {start} {end}",
"Unavailable": "Indisponible",
"Attachment": "Pièce jointe",
"QR code": "QR code",
"Draft discarded": "Brouillon abandonné",
"Draft saved": "Brouillon enregistré",
+11
View File
@@ -1204,6 +1204,17 @@ export const catalog: Catalog = {
"Send now instead": "予約をやめて今すぐ送信",
"Switch to plain text": "プレーンテキストに切り替え",
"Switch to rich text": "リッチテキストに切り替え",
"{used} of {total} used": "{total} 中 {used} を使用",
"Actions for {address}": "{address} の操作",
"{here} here, {inSubfolders} in subfolders": "このフォルダー {here}、サブフォルダー {inSubfolders}",
"Edit {name}": "{name} を編集",
"{name} — shared by {owner}": "{name} — {owner} が共有",
"{name} — from {owner}": "{name} — {owner} から",
"{label} (date)": "{label}(日付)",
"{label} (time)": "{label}(時刻)",
"{status}: {start} {end}": "{status}{start}{end}",
"Unavailable": "不在",
"Attachment": "添付ファイル",
"QR code": "QR コード",
"Draft discarded": "下書きを破棄しました",
"Draft saved": "下書きを保存しました",
+11
View File
@@ -1192,6 +1192,17 @@ export const catalog: Catalog = {
"Send now instead": "Toch nu verzenden",
"Switch to plain text": "Overschakelen naar platte tekst",
"Switch to rich text": "Overschakelen naar opgemaakte tekst",
"{used} of {total} used": "{used} van {total} gebruikt",
"Actions for {address}": "Acties voor {address}",
"{here} here, {inSubfolders} in subfolders": "{here} hier, {inSubfolders} in submappen",
"Edit {name}": "{name} bewerken",
"{name} — shared by {owner}": "{name} — gedeeld door {owner}",
"{name} — from {owner}": "{name} — van {owner}",
"{label} (date)": "{label} (datum)",
"{label} (time)": "{label} (tijd)",
"{status}: {start} {end}": "{status}: {start} {end}",
"Unavailable": "Niet beschikbaar",
"Attachment": "Bijlage",
"QR code": "QR-code",
"Draft discarded": "Concept weggegooid",
"Draft saved": "Concept opgeslagen",
+11
View File
@@ -1199,6 +1199,17 @@ export const catalog: Catalog = {
"Send now instead": "Enviar agora mesmo",
"Switch to plain text": "Mudar para texto simples",
"Switch to rich text": "Mudar para texto formatado",
"{used} of {total} used": "{used} de {total} usados",
"Actions for {address}": "Ações para {address}",
"{here} here, {inSubfolders} in subfolders": "{here} aqui, {inSubfolders} em subpastas",
"Edit {name}": "Editar {name}",
"{name} — shared by {owner}": "{name} — compartilhado por {owner}",
"{name} — from {owner}": "{name} — de {owner}",
"{label} (date)": "{label} (data)",
"{label} (time)": "{label} (hora)",
"{status}: {start} {end}": "{status}: {start} {end}",
"Unavailable": "Indisponível",
"Attachment": "Anexo",
"QR code": "Código QR",
"Draft discarded": "Rascunho descartado",
"Draft saved": "Rascunho salvo",
+11
View File
@@ -1198,6 +1198,17 @@ export const catalog: Catalog = {
"Send now instead": "Отправить сейчас",
"Switch to plain text": "Переключиться на обычный текст",
"Switch to rich text": "Переключиться на форматированный текст",
"{used} of {total} used": "Использовано {used} из {total}",
"Actions for {address}": "Действия для {address}",
"{here} here, {inSubfolders} in subfolders": "{here} здесь, {inSubfolders} во вложенных папках",
"Edit {name}": "Изменить: {name}",
"{name} — shared by {owner}": "{name} — общий доступ от {owner}",
"{name} — from {owner}": "{name} — от {owner}",
"{label} (date)": "{label} (дата)",
"{label} (time)": "{label} (время)",
"{status}: {start} {end}": "{status}: {start} {end}",
"Unavailable": "Недоступен",
"Attachment": "Вложение",
"QR code": "QR-код",
"Draft discarded": "Черновик удалён",
"Draft saved": "Черновик сохранён",
+11
View File
@@ -1192,6 +1192,17 @@ export const catalog: Catalog = {
"Send now instead": "Надіслати зараз",
"Switch to plain text": "Перейти на звичайний текст",
"Switch to rich text": "Перейти на форматований текст",
"{used} of {total} used": "Використано {used} з {total}",
"Actions for {address}": "Дії для {address}",
"{here} here, {inSubfolders} in subfolders": "{here} тут, {inSubfolders} у вкладених теках",
"Edit {name}": "Змінити: {name}",
"{name} — shared by {owner}": "{name} — спільний доступ від {owner}",
"{name} — from {owner}": "{name} — від {owner}",
"{label} (date)": "{label} (дата)",
"{label} (time)": "{label} (час)",
"{status}: {start} {end}": "{status}: {start} {end}",
"Unavailable": "Недоступний",
"Attachment": "Вкладення",
"QR code": "QR-код",
"Draft discarded": "Чернетку видалено",
"Draft saved": "Чернетку збережено",
+11
View File
@@ -1203,6 +1203,17 @@ export const catalog: Catalog = {
"Send now instead": "改为立即发送",
"Switch to plain text": "切换为纯文本",
"Switch to rich text": "切换为富文本",
"{used} of {total} used": "已使用 {used},共 {total}",
"Actions for {address}": "{address} 的操作",
"{here} here, {inSubfolders} in subfolders": "此处 {here},子文件夹 {inSubfolders}",
"Edit {name}": "编辑 {name}",
"{name} — shared by {owner}": "{name} — {owner} 共享",
"{name} — from {owner}": "{name} — 来自 {owner}",
"{label} (date)": "{label}(日期)",
"{label} (time)": "{label}(时间)",
"{status}: {start} {end}": "{status}{start}{end}",
"Unavailable": "不可用",
"Attachment": "附件",
"QR code": "二维码",
"Draft discarded": "草稿已放弃",
"Draft saved": "草稿已保存",