Add default cookie banner translations for fr, de, es

New banners now get French, German, and Spanish UI string
translations seeded alongside English during creation.

Signed-off-by: Émile Ré <emile@getprobo.com>
This commit is contained in:
Émile Ré
2026-04-23 11:11:53 +04:00
parent 04001c0d90
commit 1ff1901331
2 changed files with 146 additions and 46 deletions

View File

@@ -29,35 +29,133 @@ var defaultCategories = []struct {
{"Uncategorised", "Cookies that have not been assigned to a category yet.", coredata.CookieCategoryKindUncategorised, 4},
}
var defaultUIStrings = map[string]string{
"banner_title": "Cookie Preferences",
"banner_description": "We use cookies to improve your experience and analyze site traffic. {{privacy_policy_link}}",
"button_accept_all": "Accept all",
"button_reject_all": "Reject all",
"button_customize": "Customize",
"button_save": "Save preferences",
"panel_title": "Customise Preferences",
"panel_description": "Choose which cookie categories to allow. {{necessary_category}} cookies are always active as they are needed for the site to work.",
"label_description": "Description: {{value}}",
"label_duration": "Duration: {{value}}",
"aria_close": "Close",
"aria_show_details": "Show cookie details",
"aria_hide_details": "Hide cookie details",
"aria_cookie_settings": "Cookie settings",
"privacy_policy_link_text": "Privacy Policy",
"placeholder_text": "This content requires {{category}} cookies.",
"placeholder_button": "Manage cookie preferences",
"duration_year_one": "{{count}} year",
"duration_year_other": "{{count}} years",
"duration_month_one": "{{count}} month",
"duration_month_other": "{{count}} months",
"duration_week_one": "{{count}} week",
"duration_week_other": "{{count}} weeks",
"duration_day_one": "{{count}} day",
"duration_day_other": "{{count}} days",
"duration_hour_one": "{{count}} hour",
"duration_hour_other": "{{count}} hours",
"duration_minute_one": "{{count}} minute",
"duration_minute_other": "{{count}} minutes",
"duration_session": "session",
var defaultUIStringsByLanguage = map[string]map[string]string{
"en": {
"banner_title": "Cookie Preferences",
"banner_description": "We use cookies to improve your experience and analyze site traffic. {{privacy_policy_link}}",
"button_accept_all": "Accept all",
"button_reject_all": "Reject all",
"button_customize": "Customize",
"button_save": "Save preferences",
"panel_title": "Customise Preferences",
"panel_description": "Choose which cookie categories to allow. {{necessary_category}} cookies are always active as they are needed for the site to work.",
"label_description": "Description: {{value}}",
"label_duration": "Duration: {{value}}",
"aria_close": "Close",
"aria_show_details": "Show cookie details",
"aria_hide_details": "Hide cookie details",
"aria_cookie_settings": "Cookie settings",
"privacy_policy_link_text": "Privacy Policy",
"placeholder_text": "This content requires {{category}} cookies.",
"placeholder_button": "Manage cookie preferences",
"duration_year_one": "{{count}} year",
"duration_year_other": "{{count}} years",
"duration_month_one": "{{count}} month",
"duration_month_other": "{{count}} months",
"duration_week_one": "{{count}} week",
"duration_week_other": "{{count}} weeks",
"duration_day_one": "{{count}} day",
"duration_day_other": "{{count}} days",
"duration_hour_one": "{{count}} hour",
"duration_hour_other": "{{count}} hours",
"duration_minute_one": "{{count}} minute",
"duration_minute_other": "{{count}} minutes",
"duration_session": "session",
},
"fr": {
"banner_title": "Préférences de cookies",
"banner_description": "Nous utilisons des cookies pour améliorer votre expérience et analyser le trafic du site. {{privacy_policy_link}}",
"button_accept_all": "Tout accepter",
"button_reject_all": "Tout refuser",
"button_customize": "Personnaliser",
"button_save": "Enregistrer les préférences",
"panel_title": "Personnaliser les préférences",
"panel_description": "Choisissez les catégories de cookies à autoriser. Les cookies {{necessary_category}} sont toujours actifs car ils sont nécessaires au fonctionnement du site.",
"label_description": "Description : {{value}}",
"label_duration": "Durée : {{value}}",
"aria_close": "Fermer",
"aria_show_details": "Afficher les détails des cookies",
"aria_hide_details": "Masquer les détails des cookies",
"aria_cookie_settings": "Paramètres des cookies",
"privacy_policy_link_text": "Politique de confidentialité",
"placeholder_text": "Ce contenu nécessite les cookies {{category}}.",
"placeholder_button": "Gérer les préférences de cookies",
"duration_year_one": "{{count}} an",
"duration_year_other": "{{count}} ans",
"duration_month_one": "{{count}} mois",
"duration_month_other": "{{count}} mois",
"duration_week_one": "{{count}} semaine",
"duration_week_other": "{{count}} semaines",
"duration_day_one": "{{count}} jour",
"duration_day_other": "{{count}} jours",
"duration_hour_one": "{{count}} heure",
"duration_hour_other": "{{count}} heures",
"duration_minute_one": "{{count}} minute",
"duration_minute_other": "{{count}} minutes",
"duration_session": "session",
},
"de": {
"banner_title": "Cookie-Einstellungen",
"banner_description": "Wir verwenden Cookies, um Ihre Erfahrung zu verbessern und den Website-Verkehr zu analysieren. {{privacy_policy_link}}",
"button_accept_all": "Alle akzeptieren",
"button_reject_all": "Alle ablehnen",
"button_customize": "Anpassen",
"button_save": "Einstellungen speichern",
"panel_title": "Einstellungen anpassen",
"panel_description": "Wählen Sie, welche Cookie-Kategorien zugelassen werden sollen. {{necessary_category}}-Cookies sind immer aktiv, da sie für den Betrieb der Website erforderlich sind.",
"label_description": "Beschreibung: {{value}}",
"label_duration": "Dauer: {{value}}",
"aria_close": "Schließen",
"aria_show_details": "Cookie-Details anzeigen",
"aria_hide_details": "Cookie-Details ausblenden",
"aria_cookie_settings": "Cookie-Einstellungen",
"privacy_policy_link_text": "Datenschutzrichtlinie",
"placeholder_text": "Dieser Inhalt erfordert {{category}}-Cookies.",
"placeholder_button": "Cookie-Einstellungen verwalten",
"duration_year_one": "{{count}} Jahr",
"duration_year_other": "{{count}} Jahre",
"duration_month_one": "{{count}} Monat",
"duration_month_other": "{{count}} Monate",
"duration_week_one": "{{count}} Woche",
"duration_week_other": "{{count}} Wochen",
"duration_day_one": "{{count}} Tag",
"duration_day_other": "{{count}} Tage",
"duration_hour_one": "{{count}} Stunde",
"duration_hour_other": "{{count}} Stunden",
"duration_minute_one": "{{count}} Minute",
"duration_minute_other": "{{count}} Minuten",
"duration_session": "Sitzung",
},
"es": {
"banner_title": "Preferencias de cookies",
"banner_description": "Utilizamos cookies para mejorar su experiencia y analizar el tráfico del sitio. {{privacy_policy_link}}",
"button_accept_all": "Aceptar todo",
"button_reject_all": "Rechazar todo",
"button_customize": "Personalizar",
"button_save": "Guardar preferencias",
"panel_title": "Personalizar preferencias",
"panel_description": "Elija qué categorías de cookies permitir. Las cookies {{necessary_category}} siempre están activas ya que son necesarias para el funcionamiento del sitio.",
"label_description": "Descripción: {{value}}",
"label_duration": "Duración: {{value}}",
"aria_close": "Cerrar",
"aria_show_details": "Mostrar detalles de cookies",
"aria_hide_details": "Ocultar detalles de cookies",
"aria_cookie_settings": "Configuración de cookies",
"privacy_policy_link_text": "Política de privacidad",
"placeholder_text": "Este contenido requiere cookies de {{category}}.",
"placeholder_button": "Gestionar preferencias de cookies",
"duration_year_one": "{{count}} año",
"duration_year_other": "{{count}} años",
"duration_month_one": "{{count}} mes",
"duration_month_other": "{{count}} meses",
"duration_week_one": "{{count}} semana",
"duration_week_other": "{{count}} semanas",
"duration_day_one": "{{count}} día",
"duration_day_other": "{{count}} días",
"duration_hour_one": "{{count}} hora",
"duration_hour_other": "{{count}} horas",
"duration_minute_one": "{{count}} minuto",
"duration_minute_other": "{{count}} minutos",
"duration_session": "sesión",
},
}

View File

@@ -545,23 +545,25 @@ func (s *Service) CreateCookieBanner(
}
}
defaultTranslationsJSON, err := json.Marshal(defaultUIStrings)
if err != nil {
return fmt.Errorf("cannot marshal default UI strings: %w", err)
}
for lang, uiStrings := range defaultUIStringsByLanguage {
translationsJSON, err := json.Marshal(uiStrings)
if err != nil {
return fmt.Errorf("cannot marshal default UI strings for %s: %w", lang, err)
}
defaultTranslation := &coredata.CookieBannerTranslation{
ID: gid.New(scope.GetTenantID(), coredata.CookieBannerTranslationEntityType),
OrganizationID: banner.OrganizationID,
CookieBannerID: banner.ID,
Language: "en",
Translations: defaultTranslationsJSON,
CreatedAt: now,
UpdatedAt: now,
}
translation := &coredata.CookieBannerTranslation{
ID: gid.New(scope.GetTenantID(), coredata.CookieBannerTranslationEntityType),
OrganizationID: banner.OrganizationID,
CookieBannerID: banner.ID,
Language: lang,
Translations: translationsJSON,
CreatedAt: now,
UpdatedAt: now,
}
if err := defaultTranslation.Insert(ctx, tx, scope); err != nil {
return fmt.Errorf("cannot insert default translation: %w", err)
if err := translation.Insert(ctx, tx, scope); err != nil {
return fmt.Errorf("cannot insert default translation for %s: %w", lang, err)
}
}
if _, err := s.ensureDraftVersionForBanner(ctx, tx, scope, banner.ID); err != nil {