From db5e701810f17aef70a2bea078de27f0e4386c06 Mon Sep 17 00:00:00 2001
From: Aaron Pham <29749331+aarnphm@users.noreply.github.com>
Date: Sat, 10 Feb 2024 22:09:57 +0000
Subject: [PATCH] feat(i18n): support parsing callouts (#834)

---
 quartz/i18n/locales/en-US.ts       |   15 +++++
 quartz/i18n/locales/de-DE.ts       |   15 +++++
 quartz/i18n/locales/fr-FR.ts       |   15 +++++
 quartz/plugins/transformers/ofm.ts |   13 +++-
 quartz/i18n/locales/ar-SA.ts       |   15 +++++
 quartz/i18n/locales/ro-RO.ts       |   15 +++++
 quartz/i18n/locales/uk-UA.ts       |   15 +++++
 quartz/i18n/index.ts               |    3 
 quartz/i18n/locales/nl-NL.ts       |   15 +++++
 quartz/i18n/locales/ja-JP.ts       |   15 +++++
 quartz/i18n/locales/definition.ts  |   17 +++++
 quartz/i18n/locales/es-ES.ts       |   15 +++++
 12 files changed, 164 insertions(+), 4 deletions(-)

diff --git a/quartz/i18n/index.ts b/quartz/i18n/index.ts
index f9758d3..a422acb 100644
--- a/quartz/i18n/index.ts
+++ b/quartz/i18n/index.ts
@@ -1,4 +1,4 @@
-import { Translation } from "./locales/definition"
+import { Translation, CalloutTranslation } from "./locales/definition"
 import en from "./locales/en-US"
 import fr from "./locales/fr-FR"
 import ja from "./locales/ja-JP"
@@ -44,3 +44,4 @@
 export const defaultTranslation = "en-US"
 export const i18n = (locale: ValidLocale): Translation => TRANSLATIONS[locale ?? defaultTranslation]
 export type ValidLocale = keyof typeof TRANSLATIONS
+export type ValidCallout = keyof CalloutTranslation
diff --git a/quartz/i18n/locales/ar-SA.ts b/quartz/i18n/locales/ar-SA.ts
index 9c29b4d..d8efeff 100644
--- a/quartz/i18n/locales/ar-SA.ts
+++ b/quartz/i18n/locales/ar-SA.ts
@@ -6,6 +6,21 @@
     description: "لم يتم تقديم أي وصف",
   },
   components: {
+    callout: {
+      note: "ملاحظة",
+      abstract: "ملخص",
+      info: "معلومات",
+      todo: "للقيام",
+      tip: "نصيحة",
+      success: "نجاح",
+      question: "سؤال",
+      warning: "تحذير",
+      failure: "فشل",
+      danger: "خطر",
+      bug: "خلل",
+      example: "مثال",
+      quote: "اقتباس",
+    },
     backlinks: {
       title: "وصلات العودة",
       noBacklinksFound: "لا يوجد وصلات عودة",
diff --git a/quartz/i18n/locales/de-DE.ts b/quartz/i18n/locales/de-DE.ts
index c6531be..f2125bf 100644
--- a/quartz/i18n/locales/de-DE.ts
+++ b/quartz/i18n/locales/de-DE.ts
@@ -6,6 +6,21 @@
     description: "Keine Beschreibung angegeben",
   },
   components: {
+    callout: {
+      note: "Hinweis",
+      abstract: "Zusammenfassung",
+      info: "Info",
+      todo: "Zu erledigen",
+      tip: "Tipp",
+      success: "Erfolg",
+      question: "Frage",
+      warning: "Warnung",
+      failure: "Misserfolg",
+      danger: "Gefahr",
+      bug: "Fehler",
+      example: "Beispiel",
+      quote: "Zitat",
+    },
     backlinks: {
       title: "Backlinks",
       noBacklinksFound: "Keine Backlinks gefunden",
diff --git a/quartz/i18n/locales/definition.ts b/quartz/i18n/locales/definition.ts
index de607eb..baf2a58 100644
--- a/quartz/i18n/locales/definition.ts
+++ b/quartz/i18n/locales/definition.ts
@@ -1,11 +1,28 @@
 import { FullSlug } from "../../util/path"
 
+export interface CalloutTranslation {
+  note: string
+  abstract: string
+  info: string
+  todo: string
+  tip: string
+  success: string
+  question: string
+  warning: string
+  failure: string
+  danger: string
+  bug: string
+  example: string
+  quote: string
+}
+
 export interface Translation {
   propertyDefaults: {
     title: string
     description: string
   }
   components: {
+    callout: CalloutTranslation
     backlinks: {
       title: string
       noBacklinksFound: string
diff --git a/quartz/i18n/locales/en-US.ts b/quartz/i18n/locales/en-US.ts
index 6ba6d0e..3ba28a0 100644
--- a/quartz/i18n/locales/en-US.ts
+++ b/quartz/i18n/locales/en-US.ts
@@ -6,6 +6,21 @@
     description: "No description provided",
   },
   components: {
+    callout: {
+      note: "Note",
+      abstract: "Abstract",
+      info: "Info",
+      todo: "Todo",
+      tip: "Tip",
+      success: "Success",
+      question: "Question",
+      warning: "Warning",
+      failure: "Failure",
+      danger: "Danger",
+      bug: "Bug",
+      example: "Example",
+      quote: "Quote",
+    },
     backlinks: {
       title: "Backlinks",
       noBacklinksFound: "No backlinks found",
diff --git a/quartz/i18n/locales/es-ES.ts b/quartz/i18n/locales/es-ES.ts
index 4d39542..92a74a0 100644
--- a/quartz/i18n/locales/es-ES.ts
+++ b/quartz/i18n/locales/es-ES.ts
@@ -6,6 +6,21 @@
     description: "Sin descripción",
   },
   components: {
+    callout: {
+      note: "Nota",
+      abstract: "Resumen",
+      info: "Información",
+      todo: "Por hacer",
+      tip: "Consejo",
+      success: "Éxito",
+      question: "Pregunta",
+      warning: "Advertencia",
+      failure: "Fallo",
+      danger: "Peligro",
+      bug: "Error",
+      example: "Ejemplo",
+      quote: "Cita",
+    },
     backlinks: {
       title: "Enlaces de Retroceso",
       noBacklinksFound: "No se han encontrado enlaces traseros",
diff --git a/quartz/i18n/locales/fr-FR.ts b/quartz/i18n/locales/fr-FR.ts
index b30ff04..fee1ad9 100644
--- a/quartz/i18n/locales/fr-FR.ts
+++ b/quartz/i18n/locales/fr-FR.ts
@@ -6,6 +6,21 @@
     description: "Aucune description fournie",
   },
   components: {
+    callout: {
+      note: "Note",
+      abstract: "Résumé",
+      info: "Info",
+      todo: "À faire",
+      tip: "Conseil",
+      success: "Succès",
+      question: "Question",
+      warning: "Avertissement",
+      failure: "Échec",
+      danger: "Danger",
+      bug: "Bogue",
+      example: "Exemple",
+      quote: "Citation",
+    },
     backlinks: {
       title: "Liens retour",
       noBacklinksFound: "Aucun lien retour trouvé",
diff --git a/quartz/i18n/locales/ja-JP.ts b/quartz/i18n/locales/ja-JP.ts
index a886d84..f684c36 100644
--- a/quartz/i18n/locales/ja-JP.ts
+++ b/quartz/i18n/locales/ja-JP.ts
@@ -6,6 +6,21 @@
     description: "説明なし",
   },
   components: {
+    callout: {
+      note: "ノート",
+      abstract: "抄録",
+      info: "情報",
+      todo: "やるべきこと",
+      tip: "ヒント",
+      success: "成功",
+      question: "質問",
+      warning: "警告",
+      failure: "失敗",
+      danger: "危険",
+      bug: "バグ",
+      example: "例",
+      quote: "引用",
+    },
     backlinks: {
       title: "バックリンク",
       noBacklinksFound: "バックリンクはありません",
diff --git a/quartz/i18n/locales/nl-NL.ts b/quartz/i18n/locales/nl-NL.ts
index 5426a1e..b403623 100644
--- a/quartz/i18n/locales/nl-NL.ts
+++ b/quartz/i18n/locales/nl-NL.ts
@@ -6,6 +6,21 @@
     description: "Geen beschrijving gegeven.",
   },
   components: {
+    callout: {
+      note: "Notitie",
+      abstract: "Samenvatting",
+      info: "Info",
+      todo: "Te doen",
+      tip: "Tip",
+      success: "Succes",
+      question: "Vraag",
+      warning: "Waarschuwing",
+      failure: "Mislukking",
+      danger: "Gevaar",
+      bug: "Bug",
+      example: "Voorbeeld",
+      quote: "Citaat",
+    },
     backlinks: {
       title: "Backlinks",
       noBacklinksFound: "Geen backlinks gevonden",
diff --git a/quartz/i18n/locales/ro-RO.ts b/quartz/i18n/locales/ro-RO.ts
index 8fce4a9..39f1344 100644
--- a/quartz/i18n/locales/ro-RO.ts
+++ b/quartz/i18n/locales/ro-RO.ts
@@ -6,6 +6,21 @@
     description: "Nici o descriere furnizată",
   },
   components: {
+    callout: {
+      note: "Notă",
+      abstract: "Rezumat",
+      info: "Informație",
+      todo: "De făcut",
+      tip: "Sfat",
+      success: "Succes",
+      question: "Întrebare",
+      warning: "Avertisment",
+      failure: "Eșec",
+      danger: "Pericol",
+      bug: "Bug",
+      example: "Exemplu",
+      quote: "Citat",
+    },
     backlinks: {
       title: "Legături înapoi",
       noBacklinksFound: "Nu s-au găsit legături înapoi",
diff --git a/quartz/i18n/locales/uk-UA.ts b/quartz/i18n/locales/uk-UA.ts
index bf664b6..d60b1f8 100644
--- a/quartz/i18n/locales/uk-UA.ts
+++ b/quartz/i18n/locales/uk-UA.ts
@@ -6,6 +6,21 @@
     description: "Опис не надано",
   },
   components: {
+    callout: {
+      note: "Примітка",
+      abstract: "Абстракт",
+      info: "Інформація",
+      todo: "Завдання",
+      tip: "Порада",
+      success: "Успіх",
+      question: "Питання",
+      warning: "Попередження",
+      failure: "Невдача",
+      danger: "Небезпека",
+      bug: "Баг",
+      example: "Приклад",
+      quote: "Цитата",
+    },
     backlinks: {
       title: "Зворотні посилання",
       noBacklinksFound: "Зворотних посилань не знайдено",
diff --git a/quartz/plugins/transformers/ofm.ts b/quartz/plugins/transformers/ofm.ts
index f8a28c4..a9d3945 100644
--- a/quartz/plugins/transformers/ofm.ts
+++ b/quartz/plugins/transformers/ofm.ts
@@ -1,5 +1,5 @@
 import { QuartzTransformerPlugin } from "../types"
-import { Root, Html, BlockContent, DefinitionContent, Paragraph, Code } from "mdast"
+import { Blockquote, Root, Html, BlockContent, DefinitionContent, Paragraph, Code } from "mdast"
 import { Element, Literal, Root as HtmlRoot } from "hast"
 import { ReplaceFunction, findAndReplace as mdastFindReplace } from "mdast-util-find-and-replace"
 import { slug as slugAnchor } from "github-slugger"
@@ -17,6 +17,7 @@
 import { PhrasingContent } from "mdast-util-find-and-replace/lib"
 import { capitalize } from "../../util/lang"
 import { PluggableList } from "unified"
+import { ValidCallout, i18n } from "../../i18n"
 
 export interface Options {
   comments: boolean
@@ -185,8 +186,9 @@
 
       return src
     },
-    markdownPlugins() {
+    markdownPlugins(ctx) {
       const plugins: PluggableList = []
+      const cfg = ctx.cfg.configuration
 
       // regex replacements
       plugins.push(() => {
@@ -407,7 +409,12 @@
                   children: [
                     {
                       type: "text",
-                      value: useDefaultTitle ? capitalize(calloutType) : titleContent + " ",
+                      value: useDefaultTitle
+                        ? capitalize(
+                            i18n(cfg.locale).components.callout[calloutType as ValidCallout] ??
+                              calloutType,
+                          )
+                        : titleContent + " ",
                     },
                     ...restOfTitle,
                   ],

--
Gitblit v1.10.0